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. nullif 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. nullif 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"
}