20181119——web3.js

web3.js是以太坊提供的一个Javascript库,它封装了以太坊的JSON RPC API,提供了一系列与区块链交互的Javascript对象和函数,包括查看网络状态,查看本地账户、查看交易和区块、发送交易、编译/部署智能合约、调用智能合约等,其中最重要的就是与智能合约交互的API。

JSON格式用于进行轻量级数据的交互,它可描述数字,字符串,有序的数以及键值对集合。

JSON-RPC是一种无状态,轻量级的远程过程调用协议(RPC)。该规范主要定义与处理过程相关的数据结构和规则,它是与传输方式无关的,可在Socket,HTTP或在各种消息传送环境内使用。它只是将JSON(RFC 4627)作为数据格式。


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];
    }
}

这个合约有三个函数
MetaCoin:构造函数,在合约被部署到区块链执行
getBalance:返回账户的余额,只读数据,不会修改数据
sendCoin:向另一个账户发送指定数量的MetaCoin,它会改变balance的值

先初始化web3text这个node.js的项目
npm init
npm install web3 --save

创建web3对象
要使用web3.js与区块链交互,需要创建web3对象,链接到以太坊上
var web3 =require(“web3”)
var web3 = new web();

下一步获取已部署的智能合约

var abi = [{“constant”:false,“inputs”:[{“name”:“receiver”,“type”:“address”},{“name”:“amount”,“type”:“uint256”}],“name”:“sendCoin”,“outputs”:[{“name”:“sufficient”,“type”:“bool”}],“payable”:false,“type”:“function”},{“constant”:false,“inputs”:[{“name”:“addr”,“type”:“address”}],“name”:“getBalance”,“outputs”:[{“name”:"",“type”:“uint256”}],“payable”:false,“type”:“function”},{“inputs”:[],“payable”:false,“type”:“constructor”},{“anonymous”:false,“inputs”:[{“indexed”:true,“name”:"_from",“type”:“address”},{“indexed”:true,“name”:"_to",“type”:“address”},{“indexed”:false,“name”:"_value",“type”:“uint256”}],“name”:“Transfer”,“type”:“event”}];
// 合约地址
var address = “0xb2cdd356e58280906ce53e1665697b50f88aac56”;
// 通过ABI和地址获取已部署的合约对象
var metacoin = web3.eth.contract(abi).at(address);

阅读web3.js中文文档
//初始化过程
var Web3 = require(‘web3’);

if (typeof web3 !== ‘undefined’) {
web3 = new Web3(web3.currentProvider);
} else {
// set the provider you want from Web3.providers
web3 = new Web3(new Web3.providers.HttpProvider(“http://localhost:8545”));
}

web3.version.api
返回值:

String - 以太坊js的api版本

示例:

//省略初始化过程
var version = web3.version.api;
console.log(version);

$ node test.js
0.18.2

猜你喜欢

转载自blog.csdn.net/qq_36344771/article/details/84261204