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
  • 兼容web3
  • 登录
  • 验证MYKEY的签名

Was this helpful?

  1. 接入MYKEY
  2. Mobile H5页面接入

ETH

PreviousMobile H5页面接入NextEOS

Last updated 5 years ago

Was this helpful?

兼容web3

MYKEY兼容web3协议,您可以直接开发兼容web3协议的dapp,再通过mykey内置浏览器访问。也可以参考以下链接,了解更多eth web3协议的内容:

登录

使用web3.eth的givenProvider方法即可获得用户的账号信息。

{
      var Web3 = require('web3');
      var web3;
      if (typeof web3 !== 'undefined') {
          web3 = new Web3(web3.currentProvider);
      } else {
// set the provider you want from Web3.providers
          web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); //这一步是连接到以太坊节点
      }
      var version = web3.version;
      //解析web3.eth.givenProvider的返回,即可获得用户的ETH地址
      console.log(JSON.stringify(web3.eth.givenProvider));
  }

验证MYKEY的签名

因为mykey账号的独特设计,客户端会使用Reserved公钥签名,服务端需要使用Reserved公钥验证签名。比如我们使用web3协议进行签名和验签:

let sigUtil = require('eth-sig-util') 
let Web3 = require('web3'); 
let web3 = new Web3(new Web3.providers.HttpProvider("https://mainnet.infura.io/v3/56444e75b6a24070a374f791bd25f811")); 
let json = require('./AccountStorage.abi.json'); 
let AccountStorageABI = json.abi 
let AccountStorageAddr = '0xADc92d1fD878580579716d944eF3460E241604b7' 
let AccountStorageIns = new web3.eth.Contract(AccountStorageABI, AccountStorageAddr); 

// 1. get mykey account Reserved key 
// https://docs.mykey.org/dive-into-mykey/mykey-on-eos#keydata%E8%A1%A8%E4%B8%AD%E7%9A%84%E5%AF%86%E9%92%A5
let account = '0x67913A00a459fCd41CbF4124a887e8d8dE0742c0' 

// account proxy 
let reservedKeyAddr = await AccountStorageIns.methods.getKeyData(account, 3).call(); 
console.log(account, "reserved key:", reservedKeyAddr) // should be 0xd2F9b4652D80FA870207C2b421B8437d7D54a484
// 2. sign message, 
web3.personal.sign("hello", web3.eth.coinbase, console.log); 
let message = 'hello' 
let privKeyHex = '78e2219400da88378b746499ec8ff0d6aa97f806950276f28c65b9d569f32f84' // prvkey of '0xd2F9b4652D80FA870207C2b421B8437d7D54a484' 
let privKey = Buffer.from(privKeyHex, 'hex') 
let msgParams = { data: message }
let signed = sigUtil.personalSign(privKey, msgParams) 
console.log("signature:", signed)

// 3. recover 
msgParams.sig = signed 
let recovered = sigUtil.recoverPersonalSignature(msgParams) 
console.log("recovered:", recovered) 
console.log(reservedKeyAddr.toLowerCase() === recovered.toLowerCase()
https://web3js.readthedocs.io/en/v1.2.0/web3-eth.html