Web3实践:Sui区块链交易全流程解析与实战指南在Web3浪潮席卷全球的今天,Sui作为一个高性能的Layer1区块链,以其创新的对象模型和高效的交易处理能力,成为开发者关注的焦点。如何在Sui上完成一笔交易?从环境配置到签名执行,每一步都隐藏着Web3开发的奥秘。本文将
在 Web3 浪潮席卷全球的今天,Sui 作为一个高性能的 Layer 1 区块链,以其创新的对象模型和高效的交易处理能力,成为开发者关注的焦点。如何在 Sui 上完成一笔交易?从环境配置到签名执行,每一步都隐藏着 Web3 开发的奥秘。本文将通过一个实战案例,带你完整解析 Sui 区块链交易的全流程。无论你是 Web3 新手,还是希望深入探索区块链技术的开发者,这份指南都将为你打开 Sui 的大门,助你在 Web3 世界中更进一步!
本文以 Web3 实践为视角,基于 Sui 测试网,系统展示了区块链交易的全流程:从配置客户端环境、查询钱包对象,到获取 Gas 价格、估算 Budget,再到签名并执行交易,每一步都配有详细代码和 API 调用示例(如 suix_getOwnedObjects、sui_dryRunTransactionBlock 等)。通过这一过程,读者不仅能掌握 Sui 交易的核心机制,还能理解 Gas 管理的精妙设计。此外,文章还介绍了如何通过浏览器和命令行验证交易结果,为 Web3 开发者提供了一份实用且可操作的参考指南。
➜ 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 │ * │
╰─────────┴─────────────────────────────────────┴────────╯
➜ sui client active-address
0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73
suix_getOwnedObjects
https://docs.sui.io/sui-api-ref#suix_getownedobjects
Request:
curl --location 'https://fullnode.testnet.sui.io:443' \
--header 'Content-Type: application/json' \
--data '{
"jsonrpc": "2.0",
"id": 1,
"method": "suix_getOwnedObjects",
"params": [
"0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73"
]
}'
{
"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,
"showDisplay": false,
"showContent": false,
"showBcs": false,
"showStorageRebate": false
}
}
]
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"data": [
{
"data": {
"objectId": "0x09ae107f8b03e0297bd8419d9aba9cc3358dd638ca3a8d7cf7c60de3c0eb51ed",
"version": "370791516",
"digest": "2iVkTf7XpjF6XJDAh5ztZdTmm1sKDGtTLjZoo8VJJ1HT",
"type": "0x2::coin::Coin<0x2::sui::SUI>",
"owner": {
"AddressOwner": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73"
},
"previousTransaction": "9k7z6BYe1pckcqcf4Mnpt3HsBmdNEAMW6vdUpP1YEiPT"
}
}
],
"nextCursor": "0x09ae107f8b03e0297bd8419d9aba9cc3358dd638ca3a8d7cf7c60de3c0eb51ed",
"hasNextPage": false
}
}
suix_getReferenceGasPrice
https://docs.sui.io/sui-api-ref#suix_getreferencegasprice
Request:
curl --location 'https://fullnode.testnet.sui.io:443' \
--header 'Content-Type: application/json' \
--data '{
"jsonrpc": "2.0",
"id": 1,
"method": "suix_getReferenceGasPrice",
"params": []
}'
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": "1000"
}
sui_dryRunTransactionBlock
接口获取gasBudget
signSuiDryRunTransaction
方法获取请求参数export const signSuiDryRunTransaction = async (requestParams: SignDryRequestParams): Promise<string> => {
const { gasPrice, privateKey, coinRefs, network, recipients } = requestParams;
const keypair = Ed25519Keypair.fromSecretKey(privateKey);
const tx = new Transaction();
tx.setGasPayment(coinRefs);
tx.setGasPrice(gasPrice);
tx.setSender(keypair.toSuiAddress());
const coins = tx.splitCoins(
tx.gas,
recipients.map((transfer) => transfer.amount),
);
recipients.forEach((transfer, index) => {
tx.transferObjects([coins[index]], transfer.to);
});
const client = new SuiClient({ 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
]);
}
测试获取响应结果
注意:这里的 gasPrice
参数是通过suix_getReferenceGasPrice
接口获取的!
test('signSuiDryRunTransaction', async () => {
const requestParams: SignDryRequestParams = {
"network": 'testnet',
"gasPrice": 1000,
"privateKey": config.privateKey,
"coinRefs": [
{
"objectId": "0x09ae107f8b03e0297bd8419d9aba9cc3358dd638ca3a8d7cf7c60de3c0eb51ed",
"version": "370791516",
"digest": "2iVkTf7XpjF6XJDAh5ztZdTmm1sKDGtTLjZoo8VJJ1HT"
}
],
"recipients": [
{
"to": "0x6518cfc4854eb8b175c406e25e16e5042cf84a6c91c6eea9485eebeb18df4df0",
"amount": 1000000000
},
{
"to": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73",
"amount": 1000000000
}
],
}
const result = await signSuiDryRunTransaction(requestParams);
console.log("signSuiDryRunTransaction result", result);
expect(result).toBeDefined();
expect(result).toBeTruthy();
})
sui_dryRunTransactionBlock
接口获取gasBudget
https://docs.sui.io/sui-api-ref#sui_dryruntransactionblock
curl --location 'https://fullnode.testnet.sui.io:443' \
--header 'Content-Type: application/json' \
--data '{
"jsonrpc": "2.0",
"id": 1,
"method": "sui_dryRunTransactionBlock",
"params": ["AAAEAAgAypo7AAAAAAAIAMqaOwAAAAAAIGUYz8SFTrixdcQG4l4W5QQs+EpskcbuqUhe6+sY303wACA1NwhB0uabSVseL5RKMIfkJC8xTlA2kaALBU4O4qRacwMCAAIBAAABAQABAQMAAAAAAQIAAQEDAAABAAEDADU3CEHS5ptJWx4vlEowh+QkLzFOUDaRoAsFTg7ipFpzAQmuEH+LA+Ape9hBnZq6nMM1jdY4yjqNfPfGDePA61HtXNQZFgAAAAAgGX0BzViCn52t/baPoqxteNOtkuCoKxjlR40X/Gm6+LI1NwhB0uabSVseL5RKMIfkJC8xTlA2kaALBU4O4qRac+gDAAAAAAAAoL5LAAAAAAAA","AKFt8+9hwQhlJn6FIu9RaiIah+u2Kq2zYSkgnrmK75BxSa+kGz/m8QFVDZkM8xIPhzDvk/MoVtBdAYqMoMeW/Am1ZfqGa5xKV6y2LkYtlTyrg+f09ewHe7GjVnlegZPtAg=="]
}'
{
"jsonrpc": "2.0",
"id": 1,
"method": "sui_dryRunTransactionBlock",
"params": ["AAAEAAgAypo7AAAAAAAIAMqaOwAAAAAAIGUYz8SFTrixdcQG4l4W5QQs+EpskcbuqUhe6+sY303wACA1NwhB0uabSVseL5RKMIfkJC8xTlA2kaALBU4O4qRacwMCAAIBAAABAQABAQMAAAAAAQIAAQEDAAABAAEDADU3CEHS5ptJWx4vlEowh+QkLzFOUDaRoAsFTg7ipFpzAQmuEH+LA+Ape9hBnZq6nMM1jdY4yjqNfPfGDePA61HtXNQZFgAAAAAgGX0BzViCn52t/baPoqxteNOtkuCoKxjlR40X/Gm6+LI1NwhB0uabSVseL5RKMIfkJC8xTlA2kaALBU4O4qRac+gDAAAAAAAAoL5LAAAAAAAA","AKFt8+9hwQhlJn6FIu9RaiIah+u2Kq2zYSkgnrmK75BxSa+kGz/m8QFVDZkM8xIPhzDvk/MoVtBdAYqMoMeW/Am1ZfqGa5xKV6y2LkYtlTyrg+f09ewHe7GjVnlegZPtAg=="]
}
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"effects": {
"messageVersion": "v1",
"status": {
"status": "success"
},
"executedEpoch": "697",
"gasUsed": {
"computationCost": "1000000",
"storageCost": "2964000",
"storageRebate": "978120",
"nonRefundableStorageFee": "9880"
},
"modifiedAtVersions": [
{
"objectId": "0x09ae107f8b03e0297bd8419d9aba9cc3358dd638ca3a8d7cf7c60de3c0eb51ed",
"sequenceNumber": "370791516"
}
],
"transactionDigest": "3FopuDy5qzKm1kLRFZCdi8Lynadym9j15NaVxzUH6nYD",
"created": [
{
"owner": {
"AddressOwner": "0x6518cfc4854eb8b175c406e25e16e5042cf84a6c91c6eea9485eebeb18df4df0"
},
"reference": {
"objectId": "0x2890a83af153402a01a98653ec13c3b0de02ab5e0beef72e43210a3f920625af",
"version": 370791517,
"digest": "4jCB7GNeeyjzyKu9U9CmfYxBkKkDP5mr17GAeUTkKTsx"
}
},
{
"owner": {
"AddressOwner": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73"
},
"reference": {
"objectId": "0x3229652b63642e73ad6201462a2dd28af3b84580a7c7d5350ee460598fd5701a",
"version": 370791517,
"digest": "FRUP5KBKXGBZe19zCnBe2dc8rvD9fHks6VvCzJRHmxtf"
}
}
],
"mutated": [
{
"owner": {
"AddressOwner": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73"
},
"reference": {
"objectId": "0x09ae107f8b03e0297bd8419d9aba9cc3358dd638ca3a8d7cf7c60de3c0eb51ed",
"version": 370791517,
"digest": "2pHqGLqnMXNKp5DbaiJo1ztAtGGHshkW3XbqaMwuq9br"
}
}
],
"gasObject": {
"owner": {
"AddressOwner": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73"
},
"reference": {
"objectId": "0x09ae107f8b03e0297bd8419d9aba9cc3358dd638ca3a8d7cf7c60de3c0eb51ed",
"version": 370791517,
"digest": "2pHqGLqnMXNKp5DbaiJo1ztAtGGHshkW3XbqaMwuq9br"
}
},
"dependencies": [
"9k7z6BYe1pckcqcf4Mnpt3HsBmdNEAMW6vdUpP1YEiPT"
]
},
"events": [],
"objectChanges": [
{
"type": "mutated",
"sender": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73",
"owner": {
"AddressOwner": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73"
},
"objectType": "0x2::coin::Coin<0x2::sui::SUI>",
"objectId": "0x09ae107f8b03e0297bd8419d9aba9cc3358dd638ca3a8d7cf7c60de3c0eb51ed",
"version": "370791517",
"previousVersion": "370791516",
"digest": "2pHqGLqnMXNKp5DbaiJo1ztAtGGHshkW3XbqaMwuq9br"
},
{
"type": "created",
"sender": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73",
"owner": {
"AddressOwner": "0x6518cfc4854eb8b175c406e25e16e5042cf84a6c91c6eea9485eebeb18df4df0"
},
"objectType": "0x2::coin::Coin<0x2::sui::SUI>",
"objectId": "0x2890a83af153402a01a98653ec13c3b0de02ab5e0beef72e43210a3f920625af",
"version": "370791517",
"digest": "4jCB7GNeeyjzyKu9U9CmfYxBkKkDP5mr17GAeUTkKTsx"
},
{
"type": "created",
"sender": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73",
"owner": {
"AddressOwner": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73"
},
"objectType": "0x2::coin::Coin<0x2::sui::SUI>",
"objectId": "0x3229652b63642e73ad6201462a2dd28af3b84580a7c7d5350ee460598fd5701a",
"version": "370791517",
"digest": "FRUP5KBKXGBZe19zCnBe2dc8rvD9fHks6VvCzJRHmxtf"
}
],
"balanceChanges": [
{
"owner": {
"AddressOwner": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73"
},
"coinType": "0x2::sui::SUI",
"amount": "-1002985880"
},
{
"owner": {
"AddressOwner": "0x6518cfc4854eb8b175c406e25e16e5042cf84a6c91c6eea9485eebeb18df4df0"
},
"coinType": "0x2::sui::SUI",
"amount": "1000000000"
}
],
"input": {
"messageVersion": "v1",
"transaction": {
"kind": "ProgrammableTransaction",
"inputs": [
{
"type": "pure",
"valueType": "u64",
"value": "1000000000"
},
{
"type": "pure",
"valueType": "u64",
"value": "1000000000"
},
{
"type": "pure",
"valueType": "address",
"value": "0x6518cfc4854eb8b175c406e25e16e5042cf84a6c91c6eea9485eebeb18df4df0"
},
{
"type": "pure",
"valueType": "address",
"value": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73"
}
],
"transactions": [
{
"SplitCoins": [
"GasCoin",
[
{
"Input": 0
},
{
"Input": 1
}
]
]
},
{
"TransferObjects": [
[
{
"NestedResult": [
0,
0
]
}
],
{
"Input": 2
}
]
},
{
"TransferObjects": [
[
{
"NestedResult": [
0,
1
]
}
],
{
"Input": 3
}
]
}
]
},
"sender": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73",
"gasData": {
"payment": [
{
"objectId": "0x09ae107f8b03e0297bd8419d9aba9cc3358dd638ca3a8d7cf7c60de3c0eb51ed",
"version": 370791516,
"digest": "2iVkTf7XpjF6XJDAh5ztZdTmm1sKDGtTLjZoo8VJJ1HT"
}
],
"owner": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73",
"price": "1000",
"budget": "4964000"
}
},
"executionErrorSource": null
}
}
budget = 4964000
signSuiTransaction
方法获取请求参数const signSuiTransaction = async (requestParams: SignRequestParams): Promise<string> => {
const { gasBudget, gasPrice, privateKey, coinRefs, network, recipients } = requestParams;
// https://sdk.mystenlabs.com/typescript/cryptography/keypairs
const keypair = Ed25519Keypair.fromSecretKey(privateKey);
const secretKey = keypair.getSecretKey();
console.log("secretKey: ", secretKey);
const publicKey = keypair.getPublicKey();
const address = publicKey.toSuiAddress();
const tx = new Transaction();
// https://sdk.mystenlabs.com/typescript/transaction-building/gas#gas-payment
tx.setGasPayment(coinRefs);
tx.setGasPrice(gasPrice);
tx.setGasBudget(gasBudget);
tx.setSender(keypair.toSuiAddress());
// const [coin] = tx.splitCoins(tx.gas, [100]);
// https://sdk.mystenlabs.com/typescript/transaction-building/basics
const coins = tx.splitCoins(
tx.gas,
recipients.map((transfer) => transfer.amount),
);
// tx.transferObjects([coin], recipient);
recipients.forEach((transfer, index) => {
tx.transferObjects([coins[index]], transfer.to);
});
const client = new SuiClient({ url: getFullnodeUrl(network) });
const bytes = await tx.build({ client });
const { signature } = await keypair.signTransaction(bytes);
await verifyTransactionSignature(bytes, signature, {
// optionally verify that the signature is valid for a specific address
address: keypair.getPublicKey().toSuiAddress(),
});
return JSON.stringify([
toBase64(bytes),
signature
]);
}
测试
注意:这里的 gasPrice
参数是通过suix_getReferenceGasPrice
接口获取的!
注意:这里的 gasBudget
参数是通过sui_dryRunTransactionBlock
接口获取的!
test('signSuiTransaction', async () => {
const requestParams: SignRequestParams = {
"network": 'testnet',
"gasBudget": 4964000,
"gasPrice": 1000,
"privateKey": config.privateKey,
"coinRefs": [
{
"objectId": "0x09ae107f8b03e0297bd8419d9aba9cc3358dd638ca3a8d7cf7c60de3c0eb51ed",
"version": "370791516",
"digest": "2iVkTf7XpjF6XJDAh5ztZdTmm1sKDGtTLjZoo8VJJ1HT"
}
],
"recipients": [
{
"to": "0x6518cfc4854eb8b175c406e25e16e5042cf84a6c91c6eea9485eebeb18df4df0",
"amount": 1000000000
},
{
"to": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73",
"amount": 1000000000
}
],
}
const result = await signSuiTransaction(requestParams);
console.log("result", result);
expect(result).toBeDefined();
expect(result).toBeTruthy();
})
sui_dryRunTransactionBlock
接口测试交易执行是否成功sui_dryRunTransactionBlock 接口
https://docs.sui.io/sui-api-ref#sui_dryruntransactionblock
curl --location 'https://fullnode.testnet.sui.io:443' \
--header 'Content-Type: application/json' \
--data '{
"jsonrpc": "2.0",
"id": 1,
"method": "sui_dryRunTransactionBlock",
"params": ["AAAEAAgAypo7AAAAAAAIAMqaOwAAAAAAIGUYz8SFTrixdcQG4l4W5QQs+EpskcbuqUhe6+sY303wACA1NwhB0uabSVseL5RKMIfkJC8xTlA2kaALBU4O4qRacwMCAAIBAAABAQABAQMAAAAAAQIAAQEDAAABAAEDADU3CEHS5ptJWx4vlEowh+QkLzFOUDaRoAsFTg7ipFpzAQmuEH+LA+Ape9hBnZq6nMM1jdY4yjqNfPfGDePA61HtXNQZFgAAAAAgGX0BzViCn52t/baPoqxteNOtkuCoKxjlR40X/Gm6+LI1NwhB0uabSVseL5RKMIfkJC8xTlA2kaALBU4O4qRac+gDAAAAAAAAoL5LAAAAAAAA","AKFt8+9hwQhlJn6FIu9RaiIah+u2Kq2zYSkgnrmK75BxSa+kGz/m8QFVDZkM8xIPhzDvk/MoVtBdAYqMoMeW/Am1ZfqGa5xKV6y2LkYtlTyrg+f09ewHe7GjVnlegZPtAg=="]
}'
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "sui_dryRunTransactionBlock",
"params": ["AAAEAAgAypo7AAAAAAAIAMqaOwAAAAAAIGUYz8SFTrixdcQG4l4W5QQs+EpskcbuqUhe6+sY303wACA1NwhB0uabSVseL5RKMIfkJC8xTlA2kaALBU4O4qRacwMCAAIBAAABAQABAQMAAAAAAQIAAQEDAAABAAEDADU3CEHS5ptJWx4vlEowh+QkLzFOUDaRoAsFTg7ipFpzAQmuEH+LA+Ape9hBnZq6nMM1jdY4yjqNfPfGDePA61HtXNQZFgAAAAAgGX0BzViCn52t/baPoqxteNOtkuCoKxjlR40X/Gm6+LI1NwhB0uabSVseL5RKMIfkJC8xTlA2kaALBU4O4qRac+gDAAAAAAAAoL5LAAAAAAAA","AKFt8+9hwQhlJn6FIu9RaiIah+u2Kq2zYSkgnrmK75BxSa+kGz/m8QFVDZkM8xIPhzDvk/MoVtBdAYqMoMeW/Am1ZfqGa5xKV6y2LkYtlTyrg+f09ewHe7GjVnlegZPtAg=="]
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"effects": {
"messageVersion": "v1",
"status": {
"status": "success"
},
"executedEpoch": "697",
"gasUsed": {
"computationCost": "1000000",
"storageCost": "2964000",
"storageRebate": "978120",
"nonRefundableStorageFee": "9880"
},
"modifiedAtVersions": [
{
"objectId": "0x09ae107f8b03e0297bd8419d9aba9cc3358dd638ca3a8d7cf7c60de3c0eb51ed",
"sequenceNumber": "370791516"
}
],
"transactionDigest": "3FopuDy5qzKm1kLRFZCdi8Lynadym9j15NaVxzUH6nYD",
"created": [
{
"owner": {
"AddressOwner": "0x6518cfc4854eb8b175c406e25e16e5042cf84a6c91c6eea9485eebeb18df4df0"
},
"reference": {
"objectId": "0x2890a83af153402a01a98653ec13c3b0de02ab5e0beef72e43210a3f920625af",
"version": 370791517,
"digest": "4jCB7GNeeyjzyKu9U9CmfYxBkKkDP5mr17GAeUTkKTsx"
}
},
{
"owner": {
"AddressOwner": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73"
},
"reference": {
"objectId": "0x3229652b63642e73ad6201462a2dd28af3b84580a7c7d5350ee460598fd5701a",
"version": 370791517,
"digest": "FRUP5KBKXGBZe19zCnBe2dc8rvD9fHks6VvCzJRHmxtf"
}
}
],
"mutated": [
{
"owner": {
"AddressOwner": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73"
},
"reference": {
"objectId": "0x09ae107f8b03e0297bd8419d9aba9cc3358dd638ca3a8d7cf7c60de3c0eb51ed",
"version": 370791517,
"digest": "2pHqGLqnMXNKp5DbaiJo1ztAtGGHshkW3XbqaMwuq9br"
}
}
],
"gasObject": {
"owner": {
"AddressOwner": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73"
},
"reference": {
"objectId": "0x09ae107f8b03e0297bd8419d9aba9cc3358dd638ca3a8d7cf7c60de3c0eb51ed",
"version": 370791517,
"digest": "2pHqGLqnMXNKp5DbaiJo1ztAtGGHshkW3XbqaMwuq9br"
}
},
"dependencies": [
"9k7z6BYe1pckcqcf4Mnpt3HsBmdNEAMW6vdUpP1YEiPT"
]
},
"events": [],
"objectChanges": [
{
"type": "mutated",
"sender": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73",
"owner": {
"AddressOwner": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73"
},
"objectType": "0x2::coin::Coin<0x2::sui::SUI>",
"objectId": "0x09ae107f8b03e0297bd8419d9aba9cc3358dd638ca3a8d7cf7c60de3c0eb51ed",
"version": "370791517",
"previousVersion": "370791516",
"digest": "2pHqGLqnMXNKp5DbaiJo1ztAtGGHshkW3XbqaMwuq9br"
},
{
"type": "created",
"sender": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73",
"owner": {
"AddressOwner": "0x6518cfc4854eb8b175c406e25e16e5042cf84a6c91c6eea9485eebeb18df4df0"
},
"objectType": "0x2::coin::Coin<0x2::sui::SUI>",
"objectId": "0x2890a83af153402a01a98653ec13c3b0de02ab5e0beef72e43210a3f920625af",
"version": "370791517",
"digest": "4jCB7GNeeyjzyKu9U9CmfYxBkKkDP5mr17GAeUTkKTsx"
},
{
"type": "created",
"sender": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73",
"owner": {
"AddressOwner": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73"
},
"objectType": "0x2::coin::Coin<0x2::sui::SUI>",
"objectId": "0x3229652b63642e73ad6201462a2dd28af3b84580a7c7d5350ee460598fd5701a",
"version": "370791517",
"digest": "FRUP5KBKXGBZe19zCnBe2dc8rvD9fHks6VvCzJRHmxtf"
}
],
"balanceChanges": [
{
"owner": {
"AddressOwner": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73"
},
"coinType": "0x2::sui::SUI",
"amount": "-1002985880"
},
{
"owner": {
"AddressOwner": "0x6518cfc4854eb8b175c406e25e16e5042cf84a6c91c6eea9485eebeb18df4df0"
},
"coinType": "0x2::sui::SUI",
"amount": "1000000000"
}
],
"input": {
"messageVersion": "v1",
"transaction": {
"kind": "ProgrammableTransaction",
"inputs": [
{
"type": "pure",
"valueType": "u64",
"value": "1000000000"
},
{
"type": "pure",
"valueType": "u64",
"value": "1000000000"
},
{
"type": "pure",
"valueType": "address",
"value": "0x6518cfc4854eb8b175c406e25e16e5042cf84a6c91c6eea9485eebeb18df4df0"
},
{
"type": "pure",
"valueType": "address",
"value": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73"
}
],
"transactions": [
{
"SplitCoins": [
"GasCoin",
[
{
"Input": 0
},
{
"Input": 1
}
]
]
},
{
"TransferObjects": [
[
{
"NestedResult": [
0,
0
]
}
],
{
"Input": 2
}
]
},
{
"TransferObjects": [
[
{
"NestedResult": [
0,
1
]
}
],
{
"Input": 3
}
]
}
]
},
"sender": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73",
"gasData": {
"payment": [
{
"objectId": "0x09ae107f8b03e0297bd8419d9aba9cc3358dd638ca3a8d7cf7c60de3c0eb51ed",
"version": 370791516,
"digest": "2iVkTf7XpjF6XJDAh5ztZdTmm1sKDGtTLjZoo8VJJ1HT"
}
],
"owner": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73",
"price": "1000",
"budget": "4964000"
}
},
"executionErrorSource": null
}
}
sui_executeTransactionBlock
接口发送执行交易sui_executeTransactionBlock
接口
https://docs.sui.io/sui-api-ref#sui_executetransactionblock
curl --location 'https://fullnode.testnet.sui.io:443' \
--header 'Content-Type: application/json' \
--data '{
"jsonrpc": "2.0",
"id": 1,
"method": "sui_executeTransactionBlock",
"params": [
"AAAEAAgAypo7AAAAAAAIAMqaOwAAAAAAIGUYz8SFTrixdcQG4l4W5QQs+EpskcbuqUhe6+sY303wACA1NwhB0uabSVseL5RKMIfkJC8xTlA2kaALBU4O4qRacwMCAAIBAAABAQABAQMAAAAAAQIAAQEDAAABAAEDADU3CEHS5ptJWx4vlEowh+QkLzFOUDaRoAsFTg7ipFpzAQmuEH+LA+Ape9hBnZq6nMM1jdY4yjqNfPfGDePA61HtXNQZFgAAAAAgGX0BzViCn52t/baPoqxteNOtkuCoKxjlR40X/Gm6+LI1NwhB0uabSVseL5RKMIfkJC8xTlA2kaALBU4O4qRac+gDAAAAAAAAoL5LAAAAAAAA",
[
"AKFt8+9hwQhlJn6FIu9RaiIah+u2Kq2zYSkgnrmK75BxSa+kGz/m8QFVDZkM8xIPhzDvk/MoVtBdAYqMoMeW/Am1ZfqGa5xKV6y2LkYtlTyrg+f09ewHe7GjVnlegZPtAg=="
],
{
"showInput": true,
"showRawInput": true,
"showEffects": true,
"showEvents": true,
"showObjectChanges": true,
"showBalanceChanges": true,
"showRawEffects": false
},
"WaitForLocalExecution"
]
}'
Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "sui_executeTransactionBlock",
"params": [
"AAAEAAgAypo7AAAAAAAIAMqaOwAAAAAAIGUYz8SFTrixdcQG4l4W5QQs+EpskcbuqUhe6+sY303wACA1NwhB0uabSVseL5RKMIfkJC8xTlA2kaALBU4O4qRacwMCAAIBAAABAQABAQMAAAAAAQIAAQEDAAABAAEDADU3CEHS5ptJWx4vlEowh+QkLzFOUDaRoAsFTg7ipFpzAQmuEH+LA+Ape9hBnZq6nMM1jdY4yjqNfPfGDePA61HtXNQZFgAAAAAgGX0BzViCn52t/baPoqxteNOtkuCoKxjlR40X/Gm6+LI1NwhB0uabSVseL5RKMIfkJC8xTlA2kaALBU4O4qRac+gDAAAAAAAAoL5LAAAAAAAA",
[
"AKFt8+9hwQhlJn6FIu9RaiIah+u2Kq2zYSkgnrmK75BxSa+kGz/m8QFVDZkM8xIPhzDvk/MoVtBdAYqMoMeW/Am1ZfqGa5xKV6y2LkYtlTyrg+f09ewHe7GjVnlegZPtAg=="
],
{
"showInput": true,
"showRawInput": true,
"showEffects": true,
"showEvents": true,
"showObjectChanges": true,
"showBalanceChanges": true,
"showRawEffects": false
},
"WaitForLocalExecution"
]
}
Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"digest": "3FopuDy5qzKm1kLRFZCdi8Lynadym9j15NaVxzUH6nYD",
"transaction": {
"data": {
"messageVersion": "v1",
"transaction": {
"kind": "ProgrammableTransaction",
"inputs": [
{
"type": "pure",
"valueType": "u64",
"value": "1000000000"
},
{
"type": "pure",
"valueType": "u64",
"value": "1000000000"
},
{
"type": "pure",
"valueType": "address",
"value": "0x6518cfc4854eb8b175c406e25e16e5042cf84a6c91c6eea9485eebeb18df4df0"
},
{
"type": "pure",
"valueType": "address",
"value": "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73"
}
],
"transactions": [
{
"SplitCoins": [
"GasCoin",
[
{
"Input": 0
},
{
"Input": 1
}...
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!