MYKEY Docs
中文English
中文
中文
  • 简介
  • 基于MYKEY的第三方授权登录
    • 验签代码示例
    • 更多MYKEY登录的技术原理和流程
  • 接入MYKEY
    • 多种方式接入MYKEY
    • Mobile H5页面接入
      • ETH
      • EOS
      • JS功能扩展
    • MYKEY Android SDK接入
      • 环境准备
      • 初始化SDK
      • 认证
      • 签名
      • 转账
      • 合约调用
    • MYKEY iOS SDK接入
      • 环境准备
      • 初始化SDK
      • 认证
      • 签名
      • 转账
      • 合约调用
    • Web应用扫码接入
    • SimpleWallet协议接入
    • Deeplink协议接入
  • 深入MYKEY
    • 深入MYKEY账户
    • 类和方法定义
      • Android类
      • iOS类
    • 错误码
    • 识别MYKEY合约充值
      • ETH充值
      • EOS充值
    • MYKEY白皮书
  • KEY ID
    • KEYID ETH合约介绍
      • 创建账户模块
      • 数据存储模块
      • 逻辑模块
      • 逻辑管理模块
    • 账户恢复机制
    • KEYID合约升级流程
    • KEYID合约升级记录
      • ETH
        • KEY ID以太坊合约升级保护期参数调整公告
        • KEY ID以太坊逻辑合约模块升级公告
        • KEY ID以太坊合约升级保护期参数调整公告
        • KEY ID以太坊 AccountLogic/DualsigsLogic 合约升级公告
        • KEY ID以太坊 DappLogic 合约升级公示
  • 开发资源
    • ETH
    • EOS
  • 加入我们
    • 项目提交上架
    • 开发者社区
Powered by GitBook
On this page

Was this helpful?

  1. KEY ID
  2. KEYID ETH合约介绍

数据存储模块

AccountStorage合约中有4个多层mapping,用来存储数据。

数据

定义

含义

备注

一组公钥

mapping (address => mapping(uint256 => KeyItem)) keyData;

struct KeyItem { address pubKey; uint256 status; }

MYKEY账户地址=>序号index=>公钥结构体(包含公钥和状态)

第0位是admin key,第1位往后是operation key。

默认状态为0;状态为1是冻结状态。

紧急联系人

mapping (address => mapping(uint256 => BackupAccount)) backupData;

struct BackupAccount { address backup; uint256 effectiveDate; uint256 expiryDate; }

MYKEY账户地址=>序号index=>紧急联系人结构体(包含紧急联系人账户地址,生效时间,失效时间)

index为0~5,最多6个紧急联系人。

添加紧急联系人(addBackup)和删除紧急联系人(removeBackup)都有21天的延时,因此

addBackup操作会设置生效时间;

removeBackup操作会设置失效时间;

延时动作

mapping (address => mapping(bytes4 => DelayItem)) delayData;

struct DelayItem { bytes32 hash; uint256 dueTime; }

MYKEY账户地址=>动作ID=>延时结构体(包含动作哈希,到期时间)

动作ID是动作方法的唯一标志,与动作方法一一对应,长度4字节。

如bytes4(keccak256("changeAdminKey(address,address)"))

多签提案

mapping (address => mapping(address => mapping(bytes4 => Proposal))) proposalData;

struct Proposal { bytes32 hash; address[] approval; }

client:多签提案当事人;

backup:当事人的紧急联系人;

proposer:多签提案发起人;

client账户地址=>proposer账户地址=>动作ID=>提案结构体(包含动作哈希,已赞成的紧急联系人的数组)

动作哈希是提案通过后将要调用的函数及其参数的哈希,如keccak256(abi.encodePacked('changeAdminKey', account, pkNew))。

提案分两种:

  1. proposeByBoth:client和某一backup共同发起,需要双方签名,此时proposer为client本人;

  2. proposeAsBackup:某一backup单独发起(当client丢失admin key时),此时proposer为backup;

Previous创建账户模块Next逻辑模块

Last updated 5 years ago

Was this helpful?