UI 2 Api providers (#5714)

* Add providers

* Convert rpc calls to use provider

* Update SecureApi for provider
This commit is contained in:
Jaco Greeff 2017-05-31 12:08:04 +02:00 committed by GitHub
parent 265618f306
commit a328eef8d9
36 changed files with 597 additions and 471 deletions

View File

@ -17,8 +17,8 @@ Install the package with `npm install --save @parity/parity.js`
import { Api } from '@parity/parity.js';
// do the setup
const transport = new Api.Transport.Http('http://localhost:8545');
const api = new Api(transport);
const provider = new Api.Provider.Http('http://localhost:8545');
const api = new Api(provider);
```
### making calls

View File

@ -28,8 +28,8 @@ Install the package with `npm install --save ethapi-js` from the [npm registry e
import EthApi from 'ethapi-js';
// do the setup
const transport = new EthApi.Transport.Http('http://localhost:8545'); // or .Ws('ws://localhost:8546')
const ethapi = new EthApi(transport);
const provider = new EthApi.Provider.Http('http://localhost:8545'); // or .Ws('ws://localhost:8546')
const ethapi = new EthApi(provider);
```
You will require native Promises and fetch support (latest browsers only), they can be utilised by

View File

@ -16,8 +16,9 @@
import EventEmitter from 'eventemitter3';
import { Http, Ws } from './transport';
import Contract from './contract';
import { PromiseWrapper, Http as HttpProvider, Ws as WsProvider } from './provider';
import { Http as HttpTransport, Ws as WsTransport } from './transport';
import { Db, Eth, Parity, Net, Personal, Shh, Signer, Trace, Web3 } from './rpc';
import Subscriptions from './subscriptions';
@ -26,24 +27,28 @@ import { isFunction } from './util/types';
// import { LocalAccountsMiddleware } from './local';
export default class Api extends EventEmitter {
constructor (transport, allowSubscriptions = true) {
constructor (provider, allowSubscriptions = true) {
super();
if (!transport || !isFunction(transport.execute)) {
throw new Error('EthApi needs transport with execute() function defined');
if (!provider || (!isFunction(provider.send) && !isFunction(provider.execute))) {
throw new Error('Api needs provider with send() function');
}
this._transport = transport;
if (!isFunction(provider.send)) {
console.warn(new Error('deprecated: Api needs provider with send() function, old-style Transport found instead'));
}
this._db = new Db(transport);
this._eth = new Eth(transport);
this._net = new Net(transport);
this._parity = new Parity(transport);
this._personal = new Personal(transport);
this._shh = new Shh(transport);
this._signer = new Signer(transport);
this._trace = new Trace(transport);
this._web3 = new Web3(transport);
this._provider = new PromiseWrapper(provider);
this._db = new Db(this._provider);
this._eth = new Eth(this._provider);
this._net = new Net(this._provider);
this._parity = new Parity(this._provider);
this._personal = new Personal(this._provider);
this._shh = new Shh(this._provider);
this._signer = new Signer(this._provider);
this._trace = new Trace(this._provider);
this._web3 = new Web3(this._provider);
if (allowSubscriptions) {
this._subscriptions = new Subscriptions(this);
@ -62,7 +67,7 @@ export default class Api extends EventEmitter {
})
.catch(() => null);
transport.addMiddleware(middleware);
provider.addMiddleware(middleware);
}
}
@ -86,6 +91,10 @@ export default class Api extends EventEmitter {
return this._personal;
}
get provider () {
return this._provider.provider;
}
get shh () {
return this._shh;
}
@ -99,7 +108,7 @@ export default class Api extends EventEmitter {
}
get transport () {
return this._transport;
return this.provider;
}
get web3 () {
@ -160,8 +169,14 @@ export default class Api extends EventEmitter {
static util = util
static Provider = {
Http: HttpProvider,
Ws: WsProvider
}
// NOTE: kept for backwards compatibility
static Transport = {
Http: Http,
Ws: Ws
Http: HttpTransport,
Ws: WsTransport
}
}

View File

@ -23,19 +23,19 @@ import Api from './api';
describe('api/Api', () => {
describe('constructor', () => {
it('requires defined/non-null transport object', () => {
expect(() => new Api()).to.throw(/Api needs transport/);
expect(() => new Api(null)).to.throw(/Api needs transport/);
it('requires defined/non-null provider object', () => {
expect(() => new Api()).to.throw(/Api needs provider/);
expect(() => new Api(null)).to.throw(/Api needs provider/);
});
it('requires an execute function on the transport object', () => {
expect(() => new Api({})).to.throw(/Api needs transport/);
expect(() => new Api({ execute: true })).to.throw(/Api needs transport/);
it('requires an send function on the transport object', () => {
expect(() => new Api({})).to.throw(/Api needs provider/);
expect(() => new Api({ send: true })).to.throw(/Api needs provider/);
});
});
describe('interface', () => {
const api = new Api(new Api.Transport.Http(TEST_HTTP_URL, -1));
const api = new Api(new Api.Provider.Http(TEST_HTTP_URL, -1));
Object.keys(ethereumRpc).sort().forEach((endpoint) => {
describe(endpoint, () => {

View File

@ -27,8 +27,8 @@ import Api from '../api';
import Contract from './contract';
import { isInstanceOf, isFunction } from '../util/types';
const transport = new Api.Transport.Http(TEST_HTTP_URL, -1);
const eth = new Api(transport);
const provider = new Api.Provider.Http(TEST_HTTP_URL, -1);
const eth = new Api(provider);
describe('api/contract/Contract', () => {
const ADDR = '0x0123456789';

View File

@ -43,7 +43,7 @@ describe('api/local/LocalAccountsMiddleware', function () {
// Same as `parity_newAccountFromPhrase` with empty phrase
return transport
.execute('parity_newAccountFromSecret', SECRET, PASSWORD)
.execute('parity_newAccountFromSecret', [SECRET, PASSWORD])
.catch((_err) => {
// Ignore the error - all instances of LocalAccountsMiddleware
// share account storage
@ -91,7 +91,7 @@ describe('api/local/LocalAccountsMiddleware', function () {
it('allows non-registered methods through', () => {
return transport
.execute('eth_getBalance', '0x407d73d8a49eeb85d32cf465507dd71d507100c1')
.execute('eth_getBalance', ['0x407d73d8a49eeb85d32cf465507dd71d507100c1'])
.then((result) => {
expect(result).to.be.equal(RPC_RESPONSE);
});
@ -116,11 +116,11 @@ describe('api/local/LocalAccountsMiddleware', function () {
it('can handle `parity_phraseToAddress`', () => {
return transport
.execute('parity_phraseToAddress', '')
.execute('parity_phraseToAddress', [''])
.then((address) => {
expect(address).to.be.equal(ADDRESS);
return transport.execute('parity_phraseToAddress', FOO_PHRASE);
return transport.execute('parity_phraseToAddress', [FOO_PHRASE]);
})
.then((address) => {
expect(address).to.be.equal(FOO_ADDRESS);
@ -129,7 +129,7 @@ describe('api/local/LocalAccountsMiddleware', function () {
it('can create and kill an account', () => {
return transport
.execute('parity_newAccountFromPhrase', FOO_PHRASE, FOO_PASSWORD)
.execute('parity_newAccountFromPhrase', [FOO_PHRASE, FOO_PASSWORD])
.then((address) => {
expect(address).to.be.equal(FOO_ADDRESS);
@ -139,7 +139,7 @@ describe('api/local/LocalAccountsMiddleware', function () {
expect(accounts.length).to.be.equal(2);
expect(accounts.includes(FOO_ADDRESS)).to.be.true;
return transport.execute('parity_killAccount', FOO_ADDRESS, FOO_PASSWORD);
return transport.execute('parity_killAccount', [FOO_ADDRESS, FOO_PASSWORD]);
})
.then((result) => {
expect(result).to.be.true;

View File

@ -0,0 +1,26 @@
// Copyright 2015-2017 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/>.
import { Http as Transport } from '../transport';
export default class Http extends Transport {
send = (method, params, callback) => {
this
._execute(method, params)
.then((result) => callback(null, result))
.catch((error) => callback(error));
}
}

View File

@ -0,0 +1,20 @@
// Copyright 2015-2017 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/>.
export PromiseWrapper from './promiseWrapper';
export Http from './http';
export Ws from './ws';

View File

@ -0,0 +1,38 @@
// Copyright 2015-2017 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/>.
export default class PromiseWrapper {
constructor (provider) {
this.provider = provider;
}
send = (method, ...params) => {
if (!this.provider.send) {
// old-style transport interface for backwards compatibility
return this.provider.execute(method, params);
}
return new Promise((resolve, reject) => {
this.provider.send(method, params, (error, result) => {
if (error) {
reject(error);
} else {
resolve(result);
}
});
});
}
}

26
js/src/api/provider/ws.js Normal file
View File

@ -0,0 +1,26 @@
// Copyright 2015-2017 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/>.
import { Ws as Transport } from '../transport';
export default class Ws extends Transport {
send = (method, params, callback) => {
this
._execute(method, params)
.then((result) => callback(null, result))
.catch((error) => callback(error));
}
}

View File

@ -23,21 +23,21 @@ export default class Db {
getHex (dbName, keyName) {
return this._transport
.execute('db_getHex', dbName, keyName);
.send('db_getHex', dbName, keyName);
}
getString (dbName, keyName) {
return this._transport
.execute('db_getString', dbName, keyName);
.send('db_getString', dbName, keyName);
}
putHex (dbName, keyName, hexData) {
return this._transport
.execute('db_putHex', dbName, keyName, inHex(hexData));
.send('db_putHex', dbName, keyName, inHex(hexData));
}
putString (dbName, keyName, stringData) {
return this._transport
.execute('db_putString', dbName, keyName, stringData);
.send('db_putString', dbName, keyName, stringData);
}
}

View File

@ -16,10 +16,10 @@
import { TEST_HTTP_URL, mockHttp } from '../../../../test/mockRpc';
import Http from '../../transport/http';
import { Http, PromiseWrapper } from '../../provider';
import Db from './db';
const instance = new Db(new Http(TEST_HTTP_URL, -1));
const instance = new Db(new PromiseWrapper(new Http(TEST_HTTP_URL, -1)));
describe('api/rpc/Db', () => {
let scope;

View File

@ -18,304 +18,304 @@ import { inAddress, inBlockNumber, inData, inFilter, inHash, inHex, inNumber16,
import { outAddress, outBlock, outLog, outNumber, outReceipt, outSyncing, outTransaction } from '../../format/output';
export default class Eth {
constructor (transport) {
this._transport = transport;
constructor (provider) {
this._provider = provider;
}
accounts () {
return this._transport
.execute('eth_accounts')
return this._provider
.send('eth_accounts')
.then((accounts) => (accounts || []).map(outAddress));
}
blockNumber () {
return this._transport
.execute('eth_blockNumber')
return this._provider
.send('eth_blockNumber')
.then(outNumber);
}
call (options, blockNumber = 'latest') {
return this._transport
.execute('eth_call', inOptions(options), inBlockNumber(blockNumber));
return this._provider
.send('eth_call', inOptions(options), inBlockNumber(blockNumber));
}
coinbase () {
return this._transport
.execute('eth_coinbase')
return this._provider
.send('eth_coinbase')
.then(outAddress);
}
compileLLL (code) {
return this._transport
.execute('eth_compileLLL', inData(code));
return this._provider
.send('eth_compileLLL', inData(code));
}
compileSerpent (code) {
return this._transport
.execute('eth_compileSerpent', inData(code));
return this._provider
.send('eth_compileSerpent', inData(code));
}
compileSolidity (code) {
return this._transport
.execute('eth_compileSolidity', inData(code));
return this._provider
.send('eth_compileSolidity', inData(code));
}
estimateGas (options) {
return this._transport
.execute('eth_estimateGas', inOptions(options))
return this._provider
.send('eth_estimateGas', inOptions(options))
.then(outNumber);
}
fetchQueuedTransactions () {
return this._transport
.execute('eth_fetchQueuedTransactions');
return this._provider
.send('eth_fetchQueuedTransactions');
}
flush () {
return this._transport
.execute('eth_flush');
return this._provider
.send('eth_flush');
}
gasPrice () {
return this._transport
.execute('eth_gasPrice')
return this._provider
.send('eth_gasPrice')
.then(outNumber);
}
getBalance (address, blockNumber = 'latest') {
return this._transport
.execute('eth_getBalance', inAddress(address), inBlockNumber(blockNumber))
return this._provider
.send('eth_getBalance', inAddress(address), inBlockNumber(blockNumber))
.then(outNumber);
}
getBlockByHash (hash, full = false) {
return this._transport
.execute('eth_getBlockByHash', inHex(hash), full)
return this._provider
.send('eth_getBlockByHash', inHex(hash), full)
.then(outBlock);
}
getBlockByNumber (blockNumber = 'latest', full = false) {
return this._transport
.execute('eth_getBlockByNumber', inBlockNumber(blockNumber), full)
return this._provider
.send('eth_getBlockByNumber', inBlockNumber(blockNumber), full)
.then(outBlock);
}
getBlockTransactionCountByHash (hash) {
return this._transport
.execute('eth_getBlockTransactionCountByHash', inHex(hash))
return this._provider
.send('eth_getBlockTransactionCountByHash', inHex(hash))
.then(outNumber);
}
getBlockTransactionCountByNumber (blockNumber = 'latest') {
return this._transport
.execute('eth_getBlockTransactionCountByNumber', inBlockNumber(blockNumber))
return this._provider
.send('eth_getBlockTransactionCountByNumber', inBlockNumber(blockNumber))
.then(outNumber);
}
getCode (address, blockNumber = 'latest') {
return this._transport
.execute('eth_getCode', inAddress(address), inBlockNumber(blockNumber));
return this._provider
.send('eth_getCode', inAddress(address), inBlockNumber(blockNumber));
}
getCompilers () {
return this._transport
.execute('eth_getCompilers');
return this._provider
.send('eth_getCompilers');
}
getFilterChanges (filterId) {
return this._transport
.execute('eth_getFilterChanges', inNumber16(filterId))
return this._provider
.send('eth_getFilterChanges', inNumber16(filterId))
.then((logs) => logs.map(outLog));
}
getFilterChangesEx (filterId) {
return this._transport
.execute('eth_getFilterChangesEx', inNumber16(filterId));
return this._provider
.send('eth_getFilterChangesEx', inNumber16(filterId));
}
getFilterLogs (filterId) {
return this._transport
.execute('eth_getFilterLogs', inNumber16(filterId))
return this._provider
.send('eth_getFilterLogs', inNumber16(filterId))
.then((logs) => logs.map(outLog));
}
getFilterLogsEx (filterId) {
return this._transport
.execute('eth_getFilterLogsEx', inNumber16(filterId));
return this._provider
.send('eth_getFilterLogsEx', inNumber16(filterId));
}
getLogs (options) {
return this._transport
.execute('eth_getLogs', inFilter(options))
return this._provider
.send('eth_getLogs', inFilter(options))
.then((logs) => logs.map(outLog));
}
getLogsEx (options) {
return this._transport
.execute('eth_getLogsEx', inFilter(options));
return this._provider
.send('eth_getLogsEx', inFilter(options));
}
getStorageAt (address, index = 0, blockNumber = 'latest') {
return this._transport
.execute('eth_getStorageAt', inAddress(address), inNumber16(index), inBlockNumber(blockNumber));
return this._provider
.send('eth_getStorageAt', inAddress(address), inNumber16(index), inBlockNumber(blockNumber));
}
getTransactionByBlockHashAndIndex (hash, index = 0) {
return this._transport
.execute('eth_getTransactionByBlockHashAndIndex', inHex(hash), inNumber16(index))
return this._provider
.send('eth_getTransactionByBlockHashAndIndex', inHex(hash), inNumber16(index))
.then(outTransaction);
}
getTransactionByBlockNumberAndIndex (blockNumber = 'latest', index = 0) {
return this._transport
.execute('eth_getTransactionByBlockNumberAndIndex', inBlockNumber(blockNumber), inNumber16(index))
return this._provider
.send('eth_getTransactionByBlockNumberAndIndex', inBlockNumber(blockNumber), inNumber16(index))
.then(outTransaction);
}
getTransactionByHash (hash) {
return this._transport
.execute('eth_getTransactionByHash', inHex(hash))
return this._provider
.send('eth_getTransactionByHash', inHex(hash))
.then(outTransaction);
}
getTransactionCount (address, blockNumber = 'latest') {
return this._transport
.execute('eth_getTransactionCount', inAddress(address), inBlockNumber(blockNumber))
return this._provider
.send('eth_getTransactionCount', inAddress(address), inBlockNumber(blockNumber))
.then(outNumber);
}
getTransactionReceipt (txhash) {
return this._transport
.execute('eth_getTransactionReceipt', inHex(txhash))
return this._provider
.send('eth_getTransactionReceipt', inHex(txhash))
.then(outReceipt);
}
getUncleByBlockHashAndIndex (hash, index = 0) {
return this._transport
.execute('eth_getUncleByBlockHashAndIndex', inHex(hash), inNumber16(index));
return this._provider
.send('eth_getUncleByBlockHashAndIndex', inHex(hash), inNumber16(index));
}
getUncleByBlockNumberAndIndex (blockNumber = 'latest', index = 0) {
return this._transport
.execute('eth_getUncleByBlockNumberAndIndex', inBlockNumber(blockNumber), inNumber16(index));
return this._provider
.send('eth_getUncleByBlockNumberAndIndex', inBlockNumber(blockNumber), inNumber16(index));
}
getUncleCountByBlockHash (hash) {
return this._transport
.execute('eth_getUncleCountByBlockHash', inHex(hash))
return this._provider
.send('eth_getUncleCountByBlockHash', inHex(hash))
.then(outNumber);
}
getUncleCountByBlockNumber (blockNumber = 'latest') {
return this._transport
.execute('eth_getUncleCountByBlockNumber', inBlockNumber(blockNumber))
return this._provider
.send('eth_getUncleCountByBlockNumber', inBlockNumber(blockNumber))
.then(outNumber);
}
getWork () {
return this._transport
.execute('eth_getWork');
return this._provider
.send('eth_getWork');
}
hashrate () {
return this._transport
.execute('eth_hashrate')
return this._provider
.send('eth_hashrate')
.then(outNumber);
}
inspectTransaction () {
return this._transport
.execute('eth_inspectTransaction');
return this._provider
.send('eth_inspectTransaction');
}
mining () {
return this._transport
.execute('eth_mining');
return this._provider
.send('eth_mining');
}
newBlockFilter () {
return this._transport
.execute('eth_newBlockFilter');
return this._provider
.send('eth_newBlockFilter');
}
newFilter (options) {
return this._transport
.execute('eth_newFilter', inFilter(options));
return this._provider
.send('eth_newFilter', inFilter(options));
}
newFilterEx (options) {
return this._transport
.execute('eth_newFilterEx', inFilter(options));
return this._provider
.send('eth_newFilterEx', inFilter(options));
}
newPendingTransactionFilter () {
return this._transport
.execute('eth_newPendingTransactionFilter');
return this._provider
.send('eth_newPendingTransactionFilter');
}
notePassword () {
return this._transport
.execute('eth_notePassword');
return this._provider
.send('eth_notePassword');
}
pendingTransactions () {
return this._transport
.execute('eth_pendingTransactions');
return this._provider
.send('eth_pendingTransactions');
}
protocolVersion () {
return this._transport
.execute('eth_protocolVersion');
return this._provider
.send('eth_protocolVersion');
}
register () {
return this._transport
.execute('eth_register');
return this._provider
.send('eth_register');
}
sendRawTransaction (data) {
return this._transport
.execute('eth_sendRawTransaction', inData(data));
return this._provider
.send('eth_sendRawTransaction', inData(data));
}
sendTransaction (options) {
return this._transport
.execute('eth_sendTransaction', inOptions(options));
return this._provider
.send('eth_sendTransaction', inOptions(options));
}
sign (address, hash) {
return this._transport
.execute('eth_sign', inAddress(address), inHash(hash));
return this._provider
.send('eth_sign', inAddress(address), inHash(hash));
}
signTransaction (options) {
return this._transport
.execute('eth_signTransaction', inOptions(options));
return this._provider
.send('eth_signTransaction', inOptions(options));
}
submitHashrate (hashrate, clientId) {
return this._transport
.execute('eth_submitHashrate', inNumber16(hashrate), clientId);
return this._provider
.send('eth_submitHashrate', inNumber16(hashrate), clientId);
}
submitWork (nonce, powHash, mixDigest) {
return this._transport
.execute('eth_submitWork', inNumber16(nonce), powHash, mixDigest);
return this._provider
.send('eth_submitWork', inNumber16(nonce), powHash, mixDigest);
}
syncing () {
return this._transport
.execute('eth_syncing')
return this._provider
.send('eth_syncing')
.then(outSyncing);
}
uninstallFilter (filterId) {
return this._transport
.execute('eth_uninstallFilter', inHex(filterId));
return this._provider
.send('eth_uninstallFilter', inHex(filterId));
}
unregister () {
return this._transport
.execute('eth_unregister');
return this._provider
.send('eth_unregister');
}
}

View File

@ -17,10 +17,10 @@
import { TEST_HTTP_URL, mockHttp } from '../../../../test/mockRpc';
import { isBigNumber } from '../../../../test/types';
import Http from '../../transport/http';
import { Http, PromiseWrapper } from '../../provider';
import Eth from './eth';
const instance = new Eth(new Http(TEST_HTTP_URL, -1));
const instance = new Eth(new PromiseWrapper(new Http(TEST_HTTP_URL, -1)));
describe('rpc/Eth', () => {
const address = '0x63Cf90D3f0410092FC0fca41846f596223979195';

View File

@ -17,23 +17,23 @@
import { outNumber } from '../../format/output';
export default class Net {
constructor (transport) {
this._transport = transport;
constructor (provider) {
this._provider = provider;
}
listening () {
return this._transport
.execute('net_listening');
return this._provider
.send('net_listening');
}
peerCount () {
return this._transport
.execute('net_peerCount')
return this._provider
.send('net_peerCount')
.then(outNumber);
}
version () {
return this._transport
.execute('net_version');
return this._provider
.send('net_version');
}
}

View File

@ -17,10 +17,10 @@
import { TEST_HTTP_URL, mockHttp } from '../../../../test/mockRpc';
import { isBigNumber } from '../../../../test/types';
import Http from '../../transport/http';
import { Http, PromiseWrapper } from '../../provider';
import Net from './net';
const instance = new Net(new Http(TEST_HTTP_URL, -1));
const instance = new Net(new PromiseWrapper(new Http(TEST_HTTP_URL, -1)));
describe('api/rpc/Net', () => {
describe('peerCount', () => {

View File

@ -18,283 +18,283 @@ import { inAddress, inAddresses, inBlockNumber, inData, inDeriveHash, inDeriveIn
import { outAccountInfo, outAddress, outAddresses, outBlock, outChainStatus, outHistogram, outHwAccountInfo, outNodeKind, outNumber, outPeers, outRecentDapps, outTransaction, outVaultMeta } from '../../format/output';
export default class Parity {
constructor (transport) {
this._transport = transport;
constructor (provider) {
this._provider = provider;
}
acceptNonReservedPeers () {
return this._transport
.execute('parity_acceptNonReservedPeers');
return this._provider
.send('parity_acceptNonReservedPeers');
}
accountsInfo () {
return this._transport
.execute('parity_accountsInfo')
return this._provider
.send('parity_accountsInfo')
.then(outAccountInfo);
}
allAccountsInfo () {
return this._transport
.execute('parity_allAccountsInfo')
return this._provider
.send('parity_allAccountsInfo')
.then(outAccountInfo);
}
addReservedPeer (enode) {
return this._transport
.execute('parity_addReservedPeer', enode);
return this._provider
.send('parity_addReservedPeer', enode);
}
chainStatus () {
return this._transport
.execute('parity_chainStatus')
return this._provider
.send('parity_chainStatus')
.then(outChainStatus);
}
changePassword (account, password, newPassword) {
return this._transport
.execute('parity_changePassword', inAddress(account), password, newPassword);
return this._provider
.send('parity_changePassword', inAddress(account), password, newPassword);
}
changeVault (account, vaultName) {
return this._transport
.execute('parity_changeVault', inAddress(account), vaultName);
return this._provider
.send('parity_changeVault', inAddress(account), vaultName);
}
changeVaultPassword (vaultName, password) {
return this._transport
.execute('parity_changeVaultPassword', vaultName, password);
return this._provider
.send('parity_changeVaultPassword', vaultName, password);
}
checkRequest (requestId) {
return this._transport
.execute('parity_checkRequest', inNumber16(requestId));
return this._provider
.send('parity_checkRequest', inNumber16(requestId));
}
cidV0 (data) {
return this._transport
.execute('parity_cidV0', inData(data));
return this._provider
.send('parity_cidV0', inData(data));
}
closeVault (vaultName) {
return this._transport
.execute('parity_closeVault', vaultName);
return this._provider
.send('parity_closeVault', vaultName);
}
composeTransaction (options) {
return this._transport
.execute('parity_composeTransaction', inOptions(options));
return this._provider
.send('parity_composeTransaction', inOptions(options));
}
consensusCapability () {
return this._transport
.execute('parity_consensusCapability');
return this._provider
.send('parity_consensusCapability');
}
dappsList () {
return this._transport
.execute('parity_dappsList');
return this._provider
.send('parity_dappsList');
}
dappsUrl () {
return this._transport
.execute('parity_dappsUrl');
return this._provider
.send('parity_dappsUrl');
}
decryptMessage (address, data) {
return this._transport
.execute('parity_decryptMessage', inAddress(address), inHex(data));
return this._provider
.send('parity_decryptMessage', inAddress(address), inHex(data));
}
defaultAccount () {
return this._transport
.execute('parity_defaultAccount')
return this._provider
.send('parity_defaultAccount')
.then(outAddress);
}
defaultExtraData () {
return this._transport
.execute('parity_defaultExtraData');
return this._provider
.send('parity_defaultExtraData');
}
devLogs () {
return this._transport
.execute('parity_devLogs');
return this._provider
.send('parity_devLogs');
}
devLogsLevels () {
return this._transport
.execute('parity_devLogsLevels');
return this._provider
.send('parity_devLogsLevels');
}
deriveAddressHash (address, password, hash, shouldSave) {
return this._transport
.execute('parity_deriveAddressHash', inAddress(address), password, inDeriveHash(hash), !!shouldSave)
return this._provider
.send('parity_deriveAddressHash', inAddress(address), password, inDeriveHash(hash), !!shouldSave)
.then(outAddress);
}
deriveAddressIndex (address, password, index, shouldSave) {
return this._transport
.execute('parity_deriveAddressIndex', inAddress(address), password, inDeriveIndex(index), !!shouldSave)
return this._provider
.send('parity_deriveAddressIndex', inAddress(address), password, inDeriveIndex(index), !!shouldSave)
.then(outAddress);
}
dropNonReservedPeers () {
return this._transport
.execute('parity_dropNonReservedPeers');
return this._provider
.send('parity_dropNonReservedPeers');
}
enode () {
return this._transport
.execute('parity_enode');
return this._provider
.send('parity_enode');
}
encryptMessage (pubkey, data) {
return this._transport
.execute('parity_encryptMessage', inHex(pubkey), inHex(data));
return this._provider
.send('parity_encryptMessage', inHex(pubkey), inHex(data));
}
executeUpgrade () {
return this._transport
.execute('parity_executeUpgrade');
return this._provider
.send('parity_executeUpgrade');
}
exportAccount (address, password) {
return this._transport
.execute('parity_exportAccount', inAddress(address), password);
return this._provider
.send('parity_exportAccount', inAddress(address), password);
}
extraData () {
return this._transport
.execute('parity_extraData');
return this._provider
.send('parity_extraData');
}
futureTransactions () {
return this._transport
.execute('parity_futureTransactions');
return this._provider
.send('parity_futureTransactions');
}
gasCeilTarget () {
return this._transport
.execute('parity_gasCeilTarget')
return this._provider
.send('parity_gasCeilTarget')
.then(outNumber);
}
gasFloorTarget () {
return this._transport
.execute('parity_gasFloorTarget')
return this._provider
.send('parity_gasFloorTarget')
.then(outNumber);
}
gasPriceHistogram () {
return this._transport
.execute('parity_gasPriceHistogram')
return this._provider
.send('parity_gasPriceHistogram')
.then(outHistogram);
}
generateSecretPhrase () {
return this._transport
.execute('parity_generateSecretPhrase');
return this._provider
.send('parity_generateSecretPhrase');
}
getBlockHeaderByNumber (blockNumber = 'latest') {
return this._transport
.execute('parity_getBlockHeaderByNumber', inBlockNumber(blockNumber))
return this._provider
.send('parity_getBlockHeaderByNumber', inBlockNumber(blockNumber))
.then(outBlock);
}
getDappAddresses (dappId) {
return this._transport
.execute('parity_getDappAddresses', dappId)
return this._provider
.send('parity_getDappAddresses', dappId)
.then(outAddresses);
}
getDappDefaultAddress (dappId) {
return this._transport
.execute('parity_getDappDefaultAddress', dappId)
return this._provider
.send('parity_getDappDefaultAddress', dappId)
.then(outAddress);
}
getNewDappsAddresses () {
return this._transport
.execute('parity_getNewDappsAddresses')
return this._provider
.send('parity_getNewDappsAddresses')
.then((addresses) => addresses ? addresses.map(outAddress) : null);
}
getNewDappsDefaultAddress () {
return this._transport
.execute('parity_getNewDappsDefaultAddress')
return this._provider
.send('parity_getNewDappsDefaultAddress')
.then(outAddress);
}
getVaultMeta (vaultName) {
return this._transport
.execute('parity_getVaultMeta', vaultName)
return this._provider
.send('parity_getVaultMeta', vaultName)
.then(outVaultMeta);
}
hardwareAccountsInfo () {
return this._transport
.execute('parity_hardwareAccountsInfo')
return this._provider
.send('parity_hardwareAccountsInfo')
.then(outHwAccountInfo);
}
hashContent (url) {
return this._transport
.execute('parity_hashContent', url);
return this._provider
.send('parity_hashContent', url);
}
importGethAccounts (accounts) {
return this._transport
.execute('parity_importGethAccounts', inAddresses(accounts))
return this._provider
.send('parity_importGethAccounts', inAddresses(accounts))
.then(outAddresses);
}
killAccount (account, password) {
return this._transport
.execute('parity_killAccount', inAddress(account), password);
return this._provider
.send('parity_killAccount', inAddress(account), password);
}
listAccounts (count, offset = null, blockNumber = 'latest') {
return this._transport
.execute('parity_listAccounts', count, inAddress(offset), inBlockNumber(blockNumber))
return this._provider
.send('parity_listAccounts', count, inAddress(offset), inBlockNumber(blockNumber))
.then((accounts) => (accounts || []).map(outAddress));
}
listOpenedVaults () {
return this._transport
.execute('parity_listOpenedVaults');
return this._provider
.send('parity_listOpenedVaults');
}
listVaults () {
return this._transport
.execute('parity_listVaults');
return this._provider
.send('parity_listVaults');
}
listRecentDapps () {
return this._transport
.execute('parity_listRecentDapps')
return this._provider
.send('parity_listRecentDapps')
.then(outRecentDapps);
}
listStorageKeys (address, count, hash = null, blockNumber = 'latest') {
return this._transport
.execute('parity_listStorageKeys', inAddress(address), count, inHex(hash), inBlockNumber(blockNumber));
return this._provider
.send('parity_listStorageKeys', inAddress(address), count, inHex(hash), inBlockNumber(blockNumber));
}
removeAddress (address) {
return this._transport
.execute('parity_removeAddress', inAddress(address));
return this._provider
.send('parity_removeAddress', inAddress(address));
}
listGethAccounts () {
return this._transport
.execute('parity_listGethAccounts')
return this._provider
.send('parity_listGethAccounts')
.then(outAddresses);
}
localTransactions () {
return this._transport
.execute('parity_localTransactions')
return this._provider
.send('parity_localTransactions')
.then(transactions => {
Object.values(transactions)
.filter(tx => tx.transaction)
@ -306,263 +306,263 @@ export default class Parity {
}
minGasPrice () {
return this._transport
.execute('parity_minGasPrice')
return this._provider
.send('parity_minGasPrice')
.then(outNumber);
}
mode () {
return this._transport
.execute('parity_mode');
return this._provider
.send('parity_mode');
}
// DEPRECATED - use chain instead.
netChain () {
return this._transport
.execute('parity_chain');
return this._provider
.send('parity_chain');
}
nodeKind () {
return this._transport
.execute('parity_nodeKind')
return this._provider
.send('parity_nodeKind')
.then(outNodeKind);
}
chain () {
return this._transport
.execute('parity_chain');
return this._provider
.send('parity_chain');
}
netPeers () {
return this._transport
.execute('parity_netPeers')
return this._provider
.send('parity_netPeers')
.then(outPeers);
}
netMaxPeers () {
return this._transport
.execute('parity_netMaxPeers')
return this._provider
.send('parity_netMaxPeers')
.then(outNumber);
}
netPort () {
return this._transport
.execute('parity_netPort')
return this._provider
.send('parity_netPort')
.then(outNumber);
}
newAccountFromPhrase (phrase, password) {
return this._transport
.execute('parity_newAccountFromPhrase', phrase, password)
return this._provider
.send('parity_newAccountFromPhrase', phrase, password)
.then(outAddress);
}
newAccountFromSecret (secret, password) {
return this._transport
.execute('parity_newAccountFromSecret', inHex(secret), password)
return this._provider
.send('parity_newAccountFromSecret', inHex(secret), password)
.then(outAddress);
}
newAccountFromWallet (json, password) {
return this._transport
.execute('parity_newAccountFromWallet', json, password)
return this._provider
.send('parity_newAccountFromWallet', json, password)
.then(outAddress);
}
newVault (vaultName, password) {
return this._transport
.execute('parity_newVault', vaultName, password);
return this._provider
.send('parity_newVault', vaultName, password);
}
nextNonce (account) {
return this._transport
.execute('parity_nextNonce', inAddress(account))
return this._provider
.send('parity_nextNonce', inAddress(account))
.then(outNumber);
}
nodeName () {
return this._transport
.execute('parity_nodeName');
return this._provider
.send('parity_nodeName');
}
openVault (vaultName, password) {
return this._transport
.execute('parity_openVault', vaultName, password);
return this._provider
.send('parity_openVault', vaultName, password);
}
pendingTransactions () {
return this._transport
.execute('parity_pendingTransactions')
return this._provider
.send('parity_pendingTransactions')
.then(data => data.map(outTransaction));
}
pendingTransactionsStats () {
return this._transport
.execute('parity_pendingTransactionsStats');
return this._provider
.send('parity_pendingTransactionsStats');
}
phraseToAddress (phrase) {
return this._transport
.execute('parity_phraseToAddress', phrase)
return this._provider
.send('parity_phraseToAddress', phrase)
.then(outAddress);
}
postSign (address, hash) {
return this._transport
.execute('parity_postSign', inAddress(address), inHex(hash));
return this._provider
.send('parity_postSign', inAddress(address), inHex(hash));
}
postTransaction (options = {}) {
return this._transport
.execute('parity_postTransaction', inOptions(options));
return this._provider
.send('parity_postTransaction', inOptions(options));
}
registryAddress () {
return this._transport
.execute('parity_registryAddress')
return this._provider
.send('parity_registryAddress')
.then(outAddress);
}
releasesInfo () {
return this._transport
.execute('parity_releasesInfo');
return this._provider
.send('parity_releasesInfo');
}
removeReservedPeer (enode) {
return this._transport
.execute('parity_removeReservedPeer', enode);
return this._provider
.send('parity_removeReservedPeer', enode);
}
removeTransaction (hash) {
return this._transport
.execute('parity_removeTransaction', inHex(hash))
return this._provider
.send('parity_removeTransaction', inHex(hash))
.then(outTransaction);
}
rpcSettings () {
return this._transport
.execute('parity_rpcSettings');
return this._provider
.send('parity_rpcSettings');
}
setAccountName (address, name) {
return this._transport
.execute('parity_setAccountName', inAddress(address), name);
return this._provider
.send('parity_setAccountName', inAddress(address), name);
}
setAccountMeta (address, meta) {
return this._transport
.execute('parity_setAccountMeta', inAddress(address), JSON.stringify(meta));
return this._provider
.send('parity_setAccountMeta', inAddress(address), JSON.stringify(meta));
}
setAuthor (address) {
return this._transport
.execute('parity_setAuthor', inAddress(address));
return this._provider
.send('parity_setAuthor', inAddress(address));
}
setDappAddresses (dappId, addresses) {
return this._transport
.execute('parity_setDappAddresses', dappId, inAddresses(addresses));
return this._provider
.send('parity_setDappAddresses', dappId, inAddresses(addresses));
}
setDappDefaultAddress (dappId, address) {
return this._transport
.execute('parity_setDappDefaultAddress', dappId, address ? inAddress(address) : null);
return this._provider
.send('parity_setDappDefaultAddress', dappId, address ? inAddress(address) : null);
}
setEngineSigner (address, password) {
return this._transport
.execute('parity_setEngineSigner', inAddress(address), password);
return this._provider
.send('parity_setEngineSigner', inAddress(address), password);
}
setExtraData (data) {
return this._transport
.execute('parity_setExtraData', inData(data));
return this._provider
.send('parity_setExtraData', inData(data));
}
setGasCeilTarget (quantity) {
return this._transport
.execute('parity_setGasCeilTarget', inNumber16(quantity));
return this._provider
.send('parity_setGasCeilTarget', inNumber16(quantity));
}
setGasFloorTarget (quantity) {
return this._transport
.execute('parity_setGasFloorTarget', inNumber16(quantity));
return this._provider
.send('parity_setGasFloorTarget', inNumber16(quantity));
}
setMaxTransactionGas (quantity) {
return this._transport
.execute('parity_setMaxTransactionGas', inNumber16(quantity));
return this._provider
.send('parity_setMaxTransactionGas', inNumber16(quantity));
}
setMinGasPrice (quantity) {
return this._transport
.execute('parity_setMinGasPrice', inNumber16(quantity));
return this._provider
.send('parity_setMinGasPrice', inNumber16(quantity));
}
setMode (mode) {
return this._transport
.execute('parity_setMode', mode);
return this._provider
.send('parity_setMode', mode);
}
setChain (specName) {
return this._transport
.execute('parity_setChain', specName);
return this._provider
.send('parity_setChain', specName);
}
setNewDappsAddresses (addresses) {
return this._transport
.execute('parity_setNewDappsAddresses', addresses ? inAddresses(addresses) : null);
return this._provider
.send('parity_setNewDappsAddresses', addresses ? inAddresses(addresses) : null);
}
setNewDappsDefaultAddress (address) {
return this._transport
.execute('parity_setNewDappsDefaultAddress', inAddress(address));
return this._provider
.send('parity_setNewDappsDefaultAddress', inAddress(address));
}
setTransactionsLimit (quantity) {
return this._transport
.execute('parity_setTransactionsLimit', inNumber16(quantity));
return this._provider
.send('parity_setTransactionsLimit', inNumber16(quantity));
}
setVaultMeta (vaultName, meta) {
return this._transport
.execute('parity_setVaultMeta', vaultName, JSON.stringify(meta));
return this._provider
.send('parity_setVaultMeta', vaultName, JSON.stringify(meta));
}
signMessage (address, password, messageHash) {
return this._transport
.execute('parity_signMessage', inAddress(address), password, inHex(messageHash));
return this._provider
.send('parity_signMessage', inAddress(address), password, inHex(messageHash));
}
testPassword (account, password) {
return this._transport
.execute('parity_testPassword', inAddress(account), password);
return this._provider
.send('parity_testPassword', inAddress(account), password);
}
transactionsLimit () {
return this._transport
.execute('parity_transactionsLimit')
return this._provider
.send('parity_transactionsLimit')
.then(outNumber);
}
unsignedTransactionsCount () {
return this._transport
.execute('parity_unsignedTransactionsCount')
return this._provider
.send('parity_unsignedTransactionsCount')
.then(outNumber);
}
upgradeReady () {
return this._transport
.execute('parity_upgradeReady');
return this._provider
.send('parity_upgradeReady');
}
versionInfo () {
return this._transport
.execute('parity_versionInfo');
return this._provider
.send('parity_versionInfo');
}
wsUrl () {
return this._transport
.execute('parity_wsUrl');
return this._provider
.send('parity_wsUrl');
}
}

View File

@ -18,10 +18,10 @@ import BigNumber from 'bignumber.js';
import { TEST_HTTP_URL, mockHttp } from '../../../../test/mockRpc';
import { isBigNumber } from '../../../../test/types';
import Http from '../../transport/http';
import { Http, PromiseWrapper } from '../../provider';
import Parity from './parity';
const instance = new Parity(new Http(TEST_HTTP_URL, -1));
const instance = new Parity(new PromiseWrapper(new Http(TEST_HTTP_URL, -1)));
describe('api/rpc/parity', () => {
describe('accountsInfo', () => {

View File

@ -18,29 +18,29 @@ import { inAddress, inNumber10, inOptions } from '../../format/input';
import { outAddress } from '../../format/output';
export default class Personal {
constructor (transport) {
this._transport = transport;
constructor (provider) {
this._provider = provider;
}
listAccounts () {
return this._transport
.execute('personal_listAccounts')
return this._provider
.send('personal_listAccounts')
.then((accounts) => (accounts || []).map(outAddress));
}
newAccount (password) {
return this._transport
.execute('personal_newAccount', password)
return this._provider
.send('personal_newAccount', password)
.then(outAddress);
}
sendTransaction (options, password) {
return this._transport
.execute('personal_sendTransaction', inOptions(options), password);
return this._provider
.send('personal_sendTransaction', inOptions(options), password);
}
unlockAccount (account, password, duration = 1) {
return this._transport
.execute('personal_unlockAccount', inAddress(account), password, inNumber10(duration));
return this._provider
.send('personal_unlockAccount', inAddress(account), password, inNumber10(duration));
}
}

View File

@ -16,10 +16,10 @@
import { TEST_HTTP_URL, mockHttp } from '../../../../test/mockRpc';
import Http from '../../transport/http';
import { Http, PromiseWrapper } from '../../provider';
import Personal from './personal';
const instance = new Personal(new Http(TEST_HTTP_URL, -1));
const instance = new Personal(new PromiseWrapper(new Http(TEST_HTTP_URL, -1)));
describe('rpc/Personal', () => {
const account = '0x63cf90d3f0410092fc0fca41846f596223979195';

View File

@ -15,57 +15,57 @@
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
export default class Personal {
constructor (transport) {
this._transport = transport;
constructor (provider) {
this._provider = provider;
}
addToGroup (identity) {
return this._transport
.execute('shh_addToGroup', identity);
return this._provider
.send('shh_addToGroup', identity);
}
getFilterChanges (filterId) {
return this._transport
.execute('shh_getFilterChanges', filterId);
return this._provider
.send('shh_getFilterChanges', filterId);
}
getMessages (filterId) {
return this._transport
.execute('shh_getMessages', filterId);
return this._provider
.send('shh_getMessages', filterId);
}
hasIdentity (identity) {
return this._transport
.execute('shh_hasIdentity', identity);
return this._provider
.send('shh_hasIdentity', identity);
}
newFilter (options) {
return this._transport
.execute('shh_newFilter', options);
return this._provider
.send('shh_newFilter', options);
}
newGroup () {
return this._transport
.execute('shh_newGroup');
return this._provider
.send('shh_newGroup');
}
newIdentity () {
return this._transport
.execute('shh_newIdentity');
return this._provider
.send('shh_newIdentity');
}
post (options) {
return this._transport
.execute('shh_post', options);
return this._provider
.send('shh_post', options);
}
uninstallFilter (filterId) {
return this._transport
.execute('shh_uninstallFilter', filterId);
return this._provider
.send('shh_uninstallFilter', filterId);
}
version () {
return this._transport
.execute('shh_version');
return this._provider
.send('shh_version');
}
}

View File

@ -18,48 +18,48 @@ import { inData, inNumber16, inOptions } from '../../format/input';
import { outSignerRequest } from '../../format/output';
export default class Signer {
constructor (transport) {
this._transport = transport;
constructor (provider) {
this._provider = provider;
}
confirmRequest (requestId, options, password) {
return this._transport
.execute('signer_confirmRequest', inNumber16(requestId), inOptions(options), password);
return this._provider
.send('signer_confirmRequest', inNumber16(requestId), inOptions(options), password);
}
confirmRequestRaw (requestId, data) {
return this._transport
.execute('signer_confirmRequestRaw', inNumber16(requestId), inData(data));
return this._provider
.send('signer_confirmRequestRaw', inNumber16(requestId), inData(data));
}
confirmRequestWithToken (requestId, options, password) {
return this._transport
.execute('signer_confirmRequestWithToken', inNumber16(requestId), inOptions(options), password);
return this._provider
.send('signer_confirmRequestWithToken', inNumber16(requestId), inOptions(options), password);
}
generateAuthorizationToken () {
return this._transport
.execute('signer_generateAuthorizationToken');
return this._provider
.send('signer_generateAuthorizationToken');
}
generateWebProxyAccessToken () {
return this._transport
.execute('signer_generateWebProxyAccessToken');
return this._provider
.send('signer_generateWebProxyAccessToken');
}
rejectRequest (requestId) {
return this._transport
.execute('signer_rejectRequest', inNumber16(requestId));
return this._provider
.send('signer_rejectRequest', inNumber16(requestId));
}
requestsToConfirm () {
return this._transport
.execute('signer_requestsToConfirm')
return this._provider
.send('signer_requestsToConfirm')
.then((requests) => (requests || []).map(outSignerRequest));
}
signerEnabled () {
return this._transport
.execute('signer_signerEnabled');
return this._provider
.send('signer_signerEnabled');
}
}

View File

@ -18,49 +18,49 @@ import { inBlockNumber, inData, inHex, inNumber16, inOptions, inTraceFilter, inT
import { outTraces, outTraceReplay } from '../../format/output';
export default class Trace {
constructor (transport) {
this._transport = transport;
constructor (provider) {
this._provider = provider;
}
block (blockNumber = 'latest') {
return this._transport
.execute('trace_block', inBlockNumber(blockNumber))
return this._provider
.send('trace_block', inBlockNumber(blockNumber))
.then(outTraces);
}
call (options, blockNumber = 'latest', whatTrace = ['trace']) {
return this._transport
.execute('trace_call', inOptions(options), inBlockNumber(blockNumber), inTraceType(whatTrace))
return this._provider
.send('trace_call', inOptions(options), inBlockNumber(blockNumber), inTraceType(whatTrace))
.then(outTraceReplay);
}
filter (filterObj) {
return this._transport
.execute('trace_filter', inTraceFilter(filterObj))
return this._provider
.send('trace_filter', inTraceFilter(filterObj))
.then(outTraces);
}
get (txHash, position) {
return this._transport
.execute('trace_get', inHex(txHash), inNumber16(position))
return this._provider
.send('trace_get', inHex(txHash), inNumber16(position))
.then(outTraces);
}
rawTransaction (data, whatTrace = ['trace']) {
return this._transport
.execute('trace_rawTransaction', inData(data), inTraceType(whatTrace))
return this._provider
.send('trace_rawTransaction', inData(data), inTraceType(whatTrace))
.then(outTraceReplay);
}
replayTransaction (txHash, whatTrace = ['trace']) {
return this._transport
.execute('trace_replayTransaction', txHash, inTraceType(whatTrace))
return this._provider
.send('trace_replayTransaction', txHash, inTraceType(whatTrace))
.then(outTraceReplay);
}
transaction (txHash) {
return this._transport
.execute('trace_transaction', inHex(txHash))
return this._provider
.send('trace_transaction', inHex(txHash))
.then(outTraces);
}
}

View File

@ -16,10 +16,10 @@
import { TEST_HTTP_URL, mockHttp } from '../../../../test/mockRpc';
import Http from '../../transport/http';
import { Http, PromiseWrapper } from '../../provider';
import Trace from './trace';
const instance = new Trace(new Http(TEST_HTTP_URL, -1));
const instance = new Trace(new PromiseWrapper(new Http(TEST_HTTP_URL, -1)));
describe('api/rpc/Trace', () => {
let scope;

View File

@ -17,17 +17,17 @@
import { inHex } from '../../format/input';
export default class Web3 {
constructor (transport) {
this._transport = transport;
constructor (provider) {
this._provider = provider;
}
clientVersion () {
return this._transport
.execute('web3_clientVersion');
return this._provider
.send('web3_clientVersion');
}
sha3 (hexStr) {
return this._transport
.execute('web3_sha3', inHex(hexStr));
return this._provider
.send('web3_sha3', inHex(hexStr));
}
}

View File

@ -16,10 +16,10 @@
import { TEST_HTTP_URL, mockHttp } from '../../../../test/mockRpc';
import Http from '../../transport/http';
import { Http, PromiseWrapper } from '../../provider';
import Web3 from './web3';
const instance = new Web3(new Http(TEST_HTTP_URL, -1));
const instance = new Web3(new PromiseWrapper(new Http(TEST_HTTP_URL, -1)));
describe('api/rpc/Web3', () => {
let scope;

View File

@ -67,7 +67,7 @@ describe('api/transport/Http', () => {
scope = mockHttp([{ method: 'eth_call', reply: { result: RESULT } }]);
return transport
.execute('eth_call', 1, 2, 3, 'test')
.execute('eth_call', [1, 2, 3, 'test'])
.then((_result) => {
result = _result;
});

View File

@ -74,7 +74,7 @@ export default class JsonRpcBase extends EventEmitter {
};
}
execute (method, ...params) {
execute (method, params) {
return this._middlewareList.then((middlewareList) => {
for (const middleware of middlewareList) {
const res = middleware.handle(method, params);

View File

@ -43,19 +43,19 @@ describe('api/transport/Middleware', () => {
});
it('Routes requests to middleware', () => {
return transport.execute('mock_rpc', 100).then((num) => {
return transport.execute('mock_rpc', [100]).then((num) => {
expect(num).to.be.equal(100);
});
});
it('Passes non-mocked requests through', () => {
return transport.execute('not_moced', 200).then((result) => {
return transport.execute('not_moced', [200]).then((result) => {
expect(result).to.be.equal(MOCKED);
});
});
it('Passes mocked requests through, if middleware returns null', () => {
return transport.execute('mock_null', 300).then((result) => {
return transport.execute('mock_null', [300]).then((result) => {
expect(result).to.be.equal(MOCKED);
});
});

View File

@ -60,7 +60,7 @@ describe('api/transport/Ws', () => {
transport = new Ws(TEST_WS_URL);
return transport
.execute('test_anyCall', 1, 2, 3)
.execute('test_anyCall', [1, 2, 3])
.then((_result) => {
result = _result;
});

View File

@ -23,7 +23,7 @@ import Api from './api';
import './dev.parity.html';
const api = new Api(new Api.Transport.Http('/rpc/'));
const api = new Api(new Api.Provider.Http('/rpc/'));
window.parity = {
Api,

View File

@ -30,10 +30,10 @@ export default class SecureApi extends Api {
_dappsUrl = null;
_wsUrl = null;
static getTransport (url, sysuiToken, protocol) {
static getProvider (url, sysuiToken, protocol) {
const proto = protocol() === 'https:' ? 'wss:' : 'ws:';
return new Api.Transport.Ws(`${proto}//${url}`, sysuiToken, false);
return new Api.Provider.Ws(`${proto}//${url}`, sysuiToken, false);
}
// Returns a protocol with `:` at the end.
@ -41,11 +41,11 @@ export default class SecureApi extends Api {
return window.location.protocol;
}
constructor (url, nextToken, getTransport = SecureApi.getTransport, protocol = SecureApi.protocol) {
constructor (url, nextToken, getProvider = SecureApi.getProvider, protocol = SecureApi.protocol) {
const sysuiToken = store.get('sysuiToken');
const transport = getTransport(url, sysuiToken, protocol);
const provider = getProvider(url, sysuiToken, protocol);
super(transport);
super(provider);
this._wsUrl = url;
this.protocol = protocol;
@ -55,7 +55,8 @@ export default class SecureApi extends Api {
.map((token) => ({ value: token, tried: false }));
// When the transport is closed, try to reconnect
transport.on('close', this.connect, this);
console.log('this.provider', this.provider);
this.provider.on('close', this.connect, this);
this.connect();
}
@ -105,7 +106,7 @@ export default class SecureApi extends Api {
}
get isConnected () {
return this._transport.isConnected;
return this.provider.isConnected;
}
get needsToken () {
@ -113,7 +114,7 @@ export default class SecureApi extends Api {
}
get secureToken () {
return this._transport.token;
return this.provider.token;
}
/**
@ -260,10 +261,10 @@ export default class SecureApi extends Api {
const token = this._sanitiseToken(_token);
// Update the token in the transport layer
this.transport.updateToken(token, false);
this.provider.updateToken(token, false);
log.debug('connecting with token', token);
const connectPromise = this.transport.connect()
const connectPromise = this.provider.connect()
.then(() => {
log.debug('connected with', token);

View File

@ -23,7 +23,7 @@ import Api from '@parity/api';
import TxRow from './txRow';
const api = new Api({ execute: sinon.stub() });
const api = new Api({ send: sinon.stub() });
const STORE = {
dispatch: sinon.stub(),

View File

@ -22,7 +22,7 @@ import Api from '@parity/api';
import TxList from './txList';
const api = new Api({ execute: sinon.stub() });
const api = new Api({ send: sinon.stub() });
const STORE = {
dispatch: sinon.stub(),

View File

@ -25,9 +25,9 @@ function createApi (transport) {
}
export function createHttpApi () {
return createApi(new Api.Transport.Http('http://localhost:8545'));
return createApi(new Api.Provider.Http('http://localhost:8545'));
}
export function createWsApi () {
return createApi(new Api.Transport.Ws('ws://localhost:8546'));
return createApi(new Api.Provider.Ws('ws://localhost:8546'));
}

View File

@ -26,7 +26,7 @@ try {
throw new Error('No Abi');
}
var transport = new Api.Transport.Http('http://localhost:8545');
var transport = new Api.Provider.Http('http://localhost:8545');
var api = new Api(transport);
api.eth