Skip to main content

Overview

The DSA class is the main entry point for interacting with Instadapp’s DeFi Smart Accounts (DSA). It provides methods for building DSAs, casting spells, and managing account instances.

Constructor

config
Web3 | DSAConfig
required
A Web3 instance or DSAConfig object. See Configuration for details.
chainId
ChainId
default:"1"
The blockchain network ID. Supported chains: 1 (Ethereum), 137 (Polygon), 42161 (Arbitrum), 43114 (Avalanche), 10 (Optimism), 250 (Fantom), 8453 (Base), 9745 (Plasma), 56 (BSC)
options
Options
default:"{ skipChainIdValidation: false }"
Configuration options for the DSA instance
options.skipChainIdValidation
boolean
default:"false"
Skip chain ID validation against the Web3 provider
import DSA from 'dsa-connect'
import Web3 from 'web3'

const web3 = new Web3(window.ethereum)
const dsa = new DSA(web3, 1)

Properties

Static Properties

DSA.version
string
The current version of the DSA SDK

Instance Properties

config
DSAConfig
The configuration object used to initialize the DSA instance
web3
Web3
The Web3 instance used for blockchain interactions
mode
'browser' | 'node' | 'simulation'
The current operation mode
origin
string
The origin address for affiliation and on-chain analytics. Defaults to genesis address.
instance
Instance
The current DSA instance details. See Instance for structure.
maxValue
string
Maximum uint256 value: 115792089237316195423570985008687907853269984665640564039457584007913129639935

Extension Properties

erc20
Erc20
ERC20 token utility methods
erc20Euler
Erc20Euler
ERC20 Euler-specific token utility methods
erc721
Erc721
ERC721 NFT utility methods
internal
Internal
Internal utility methods for encoding and transaction management
castHelpers
CastHelpers
Helper methods for spell casting operations
transaction
Transaction
Transaction management methods
instapool_v2
Instapool_v2
Instapool V2 resolver methods
avocado
Avocado
Avocado wallet integration methods
accounts
Accounts
DSA account management methods

Core Methods

setOrigin()

Sets the origin address for affiliation and on-chain analytics.
origin
string
required
The origin address to set
dsa.setOrigin('0x...')

setInstance()

Sets the current DSA instance by ID.
id
number
required
The DSA ID to set as the current instance
returns
Promise<Instance>
The instance details including id, address, version, and chainId
const instance = await dsa.setInstance(123)
console.log(instance.address) // DSA address

setAccount()

Alias for setInstance(). Sets the current DSA ID instance.
id
number
required
DSA ID
returns
Promise<Instance>
The instance details
await dsa.setAccount(123)

getAccountIdDetails()

Retrieves details for a specific DSA instance ID.
instanceId
number
required
The DSA instance ID to query
returns
Promise<Instance>
Object containing id, address, version, and chainId
const details = await dsa.getAccountIdDetails(123)

refreshChainId()

Refreshes the chain ID from the Web3 provider and updates the instance.
returns
Promise<void>
Completes when chain ID is updated
await dsa.refreshChainId()

Building DSA Accounts

build()

Builds a new DSA account and executes the transaction.
params
BuildParams
required
Build parameters
params.authority
string
Authority address for the DSA. Defaults to current address.
params.origin
string
Origin address for analytics. Defaults to genesis address.
params.version
number
DSA version. Defaults to 2.
params.from
string
Transaction sender address
params.gas
number | string
Gas limit for the transaction
params.gasPrice
number | string
Gas price (required in node mode)
params.maxFeePerGas
number | string
Maximum fee per gas (EIP-1559)
params.maxPriorityFeePerGas
number | string
Maximum priority fee per gas (EIP-1559)
params.nonce
number | string
Transaction nonce
params.onReceipt
(receipt: TransactionReceipt) => void
Callback executed when transaction receipt is received
params.onConfirmation
(confirmationNumber: number, receipt: TransactionReceipt, latestBlockHash?: string) => void
Callback executed on each confirmation
returns
Promise<string>
Transaction hash
const txHash = await dsa.build({
  authority: '0x...', // Your address
  version: 2,
  gasPrice: web3.utils.toWei('50', 'gwei')
})

buildTxObj()

Builds a new DSA transaction object without sending it.
params
BuildParams
required
Build parameters (authority and from are required)
returns
Promise<TransactionConfig>
Transaction configuration object that can be signed and sent manually
const txObj = await dsa.buildTxObj({
  authority: '0x...',
  from: '0x...',
  version: 2
})

buildTransactionConfig()

Builds a transaction configuration for creating a new DSA.
params
object
required
Configuration parameters
params.authority
string
Authority address
params.origin
string
Origin address
params.from
string
required
Sender address
params.gasPrice
number | string
Gas price
params.maxFeePerGas
number | string
Maximum fee per gas
params.maxPriorityFeePerGas
number | string
Maximum priority fee per gas
params.gas
number | string
Gas limit
params.nonce
number | string
Transaction nonce
returns
Promise<TransactionConfig>
Transaction configuration
const config = await dsa.buildTransactionConfig({
  from: '0x...'
})

Spell Casting

Spell()

Creates a new Spells instance for building and executing DeFi operations.
returns
Spells
A Spells instance with fluent API for adding operations
The returned Spells instance includes these methods:
  • add(spell) - Add a spell to the sequence
  • cast(params?) - Execute all spells
  • estimateCastGas(params?) - Estimate gas for execution
  • encodeCastABI(params?) - Encode spells to ABI
  • encodeSpells(params?) - Encode spells data
  • convertToAvocadoActions() - Convert spells to Avocado actions
const spells = dsa.Spell()
  .add({
    connector: 'compound',
    method: 'deposit',
    args: [tokenAddress, amount, 0, 0]
  })
  .add({
    connector: 'compound',
    method: 'borrow',
    args: [tokenAddress, amount, 0, 0]
  })

const txHash = await spells.cast()

cast()

Executes spells on the current DSA instance.
params
Spells | CastParams
required
Either a Spells instance or CastParams object
params.spells
Spells
The Spells instance to cast
params.origin
string
Origin address
params.to
string
Target DSA address. Defaults to current instance.
params.from
string
Sender address
params.value
number | string
ETH value to send with transaction
params.gas
number | string
Gas limit
params.gasPrice
number | string
Gas price
params.maxFeePerGas
number | string
Maximum fee per gas
params.maxPriorityFeePerGas
number | string
Maximum priority fee per gas
params.nonce
number | string
Transaction nonce
params.onReceipt
(receipt: TransactionReceipt) => void
Receipt callback
params.onConfirmation
(confirmationNumber: number, receipt: TransactionReceipt, latestBlockHash?: string) => void
Confirmation callback
returns
Promise<string>
Transaction hash
const txHash = await dsa.cast({
  spells: mySpells,
  from: '0x...'
})

castData()

Executes pre-encoded cast data on the current DSA instance.
params
string | CastDataParams
required
Either cast data string or CastDataParams object
params.castData
string
Pre-encoded cast calldata
params.origin
string
Origin address
params.to
string
Target DSA address
params.from
string
Sender address
params.value
number | string
ETH value
params.gas
number | string
Gas limit
params.gasPrice
number | string
Gas price
params.maxFeePerGas
number | string
Maximum fee per gas
params.maxPriorityFeePerGas
number | string
Maximum priority fee per gas
params.nonce
number | string
Transaction nonce
params.onReceipt
(receipt: TransactionReceipt) => void
Receipt callback
params.onConfirmation
(confirmationNumber: number, receipt: TransactionReceipt, latestBlockHash?: string) => void
Confirmation callback
returns
Promise<string>
Transaction hash
const txHash = await dsa.castData('0x...')

Alias Methods

encodeSpells()

Alias for dsa.internal.encodeSpells(). Encodes spells into targets and calldata arrays.

sendTransaction()

Alias for dsa.transaction.send(). Sends a transaction.

count()

Alias for dsa.accounts.count(). Returns the total number of DSA accounts.

getAccounts()

Alias for dsa.accounts.getAccounts(). Retrieves DSA accounts for an address.

getAuthById()

Alias for dsa.accounts.getAuthoritiesById(). Gets authorities for a DSA by ID.

encodeCastABI()

Alias for dsa.castHelpers.encodeABI(). Encodes cast ABI.

estimateCastGas()

Alias for dsa.castHelpers.estimateGas(). Estimates gas for casting spells.

convertToAvocadoActions()

Alias for dsa.avocado.convertToActions(). Converts spells to Avocado wallet actions.

maxVal()

Returns the maximum uint256 value as a string.
returns
string
Maximum uint256 value
const max = dsa.maxVal()
// '115792089237316195423570985008687907853269984665640564039457584007913129639935'

Usage Examples

Browser Mode

import DSA from 'dsa-connect'
import Web3 from 'web3'

const web3 = new Web3(window.ethereum)
const dsa = new DSA(web3, 1)

await dsa.setInstance(123) // Set your DSA ID

const spells = dsa.Spell()
  .add({
    connector: 'compound',
    method: 'deposit',
    args: [tokenAddress, amount, 0, 0]
  })

const txHash = await spells.cast()

Node Mode

import DSA from 'dsa-connect'
import Web3 from 'web3'

const web3 = new Web3('https://mainnet.infura.io/v3/YOUR_KEY')
const dsa = new DSA({
  web3,
  mode: 'node',
  privateKey: '0x...'
}, 1)

await dsa.setInstance(123)
const txHash = await dsa.cast(mySpells)

Simulation Mode

const dsa = new DSA({
  web3,
  mode: 'simulation',
  publicKey: '0x...'
}, 1)

const gasEstimate = await dsa.estimateCastGas({ spells: mySpells })

Build docs developers (and LLMs) love