主页 > imtoken钱包安卓版手机下载 > 以太坊开发(20)Web3与智能合约交互实战

以太坊开发(20)Web3与智能合约交互实战

搭建智能合约开发环境

智能合约的开发环境依赖于node/npm,所以在搭建开发环境之前需要确保开发机已经安装了node/npm环境。

如果你还没有安装,mac下通过brew命令可以非常快速的安装

酿造安装节点

或者自己下载node安装包安装。

然后安装以下开发智能合约所需的工具:

Web3 JS - 用于开发以太坊客户端的 javascript 框架

npm install web3truffle - 以太坊开发框架

npm install -g truffleMetamask - 以太坊钱包,基于 Chrome 的插件

Ganache - 供本地使用的虚拟以太坊区块链,并自动创建 10 个本地区块链帐户用于测试

精通以太坊智能合约开发_siteqq.com 以太坊智能合约_以太坊智能合约取款

图片

Remix - 以太坊官方推荐的智能合约开发IDE,可以在浏览器中快速部署和测试智能合约。

精通以太坊智能合约开发_siteqq.com 以太坊智能合约_以太坊智能合约取款

图片

配置 Metamask 以连接到 Ganache 本地环境。 Ganache默认监听端口是7545,所以需要设置Metamask,如下,点击“Custom RPC”,然后设置本地虚拟区块链的地址

精通以太坊智能合约开发_siteqq.com 以太坊智能合约_以太坊智能合约取款

图片

精通以太坊智能合约开发_siteqq.com 以太坊智能合约_以太坊智能合约取款

图片

配置完成后,可以默认导入Ganache创建的账号。

精通以太坊智能合约开发_siteqq.com 以太坊智能合约_以太坊智能合约取款

图片

点击右边的key(show key),在弹出的界面中复制账户的token,然后点击Metamask右上角的头像,通过“Import Account”粘贴复制的token,导入,可以看到新导入的账户,账户默认已经有100 ETH。

精通以太坊智能合约开发_siteqq.com 以太坊智能合约_以太坊智能合约取款

图片

siteqq.com 以太坊智能合约_精通以太坊智能合约开发_以太坊智能合约取款

创建智能合约

在 Remix 编辑器中编写一个简单的智能合约 - HelloWorld

pragma solidity ^0.4.0;
contract HelloWorld {
   string public name;
   function HelloWorld() public {
       name = "Liping";
   }
   function setName(string _name) public {
       name = _name;
   }
}

合约编译完成后,点击“Run”选项卡,在“Environment”中选择“Web3 Provider”

精通以太坊智能合约开发_siteqq.com 以太坊智能合约_以太坊智能合约取款

图片

点击“确定”后,填写“http://localhost:7545”连接到我们在本地运行的Ganache虚拟区块链

精通以太坊智能合约开发_siteqq.com 以太坊智能合约_以太坊智能合约取款

图片

精通以太坊智能合约开发_siteqq.com 以太坊智能合约_以太坊智能合约取款

图片

精通以太坊智能合约开发_siteqq.com 以太坊智能合约_以太坊智能合约取款

连接成功后,“账户”下拉列表中会列出区块链中已有的账户:

精通以太坊智能合约开发_siteqq.com 以太坊智能合约_以太坊智能合约取款

图片

点击“Create”,将刚刚编写的智能合约代码部署到虚拟区块链上

精通以太坊智能合约开发_siteqq.com 以太坊智能合约_以太坊智能合约取款

图片

下一步将通过Web3 JS和Node.js编写智能合约的客户端。

通过 Web3 JS 访问智能合约

智能合约的传递可以通过Web3实现。 Web3 JS 通过 RPC 远程调用与以太坊节点连接。 然后通过Web3中的eth对象与以太坊进行交互。 过程主要是:

初始化Web3,设置区块链账户,设置智能合约Abi,设置智能合约地址,创建智能合约对象,通过智能合约对象与部署好的合约进行交互

完整代码(javascript)如下

 // 初始化 Web3
  if (typeof web3 !== 'undefined') {
      web3 = new Web3(web3.currentProvider);
  } else {
      web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:7545'));
  }
  // 设置默认账户
  web3.eth.defaultAccount = web3.eth.accounts[0];
  // 设置合约 ABI
  var contractAbi = [
      {
          "constant": false,

siteqq.com 以太坊智能合约_以太坊智能合约取款_精通以太坊智能合约开发

"inputs": [ { "name": "_name", "type": "string" } ], "name": "setName", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "payable": false, "stateMutability": "nonpayable", "type": "constructor" }, { "constant": true, "inputs": [], "name": "name", "outputs": [ {

精通以太坊智能合约开发_siteqq.com 以太坊智能合约_以太坊智能合约取款

"name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" } ]; // 设置合约地址 var contractAddress = '0x01ee312a2055f212e09aa43e1b8d61f5634ccfc3'; // 获取智能合约对象 var contract = web3.eth.contract(contractAbi).at(contractAddress); // 调用合约对象的方法,返回name contract.name(function(err, value) { $('#name').html(value); }) // 提交name的值 $('form').on('submit', function(event) { event.preventDefault; contract.setName($('#input_name').val()); });

siteqq.com 以太坊智能合约_精通以太坊智能合约开发_以太坊智能合约取款

代码比较简单精通以太坊智能合约开发,使用web3和jQuery。

重点讲解的是合约的ABI,以及如何获取合约Abi和合约地址。

什么是合约 ABI? ABI是Application Binary Interface的缩写。 它是一个能够收缩的二进制接口。 可以理解为描述智能合约的接口描述。 当编译合约时,它的abi就确定了。

如何获取合约ABI和合约地址?

这可以很容易地通过 Remix 浏览器 IDE 获得。 在“Compiler”选项卡中,点击“Details”按钮,在弹出的页面中可以看到“ABI”区域,点击右侧的复制图标,可以将ABI复制到剪贴板。

精通以太坊智能合约开发_siteqq.com 以太坊智能合约_以太坊智能合约取款

图片

ABI的内容从上面的代码可以看出,一个简单的JSON描述文件。

如何获取合约的部署地址?

同样是通过 Remix 浏览器 IDE 获得的。 上面我们通过“运行”选项卡中的“创建”部署了智能合约。 当点击“创建”按钮时精通以太坊智能合约开发,XXXXX 的合约名称将显示在选项卡的底部。 列表框,这是我们部署的合约,点击复制图标,可以将合约的地址复制到剪贴板,

精通以太坊智能合约开发_siteqq.com 以太坊智能合约_以太坊智能合约取款

图片

通过合约的ABI和合约地址后,就可以构造合约对象,然后通过合约对象完成智能合约的一些操作。

Web3 API中文文档

创建接口

通过上面的代码,已经初始化了web3,创建了合约对象,所以只需要写一个简单的HTML文件就可以完成一个非常简单的界面

精通以太坊智能合约开发_siteqq.com 以太坊智能合约_以太坊智能合约取款

图片

精通以太坊智能合约开发_siteqq.com 以太坊智能合约_以太坊智能合约取款

图片

在输入框中输入其他内容,点击“Say Hello To”按钮,可以看到合约返回的name值已经变成了在输入框中输入的值。

通过Ganache的Blocks and Transactions接口,可以看到每一次操作都会形成对应的区块和交易记录。

精通以太坊智能合约开发_siteqq.com 以太坊智能合约_以太坊智能合约取款

图片

精通以太坊智能合约开发_siteqq.com 以太坊智能合约_以太坊智能合约取款

图片