Web3.js的基本使用(与以太坊智能合约的交互)

• Web3 JavaScript app API • web3.js 是一个JavaScript API库。…

• Web3 JavaScript app API

• web3.js 是一个JavaScript API库。要使DApp在以太坊上运行,我们可以使用web3.js库提供的web3对象

• web3.js 通过RPC调用与本地节点通信,它可以用于任何暴露了RPC层的以太坊节点

• web3 包含 eth 对象 – web3.eth(专门与以太坊区块链交互)和 shh 对象 – web3.shh(用于与 Whisper 交互)

• 首先需要将 web3 模块安装在项目中:npm install web3@0.20.1
• 然后创建一个 web3 实例,设置一个“provider” • 为了保证我们的 MetaMask 设置好的 provider 不被覆盖掉,在引入 web3 之前我们一般要做当前环境检查(以v0.20.1为例):

异步回调(callback)

• web3js API 设计的最初目的,主要是为了和本地 RPC 节点共同使用,所以默认情况下发送的是同步 HTTP 请求

• 如果要发送异步请求,可以在函数的最后一个参数位置上,传入一个回调函数。回调函数是可选(optioanl)的

• 我们一般采用的回调风格是所谓的“错误优先”,例如:

回调 Promise 事件(v1.0.0)

• 为了帮助 web3 集成到不同标准的所有类型项目中,1.0.0 版本提供了多种方式来处理异步函数。大多数的 web3 对象允许将一个回调函数作为最后一个函数参数传入,同时会返回一个promise 用于链式函数调用。

• 以太坊作为一个区块链系统,一次请求具有不同的结束阶段。为了满足这样的要求,1.0.0 版本将这类函数调用的返回值包成一个“承诺事件”(promiEvent),这是一个 promise 和EventEmitter 的结合体。

• PromiEvent 的用法就像 promise 一样,另外还加入了.on,.once 和.off方法

应用二进制接口(ABI) • web3.js 通过以太坊智能合约的 json 接口(Application Binary Interface,ABI)创建一个 JavaScript 对象,用来在 js
代码中描述

• 函数(functions) • type:函数类型,默认“function”,也可能“constructor” • constant, payable, stateMutability:函数的状态可变性
• inputs, outputs: 函数输入、输出参数描述列表
• 事件(events) • type:类型,总是“event” • inputs:输入对象列表,包括name、type、indexed
批处理请求(batch requests) • 批处理请求允许我们将请求排序,然后一起处理它们。

• 注意:批量请求不会更快。实际上,在某些情况下,一次性地发出许多请求会更快,因为请求是异步处理的。

• 批处理请求主要用于确保请求的顺序,并串行处理。

查看 web3 版本

• v0.2x.x:web3.version.api
• v1.0.0:web3.version

查看 web3 连接到的节点版本(clientVersion)

• 同步:web3.version.node
• 异步:web3.version.getNode((error,result)=>{console.log(result)})
• v1.0.0:web3.eth.getNodeInfo().then(console.log)

基本信息查询

• 同步:web3.version.network
• 异步:web3.version.getNetwork((err, res)=>{console.log(res)})
• v1.0.0:web3.eth.net.getId().then(console.log)

• 同步:web3.version.ethereum
• 异步:web3.version.getEthereum((err, res)=>{console.log(res)})
• v1.0.0:web3.eth.getProtocolVersion().then(console.log)

网络状态查询

• 同步:web3.isConnect() 或者 web3.net.listening
• 异步:web3.net.getListening((err,res)=>console.log(res))
• v1.0.0:web3.eth.net.isListening().then(console.log)

• 同步:web3.net.peerCount
• 异步:web3.net.getPeerCount((err,res)=>console.log(res))
• v1.0.0:web3.eth.net.getPeerCount().then(console.log)

Provider

• web3.currentProvider

• web3.setProvider(provider)
• web3.setProvider(new web3.providers.HttpProvider(‘http://localhost:8545’))

以太单位转换

• web3.fromWei web3.toWei

数据类型转换

• web3.toString web3.toDecimal web3.toBigNumber

字符编码转换

• web3.toHex web3.toAscii web3.toUtf8 web3.fromUtf8

地址相关

• web3.isAddress web3.toChecksumAddress
web3.eth – 账户相关

coinbase 查询

• 同步:web3.eth.coinbase
• 异步:web3.eth.getCoinbase( (err, res)=>console.log(res) )
• v1.0.0:web3.eth.getCoinbase().then(console.log)

账户查询

• 同步:web3.eth.accounts
• 异步:web3.eth.getAccounts( (err, res)=>console.log(res) )
• v1.0.0:web3.eth.getAccounts().then(console.log)

区块相关

• 同步:web3.eth. blockNumber
• 异步:web3.eth.getBlockNumber( callback )

• 同步:web3.eth.gasPrice
• 异步:web3.eth.getGasPrice( callback )

交易相关

• 同步:web3.eth.getBalance(addressHexString [, defaultBlock])
• 异步:web3.eth.getBalance(addressHexString [, defaultBlock]
[, callback])

• 同步:web3.eth.getTransaction(transactionHash)
• 异步:web3.eth.getTransaction(transactionHash [, callback])

交易执行相关
• 交易收据查询(已进块)
• 同步:web3.eth.getTransactionReceipt(hashString)
• 异步:web3.eth.getTransactionReceipt(hashString [, callback])
• 估计 gas 消耗量
• 同步:web3.eth.estimateGas(callObject)
• 异步:web3.eth.estimateGas(callObject [, callback])

• web3.eth.sendTransaction(transactionObject [, callback])
• 交易对象:
• from:发送地址
• to:接收地址,如果是创建合约交易,可不填
• value:交易金额,以wei为单位,可选
• gas:交易消耗 gas 上限,可选
• gasPrice:交易 gas 单价,可选
• data:交易携带的字串数据,可选
• nonce:整数 nonce 值,可选

消息调用

• web3.eth.call(callObject [, defaultBlock] [, callback])
• 参数:
• 调用对象:与交易对象相同,只是from也是可选的
• 默认区块:默认“latest”,可以传入指定的区块高度
• 回调函数,如果没有则为同步调用

日志过滤(事件监听)

合约相关 —— 创建合约

本文来自网络,不代表软粉网立场,转载请注明出处:https://www.rfff.net/p/714.html

作者: HUI

发表评论

您的电子邮箱地址不会被公开。

返回顶部