Starcoin Move stdlib 的一些尝试

  1. 账号模型

    1. Authkey 的初始化问题

      1. 问题描述:第一次创建账号的时候需要 Authkey,导致转账的方法需要判断对方账号是否在链上,然后需要填充不同的参数,增加了第三方(比如交易所)的接入复杂度。

      2. 解决方案:第一次创建账号时 Authkey 留空,使用 address 作为 Authkey,虽然 address 的长度小于 Authkey,安全性比 Authkey 低,但提高了易用性,当用户第一次发起交易的时候自动更新 Authkey(当然用户可以主动发起更新 Authkey 的交易)。

    2. 合约账户问题

      1. Move 中并没有专门的合约账户。但有一些情况,需要类似合约账号的机制。比如:提供全局注册表,并允许任何人注册。

      2. 通过提供 SignerDelegated 的机制,允许用户将自己的账号的 SignerCapability 代理给合约,合约可以通过 SignerCapability 在合约中创建出 signer 实例,模拟该用户。

  2. 合约升级

    1. 提供了用户级别的设置 ModuleUpgradeStrategy

    2. 两阶段提交升级:先提交升级计划以及代码 Hash,再执行升级交易。

    3. DAO 治理方式升级:将 UpgradePlanCapability 托管给 DAO

  3. DAO 链上治理

    1. 合约升级

    2. 修改链上配置

    3. 国库资金支配

    4. Token 铸造

  4. Token 协议

    1. 全局注册表难题: Token::name_of<T>

    2. 用户需要先初始化 Balance<T>,才能接受 Token T,提供了 AutoAcceptToken 的用户级别的

      设置。

  5. NFT
    通过 SignerDelegated 代理机制实现全局注册表。

  6. Oracle
    通过 SignerDelegated 代理机制实现全局注册表。

  7. YieldFarming
    提供了任意资产的流动性挖矿算法

     

  8. Native 方法的扩充

    1. Hash::keccak_256

    2. Hash::ripemd16

    3. Signature::ecrecover

    4. Token::name_of