本文环境: 区块链:以太坊POA联盟链; 出块节点数:3; 操作系统:windows 64; 节点版本:Geth1.9.14; node版本:v10.14.0 参考文档:https://web3js.readthedocs.io/en/v1.2.8/ 目录 2.6 transactionConfirmationBlocks 为了让DAPP在区块链网络上运行起来,用户需要使用web3.js库提供的web3对象。它通过rpc调用与一个本地节点进行通讯。也就是说,web3.js作为开放的rpc层,是与以太坊节点协同工作的。 web3 JavaScript API设计为跟一个本地rpc节点协同工作,默认使用同步HTTP请求。 如果想发出异步HTTP请求,可以采用错误优先(error first)回调方式,把一个可选回调函数作为最后一个参数传进去: 批量请求的处理: javaScript本质上对大数对象的处理不在行,比如下面的例子: 因此,web3.js会自动加载BigNumber.js库来处理大数和进行完美计算。 下面的例子中,web3.eth.getBalance()方法获取地址余额,该方法返回一个Big Number对象;此时,需要调用toString(),把它转换成数字字符串。 下面的例子中,因为是超过20个浮点数位的大数,BigNumber.js仍然无法正确处理;因此推荐以sha为单位存储余额,仅在向用户呈现时再转换成其他单位。web3.js自身总是以sha为单位返回和调取余额。 为了在node.js中使用web3.js,可以在项目目录中运行: 本文一直没有安装成功,因此尝试使用以下方式安装: 然后在源代码中使用require导入它;一个web3实例代表与节点的一个连接。 Example 或者,通过检查web3是否是undefined,来确保代码的可靠运行。 如果web3被定义了,则使用已经可用的实例;否则,通过连接至自定义节点创建一个实例。 直接查看web3对象: 查询当前web3.js库版本。 Returns Example 在创建web3实例之后,可以使用setProvider方法改变provider,它有一个实参,即新provider实例。 Example Returns Example Configuration web3.currentProvider属性被自动分配给当前的provider实例。 Returns Example 默认地址用于”from”属性,如果没有”from”属性则用于以下方法: returns Example 默认区块,默认值 =”latest”。用于以下方法: returns 默认区块可以是下面的类型值: Number:区块号; String:“genesis”,创世区块; String:“earliest”,创世区块; String:“latest”,默认值,区块链中最新的区块; String:“pending”,当前挖矿区块(包含了pending的交易); Example 默认分叉属性,用于本地签名交易; Example 默认链属性,用于本地签名交易; Example 交易区块超时; Example 交易确认区块数; Example 交易轮询超时,改属性通过HTTP连接使用。此选项定义Web3等待确认交易已被网络挖掘的收据的秒数。 注意:如果此方法超时,则交易可能仍处于pending状态。 Example 节点的以太坊协议版本; Example 检查节点当前是否已经与网络同步; Returns 一个Promise对象,其解析值为 startingBlock – Number: 同步起始块编号 currentBlock – Number: 当前已同步块编号 highestBlock – Number: 预估的目标同步块编号 knownStates – Number: 预估的要下载的状态 pulledStates – Number: 已经下载的状态 Example 当前接收挖矿奖励的账户地址; Example 检查节点的挖矿状态; Example 当前挖矿节点的每秒钟哈希值算出数量; Example 获取当前gas价格,该价格由最近的若干区块的gas价格中值决定。 Example 当前节点控制的账户列表。 Example 当前区块号。 Example 获取指定块中特定账户地址的余额。 Parameters String :address- 要检查余额的账户地址; Number|String :defaultBlock- 可选,使用该参数覆盖web3.eth.defaultBlock属性值; Returns Example eth的单位说明: 返回一个以太坊地址的指定位置存储内容。 Parameters String :address- 要读取的地址 Number :position- 存储中的索引编号 Number|String :defaultBlock- 可选,使用该参数覆盖web3.eth.defaultBlock属性值 Example 返回指定以太坊地址(通常是合约地址)处的代码; Parameters String :address- 要读取的地址 Number|String :defaultBlock- 可选,使用该参数覆盖web3.eth.defaultBlock属性值 Example 通过区块号或区块哈希获取对应的块信息。 Parameters String|Number :blockHash or blockNumber- 区块号或区块哈希值。 Boolean :returnTransactionObjects- 可选,默认值为false。当设置为true时,返回块中将包括所有交易详情,否则仅返回交易哈希。 Returns 一个Promise对象,其解析值为满足搜索条件的区块对象,具有以下字段: number – Number: 块编号,处于pending状态的块为null hash 32 Bytes – String: 块哈希,处于pending状态的块为null parentHash 32 Bytes – String: 父块哈希 nonce 8 Bytes – String: 生成的proof-of-work的哈希,处于pending状态的块为null sha3Uncles 32 Bytes – String: 块中叔伯数据的SHA3值 logsBloom 256 Bytes – String: 块中日志的bloom filter,处于pending状态的块为null transactionsRoot 32 Bytes – String: 块中的交易树根节点 stateRoot 32 Bytes – String: 块中的最终状态树根节点 miner – String: 接收奖励的矿工地址 difficulty – String: 该块的难度值 totalDifficulty – String: 截至该块的全链总难度值 extraData – String: 块 “extra data” 字段 size – Number: 字节为单位的块大小 gasLimit – Number: 该块允许的最大gas值 gasUsed – Number: 该块中所有交易使用的gas总量 timestamp – Number: 出块的unix时间戳 transactions – Array: 交易对象数组,或者32字节长的交易哈希值,取决于returnTransactionObjects的设置 uncles – Array: 叔伯块哈希值数组 Example 通过区块号或区块哈希获取对应的交易数量。 Example 获取某个区块的叔块数量。 获取某个叔块的信息,信息内容请参考2.19 getBlock。 通过交易hash查询交易信息。 Returns 一个Promise对象,其解析值为具有给定哈希值的交易对象,该对象具有如下字段: hash 32 Bytes – String: 交易的哈希值 nonce – Number: 交易发送方在此交易之前产生的交易数量 blockHash 32 Bytes – String: 交易所在块的哈希值。如果交易处于pending状态,则该值为null blockNumber – Number: 交易所在块的编号,如果交易处于pending状态,则该值为null transactionIndex – Number: 交易在块中的索引位置,如果交易处于pending状态,则该值为null from – String: 交易发送方的地址 to – String: 交易接收方的地址。对于创建合约的交易,该值为null value – String: 以wei为单位的转账金额 gasPrice – String: 发送方承诺的gas价格,以wei为单位 gas – Number: 发送方提供的gas用量 input – String: 随交易发送的数据 Example 查看处于pending状态的交易列表。信息内容参考2.23 getTransaction。 返回某个区块指定序号的交易。信息内容参考2.23 getTransaction。 Example 获取指定交易的收据对象。 如果交易处于pending状态,则返回null。 Returns 一个Promise对象,其解析值为交易的收据对象或者null。收据对象具有如下字段: status – Boolean: 成功的交易返回true,如果EVM回滚了该交易则返回false blockHash 32 Bytes – String: 交易所在块的哈希值 blockNumber – Number: 交易所在块的编号 transactionHash 32 Bytes – String: 交易的哈希值 transactionIndex – Number: 交易在块中的索引位置 from – String: 交易发送方的地址 to – String: 交易接收方的地址,对于创建合约的交易,该值为null contractAddress – String: 对于创建合约的交易,该值为创建的合约地址,否则为null cumulativeGasUsed – Number: 该交易执行时所在块的gas累计总用量 gasUsed- Number: 该交易的gas总量 logs – Array: 该交易产生的日志对象数组 Example 指定地址发出的交易数量。 Example Parameters transactionObject:Object – 要发送的交易对象,包含以下字段: from – String|Number: 交易发送方账户地址,不设置该字段的话,则使用web3.eth.defaultAccount属性值。可设置为一个地址或本地钱包web3.eth.accounts.wallet中的索引序号 to – String: 可选,消息的目标地址,对于合约创建交易该字段为null value – Number|String|BN|BigNumber: 可选,交易的数量,单位wei gas – Number: 可选,默认值:待定,用于交易的gas总量,未用完的gas会退还 gasPrice – Number|String|BN|BigNumber: 可选,该交易的gas价格,单位为wei,默认值为web3.eth.gasPrice属性值 data – String: 可选,可以是包含合约方法数据的ABI字符串,或者是合约创建交易中的初始化代码 nonce – Number: 可选,使用该字段覆盖使用相同nonce值的挂起交易 returns PromiEvent: 一个整合事件发生器的Promise对象,将在收到交易收据后得到解析。 “transactionHash” 返回String: 在交易发出并得到有效的交易哈希值后立刻触发 “receipt” 返回Object: 当交易收据有效后立刻触发 “confirmation” 返回Number, Object: 在每次确认后立刻触发,最多12次确认。确认编号为第一个参数,收据为第二个参数。从0号确认开始触发 “error” 返回Error对象: 在发送交易的过程中如果出现错误则立刻触发。如果是out of gas错误,则传入第二个参数为交易收据 Example_1:含部署智能合约方法 Example_2:含交易eth方法 Example_3:含区块确认 用来发送已经签名的交易。可以使用 Parameters returns Example 自动获取nonce并发送签名交易: 用指定的账户对数据进行签名,该账户必须先解锁。 Parameters String :dataToSign- 待签名的数据。对于字符串将首先使用 String|Number :address- 用来签名的账户地址。或者本地钱包web3.eth.accounts.wallet中的地址或其序号 returns Example 对交易进行签名,用来签名的账户地址需要首先解锁。 Parameters Object :transactionObject- 要签名的交易数据 String :address- 用于签名的账户地址 returns Example 执行一个消息调用交易,消息调用交易直接在节点EVM中执行,而不需要通过区块链的挖矿来执行。 Parameters Object :callObject- 交易对象,消息调用交易的from属性可选 Number|String :defaultBlock- 可选,使用该参数来覆盖默认的web3.eth.defaultBlock属性值 returns Example 当前连接的节点的chainId;有时叫networkId。 Example 节点信息。 返回指定帐户和存储值,包括EIP-1186中描述的Merkle证明。 Parameters String 20 Bytes: 账号地址或合约地址 Number[] | BigNumber[] | BN[] | String[] 32 Bytes: 存储-键值对列表 Number | String | BN | BigNumber: 区块号,可以是”latest”, “earliest”, 或 “genesis” returns 对象 – 一个账号对象 address – String: 账号地址 balance – String: 账号余额 codeHash – String: code的哈希值 nonce – String: 账号Nonce值,交易数量 storageHash – String: 存储根测SHA3值,所有存储都将从这个根哈希开始提供merkle证明 accountProof – String[]: rlp序列化的Merkle树节点的数组,从状态根节点开始,以SHA3(地址)的路径作为键值 storageProof – Object[] :请求的存储项数组 Example
0.1 使用回调
web3.eth.getBlock(48, function(error, result){ if(!error) //If no error occurred, return result console.log(result) else //If an error occurred, handle it (throw, etc) console.error(error); })
0.2 批量请求
var batch = web3.createBatch(); batch.add(web3.eth.getBalance.request('0x0000000000000000000000000000000000000000', 'latest', callback)); batch.add(web3.eth.contract(abi).at(address).balance.request(address, callback2)); batch.execute();
0.3 大数(Big Number)的处理
"101010100324325345346456456456456456456" // "101010100324325345346456456456456456456" 101010100324325345346456456456456456456 // 1.0101010032432535e+38
var balance = new BigNumber('123456786979284780000000000'); // or var balance = web3.eth.getBalance(someAddress); balance.plus(21).toString(10); // toString(10) converts it to a number string // "123456786979284780000000021"
var balance = new BigNumber('13124.234435346456466666457455567456'); balance.plus(21).toString(10); // toString(10) converts it to a number string, but can only show max 20 floating points // "13124.23443534645646666646" // you number would be cut after the 20 floating point
一、web3
d:myProject>npm install web3
//安装cnpm C:WINDOWSsystem32>npm install -g cnpm --registry=https://registry.npm.taobao.org //安装工具环境windows-build-tools,该步骤包括安装python2.7 C:WINDOWSsystem32>npm install -g --production windows-build-tools //安装web3 C:WINDOWSsystem32>cnpm install -g web3 Downloading web3 to C:Program Filesnodejsnode_globalnode_modulesweb3_tmp [1/7] web3-net@1.2.8 installed at node_modules_web3-net@1.2.8@web3-net [2/7] web3-eth-personal@1.2.8 installed at node_modules_web3-eth-personal@1.2.8@web3-eth-personal [3/7] web3-shh@1.2.8 installed at node_modules_web3-shh@1.2.8@web3-shh [4/7] web3-utils@1.2.8 installed at node_modules_web3-utils@1.2.8@web3-utils [5/7] web3-eth@1.2.8 installed at node_modules_web3-eth@1.2.8@web3-eth [6/7] web3-core@1.2.8 installed at node_modules_web3-core@1.2.8@web3-core [7/7] web3-bzz@1.2.8 installed at node_modules_web3-bzz@1.2.8@web3-bzz execute post install 5 scripts... ......................................................................................................................................... All packages installed (315 packages installed from npm registry, used 28s(network 6s), speed 1.31MB/s, json 288(688.25kB), tarball 7.52MB) C:WINDOWSsystem32>
var Web3= require('web3'); // create an instance of web3 using the HTTP provider. var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545"));
if (typeof web3 !== 'undefined') { web3 = new Web3(web3.currentProvider); } else { // set the provider you want from Web3.providers web3 = new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); }
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); console.log(web3);
1.1 web3.version
web3.version
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); console.log(web3.version); //1.2.8
1.2 web3.setProvider
web3.setProvider(provider)
var Web3 = require('web3'); var web3 = new Web3('https://localhost:8545'); // or var web3 = new Web3(new Web3.providers.HttpProvider('https://localhost:8545')); // change provider web3.setProvider('ws://localhost:8546'); // or web3.setProvider(new Web3.providers.WebsocketProvider('ws://localhost:8546')); // Using the IPC provider in node.js var net = require('net'); var web3 = new Web3('/Users/myuser/Library/Ethereum/geth.ipc', net); // mac os path // or var web3 = new Web3(new Web3.providers.IpcProvider('/Users/myuser/Library/Ethereum/geth.ipc', net)); // mac os path // on windows the path is: "\\.\pipe\geth.ipc" // on linux the path is: "/users/myuser/.ethereum/geth.ipc"
1.3 web3.providers
web3.providers
var Web3 = require('web3'); // use the given Provider, e.g in Mist, or instantiate a new websocket provider var web3 = new Web3(Web3.givenProvider || 'ws://remotenode.com:8546'); // or var web3 = new Web3(Web3.givenProvider || new Web3.providers.WebsocketProvider('ws://remotenode.com:8546')); // Using the IPC provider in node.js var net = require('net'); var web3 = new Web3('/Users/myuser/Library/Ethereum/geth.ipc', net); // mac os path // or var web3 = new Web3(new Web3.providers.IpcProvider('/Users/myuser/Library/Ethereum/geth.ipc', net)); // mac os path // on windows the path is: "\\.\pipe\geth.ipc" // on linux the path is: "/users/myuser/.ethereum/geth.ipc"
// ==== // Http // ==== var Web3HttpProvider = require('web3-providers-http'); var options = { keepAlive: true, withCredentials: false, timeout: 20000, // ms headers: [ { name: 'Access-Control-Allow-Origin', value: '*' }, { ... } ], agent: { http: http.Agent(...), baseUrl: '' } }; var provider = new Web3HttpProvider('https://localhost:8545', options); // ========== // Websockets // ========== var Web3WsProvider = require('web3-providers-ws'); var options = { timeout: 30000, // ms // Useful for credentialed urls, e.g: ws://username:password@localhost:8546 headers: { authorization: 'Basic username:password' }, // Useful if requests result are large clientConfig: { maxReceivedFrameSize: 100000000, // bytes - default: 1MiB maxReceivedMessageSize: 100000000, // bytes - default: 8MiB }, // Enable auto reconnection reconnect: { auto: true, delay: 5000, // ms maxAttempts: 5, onTimeout: false } }; var ws = new Web3WsProvider('ws://localhost:8546', options);
1.4 web3.currentProvider
web3.currentProvider
// Check if eth already set a provider if(!web3.currentProvider) web3.setProvider(new Web3.providers.HttpProvider("https://localhost:8545"));
二、web3.eth
2.1 defaultAccount
web3.eth.defaultAccount
undefined
)
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); console.log(web3.eth.defaultAccount); //undefined web3.eth.defaultAccount = "0x0297a8913cc187d60712f095a7e1bf2421bfcd40"; console.log(web3.eth.defaultAccount); //0x0297a8913cc187d60712f095a7e1bf2421bfcd40
2.2 defaultBlock
web3.eth.defaultBlock
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); console.log(web3.eth.defaultBlock); //latest,默认值 web3.eth.defaultBlock = 12345; console.log(web3.eth.defaultBlock); //12345 web3.eth.defaultBlock = "genesis"; console.log(web3.eth.defaultBlock); //genesis
2.3 defaultHardfork
web3.eth.defaultHardfork
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); console.log(web3.eth.defaultHardfork); //undefined,本文poa私链 web3.eth.defaultHardfork = "istanbul"; console.log(web3.eth.defaultHardfork); //istanbul
2.4 defaultChain
web3.eth.defaultChain
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); console.log(web3.eth.defaultChain); //undefined,本文poa私链 web3.eth.defaultChain = "mainnet"; console.log(web3.eth.defaultChain); //mainnet
2.5 transactionBlockTimeout
web3.eth.transactionBlockTimeout
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); console.log(web3.eth.transactionBlockTimeout); //50,默认值 web3.eth.transactionBlockTimeout = 60 ; console.log(web3.eth.transactionBlockTimeout); //60
2.6 transactionConfirmationBlocks
web3.eth.transactionConfirmationBlocks
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); console.log(web3.eth.transactionConfirmationBlocks); //24,默认值 web3.eth.transactionConfirmationBlocks = 12 ; console.log(web3.eth.transactionConfirmationBlocks); //12
2.7 transactionPollingTimeout
web3.eth.transactionPollingTimeout
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); console.log(web3.eth.transactionPollingTimeout); //750,默认值 web3.eth.transactionPollingTimeout = 600 ; console.log(web3.eth.transactionPollingTimeout); //600
2.8 getProtocolVersion
web3.eth.getProtocolVersion([callback])
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); web3.eth.getProtocolVersion().then(console.log); //'0x41'
2.9 isSyncing
web3.eth.isSyncing([callback])
Object
或Boolean
。如果节点尚未与网络同步, 则返回false,否则返回一个同步对象,具有以下属性:
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); web3.eth.isSyncing().then(console.log);//本文为poa私链节点,仅同步不出块,已经同步到最新区块,结果返回:false //预期结果: { startingBlock: 100, currentBlock: 312, highestBlock: 512, knownStates: 234566, pulledStates: 123455 }
2.10 getCoinbase
web3.eth.getCoinbase([callback])
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); web3.eth.getCoinbase().then(console.log); //0x0297a8913cc187d60712f095a7e1bf2421bfcd40
2.11 isMining
web3.eth.isMining([callback])
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); web3.eth.isMining().then(console.log); //false or true
2.12 getHashrate
web3.eth.getHashrate([callback])
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); web3.eth.getHashrate().then(console.log); //493736;如果返回0,表示本节点没有挖矿
2.13 getGasPrice
web3.eth.getGasPrice([callback])
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); web3.eth.getGasPrice().then(console.log); //1000000000
2.14 getAccounts
web3.eth.getAccounts([callback])
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); web3.eth.getAccounts().then(console.log); [ '0x0297a8913cc187D60712F095a7E1BF2421bFCD40', '0x38D8B866a1ABeBcA20AFC004622F5355EeFEB568', '0xDa25997b15a6BeA86116942B8Ab69a5620D82284' ]
2.15 getBlockNumber
web3.eth.getBlockNumber([callback])
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); web3.eth.getBlockNumber().then(console.log); //206136
2.16 getBalance
web3.eth.getBalance(address [, defaultBlock] [, callback])
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); web3.eth.getBalance("0x38D8B866a1ABeBcA20AFC004622F5355EeFEB568").then(console.log); //1539182000000000000
{ noether: '0', wei: '1', kwei: '1000', Kwei: '1000', babbage: '1000', femtoether: '1000', mwei: '1000000', Mwei: '1000000', lovelace: '1000000', picoether: '1000000', gwei: '1000000000', Gwei: '1000000000', shannon: '1000000000', nanoether: '1000000000', nano: '1000000000', szabo: '1000000000000', microether: '1000000000000', micro: '1000000000000', finney: '1000000000000000', milliether: '1000000000000000', milli: '1000000000000000', ether: '1000000000000000000', kether: '1000000000000000000000', grand: '1000000000000000000000', mether: '1000000000000000000000000', gether: '1000000000000000000000000000', tether: '1000000000000000000000000000000' },
2.17 getStorageAt
web3.eth.getStorageAt(address, position [, defaultBlock] [, callback])
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); web3.eth.getStorageAt("0x1e85d960a6fdcc5cb6deaf6567be527a1dd23602",0).then(console.log); //账号地址,返回0x0000000000000000000000000000000000000000000000000000000000000000 web3.eth.getStorageAt("0x1e85d960a6fdcc5cb6deaf6567be527a1dd23602",0).then(console.log); //合约地址,返回0x00000000000000000000000000000000000000000000d3c21bcecceda1000000 web3.eth.getStorageAt("0x1e85d960a6fdcc5cb6deaf6567be527a1dd23602",1).then(console.log); //合约地址,返回0x6b6f6e6766757a69546f6b656e0000000000000000000000000000000000001a
2.18 getCode
web3.eth.getCode(address [, defaultBlock] [, callback])
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); web3.eth.getCode("0x1e85d960a6fdcc5cb6deaf6567be527a1dd23602").then(console.log); //账号地址,返回0x web3.eth.getCode("0x1e85d960a6fdcc5cb6deaf6567be527a1dd23602").then(console.log); //合约地址,返回整个合约的bytecode,0x6080604052600436106100af576000357c0100........20029
2.19 getBlock
web3.eth.getBlock(blockHashOrBlockNumber [, returnTransactionObjects] [, callback])
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); web3.eth.getBlock(123456).then(console.log); /* { difficulty: '2', extraData: '0xd88301090e846765746888676f312e31342e32856c696e757800000000000000fbeba116613305884a5777c34b363086ad78aa95df89c6adeaee35b3988feb2d68441792c211590278e8f6ff7dce44939fa9ebff5b166d56ee7dcb5464e3f49f00', gasLimit: 8000000, gasUsed: 0, hash: '0x763ac9f4656d79ec99c45634dcbc5ad1e87cf447fa8c36532bf7f96f22f95efe', logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', miner: '0x0000000000000000000000000000000000000000', mixHash: '0x0000000000000000000000000000000000000000000000000000000000000000', nonce: '0x0000000000000000', number: 123456, parentHash: '0xc9537757f0e63b0a72738984776378c12162560730fee0a69fd96dbb80edc875', receiptsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', size: 609, stateRoot: '0x07fd2236ebc14cb11fd6696b05b9d93e7fed1fe05e7ec356307b08462d0b6215', timestamp: 1590938171, totalDifficulty: '211001', transactions: [], transactionsRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', uncles: [] } */ web3.eth.getBlock("0xe4025dfba9210e94f7e44e82015a0bba01f97bec1790a7ee145b8a6e65c5b622").then(console.log); /* { difficulty: '1', extraData: '0xd88301090e846765746888676f312e31342e32856c696e757800000000000000f0b17923e7c783dc6dc2a15ea798880298505afda350da1feb04f6d9089c6342420e48b7ca6b8572dc53446a49a767536d7852f877273fd80335d176e314b01401', gasLimit: 8000000, gasUsed: 1114009, hash: '0xe4025dfba9210e94f7e44e82015a0bba01f97bec1790a7ee145b8a6e65c5b622', logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000080000000000000000000010000000000000020000000000000000000800000000000000000000000010000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000200000002020000000000000000000000000000000000000000000000000020000010000000000000000000000000000000000000000000000000000000000000', miner: '0x0000000000000000000000000000000000000000', mixHash: '0x0000000000000000000000000000000000000000000000000000000000000000', nonce: '0x0000000000000000', number: 207111, parentHash: '0x712f16b98828e5232da0bf218348ed30bab9be95e8b3c50eaf352461202fdf45', receiptsRoot: '0xee55a9beb3a3cd48dcbe5a398e56c88cd3e75d60293fdea5b9e6b4ebdaeebca2', sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', size: 5936, stateRoot: '0x106f8885f29db87fa585fce93399d54b2fcd26262c759d5d9356ea81cc329527', timestamp: 1591774721, totalDifficulty: '322540', transactions: [ '0x7d376d4bf081382d27f55cbf4351e20ff0391607cdac2ed5dbb200add8b7ebf6' ], transactionsRoot: '0x3aa021842b20ff925fc47ed4c608d2284bdf5218267e51cfb6bf5a8dfac4dd41', uncles: [] } */
2.20 getBlockTransactionCount
web3.eth.getBlockTransactionCount(blockHashOrBlockNumber [, callback])
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); web3.eth.getBlockTransactionCount(123456).then(console.log); //0 web3.eth.getBlockTransactionCount("0xe4025dfba9210e94f7e44e82015a0bba01f97bec1790a7ee145b8a6e65c5b622").then(console.log); //1
2.21 getBlockUncleCount
web3.eth.getBlockUncleCount(blockHashOrBlockNumber [, callback])
2.22 getUncle
web3.eth.getUncle(blockHashOrBlockNumber, uncleIndex [, returnTransactionObjects] [, callback])
2.23 getTransaction
web3.eth.getTransaction(transactionHash [, callback])
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); web3.eth.getTransaction("0x0854f0450f4c7656c774f24f305a19c5a274f6ebe54779346c69ac9723a77065").then(console.log); /* { blockHash: '0x3c3d9f151b52b860c855e2d2f72807f2ca84712ce5b4a050a8c5fd32e4cf6b5c', blockNumber: 26055, from: '0x1e85D960a6fDcC5cb6Deaf6567Be527a1DD23602', gas: 21000, gasPrice: '1000000000', hash: '0x0854f0450f4c7656c774f24f305a19c5a274f6ebe54779346c69ac9723a77065', input: '0x', nonce: 0, to: '0x6B7eeaa2fe6bD6C47fB6Ca3835305301C5e759D6', transactionIndex: 0, value: '1000000000000000000000000', v: '0x42d', r: '0x8cb775a7c65b3474e2c24f068f9f9dae65cbe438fed8ba64f52631e818a60abe', s: '0x43223efb967e43ebed824a0e11c641e6a515cc5fb6c2ac5355fecd2e434ebdbe' } */
2.24 getPendingTransactions
web3.eth.getPendingTransactions([, callback])
2.25 getTransactionFromBlock
getTransactionFromBlock(hashStringOrNumber, indexNumber [, callback])
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); web3.eth.getTransactionFromBlock(26055,0).then(console.log); //第1笔交易 /* { blockHash: '0x3c3d9f151b52b860c855e2d2f72807f2ca84712ce5b4a050a8c5fd32e4cf6b5c', blockNumber: 26055, from: '0x1e85D960a6fDcC5cb6Deaf6567Be527a1DD23602', gas: 21000, gasPrice: '1000000000', hash: '0x0854f0450f4c7656c774f24f305a19c5a274f6ebe54779346c69ac9723a77065', input: '0x', nonce: 0, to: '0x6B7eeaa2fe6bD6C47fB6Ca3835305301C5e759D6', transactionIndex: 0, value: '1000000000000000000000000', v: '0x42d', r: '0x8cb775a7c65b3474e2c24f068f9f9dae65cbe438fed8ba64f52631e818a60abe', s: '0x43223efb967e43ebed824a0e11c641e6a515cc5fb6c2ac5355fecd2e434ebdbe' } */ web3.eth.getTransactionFromBlock(26055,1).then(console.log); //第2笔交易 //null
2.26 getTransactionReceipt
web3.eth.getTransactionReceipt(hash [, callback])
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); web3.eth.getTransactionReceipt("0x0854f0450f4c7656c774f24f305a19c5a274f6ebe54779346c69ac9723a77065").then(console.log); /* { blockHash: '0x3c3d9f151b52b860c855e2d2f72807f2ca84712ce5b4a050a8c5fd32e4cf6b5c', blockNumber: 26055, contractAddress: null, cumulativeGasUsed: 21000, from: '0x1e85d960a6fdcc5cb6deaf6567be527a1dd23602', gasUsed: 21000, logs: [], logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', status: true, to: '0x6b7eeaa2fe6bd6c47fb6ca3835305301c5e759d6', transactionHash: '0x0854f0450f4c7656c774f24f305a19c5a274f6ebe54779346c69ac9723a77065', transactionIndex: 0 } */
2.27 getTransactionCount
web3.eth.getTransactionCount(address [, defaultBlock] [, callback])
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); web3.eth.getTransactionCount("0x38D8B866a1ABeBcA20AFC004622F5355EeFEB568").then(console.log); //12
2.28 sendTransaction
web3.eth.sendTransaction(transactionObject [, callback])
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); // compiled solidity source code using https://remix.ethereum.org var code = "0x603d80600c6000396000f3007c01000000000000000000000000000000000000000000000000000000006000350463c6888fa18114602d57005b6007600435028060005260206000f3"; // using the callback web3.eth.sendTransaction({ from: '0x38D8B866a1ABeBcA20AFC004622F5355EeFEB568', // personal.unlockAccount("0x38D8B866a1ABeBcA20AFC004622F5355EeFEB568","password",300) data: code // deploying a contracrt }, function(error, hash){ if (!error){ console.log("succeed: ", hash); return hash; }else{ console.log("error:", error); } }); //0x65f382e52263326754b62907efb85aa40ed2e6fedd3d27f7e40f702320f9e2f2
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); // using the promise web3.eth.sendTransaction({ from: '0x38D8B866a1ABeBcA20AFC004622F5355EeFEB568', to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', value: '1000000000000000' }) .then(function(receipt){ console.log(receipt); }); /* { blockHash: '0xe05057c39222457f99c52936ef4af94d72b27a6e5bc7c6486c7fb84302271fa6', blockNumber: 215553, contractAddress: null, cumulativeGasUsed: 21000, from: '0x38d8b866a1abebca20afc004622f5355eefeb568', gasUsed: 21000, logs: [], logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', status: true, to: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', transactionHash: '0xf15d2e516ec5b3615ed2735fca88c92d602ea6a9cfde8ea47ffcdeb31a4682d2', transactionIndex: 0 } */
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); // using the event emitter web3.eth.sendTransaction({ from: '0x38D8B866a1ABeBcA20AFC004622F5355EeFEB568', to: '0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe', value: '1000000000000000' }) .on('transactionHash', function(hash){ console.log(hash); }) .on('receipt', function(receipt){ console.log(receipt); }) .on('confirmation', function(confirmationNumber, receipt){ console.log(confirmationNumber); }) .on('error', console.error); // If a out of gas error, the second parameter is the receipt. /* 0x925a4f5459601fa7bdfb240a370e8090243901a5fc276d6f0408c6c91201f311 0 { blockHash: '0x73fbe08a69232deecd5307ec0b8c8c09460c8bbb0ab6edab98379e158fa653b6', blockNumber: 215617, contractAddress: null, cumulativeGasUsed: 21000, from: '0x38d8b866a1abebca20afc004622f5355eefeb568', gasUsed: 21000, logs: [], logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', status: true, to: '0x11f4d0a3c12e86b4b5f39b213f7e19d048276dae', transactionHash: '0x925a4f5459601fa7bdfb240a370e8090243901a5fc276d6f0408c6c91201f311', transactionIndex: 0 } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 */
2.29 sendSignedTransaction
web3.eth.sendSignedTransaction(signedTransactionData [, callback])
web3.eth.accounts.signTransaction()
方法进行签名。
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); // 请安装ethereumjs-tx@1.3.7;因为ethereumjs-tx@2.0.0版会报错:"(node:10440) UnhandledPromiseRejectionWarning: Error: Returned error: invalid sender" // var Tx = require('ethereumjs-tx').Transaction; // 原文如此,使用版本ethereumjs-tx@1.3.7时取消.Transaction var Tx = require('ethereumjs-tx'); var privateKey = Buffer.from('a6fe45540000bd3fed9a4794166577b6e62eb674004edc22a6554630d8515654', 'hex'); var rawTx = { nonce: '0x15', gasPrice: '0x09184e72a000000', // 本文实际测试时该值有增加,因为报错"(node:10520) UnhandledPromiseRejectionWarning: Error: Returned error: intrinsic gas too low" gasLimit: '0x27100', // 本文实际测试时该值有增加,因为报错"(node:10520) UnhandledPromiseRejectionWarning: Error: Returned error: intrinsic gas too low" to: '0x0297a8913cc187d60712f095a7e1bf2421bfcd40', value: '0x100', data: '0x010203040506070809' } var tx = new Tx(rawTx,{'chain':'ropsten'}); tx.sign(privateKey); var serializedTx = tx.serialize(); console.log(serializedTx.toString('hex')); // f87213879184e72b00000083027200940297a8913cc187d60712f095a7e1bf2421bfcd40820100890102030405060708091ca0e2bafcccd3215da81fa21075d52f80ce26abf82f81566bfc6e69f3b75cfc6461a050738216f3088587caa14bb7578923b21bd969a5ccd7b2a77bcc7f4581e0ffe3 web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex')) .on('receipt', console.log); /* { blockHash: '0x86048b8c11f9d63eb9eaaa2df01df561d6ba29245bd8ba9b273a09473f174458', blockNumber: 223581, contractAddress: null, cumulativeGasUsed: 21144, from: '0x38d8b866a1abebca20afc004622f5355eefeb568', gasUsed: 21144, logs: [], logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', status: true, to: '0x0297a8913cc187d60712f095a7e1bf2421bfcd40', transactionHash: '0xe467cc585d2aefd9479b0ba54228e13f4150651294fe8dc597907f5b2697fe4d', transactionIndex: 0 } */
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); //请安装ethereumjs-tx@1.3.7;因为ethereumjs-tx@2.0.0版会报错:"(node:10440) UnhandledPromiseRejectionWarning: Error: Returned error: invalid sender" //var Tx = require('ethereumjs-tx').Transaction; //原文如此,使用版本ethereumjs-tx@1.3.7时取消.Transaction var Tx = require('ethereumjs-tx'); var privateKey = Buffer.from('a6fe45540000bd3fed9a4794166577b6e62eb674004edc22a6554630d8515654', 'hex'); //私钥对应的账号地地址 const account = web3.eth.accounts.privateKeyToAccount("a6fe45540000bd3fed9a4794166577b6e62eb674004edc22a6554630d8515654"); const address = account.address; console.log("address: ",address); //address: 0x38D8B866a1ABeBcA20AFC004622F5355EeFEB568 web3.eth.getTransactionCount(address,function(error, result){ if(!error){ //If no error occurred, return result var nonce = result; console.log('nonce :',nonce); var rawTx = { nonce: nonce, gasPrice: '0x09184e72a000000', //本文实际测试时该值有增加,因为报错"(node:10520) UnhandledPromiseRejectionWarning: Error: Returned error: intrinsic gas too low" gasLimit: '0x27100', //本文实际测试时该值有增加,因为报错"(node:10520) UnhandledPromiseRejectionWarning: Error: Returned error: intrinsic gas too low" to: '0x0297a8913cc187d60712f095a7e1bf2421bfcd40', value: '0x100', data: '0x010203040506070809' } var tx = new Tx(rawTx,{'chain':'ropsten'}); tx.sign(privateKey); var serializedTx = tx.serialize(); console.log(serializedTx.toString('hex')); web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex')) .on('receipt', console.log); } else //If an error occurred, handle it (throw, etc) console.error(error); })
2.30 sign
web3.eth.sign(dataToSign, address [, callback])
web3.utils.utf8ToHex()
方法将其转换为16进制
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); web3.eth.sign("Hello world", "0x38D8B866a1ABeBcA20AFC004622F5355EeFEB568").then(console.log); //0x553774cd3dccf9a5113d4a78a3c267c6dbeeecac719283924fdd0c5d420573d752e7679aafdc14f04c96c952fea622773def64f3e641f906dd221706537bba731b // the below is the same web3.eth.sign(web3.utils.utf8ToHex("Hello world"), "0x38D8B866a1ABeBcA20AFC004622F5355EeFEB568").then(console.log); //0x553774cd3dccf9a5113d4a78a3c267c6dbeeecac719283924fdd0c5d420573d752e7679aafdc14f04c96c952fea622773def64f3e641f906dd221706537bba731b
2.31 signTransaction
web3.eth.signTransaction(transactionObject, address [, callback])
web3.eth.sendSignedTransaction()
方法来发送交易。
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); web3.eth.signTransaction({ nonce: '25', from: "0x38D8B866a1ABeBcA20AFC004622F5355EeFEB568", gasPrice: "20000000000", gas: "21000", to: "0x0297a8913cc187d60712f095a7e1bf2421bfcd40", value: "100", data: "" }).then(console.log); /* { raw: '0xf865198504a817c800825208940297a8913cc187d60712f095a7e1bf2421bfcd40648082042ea0f3f0de7828a76cf9b06459b5c4fda4a26cb3101bf9441d43c71c8c5790e5867e9fe0cc9821a8811ed111176fe92ef4304a1f1f3e9ee8bd1ebf9ee519ae484c0a', tx: { nonce: '0x19', gasPrice: '0x4a817c800', gas: '0x5208', to: '0x0297a8913cc187d60712f095a7e1bf2421bfcd40', value: '0x64', input: '0x', v: '0x42e', r: '0xf3f0de7828a76cf9b06459b5c4fda4a26cb3101bf9441d43c71c8c5790e5867e', s: '0xe0cc9821a8811ed111176fe92ef4304a1f1f3e9ee8bd1ebf9ee519ae484c0a', hash: '0x27b4b94ca62e04f3ac470b77bc2a2118d531f8be318e2c99a4bce14a123102b6' } } */
2.32 call
web3.eth.call(callObject [, defaultBlock] [, callback])
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); web3.eth.call({ to: "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", // contract address data: "0xc6888fa10000000000000000000000000000000000000000000000000000000000000003" }) .then(console.log); // "0x000000000000000000000000000000000000000000000000000000000000000a"
2.33 getChainId
web3.eth.getChainId([callback])
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); web3.eth.getChainId().then(console.log); //517
2.34 getNodeInfo
web3.eth.getNodeInfo([callback])
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); web3.eth.getNodeInfo().then(console.log); //Geth/v1.9.14-stable-6d74d1e5/windows-amd64/go1.14.2
2.35 getProof
web3.eth.getProof(address, storageKey, blockNumber, [callback])
var Web3= require('web3'); var web3= new Web3(new Web3.providers.HttpProvider("https://localhost:8545")); web3.eth.getProof( "0x38D8B866a1ABeBcA20AFC004622F5355EeFEB568", ["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000001"], "latest" ).then(console.log); /* { address: '0x38D8B866a1ABeBcA20AFC004622F5355EeFEB568', accountProof: [ '0xf90131a0d67d35b003bcf010b083b765b273c337a14a6f349828815112dcdec77f2571a280a045e72ac735382c4fa9f7a176f34448c5bac9b920786dfbf612a49e2fdb0f8717a031c1eb791903907c7a0a876b796458f535aa769e361c54a933b457fcdf03dba780a0f797a10951c333c988e967204721aa436a78964c02bb5153b3897bbc3a3ca91c80a044b2fccca4176a61f8e360a6d94acc65490336e51f1678e1a85fceb9d67923aa80a0026e45a01956f0c2c0e847b02d200c1522e1fe5303ce31012c48c9db52b6c18080a06cb01cdb809d58854f932a278a58c255f7cadafbf87852f650ca363040e514db80a0ced141fc6a4a9247aa66bd8f8e724b6edf66c8d2fac6de056e051a69e7316425a0854ff34e11b0f6053ed6741da516fea9384c80d77509fc041b5e50548d08223a8080', '0xf873a0328d3473fa6a5032862dd15a1b9bba23613feb4ca64593dac016c16a028e1316b850f84e198ad278fe7c4a012aede200a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470' ], balance: '993928908304622262542848', codeHash: '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470', nonce: '25', storageHash: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421', storageProof: [ { key: '0x0', value: '0x0', proof: [] }, { key: '0x1', value: '0x0', proof: [] } ] } */
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算