Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Wallets

tonutils::wallet provides offline helpers for Wallet V5R1 and V4R2. The helpers derive StateInit addresses, build signed external message bodies, serialize external-in message BoCs, and, with liteclient, submit those BoCs through a provider. A submitted BoC is not proof of transaction inclusion.

Mnemonics

TonMnemonic uses 24 English BIP-39 words with TON seed-version checks and derives an Ed25519 key using TON PBKDF2-HMAC-SHA512 parameters. Optional mnemonic passwords are supported by the library and CLI through environment variables, not positional arguments.

#![allow(unused)]
fn main() {
use tonutils::wallet::TonMnemonic;

let mnemonic = TonMnemonic::generate(None)?;
let public_key = mnemonic.public_key();
Ok::<(), anyhow::Error>(())
}

Addresses And Transfers

V5R1 is the recommended default. Mainnet V5R1 uses wallet id 0x7fffff11; testnet uses 0x7ffffffd. V4R2 uses the common wallet id 0x29a9a317.

#![allow(unused)]
fn main() {
use tonutils::wallet::{MAINNET_GLOBAL_ID, WalletV5R1, WalletV5R1WalletId, wallet_v5r1_code};

let wallet_id = WalletV5R1WalletId::client(MAINNET_GLOBAL_ID, 0, 0, 0).pack()?;
let wallet = WalletV5R1::new(public_key, wallet_id, wallet_v5r1_code()?, 0);
let address = wallet.address()?;
Ok::<(), anyhow::Error>(())
}

valid_until is a Unix timestamp stored as uint32. seqno is replay protection and must match the current wallet contract state. Include StateInit only for deployment or first-message workflows.

With the liteclient feature, WalletV5R1::send_external_message and WalletV4R2::send_external_message are accepted LiteAPI submission adapters. They build and sign an external-in message, optionally include StateInit when include_state_init is true, call ContractProvider::send_external_message_boc once, and return the opaque liteServer.SendMsgStatus.status value. Provider errors are surfaced as provider errors, build errors do not call the provider, and the returned status must not be interpreted as transaction inclusion.

With the liteclient feature, WalletV5R1 also exposes typed get-method helpers over any ContractProvider. The helpers read the latest masterchain block from the provider, call the deployed wallet address derived from WalletV5R1::address(), and decode successful TVM stack values for seqno, get_wallet_id, get_public_key, is_signature_allowed, and get_extensions.

extensions_raw_onchain preserves the exact get_extensions cell or slice payload as Arc<Cell>. extensions_onchain decodes that payload as WalletV5R1Extensions, a HashmapE 256 int1 wrapper keyed by 256-bit account hash. Hash APIs are canonical; address helpers use only Address::hash_part and do not include the workchain in dictionary keys.

Wallet V5R1 extended management actions are available through WalletV5R1ExtendedAction and the explicit *_with_extended_actions body/BoC builders. The ordinary transfer builders still work unchanged and serialize no extended actions. The V5R1 limit is 255 total ordinary plus extended actions in a single request.