Web3Signer JSON-RPC API
- All JSON-RPC HTTP examples use the default host and port endpoint
http://127.0.0.1:8545
. - The examples use Hyperledger Besu, but you can use any Ethereum execution client.
eth_accounts
Returns the account address with which Web3Signer is signing transactions.
Returns multiple accounts if multiple signers are configured.
Parameters
None
Returns
Array of data
- Account address with which Web3Signer is signing transactions
- curl HTTP request
- JSON result
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}' http://127.0.0.1:8545
{
"jsonrpc": "2.0",
"id": 1,
"result": ["0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"]
}
eth_sign
Calculates an Ethereum specific signature using
sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))."
Adds a prefix to the message that makes the calculated signature recognizable as an Ethereum specific signature. This prevents malicious dapps from signing arbitrary data (for example, a transaction) and using the signature to impersonate the victim.
Parameters
DATA
- 20-byte account address
DATA
- Data string to sign
Returns
DATA
- Signature
- curl HTTP request
- JSON result
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x78e6e236592597c09d5c137c2af40aecd42d12a2", "0x2eadbe1f"], "id":1}' http://127.0.0.1:8545
{
"jsonrpc": "2.0",
"id": 1,
"result": "0xa6122e277f46fea78f3e97d3354a03ad20b2296733dfefbadc7305c80e70ce9826d44f12ab5aa488689744657491c70d3b654d7f60f8f50beefac9abcf02a4cf1b"
}
eth_signTransaction
Signs a transaction that you can submit to Besu at a later time using
eth_sendRawTransaction
.
Parameters
Transaction object:
Key | Type | Required/Optional | Value |
---|---|---|---|
from | Data, 20 bytes | Required | Address of the sender. |
to | Data, 20 bytes | Optional for contract creation | Address of the receiver. null if this is a contract creation transaction. |
gas | Quantity | Optional | Gas provided by the sender. The default is 90000 . |
gasPrice | Quantity | Optional | Gas price provided by the sender in Wei. The default is 0 . Used only in non EIP-1559 transactions. |
maxPriorityFeePerGas | Quantity | Optional | Maximum fee, in Wei, the sender is willing to pay above the base fee. Used only in EIP-1559 transactions. |
maxFeePerGas | Quantity | Optional | Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay. Used only in EIP-1559 transactions. |
nonce | Quantity | Optional | Number of transactions made by the sender before this one. Must be specified if using GoQuorum. |
value | Quantity | Optional | Value transferred in Wei. |
data | Quantity | Optional | Compiled contract code or hash of the invoked method signature and encoded parameters. |
Returns
result
: data
- The signed transaction object.
- curl HTTP request
- JSON result
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_signTransaction","params":[{"from": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","gas": "0x7600","gasPrice": "0x9184e72a000","value": "0x9184e72a", "nonce":"0x46"}], "id":1}' http://127.0.0.1:8545
{
"jsonrpc": "2.0",
"id": 1,
"result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"
}
eth_signTypedData
eth_signTypedData
is the same as eth_sign
except a typed data structure is specified as the object to be signed instead of a data string.
Calculates an Ethereum specific signature using
sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))."
Adds a prefix to the message that makes the calculated signature recognizable as an Ethereum specific signature. This prevents malicious dapps from signing arbitrary data (for example, a transaction) and using the signature to impersonate the victim.
The JSON schema for the typed data structure to sign is:
{
type: 'object',
properties: {
types: {
type: 'object',
properties: {
EIP712Domain: {type: 'array'},
},
additionalProperties: {
type: 'array',
items: {
type: 'object',
properties: {
name: {type: 'string'},
type: {type: 'string'}
},
required: ['name', 'type']
}
},
required: ['EIP712Domain']
},
primaryType: {type: 'string'},
domain: {type: 'object'},
message: {type: 'object'}
},
required: ['types', 'primaryType', 'domain', 'message']
}
Parameters
DATA
- 20-byte account address
TYPEDDATA
- Typed data structure to sign
Returns
DATA
- Signature
curl HTTP request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_signTypedData","params":["0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826", {"types":{"EIP712Domain":[{"name":"name","type":"string"},{"name":"version","type":"string"},{"name":"chainId","type":"uint256"},{"name":"verifyingContract","type":"address"}],"Person":[{"name":"name","type":"string"},{"name":"wallet","type":"address"}],"Mail":[{"name":"from","type":"Person"},{"name":"to","type":"Person"},{"name":"contents","type":"string"}]},"primaryType":"Mail","domain":{"name":"Ether Mail","version":"1","chainId":1,"verifyingContract":"0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"},"message":{"from":{"name":"Cow","wallet":"0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826"},"to":{"name":"Bob","wallet":"0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB"},"contents":"Hello, Bob!"}}],"id":1}'
JSON result
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x4355c47d63924e8a72e509b65029052eb6c299d53a04e167c5775fd466751c9d07299936d304c153f6443dfa05f40ff007d72911b6f72307f996231605b915621c"
}
eth_sendTransaction
Creates and signs a transaction using the signing key.
Web3Signer submits the signed transaction to Besu using eth_sendRawTransaction
.
Parameters
Transaction object:
Key | Type | Required/Optional | Value |
---|---|---|---|
from | Data, 20 bytes | Required | Address of the sender. |
to | Data, 20 bytes | Optional for contract creation | Address of the receiver. null if this is a contract creation transaction. |
gas | Quantity | Optional | Gas provided by the sender. The default is 90000 . |
gasPrice | Quantity | Optional | Gas price provided by the sender in Wei. The default is 0 . Used only in non EIP-1559 transactions. |
maxPriorityFeePerGas | Quantity | Optional | Maximum fee, in Wei, the sender is willing to pay above the base fee. Used only in EIP-1559 transactions. |
maxFeePerGas | Quantity | Optional | Maximum total fee (base fee + priority fee), in Wei, the sender is willing to pay. Used only in EIP-1559 transactions. |
nonce | Quantity | Optional | Number of transactions made by the sender before this one. Must be specified if using GoQuorum. |
value | Quantity | Optional | Value transferred in Wei. |
data | Quantity | Optional | Compiled contract code or hash of the invoked method signature and encoded parameters. |
Submitting a transaction with the same nonce as a pending transaction and a higher gas price replaces the pending transaction with the new one.
Returns
result
: data
- 32-byte transaction hash
- curl HTTP request
- JSON result
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{"from": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","gas": "0x7600","gasPrice": "0x9184e72a000","value": "0x9184e72a"}], "id":1}' http://127.0.0.1:8545
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x6052dd2131667ef3e0a0666f2812db2defceaec91c470bb43de92268e8306778"
}