Dolomite
  • Dolomite
  • DOLO
    • Token Mechanics
    • Airdrop
    • Distribution
  • Roadmap
  • Community XP
  • Minerals
  • Dolomite Balances
  • Guide
    • Depositing to Dolomite
    • Withdrawing from Dolomite
    • Borrow
    • Strategies
    • Zap
    • Trade
    • Pool
    • History
    • Stats
  • Campaign Guides
    • Zap your GLP! Campaign
    • Zap your ETH! Campaign
    • MIM Launch Campaign
    • jUSDC Launch Campaign
    • YT-GLP Launch Campaign
    • GM Launch Campaign
    • USDY Launch Campaign
    • mETH Launch Campaign
    • Guide To Level 4
  • Integrations
    • Berachain - Proof of Liquidity
    • GMX
      • GMX
      • GLP
      • GM
    • Abracadabra - magicGLP
    • Jones DAO - jUSDC
    • PlutusDAO - plvGLP
    • Pendle
      • Pendle - PT
      • Pendle - YT
    • Arbitrum - vARB
  • Markets
  • oARB Incentives Program
  • Risk Management
  • Different Networks
  • Smart Contract Addresses
    • Core - Immutable
    • Core - Proxies
    • Core - Routers
    • Module - dTokens
    • Module - DOLO
    • Module - General
    • Module - oARB Liquidity Mining
  • Admin Privileges
  • Admin Transactions
    • Transactions 38 - 50
    • Transactions 51 - 100
    • Transactions 101 - 150
    • Transactions 151 - 200
  • Audits & Security
    • Chainalysis Crypto Incident Response
  • Bug Bounty
  • FAQ
  • Media Kit
  • Developer Documentation
    • Dolomite Margin - Overview
    • Dolomite Margin - Glossary
    • Dolomite Margin - Getters
    • Dolomite Margin - Events
    • Dolomite Margin - dTokens
    • Depositing or Withdrawing
    • Managing Borrow Positions
    • Zapping Assets
    • Flash Loans
    • E-Mode & Segregated Risk
    • TypeScript Client
    • Subgraph
Powered by GitBook
On this page
  • Install
  • Initialize
  • Standard Actions
  • Deposit
  • Withdraw
  • Operations
  • Initialize
  • Add Actions
  • Commit
  • Getters
  • Logs
  • Tokens
  • Types
  • Web3
  • BigNumber

Was this helpful?

  1. Developer Documentation

TypeScript Client

TypeScript library for interacting with the DolomiteMargin smart contracts.

PreviousE-Mode & Segregated RiskNextSubgraph

Last updated 1 year ago

Was this helpful?

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 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

Deposit

Deposit funds to DolomiteMargin

import { MarketId, BigNumber } from '@dolomite-exchange/dolomite-margin';

// Deposits a certain amount of tokens for some asset.
// By default resolves when transaction is received by the node - not when mined
const result = await dolomiteMargin.standardActions.deposit({
  accountOwner: '0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5', // Your address
  marketId: MarketId.ETH,

  // Base units of the token, so 1e18 = 1 ETH
  // NOTE: USDC has 6 decimal places, so 1e6 = 1 USDC
  amount: new BigNumber('1e18'),
});
  • MarketId.ETH will send ETH whereas MarketId.WETH will send WETH. Both are the same market on the protocol

Withdraw

Withdraw funds from DolomiteMargin

import { MarketId, BigNumber } from '@dolomite-exchange/dolomite-margin';

// Withdraws a certain amount of tokens for some asset.
// By default resolves when transaction is received by the node - not when mined
const result = await dolomiteMargin.standardActions.withdraw({
  accountOwner: '0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5', // Your address
  marketId: MarketId.ETH,

  // Base units of the token, so 1e18 = 1 ETH
  // NOTE: USDC has 6 decimal places, so 1e6 = 1 USDC
  amount: new BigNumber('1e18'),
});

// Withdraws all of your tokens for some asset.
// By default resolves when transaction is received by the node - not when mined
const result = await dolomiteMargin.standardActions.withdrawToZero({
  accountOwner: '0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5', // Your address
  marketId: MarketId.ETH,
});
  • MarketId.ETH will withdraw as ETH whereas MarketId.WETH will withdraw as WETH. Both are the same market on the protocol

Operations

Initialize

To initialize an Operation:

const operation = dolomiteMargin.operation.initiate();
const operation = dolomiteMargin.operation.initiate({ proxy: ProxyType.Payable });

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:

import { MarketId } from '@dolomite-exchange/dolomite-margin';

operation.withdraw({
  primaryAccountOwner: '0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5',
  primaryAccountId: new BigNumber('123456'),
  marketId: MarketId.WETH,
  amount: {
    value: new BigNumber('-1e18'),
    reference: AmountReference.Delta,
    denomination: AmountDenomination.Actual,
  },
  to: '0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5'
})ty
  .deposit({
    primaryAccountOwner: '0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5',
    primaryAccountId: new BigNumber('123456'),
    marketId: MarketId.DAI,
    amount: {
      value: new BigNumber('200e18'),
      reference: AmountReference.Delta,
      denomination: AmountDenomination.Actual,
    },
    from: '0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5',
  });

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.

const response = await operation.commit({
  from: '0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5',
  gasPrice: '1000000000',
  confirmationType: ConfirmationType.Confirmed,
});

Getters

Example of getting the balances of an Account:

const balances = await dolomiteMargin.getters.getAccountBalances(
  '0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359', // Account Owner
  new BigNumber('11'), // Account Number
);

Logs

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

const dolomiteMarginLogs = dolomiteMargin.logs.parseLogs(transactionReceipt);

Tokens

Example of setting DAI token allowance on DolomiteMargin:

await dolomiteMargin.token.setMaximumDolomiteMarginAllowance(
  '0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359', // DAI Contract Address
  '0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5', // My Address
  { from: '0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5' }, // My Address
);

Types

You can import types from DolomiteMargin as:

import {
  AmountDenomination,
  AmountReference,
  ConfirmationType,
} from '@dolomite-exchange/dolomite-margin';

Web3

BigNumber

import { BigNumber } from '@dolomite-exchange/dolomite-margin';

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

For all markets except MarketId.ETH, you will first need to set allowance on that token. See

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

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

See for the full list of Actions available to add to an Operation.

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

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

DolomiteMargin uses under the hood. You can access it through dolomiteMargin.web3

DolomiteMargin uses . You can import this from DolomiteMargin as:

Operations
Tokens
Payable Proxy
AccountOperation
here
here
Web3 1.2.X
BigNumber 8.X
Web3 provider
Operations
GitHub