JSON-RPC interfaces with documentation (#4276)

* Extended Markdown generator

* Synced and extended all JSON-RPC interfaces

* Fix linter errors

* Format `parity_listAccounts` output in API

* typo
This commit is contained in:
Maciej Hirsz 2017-01-24 22:02:52 +01:00 committed by Gav Wood
parent c460aec646
commit a58fad06a7
9 changed files with 1611 additions and 579 deletions

View File

@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import { inAddress, inAddresses, inData, inHex, inNumber16, inOptions } from '../../format/input'; import { inAddress, inAddresses, inData, inHex, inNumber16, inOptions, inBlockNumber } from '../../format/input';
import { outAccountInfo, outAddress, outAddresses, outChainStatus, outHistogram, outNumber, outPeers, outTransaction } from '../../format/output'; import { outAccountInfo, outAddress, outAddresses, outChainStatus, outHistogram, outNumber, outPeers, outTransaction } from '../../format/output';
export default class Parity { export default class Parity {
@ -101,6 +101,11 @@ export default class Parity {
.execute('parity_enode'); .execute('parity_enode');
} }
encryptMessage (pubkey, data) {
return this._transport
.execute('parity_encryptMessage', inHex(pubkey), inHex(data));
}
executeUpgrade () { executeUpgrade () {
return this._transport return this._transport
.execute('parity_executeUpgrade'); .execute('parity_executeUpgrade');
@ -111,6 +116,17 @@ export default class Parity {
.execute('parity_extraData'); .execute('parity_extraData');
} }
futureTransactions () {
return this._transport
.execute('parity_futureTransactions');
}
gasCeilTarget () {
return this._transport
.execute('parity_gasCeilTarget')
.then(outNumber);
}
gasFloorTarget () { gasFloorTarget () {
return this._transport return this._transport
.execute('parity_gasFloorTarget') .execute('parity_gasFloorTarget')
@ -156,11 +172,22 @@ export default class Parity {
.execute('parity_killAccount', inAddress(account), password); .execute('parity_killAccount', inAddress(account), password);
} }
listAccounts (count, offset = null, blockNumber = 'latest') {
return this._transport
.execute('parity_listAccounts', count, inAddress(offset), inBlockNumber(blockNumber))
.then((accounts) => (accounts || []).map(outAddress));
}
listRecentDapps () { listRecentDapps () {
return this._transport return this._transport
.execute('parity_listRecentDapps'); .execute('parity_listRecentDapps');
} }
listStorageKeys (address, count, hash = null, blockNumber = 'latest') {
return this._transport
.execute('parity_listStorageKeys', inAddress(address), count, inHex(hash), inBlockNumber(blockNumber));
}
removeAddress (address) { removeAddress (address) {
return this._transport return this._transport
.execute('parity_removeAddress', inAddress(address)); .execute('parity_removeAddress', inAddress(address));
@ -311,16 +338,31 @@ export default class Parity {
.execute('parity_setDappsAddresses', dappId, inAddresses(addresses)); .execute('parity_setDappsAddresses', dappId, inAddresses(addresses));
} }
setEngineSigner (address, password) {
return this._transport
.execute('parity_setEngineSigner', inAddress(address), password);
}
setExtraData (data) { setExtraData (data) {
return this._transport return this._transport
.execute('parity_setExtraData', inData(data)); .execute('parity_setExtraData', inData(data));
} }
setGasCeilTarget (quantity) {
return this._transport
.execute('parity_setGasCeilTarget', inNumber16(quantity));
}
setGasFloorTarget (quantity) { setGasFloorTarget (quantity) {
return this._transport return this._transport
.execute('parity_setGasFloorTarget', inNumber16(quantity)); .execute('parity_setGasFloorTarget', inNumber16(quantity));
} }
setMaxTransactionGas (quantity) {
return this._transport
.execute('parity_setMaxTransactionGas', inNumber16(quantity));
}
setMinGasPrice (quantity) { setMinGasPrice (quantity) {
return this._transport return this._transport
.execute('parity_setMinGasPrice', inNumber16(quantity)); .execute('parity_setMinGasPrice', inNumber16(quantity));

1
js/src/jsonrpc/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
docs

File diff suppressed because it is too large Load Diff

View File

@ -15,6 +15,7 @@
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import { Quantity } from '../types'; import { Quantity } from '../types';
import { fromDecimal } from '../helpers';
export default { export default {
listening: { listening: {
@ -22,7 +23,8 @@ export default {
params: [], params: [],
returns: { returns: {
type: Boolean, type: Boolean,
desc: '`true` when listening, otherwise `false`.' desc: '`true` when listening, otherwise `false`.',
example: true
} }
}, },
@ -32,7 +34,8 @@ export default {
returns: { returns: {
type: Quantity, type: Quantity,
desc: 'Integer of the number of connected peers', desc: 'Integer of the number of connected peers',
format: 'utils.toDecimal' format: 'utils.toDecimal',
example: fromDecimal(2)
} }
}, },
@ -41,7 +44,8 @@ export default {
params: [], params: [],
returns: { returns: {
type: String, type: String,
desc: 'The current network protocol version' desc: 'The current network protocol version',
example: '8995'
} }
} }
}; };

File diff suppressed because it is too large Load Diff

View File

@ -18,30 +18,36 @@ import { Address, Data, Quantity } from '../types';
export default { export default {
listAccounts: { listAccounts: {
desc: 'Returns a list of addresses owned by client.', desc: 'Lists all stored accounts.',
params: [], params: [],
returns: { returns: {
type: Array, type: Array,
desc: '20 Bytes addresses owned by the client.' desc: 'A list of 20 byte account identifiers.',
example: [
'0x7bf87721a96849d168de02fd6ea5986a3a147383',
'0xca807a90fd64deed760fb98bf0869b475c469348'
]
} }
}, },
newAccount: { newAccount: {
desc: 'Creates new account', desc: 'Creates new account.\n\n**Note:** it becomes the new current unlocked account. There can only be one unlocked account at a time.',
params: [ params: [
{ {
type: String, type: String,
desc: 'Password' desc: 'Password for the new account.',
example: 'hunter2'
} }
], ],
returns: { returns: {
type: Address, type: Address,
desc: 'The created address' desc: '20 Bytes - The identifier of the new account.',
example: '0x8f0227d45853a50eefd48dd4fec25d5b3fd2295e'
} }
}, },
signAndSendTransaction: { signAndSendTransaction: {
desc: 'Sends and signs a transaction given account passphrase. Does not require the account to be unlocked nor unlocks the account for future transactions. ', desc: 'Sends transaction and signs it in a single call. The account does not need to be unlocked to make this call, and will not be left unlocked after.',
params: [ params: [
{ {
type: Object, type: Object,
@ -49,59 +55,83 @@ export default {
details: { details: {
from: { from: {
type: Address, type: Address,
desc: '20 Bytes - The address the transaction is send from' desc: '20 Bytes - The address of the account to unlock and send the transaction from.'
}, },
to: { to: {
type: Address, type: Address,
desc: '20 Bytes - (optional when creating new contract) The address the transaction is directed to' desc: '20 Bytes - (optional when creating new contract) The address the transaction is directed to.'
}, },
gas: { gas: {
type: Quantity, type: Quantity,
desc: 'Integer of the gas provided for the transaction execution. It will return unused gas', desc: 'Integer of the gas provided for the transaction execution. It will return unused gas.',
optional: true, optional: true,
default: 90000 default: 90000
}, },
gasPrice: { gasPrice: {
type: Quantity, type: Quantity,
desc: 'Integer of the gasPrice used for each paid gas', desc: 'Integer of the gasPrice used for each paid gas.',
optional: true, optional: true,
default: 'To-Be-Determined' default: 'To-Be-Determined'
}, },
value: { value: {
type: Quantity, type: Quantity,
desc: 'Integer of the value send with this transaction', desc: 'Integer of the value send with this transaction.',
optional: true optional: true
}, },
data: { data: {
type: Data, type: Data,
desc: 'The compiled code of a contract OR the hash of the invoked method signature and encoded parameters. For details see [Ethereum Contract ABI](https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI)' desc: 'The compiled code of a contract OR the hash of the invoked method signature and encoded parameters. For details see [Ethereum Contract ABI](https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI).'
}, },
nonce: { nonce: {
type: Quantity, type: Quantity,
desc: 'Integer of a nonce. This allows to overwrite your own pending transactions that use the same nonce.', desc: 'Integer of a nonce. This allows to overwrite your own pending transactions that use the same nonce.',
optional: true optional: true
} }
},
example: {
from: '0x407d73d8a49eeb85d32cf465507dd71d507100c1',
to: '0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b',
data: '0x41cd5add4fd13aedd64521e363ea279923575ff39718065d38bd46f0e6632e8e',
value: '0x186a0'
} }
}, },
{ {
type: String, type: String,
desc: 'Passphrase to unlock `from` account.' desc: 'Passphrase to unlock the `from` account.',
example: 'hunter2'
} }
], ],
returns: { returns: {
type: Data, type: Data,
desc: '32 Bytes - the transaction hash, or the zero hash if the transaction is not yet available' desc: '32 Bytes - the transaction hash, or the zero hash if the transaction is not yet available',
example: '0x62e05075829655752e146a129a044ad72e95ce33e48ff48118b697e15e7b41e4'
} }
}, },
unlockAccount: { unlockAccount: {
desc: '?', desc: 'Unlocks specified account for use.\n\nIf permanent unlocking is disabled (the default) then the duration argument will be ignored, and the account will be unlocked for a single signing. With permanent locking enabled, the duration sets the number of seconds to hold the account open for. It will default to 300 seconds. Passing 0 unlocks the account indefinitely.\n\nThere can only be one unlocked account at a time.',
params: [ params: [
'?', '?', '?' {
type: Address,
desc: '20 Bytes - The address of the account to unlock.',
example: '0x8f0227d45853a50eefd48dd4fec25d5b3fd2295e'
},
{
type: String,
desc: 'Passphrase to unlock the account.',
example: 'hunter2'
},
{
type: Quantity,
default: 300,
desc: 'Integer or `null` - Duration in seconds how long the account should remain unlocked for.',
example: null
}
], ],
returns: { returns: {
type: Boolean, type: Boolean,
desc: 'whether the call was successful' desc: 'whether the call was successful',
example: true
} }
} }
}; };

View File

@ -41,7 +41,7 @@ export default {
optional: true optional: true
}, },
topics: { topics: {
type: Array, desc: 'Array of `DATA` topics, for the receiver to identify messages' type: Array, desc: 'Array of `Data` topics, for the receiver to identify messages'
}, },
payload: { payload: {
type: Data, desc: 'The payload of the message' type: Data, desc: 'The payload of the message'
@ -117,7 +117,7 @@ export default {
optional: true optional: true
}, },
topics: { topics: {
type: Array, desc: 'Array of `DATA` topics which the incoming message\'s topics should match. You can use the following combinations' type: Array, desc: 'Array of `Data` topics which the incoming message\'s topics should match. You can use the following combinations'
} }
} }
} }

View File

@ -14,33 +14,38 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import { Quantity, Data } from '../types'; import { Quantity, Data, BlockNumber } from '../types';
import { fromDecimal } from '../helpers';
export default { export default {
generateAuthorizationToken: { generateAuthorizationToken: {
desc: 'Generates a new authorization token', desc: 'Generates a new authorization token.',
params: [], params: [],
returns: { returns: {
type: String, type: String,
desc: 'The new authorization token' desc: 'The new authorization token.',
example: 'bNGY-iIPB-j7zK-RSYZ'
} }
}, },
generateWebProxyAccessToken: { generateWebProxyAccessToken: {
desc: 'Generates a new web proxy access token', desc: 'Generates a new web proxy access token.',
params: [], params: [],
returns: { returns: {
type: String, type: String,
desc: 'The new web proxy access token' desc: 'The new web proxy access token.',
example: 'MOWm0tEJjwthDiTU'
} }
}, },
requestsToConfirm: { requestsToConfirm: {
desc: 'Returns a list of the transactions requiring authorization', desc: 'Returns a list of the transactions awaiting authorization.',
params: [], params: [],
returns: { returns: {
// TODO: Types of the fields of transaction objects? Link to a transaction object in another page?
type: Array, type: Array,
desc: 'A list of the outstanding transactions' desc: 'A list of the outstanding transactions.',
example: []
} }
}, },
@ -49,20 +54,41 @@ export default {
params: [ params: [
{ {
type: Quantity, type: Quantity,
desc: 'The request id' desc: 'The request id.',
example: fromDecimal(1)
}, },
{ {
type: Object, type: Object,
desc: 'The request options' desc: 'Modify the transaction before confirmation.',
details: {
gasPrice: {
type: Quantity,
desc: 'Modify the gas price provided by the sender in Wei.',
optional: true
},
gas: {
type: Quantity,
desc: 'Gas provided by the sender in Wei.',
optional: true
},
minBlock: {
type: BlockNumber,
desc: 'Integer block number, or the string `\'latest\'`, `\'earliest\'` or `\'pending\'`. Request will not be propagated till the given block is reached.',
optional: true
}
},
example: {}
}, },
{ {
type: String, type: String,
desc: 'The account password' desc: 'The account password',
example: 'hunter2'
} }
], ],
returns: { returns: {
type: Boolean, type: Boolean,
desc: 'The status of the confirmation' desc: 'The status of the confirmation',
example: true
} }
}, },
@ -71,16 +97,19 @@ export default {
params: [ params: [
{ {
type: Quantity, type: Quantity,
desc: 'The request id' desc: 'Integer - The request id',
example: fromDecimal(1)
}, },
{ {
type: Data, type: Data,
desc: 'Signed request (transaction RLP)' desc: 'Signed request (RLP encoded transaction)',
example: '0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675'
} }
], ],
returns: { returns: {
type: Boolean, type: Boolean,
desc: 'The status of the confirmation' desc: 'The status of the confirmation',
example: true
} }
}, },
@ -89,12 +118,14 @@ export default {
params: [ params: [
{ {
type: Quantity, type: Quantity,
desc: 'The request id' desc: 'Integer - The request id',
example: fromDecimal(1)
} }
], ],
returns: { returns: {
type: Boolean, type: Boolean,
desc: 'The status of the rejection' desc: 'The status of the rejection',
example: true
} }
}, },
@ -103,7 +134,8 @@ export default {
params: [], params: [],
returns: { returns: {
type: Boolean, type: Boolean,
desc: 'true when enabled, false when disabled' desc: '`true` when enabled, `false` when disabled.',
example: true
} }
} }
}; };

View File

@ -15,6 +15,7 @@
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import { Data } from '../types'; import { Data } from '../types';
import { withComment } from '../helpers';
export default { export default {
clientVersion: { clientVersion: {
@ -22,21 +23,24 @@ export default {
params: [], params: [],
returns: { returns: {
type: String, type: String,
desc: 'The current client version' desc: 'The current client version',
example: 'Parity//v1.5.0-unstable-9db3f38-20170103/x86_64-linux-gnu/rustc1.14.0'
} }
}, },
sha3: { sha3: {
desc: 'Returns Keccak-256 (*not* the standardized SHA3-256) of the given data.', desc: 'Returns Keccak-256 (**not** the standardized SHA3-256) of the given data.',
params: [ params: [
{ {
type: String, type: String,
desc: 'The data to convert into a SHA3 hash' desc: 'The data to convert into a SHA3 hash.',
example: withComment('0x68656c6c6f20776f726c64', '"hello world"')
} }
], ],
returns: { returns: {
type: Data, type: Data,
desc: 'The SHA3 result of the given string' desc: 'The Keccak-256 hash of the given string.',
example: '0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad'
} }
} }
}; };