//导入类库
let Web3 = require('web3')
web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:7545"));
console.log(Web3.modules);
子模块列表:
web3.eth.getNodelnfo([callback])可以查看web3连接的节点信息
//导入类库
let Web3 = require('web3')
web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:7545"));
web3.eth.getNodeInfo().then(console.log);
web3.eth.net.isListening返回当前所连接节点旳网络监听状态
格式
//导入类库
let Web3 = require('web3')
web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:7545"));
web3.eth.net.isListening().then(console.log);
web3.eth.net.isListening返回当前所连接网络ID
格式
//导入类库
let Web3 = require('web3')
web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:7545"));
web3.eth.net.isListening().then(console.log);
web3.eth.net.getId().then(console.log);
web3.eth.getProtocolVersion,返回节点旳以太坊协议版本
格式:
· web3.eth.getProtocolVersion([callback])
web3.providers查询当前有效的通信服务提供器
格式
**web3.currentProvider属性返回当前在用的通信服务提供器,如果没有的话则返回null。
**
格式
//导入类库
let Web3 = require('web3')
web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:7545"));
console.log(web3.providers);
console.log(web3.currentProvider);
在以太坊兼容的浏览器中使用web3.js时,web3.givenProvider属性将返回浏览器设置的原生服务提供器,否则返回null。
格式
web3.setProvider()方法用来修改指定模块的底层通讯服务提供器。
格式
格式
方法
1、在remix上创建一个简单的智能合约
pragma solidity 0.6.4;
contract DemoSimple{
uint number;
function setNumber(uint _number) public{
number = _number;
}
function getNumber() public view returns(uint){
return number;
}
}
2、选择gananche测试网络发布合约
3、发布成功后在Ganache里面可以看到交易信息
4、在remix的编译页面复制ABI
5、编写代码
//导入类库
let Web3 = require('web3')
web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:7545"));
//把remix上复制的ABI黏贴过来
var ABI=[
{
"inputs": [
{
"internalType": "uint256",
"name": "_number",
"type": "uint256"
}
],
"name": "setNumber",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "getNumber",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
}
];
//合约地址
var address = "0x985D0EfDA3763b4EE35e6b0C5397eFc2bF575DBE";
//通过ABI和合约地址创合约对象
var contract = new web3.eth.Contract(ABI,address);
function callback(){
console.log("callback run");
}
function callback2(){
console.log("callback2 run");
}
var batch = new web3.BatchRequest();
batch.add(web3.eth.getBalance.request('0xa649BF54AB181c58EA0Af8Bc6009341622Cc66fE','latest',callback));
batch.add(contract.methods.getNumber().call.request({from:'0xa649BF54AB181c58EA0Af8Bc6009341622Cc66fE'},callback2));
batch.add(contract.methods.getNumber().call.request({from:'0xa649BF54AB181c58EA0Af8Bc6009341622Cc66fE'},function(error,result){
console.log(error);
console.log(result);
}));
batch.execute();
在JavaScript中,默认的数字精度较小,但是对于以太坊,推荐内部总是以wei来表示余额(大整数),只有显示余额给用户时,才转换为ether或其它单位,JavaScript中默认的数字精度无法确切的表示wei
因此在Web 3.js中,会自动添加一个依赖库BigNumber
在Web3.js中,将数值转换为BigNumber类型的对象,BigNumber的精度非常高,不会丢失
BigNumber的使用如下︰
let Web3 = require('web3')
var BigNumber = require("bignumber.js");
web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:7545"));
var a = 123456789012345678901234567890;
console.log('使用常规的表示法无法表示大数');
console.log(a)
var b = new BigNumber("123456789012345678901234567890")
console.log('使用大数工具可以表示大数');
console.log(b);
console.log('二进制表示');
console.log(b.toString(2));
console.log('十进制表示');
console.log(b.toString(10));
console.log('十六进制表示');
console.log(b.toString(16));
console.log('判断是否为大数类型');
console.log(web3.utils.isBigNumber(b));
将给定的以wei为单位的值转换为其他单位的数值
wei是最小的以太单位,应当总是使用wei进行计算,仅在需要显示时进行转换。
格式
将给定的以太金额转换为以wei为单位的数值
格式
let Web3 = require('web3')
var BigNumber = require("bignumber.js");
web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:7545"));
console.log(web3.utils.fromWei('1','ether'));
console.log(web3.utils.fromWei('1','finney'));
console.log(web3.utils.fromWei('1','szabo'));
console.log(web3.utils.fromWei('1','shannon'));
console.log('------------------------------')
console.log(web3.utils.toWei('1','ether'));
console.log(web3.utils.toWei('1','finney'));
console.log(web3.utils.toWei('1','szabo'));
console.log(web3.utils.toWei('1','shannon'));
将任意给定值转换为16进制字符串。数值字符串将解释为数值,文本字符串将解释为utf-8字符串
格式
将给定的16进制字符串转化为数值字符串
格式
作用:检查指定的字符串是否是有效的以太坊地址。如果地址同时使用了大小写字符,web3.utils.isAddress()方法也会检查校验和。
格式
web3.eth.getBlockNumber()方法返回当前块编号
格式
web3.eth.getBlock()方法返回指定块编号或块哈希对应的块
格式
web3.eth.getTransactionFromBlock()方法返回指定块中特定索引号的交易对象。
格式
let Web3 = require('web3')
var BigNumber = require("bignumber.js");
web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:7545"));
web3.eth.getBlockNumber().then(console.log)
web3.eth.getBlock('earliest').then(console.log)
web3.eth.getBlock('3').then(console.log)
web3.eth.getBlock('0x32bbf3ad543fa59955f08df6b526781cdac46f90736b715617de5be45a1c53c5').then(console.log)
web3.eth.getTransactionFromBlock('0x32bbf3ad543fa59955f08df6b526781cdac46f90736b715617de5be45a1c53c5',0).then(console.log)
web3.eth.getBlockTransactionCount('0x32bbf3ad543fa59955f08df6b526781cdac46f90736b715617de5be45a1c53c5',0).then(console.log)
web3.eth.getTransactionFromBlock('latest').then(console.log)
web3.eth.getBlockTransactionCount('latest').then(console.log)
web3.eth.getAccounts()方法返回当前节点控制的账户列表。
格式
web3.eth.personal.newAccount(),创建一个新账户
格式
使用web3.eth.getCoinbase()方法获取当前接收挖矿奖励的账户地址。
格式
web3.eth.getBalance()方法用来获取指定块中特定账户地址的余额。
格式
web3.eth.getGasPrice()方法用来获取当前ga s价格,该价格由最近的若干块的gas价格中值决定。
格式
web3.eth.sendTransaction()方法向以太坊网络提交一个交易。
格式
web3.eth.getTransaction()方法返回具有指定哈希值的交易对象。
格式
web3.eth.getTransactionReceipt()方法返回指定交易的收据对象。如果交易处于pending状态,则返回null。
格式
let Web3 = require('web3')
var BigNumber = require("bignumber.js");
web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:7545"));
//获取账户列表
web3.eth.getAccounts().then(console.log)
//新建账户,会返回刚刚新建的账户
web3.eth.personal.newAccount('123456').then(console.log)
var s = web3.eth.getBalance("0xa649BF54AB181c58EA0Af8Bc6009341622Cc66fE",function(error,result){
var blance = result.toString();
console.log(web3.utils.fromWei(blance,"ether"))
})
//根据最近几个区块,计算平均Gas 价格
web3.eth.getGasPrice().then((result) => {
console.log("wei: " + result)
console.log("ether: " + web3.utils.fromWei( result,'ether'))
})
//发送交易
var transactionobject = {
from: "0xa649BF54AB181c58EA0Af8Bc6009341622Cc66fE",
to: "0xA88424510400811bDE76C13381378Df70db53B8c",
value: web3.utils.toWei('1','ether'),
data: ''
}
web3.eth.sendTransaction(transactionobject).then(console.log);
var transactionHash = "0x09fb2b391d6c169d9ae2752d27d9c096721d753e8d1c0f160cab538059be5d2c";
web3.eth.getTransaction(transactionHash).then(console.log);
web3.eth.getTransactionReceipt(transactionHash).then(console.log);
ABI相当于智能合约暴露出来的标准接口,通过这个接口就可以将智能合约转换成别的应用程序中的对象实例,通过这个对象实例就可以和智能合约交互了。
ABl文件以JSON的形式表示,在JSON文件中,不能写注释
将一个智能合约编译为ABI后,即可将些ABl文件传递给web3.js (或其它的sdk ),则web3.js,可以根据这些接口类型构建出一个js对象,用此js对象即可操作合约
调用智能合约读(view , pure)函数时,一般使用call
格式
myContract.methods.myMethod([param 1 [, param2[,…]]]).call (o ptions [, defaultBlock] [, callba ck])
调用写函数,相当于发送了交易
格式