其他分享
首页 > 其他分享> > web3js

web3js

作者:互联网

1⃣️简介
web3js:js的api库,是一个js-sdk,抽象出了所有rpc调用。可以实现例如以太坊转帐、读写智能合约中的数据、创建智能合约、发送交易等操作
Dapp开发:
1⃣智能合约:部署到区块链
2⃣dapp:与区块链交互,读写数据
原理:rpc调用,连接到以太坊节点,与以太坊通信。本质是对json rpc请求的封装
2⃣️js文件链接ganache
要使用web3.js访问以太坊网络,需要先创建web3的实例,提供一个provider
let Web3 = require('web3');
web3 = new Web3(new Web3.providers.HttpProvider("Http://127.0.0.1:7545"));
后面再对Web3进行操作
3⃣️常用API
1⃣获取web3对象
Web3.modules :Eth\Net\Personal\Shh\Bzz
Web3.version
2⃣基本信息查询
web3.eth.getNodeInfo().then(console.log) 查看web3连接节点信息
web3.eth.net.isListening().then(console.log)查看当前节点连接状态
3⃣网络状态查询
web3.eth.net.getId().then(console.log)查看当前节点ID
web3.eth.getProtocolVersion().then()获取节点以太坊协议版本号
4⃣Provider相关
web3.providers()查询当前有效的通信服务提供器
we3.currentProvider 查询当前在用的通信提供服务器
5⃣批处理请求:为了将多个请求打包在一起提交
(要使用ABI和合约地址,通过web3.eth.Contract()创建contract对象)
web3中使用BatchRequest实现批处理
先创建:new web3.BatchRequest()
再add(request)将请求添加到批调用中
最后execute()一起执行
4⃣️web3js常用工具
1⃣大数据处理
eth中常用大数字,js中数字精度较小
web3js中有个BigNumber库,精度很高(20位),不会丢失
js中使用时,一般加入tostring(10)来显示大数字(10代表十进制)
2⃣以太单位转换
web3.utils.fromWei(number,uint)将以wei为单位的值转化为其他单位的值(number代表字符串代表的数字)
web3.utils.fromWei('1','ether')
web3.utils.toWei(number,uint)反向转换
web3.utils.toWei('1','ether') (1ether = 10^18wei)
3⃣数值转换
web3.utils.toHex()将给定值转换为16进制字符串,数字字符串解释为数值,文本字符串解释为utf-8字符串
web3.utils.hexToNumberString()反向转换(为字符串)
web3.utils.hexToNumber()反向(为number)
。。。(包含utf-8、ascii、bytes等之间的相互转换)
4⃣地址相关
web3.utils.isAddress()检验是否为以太坊地址,检验校验和
5⃣关于区块的操作
web3.eth.getBlockNumber()查询最新区块号(区块高度)
查询详细区块信息:
web3.eth.getBlock()查询给定编号的块的信息(earliest代表创世区块,latest代表最新区块,pending代表当前开采区块)
web3.eth.getTransactionFromBlock()从指定块中返回特定索引号的交易对象
web3.eth.getTransactionCount()查询交易数量
5⃣️交易操作
1⃣账户操作
web3.eth.getAccounts()返回当前节点控制的账户列表。
web3.eth.personal.newAccounts(password,[callback])创建一个新账户
web3.eth.isMining()获取当前是否处于挖矿状态
web3.eth.getCoinbase()获取当前账户
2⃣交易相关
web3.eth.getBalance()获取账户余额(可以指定到指定区块时的余额)
✨实例:

点击查看代码
let Web3 = require('web3');
web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:7545"));
web3.eth.getBalance("0x44F2e99f4e530c99f2D996ca861a41Df1f58ea33",function(error,result){
    var balance = result.toString();
    console.log(balance)
    console.log(web3.utils.fromWei(balance,"ether"));
});
web3.eth.getGasPrice()获取当前gas价格 web3.eth.sendTransaction(tansationObject,callback)想以太坊网络提交一个交易 ✨transationObject(json)包括: from:发送者地址 to:接受者地址(可选),如果要创建合约,为空 value:发送的币 gaslimit gasprice data:如果发送的是合约,使用abi文件。 nonce:交易计数,必须是十六进制,可以用web3.utils.toHex()转换✨ web3.eth.getTransaction(transactionHash,callback)查询指定哈希值的交易对象,返回一个json,包括交易哈希,nonce,区块哈希等 6⃣️web3和合约 1⃣ABI:abi是智能合约暴漏出来的标准接口,通过这个接口就可以将智能合约转换为别的应用程序的对象实例,通过这个对象实例就可以和智能合约进行交互。(ABI文件以json的形式表示,在json文件中不能写注释)

2⃣创建合约
写一个合约--》编译合约--》部署合约(可以直接和区块链上已经部署的合约进行关联,也可以通过js代码部署一个新合约)
✨使用js创建合约,其实就是发送一个交易

image
会返回一个交易的哈希编码值✨
3⃣关联合约

var myContract = web3.eth.Contract(myContractABI,contractAddress);
console.log(myContract.options.address)
4⃣事件监听
合约中触发事件会把消息记录到日志中
可以用:

var myContract = web3.eth.Contract(myContractABI,contractAddress); //获取合约对象

myContract.methods.emitEvent("lisi").send({from:'0x000000...00'}).on('receipt',function(result){console.log(result)}) //触发事件
myContract.getPastEvents() //获取块历史事件信息

标签:Web3,web3js,web3,eth,区块,合约,utils
来源: https://www.cnblogs.com/lot4/p/16538587.html