From 04fb2afba1151d0be32b1262a8ed03d2e1a05eba Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Wed, 1 Feb 2017 14:52:15 +0100 Subject: [PATCH] Add parity_defaultAccount RPC (with subscription) (#4383) * Add parity_defaultAccount RPC (with subscription) * Add jsonrpc interface --- js/src/api/rpc/parity/parity.js | 11 +++++----- js/src/api/subscriptions/manager.js | 1 + js/src/api/subscriptions/personal.js | 14 +++++++++++++ js/src/api/subscriptions/personal.spec.js | 25 +++++++++++++++++------ js/src/jsonrpc/interfaces/parity.js | 11 ++++++++++ 5 files changed, 51 insertions(+), 11 deletions(-) diff --git a/js/src/api/rpc/parity/parity.js b/js/src/api/rpc/parity/parity.js index 0a47eb7ea..160e7513a 100644 --- a/js/src/api/rpc/parity/parity.js +++ b/js/src/api/rpc/parity/parity.js @@ -81,6 +81,12 @@ export default class Parity { .execute('parity_decryptMessage', inAddress(address), inHex(data)); } + defaultAccount () { + return this._transport + .execute('parity_defaultAccount') + .then(outAddress); + } + defaultExtraData () { return this._transport .execute('parity_defaultExtraData'); @@ -307,11 +313,6 @@ export default class Parity { .execute('parity_postTransaction', inOptions(options)); } - postSign (from, message) { - return this._transport - .execute('parity_postSign', from, message); - } - registryAddress () { return this._transport .execute('parity_registryAddress') diff --git a/js/src/api/subscriptions/manager.js b/js/src/api/subscriptions/manager.js index 31d853856..3284a82e7 100644 --- a/js/src/api/subscriptions/manager.js +++ b/js/src/api/subscriptions/manager.js @@ -26,6 +26,7 @@ const events = { 'eth_blockNumber': { module: 'eth' }, 'parity_accountsInfo': { module: 'personal' }, 'parity_allAccountsInfo': { module: 'personal' }, + 'parity_defaultAccount': { module: 'personal' }, 'eth_accounts': { module: 'personal' }, 'signer_requestsToConfirm': { module: 'signer' } }; diff --git a/js/src/api/subscriptions/personal.js b/js/src/api/subscriptions/personal.js index b7809b9c9..4f621824b 100644 --- a/js/src/api/subscriptions/personal.js +++ b/js/src/api/subscriptions/personal.js @@ -30,12 +30,21 @@ export default class Personal { this._started = true; return Promise.all([ + this._defaultAccount(), this._listAccounts(), this._accountsInfo(), this._loggingSubscribe() ]); } + _defaultAccount = () => { + return this._api.parity + .defaultAccount() + .then((defaultAccount) => { + this._updateSubscriptions('parity_defaultAccount', null, defaultAccount); + }); + } + _listAccounts = () => { return this._api.eth .accounts() @@ -77,6 +86,11 @@ export default class Personal { case 'parity_setAccountMeta': this._accountsInfo(); return; + + case 'parity_setDappsAddresses': + case 'parity_setNewDappsWhitelist': + this._defaultAccount(); + return; } }); } diff --git a/js/src/api/subscriptions/personal.spec.js b/js/src/api/subscriptions/personal.spec.js index 550b3354c..e4d683766 100644 --- a/js/src/api/subscriptions/personal.spec.js +++ b/js/src/api/subscriptions/personal.spec.js @@ -18,18 +18,20 @@ import sinon from 'sinon'; import Personal from './personal'; +const TEST_DEFAULT = '0xfa64203C044691aA57251aF95f4b48d85eC00Dd5'; const TEST_INFO = { - '0xfa64203C044691aA57251aF95f4b48d85eC00Dd5': { + [TEST_DEFAULT]: { name: 'test' } }; -const TEST_LIST = ['0xfa64203C044691aA57251aF95f4b48d85eC00Dd5']; +const TEST_LIST = [TEST_DEFAULT]; function stubApi (accounts, info) { const _calls = { accountsInfo: [], allAccountsInfo: [], - listAccounts: [] + listAccounts: [], + defaultAccount: [] }; return { @@ -46,6 +48,12 @@ function stubApi (accounts, info) { _calls.allAccountsInfo.push(stub); return stub; + }, + defaultAccount: () => { + const stub = sinon.stub().resolves(Object.keys(info || TEST_INFO)[0])(); + + _calls.defaultAccount.push(stub); + return stub; } }, eth: { @@ -107,9 +115,10 @@ describe('api/subscriptions/personal', () => { }); it('updates subscribers', () => { - expect(cb.firstCall).to.have.been.calledWith('eth_accounts', null, TEST_LIST); - expect(cb.secondCall).to.have.been.calledWith('parity_accountsInfo', null, TEST_INFO); - expect(cb.thirdCall).to.have.been.calledWith('parity_allAccountsInfo', null, TEST_INFO); + expect(cb).to.have.been.calledWith('parity_defaultAccount', null, TEST_DEFAULT); + expect(cb).to.have.been.calledWith('eth_accounts', null, TEST_LIST); + expect(cb).to.have.been.calledWith('parity_accountsInfo', null, TEST_INFO); + expect(cb).to.have.been.calledWith('parity_allAccountsInfo', null, TEST_INFO); }); }); @@ -124,6 +133,10 @@ describe('api/subscriptions/personal', () => { expect(personal.isStarted).to.be.true; }); + it('calls parity_defaultAccount', () => { + expect(api._calls.defaultAccount.length).to.be.ok; + }); + it('calls personal_accountsInfo', () => { expect(api._calls.accountsInfo.length).to.be.ok; }); diff --git a/js/src/jsonrpc/interfaces/parity.js b/js/src/jsonrpc/interfaces/parity.js index 901295af6..ffccf79f1 100644 --- a/js/src/jsonrpc/interfaces/parity.js +++ b/js/src/jsonrpc/interfaces/parity.js @@ -183,6 +183,17 @@ export default { } }, + defaultAccount: { + section: SECTION_ACCOUNTS, + desc: 'Returns the defaultAccount that is to be used with transactions', + params: [], + returns: { + type: Address, + desc: 'The account address', + example: '0x63Cf90D3f0410092FC0fca41846f596223979195' + } + }, + defaultExtraData: { section: SECTION_MINING, desc: 'Returns the default extra data',