TypeScript Client

TypeScript library for interacting with the DolomiteMargin smart contracts.

GitHubarrow-up-right

Install

npm i -s @dolomite-exchange/dolomite

or with yarn

yarn add @dolomite-exchange/dolomite

Initialize

You will need to initialize DolomiteMargin using a Web3 providerarrow-up-right / Web3 node endpoint and Network.

import { DolomiteMargin, Networks } from '@dolomite-exchange/dolomite-margin';

// --- Initialize with Web3 provider ---
const dolomiteMargin = new DolomiteMargin(
  provider,  // Valid web3 provider
  Networks.ARBITRtUM,
  {
    defaultAccount: '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1', // Optional
    accounts: [
      {
        address: '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1', // Optional
        privateKey: '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d',
      },
    ], // Optional: loading in an account for signing transactions
  }, // Optional
);

// --- OR Initialize with Web3 Provider node endpoint ---
const dolomiteMargin = new DolomiteMargin(
  'https://arbitrum-mainnet.infura.io/v3/YOUR-PROJECT-ID',
  Networks.ARBITRUM,
  {
    defaultAccount: '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1', // Optional - but needed if using Infura
    accounts: [
      {
        address: '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1', // Optional
        privateKey: '0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d',
      },
    ], // Optional: loading in an account for signing transactions
  }, // Optional
);

Standard Actions

DolomiteMargin exposes a number of "standard" actions for interacting with the protocol. These are a subset of what is possible with Operationsarrow-up-right, but are simpler to use.

Deposit

Deposit funds to DolomiteMargin

  • MarketId.ETH will send ETH whereas MarketId.WETH will send WETH. Both are the same market on the protocol

  • For all markets except MarketId.ETH, you will first need to set allowance on that token. See Tokensarrow-up-right

Withdraw

Withdraw funds from DolomiteMargin

  • MarketId.ETH will withdraw as ETH whereas MarketId.WETH will withdraw as WETH. Both are the same market on the protocol

Operations

The main way to interact with DolomiteMargin is through Operations. See Operations.

Initialize

To initialize an Operation:

DolomiteMargin also provides a Payable Proxyarrow-up-right contract that will automatically wrap and unwrap ETH <-> WETH, so that users can interact with DolomiteMargin using only ETH. You can use it by:

Add Actions

Once an operation is initialized, Actions can be added to it. Action functions modify the operation itself, and also always return the operation.

In this example 1 ETH is being withdrawn from an account, and then 200 DAI are being deposited into it:

See AccountOperationarrow-up-right for the full list of Actions available to add to an Operation.

Commit

After Actions have been added to the operation, it can be committed. This is what sends the transaction to the blockchain to execute the Operation on the protocol.

Getters

DolomiteMargin provides a number of read-only getter functions which read information off the smart contracts on the blockchain. You can find them herearrow-up-right.

Example of getting the balances of an Account:

Logs

DolomiteMargin provides a helper to parse DolomiteMargin-specific logs from a transaction.

Tokens

DolomiteMargin provides helper functions to help with interacting with ERC20 tokens. You can find them all herearrow-up-right.

Example of setting DAI token allowance on DolomiteMargin:

Types

You can import types from DolomiteMargin as:

Web3

DolomiteMargin uses Web3 1.2.Xarrow-up-right under the hood. You can access it through dolomiteMargin.web3

BigNumber

DolomiteMargin uses BigNumber 8.Xarrow-up-right. You can import this from DolomiteMargin as:

Last updated

Was this helpful?