Web3 实践:Sui 区块链交易全流程解析与实战指南

Web3实践:Sui区块链交易全流程解析与实战指南在Web3浪潮席卷全球的今天,Sui作为一个高性能的Layer1区块链,以其创新的对象模型和高效的交易处理能力,成为开发者关注的焦点。如何在Sui上完成一笔交易?从环境配置到签名执行,每一步都隐藏着Web3开发的奥秘。本文将

Web3 实践:Sui 区块链交易全流程解析与实战指南

在 Web3 浪潮席卷全球的今天,Sui 作为一个高性能的 Layer 1 区块链,以其创新的对象模型和高效的交易处理能力,成为开发者关注的焦点。如何在 Sui 上完成一笔交易?从环境配置到签名执行,每一步都隐藏着 Web3 开发的奥秘。本文将通过一个实战案例,带你完整解析 Sui 区块链交易的全流程。无论你是 Web3 新手,还是希望深入探索区块链技术的开发者,这份指南都将为你打开 Sui 的大门,助你在 Web3 世界中更进一步!

本文以 Web3 实践为视角,基于 Sui 测试网,系统展示了区块链交易的全流程:从配置客户端环境、查询钱包对象,到获取 Gas 价格、估算 Budget,再到签名并执行交易,每一步都配有详细代码和 API 调用示例(如 suix_getOwnedObjects、sui_dryRunTransactionBlock 等)。通过这一过程,读者不仅能掌握 Sui 交易的核心机制,还能理解 Gas 管理的精妙设计。此外,文章还介绍了如何通过浏览器和命令行验证交易结果,为 Web3 开发者提供了一份实用且可操作的参考指南。

实操

列出当前配置的所有 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 │ *      │
╰─────────┴─────────────────────────────────────┴────────╯

查看当前活跃的 Sui 钱包地址

➜ 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

Request:
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=="]
}
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
    }
}

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
                                    }...

剩余50%的内容订阅专栏后可查看

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
寻月隐君
寻月隐君
0x89EE...a439
不要放弃,如果你喜欢这件事,就不要放弃。如果你不喜欢,那这也不好,因为一个人不应该做自己不喜欢的事。