交易
了解如何在 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