Controllers
These controllers handle the core functionality of the SDK.
AccountController
This controller is responsible for account-related operations.
import { AccountController } from '@to-nexus/sdk/react'
// Get wallet address
const FROM_ADDRESS = AccountController.state.address as `0x${string}`
// Prepare updated token balance list
const balance = account?.tokenBalance?.map((token) => {
if (token.address === ERC20_ADDRESS.toLowerCase()) {
return {
...token,
quantity: {
...token.quantity,
numeric: amount // actual balance read from the contract
}
};
}
return token;
})
// Update token balance
await AccountController.updateTokenBalance(balance)
// Fetch token balance
await AccountController.fetchTokenBalance()
Key Features
- state: Object managing current account state
- address: Wallet address of the connected user
- tokenBalance: Token balance information
- balance: Native token balance
- balanceSymbol: Native token symbol
- updateTokenBalance: Function to update ERC-20 token balances
- fetchTokenBalance: Function to fetch token balances
ConnectionController
This controller handles blockchain connection and interaction.
import { ConnectionController } from '@to-nexus/sdk/react'
// Read from contract
const amount = await ConnectionController.readContract({
contractAddress: ERC20_ADDRESS,
method: 'balanceOf',
abi: sampleErc20ABI,
args: [FROM_ADDRESS]
})
// Write to contract
const resTx = await ConnectionController.writeContract({
fromAddress: FROM_ADDRESS,
contractAddress: ERC721_ADDRESS,
args: [FROM_ADDRESS, tokenId],
method: 'mint',
abi: sampleErc721ABI,
chainNamespace: network?.caipNetwork?.chainNamespace
})
// Sign message
const signedMessage = await ConnectionController.signMessage({
message: `Hello, world! ${Date.now()}`,
customData: {
metadata: "Message signing"
}
})
// Sign EIP-712
const resSignedEIP712 = await ConnectionController.signEIP712({
contractAddress: PERMIT_CONTRACT_ADDRESS,
fromAddress: FROM_ADDRESS,
spenderAddress: PERMIT_SPENDER_ADDRESS,
value: PERMIT_VALUE,
abi: sampleEIP721,
customData: {
metadata: "EIP712 signing"
}
})
// Convert units
const amountInWei = ConnectionController.parseUnits(amount.toString(), decimals)
const amountInEth = ConnectionController.formatUnits(BigInt(amount), decimals)
Key Features
- readContract: Reads data from a smart contract
- writeContract: Writes to a smart contract (state change)
- signMessage: Signs an arbitrary message
- signEIP712: Signs typed data using EIP-712
- parseUnits: Converts token units (e.g., ETH to Wei)
- formatUnits: Converts token units (e.g., Wei to ETH)
SendController
This controller handles token transfers.
import { SendController } from '@to-nexus/sdk/react'
// Send native token
const resTx = await SendController.sendNativeToken({
receiverAddress: RECEIVER_ADDRESS,
sendTokenAmount: SEND_CROSS_AMOUNT,
decimals: '18',
customData: {
metadata: "CROSS token transfer"
}
})
// Send ERC20 token
const resTx = await SendController.sendERC20Token({
receiverAddress: RECEIVER_ADDRESS,
contractAddress: ERC20_CAIP_ADDRESS,
sendTokenAmount: SEND_ERC20_AMOUNT,
decimals: '18',
customData: {
metadata: "ERC20 token transfer"
}
})
Key Features
- sendNativeToken: Sends native tokens (e.g., CROSS)
- sendERC20Token: Sends ERC-20 tokens
Updated 21 days ago