加入 PolkaWorld 社区,共建 Web 3.0!
这篇文章是对 Polkadot 协议的概括介绍,主要会介绍 Polkadot 特有的术语、和其他链的显著区别以及使用 Polakdot 的实用信息。
DOT 代币
代币小数位数:12
余额类型:u128
地址
在 Polkadot(和大多数 Substrate 链)中,用户帐户是一个 32 字节(256 位)的 AccountId。这是 Substrate 使用的加密的公钥。
Polkadot(和 Substrate)使用 SS58 地址格式。这是一种广泛的“元格式”,旨在处理许多不同的密码和链。它与比特币的 Base58Check 格式有很多共同点,比如版本前缀、基于哈希的校验后缀以及 base-58 编码。
有关编码和更全面的网络前缀列表的信息,请参见 Substrate wiki 中的 SS58 页面。https://github.com/paritytech/substrate/wiki/External-Address-Format-(SS58)
本指南的相关 SS58 前缀:(SS58 编码前)
Polkadot: 0
Kusama: 2
Westend: 42密码学
Polkadot 支持以下加密密钥对和签名算法:
Ed25519
Sr25519 - Ristretto 群上的 Schnorr 签名
secp256k1 上的 ECDSA 签名
请注意,secp256k1 密钥的地址是公钥哈希的 SS58 编码,以便将公钥从 33 字节减少到 32 字节。
小额存款
波卡使用小额存款(ED:existential deposit)来防止灰尘帐户将状态挤爆。如果一个帐户低于 ED,它将被销毁,即完全从存储中删除,并将 nonce 值重置。
出于审计目的追踪账户 nonce 值的钱包和保管人应该注意不要让帐户销毁,因为用户可能会朝该地址退款,并尝试与其进行交易。余额模块提供transfer_keep_alive的功能(即在转账时保持账户存在的功能),使用了该功能后,如果一笔转账将导致销毁发送方的帐户,则会返回错误并中止交易,而不会进行转账。
自由的 vs 保留的 vs 锁仓的 vs 锁仓待释放的余额
帐户余额信息存储在 AccountData 中。Polkadot 主要处理两种类型的余额:自由余额(free balance)和保留余额(reserved balance)。
对于大多数操作,你可能感兴趣的是自由余额。例如,它是一个账户在 staking 和治理方面的“权力”。保留余额是指某项业务预留的资金,仍属于账户持有人,但不能使用。
锁仓(locks)是对自由余额的一种抽象,它暂时无法支出,只能用作某些特定目的。几个锁仓可以在同一个帐户上操作,但它们是重叠的而不是相加的。例如,一个账户可以有 200 DOTs 的自由余额,上面有两个锁仓:150 DOTs 用于转账,100 DOTs 用于保留备用。帐户不能进行导致自由余额低于 150 DOTs 的转账,但却可以通过跟保留余额相关的操作,导致自由账户低于 150 但高于 100 DOTs。
在治理公投中用于 staking 和投票的绑定代币都是锁仓的。
锁仓待释放的余额(Vesting)是另一种使用了锁仓的自由余额的抽象。Vesting 设定了一个锁仓,随着时间的推移,这个锁仓会减少,直到所有的资金都可以转移。
更多信息:
可锁仓的代币:https://substrate.dev/rustdocs/master/frame_support/traits/trait.LockableCurrency.html
锁仓撤销的原因:https://substrate.dev/rustdocs/master/frame_support/traits/enum.WithdrawReason.html
Vesting:https://substrate.dev/rustdocs/master/pallet_vesting/index.html
外部元素和事件外部元素(Extrinsics)
外部元素包含了来自外部世界的信息,它有三种形式:
内在因素(Inherents)
签名的交易(Signed Transactions)
未签名的交易(Unsigned Transactions)
作为基础设施提供者,你将几乎只处理已签名的交易。但是,你将在你解码的区块中看到其他外部元素。你可以在 Substrate 文档中找到更多信息。https://substrate.dev/docs/en/knowledgebase/learn-substrate/extrinsics
内在因素包含未被证明为真,但验证人基于某种合理性的方法对其达成了一致的信息。例如,时间戳无法被证明,但是验证人可以一致同意它在系统时钟的某个范围内。内在因素并没有在网络上 “八卦”,只有区块生产者将其插入到区块中。
已签名的交易包含发布交易的账户的签名,并且需要支付费用才能将交易包含在链上。由于在链上包含签名交易的价值可以在执行之前识别出来,因此它们可以在网络上的节点之间进行“八卦”,从而降低垃圾信息的风险。签名交易符合以太坊或比特币交易的概念。
某些交易不能由手续费帐户签名,并且使用未签名的交易。例如,当用户从有 DOT 的以太坊合约向新的 DOT 地址进行映射的时候,新地址还没有任何资金来支付费用。交易永存性
外部元素可以是有限期的,也可以是永存的。交易负载包括一个区块号和一个区块哈希检查点,交易从该检查点开始有效,以及一个有效期(在某些地方也称为 “era”),该有效期表示交易有效的检查点之后的区块数。如果此有效性窗口内的区块中未包含外部项,则将从交易队列中丢弃它。
链只存储有限数量的先前区块哈希作为引用。你可以从链状态或元数据中查询这个名为 BlockHashCount 的参数。该参数在 genesis 设置为 2400 个区块(大约 4 小时)。如果有效期大于存储在链上的块的数量,那么只要有一个要检查的块(即有效期的最小值和块哈希计数),交易才有效。
使用 genesis 哈希将块检查点设置为零,有效期为零将使交易永存。
注意:如果一个帐户被销毁并且一个用户重新为该帐户提供资金,那么他们可以重放一个永存的交易。务必默认使用有限期的外部元素。事件(Events)
外部元素代表来自外部世界的信息,而事件则代表来自链的信息。外部元素可以触发事件。例如,当认领 staking 奖励时,staking 模块发出奖励事件,以告知用户账户的奖励金额。手续费
Polkadot 使用基于 weight 的费用,与 gas 不同,它是在调度前收取的。用户还可以添加一笔 “小费” 来提高拥挤时段的交易优先级。有关更多信息,请参见交易费页面。https://wiki.polkadot.network/docs/en/learn-transaction-fees编码
Parity 的集成工具应该允许你处理解码的数据。如果你想绕过它们直接与链数据交互或实现自己的编解码器,Polkadot 使用 SCALE 编解码器(https://substrate.dev/docs/en/knowledgebase/advanced/codec)对区块和交易数据进行编码。
智能合约
波卡的中继链不支持智能合约。
其他网络
除了运行专用网络外,Polkadot 还有另外两个网络,在部署到 Polkadot 主网之前,你可以在其中测试基础结构。
Kusaam 网络:Kusama 是波卡的疯狂表亲。许多有风险的功能在在进入 Polkadot 之前,都会被部署到 Kusama。
Westend 测试网:Westend 是 Polkadot 的测试网,使用 Polkadot runtime。
其他问题如果没有相应的链上交易,帐户的余额是否可以更改?
不,但并非所有的余额变化都在一个交易中,有些是在事件中。你将需要运行一个存档节点并监听事件和交易以跟踪所有帐户活动。这尤其适用于锁仓的操作,如果你将余额计算为可消耗余额,即自由余额减去最大锁仓。什么样的链深度被认为是 “安全的”?
波卡使用确定性的最终机制。一旦一个块完成,它就不能被还原,除非用硬分叉。为了取消 runtime 升级,Kusama 已经有了硬分叉,它还原了四个最终确定的块。使用 10 个区块的最终深度应该是安全的。
请注意,在 Polkadot 中,区块生成和终结是独立的过程,链可以有一个长的未完成区块头。用户需要与任何智能合约交互吗?
不,用户直接与链的逻辑交互。波卡有状态租赁吗?
没有,Polkadot 使用小额存款来防止灰尘帐户和其他经济机制,如为使用状态的操作锁定或保留代币。
查看当前链高度的外部源是什么?
Polkadot JS 浏览器:https://polkadot.js.org/apps/#/explorer
Polkascan 区块浏览器:https://polkascan.io/
原文:https://wiki.polkadot.network/docs/en/build-protocol-info
翻译:PolkaWorld 社区
欢迎学习 Substrate:
https://substrate.dev/
关注 Substrate 进展:
https://github.com/paritytech/substrate
关注 Polkadot 进展:
https://github.com/paritytech/polkadot