简单了解 Polkadot 特有的术语、和其他链的显著区别以及使用 Polkadot 的实用信息。

原文标题:《一些使用 Polkadot 的实用信息》
撰文:Polkadot
翻译:PolkaWorld 社区

这篇文章是对 Polkadot 协议的概括介绍,主要会介绍 Polkadot 特有的术语、和其他链的显著区别以及使用 Polkadot 的实用信息。

DOT 代币

  • 代币小数位数 : 12
  • 余额类型 : u128

地址

在 Polkadot (和大多数 Substrate 链)中,用户帐户是一个 32 字节(256 位)的 AccountId。这是 Substrate 使用的加密的公钥。

Polkadot (和 Substrate)使用 SS58 地址格式。这是一种广泛的「元格式」,旨在处理许多不同的密码和链。它与比特币的 Base58Check 格式有很多共同点,比如版本前缀、基于哈希的校验后缀以及 base-58 编码。

有关编码和更全面的网络前缀列表的信息,请参见 Substrate wiki 中的 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 设定了一个锁仓,随着时间的推移,这个锁仓会减少,直到所有的资金都可以转移。

更多信息:

外部元素和事件

外部元素(Extrinsics)

外部元素包含了来自外部世界的信息,它有三种形式:

  • 内在因素(Inherents)
  • 签名的交易(Signed Transactions)
  • 未签名的交易(Unsigned Transactions)

作为基础设施提供者,你将几乎只处理已签名的交易。但是,你将在你解码的区块中看到其他外部元素。你可以在 Substrate 文档 中找到更多信息。

内在因素包含未被证明为真,但验证人基于某种合理性的方法对其达成了一致的信息。例如,时间戳无法被证明,但是验证人可以一致同意它在系统时钟的某个范围内。内在因素并没有在网络上 「八卦」,只有区块生产者将其插入到区块中。

已签名的交易包含发布交易的账户的签名,并且需要支付费用才能将交易包含在链上。由于在链上包含签名交易的价值可以在执行之前识别出来,因此它们可以在网络上的节点之间进行「八卦」,从而降低垃圾信息的风险。签名交易符合以太坊或比特币交易的概念。

某些交易不能由手续费帐户签名,并且使用未签名的交易。例如,当用户从有 DOT 的以太坊合约向新的 DOT 地址进行映射的时候,新地址还没有任何资金来支付费用。

交易永存性

外部元素可以是有限期的,也可以是永存的。交易负载包括一个区块号和一个区块哈希检查点,交易从该检查点开始有效,以及一个有效期(在某些地方也称为 「era」),该有效期表示交易有效的检查点之后的区块数。如果此有效性窗口内的区块中未包含外部项,则将从交易队列中丢弃它。

链只存储有限数量的先前区块哈希作为引用。你可以从链状态或元数据中查询这个名为 BlockHashCount 的参数。该参数在 genesis 设置为 2400 个区块(大约 4 小时)。如果有效期大于存储在链上的块的数量,那么只要有一个要检查的块(即有效期的最小值和块哈希计数),交易才有效。

使用 genesis 哈希将块检查点设置为零,有效期为零将使交易永存。

注意:如果一个帐户被销毁并且一个用户重新为该帐户提供资金,那么他们可以重放一个永存的交易。务必默认使用有限期的外部元素。

事件(Events)

外部元素代表来自外部世界的信息,而事件则代表来自链的信息。外部元素可以触发事件。例如,当认领 staking 奖励时,staking 模块发出奖励事件,以告知用户账户的奖励金额。

手续费

Polkadot 使用基于 weight 的费用,与 gas 不同,它是在调度前收取的。用户还可以添加一笔 「小费」 来提高拥挤时段的交易优先级。有关更多信息,请参见 交易费页面

编码

Parity 的集成工具应该允许你处理解码的数据。如果你想绕过它们直接与链数据交互或实现自己的编解码器,Polkadot 使用 SCALE 编解码器 对区块和交易数据进行编码。

智能合约

波卡的中继链不支持智能合约。

其他网络

除了运行专用网络外,Polkadot 还有另外两个网络,在部署到 Polkadot 主网之前,你可以在其中测试基础结构。

  • Kusaam 网络:Kusama 是波卡的疯狂表亲。许多有风险的功能在在进入 Polkadot 之前,都会被部署到 Kusama。
  • Westend 测试网:Westend 是 Polkadot 的测试网,使用 Polkadot runtime。

其他问题

如果没有相应的链上交易,帐户的余额是否可以更改?

不,但并非所有的余额变化都在一个交易中,有些是在事件中。你将需要运行一个存档节点并监听事件和交易以跟踪所有帐户活动。这尤其适用于锁仓的操作,如果你将余额计算为可消耗余额,即自由余额减去最大锁仓。

什么样的链深度被认为是 「安全的」?

波卡使用确定性的最终机制。一旦一个块完成,它就不能被还原,除非用硬分叉。为了取消 runtime 升级,Kusama 已经有了硬分叉,它还原了四个最终确定的块。使用 10 个区块的最终深度应该是安全的。

请注意,在 Polkadot 中,区块生成和终结是独立的过程,链可以有一个长的未完成区块头。

用户需要与任何智能合约交互吗?

不,用户直接与链的逻辑交互。

波卡有状态租赁吗?

没有,Polkadot 使用小额存款来防止灰尘帐户和其他经济机制,如为使用状态的操作锁定或保留代币。

来源链接:wiki.polkadot.network