ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

web3js

2022-07-31 23:33:24  阅读:169  来源: 互联网

标签:Web3 web3js web3 eth 区块 合约 utils


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有