值得信赖的区块链资讯!
波卡的交易构建与签名操作指南
“波卡知识图谱”是我们针对波卡从零到一的入门级文章,我们尝试从波卡最基础的部分讲起,为大家提供全方位了解波卡的内容,当然这是一项巨大的工程,也充满了挑战,然而我们希望通过这样的努力让大家能够正确认知波卡,也让不了解波卡的人方便快速掌握波卡相关知识,今天是该栏目的第84期,波卡的交易架构是比较新颖的设计,开发者需要细致地理解波卡的交易是如何构建的,以及相关的签名是如何操作的。
本文将讨论波卡中的交易格式以及如何创建、签署和广播交易。本文演示了一些可用的工具,集成时请始终参考每个工具的文档。
交易格式
波卡有一些所有交易通用的基本交易信息。
Address:发送账户的SS58编码地址。
Block Hash:检查点区块的哈希。
Block Number:检查点块的编号。
Genesis Hash:链的创世哈希。
Metadata:提交时Runtime的SCALE编码元数据。
Nonce:本次交易的随机数。
Spec Version:运行时的当前规范版本。
Transaction Version:交易格式的当前版本。
Tip:可选,增加交易优先级的提示。
Era Period:可选,交易有效的检查点之后的区块数。如果为零,则交易是永久的(immortal)。
警告:使交易变成永久的(immortal)存在一些风险。如果一个账户被收回并且用户重新为该账户注资,那么他们可以重播一个永久的交易。始终默认使用非永久的(mortal)外源。
从System模块查询的随机数(nonce)不考虑待处理的交易(pending transactions)。如果你想同时提交多个有效交易,你必须手动跟踪和增加随机数。
每个交易都有自己的(或没有)要添加的参数。例如,Balances pallet中的transferKeepAlive函数将采用:
dest: 目的地地址
#[compact] value:通证数(紧凑编码compact encoding)
1
序列化交易格式
使用该–chain 选项选择链。可以是polkadot、kusama、westend、 rococo或自定义链规范。默认情况下,客户端将启动Polkadot。观看视频,学习单个代码库如何为四个不同的区块链提供支持, 以了解有关链的选择的内部工作原理的更多信息。相关视频内容:
在提交之前,交易会被序列化。序列化交易是十六进制编码的SCALE编码字节。波卡的Runtime是可升级的,因此任何接口都可能发生变化,元数据允许开发人员相应地构建任何外源(extrinsics)或存储条目。话虽这么说,序列化格式可以描述如下:
紧随其后的SCALE编码字节的紧凑编码数。
1 位:如果没有签名则为0,如果有则为1。
7 位:外部版本,它等于十进制的4。
4 个字节:Runtime的规范版本。
4 个字节:Runtime的交易版本。
32 字节:链的创世哈希。
32 字节:作为era参考的区块哈希。如果交易是永久的,那么这将是创世哈希。
如果有一个签名是:
一个用sp_runtime::MultiAddress::Id指示交易的签名者的编码的SCALE。
一个用sp_runtime::MultiSignature::{SigningScheme}签名(波卡支持sr25519、ed25519和ECDSA作为签名方案)的编码的SCALE。
一个用sp_runtime::generic::Era指示该交易的有效期的编码的SCALE:
如果交易是永久的,那么Era就是0。
否则,它将是一个Vec[u64, u64]包括时期和阶段的时期。
用随机数紧凑编码的u32。
用支付给区块生产者的小费(tip)进行紧凑编码的u128。
一个用sp_runtime::traits::SignedExtension>与此交易相关的附加数据和逻辑编码的SCALE 。
具体交易参数或调用数据,包括:
1 个字节:交易调用的pallet索引。
1 个字节:交易正在调用的pallet中的函数。
变量:被调用函数所需的SCALE编码参数。
元数据为您提供了解如何构建特定于您的交易的序列化调用数据所需的所有信息。您可以在Substrate文档中阅读有关元数据、其格式以及如何获取它的更多信息 。相关内容:
https://docs.substrate.io/reference/command-line-tools/subxt/#metadata
2
总结
获得所有必要信息后,您将需要:
构造一个未签名的交易。
创建签名的有效载荷(payload)。
签署有效载荷。
将签名的有效载荷序列化为交易。
提交序列化交易。
Parity提供以下工具来帮助执行这些步骤。
Polkadot-JS Tools
Polkadot-JS Tools包含一组用于与Substrate客户端交互的命令行工具,包括一个名为“Signer CLI”的工具,用于创建、签名和广播交易。
此示例将使用signer submit命令,该命令将创建并提交交易。signer sendOffline命令具有完全相同的API,但不会广播交易。submit并且sendOffline必须连接到节点以获取当前元数据并构建有效交易。他们的API具有以下格式:
yarn run:signer <submit|sendOffline> –account <from-account-ss58> –ws <endpoint> <module.method> [param1] [...] [paramX]
签名:
yarn run:signer sign –account <from-account-ss58> –seed <seed> –type <sr25519|ed25519> <payload>
从121X5bEgTZcGQx5NZjwuTjqqKoiG8B2wEAvrUFjuw24ZGZf2发送0.5T到15vrtLsCQFG3qRYUcaEeeEih4JwepocNJHkpsrqojqnZPc2y:
yarn run:signer sign –account 121X5bEgTZcGQx5NZjwuTjqqKoiG8B2wEAvrUFjuw24ZGZf2 –seed "pulp gaze fuel … mercy inherit equal" –type sr25519 0x040300ff4a83f1…a8239139ff3ff7c3f6
这将返回要签名的有效载荷和等待签名的输入。获取此有效载荷并使用您的正常签名环境(例如air gapped机器、VM等)。签署有效载荷:
yarn run:signer sign –account 121X5bEgTZcGQx5NZjwuTjqqKoiG8B2wEAvrUFjuw24ZGZf2 –seed "pulp gaze fuel … mercy inherit equal" –type sr25519 0x040300ff4a83f1…a8239139ff3ff7c3f6
保存输出并将其带到您将广播的机器上,将其输入到submit的签名字段中,然后发送交易(或者如果使用sendOffline则返回序列化交易)。
Tx Wrappers
如果您不想使用CLI进行签名操作,Parity提供了一个名为TxWrapper Core的SDK来离线生成和签署交易。对于波卡、Kusama和选择平行链,请使用该txwrapper-polkadot包。其他基于Substrate的链将有自己的txwrapper-{chain}实现,请参阅示例以获取指南。TxWrapperCore相关内容:
https://github.com/paritytech/txwrapper-core
其余txwrapper-{chain}实例相关内容:
https://github.com/paritytech/txwrapper-core/blob/main/packages/txwrapper-examples/README.md
1
导入私钥
import { importPrivateKey } from '@substrate/txwrapper-polkadot';
const keypair = importPrivateKey(“pulp gaze fuel … mercy inherit equal”);
客户端将启动Polkadot。观看视频,学习单个代码库如何为四个不同的区块链提供支持, 以了解有关链的选择的内部工作原理的更多信息。相关视频内容:
2
从公钥导出地址
import { deriveAddress } from '@substrate/txwrapper-polkadot';
// Public key, can be either hex string, or Uint8Array
const publicKey = “0x2ca17d26ca376087dc30ed52deb74bf0f64aca96fe78b05ec3e720a72adb1235”;
const address = deriveAddress(publicKey);
3
离线构建一笔交易
归档节点不会删减任何区块或状态数据。使用–pruning archive标注。某些类型的节点(如验证者)必须以归档模式运行。
import { methods } from "@substrate/txwrapper-polkadot";
const unsigned = methods.balances.transferKeepAlive(
{
dest: "15vrtLsCQFG3qRYUcaEeeEih4JwepocNJHkpsrqojqnZPc2y",
value: 5000000000,
},
{
address: "121X5bEgTZcGQx5NZjwuTjqqKoiG8B2wEAvrUFjuw24ZGZf2",
blockHash: "0x1fc7493f3c1e9ac758a183839906475f8363aafb1b1d3e910fe16fab4ae1b582",
blockNumber: 4302222,
genesisHash: "0xe3777fa922cafbff200cadeaea1a76bd7898ad5b89f7848999058b50e715f636",
metadataRpc, // must import from client RPC call state_getMetadata
nonce: 2,
specVersion: 1019,
tip: 0,
eraPeriod: 64, // number of blocks from checkpoint that transaction is valid
transactionVersion: 1,
},
{
metadataRpc,
registry, // Type registry
}
);
4
构建签名有效载荷
import { methods, createSigningPayload } from '@substrate/txwrapper-polkadot';
// See "Construct a transaction offline" for "{…}"
const unsigned = methods.balances.transferKeepAlive({…}, {…}, {…});
const signingPayload = createSigningPayload(unsigned, { registry });
5
序列化已签名的交易
Parity Polkadot客户端实现了一个Polkadot主机和一个本地Runtime。Runtime必须编译为WebAssembly并存储在链上。如果客户端的Runtime规范与存储在链上的Runtime规范相同,则客户端将使用客户端二进制文件执行区块。
import { createSignedTx } from "@substrate/txwrapper-polkadot";
// Example code, replace `signWithAlice` with actual remote signer.
// An example is given here:
// https://github.com/paritytech/txwrapper-core/blob/b213cabf50f18f0fe710817072a81596e1a53cae/packages/txwrapper-core/src/test-helpers/signWithAlice.ts
const signature = await signWithAlice(signingPayload);
const signedTx = createSignedTx(unsigned, signature, { metadataRpc, registry });
6
解码有效载荷类型
您可能希望在提交之前解码有效载荷(payload)以验证其内容。
import { decode } from "@substrate/txwrapper-polkadot";
// Decode an unsigned tx
const txInfo = decode(unsigned, { metadataRpc, registry });
// Decode a signing payload
const txInfo = decode(signingPayload, { metadataRpc, registry });
// Decode a signed tx
const txInfo = decode(signedTx, { metadataRpc, registry });
7
检查交易的哈希
import { getTxHash } from ‘@substrate/txwrapper-polkadot’;
const txHash = getTxHash(signedTx);
否则,客户端将从链上执行Wasm Runtime。因此,在同步链时,客户端将使用其关联的Wasm二进制文件执行过去运行时的区块。此功能还允许无硬分叉升级:客户端可以在不更新客户端的情况下执行新的Runtime。
提交已签名的有效荷载
有几种方法可以提交签名的有效载荷:
签名者CLI(yarn run:signer submit –tx –ws )
Substrate API Sidecar
带有author_submitExtrinsic或author_submitAndWatchExtrinsic的RPC,后者将使您订阅事件event,以便在交易得到验证并包含在链中时得到通知。
备注
示例中使用的一些地址。请参阅子项文档:
https://docs.substrate.io/reference/command-line-tools/subkey/
$ subkey –network polkadot generate
Secret phrase `pulp gaze fuel … mercy inherit equal` is account:
Secret seed: 0x57450b3e09ba4598 … … … … … … … .. 219756eeba80bb16
Public key (hex): 0x2ca17d26ca376087dc30ed52deb74bf0f64aca96fe78b05ec3e720a72adb1235
Account ID: 0x2ca17d26ca376087dc30ed52deb74bf0f64aca96fe78b05ec3e720a72adb1235
SS58 Address: 121X5bEgTZcGQx5NZjwuTjqqKoiG8B2wEAvrUFjuw24ZGZf2
$ subkey –network polkadot generate
Secret phrase `exercise auction soft … obey control easily` is account:
Secret seed: 0x5f4bbb9fbb69261a … … … … … … … .. 4691ed7d1130fbbd
Public key (hex): 0xda04de6cd781c98acf0693dfb97c11011938ad22fcc476ed0089ac5aec3fe243
Account ID: 0xda04de6cd781c98acf0693dfb97c11011938ad22fcc476ed0089ac5aec3fe243
SS58 Address: 15vrtLsCQFG3qRYUcaEeeEih4JwepocNJHkpsrqojqnZPc2y
如果需要更好的查看代码,请参见原文,相关地址:
https://wiki.polkadot.network/docs/build-transaction-construction#tx-wrapper
比推快讯
更多 >>- Ondo Finance 将于 2026 年初在 Solana 链上推出其代币化股票和 ETF 平台
- 英伟达发布新版开源 AI 模型
- Bittensor(TAO)完成首次减半
- 英伟达 美股盘前涨约 1.5%
- Ripple 将 RLUSD 拓展至以太坊 Layer 2 网络
- 上市公司 Marygold Companies 推出石油比特币策略基金 WTIB
- BitMine 上周增持 102,259 枚以太坊,Tom Lee 认为市场已开启复苏
- BitMine:ETH 总持仓量已增至约 396.7 万枚
- 新加坡一专业天使投资者遭钓鱼诈骗,损失 10 万元加密货币
- 某鲸鱼平仓 20 倍杠杆比特币多单,持仓 35 天亏损 779 万美元
- WLF 联创:Binance 将新增 DOGE、SUI 和 XRP 的 USD1 交易对
- Michael Saylor:Strategy 今年迄今比特币收益率为 24.9%
- 受美国降息预期和避险需求提振,黄金价格上涨
- 美国就业数据疲软或加剧美元走低预期
- Strategy 斥资 9.803 亿美元增持 10,645 枚比特币
- Strateg 披露上周增持 10645 枚比特币
- 数据:1645 枚 ETH 从 Abraxas Capital Mgmt (Heka Funds) 转入 Binance,价值约 518 万美元
- MetYa 完成 5000 万美元联合融资
- 不丹与 Cumberland 达成合作,建设数字资产基础设施
- Hyperliquid 平台活跃合约交易地址量较 11 月初减少 21.97%
- 灰度向 Coinbase 转入约 957 枚 ETH 和 103 枚 BTC,价值超 1000 万美元
- 数据:378.13 万枚 ASTER 从 Aster 转出,价值约 343.6 万美元
- 花旗:2026 年标普 500 目标价 7700 点,AI 是关键主题
- Zama:创作者计划第五季提前结束,虚假活动已影响用户体验
- 摩根士丹利:本周非农数据若温和疲软或将提高美联储进一步降息概率
- Bitwise 为其 Hyperliquid ETF 提交修订文件,或即将上市
- Bybit 现已支持 ZIG 链 ZIG 资产充值服务
- 哈塞特:特朗普可以自由地就美联储政策发表意见
- 曾冒充 Coinbase 客服骗取用户 650 万美元的嫌疑人 Ron 已被捕
- Bitdeer 11 月挖矿产出 526 枚比特币,同比增长 251%
- 加密基金 C1 Fund 宣布购买 Consensys 股权
- Hyperscale Data 公布 11 月末估算总资产达 3.77 亿美元,比特币持仓约 452 枚
- 拒绝 Tether 收购邀约,尤文图斯股价周一飙升近 14%
- American Bitcoin Corp 增持 261 枚 BTC,总持仓达 5,044 枚 BTC
- 特朗普关税是否合法或于明年初裁决,预测市场显示不利于特朗普概率较大
- 某交易员再次逆市押注,看好明年 1 月降息 25 基点
- Pendle 周报:PT-sUSDe 即将登陆 Solana,产品迎一系列关键升级
- Visa 宣布推出稳定币咨询服务,提供稳定币战略与实施方案
- 何一回应币安 Alpha 关闭传闻:没有听说
- 数据:25 枚 BTC 从匿名地址转入 Cumberland,价值约 224 万美元
- 分析师:通胀数据将成为市场焦点,BTC 鲸鱼持有者抛售意愿减弱
- CoinShares:数字资产投资产品上周净流入 8.64 亿美元
- 美 SEC 已撤诉 60% 从拜登时代继承的加密案件,其中多数与特朗普家族有业务往来
- 中国国家数据局与新加坡资讯通信媒体发展局签署合作备忘录,开展区块链等数字技术与创新合作
- 主流 Perp DEX 一览:各平台交易量萎靡均不足 50 亿美元,Pacifica 交易量逆势上涨
- RootData 推出代币解锁悬赏活动:守护数据透明与投资者权益
- 马斯克称今年发布 Grok 新模型,目前年内发布概率仅为 23%
- 摩根大通将在以太坊上推出首个代币化货币市场基金,种子基金规模达 1 亿美元
- 交易员 Peter Brandt:比特币已跌破牛市周期的抛物线式上涨
- Pacifica 高频交易员 30 天创近 200 倍交易量,月积分累计过万
比推专栏
更多 >>观点
比推热门文章
- Ondo Finance 将于 2026 年初在 Solana 链上推出其代币化股票和 ETF 平台
- 英伟达发布新版开源 AI 模型
- Bittensor(TAO)完成首次减半
- 英伟达 美股盘前涨约 1.5%
- Ripple 将 RLUSD 拓展至以太坊 Layer 2 网络
- 上市公司 Marygold Companies 推出石油比特币策略基金 WTIB
- BitMine 上周增持 102,259 枚以太坊,Tom Lee 认为市场已开启复苏
- BitMine:ETH 总持仓量已增至约 396.7 万枚
- 加密变得‘无聊’是否标志其正式步入主流应用阶段?
- 新加坡一专业天使投资者遭钓鱼诈骗,损失 10 万元加密货币
比推 APP



