Move语言社区

starmask-test-dapp和starmask交互的总结

starmask-test-dapp 里面有4种和starmask交互的方法

  1. await window.starcoin.request({method: ‘xxx’, params?: []})
    method 包括下面这些:
    stc_requestAccounts
    stc_accounts
    wallet_requestPermissions
    wallet_getPermissions
    personal_sign
    chain.id

全部的method列表包括下面这些(跟着starmask发布新版,随时会增加):

chain.id,
chain.info,
chain.get_block_by_number,
contract.call,
contract.dry_run,
contract.dry_run_raw,
contract.get_code,
contract.get_resource,
txpool.gas_price,
txpool.submit_hex_transaction,
net_version
starmask_getProviderState
personal_sign

注意, method的命名规则 xxx.xxx 是starcoin的restful api方法,xxx_yyy 是以太坊的api方法

wallet_getPermissions 在 stc-rpc-cap 里面被处理 生成response

  1. window.starcoin.on(‘xxx’, cb)
    都是starmask广播的事件, 穷举一共有三个:
    window.starcoin.on(‘chainChanged’, cb)
    window.starcoin.on(‘networkChanged’, cb)
    window.starcoin.on(‘accountsChanged’, cb)

  2. await starcoinProvider.getSigner().sendUncheckedTransaction({})

  3. await starcoinProvider.call({})

方法1/2 对应的 window.starcoin

  1. 从哪儿来的?
    repo: GitHub - starcoinorg/stc-inpage-provider

src/initializeInpageProvider.ts

  1. 生成
    → initializeProvider
    let provider = new MetaMaskInpageProvider();

  2. 注入
    → setGlobalProvider
    (window as Record<string, any>).starcoin = providerInstance;

  1. 如何在onekey里面处理 window.starcoin
  1. fork GitHub - starcoinorg/stc-inpage-provider, 自己构建一个window.starcoin, 替换dapp页面的window.starcoin
  2. 替换其中的 request 方法,改成跟 onekey 交互

方法3/4 对应的starcoinProvider

  1. 从哪儿来的?
    import { providers } from ‘@starcoin/starcoin’;
    starcoinProvider = new providers.Web3Provider(window.starcoin, ‘any’);

@starcoin/starcoin 对应repo: GitHub - starcoinorg/starcoin.js: Javascript SDK for the Starcoin Blockchain

src/providers/web3-provider.ts

  1. 方法3 的 starcoinProvider.getSigner().sendUncheckedTransaction({})
    最终是调用: src/providers/jsonrpc-provider.ts 的 send 方法
    this.provider.send(“stc_sendTransaction”, [hexTx])

  2. 方法4 的 starcoinProvider.call({})
    最终也是调用: src/providers/jsonrpc-provider.ts 的 send 方法
    this.send(‘contract.call’, [params.request])

  3. 所有的方法列表包括(跟着starmask发布新版,随时会增加):
    chain.info
    node.info
    txpool.gas_price
    contract.dry_run
    contract.dry_run_raw
    txpool.submit_hex_transaction
    chain.get_block_by_number
    chain.get_block_by_hash
    chain.get_transaction
    chain.get_transaction_info
    chain.get_events_by_txn_hash
    contract.get_code
    contract.get_resource
    state.get_account_state_set
    contract.call
    chain.get_events

详见: starcoin.js/jsonrpc-provider.ts at master · starcoinorg/starcoin.js · GitHub

  1. 如何在onekey里面处理?
    用iframe来嵌入dapp,在最顶层iframe里面监听 window.postmessage, 针对这些方法,在onekey里面去处理 然后返回。
1 个赞