next* balance in the appropriate asset.next* assets to the useful asset on that chain, i.e. Arbitrum LP pools hold nextUSDC/USDC.next assets are held on the respective canonical domain for the asset. They are minted once the underlying asset is locked and a message arrives on the chain with the LP pool. For example, when staking in nextUSDC/USDC pool on Arbitrum:
nextUSDC is minted and delivered to the user.nextUSDC / USDC in a (roughly) 1:1 ratio on Arbitrum.nextUSDC / USDC value, nor are they able to unwind nextUSDC to USDC by sending a message back to the deposit chain.The following assets exist on the Amarok contracts as backing for the LP pools:
| Asset | Amount Locked | Canonical Chain | Pool Chains |
|---|---|---|---|
| USDC | 147,910.8749 | Ethereum | Arbitrum One (42161); BNB Chain (56); Base (8453); Gnosis Chain (100); Linea (59144); Metis (1088); Optimism (10); Polygon (137) |
| USDT | 16,653.1342 | Ethereum | Arbitrum One (42161); BNB Chain (56); Gnosis Chain (100); Linea (59144); Metis (1088); Optimism (10); Polygon (137) |
| WETH | 75.7338 | Ethereum | Arbitrum One (42161); BNB Chain (56); Base (8453); Gnosis Chain (100); Linea (59144); Metis (1088); Mode (34443); Optimism (10); Polygon (137); X Layer (196); Mode (34443) |
| DAI | 15,674.2730 | Ethereum | Arbitrum One (42161); BNB Chain (56); Base (8453); Gnosis Chain (100); Linea (59144); Optimism (10); Polygon (137) |
| xCLEAR | 52,200,633.756 | Ethereum | None |
| GIV | 11,216.27236 | Ethereum | Gnosis Chain (100); Optimism (10) |
Contract upgrade would add the following functionality to Ethereum (the only canonical domain):
function withdrawCanonical(address _asset, address _recipient) whenPaused onlyOwner public {
IERC20Metadata asset = IERC20Metadata(_asset);
// Withdraw entirety of held balance to recipient
uint256 amount = asset.balanceOf(address(this));
AssetLogic.handleOutgoingAsset(amount, _asset, _recipient);
}
🚧 This will ensure that no funds exist in the Amarok contracts. If any in-flight transfers exist for the listed assets that have not already been refunded, they can also exercise claims against this recovered capital by showing their xcall as proof of burn.
Contracts that have LP pools with balance would update the following functionality allowing users to redeem their LP tokens for the underlying pair:
function removeSwapLiquidity(...) external nonReentrant deadlineCheck(deadline) ~~whenNotPaused~~ returns (uint256[] memory)
function removeSwapLiquidity(...) external nonReentrant deadlineCheck(deadline) whenPaused returns (uint256[] memory)
withdrawCanonical function for all of the locked assets to send balance to community admin multisig.CLEAR from the mainnet Connext contracts.remove functions can be upgraded on the pool chains with the 7-day delay:
💡 Quick guide for the user
If you are holding LP tokens, you must:
- Remove the liquidity to get a balance of underlying assets.
- Burn the received
nextasset.If you have an ongoing transfer in flight for one of the listed assets, you must:
- Send the
xcalltransaction on the origin chain.- The amount of
nextasset burnt in thexcallwill represent your claimable amount, and it will be sent to the initiating caller of the origin chain.Note: Everything is redeemable on mainnet to minimize operational complexity.