赞
踩
Web3.js是一个库,它有很多函数,使用它可以在以太坊生态系统中通过HTTP或IPC与本地或者以太坊远程节点交互,如查看链上信息等
各种高级语言编写的程序可以使用web3 interface来与EVM交互,在此过程中使用是的JSON-RPC(一个无状态且轻量级的远程过程调用(RPC)传送协议,其传递内容透过 JSON 为主)
1.先查看是否安装了node.js,node.js带了npm
qinjianquan@MacBook-Pro-10 ~ % node -v
v10.24.1
Node.js发布于2009年5月,是一个基于Chrome V8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型, 让JavaScript 运行在服务端的开发平台,它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言
而npm的全称是Node Package Manager,是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准
如果未安装,请先安装命令行工具homebrew 或者 去nodejs.org安装 node.js
2.安装web3
npm install web3
此处使用web3命令和在geth控制台中使用web3命令原理上是一样的,具体方式上有所差别,如下是具体操作示范
qinjianquan@MacBook-Pro-10 ~ % node //先启动node,node提供了js代码的运行环境,现在,可以使用web3.js了 > var Web3 = require('web3') //先创建一个实例 undefined > Web3 //查看Web3属性和功能 [Function: Web3] { version: '1.7.3', utils: { _fireError: [Function: _fireError], _jsonInterfaceMethodToString: [Function: _jsonInterfaceMethodToString], _flattenTypes: [Function: _flattenTypes], randomHex: [Function: randomHex], BN: <ref *1> [Function: BN] { BN: [Circular *1], wordSize: 26, isBN: [Function: isBN], max: [Function: max], min: [Function: min], red: [Function: red], _prime: [Function: prime], mont: [Function: mont] }, isBN: [Function: isBN], isBigNumber: [Function: isBigNumber], isHex: [Function: isHex], isHexStrict: [Function: isHexStrict], sha3: [Function: sha3] { _Hash: [Function: keccak256] }, sha3Raw: [Function: sha3Raw], keccak256: [Function: sha3] { _Hash: [Function: keccak256] }, soliditySha3: [Function: soliditySha3], soliditySha3Raw: [Function: soliditySha3Raw], encodePacked: [Function: encodePacked], isAddress: [Function: isAddress], checkAddressChecksum: [Function: checkAddressChecksum], toChecksumAddress: [Function: toChecksumAddress], toHex: [Function: toHex], toBN: [Function: toBN], bytesToHex: [Function: bytesToHex], hexToBytes: [Function: hexToBytes], hexToNumberString: [Function: hexToNumberString], hexToNumber: [Function: hexToNumber], toDecimal: [Function: hexToNumber], numberToHex: [Function: numberToHex], fromDecimal: [Function: numberToHex], hexToUtf8: [Function: hexToUtf8], hexToString: [Function: hexToUtf8], toUtf8: [Function: hexToUtf8], stripHexPrefix: [Function: stripHexPrefix], utf8ToHex: [Function: utf8ToHex], stringToHex: [Function: utf8ToHex], fromUtf8: [Function: utf8ToHex], hexToAscii: [Function: hexToAscii], toAscii: [Function: hexToAscii], asciiToHex: [Function: asciiToHex], fromAscii: [Function: asciiToHex], unitMap: { 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' }, toWei: [Function: toWei], fromWei: [Function: fromWei], padLeft: [Function: leftPad], leftPad: [Function: leftPad], padRight: [Function: rightPad], rightPad: [Function: rightPad], toTwosComplement: [Function: toTwosComplement], isBloom: [Function: isBloom], isUserEthereumAddressInBloom: [Function: isUserEthereumAddressInBloom], isContractAddressInBloom: [Function: isContractAddressInBloom], isTopic: [Function: isTopic], isTopicInBloom: [Function: isTopicInBloom], isInBloom: [Function: isInBloom], compareBlockNumbers: [Function: compareBlockNumbers], toNumber: [Function: toNumber] }, modules: { Eth: [Function: Eth] { givenProvider: null, providers: [Object] }, Net: [Function: Net] { givenProvider: null, providers: [Object] }, Personal: [Function: Personal] { givenProvider: null, providers: [Object] }, Shh: [Function: Shh] { givenProvider: null, providers: [Object] }, Bzz: [Function: Bzz] { givenProvider: null } }, givenProvider: null, providers: { WebsocketProvider: [Function: WebsocketProvider], HttpProvider: [Function: HttpProvider], IpcProvider: [Function: IpcProvider] } }
通过INFURA提供的API,可以实现与以太坊节点远程交互
注意:以太坊是一个分布式的网络,这意味没有中心服务器,任何一个节点都可以当做服务器
第一步,注册INFURA: https://infura.io,获取连接API
https://mainnet.infura.io/v3/4adc822d926044efaa46a37fbd87fd0c
第二步,定义变量
var url = 'https://mainnet.infura.io/v3/4adc822d926044efaa46a37fbd87fd0c' //定义变量url
undefined
> var web3 = new Web3(url) //定义变量web3
undefined
第三步,链上交互
> var address = '0xDA9dfA130Df4dE4673b89022EE50ff26f6EA73Cf'
web3.eth.getBalance(address,(err,bal) => {balance = bal}) //此处是调用函数而不是直接查看 //此处有些语法源于智能合约语言Solidity,读者可以先了解一下Solidity Promise { <pending>, domain: Domain { domain: null, _events: [Object: null prototype] { removeListener: [Function: updateExceptionCapture], newListener: [Function: updateExceptionCapture], error: [Function: debugDomainError] }, _eventsCount: 3, _maxListeners: undefined, members: [], [Symbol(kWeak)]: WeakReference {} } } > balance //查看余额,单位 Wei '2113030002434567800000000' > web3.utils.fromWei(balance,'ether') //转换为ether '2113030.0024345678'
以下账户只做演示,请不要使用
> web3.eth.accounts.create()
{ address: '0xBC1Ee0f8474CC71288f1830Bb73E2aE5D60e5cd0',
privateKey:
'0xf4a4e1c0dd981bb1391fd30a5d3b5b94b80ba78f3c6baa31c1ef6ef2a3046f8e',
signTransaction: [Function: signTransaction],
sign: [Function: sign],
encrypt: [Function: encrypt] }
eth是一个对象,它有很多功能,可以用于与以太坊交互,可以使用定义好的web3查看
> web3 Web3 { currentProvider: [Getter/Setter], _requestManager: RequestManager { provider: HttpProvider { withCredentials: false, timeout: 0, headers: undefined, agent: undefined, connected: true, host: 'https://mainnet.infura.io/v3/4adc822d926044efaa46a37fbd87fd0c', httpsAgent: [Agent] }, providers: { WebsocketProvider: [Function: WebsocketProvider], HttpProvider: [Function: HttpProvider], IpcProvider: [Function: IpcProvider] }, subscriptions: Map(0) {} }, givenProvider: null, providers: { WebsocketProvider: [Function: WebsocketProvider], HttpProvider: [Function: HttpProvider], IpcProvider: [Function: IpcProvider] }, _provider: HttpProvider { withCredentials: false, timeout: 0, headers: undefined, agent: undefined, connected: true, host: 'https://mainnet.infura.io/v3/4adc822d926044efaa46a37fbd87fd0c', httpsAgent: Agent { _events: [Object: null prototype], _eventsCount: 2, _maxListeners: undefined, defaultPort: 443, protocol: 'https:', options: [Object: null prototype], requests: [Object: null prototype] {}, sockets: [Object: null prototype] {}, freeSockets: [Object: null prototype], keepAliveMsecs: 1000, keepAlive: true, maxSockets: Infinity, maxFreeSockets: 256, scheduling: 'lifo', maxTotalSockets: Infinity, totalSocketCount: 1, maxCachedSessions: 100, _sessionCache: [Object], [Symbol(kCapture)]: false } }, setProvider: [Function (anonymous)], setRequestManager: [Function (anonymous)], BatchRequest: [Function: bound Batch], extend: [Function: ex] { formatters: { inputDefaultBlockNumberFormatter: [Function: inputDefaultBlockNumberFormatter], inputBlockNumberFormatter: [Function: inputBlockNumberFormatter], inputCallFormatter: [Function: inputCallFormatter], inputTransactionFormatter: [Function: inputTransactionFormatter], inputAddressFormatter: [Function: inputAddressFormatter], inputPostFormatter: [Function: inputPostFormatter], inputLogFormatter: [Function: inputLogFormatter], inputSignFormatter: [Function: inputSignFormatter], inputStorageKeysFormatter: [Function: inputStorageKeysFormatter], outputProofFormatter: [Function: outputProofFormatter], outputBigNumberFormatter: [Function: outputBigNumberFormatter], outputTransactionFormatter: [Function: outputTransactionFormatter], outputTransactionReceiptFormatter: [Function: outputTransactionReceiptFormatter], outputBlockFormatter: [Function: outputBlockFormatter], outputLogFormatter: [Function: outputLogFormatter], outputPostFormatter: [Function: outputPostFormatter], outputSyncingFormatter: [Function: outputSyncingFormatter] }, utils: { _fireError: [Function: _fireError], _jsonInterfaceMethodToString: [Function: _jsonInterfaceMethodToString], _flattenTypes: [Function: _flattenTypes], randomHex: [Function: randomHex], BN: [Function], isBN: [Function: isBN], isBigNumber: [Function: isBigNumber], isHex: [Function: isHex], isHexStrict: [Function: isHexStrict], sha3: [Function], sha3Raw: [Function: sha3Raw], keccak256: [Function], soliditySha3: [Function: soliditySha3], soliditySha3Raw: [Function: soliditySha3Raw], encodePacked: [Function: encodePacked], isAddress: [Function: isAddress], checkAddressChecksum: [Function: checkAddressChecksum], toChecksumAddress: [Function: toChecksumAddress], toHex: [Function: toHex], toBN: [Function: toBN], bytesToHex: [Function: bytesToHex], hexToBytes: [Function: hexToBytes], hexToNumberString: [Function: hexToNumberString], hexToNumber: [Function: hexToNumber], toDecimal: [Function: hexToNumber], numberToHex: [Function: numberToHex], fromDecimal: [Function: numberToHex], hexToUtf8: [Function: hexToUtf8], hexToString: [Function: hexToUtf8], toUtf8: [Function: hexToUtf8], stripHexPrefix: [Function: stripHexPrefix], utf8ToHex: [Function: utf8ToHex], stringToHex: [Function: utf8ToHex], fromUtf8: [Function: utf8ToHex], hexToAscii: [Function: hexToAscii], toAscii: [Function: hexToAscii], asciiToHex: [Function: asciiToHex], fromAscii: [Function: asciiToHex], unitMap: [Object], toWei: [Function: toWei], fromWei: [Function: fromWei], padLeft: [Function: leftPad], leftPad: [Function: leftPad], padRight: [Function: rightPad], rightPad: [Function: rightPad], toTwosComplement: [Function: toTwosComplement], isBloom: [Function: isBloom], isUserEthereumAddressInBloom: [Function: isUserEthereumAddressInBloom], isContractAddressInBloom: [Function: isContractAddressInBloom], isTopic: [Function: isTopic], isTopicInBloom: [Function: isTopicInBloom], isInBloom: [Function: isInBloom], compareBlockNumbers: [Function: compareBlockNumbers], toNumber: [Function: toNumber] }, Method: [Function: Method] }, version: '1.7.3', utils: { _fireError: [Function: _fireError], _jsonInterfaceMethodToString: [Function: _jsonInterfaceMethodToString], _flattenTypes: [Function: _flattenTypes], randomHex: [Function: randomHex], BN: <ref *1> [Function: BN] { BN: [Circular *1], wordSize: 26, isBN: [Function: isBN], max: [Function: max], min: [Function: min], red: [Function: red], _prime: [Function: prime], mont: [Function: mont] }, isBN: [Function: isBN], isBigNumber: [Function: isBigNumber], isHex: [Function: isHex], isHexStrict: [Function: isHexStrict], sha3: [Function: sha3] { _Hash: [Function: keccak256] }, sha3Raw: [Function: sha3Raw], keccak256: [Function: sha3] { _Hash: [Function: keccak256] }, soliditySha3: [Function: soliditySha3], soliditySha3Raw: [Function: soliditySha3Raw], encodePacked: [Function: encodePacked], isAddress: [Function: isAddress], checkAddressChecksum: [Function: checkAddressChecksum], toChecksumAddress: [Function: toChecksumAddress], toHex: [Function: toHex], toBN: [Function: toBN], bytesToHex: [Function: bytesToHex], hexToBytes: [Function: hexToBytes], hexToNumberString: [Function: hexToNumberString], hexToNumber: [Function: hexToNumber], toDecimal: [Function: hexToNumber], numberToHex: [Function: numberToHex], fromDecimal: [Function: numberToHex], hexToUtf8: [Function: hexToUtf8], hexToString: [Function: hexToUtf8], toUtf8: [Function: hexToUtf8], stripHexPrefix: [Function: stripHexPrefix], utf8ToHex: [Function: utf8ToHex], stringToHex: [Function: utf8ToHex], fromUtf8: [Function: utf8ToHex], hexToAscii: [Function: hexToAscii], toAscii: [Function: hexToAscii], asciiToHex: [Function: asciiToHex], fromAscii: [Function: asciiToHex], unitMap: { 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' }, toWei: [Function: toWei], fromWei: [Function: fromWei], padLeft: [Function: leftPad], leftPad: [Function: leftPad], padRight: [Function: rightPad], rightPad: [Function: rightPad], toTwosComplement: [Function: toTwosComplement], isBloom: [Function: isBloom], isUserEthereumAddressInBloom: [Function: isUserEthereumAddressInBloom], isContractAddressInBloom: [Function: isContractAddressInBloom], isTopic: [Function: isTopic], isTopicInBloom: [Function: isTopicInBloom], isInBloom: [Function: isInBloom], compareBlockNumbers: [Function: compareBlockNumbers], toNumber: [Function: toNumber] }, eth: <ref *2> Eth { currentProvider: [Getter/Setter], _requestManager: RequestManager { provider: [HttpProvider], providers: [Object], subscriptions: Map(0) {} }, givenProvider: null, providers: { WebsocketProvider: [Function: WebsocketProvider], HttpProvider: [Function: HttpProvider], IpcProvider: [Function: IpcProvider] }, _provider: HttpProvider { withCredentials: false, timeout: 0, headers: undefined, agent: undefined, connected: true, host: 'https://mainnet.infura.io/v3/4adc822d926044efaa46a37fbd87fd0c', httpsAgent: [Agent] }, setProvider: [Function (anonymous)], setRequestManager: [Function (anonymous)], BatchRequest: [Function: bound Batch], extend: [Function: ex] { formatters: [Object], utils: [Object], Method: [Function: Method] }, handleRevert: [Getter/Setter], defaultCommon: [Getter/Setter], defaultHardfork: [Getter/Setter], defaultChain: [Getter/Setter], transactionPollingTimeout: [Getter/Setter], transactionPollingInterval: [Getter/Setter], transactionConfirmationBlocks: [Getter/Setter], transactionBlockTimeout: [Getter/Setter], blockHeaderTimeout: [Getter/Setter], defaultAccount: [Getter/Setter], defaultBlock: [Getter/Setter], maxListenersWarningThreshold: [Getter/Setter], clearSubscriptions: [Function: bound ], removeSubscriptionById: [Function: bound ], net: Net { currentProvider: [Getter/Setter], _requestManager: [RequestManager], givenProvider: null, providers: [Object], _provider: [HttpProvider], setProvider: [Function (anonymous)], setRequestManager: [Function (anonymous)], BatchRequest: [Function: bound Batch], extend: [Function], getId: [Function], isListening: [Function], getPeerCount: [Function], getNetworkType: [Function: bound getNetworkType] }, accounts: Accounts { currentProvider: [Getter/Setter], _requestManager: [RequestManager], givenProvider: null, providers: [Object], _provider: [HttpProvider], setProvider: [Function (anonymous)], setRequestManager: [Function (anonymous)], _ethereumCall: [Object], wallet: [Wallet] }, personal: Personal { currentProvider: [Getter/Setter], _requestManager: [RequestManager], givenProvider: null, providers: [Object], _provider: [HttpProvider], setProvider: [Function (anonymous)], setRequestManager: [Function (anonymous)], BatchRequest: [Function: bound Batch], extend: [Function], net: [Net], defaultAccount: [Getter/Setter], defaultBlock: [Getter/Setter], getAccounts: [Function], newAccount: [Function], unlockAccount: [Function], lockAccount: [Function], importRawKey: [Function], sendTransaction: [Function], signTransaction: [Function], sign: [Function], ecRecover: [Function] }, Contract: [Function: Contract] { setProvider: [Function (anonymous)], defaultAccount: null, defaultBlock: 'latest', transactionBlockTimeout: 50, transactionConfirmationBlocks: 24, transactionPollingTimeout: 750, transactionPollingInterval: 1000, blockHeaderTimeout: 10, handleRevert: false, _requestManager: [RequestManager], _ethAccounts: [Accounts], currentProvider: [HttpProvider] }, Iban: [class Iban], abi: ABICoder {}, ens: ENS { eth: [Circular *2], _detectedAddress: null, _lastSyncCheck: null, registry: [Getter], resolverMethodHandler: [Getter], registryAddress: [Getter/Setter] }, getNodeInfo: [Function: send] { method: [Method], request: [Function: bound ], call: 'web3_clientVersion' }, getProtocolVersion: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_protocolVersion' }, getCoinbase: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_coinbase' }, isMining: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_mining' }, getHashrate: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_hashrate' }, isSyncing: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_syncing' }, getGasPrice: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_gasPrice' }, getFeeHistory: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_feeHistory' }, getAccounts: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_accounts' }, getBlockNumber: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_blockNumber' }, getBalance: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_getBalance' }, getStorageAt: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_getStorageAt' }, getCode: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_getCode' }, getBlock: [Function: send] { method: [Method], request: [Function: bound ], call: [Function: blockCall] }, getUncle: [Function: send] { method: [Method], request: [Function: bound ], call: [Function: uncleCall] }, getBlockTransactionCount: [Function: send] { method: [Method], request: [Function: bound ], call: [Function: getBlockTransactionCountCall] }, getBlockUncleCount: [Function: send] { method: [Method], request: [Function: bound ], call: [Function: uncleCountCall] }, getTransaction: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_getTransactionByHash' }, getTransactionFromBlock: [Function: send] { method: [Method], request: [Function: bound ], call: [Function: transactionFromBlockCall] }, getTransactionReceipt: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_getTransactionReceipt' }, getTransactionCount: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_getTransactionCount' }, sendSignedTransaction: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_sendRawTransaction' }, signTransaction: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_signTransaction' }, sendTransaction: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_sendTransaction' }, sign: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_sign' }, call: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_call' }, estimateGas: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_estimateGas' }, submitWork: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_submitWork' }, getWork: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_getWork' }, getPastLogs: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_getLogs' }, getChainId: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_chainId' }, requestAccounts: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_requestAccounts' }, getProof: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_getProof' }, getPendingTransactions: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_pendingTransactions' }, createAccessList: [Function: send] { method: [Method], request: [Function: bound ], call: 'eth_createAccessList' }, subscribe: [Function (anonymous)] }, shh: Shh { currentProvider: [Getter/Setter], _requestManager: RequestManager { provider: [HttpProvider], providers: [Object], subscriptions: Map(0) {} }, givenProvider: null, providers: { WebsocketProvider: [Function: WebsocketProvider], HttpProvider: [Function: HttpProvider], IpcProvider: [Function: IpcProvider] }, _provider: HttpProvider { withCredentials: false, timeout: 0, headers: undefined, agent: undefined, connected: true, host: 'https://mainnet.infura.io/v3/4adc822d926044efaa46a37fbd87fd0c', httpsAgent: [Agent] }, setProvider: [Function (anonymous)], setRequestManager: [Function (anonymous)], BatchRequest: [Function: bound Batch], extend: [Function: ex] { formatters: [Object], utils: [Object], Method: [Function: Method] }, net: Net { currentProvider: [Getter/Setter], _requestManager: [RequestManager], givenProvider: null, providers: [Object], _provider: [HttpProvider], setProvider: [Function (anonymous)], setRequestManager: [Function (anonymous)], BatchRequest: [Function: bound Batch], extend: [Function], getId: [Function], isListening: [Function], getPeerCount: [Function] }, subscribe: [Function (anonymous)], getVersion: [Function: send] { method: [Method], request: [Function: bound ], call: 'shh_version' }, getInfo: [Function: send] { method: [Method], request: [Function: bound ], call: 'shh_info' }, setMaxMessageSize: [Function: send] { method: [Method], request: [Function: bound ], call: 'shh_setMaxMessageSize' }, setMinPoW: [Function: send] { method: [Method], request: [Function: bound ], call: 'shh_setMinPoW' }, markTrustedPeer: [Function: send] { method: [Method], request: [Function: bound ], call: 'shh_markTrustedPeer' }, newKeyPair: [Function: send] { method: [Method], request: [Function: bound ], call: 'shh_newKeyPair' }, addPrivateKey: [Function: send] { method: [Method], request: [Function: bound ], call: 'shh_addPrivateKey' }, deleteKeyPair: [Function: send] { method: [Method], request: [Function: bound ], call: 'shh_deleteKeyPair' }, hasKeyPair: [Function: send] { method: [Method], request: [Function: bound ], call: 'shh_hasKeyPair' }, getPublicKey: [Function: send] { method: [Method], request: [Function: bound ], call: 'shh_getPublicKey' }, getPrivateKey: [Function: send] { method: [Method], request: [Function: bound ], call: 'shh_getPrivateKey' }, newSymKey: [Function: send] { method: [Method], request: [Function: bound ], call: 'shh_newSymKey' }, addSymKey: [Function: send] { method: [Method], request: [Function: bound ], call: 'shh_addSymKey' }, generateSymKeyFromPassword: [Function: send] { method: [Method], request: [Function: bound ], call: 'shh_generateSymKeyFromPassword' }, hasSymKey: [Function: send] { method: [Method], request: [Function: bound ], call: 'shh_hasSymKey' }, getSymKey: [Function: send] { method: [Method], request: [Function: bound ], call: 'shh_getSymKey' }, deleteSymKey: [Function: send] { method: [Method], request: [Function: bound ], call: 'shh_deleteSymKey' }, newMessageFilter: [Function: send] { method: [Method], request: [Function: bound ], call: 'shh_newMessageFilter' }, getFilterMessages: [Function: send] { method: [Method], request: [Function: bound ], call: 'shh_getFilterMessages' }, deleteMessageFilter: [Function: send] { method: [Method], request: [Function: bound ], call: 'shh_deleteMessageFilter' }, post: [Function: send] { method: [Method], request: [Function: bound ], call: 'shh_post' }, unsubscribe: [Function: send] { method: [Method], request: [Function: bound ], call: 'shh_unsubscribe' } }, bzz: Bzz { givenProvider: null, currentProvider: null, isAvailable: [Function (anonymous)], upload: [Function (anonymous)], download: [Function (anonymous)] } }
web3.js 有很多函数和命令,更多内容,请读者参见参考文档:https://web3js.readthedocs.io/en/v1.2.0/index.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。