Abstract
This is the API for a standalone signer daemon, which will handle private keys and signing and deliver support for HD and hardware wallets.
This daemon will have its own IPC connection and will be separate from any running node.
NOTE This is API v 1.0 for a signer daemon without UI!
Connection
JSON RPC 2.0 over IPC.
This signer should open its own IPC connection.
e.g. on ~/Library/Ethereum/signer.ipc
Binary flags
--datadir /path/to/keystore
API
IN PROGRESS
account_list ( )
> [{
type: "account |hd|ledger|trezor",
url: "...",
accounts: ['0x234567','0x2134567'] // maybe HD path?
}, {
...
}]
account_new ( string: password)
> {
id: 0,
type: "account|hd|ledger|trezor",
url: "...",
accounts: ['0x234567'] // only one for "normal" accounts
}
account_newHDWallet ( string: newPassword )
> {
id: 0,
type: "account|hd|ledger|trezor",
url: "...",
mnemonic: "hello world iam here ...",
accounts: ['0x234567'] // first account generated
}
account_newHDWallet ( string: newPassword )
> {
id: 0,
type: "account|hd|ledger|trezor",
url: "...",
mnemonic: "hello world iam here ...",
accounts: ['0x234567'] // first account generated
}
account_getHDWalletAddress ( string: id, number: index?? )
> 0x1234567654321234567...
account_export ( string: address|id|publicKey) // works also of HD wallets
> { web3 keystore json }
account_import ( Object: web3 keystore json)
> {
id: 0,
type: "account|hd|ledger|trezor",
url: "...",
mnemonic: "hello world iam here ...",
accounts: ['0x234567', '0x234567', '0x234567']
}
account_importPrivateKey (string privateKey)
> {
id: 0,
url: "...",
type: "account|hd|ledger|trezor",
accounts: ['0x234567']
}
account_signTransaction (object: txObject, array: JSONInterface, string: password)
> 0x123456789876543212345678..
// OR
> {
hash: '0x234567890',
r: '0x456789',
s: '0x234678',
v: '0x02',
signature: '0x1234567654321234567' // full RLP encoded signature, passable to eth_sendRawTransaction
}
account_sign (string: message, array: JSONInterface, string: password)
> 0x123456789876543212345678..
// OR
> {
message: 'Hello',
hash: '0x234567890',
r: '0x456789',
s: '0x234678',
v: '0x02',
signature: '0x1234567654321234567' // full signature, passable to personal_ecRecover
}
account_recover (string/Object: RLPencodedsig|ObjectWithSignatureValues)
> '0x23456789876543212' // Ethereum address
// Is the below needed, or can "is transaction" be auto detected in "personal_recover"
account_recoverTransaction (string/Object: RLPencodedsig|ObjectWithSignatureValues)
> '0x23456789876543212' // Ethereum address
account_unlock (string: address|id|publicKey, string: password)
> true
account_lock (string: address|id|publicKey)
> true
Addition we could add support for subscriptions for key adding etc.