NEXUS

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

© 2025 NEXUS Co., Ltd. All Rights Reserved.