Skip to content

Arcanum protocol

Decentralized asset management protocol that allows to create complicated asset management portfolio and manage them in a DeFi manner.

Read more about Arcanum

What is Arcanum?

Arcanum is a highly scalable fully decentralized ETF protocol.

Arcanum protocol acts as a platform for indexed exchange-traded funds in a form of multipools enforced by unique balancing mechanisms approved by the governance. Multipools are the foundational concept of Arcanum, enabling access to a multi asset liquidity with just a single token without dilution or imbalance and augmenting capital efficiency.

Arcanum enables generation of decentralised ETFs tracking the prices of crypto assets within multipools.

The ETF balance stabilization is enforced by the inbuilt algorithms determining the shares of assets in the equilibrium state of the pool in response to the changing market conditions, while dynamic pricing is supported by oracles and an aggregate of prices from leading volume exchanges.

$AAA, the governance token for Arcanum, is an ERC-20 token used for voting for the new ETFs issued by the protocol and their composition as well as can be farmed for providing liquidity for $AAA token and Arcanum ETFs. More on that in our future articles.

The concept behind Arcanum

The number of ETFs in the TradiFi world is growing every year; now there are more than 7 thousand of them, and the volume of their total assets exceeds 9 trillion US dollars. However, by now the ETF as a financial tool hasn't found its place in the DeFi arena and crypto in general. We see only a few products released by centralized institutional players which are greatly limited to be accessed by the retail users.

Surprisingly few attempts to create truly decentralized ETFs can be explained by the complexity of sustaining the ETFs price on the volatile crypto market. We do not claim absolute correctness of our approach but DeFi’s capabilities enables us to create a decentralized, permissionless indexes protocol with farming and trading opportunities where every ETF is managed by the DAO.

The ultimate goal of Arcanum is to provide greater asset management opportunities for users and expand the frontiers of DeFi through employing the best TradiFi concepts for the benefit of decentralized web.

Arcanum is highly scalable and establishes an explicit framework through its protocol to set up new pools and thus issue ETFs which by itself make the space diverse and more accessible.

The mechanics

The DeFi nature of Arcanum enables us to combine two primitives in one - the ETF as an ultimate asset management tool, where a user can provide liquidity in the asset of their convenience which is diversified into a more profitable portfolio that is managed by the public and governance-managed rules, and a multipool with the decentralized swapping mechanics where users can interact with protocol directly and bring it to balance by swapping, minting/burning and leverage reward for their stabilizing actions.

By merging these two primitives, we get an on-chain self-balanced system combining a DEX and an asset management platform in one.

The core products of Arcanum are DeFi ETFs - fully decentralized exchange-traded funds that are implemented in a form of multipools enabling swapping of assets within the pools.

The first ETF by Arcanum is $ARBI - Arbitrum ecosystem ETF tracking the prices of the top 10 Arbitrum-native DeFi tokens ranked by their revenue. The MVP on testnet is implemented on Polygon though with $CPT tracking top 5 DeFi tokens on Polygon.

The ETF's main goal is to keep assets shares in the multipool close to the equilibrium and encourage traders to perform actions aimed at eliminating deviations. Unlike traditional DEXs implementing xy=k formula, where traders mainly leverage speculations coming from the price volatility and sandwich attacks, in Arcanum you can direct your trades to balance the multipool assets and earn a portion of fees for your actions.

ETFs on Arcanum can be minted using any index asset within a corresponding multi pool and burnt to redeem any index asset. The price for minting and redemption is calculated based on (total worth of assets in index) / ETF supply.

With an ETF token, users basically get a portion of all underlying assets (index tokens) in the pool. If index tokens prices are increasing, then the price of an ETF will increase as well, if declining - ETF’s price declines too, however, in both cases, the manageable composition of the ETF’s underlying portfolio can eliminate the risks of distinctive assets’ extreme volatility.

The ETF contract itself represents a portfolio of assets with a specific set of rules which accepts your deposit, then routes it through algorithms which calculate users’ fees based on current ETF balance.

Router API

Call methods (requires asset approval to router)
function mintWithSharesOut(
   address _pool, // pool address
   address _asset, // asset address
   UD60x18 _sharesOut, // shares that you want to get
   uint _amountInMax, // maximum amount in
   address _to, // token receiver
   uint deadline // transaction deadline
) external;
function burnWithSharesIn(
   address _pool, // pool address
   address _asset, // asset address
   UD60x18 _sharesIn, // shares that you want to sell
   UD60x18 _amountOutMin, // minium amount to receive
   address _to, // token receiver
   uint deadline // transaction deadline
) external;
function swap(
   address _pool, // pool address
   address _assetIn, // asset in address
   address _assetOut, // asset out address
   UD60x18 _amountInMax,
   UD60x18 _amountOutMin,
   UD60x18 _shares, // shares that are minted and burned within operation 
   address _to, // token receiver
   uint deadline // transaction deadline
) external;
    function mintWithAmountIn(
       address _pool, // pool address
       address _asset, // asset address
       UD60x18 _amountIn,
       UD60x18 _sharesOutMin,
       address _to, // token receiver
       uint deadline // transaction deadline
    ) external;
    function burnWithAmountOut(
       address _pool, // pool address
       address _asset, // asset address
       UD60x18 _amountOut,
       UD60x18 _sharesInMax,
       address _to, // token receiver
       uint deadline // transaction deadline
    ) external;
    function swapWithAmountIn(
       address _pool, // pool address
       address _assetIn, // asset in address
       address _assetOut, // asset out address
       UD60x18 _amountIn,
       UD60x18 _amountOutMin,
       address _to, // token receiver
       uint deadline // transaction deadline
    ) external;
    function swapWithAmountOut(
       address _pool, // pool address
       address _assetIn, // asset in address
       address _assetOut, // asset out address
       UD60x18 _amountOut,
       UD60x18 _amountInMax,
       address _to, // token receiver
       uint deadline // transaction deadline
    ) external;
View methods
    function estimateMintSharesOut(
       address _pool, // pool address
       address _asset, // asset address
       UD60x18 _amountIn
    ) public view returns(UD60x18 sharesOut);
    function estimateMintAmountIn(
       address _pool, // pool address
       address _asset, // asset address
       UD60x18 _sharesOut
    ) public view returns(UD60x18 _amountIn);
    function estimateBurnAmountOut(
       address _pool, // pool address
       address _asset, // asset address
       UD60x18 _sharesIn
    ) public view returns(UD60x18 _amountOut);
    function estimateBurnSharesIn(
       address _pool, // pool address
       address _asset, // asset address
       UD60x18 _amountOut
    ) public view returns(UD60x18 _sharesIn);
    function estimateSwapSharesByAmountIn(
        address _pool, // pool address
        address _assetIn, // asset in address
        address _assetOut, // asset out address
        UD60x18 _amountIn
    ) public view returns(UD60x18 shares, UD60x18 amountOut);
    function estimateSwapSharesByAmountOut(
        address _pool, // pool address
        address _assetIn, // asset in address
        address _assetOut, // asset out address
        UD60x18 _amountOut
    ) public view returns(UD60x18 shares, UD60x18 amountIn);

Deployment addresses

Contract Address
Multipool core 0x33657896740F7BA132553EeE2efF38C8748F035C
Multipool router 0x6c0528008A74AcCfF3A203670E94ddD822D8Cb44
TOKEN 1 0x54ce1aE0DcC17d8316F6526A9D6fD6949d1B134f
TOKEN 2 0xc071C52749f0238C0FbB6668eBA8D019b822A6C0
TOKEN 3 0x4Fe2A907e61d1F0ff7AafDfc754D9EeF1b6D7870
TOKEN 4 0x7A27FDAB8A0bb5728e9229d69180e671db766Ebd
TOKEN 5 0x167b876620dD8531c7A47dA89Ea32A1A37680407

Pinned Loading

  1. arcanum-sdk-rs arcanum-sdk-rs Public

    Rust

  2. arcanum-contracts arcanum-contracts Public

    Solidity

  3. arcanum-backend-services arcanum-backend-services Public

    Rust 1

Repositories

Showing 10 of 11 repositories

Top languages

Loading…

Most used topics

Loading…