- Sending Transactions Overview
- Transaction Operator
Sending Transactions Overview
Transaction Operator
The transaction operator allows submitting transactions over REST without specifying a nonce. The system will ensure that the next nonce is correctly specified, and that transactions are re-submitted in case of timeouts or other node errors. Submission is idempotent as long as the same transaction id is used.
Usage:
You can use this API with any app wallet credentials that request the eth_sign
scope. (Chain id 1
is mainnet, 4
is rinkeby, etc).
Curl example:
curl-X POST -H "Authorization: Bearer <ACCESS_TOKEN>" -H "Content-Type: application/json" -d '{
"transaction": {
"id": "932018a0-3091-4323-ba80-e2145badc174",
"params": {
"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155",
"to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567",
"gas": "0x76c0",
"gasPrice": "0x9184e72a000",
"value": "0x9184e72a",
"data": "0x0"
}
}
}
https://api.bitski.com/v1/eth/chains/1/transactions
=>
{
"transaction": {
"id": "932018a0-3091-4323-ba80-e2145badc174",
"params": {
"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155",
"to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567",
"gas": "0x76c0",
"gasPrice": "0x9184e72a000",
"value": "0x9184e72a",
"data": "0x0",
"nonce": "0x01",
},
"status": "PENDING",
"hash": "0x68fcfcf5aef8e7a79b8d6b7e498415896e4dd62861cd5b38fa11ad035f44582c",
"signedData": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",
"lastError": null
}
}
Polling for updates:
Transactions are queued and submitted out of band (status will be PENDING
,
SUBMITTED
, or ERROR
). In order to see the status of a submitted transaction,
all transactions can be queried, or a single transaction can be specified by id:
$ curl -H "Authorization: Bearer <ACCESS_TOKEN>" https://api.bitski.com/v1/eth/chains/1/transactions
=>
{
"transactions": [{
"id": "932018a0-3091-4323-ba80-e2145badc174",
"params": {
"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155",
"to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567",
"gas": "0x76c0",
"gasPrice": "0x9184e72a000",
"value": "0x9184e72a",
"data": "0x0",
"nonce": "0x01",
},
"status": "PENDING",
"hash": "0x68fcfcf5aef8e7a79b8d6b7e498415896e4dd62861cd5b38fa11ad035f44582c",
"signedData": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",
"lastError": null
}]
}
Or by id
$ curl -H "Authorization: Bearer <ACCESS_TOKEN>" https://api.bitski.com/v1/eth/chains/1/transactions/932018a0-3091-4323-ba80-e2145badc174
=>
{
"transaction": {
"id": "932018a0-3091-4323-ba80-e2145badc174",
"params": {
"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155",
"to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567",
"gas": "0x76c0",
"gasPrice": "0x9184e72a000",
"value": "0x9184e72a",
"data": "0x0",
"nonce": "0x01",
},
"status": "PENDING",
"hash": "0x68fcfcf5aef8e7a79b8d6b7e498415896e4dd62861cd5b38fa11ad035f44582c",
"signedData": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",
"lastError": null
}
}
Current Limitations:
- Transactions that do not have a high enough gas price will not automatically have the gas price adjusted. So if gas prices spike, the transaction will remain in the queue until prices return to a low enough level. Alternatively, a new transaction can be submitted with that same nonce via the standard JSON RPC api to increase the gas price and flush the transaction through.
- Transactions that cannot be submitted to the mempool could consume a nonce but be stuck getting retried forever. There are many checks to prevent this, but no guarantees.
gas
andgasPrice
are not currently overridden, and must be provided by the caller.