利用Node.js开发与合约交互的Web界面
零、在私有链上部署合约
// 本文中用到的MetaCoin合约
pragma solidity ^0.4.2;
contract MetaCoin {
mapping (address => uint) balances;
event Transfer(address indexed _from, address indexed _to, uint256 _value);
function MetaCoin() {
balances[tx.origin] = 10000;
}
function sendCoin(address receiver, uint amount) returns(bool sufficient) {
if (balances[msg.sender] < amount) return false;
balances[msg.sender] -= amount;
balances[receiver] += amount;
Transfer(msg.sender, receiver, amount);
return true;
}
function getBalance(address addr) returns(uint) {
return balances[addr];
}
}
一、新建一个项目
新建一个node.js项目并初始化
$ mkdir web3test && cd web3test
$ npm init
二、导入web3.js
npm install web3 --save
三、创建web3对象
var Web3 = require("web3");
//创建web3对象
var web3 = new Web3();
// 连接到以太坊节点
web3.setProvider(new Web3.providers.HttpProvider("http://localhost:8545"));
可以测试一下:
var version = web3.version.node;
console.log(version);
==>
在app目录下,终端输入:
prodeMacBook-Pro:web3test pro$ node app.js
输出:
Geth/linoy/v1.6.5-stable-cf87713d/darwin-amd64/go1.8.3
四、调用合约
部署合约:
私有链上查看地址,abi可以通过here获取
var abi = [{
"constant":false,"inputs":[{
"name":"receiver","type":"address"},{
"name":"amount","type":"uint256"}],"name":"sendCoin","outputs":[{
"name":"sufficient","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{
"constant":false,"inputs":[{
"name":"addr","type":"address"}],"name":"getBalance","outputs":[{
"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{
"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{
"anonymous":