赞
踩
web3.js有0.2版本和1.0版本的区别,本文列出的是web3.js 1.0版本提供的api。
首先,需要注意web3.js的如下几个注意事项:
web3.js的API使用的是异步http请求,如果需要同步,则需要使用回调函数:
- web3.eth.getBlock(48, function(error, result){
- if(!error)
- console.log(result)
- else
- console.error(error);
- })
Batch允许批量请求,然后一次性执行:
- new web3.BatchRequest()
- new web3.eth.BatchRequest()
- new web3.shh.BatchRequest()
- new web3.bzz.BatchRequest()
-
- var batch = new web3.BatchRequest();
- batch.add(web3.eth.getBalance.request('0x0000000000000000000000000000000000000000', 'latest', callback));
- batch.add(web3.eth.contract(abi).at(address).balance.request(address, callback2));
- batch.execute();
我们在智能合约中通常需要用到BigNumber对象来存储balance,但是 JavaScript中没有这样的数据类型。
- "101010100324325345346456456456456456456"
- // "101010100324325345346456456456456456456"
- 101010100324325345346456456456456456456
- // 1.0101010032432535e+38
web3.js中自动添加了BigNumber库:
- var balance = new BigNumber('131242344353464564564574574567456');
- // or var balance = web3.eth.getBalance(someAddress);
-
- balance.plus(21).toString(10); // toString(10) converts it to a number string
- // "131242344353464564564574574567477"
1、web3对象
- var Web3 = require('web3');
- var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545", 0, BasicAuthUsername, BasicAuthPassword));
- //Note: HttpProvider takes 4 arguments (host, timeout, user, password)
2、web3 API
- web3.version // 返回thereum的api版本
- web3.modules // 返回client版本信息 或 web3.version.getNode(callback(err,res))
- web3.setProvider(provider) // 设置provider(new Web3.providers.HttpProvider("http://localhost:8545"))
- web3.providers // 返回当前有效的通信服务提供器
- web3.givenProvider // 在以太坊兼容的浏览器中使用web3时,将返回浏览器设置的原生服务提供器,否则返回null
- web3.currentProvider // 用来检测是否已经设定了provider
- web3.BatchRequest //用来创建并执行批请求
- web3.extend(methods) // 继承扩展web3的模块类
3、网络交互:web3.*.net
- // web3-net包用来支持和以太坊节点旳网络属性的交互
- var Net = require('web3-net');
- var net = new Net(Net.givenProvider || 'ws://some.local-or-remote.node:8546');
-
- web3.eth.net.getId([callback]) // 返回当前连接网络的ID,返回promise
- web3.eth.net.isListening([callback]) // 返回当前所连接节点旳网络监听状态,返回promise
- web3.eth.net.getPeerCount([callback]) // 返回当前节点上已经连接的其他节点数量,返回promise
4、Swarm交互:web3.bzz
- // 使用web3-bzz包来和去中心化文件存储系统Swarm交互
- var Bzz = require('web3-bzz');
- var bzz = new Bzz(Bzz.givenProvider || 'http://swarm-gateways.net');
-
- web3.bzz.upload(mixed) // 上传到Swarm
- web3.bzz.download(mixed) // 从Swarm下载
- web3.bzz.pick(mixed) // 打开文件选择器
5、whisper协议交互:web3.shh
- var Shh = require('web3-shh');
- var shh = new Shh(Shh.givenProvider || 'ws://some.local-or-remote.node:8546');
-
- web3.shh.getVersion // 返回whisper协议版本
- web3.shh.getInfo // 返回whisper节点信息
- web3.shh.setMaxMessageSize // 设置whisper消息大小上限
- web3.shh.setMinPoW // 设置节点最小PoW
- web3.shh.markTrustedPeer // 标记可信节点
- web3.shh.newKeyPair // 创建密钥对
- web3.shh.addPrivateKey // 使用私钥创建密钥对
- web3.shh.deleteKeyPair // 删除指定密钥对
- web3.shh.hasKeyPair // 检查节点是否有指定密钥对
- web3.shh.getPublicKey // 返回公钥
- web3.shh.getPrivateKey // 返回私钥
- web3.shh.newSymKey // 创建对称密钥
- web3.shh.addSymKey // 添加对称密钥
- web3.shh.generateSymKeyFromPassword // 使用指定密码生成对称密钥
- web3.shh.hasSymKey // 检查是否有指定对称密钥
- web3.shh.getSymKey // 返回对称密钥
- web3.shh.post // 发送whisper消息
- web3.shh.subscribe // 订阅whisper消息
- web3.shh.clearSubscriptions // 清理订阅
- web3.shh.newMessageFilter // 创建消息过滤器
- web3.shh.deleteMessageFilter // 删除消息过滤器
- web3.shh.getFilterMessages // 读取新消息
6、web3.eth
- /***账户和节点信息***/
- web3.eth.defaultAccount // 设置或获取默认账户
- web3.eth.defaultBlock // 设置默认区块,默认值是latest
- web3.eth.isSyncing(callback) // 检测节点是否在同步
- web3.eth.getCoinbase // 返回coinbase
- web3.eth.getGasPrice // 返回当前gas price
- web3.eth.getAccounts // 返回节点所拥有的所有账户
- web3.eth.getBlockNumber // 返回当前区块数目
- web3.eth.getBalance(address) // 获得指定账户的balance
- web3.eth.getStorageAt(address, position) // 返回一个以太坊地址的指定位置存储内容
- web3.eth.getCode(address) // 返回指定以太坊地址处的代码
-
- /***挖矿信息***/
- web3.eth.isMining // 返回节点的mining状态,true or false
- web3.eth.getHashrate // 返回miner每秒产生的hash数
- web3.eth.getWork() // 方法返回矿工的工作内容,包括当前块的哈希值、种子哈希值和要满足的边界条件
- web3.eth.submitWork() // 方法用来提交工作量证明(POW)解决方案
-
- /***区块相关信息***/
- web3.eth.getBlock(hash/number) // 返回指定块编号或块哈希对应的块
- web3.eth.getBlockTransactionCount(hash/number) // 返回指定块编号或块哈希对应的块
- web3.eth.getUncle(hash/number) // 返回指定索引位置的叔伯块
-
- /***交易相关***/
- web3.eth.getTransaction(hash) // 返回具有指定哈希值的交易对象
- web3.eth.getTransactionFromBlock(hashOrNumber, indexNumber) // 返回指定块中特定索引号的交易对象
- web3.eth.getTransactionReceipt(hash) // 返回指定交易的收据对象,如果交易处于pending状态,则返回null
- web3.eth.getTransactionCount(address) // 返回指定地址发出的交易数量
- web3.eth.sendTransaction(object) // 向以太坊网络提交一个交易
- web3.eth.sendSignedTransaction(signedTransactionData) // 发送已经签名的交易
- web3.eth.sign // 使用指定的账户对数据进行签名,该账户必须先解锁
- web3.eth.signTransaction // 对交易进行签名,用来签名的账户地址需要首先解锁
-
- /***消息调用信息***/
- web3.eth.call(object) // 执行一个消息调用交易,消息调用交易直接在节点旳VM中执行而不用通过区块链的挖矿来执行
- web3.eth.estimateGas(object) // 通过执行一个消息调用来估算交易的gas用量
- web3.eth.getPastLogs() // 方法根据指定的选项返回历史日志
-
- /***编译器相关***/
- web3.eth.getCompilers() // 方法返回可用编译器的列表
- web3.eth.compile.solidity() // 方法用来编译使用solidity语言编写的合约源代码
- web3.eth.compile.lll() // 方法用来编译使用LLL语言编写的合约源代码
- web3.eth.compile.serpent() // 方法用来编译使用serpent语言编写的合约源代码
-
- /***订阅事件***/
- web3.eth.subscribe() // 方法来订阅区块链上的指定事件
- web3.eth.clearSubscriptions() // 方法用来复位订阅状态
- web3.eth.subscribe('pendingTransactions' [, callback]) // 表示订阅处于pending状态的交易
- web3.eth.subscribe('newBlockHeaders' [, callback]) // 参数订阅新的区块头生成事件。可用做检查区块链上变化的计时器文本
- web3.eth.subscribe('syncing' [, callback]) // 使用syncing参数订阅同步事件
- web3.eth.subscribe('logs', options [, callback]) // 使用logs参数订阅日志,并且可以指定条件进行过滤
7、智能合约:web3.eth.Contract
- // web3.eth.Contract类简化了与以太坊区块链上智能合约的交互
- // 创建合约对象时,只需指定相应智能合约的json接口,web3就可以自动地将所有的调用转换为底层基于RPC的ABI调用
- web3.eth.Contract - 合约构造函数
- var myContract = new web3.eth.Contract(jsonInterface[, address][, options])
- /*
- options - 合约配置对象
- address - 合约的部署地址
- jsonInterface - 合约的json接口
- data - 合约的字节码,合约部署时会用到
- from - 合约发送方账户地址
- gasPrice - 用于交易的gas价格,单位:wei
- gas - 交易的gas用量上限,即gas limit
-
- myContract.options.address - 合约地址
- myContract.options.jsonInterface - 合约JSON接口
- */
- myContract.clone() - 克隆合约
- myContract.deploy - 部署合约
-
- myContract.methods.myMethod([param]) //为指定的合约方法创建一个交易对象,以便使用该交易对象进行调用、发送或估算gas
- myContract.methods.myMethod([param]).call // 调用合约的只读方法,并在EVM中直接执行方法,不需要发送任何交易,不改变合约状态
- myContract.methods.myMethod([param]).send // 向合约发送交易来执行指定方法,将改变合约的状态。
- myContract.methods.myMethod([param]).estimateGas() // 通过在EVM中执行方法来估算链上执行是需要的gas用量。
- myContract.methods.myMethod([param]).encodeABI // 为指定的合约方法进行ABI编码,可用于发送交易、调用方法或向另一个合约方法传递参数
-
- myContract.once(event, callback)// 单次订阅合约事件
- myContract.events() // 订阅合约事件
- myContract.events.allEvents() // 订阅全部事件
- myContract.getPastEvents(event) // 读取历史事件
8、账户管理:web3.eth.accounts
- var Accounts = require('web3-eth-accounts')
-
- web3.eth.accounts.create() // 创建账户
- web3.eth.accounts.privateKeyToAccount(privateKey) // 使用指定私钥创建账户
- web3.eth.accounts.recoverTransaction(rawTransaction) // 从给定的RLP编码的交易中提取签名地址
- web3.eth.accounts.hashMessage(message) // 计算消息的哈希
- web3.eth.accounts.sign(data, privateKey) // 为数据生成签名
- web3.eth.accounts.recover(signatureObject) // 从给定的已签名数据中回复用来进行签名的以太坊地址
- web3.eth.accounts.encrypt(privateKey) // 将私钥加密变换为keystore v3标准格式
- web3.eth.accounts.decrypt(keystoreJsonV3, password) // 解密keystore对象
-
- web3.eth.accounts.wallet // 一个内存钱包对象,其中包含多个账户
- web3.eth.accounts.wallet.create(numberOfAccounts) // 在钱包中创建一个或多个账户,不会覆盖已经存在的钱包
- web3.eth.accounts.wallet.add(account) // 使用私钥或账户对象向钱包中添加一个账户
- web3.eth.accounts.wallet.remove(account) // 从钱包中移除指定账户
- web3.eth.accounts.wallet.clear() // 清空钱包
- web3.eth.accounts.wallet.encrypt(password) // 加密所有的钱包账户为keystore v3对象
- web3.eth.accounts.wallet.decrypt(keystoreArray, password) // 解密keystore v3对象
- web3.eth.accounts.wallet.save() // 保存钱包
- web3.eth.accounts.wallet.load() // 从本地存储器载入钱包并解密
9、账户交互:web3.eth.personal
- var Personal = require('web3-eth-personal');
- var personal = new Personal(Personal.givenProvider || 'ws://some.local-or-remote.node:8546');
-
- web3.eth.personal.newAccount(password) // 创建新账户
- web3.eth.personal.sign(dataToSign, address, password) // 为数据生成签名
- web3.eth.personal.ecRecover(dataThatWasSigned, signature) // 提取数据的签名账户
- web3.eth.personal.signTransaction // 为交易生成签名
10、应用二进制接口ABI
web3.eth.abi系列函数用来将参数编码为ABI (Application Binary Interface),或者从ABI解码回来。 以便在以太坊虚拟机EVM上执行函数函数调用。
- web3.eth.abi.encodeFunctionSignature(functionName) // 将函数名编码为ABI签名,方法是取函数名及参数类型的sha3哈希值的头4个字节
- web3.eth.abi.encodeEventSignature(eventName) // 将事件名编码为ABI签名,方法是取事件名及其参数类型的sha3哈希值
- web3.eth.abi.encodeParameter(type, parameter) // 将参数按照其type编码成ABI
- web3.eth.abi.encodeParameters(typesArray, parameters) // 编码函数参数组
- web3.eth.abi.encodeFunctionCall(jsonInterface, parameters) // 将函数调用根据其JSON接口对象和给定的参数进行ABI编码
- web3.eth.abi.decodeParameter(type, hexString) // 将ABI编码过的参数解码为其JavaScript形式
- web3.eth.abi.decodeParameters(typesArray, hexString) // 将ABI编码的参数解码为其JavaScript形式
- web3.eth.abi.decodeLog(inputs, hexString, topics) // 对ABI编码后的日志数据和索引的主题数据进行解码
11、辅助工具:web3.utils
- 调用方法:Web3.utils
-
- web3.utils.randomHex(size) // 生成伪随机16进制字符串
- web3.utils._ // 提供了underscore库的接口,underscore是非常流行的javascript工具库,提供了很多方便的js函数
- web3.utils.BN(mixed) // 提供了BN.js库的访问接口,用来处理大数的计算
- web3.utils.isBN(bn) // 检查给定参数是否BN对象
- web3.utils.isBigNumber(bignumber) // 检查给定参数是否为BigNumber对象
- web3.utils.sha3(string) // 计算给定字符串的sha3哈希值
- web3.utils.keccak256(string)
- web3.utils.soliditySha3 // 采用和solidity同样的方式计算给定参数的sha3哈希值,也就是说,在计算哈希之前,需要首先对参数进行ABI编码,并进行字节紧凑化处理
- web3.utils.isHex(hex) // 检查指定的参数字符串是否是16进制字符串
- web3.utils.isHexStrict(hex) // 严格模式16进制检查,必须以0x开头
- web3.utils.isAddress(address) // 检查指定的字符串是否是有效的以太坊地址
- web3.utils.toChecksumAddress(address) // 将给定的大写或小写以太坊地址转换为校验和地址
- web3.utils.checkAddressChecksum(address) // 检查指定地址的校验和,对于非检验和地址将返回false
- web3.utils.toHex(mixed) // 转换为16进制字符串
- web3.utils.toBN // 转换为BN对象
- web3.utils.hexToNumberString(hex) // 将给定的16进制字符串转化为数值字符串
- web3.utils.hexToNumber(hex) // 返回给定16进制字符串的数值表示
- web3.utils.numberToHex(number) // 数值转换为16进制表示
- web3.utils.hexToUtf8(hex) // 16进制字符串转换为utf-8
- web3.utils.hexToAscii(hex) // 16进制字符串转换为ascii
- web3.utils.utf8ToHex(string) // utf-8字符串转换为16进制
- web3.utils.asciiToHex(string) // ascii字符串转换为16进制
- web3.utils.hexToBytes(hex) // 16进制字符串转换为字节数组
- web3.utils.toWei(number, type) // 转换到wei, type为ether, Gwei
- web3.utils.fromWei // 从wei转换到其他以太单位
- web3.utils.unitMap // 以太单位换算表
- web3.utils.padLeft // 左侧零补齐
- web3.utils.padRight // 右侧零补齐
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。