
这个篇文章的总结是在学习 b站web3.js的一个基础教程课 的课程总结,方便后续在文章中查找API。
学习中涉及的一些l零碎代码上传到了 这个仓库。
关于 web3js 这个 JS 库的相关操作,后续会持续更新。
下面的示例代码就是指 web3 这个JS库的一些基础操作,不做介绍。
1 | let Web3 = require('web3'); |
批处理请求是指几个请求打包在一起提交提交、串联执行 (一个个按顺序执行,速度不快,可保证代码执行顺序)
通过BatchRequest实现批处理,核心代码为:
代码示例:
1 | let batch = new web3.BatchRequest(); |
项目在启动的时候,由于没有 ETH币,于是:
大数据处理简介
JS中,默认的数字精度较小,对于以太坊,推荐内部以 wei 来表示余额(大整数),只要显示余额的时候才转为 ether 或其它单位。
在web3js中,自动添加一个依赖库 BigNumber,精度非常高,不会丢失。
1 | const bigNumber = require('bignumber.js') |
判断是否为大数
web3.utils.isBigNumber(n) :来判断一个数是否为大数。
以太单位转换
web3.utils.fromWei(number,[unit]) :将一个数值转换为以太单位
web3.utils.toWei(number,[unit]):将一个单位转换为Wei,1 ether为 10的18次方 wei
数值转换
web3.utils.toHex():数字转换为16进制,文本转换为utf-8字符串
地址相关
web3.utils.isAddress(address):检查指定的字符串是否是有效的以太坊地址,使用了大小写会校验和。
查询最新的区块号(区块高度)
web3.eth.getBlockNumber().then(console.log)
查询区块信息
返回指定区块编号或块哈希对应的块:
web3.eth.getBlock(blockHashOrBlockNumber [,returnTransactionsObjects,callback])
blockHashOrBlockNumber 为可选值:可输入区块号、区块hash 、或者字符串【‘earliest’,‘latest’,‘pending’】
查询块中的交易信息
web3.eth.getTransactionFromBlock(hasStringOrNumber,indexNumber)
hasStringOrNumber同上面的blockHashOrBlockNumber
indexNumber:区块中交易的索引,从0开始
显示的内容和 getBlock 设置为true后返回的 transactions 交易信息一致
查询块中的交易数量
web3.eth.getBlockTransactionCount(blockHashOrBlockNumber [,callback])
账户相关操作
返回当前节点控制的账户列表:
web3.eth.getAccounts()
创建一个新账户:
web3.eth.personal.newAccount(password,[callback])
获得当前接收挖矿奖励的账户地址:
web3.eth.getCoinbase()
交易相关操作
web3.eth.getBalance(address,[defaultBlock]):获得指定区块中特定账户地址的余额
web3.eth.getGasPrice():根据最近几个区块,计算平均gas价格
交易执行相关操作
向以太网络提交一个交易:
web3.eth.sendTransaction(transactionObject [,callback])
transactionObject参数说明:
返回具有指定哈希值的交易对象、查看交易细节:
web3.eth.getTransaction()
返回指定交易的收据对象,如果交易是pending,返回null:
web3.eth.getTransactionReceipt()
应用程序二进制接口(ABI)
ABI文件以JSON形式表示,在JSON文件中,不能写注释.
ABI表现形式:functions、events
作用:将这些ABI文件传递给web3.js(或其它sdk),根据这些接口类型构建出js对象,js对象操作合约。
创建合约
合约中可用编写的内容:函数、结构体、构造函数、状态变量、事件、枚举类型等。
合约要部署到区块链,需要编译为 字节码文件(remix中可直接复制)。
合约要想被外部应用程序访问,需要编译 ABI文件(remix中可直接复制)。
js在区块链上部署合约
1 | contract.deploy({ |
示例代码:这的代码是指,不是通过 remix 的 发布按钮,而是通过自己写的js脚本去发布的一个合约。
调用合约函数
myContract.methods.myMethod([param1 [,p2]]).call(options [,defaultBlock] [,callback])
MyContract.methods.myMethod([params [,param2]]).send(options [,callback])
调用合约事件
MyContract.methods.emitEvent("eventName").send(options [,callback])
执行事件查询
区块链是由一个个区块组成的列表,这些块的内容基本上是交易记录。
每个交易都有一个交易日志,事件结果存放在交易日志里。
合约发出的事件可以使用合约地址访问
MyContract.getPassEvents(event [,options] [,callback])
需求:简单创建投票DApp
与区块进行通信的方式是通过 RPC(Remote Procedure Call)
web3.js是一个js库,抽象出了所有的 RPC 调用,便于通过 js与区块链进行交互。
实现一个最简单的投票DApp
创建合约
写一个叫做 Voting 的合约,合约的内容
部署合约
将以上sol文件在 remix 中编写。
发布到 External Http Provider(选择倒数第二个账户发布)
网页交互
前端内容代码

这个篇文章的总结是在学习 b站web3.js的一个基础教程课 的课程总结,方便后续在文章中查找API。
学习中涉及的一些l零碎代码上传到了 这个仓库。
关于 web3js 这个 JS 库的相关操作,后续会持续更新。
下面的示例代码就是指 web3 这个JS库的一些基础操作,不做介绍。
1 | let Web3 = require('web3'); |
批处理请求是指几个请求打包在一起提交提交、串联执行 (一个个按顺序执行,速度不快,可保证代码执行顺序)
通过BatchRequest实现批处理,核心代码为:
代码示例:
1 | let batch = new web3.BatchRequest(); |
项目在启动的时候,由于没有 ETH币,于是:
大数据处理简介
JS中,默认的数字精度较小,对于以太坊,推荐内部以 wei 来表示余额(大整数),只要显示余额的时候才转为 ether 或其它单位。
在web3js中,自动添加一个依赖库 BigNumber,精度非常高,不会丢失。
1 | const bigNumber = require('bignumber.js') |
判断是否为大数
web3.utils.isBigNumber(n) :来判断一个数是否为大数。
以太单位转换
web3.utils.fromWei(number,[unit]) :将一个数值转换为以太单位
web3.utils.toWei(number,[unit]):将一个单位转换为Wei,1 ether为 10的18次方 wei
数值转换
web3.utils.toHex():数字转换为16进制,文本转换为utf-8字符串
地址相关
web3.utils.isAddress(address):检查指定的字符串是否是有效的以太坊地址,使用了大小写会校验和。
查询最新的区块号(区块高度)
web3.eth.getBlockNumber().then(console.log)
查询区块信息
返回指定区块编号或块哈希对应的块:
web3.eth.getBlock(blockHashOrBlockNumber [,returnTransactionsObjects,callback])
blockHashOrBlockNumber 为可选值:可输入区块号、区块hash 、或者字符串【‘earliest’,‘latest’,‘pending’】
查询块中的交易信息
web3.eth.getTransactionFromBlock(hasStringOrNumber,indexNumber)
hasStringOrNumber同上面的blockHashOrBlockNumber
indexNumber:区块中交易的索引,从0开始
显示的内容和 getBlock 设置为true后返回的 transactions 交易信息一致
查询块中的交易数量
web3.eth.getBlockTransactionCount(blockHashOrBlockNumber [,callback])
账户相关操作
返回当前节点控制的账户列表:
web3.eth.getAccounts()
创建一个新账户:
web3.eth.personal.newAccount(password,[callback])
获得当前接收挖矿奖励的账户地址:
web3.eth.getCoinbase()
交易相关操作
web3.eth.getBalance(address,[defaultBlock]):获得指定区块中特定账户地址的余额
web3.eth.getGasPrice():根据最近几个区块,计算平均gas价格
交易执行相关操作
向以太网络提交一个交易:
web3.eth.sendTransaction(transactionObject [,callback])
transactionObject参数说明:
返回具有指定哈希值的交易对象、查看交易细节:
web3.eth.getTransaction()
返回指定交易的收据对象,如果交易是pending,返回null:
web3.eth.getTransactionReceipt()
应用程序二进制接口(ABI)
ABI文件以JSON形式表示,在JSON文件中,不能写注释.
ABI表现形式:functions、events
作用:将这些ABI文件传递给web3.js(或其它sdk),根据这些接口类型构建出js对象,js对象操作合约。
创建合约
合约中可用编写的内容:函数、结构体、构造函数、状态变量、事件、枚举类型等。
合约要部署到区块链,需要编译为 字节码文件(remix中可直接复制)。
合约要想被外部应用程序访问,需要编译 ABI文件(remix中可直接复制)。
js在区块链上部署合约
1 | contract.deploy({ |
示例代码:这的代码是指,不是通过 remix 的 发布按钮,而是通过自己写的js脚本去发布的一个合约。
调用合约函数
myContract.methods.myMethod([param1 [,p2]]).call(options [,defaultBlock] [,callback])
MyContract.methods.myMethod([params [,param2]]).send(options [,callback])
调用合约事件
MyContract.methods.emitEvent("eventName").send(options [,callback])
执行事件查询
区块链是由一个个区块组成的列表,这些块的内容基本上是交易记录。
每个交易都有一个交易日志,事件结果存放在交易日志里。
合约发出的事件可以使用合约地址访问
MyContract.getPassEvents(event [,options] [,callback])
需求:简单创建投票DApp
与区块进行通信的方式是通过 RPC(Remote Procedure Call)
web3.js是一个js库,抽象出了所有的 RPC 调用,便于通过 js与区块链进行交互。
实现一个最简单的投票DApp
创建合约
写一个叫做 Voting 的合约,合约的内容
部署合约
将以上sol文件在 remix 中编写。
发布到 External Http Provider(选择倒数第二个账户发布)
网页交互
前端内容代码