每个区块链开发人员都应该知道这些Web3和Metamask用例

2018年11月2日,MetaMask和其他dapp浏览器默认停止公开用户帐户。这将使本文的一些代码破裂。我将使用web3 1.0和新的MetaMask界面发布更新版本。Metamask是网络上dApps的事实标准。它将Web3实例注入窗口对象,使其可用于JavaScript代码。

我们将使用Web3 0.20版本,而不是Web3 1.0。Web3 1.0的代码会有所不同。

每个dApp都有它的使命,但它们与Metamask的交互方式是相似的。在本文中,我们将介绍处理Web3/Metamask交互的十种最常见的实践。

1.检测Metamask并实例化Web3

根据官方文档,这是最好的方法。

这里发生了什么?首先,我们检查是否注入了Web3.如果它被注入,我们使用注入的提供者创建一个新实例。这是为什么?因为我们想要使用我们的库版本,而不是Metamask注入的版本。

如果Web3不存在,我们尝试连接到本地主机提供程序,如ganache。

2.检查Metamask是否已锁定

Metamask可以安装但锁定。为了与用户帐户交互并发送交易,用户必须解锁Metamask。

3.检查当前网络

主网络之外有许多测试网络。通常,你的合约将部署到特定网络。你希望确保用户在同一网络上运行Metamask。

4.获取当前帐户

用户可能在Metamask上有多个帐户,但他们希望dApp与当前帐户进行交互。

你应该始终从Web3实例中获取帐户。不要保留和重复使用它,因为用户可以随时更改其帐户。

5.获取当前帐户的余额

这里我们使用函数getAccount并调用getBalance。简单。

6.检测当前帐户是否已更改

用户可以随时更改其帐户。你应该为此做好准备并做出正确的反应。

7.检测Metamask是否已锁定/解锁

用户可以随时锁定/解锁。你的dApp应该正确处理它。

8.处理取消/确认

用户与dApp交互后,你必须使用Web3 API发送事务。用户可以按Metamask弹出窗口上的取消或确认按钮.如果处理不当,这可能会导致UI不一致。

要使用交易哈希立即返回,请调用contract.methodName.sendTransaction

9.获取交易收据

一旦你的dApp交易被挖掘,交易收据就变得可用。但是没有事件/通知,所以我们必须实施一个民意调查机制。

10.监听Web3事件

Solidity事件处理很棒。假设你的合约实现了所有必要的事件,它们允许从丑陋的轮询切换到推送机制.你可以完全避免轮询并对事件做出反应。事件回调返回了大量数据,但我们最感兴趣的是args

总结

无论你的dApp是什么,它仍然必须执行常见任务,例如检测Web3,获取帐户状态和平衡,识别当前网络以及处理交易和事件。我们已经讨论了如何使用十个代码片段来完成它。

PS

这里的很多示例使用的方法可能会因为Metamask的状态或某些变量在调用时未定义而引发错误.你应该将它们包装在生产环境中的try/catch中。为简单起见,此处使用了异步/等待。它可以用Promise then/catch代替。

======================================================================

如果你想学习区块链并在Blockchain Technologies建立职业生涯,那么请查看我们分享的一些以太坊、比特币、EOS、Fabric等区块链相关的交互式在线编程实战教程:

  • java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
  • python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
  • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
  • 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发进阶教程,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • ERC721以太坊通证实战,课程以一个数字艺术品创作与分享DApp的实战开发为主线,深入讲解以太坊非同质化通证的概念、标准与开发方案。内容包含ERC-721标准的自主实现,讲解OpenZeppelin合约代码库二次开发,实战项目采用Truffle,IPFS,实现了通证以及去中心化的通证交易所。
  • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
  • java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
  • php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
  • c#比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在C#代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是C#工程师不可多得的比特币开发学习课程。
  • EOS入门教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
  • 深入浅出玩转EOS钱包开发,本课程以手机EOS钱包的完整开发过程为主线,深入学习EOS区块链应用开发,课程内容即涵盖账户、计算资源、智能合约、动作与交易等EOS区块链的核心概念,同时也讲解如何使用eosjs和eosjs-ecc开发包访问EOS区块链,以及如何在React前端应用中集成对EOS区块链的支持。课程内容深入浅出,非常适合前端工程师深入学习EOS区块链应用开发。
  • Hyperledger Fabric 区块链开发详解,本课程面向初学者,内容即包含Hyperledger Fabric的身份证书与MSP服务、权限策略、信道配置与启动、链码通信接口等核心概念,也包含Fabric网络设计、nodejs链码与应用开发的操作实践,是Nodejs工程师学习Fabric区块链开发的最佳选择。
  • Hyperledger Fabric java 区块链开发详解,课程面向初学者,内容即包含Hyperledger Fabric的身份证书与MSP服务、权限策略、信道配置与启动、链码通信接口等核心概念,也包含Fabric网络设计、java链码与应用开发的操作实践,是java工程师学习Fabric区块链开发的最佳选择。
  • tendermint区块链开发详解,本课程适合希望使用tendermint进行区块链开发的工程师,课程内容即包括tendermint应用开发模型中的核心概念,例如ABCI接口、默克尔树、多版本状态库等,也包括代币发行等丰富的实操代码,是go语言工程师快速入门区块链开发的最佳选择。

汇智网原创翻译,转载请标明出处。这里是每个区块链开发人员都应该知道这些Web3和Metamask用例