Skip to Content
dApp 接入

交易

了解如何在 Sui 上签署和执行交易。


签署并执行交易块

import { TransactionBlock } from '@mysten/sui.js/transactions' // 创建交易块 const txb = new TransactionBlock() // 添加转账 txb.transferObjects( [txb.object('0xobject_id')], txb.pure('0xrecipient_address') ) // 或发送 SUI const [coin] = txb.splitCoins(txb.gas, [txb.pure(1000000000)]) // 1 SUI txb.transferObjects([coin], txb.pure('0xrecipient_address')) const [account] = await provider.getAccounts() const chain = await provider.getActiveChain() // 签署并执行 const result = await provider.signAndExecuteTransactionBlock({ account, chain, transactionBlock: txb, options: { showEffects: true, showEvents: true, showObjectChanges: true, }, }) console.log({ digest: result.digest, effects: result.effects, events: result.events, })

签署交易块(不执行)

const txb = new TransactionBlock() // ... 构建交易 const [account] = await provider.getAccounts() const chain = await provider.getActiveChain() const signedTxb = await provider.signTransactionBlock({ account, chain, transactionBlock: txb, }) console.log({ transactionBlockBytes: signedTxb.transactionBlockBytes, signature: signedTxb.signature, }) // 稍后使用 Sui SDK 执行 // const result = await suiClient.executeTransactionBlock({ // transactionBlock: signedTxb.transactionBlockBytes, // signature: signedTxb.signature, // })

签署并执行交易(新 API)

// 使用较新的 signAndExecuteTransaction API(Transaction 类型) import { Transaction } from '@mysten/sui.js/transactions' const tx = new Transaction() // ... 构建交易 const [account] = await provider.getAccounts() const chain = await provider.getActiveChain() const result = await provider.signAndExecuteTransaction({ transaction: tx, account, chain, options: { showEffects: true, }, })

签署交易(新 API)

import { Transaction } from '@mysten/sui.js/transactions' const tx = new Transaction() // ... 构建交易 const [account] = await provider.getAccounts() const chain = await provider.getActiveChain() const signedTxn = await provider.signTransaction({ transaction: tx, account, chain, })

智能合约交互

Move 调用

const txb = new TransactionBlock() // 调用 Move 函数 txb.moveCall({ target: '0xpackage::module::function', arguments: [ txb.pure('arg1'), txb.object('0xobject_id'), ], typeArguments: ['0x2::sui::SUI'], }) const [account] = await provider.getAccounts() const chain = await provider.getActiveChain() const result = await provider.signAndExecuteTransactionBlock({ account, chain, transactionBlock: txb, })

发布包

const txb = new TransactionBlock() const [upgradeCap] = txb.publish({ modules: compiledModules, dependencies: [ '0x1', // Move 标准库 '0x2', // Sui 框架 ], }) txb.transferObjects([upgradeCap], txb.pure(senderAddress)) const [account] = await provider.getAccounts() const chain = await provider.getActiveChain() const result = await provider.signAndExecuteTransactionBlock({ account, chain, transactionBlock: txb, })

与 Sui SDK 配合使用

import { SuiClient } from '@mysten/sui.js/client' const client = new SuiClient({ url: 'https://fullnode.mainnet.sui.io' }) // 获取余额 const balance = await client.getBalance({ owner: accountAddress, }) // 获取对象 const objects = await client.getOwnedObjects({ owner: accountAddress, }) // 获取交易 const txn = await client.getTransactionBlock({ digest: txDigest, options: { showEffects: true }, })
Last updated on