Splitting Notes
Iron Fish notes are what store value for an account on the chain. Sometimes you might want to take one note (e.g. with value 1 IRON) and split it into multiple notes (e.g. 0.3, 0.3, 0.4 IRON). This would a separate transactions can be posted at the same time.
Here's an example that splits a note into three separate notes (this can be expanded to N notes). The only requirement is that the source account has a balance capable of funding all the output notes.
import { Asset } from '@ironfish/rust-nodejs'
import {
  CreateTransactionRequest,
  CurrencyUtils,
  IronfishSdk,
  RawTransactionSerde,
} from '@ironfish/sdk'
async function main(): Promise<void> {
  const sdk = await IronfishSdk.init({ dataDir: '~/.dev0' })
  const client = await sdk.connectRpc()
  // Fetch an account
  const defaultAccountResponse = await client.wallet.getDefaultAccount()
  if (defaultAccountResponse.content.account === null) {
    throw new Error('Expected a default account')
  }
  const accountName = defaultAccountResponse.content.account.name
  const accountResponse = await client.wallet.getAccountPublicKey({
    account: accountName,
  })
  const publicAddress = accountResponse.content.publicKey
  // Create some example outputs
  const nativeAssetId = Asset.nativeId().toString('hex')
  const outputs: CreateTransactionRequest['outputs'] = []
  // 1 IRON = 100000000 ORE
  outputs.push({
    publicAddress,
    amount: CurrencyUtils.encode(33300000n),
    memo: 'first',
    assetId: nativeAssetId,
  })
  outputs.push({
    publicAddress,
    amount: CurrencyUtils.encode(33300000n),
    memo: 'second',
    assetId: Asset.nativeId().toString('hex'),
  })
  outputs.push({
    publicAddress,
    amount: CurrencyUtils.encode(40000000n),
    memo: 'third',
    assetId: Asset.nativeId().toString('hex'),
  })
  const options: CreateTransactionRequest = {
    outputs: outputs,
    account: accountName,
    feeRate: '200',
  }
  const response = await client.wallet.createTransaction(options)
  console.log(response.content.transaction)
}