Combining Notes

Notes can also be combined using the CLI command wallet:notes:combine.

Each note spent in a transaction consumes space in the transaction and increases the time it takes to post the transaction. As such, it can be useful to create transactions that combine smaller notes into larger notes.

Here's an example that combines all the $IRON notes in an account into a single note.

import { CreateTransactionRequest, CurrencyUtils, IronfishSdk } from '@ironfish/sdk'
import { Asset } from '@ironfish/rust-nodejs'

async function main(): Promise<void> {
  const sdk = await IronfishSdk.init({ dataDir: '~/.dev0' });
  const client = await sdk.connectRpc();

  // Fetch an account to combine notes
  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

  // Sum all unspent notes with the native asset ID
  const fee = 10n;
  const notes = [];
  let noteTotal = 0n;

  const stream = client.wallet.getAccountNotesStream({
    account: accountName,
  });

  for await (const note of stream.contentStream()) {
    if (!note.spent && note.assetId === Asset.nativeId().toString('hex')) {
      notes.push(note.noteHash);
      noteTotal += BigInt(note.value);
    }
  }

  // Create the transaction
  const options: CreateTransactionRequest = {
    account: accountName,
    outputs: [
      {
        publicAddress,
        amount: CurrencyUtils.encode(noteTotal - fee),
        memo: '',
        assetId: Asset.nativeId().toString('hex'),
      },
    ],
    fee: CurrencyUtils.encode(fee),
    notes,
  };

  const response = await client.wallet.createTransaction(options);
  console.log(response.content.transaction);
}

Join our newsletter and stay up to date with privacy and crypto.

Discover our impactful presence — read our blog.

Use

  • Node App
  • Node CLI
  • Mine
  • Block Explorer
  • Ecosystem

Learn

  • Get Started
  • FAQ
  • Whitepaper
  • Tokenomics

Community

  • Foundation
  • Governance
  • Grants
  • Our Community

Developers

  • Documentation
  • Github
Privacy Policy

|

Media Kit

|

Copyright 2024 Iron Fish.