服务器端调用智能合约,《精通以太坊:开发智能合约和去中心化应用》 ——3.4 远程调用以太坊客户端...

远程调用以太坊客户端

远程调用以太坊的客户端是指相比全功能客户端,只提供了一部分功能的客户端。这些客户端通常不会保存完整的区块链数据,所以它们的启动速度更快,也不会消耗大量的磁盘空间。

远程调用以太坊客户端提供了如下功能:

管理钱包中的私钥和以太坊地址。

创建、签名并广播交易。

通过交易内数据载荷的方式与智能合约交互。

浏览并使用DApp。

提供外部服务的链接,例如区块浏览器。

转换以太币的单位,从外部获取兑换的汇率。

向浏览器注入一个web3实例(供页面上的JavaScript与客户端交互)。

使用其他客户端提供或注入浏览器的web3实例。

访问本地或远程以太坊节点的RPC服务。

有些远程客户端,例如智能手机上的移动钱包,只提供了最基本的钱包功能。而有些远程客户端则是功能完备的DApp浏览器。它们的共同点是,这些客户端提供的功能都是全功能客户端的子集,而且不会在本地同步以太坊区块链数据,只会连接一些在别的地方运行的全功能节点,例如,你自己部署在本地设备或者Web服务器上的全功能节点,或者是第三方部署在服务器上的全功能节点。

我们来看看市面上流行的远程客户端和它们所提供的功能。

移动(智能手机)钱包

所有的移动钱包都属于远程客户端,因为智能手机并不具备运行全功能节点所需要的资源。轻客户端正在开发中,并且也不完全具备以太坊的各种用途。在Parity中,轻客户端被认为是“实验性”的,可以使用--light命令来使用。

流行的移动钱包包括如下这些译注1(我们列出这几个钱包是因为它们都非常流行,并不意味着作者对这些钱包的安全性或功能性提供任何背书):

Jaxx(https://jaxx.io)

基于BIP39助记词种子的多币种移动钱包,支持Bitcoin、Litecoin、Ethereum、Ethereum Classic、ZCash等多种货币和大量ERC20合约代币。Jaxx有Andriod和iOS版的移动应用,并且可以通过浏览器插件的方式安装,也有支持多种操作系统的桌面版本。

Status(https://status.im)

Status是一个移动钱包和DApp浏览器,支持多种代币和流行的DApp。有Andriod和iOS版的移动应用。

TrustWallet(https://trustwalletapp.com/)

移动版的以太坊和以太坊经典钱包,支持ERC20和ERC223代币。Trust Wallet有Andriod和iOS版的移动应用。

CipherBrowser(https://www.cipherbrowser.com)

功能齐全的以太坊移动钱包和DApp浏览器,支持与以太坊应用和代币集成。

浏览器钱包

很多钱包或DApp浏览器都提供针对Chrome或Firefox浏览器的插件,这就是运行在Web浏览器中的远程客户端。

一些非常著名的例子包括MetaMask、Jaxx、MyEtherWallet / MyCrypto和Mist。

MetaMask

MetaMask(https://metamask.io/)在第2章中已经介绍过,这是一个以功能完备著称的浏览器钱包,提供RPC客户端和基本的合约浏览器功能。它支持Chrome、Firefox、Opera和Brave浏览器。

乍一看,MetaMask就是一个浏览器钱包。可实际上它会在浏览器中注入一个web3实例,作为可以连接到多个以太坊区块链(例如主网、Ropsten测试网、Kovan测试网、本地RPC节点等)的RPC客户端。注入web3实例并作为外部RPC服务的网关,使得MetaMask成为开发者的神器。它可以跟MyEtherWallet或MyCrypto合并使用,成为这些工具的web3提供方和RPC网关。

Jaxx

上一节介绍的Jaxx(https://jaxx.io)是一款移动端钱包,但也可以通过Chrome和Firefox插件使用,并且也有桌面端钱包。

MhEhterWallet(MEW)

MyEtherWallet(https://www.myetherwallet.com/)是一个基于浏览器的JavaScript轻量级客户端,提供如下功能:

运行于JavaScript的以太坊钱包。

支持流行的硬件钱包,如Trezor和Ledger。

可以与其他客户端(如MetaMask)注入浏览器中的web3实例建立连接的web3接口。

可以连接到以太坊全功能客户端的RPC客户端。

通过合约的地址和ABI,可与智能合约进行交互的一组基本的接口。

MyEtherWallet非常适合测试场景,也可以作为硬件钱包的接口。它不应该被当作“主力”钱包软件,因为它暴露于浏览器环境中的诸多威胁,而且不是一个安全的密钥保存系统。

使用MyEtherWallet或其他基于浏览器的JavaScript钱包需要非常小心,因为这些都是钓鱼攻击的目标。使用书签的方式访问这些应用,不要轻信搜索引擎或其他链接。

MyCrypto

就在本书付梓之前,MyEtherWallet项目已经分拆为两个相互竞争的实现,由两支独立的开发团队来领导。这个项目“分叉”了,就像开源开发过程中出现的分叉一样。分拆后的两个项目是MyEtherWallet(维持原品牌)和MyCrypto(https://mycrypto.com/)。分拆之时,MyCrypto提供跟MyEtherWallet同样的功能,但日后很有可能产生差别,因为两支开发团队所追求的目标不同。

Mist译注2

Mist(https://github.com/ethereum/mist)是第一个支持以太坊的浏览器,由以太坊基金会团队开发。它也包含一个基于浏览器的钱包,并首次实现了对ERC20代币标准的支持(ERC20标准的作者Fabian Vogelsteller也是Mist的主要开发者)。Mist还首次引入了对以太坊地址的大小写校验(EIP-55)。它运行一个全功能节点,支持基于Swarm的存储和ENS地址。