概述
这篇文档介绍了波卡账户的基础知识。有关账户派生和索引等更多信息,请参见高级账户页面:
https://wiki.polkadot.network/docs/learn-account-advanced
有关波卡账户背后的密码学的更深入解释,请参见密码学页面:
https://wiki.polkadot.network/docs/learn-cryptography
账户地址
地址是波卡账户的公共部分。私有部分是用于访问此地址的密钥。公共和私有部分共同组成波卡账户。您可以将您的账户的公共地址视为您的邮箱,将私钥视为打开该邮箱的钥匙。任何人都可以向您的邮箱发送邮件,但只有您可以访问它们,因为只有您可以访问其密钥。
在波卡账户的环境中,任何人都可以向您的公共地址发送通证,但只有您可以使用私钥进行交易。这就是为什么您应该保密您的私钥。
助记词和地址生成
一个有效的账户需要有一个私钥,可以用来签署一种支持的曲线和签名方案。没有私钥,账户无法签署任何内容。在波卡中,有一些没有私钥的账户的例外情况(即无密钥账户)。这些账户是多重签名账户和匿名代理的,这里不讨论。
大多数钱包为用户生成助记词短语,以备份他们的钱包并从助记词生成私钥。并非所有钱包都使用相同的算法将助记词短语转换为私钥,这会影响在多个钱包中使用相同助记词短语的能力。使用不同措施的钱包将从完全相同的助记词短语中获得不同的地址集。
注意:并非所有钱包都使用相同的算法将助记词短语转换为私钥Subkey和Polkadot-JS基于BIP39这个标准中的字典来生成助记词,但使用熵字节数(熵字节数组是一种随机数的表示方式)组生成私钥,而完整的BIP39钱包(如 Ledger)在助记词上使用2048轮PBKDF2。由于使用了各种加密算法,同一助记词可能会在其他钱包上生成不同的私钥。有关更多信息,请参见Substrate BIP39存储库:
https://github.com/paritytech/substrate-bip39
Subkey工具生成的典型助记词短语如下所示。
还显示了其相应的私钥/公钥对。
Secret seed (Private key):
0x056a6a4e203766ffbea3146967ef25e9daf677b14dc6f6ed8919b1983c9bebbc
Public key (SS58):
5F3sa2TJAWMqDhXG6jhV4N8ko9SxwGy8TpaNS1repo5EYjQX
波卡默认地址格式是MultiAddress(多地址)类型。这意味着相同的助记词短语将为不同的平行链生成公共密钥。有关更多信息,请参见高级账户页面(https://wiki.polkadot.network/docs/learn-account-advanced)上的地址格式部分(https://wiki.polkadot.network/docs/learn-account-advanced)。
获取与管理地址
要了解有关在波卡上生成账户的更多信息,请访问账户生成页面:
https://wiki.polkadot.network/docs/learn-account-generation
账户余额类型
在波卡中,根据账户活动,有不同类型的余额。不同的余额类型表明您的余额是否可用于转账、支付费用,或者由于链上要求而必须保持冻结和未使用状态。下面的示例在Polkadot-JS UI的“账户(Account)”选项卡中显示Kusama账户的不同余额类型(请注意,波卡账户的余额类型相同)。
总余额表示账户中通证的总数。请注意,此数字不一定对应您可以转移的通证。在本例中,总通证数为0.6274 KSM。可转移余额表示可以自由转移的通证数量。这是通过从通证总数中减去锁定和保留的通证数量计算出来的。锁定资金对应于用于Staking、治理和既得转移Vested Transfer(见下文)的通证。在本例中,可转移余额为0.0106 KSM。
编者注:
既得转移:DOT可能会被锁定以体现资金的逐步释放。与其他类型的锁定类似,这些资金不能被转移,但可以用于协议的其他部分,例如参与治理投票或作为验证者或提名者进行质押。逐步释放的资金是按照一个释放计划来解锁的,每个区块会解锁一定数量的通证(线性释放),或者在特定的区块号后解锁全部通证(悬崖式释放)。尽管通证是以这种方式释放的,但它并不会自动反映在链上,因为锁定是惰性的,需要一个外部交易来更新。
既得余额(Vested Balance)表示发送到账户并按照特定时间表释放的通证。这些通证归账户所有,但被锁定并在特定数量的区块后可用于转移。在本例中,既得余额为0.25 KSM。
绑定余额表示锁定以参与链上投注的通证数量。在本例中,绑定余额(Bonded Balance)为0.4 KSM。
民主余额(Democracy Balance)表示被锁定以在链上参与民主治理(即投票支持公投和议会)的通证数量。在本例中,民主余额为0.4 KSM。
可赎回余额(Redeemable Balance)表示准备解锁以再次变为可转移的通证数量。这些通证已经经历了解除绑定期。在这种情况下,可赎回余额为0.1 KSM。
锁定余额(Locked Balance)表示冻结以参与链上Staking、治理或既得转移的通证数量。锁定不会堆叠,这意味着如果您有不同的锁,则总锁定余额不是所有单个锁的总和。相反,最大的锁定量决定了总锁定余额。在本例中,由于民主治理上有最大的锁定量(0.55 KSM),因此锁定余额为0.55 KSM。
保留余额(Reserved Balance)表示冻结用于链上活动而不是Staking、治理和既得转移的通证数量。此类活动可以是设置身份或代理。由于链上要求,保留资金通常可以通过采取一些链上操作来释放。例如,“身份(Identity)”面板在注册链上身份时保留资金,但通过清除身份,您可以取消保留资金并使其再次自由。代理也是如此。这样做的想法是这些操作需要一些网络内存使用,这不是免费的。在本例中,我们创建了一个治理代理,其保留的资金为0.0668 KSM。
在Polkadot-JS中查询账户数据
在Polkadot-JS UI中,您还可以在开发者(Developer)>链状态(Chain State)下查询账户数据。在selected state query选择系统托盘pallet,后面跟着account(AccountId32): FrameSystemAccountInfo,然后在Option中选择一个账户,然后单击右侧的“+”按钮。
账户信息包括:
- nonce,账户发送的交易数量。
- consumers,当前依赖于该账户存在的其他模块的数量。在这个数为零之前,该账户不能被回收。
- providers,允许该账户存在的其他模块的数量。在这个数和sufficients都为零之前,该账户不能被回收。
- sufficients,出于自身目的允许该账户存在的模块的数量。在这个数和providers都为零之前,该账户不能被回收。
- data,属于该账户的额外数据。用于存储许多链中的余额。
有关上述数据的更深入的信息可以在基础密码库中找到。详情请参见:
https://github.com/paritytech/substrate/blob/2e7fde832b77b242269b136f1c3b6fffef86f9b6/frame/system/src/lib.rs#LL767C1-L781C24
该AccountData结构定义了Substrate中的余额类型。三种类型的余额包括free、reserved和frozen。账户的可用余额是free减去任何考虑的资金的金额frozen,而账户的总free余额是和reserved资金的总和。描述flags有关账户的额外信息。
有关上述数据的更深入信息可以在Substrate代码库的余额托盘中找到。详情请参见:
https://github.com/paritytech/substrate/blob/2e7fde832b77b242269b136f1c3b6fffef86f9b6/frame/balances/src/types.rs#LL95-L114
解锁锁定余额
锁定余额不能堆叠!最大的锁定量决定了被锁资金的总量。请看这个演练视频教程,它将在上面的例子中指导您解锁资金的过程。视频地址详情请参见:
https://www.youtube.com/watch?v=LHgY7ds_bZ0
在例子中,我们提到了锁定余额是0.55 KSM,因为最大的锁定是在民主治理上,是0.55 KSM。一旦民主治理锁定被移除,下一个最大的锁定是在Staking上,是0.5 KSM(绑定的0.4 KSM + 可赎回的0.1 KSM)。这意味着锁定余额会变成0.5 KSM,而0.05 KSM会被加到可转移余额中。
在赎回未绑定的0.1 KSM后,锁定余额会变成0.4 KSM,而另外0.1 KSM会被加到可转移余额中。现在最大的锁定仍然是绑定的那部分。这意味着即使我们移除了逐步释放的锁定(Vested Lock),锁定余额仍然是0.4 KSM,而没有任何通证会被加到可转移余额中。要释放那些绑定的通证,我们需要解除绑定,并等待解除绑定期结束后才能赎回它们。如果我们移除了代理,那么预留的资金会自动被加到可转移余额中。
存在存款与回收
当您生成一个账户(地址)时,您只是生成了一个让您访问它的密钥。该账户还不存在于链上。为此,它需要1 DOT的存在存款。
编者注:
存在存款是波卡和大多数基于Substrate的链使用的一种机制,用于防止低余额的账户占用链的状态空间。
如果一个账户的余额低于存在存款,那么该账户将被回收。该账户将从区块链的状态中完全删除,以节省空间,同时该地址中的任何资金也将被销毁。您并没有失去对被回收地址的访问权——只要您有您的私钥或恢复的助记词短语,您仍然可以使用该地址——但它需要再次充值至少等于存在存款的金额才能与链进行交互。
交易费用不能导致一个账户被回收。由于费用是在任何其他交易逻辑之前从账户中扣除的,因此余额等于存在存款的账户不能构建一个有效的交易。需要添加额外的资金来支付交易费用。
以下是另一种理解存在存款的方式。
您是否注意到过Windows上的Thumbs.db文件或Mac上的.DS_Store文件?这些都是垃圾文件,它们没有特定的目的,只是让预览稍微快一点。如果一个文件夹为空,只保存了这样一个文件,您可以删除该文件夹以清除硬盘上的垃圾。
这并不意味着您永远失去了对这个文件夹的访问权——您随时可以重新创建它。毕竟,您有密钥——您是电脑的主人。这只意味着您想要保持电脑干净,直到您可能再次需要这个文件夹并重新创建它。您的地址就像这个文件夹——当它里面没有东西时,它就会从链上移除,但当它有了存在存款时,它就会被放回。
账户身份
波卡内置的身份托盘(Identity Pallet)允许用户将链上元数据附加到他们的账户。独立注册商可以验证此元数据以提供可信度。
要了解有关如何设置或发布身份、如何定义子账户或如何成为注册商的更多信息,请阅读本指南。详情请参见:
https://wiki.polkadot.network/docs/learn-identity)
代理账户
波卡配备了通用代理账户系统,允许用户将密钥保存在冷存储中,而代理则代表他们执行受限(或不受限)功能。
有关代理的更多信息,请参阅代理页面:
https://wiki.polkadot.network/docs/learn-proxies
多重签名账户
多重签名账户是由多个标准账户、纯代理甚至其他多重签名账户创建的账户。
有关多签名账户的完整说明,包括用例,请参阅多重签名账户页面:
https://wiki.polkadot.network/docs/learn-account-multisig
资源
Understanding Accounts and Keys in Polkadot(理解波卡中的账户和密钥):与Bill Laboon和BlockX Labs的Chinmay Patel一起解释波卡中不同类型的账户和密钥的用途。文章详情请参见:
https://www.crowdcast.io/e/polkadot-keys/register