首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查看sendTransaction实现

查看sendTransaction实现
EN

Ethereum用户
提问于 2019-09-10 08:41:37
回答 1查看 66关注 0票数 0

我希望看到在提供程序中实现getAccountssendTransaction的代码。

我试着深入研究Metamask源代码,并找到Metamask提供Web3 3提供者的行,但我不知道这个提供者在哪里实现了sendTransactiongetAccounts

这些方法是如何/在哪里实现的?

EN

回答 1

Ethereum用户

回答已采纳

发布于 2019-09-15 15:34:46

我建议检查一下将元掩模移植到新环境指南。即使您没有移植MetaMask,它也是有用的,因为它解释了项目组织。

如果您在getAccounts中搜索MetaMask,您将在createMetamaskMiddleware.js中找到它。它将它与其他函数一起传递给createWalletSubprovider

代码语言:javascript
复制
createWalletSubprovider({
  getAccounts,
  processTransaction,
  processEthSignMessage,
  processTypedMessage,
  processTypedMessageV3,
  processTypedMessageV4,
  processPersonalMessage,
}),

它在一个单独的存储库中提供。这个中间件将把JSON请求映射到MetaMask扩展中的函数。

  • eth_accounts => getAccounts
  • eth_sendTransaction => processTransaction

您可以确定函数的实现,在调用createMetamaskMiddleware参数时检查它的参数。

如果你跟着一些跳,你会发现它是在MetamaskController.initializeProvider完成的。

例如,对于getAccounts,您有:

代码语言:javascript
复制
  getAccounts: async ({ origin }) => {
    // Expose no accounts if this origin has not been approved, preventing
    // account-requring RPC methods from completing successfully
    const exposeAccounts = this.providerApprovalController.shouldExposeAccounts(origin)
    if (origin !== 'MetaMask' && !exposeAccounts) { return [] }
    const isUnlocked = this.keyringController.memStore.getState().isUnlocked
    const selectedAddress = this.preferencesController.getSelectedAddress()
    // only show address if account is unlocked
    if (isUnlocked && selectedAddress) {
      return [selectedAddress]
    } else {
      return []
    }
  }
票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/74824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档