当前位置:   article > 正文

以太坊开发基础(5)geth控制台console方法清单(二)—— web3.js方法_web3utils.hextoutf8

web3utils.hextoutf8

web3.js有0.2版本和1.0版本的区别,本文列出的是web3.js 1.0版本提供的api。

首先,需要注意web3.js的如下几个注意事项:

1、使用callbacks

web3.js的API使用的是异步http请求,如果需要同步,则需要使用回调函数

  1. web3.eth.getBlock(48, function(error, result){
  2. if(!error)
  3. console.log(result)
  4. else
  5. console.error(error);
  6. })

2、Batch requests

Batch允许批量请求,然后一次性执行:

  1. new web3.BatchRequest()
  2. new web3.eth.BatchRequest()
  3. new web3.shh.BatchRequest()
  4. new web3.bzz.BatchRequest()
  5. var batch = new web3.BatchRequest();
  6. batch.add(web3.eth.getBalance.request('0x0000000000000000000000000000000000000000', 'latest', callback));
  7. batch.add(web3.eth.contract(abi).at(address).balance.request(address, callback2));
  8. batch.execute();

3、Big numbers in web3.js

我们在智能合约中通常需要用到BigNumber对象来存储balance,但是 JavaScript中没有这样的数据类型。

  1. "101010100324325345346456456456456456456"
  2. // "101010100324325345346456456456456456456"
  3. 101010100324325345346456456456456456456
  4. // 1.0101010032432535e+38

web3.js中自动添加了BigNumber库:

  1. var balance = new BigNumber('131242344353464564564574574567456');
  2. // or var balance = web3.eth.getBalance(someAddress);
  3. balance.plus(21).toString(10); // toString(10) converts it to a number string
  4. // "131242344353464564564574574567477"

Web3 Javascript Ðapp API Reference

1、web3对象

  1. var Web3 = require('web3');
  2. var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545", 0, BasicAuthUsername, BasicAuthPassword));
  3. //Note: HttpProvider takes 4 arguments (host, timeout, user, password)

2、web3 API

  1. web3.version // 返回thereum的api版本
  2. web3.modules // 返回client版本信息 或 web3.version.getNode(callback(err,res))
  3. web3.setProvider(provider) // 设置provider(new Web3.providers.HttpProvider("http://localhost:8545"))
  4. web3.providers // 返回当前有效的通信服务提供器
  5. web3.givenProvider // 在以太坊兼容的浏览器中使用web3时,将返回浏览器设置的原生服务提供器,否则返回null
  6. web3.currentProvider // 用来检测是否已经设定了provider
  7. web3.BatchRequest //用来创建并执行批请求
  8. web3.extend(methods) // 继承扩展web3的模块类

3、网络交互:web3.*.net

  1. // web3-net包用来支持和以太坊节点旳网络属性的交互
  2. var Net = require('web3-net');
  3. var net = new Net(Net.givenProvider || 'ws://some.local-or-remote.node:8546');
  4. web3.eth.net.getId([callback]) // 返回当前连接网络的ID,返回promise
  5. web3.eth.net.isListening([callback]) // 返回当前所连接节点旳网络监听状态,返回promise
  6. web3.eth.net.getPeerCount([callback]) // 返回当前节点上已经连接的其他节点数量,返回promise

4、Swarm交互:web3.bzz

  1. // 使用web3-bzz包来和去中心化文件存储系统Swarm交互
  2. var Bzz = require('web3-bzz');
  3. var bzz = new Bzz(Bzz.givenProvider || 'http://swarm-gateways.net');
  4. web3.bzz.upload(mixed) // 上传到Swarm
  5. web3.bzz.download(mixed) // 从Swarm下载
  6. web3.bzz.pick(mixed) // 打开文件选择器

5、whisper协议交互:web3.shh

  1. var Shh = require('web3-shh');
  2. var shh = new Shh(Shh.givenProvider || 'ws://some.local-or-remote.node:8546');
  3. web3.shh.getVersion // 返回whisper协议版本
  4. web3.shh.getInfo // 返回whisper节点信息
  5. web3.shh.setMaxMessageSize // 设置whisper消息大小上限
  6. web3.shh.setMinPoW // 设置节点最小PoW
  7. web3.shh.markTrustedPeer // 标记可信节点
  8. web3.shh.newKeyPair // 创建密钥对
  9. web3.shh.addPrivateKey // 使用私钥创建密钥对
  10. web3.shh.deleteKeyPair // 删除指定密钥对
  11. web3.shh.hasKeyPair // 检查节点是否有指定密钥对
  12. web3.shh.getPublicKey // 返回公钥
  13. web3.shh.getPrivateKey // 返回私钥
  14. web3.shh.newSymKey // 创建对称密钥
  15. web3.shh.addSymKey // 添加对称密钥
  16. web3.shh.generateSymKeyFromPassword // 使用指定密码生成对称密钥
  17. web3.shh.hasSymKey // 检查是否有指定对称密钥
  18. web3.shh.getSymKey // 返回对称密钥
  19. web3.shh.post // 发送whisper消息
  20. web3.shh.subscribe // 订阅whisper消息
  21. web3.shh.clearSubscriptions // 清理订阅
  22. web3.shh.newMessageFilter // 创建消息过滤器
  23. web3.shh.deleteMessageFilter // 删除消息过滤器
  24. web3.shh.getFilterMessages // 读取新消息

6、web3.eth

  1. /***账户和节点信息***/
  2. web3.eth.defaultAccount // 设置或获取默认账户
  3. web3.eth.defaultBlock // 设置默认区块,默认值是latest
  4. web3.eth.isSyncing(callback) // 检测节点是否在同步
  5. web3.eth.getCoinbase // 返回coinbase
  6. web3.eth.getGasPrice // 返回当前gas price
  7. web3.eth.getAccounts // 返回节点所拥有的所有账户
  8. web3.eth.getBlockNumber // 返回当前区块数目
  9. web3.eth.getBalance(address) // 获得指定账户的balance
  10. web3.eth.getStorageAt(address, position) // 返回一个以太坊地址的指定位置存储内容
  11. web3.eth.getCode(address) // 返回指定以太坊地址处的代码
  12. /***挖矿信息***/
  13. web3.eth.isMining // 返回节点的mining状态,true or false
  14. web3.eth.getHashrate // 返回miner每秒产生的hash数
  15. web3.eth.getWork() // 方法返回矿工的工作内容,包括当前块的哈希值、种子哈希值和要满足的边界条件
  16. web3.eth.submitWork() // 方法用来提交工作量证明(POW)解决方案
  17. /***区块相关信息***/
  18. web3.eth.getBlock(hash/number) // 返回指定块编号或块哈希对应的块
  19. web3.eth.getBlockTransactionCount(hash/number) // 返回指定块编号或块哈希对应的块
  20. web3.eth.getUncle(hash/number) // 返回指定索引位置的叔伯块
  21. /***交易相关***/
  22. web3.eth.getTransaction(hash) // 返回具有指定哈希值的交易对象
  23. web3.eth.getTransactionFromBlock(hashOrNumber, indexNumber) // 返回指定块中特定索引号的交易对象
  24. web3.eth.getTransactionReceipt(hash) // 返回指定交易的收据对象,如果交易处于pending状态,则返回null
  25. web3.eth.getTransactionCount(address) // 返回指定地址发出的交易数量
  26. web3.eth.sendTransaction(object) // 向以太坊网络提交一个交易
  27. web3.eth.sendSignedTransaction(signedTransactionData) // 发送已经签名的交易
  28. web3.eth.sign // 使用指定的账户对数据进行签名,该账户必须先解锁
  29. web3.eth.signTransaction // 对交易进行签名,用来签名的账户地址需要首先解锁
  30. /***消息调用信息***/
  31. web3.eth.call(object) // 执行一个消息调用交易,消息调用交易直接在节点旳VM中执行而不用通过区块链的挖矿来执行
  32. web3.eth.estimateGas(object) // 通过执行一个消息调用来估算交易的gas用量
  33. web3.eth.getPastLogs() // 方法根据指定的选项返回历史日志
  34. /***编译器相关***/
  35. web3.eth.getCompilers() // 方法返回可用编译器的列表
  36. web3.eth.compile.solidity() // 方法用来编译使用solidity语言编写的合约源代码
  37. web3.eth.compile.lll() // 方法用来编译使用LLL语言编写的合约源代码
  38. web3.eth.compile.serpent() // 方法用来编译使用serpent语言编写的合约源代码
  39. /***订阅事件***/
  40. web3.eth.subscribe() // 方法来订阅区块链上的指定事件
  41. web3.eth.clearSubscriptions() // 方法用来复位订阅状态
  42. web3.eth.subscribe('pendingTransactions' [, callback]) // 表示订阅处于pending状态的交易
  43. web3.eth.subscribe('newBlockHeaders' [, callback]) // 参数订阅新的区块头生成事件。可用做检查区块链上变化的计时器文本
  44. web3.eth.subscribe('syncing' [, callback]) // 使用syncing参数订阅同步事件
  45. web3.eth.subscribe('logs', options [, callback]) // 使用logs参数订阅日志,并且可以指定条件进行过滤

7、智能合约:web3.eth.Contract

  1. // web3.eth.Contract类简化了与以太坊区块链上智能合约的交互
  2. // 创建合约对象时,只需指定相应智能合约的json接口,web3就可以自动地将所有的调用转换为底层基于RPC的ABI调用
  3. web3.eth.Contract - 合约构造函数
  4. var myContract = new web3.eth.Contract(jsonInterface[, address][, options])
  5. /*
  6. options - 合约配置对象
  7. address - 合约的部署地址
  8. jsonInterface - 合约的json接口
  9. data - 合约的字节码,合约部署时会用到
  10. from - 合约发送方账户地址
  11. gasPrice - 用于交易的gas价格,单位:wei
  12. gas - 交易的gas用量上限,即gas limit
  13. myContract.options.address - 合约地址
  14. myContract.options.jsonInterface - 合约JSON接口
  15. */
  16. myContract.clone() - 克隆合约
  17. myContract.deploy - 部署合约
  18. myContract.methods.myMethod([param]) //为指定的合约方法创建一个交易对象,以便使用该交易对象进行调用、发送或估算gas
  19. myContract.methods.myMethod([param]).call // 调用合约的只读方法,并在EVM中直接执行方法,不需要发送任何交易,不改变合约状态
  20. myContract.methods.myMethod([param]).send // 向合约发送交易来执行指定方法,将改变合约的状态。
  21. myContract.methods.myMethod([param]).estimateGas() // 通过在EVM中执行方法来估算链上执行是需要的gas用量。
  22. myContract.methods.myMethod([param]).encodeABI // 为指定的合约方法进行ABI编码,可用于发送交易、调用方法或向另一个合约方法传递参数
  23. myContract.once(event, callback)// 单次订阅合约事件
  24. myContract.events() // 订阅合约事件
  25. myContract.events.allEvents() // 订阅全部事件
  26. myContract.getPastEvents(event) // 读取历史事件

8、账户管理:web3.eth.accounts

  1. var Accounts = require('web3-eth-accounts')
  2. web3.eth.accounts.create() // 创建账户
  3. web3.eth.accounts.privateKeyToAccount(privateKey) // 使用指定私钥创建账户
  4. web3.eth.accounts.recoverTransaction(rawTransaction) // 从给定的RLP编码的交易中提取签名地址
  5. web3.eth.accounts.hashMessage(message) // 计算消息的哈希
  6. web3.eth.accounts.sign(data, privateKey) // 为数据生成签名
  7. web3.eth.accounts.recover(signatureObject) // 从给定的已签名数据中回复用来进行签名的以太坊地址
  8. web3.eth.accounts.encrypt(privateKey) // 将私钥加密变换为keystore v3标准格式
  9. web3.eth.accounts.decrypt(keystoreJsonV3, password) // 解密keystore对象
  10. web3.eth.accounts.wallet // 一个内存钱包对象,其中包含多个账户
  11. web3.eth.accounts.wallet.create(numberOfAccounts) // 在钱包中创建一个或多个账户,不会覆盖已经存在的钱包
  12. web3.eth.accounts.wallet.add(account) // 使用私钥或账户对象向钱包中添加一个账户
  13. web3.eth.accounts.wallet.remove(account) // 从钱包中移除指定账户
  14. web3.eth.accounts.wallet.clear() // 清空钱包
  15. web3.eth.accounts.wallet.encrypt(password) // 加密所有的钱包账户为keystore v3对象
  16. web3.eth.accounts.wallet.decrypt(keystoreArray, password) // 解密keystore v3对象
  17. web3.eth.accounts.wallet.save() // 保存钱包
  18. web3.eth.accounts.wallet.load() // 从本地存储器载入钱包并解密

9、账户交互:web3.eth.personal

  1. var Personal = require('web3-eth-personal');
  2. var personal = new Personal(Personal.givenProvider || 'ws://some.local-or-remote.node:8546');
  3. web3.eth.personal.newAccount(password) // 创建新账户
  4. web3.eth.personal.sign(dataToSign, address, password) // 为数据生成签名
  5. web3.eth.personal.ecRecover(dataThatWasSigned, signature) // 提取数据的签名账户
  6. web3.eth.personal.signTransaction // 为交易生成签名

10、应用二进制接口ABI

web3.eth.abi系列函数用来将参数编码为ABI (Application Binary Interface),或者从ABI解码回来。 以便在以太坊虚拟机EVM上执行函数函数调用。

  1. web3.eth.abi.encodeFunctionSignature(functionName) // 将函数名编码为ABI签名,方法是取函数名及参数类型的sha3哈希值的头4个字节
  2. web3.eth.abi.encodeEventSignature(eventName) // 将事件名编码为ABI签名,方法是取事件名及其参数类型的sha3哈希值
  3. web3.eth.abi.encodeParameter(type, parameter) // 将参数按照其type编码成ABI
  4. web3.eth.abi.encodeParameters(typesArray, parameters) // 编码函数参数组
  5. web3.eth.abi.encodeFunctionCall(jsonInterface, parameters) // 将函数调用根据其JSON接口对象和给定的参数进行ABI编码
  6. web3.eth.abi.decodeParameter(type, hexString) // 将ABI编码过的参数解码为其JavaScript形式
  7. web3.eth.abi.decodeParameters(typesArray, hexString) // 将ABI编码的参数解码为其JavaScript形式
  8. web3.eth.abi.decodeLog(inputs, hexString, topics) // 对ABI编码后的日志数据和索引的主题数据进行解码

11、辅助工具:web3.utils

  1. 调用方法:Web3.utils
  2. web3.utils.randomHex(size) // 生成伪随机16进制字符串
  3. web3.utils._ // 提供了underscore库的接口,underscore是非常流行的javascript工具库,提供了很多方便的js函数
  4. web3.utils.BN(mixed) // 提供了BN.js库的访问接口,用来处理大数的计算
  5. web3.utils.isBN(bn) // 检查给定参数是否BN对象
  6. web3.utils.isBigNumber(bignumber) // 检查给定参数是否为BigNumber对象
  7. web3.utils.sha3(string) // 计算给定字符串的sha3哈希值
  8. web3.utils.keccak256(string)
  9. web3.utils.soliditySha3 // 采用和solidity同样的方式计算给定参数的sha3哈希值,也就是说,在计算哈希之前,需要首先对参数进行ABI编码,并进行字节紧凑化处理
  10. web3.utils.isHex(hex) // 检查指定的参数字符串是否是16进制字符串
  11. web3.utils.isHexStrict(hex) // 严格模式16进制检查,必须以0x开头
  12. web3.utils.isAddress(address) // 检查指定的字符串是否是有效的以太坊地址
  13. web3.utils.toChecksumAddress(address) // 将给定的大写或小写以太坊地址转换为校验和地址
  14. web3.utils.checkAddressChecksum(address) // 检查指定地址的校验和,对于非检验和地址将返回false
  15. web3.utils.toHex(mixed) // 转换为16进制字符串
  16. web3.utils.toBN // 转换为BN对象
  17. web3.utils.hexToNumberString(hex) // 将给定的16进制字符串转化为数值字符串
  18. web3.utils.hexToNumber(hex) // 返回给定16进制字符串的数值表示
  19. web3.utils.numberToHex(number) // 数值转换为16进制表示
  20. web3.utils.hexToUtf8(hex) // 16进制字符串转换为utf-8
  21. web3.utils.hexToAscii(hex) // 16进制字符串转换为ascii
  22. web3.utils.utf8ToHex(string) // utf-8字符串转换为16进制
  23. web3.utils.asciiToHex(string) // ascii字符串转换为16进制
  24. web3.utils.hexToBytes(hex) // 16进制字符串转换为字节数组
  25. web3.utils.toWei(number, type) // 转换到wei, type为ether, Gwei
  26. web3.utils.fromWei // 从wei转换到其他以太单位
  27. web3.utils.unitMap // 以太单位换算表
  28. web3.utils.padLeft // 左侧零补齐
  29. web3.utils.padRight // 右侧零补齐

 

 

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号