UNPKG

@parity/api

Version:

The Parity Promise-based API library for interfacing with Ethereum over RPC

313 lines (276 loc) 7.94 kB
// Copyright 2015-2019 Parity Technologies (UK) Ltd. // This file is part of Parity. // Parity is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // Parity is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with Parity. If not, see <http://www.gnu.org/licenses/>. const PubsubBase = require('../pubsubBase'); const { inAddress, inBlockNumber, inHex, inNumber16, inOptions, inFilter } = require('../../format/input'); const { outAddress, outBlock, outNumber, outTransaction, outSyncing, outReceipt, outLog } = require('../../format/output'); class Eth extends PubsubBase { constructor(provider) { super(provider); this._api = 'parity'; } newHeads(callback) { return this.addListener( 'eth', 'newHeads', (error, data) => { error ? callback(error) : callback(null, outBlock(data)); }, null ); } syncing(callback) { return this.addListener( 'eth', 'syncing', (error, data) => { error ? callback(error) : callback(null, outSyncing(data)); }, null ); } logs(callback) { throw Error('not supported yet'); } // eth API protocolVersion(callback) { return this.addListener(this._api, 'eth_protocolVersion', callback); } hashrate(callback) { return this.addListener(this._api, 'eth_hashrate', (error, data) => { error ? callback(error) : callback(null, outNumber(data)); }); } coinbase(callback) { return this.addListener(this._api, 'eth_coinbase', (error, data) => { error ? callback(error) : callback(null, outAddress(data)); }); } mining(callback) { return this.addListener(this._api, 'eth_mining', callback); } gasPrice(callback) { return this.addListener(this._api, 'eth_gasPrice', (error, data) => { error ? callback(error) : callback(null, outNumber(data)); }); } accounts(callback) { return this.addListener(this._api, 'eth_accounts', (error, accounts) => { error ? callback(error) : callback(null, (accounts || []).map(outAddress)); }); } blockNumber(callback) { return this.addListener(this._api, 'eth_blockNumber', (error, data) => { error ? callback(error) : callback(null, outNumber(data)); }); } getBalance(callback, address, blockNumber = 'latest') { return this.addListener( this._api, 'eth_getBalance', (error, data) => { error ? callback(error) : callback(null, outNumber(data)); }, [inAddress(address), inBlockNumber(blockNumber)] ); } getStorageAt(callback, address, index = 0, blockNumber = 'latest') { return this.addListener(this._api, 'eth_getStorageAt', callback, [ inAddress(address), inNumber16(index), inBlockNumber(blockNumber) ]); } getBlockByHash(callback, hash, full = false) { return this.addListener( this._api, 'eth_getBlockByHash', (error, data) => { error ? callback(error) : callback(null, outBlock(data)); }, [inHex(hash), full] ); } getBlockByNumber(callback, blockNumber = 'latest', full = false) { return this.addListener( this._api, 'eth_getBlockByNumber', (error, data) => { error ? callback(error) : callback(null, outBlock(data)); }, [inBlockNumber(blockNumber), full] ); } getTransactionCount(callback, address, blockNumber = 'latest') { return this.addListener( this._api, 'eth_getTransactionCount', (error, data) => { error ? callback(error) : callback(null, outNumber(data)); }, [inAddress(address), inBlockNumber(blockNumber)] ); } getBlockTransactionCountByHash(callback, hash) { return this.addListener( this._api, 'eth_getBlockTransactionCountByHash', (error, data) => { error ? callback(error) : callback(null, outNumber(data)); }, [inHex(hash)] ); } getBlockTransactionCountByNumber(callback, blockNumber = 'latest') { return this.addListener( this._api, 'eth_getBlockTransactionCountByNumber', (error, data) => { error ? callback(error) : callback(null, outNumber(data)); }, [inBlockNumber(blockNumber)] ); } getUncleCountByBlockHash(callback, hash) { return this.addListener( this._api, 'eth_getUncleCountByBlockHash', (error, data) => { error ? callback(error) : callback(null, outNumber(data)); }, [inHex(hash)] ); } getUncleCountByBlockNumber(callback, blockNumber = 'latest') { return this.addListener( this._api, 'eth_getUncleCountByBlockNumber', (error, data) => { error ? callback(error) : callback(null, outNumber(data)); }, [inBlockNumber(blockNumber)] ); } getCode(callback, address, blockNumber = 'latest') { return this.addListener(this._api, 'eth_getCode', callback, [ inAddress(address), inBlockNumber(blockNumber) ]); } call(callback, options, blockNumber = 'latest') { return this.addListener(this._api, 'eth_call', callback, [ inOptions(options), inBlockNumber(blockNumber) ]); } estimateGas(callback, options) { return this.addListener( this._api, 'eth_estimateGas', (error, data) => { error ? callback(error) : callback(null, outNumber(data)); }, [inOptions(options)] ); } getTransactionByHash(callback, hash) { return this.addListener( this._api, 'eth_getTransactionByHash', (error, data) => { error ? callback(error) : callback(null, outTransaction(data)); }, [inHex(hash)] ); } getTransactionByBlockHashAndIndex(callback, hash, index = 0) { return this.addListener( this._api, 'eth_getTransactionByBlockHashAndIndex', (error, data) => { error ? callback(error) : callback(null, outTransaction(data)); }, [inHex(hash), inNumber16(index)] ); } getTransactionByBlockNumberAndIndex( callback, blockNumber = 'latest', index = 0 ) { return this.addListener( this._api, 'eth_getTransactionByBlockNumberAndIndex', (error, data) => { error ? callback(error) : callback(null, outTransaction(data)); }, [inBlockNumber(blockNumber), inNumber16(index)] ); } getTransactionReceipt(callback, txhash) { return this.addListener( this._api, 'eth_getTransactionReceipt', (error, data) => { error ? callback(error) : callback(null, outReceipt(data)); }, [inHex(txhash)] ); } getUncleByBlockHashAndIndex(callback, hash, index = 0) { return this.addListener( this._api, 'eth_getUncleByBlockHashAndIndex', callback, [inHex(hash), inNumber16(index)] ); } getUncleByBlockNumberAndIndex(callback, blockNumber = 'latest', index = 0) { return this.addListener( this._api, 'eth_getUncleByBlockNumberAndIndex', callback, [inBlockNumber(blockNumber), inNumber16(index)] ); } getLogs(callback, options) { return this.addListener( this._api, 'eth_getLogs', (error, logs) => { error ? callback(error) : callback(null, logs => logs.map(outLog)); }, [inFilter(options)] ); } getWork(callback) { return this.addListener(this._api, 'eth_getWork', callback); } } module.exports = Eth;