ios developer account:Substrate账户设计:若何保证资金的平安?

allbet

欢迎进入allbet欧博官网(www.ALLbetgame.us)。allbet欧博官网开放ALLBET欧博真人客户端、Allbet代理网页版、Allbet会员网页版、Allbet会员注册、Allbet代理开户、Allbet电脑客户端下载、Allbet手机版下载等业务。

Substrate 使用多组公/私钥对来代表网络的介入者。

概览

区块链系统的介入者角色各异,例如从验证人到通俗用户。

举个例子,Substrate 节点使用 “提名权益证实”(NPoS)算法来选择验证人。验证人和提名人可能拥有大量资金,因此 Substrate 的 Stake 模块引入了帐户抽象,以辅助确保资金的尽可能平安。

这些抽象账户是:

  • 账户

    • 存储密钥(Stash keys): 存储账户的作用是持有大量资金。它的私钥应该存放在冷钱包中,保证尽可能平安。

    • 控制密钥(Controller keys): 控制帐户代表存储帐户作出选择,例如付款偏好,但应仅持有少量资金来支付买卖用度。它的私钥应该保持平安,由于其会影响验证人设置,但私钥会在维护验证人时定期使用。

  • 会话密钥(Session keys): 会话密钥是保存在验证人客户端中的 “热” 密钥,用于签署某些验证人操作。他们不应该持有资金。

“注重: 想要领会有关验证人和提名人的更多信息,请查看 Substrate 的 NPoS Staking module[1]。

账户密钥

一个密钥对可以代表一个账户并控制资金,就像你在其他区块链中看到的通俗账户一样。在 Substrate Balances 模块[2]的语境下,这些帐户必须具有最小金额(“现有存款”)才气存在于存储中。

帐户密钥是通用化界说的,并在 runtime 中详细化。

继续我们存储和控制帐户的例子,这些帐户的密钥通过其预期用途举行区分,而不是通过任何底层的加密学差异举行区分。建立存储或控制密钥时,还支持通俗帐户密钥支持的所有加密。

存储密钥

存储密钥(Stash keys)是界说存储帐户的公/私钥对。该帐户就像一个 “储蓄帐户”,由于您不应经常使用该帐户举行买卖。因此,应以最高平安性来看待其私钥,例如在平安或硬件平安层中举行珍爱。

由于存储密钥保持离线状态,因此它将指定一个控制帐户以行使存储帐户资金的权重做出非支出决议。它还可以指定一个署理帐户来代表其投票介入治理。

控制密钥

控制密钥(Controller keys)是界说控制帐户的公/私钥对。在 Substrate 的 NPoS 模子语境中,控制密钥将示意一个人想要验证或提名的意图。

控制密钥用于设置诸如奖励吸收地址之类的偏好,对于验证人来说还用于设置其会话密钥。控制帐户只需要支付买卖用度,因此只需要很少的资金。

控制密钥永远不能用于从其存储帐户破费资金。然则,控制密钥的行为可能会导致 slash,因此仍应妥善保管。

会话密钥

会话密钥(Session keys)是验证人用来签署与共识相关的新闻的 “热密钥”。它的本意不是控制资金的帐户密钥,而应该仅用于其原本的目的。它们可以定期更改;您的控制账户仅需要通过署名会话公钥来建立证书,然后通过外部信息广播该证书。会话密钥也是通用界说,并在 runtime 中详细化。

要建立会话密钥,验证人的操作者必须证实密钥代表其存储帐户(stake)和提名人。为此,他们通过使用其控制密钥对密钥举行署名来建立证书。然后,他们通过在链上的事务中发布会话证书来通知链此密钥代表其控制密钥。

Substrate 提供了 Session module[3],该模块允许验证人治理其会话密钥。

强类型包装器

你可以声明随便数目的会话密钥。例如,默认的 Substrate 节点就用了三个:BABE、GRANDPA 和 “I'm Online”。其他链可能有更多或更少的会话密钥,详细取决于链希望其验证人执行的操作。

这些差别的会话密钥可以使用相同的密码学,然则在整个 runtime 逻辑中,其用途完全差别。为了防止将错误的密钥用于错误的操作,Rust 强类型会包装这些密钥,使它们相互不兼容,并确保仅将它们用于原有目的。

时期

若是会话密钥被泄露,攻击者可能会犯下造成 Slash 的行为。会话密钥应定期(例如每个会话)通过 the `rotate_keys` RPC[4] 更改,以提高平安性。

下一步

领会更多

  • 领会更多 Substrate 中使用的密码学[5]

示例

  • 学习建立本地网络和天生密钥的教程[6]

参考资料

[1]Staking module: https://substrate.dev/rustdocs/v2.0.0-rc5/pallet_staking/index.html

[2]Balances 模块: https://substrate.dev/rustdocs/v2.0.0-rc5/pallet_balances/index.html

[3]Session module: https://substrate.dev/rustdocs/v2.0.0-rc5/pallet_session/index.html

[4]the rotate_keys RPC: https://substrate.dev/rustdocs/v2.0.0-rc5/sc_rpc/author/trait.AuthorApi.html,tymethod.rotate_keys

[5]Substrate 中使用的密码学: https://substrate.dev/docs/en/knowledgebase/advanced/cryptography

[6]建立本地网络和天生密钥的教程: https://substrate.dev/docs/en/tutorials/start-a-private-network/

[7]session keys runtime API: https://substrate.dev/rustdocs/v2.0.0-rc5/sp_session/trait.SessionKeys.html

[8]Substrate 节点 runtime 中的会话密钥: https://substrate.dev/rustdocs/v2.0.0-rc5/node_runtime/struct.SessionKeys.html

[9]substrate_application_crypto: https://substrate.dev/rustdocs/v2.0.0-rc5/sp_application_crypto/index.html