帖子
分享您的知识。
Sui 交易指南:从设置到执行和验证
Sui 交易指南:从设置到执行和验证
如果你对在Sui区块链上执行交易的细节感到好奇,并想要一份深入而实用的指南,引导你完成每一个步骤.
在本文中,我们将探讨整个过程——从设置客户环境、检查钱包对象、计算汽油费,到签署和执行交易,最后验证其详细信息.
让我们逐步分解一下:
是什么让 Sui 如此特别?🔥
Sui 为去中心化应用程序 (dApps) 和智能合约提供了高度优化的平台. 其在管理汽油费和交易逻辑方面的优雅设计使其成为希望突破 Web3 技术界限的开发人员的一个令人兴奋的游乐场.
2. 入门:环境设置和钱包配置 ⚙️
2.1. 配置您的 Sui 客户端环境
在进行交易之前,请确保您的Sui客户端设置正确. Sui 支持多个网络(开发网络、主网、测试网),你可以使用以下命令查看哪个网络处于活动状态:
➜ sui client envs
╭─────────┬─────────────────────────────────────┬────────╮
│ alias │ url │ active │
├─────────┼─────────────────────────────────────┼────────┤
│ devnet │ https://fullnode.devnet.sui.io:443 │ │
│ mainnet │ https://fullnode.mainnet.sui.io:443 │ │
│ testnet │ https://fullnode.testnet.sui.io:443 │ * │
╰─────────┴─────────────────────────────────────┴────────╯
这确认你已连接到测试网. 进入正确的网络是成功交易的第一步.
2.2. 查看您的活跃钱包
接下来,验证您的有效钱包地址. 这至关重要,因为每笔交易都与您的钱包身份息息相关:
➜ sui client active-address
0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73
2.3. 查询拥有的对象
使用 SUIX_GetownedObjects API,你可以获取有关你在区块链上拥有的对象(如硬币)的详细信息. 此命令可帮助您检查账户余额和可用于交易的资产:
{
"jsonrpc": "2.0",
"id": 1,
"method": "suix_getOwnedObjects",
"params": [
"0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73",
{
"filter": {
"MatchAll": [
{
"StructType": "0x2::coin::Coin<0x2::sui::SUI>"
}
]
},
"options": {
"showType": true,
"showOwner": true,
"showPreviousTransaction": true
}
}
]
}
此步骤对于在尝试进行任何交易之前验证您的钱包中是否有必要的硬币(在本例中为SUI硬币)至关重要.
3. 燃气计算:交易成本预算 💸
天然气是推动区块链交易的燃料. 必须了解天然气价格和天然气预算,以避免交易失败.
3.1. 获取汽油价格
可以使用 suix_getreferenceGasPrice API 调用来检索当前的汽油价格:
{
"jsonrpc": "2.0",
"id": 1,
"method": "suix_getReferenceGasPrice",
"params": []
}
如果 API 返回 “1000”,则表示每单位气体消耗 1000 MIST. 请记住,1 个 SUI 等于 10^9 MIST,因此即使是 MIST 中的很小数字,在预算时也会累积起来.
3.2. 设定天然气预算
您的汽油预算是您愿意花费的最大汽油量(以 MIST 计). 以我们的示例为例,假设您的天然气预算为 4964000 MIST. 交易的总成本通常按以下方式计算:
总成本 = 计算成本 + 存储成本 — 存储折扣
例如: • 计算成本:1,000,000 MIST • 存储成本:2,964,000 MIST • 存储返利:978,120 MIST
因此,净成本变为 1,000,000 + 2,964,000 − 978,120 = 2,985,880 MIST.
准确设定您的天然气预算可确保您的交易有足够的资金来成功执行.
4. 精心策划交易:信心试跑 🔧
在发送实时交易之前,最好进行 “试运行” 以发现任何潜在问题. 这使您无需花费任何精力即可验证交易逻辑.
4.1. 建立试运行交易
这是一个 TypeScript 函数示例,它演示了如何准备和执行试运行交易. 此代码概述了如何拆分硬币和准备转账操作:
export const signSuiDryRunTransaction = async (requestParams: SignDryRequestParams): Promise<string> => {
const { gasPrice, privateKey, coinRefs, network, recipients } = requestParams;
const keypair = Ed25519Keypair.fromSecretKey(privateKey);
const tx = newTransaction();
// Configure gas payment, price, and sender
tx.setGasPayment(coinRefs);
tx.setGasPrice(gasPrice);
tx.setSender(keypair.toSuiAddress());
// Split coins based on each recipient's amount
const coins = tx.splitCoins(tx.gas, recipients.map((transfer) => transfer.amount));
recipients.forEach((transfer, index) => {
tx.transferObjects([coins[index]], transfer.to);
});
// Build and sign the transaction with the client
const client = newSuiClient({ url: getFullnodeUrl(network) });
const bytes = await tx.build({ client });
const { signature } = await keypair.signTransaction(bytes);
await verifyTransactionSignature(bytes, signature, { address: keypair.getPublicKey().toSuiAddress() });
return JSON.stringify([toBase64(bytes), signature]);
};
这个试运行步骤对于确保在投入实际资金之前每个细节都正确无误至关重要.
5. 签署和执行交易:将所有内容放在一起 ✍️
成功试运行后,下一步是在区块链上签署并发送您的交易.
5.1. 签署交易
以下是使用指定燃气预算签署交易的精简示例函数:
const signSuiTransaction = async (requestParams: SignRequestParams): Promise<string> => {
const { gasBudget, gasPrice, privateKey, coinRefs, network, recipients } = requestParams;
const keypair = Ed25519Keypair.fromSecretKey(privateKey);
const tx = newTransaction();
// Set up gas parameters, including the gas budget
tx.setGasPayment(coinRefs);
tx.setGasPrice(gasPrice);
tx.setGasBudget(gasBudget);
tx.setSender(keypair.toSuiAddress());
// Split coins for each recipient
const coins = tx.splitCoins(tx.gas, recipients.map((transfer) => transfer.amount));
recipients.forEach((transfer, index) => {
tx.transferObjects([coins[index]], transfer.to);
});
// Build the transaction and sign it
const client = newSuiClient({ url: getFullnodeUrl(network) });
const bytes = await tx.build({ client });
const { signature } = await keypair.signTransaction(bytes);
await verifyTransactionSignature(bytes, signature, { address: keypair.getPublicKey().toSuiAddress() });
return JSON.stringify([toBase64(bytes), signature]);
};
该功能集成了所有必要的参数,包括气体详细信息和接收者,确保您的交易经过安全签名并做好执行准备.
5.2. 执行交易
签署后,交易将使用 SUI_executeTransactionBlock API 端点发送到区块链:
curl --location 'https://fullnode.testnet.sui.io:443' \
--header 'Content-Type: application/json' \
--data '{
"jsonrpc": "2.0",
"id": 1,
"method": "sui_executeTransactionBlock",
"params": [
"<base64-encoded-transaction>",
["<signature>"],
{
"showInput": true,
"showRawInput": true,
"showEffects": true,
"showEvents": true,
"showObjectChanges": true,
"showBalanceChanges": true
},
"WaitForLocalExecution"
]
}'
此调用返回详细的 JSON 响应,其中包含交易摘要、耗气量、对象修改和余额更新等信息.
6. 验证您的交易:交叉检查所有内容 🔍
执行交易后,必须验证所有内容是否按预期执行.
6.1. 浏览器验证
你可以在像Suivision测试网浏览器这样的区块链浏览器上查看你的交易. 浏览器以直观的可视格式显示所有交易细节,从而更容易发现任何问题.
6.2. 命令行验证
要进行更详细的审计,请使用命令行:
sui client tx-block -- 3FopuDy5qzKm1kLRFZCdi8Lynadym9j15NaVxzUH6nYD
此命令提供了交易的全面细分,包括发送者详细信息、天然气支付、对象更改和执行状态.
7. 分析 JSON 响应:了解交易的层级
让我们解压您在执行交易后收到的 JSON 响应:
7.1. 交易概述
-jsonrpc 和 id:JSON-RPC 协议的标准字段. -摘要:用于跟踪的唯一交易哈希(例如,“3fopudy5qzkm1klrfzcdi8lynadym9j15navxzuh6NYD”). -TimeStampMS 和检查点:提供有关交易何时执行以及当时区块链检查点的背景信息.
7.2. 交易内容
-发送者和天然气数据:包括发件人的地址和所有与天然气相关的配置(付款、价格、预算). -操作(交易):交易逻辑包括以下操作: -SplitCoins:将汽油币分成小部分. -转移对象:将硬币段移至指定的收件人地址. -签名:加密签名(Base64 编码)确保交易的真实性.
7.3. 执行效果
-状态:“成功” 状态确认交易的处理没有错误. -燃气使用量:详细说明计算和存储成本以及任何适用的折扣. -对象变更:概述哪些对象因事务而被修改、创建或更新. -依赖关系:列出此交易所依赖的相关交易哈希.
这种精细的细分对于调试和提高 dApp 的性能至关重要.
8. 实用开发者见解:提示和要点
了解此过程的每个步骤将使您具备在 Sui 上构建安全、高效的 Web3 应用程序的技能. 这些见解不仅可以帮助您解决问题,还可以使您在 Sui 生态系统中自信地进行创新.
- Sui
- SDKs and Developer Tools
- Transaction Processing
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.