Sign and Broadcast Transaction
To complete any staking, withdrawal, or claim operation on Ethereum, sign and broadcast the unsigned transaction provided by the Pooled Staking API.
Follow these steps:
-
Retrieve an unsigned serialized transaction from the relevant API endpoint, e.g.,
/staking/deposit,/staking/withdraw,/staking/claim. -
Sign the unsigned transaction using your Ethereum private key. It can be done with any of signing libraries, or you can use the following ethers.js code:
import { Wallet, providers, TransactionRequest } from "ethers"; // Example input values (replace with your data) const PRIVATE_KEY = "<PRIVATE_KEY>"; const RPC_URL = "<ETHEREUM_RPC_URL>"; const unsignedTx: TransactionRequest = { to: "0xba447498dc4c169f2b4f427b2c4d532320457e89", // recipient address for this transaction data: "0xf9609f08...", // transaction data payload in the hexadecimal format. value: "10000000000000000" // amount this transaction is sending in Wei; as string, convert if needed }; async function signTransaction() { const provider = new providers.JsonRpcProvider(RPC_URL); const wallet = new Wallet(PRIVATE_KEY, provider); const tx = await wallet.populateTransaction(unsignedTx); // Optionally set gas/gasPrice here const signedTx = await wallet.signTransaction(tx); console.log(signedTx); } signTransaction(); // the result is a raw signed hex-encoded transaction ready for broadcastingnpm install [email protected] node signTransaction.js -
Broadcast the signed transaction to the Ethereum network by sending a POST request to /api/v1/staking/pool/[network]/transaction/send.
Example request (for
hoodinetwork):curl --request POST \ --url https://api-test.p2p.org/api/v1/staking/pool/hoodi/transaction/send \ --header 'accept: application/json' \ --header 'authorization: Bearer <token>' \ --header 'content-type: application/json' \ --data ' { "signedTransaction": "0x02f8b983088bb00e8459682f0084cf5f645482cb2694ba447498dc4c169f2b4f427b2c4d532320457e89872386f26fc10000b844f9609f08000000000000000000000000092af80778ff3c3d27fd2744c39f6e9326d9aaee0000000000000000000000000000000000000000000000000000000000000000c080a0709f764a37d31ed49fa84913082568b241b57a3cc7e660a597868f9d39bb4055a018ce04abc90fcceec21bf084c8966426ad7eda33a1cb541078b8a597ea7340a8" }'signedTransaction— signed transaction in the hexadecimal format which needs to be broadcasted to the network.
Example response:
{ "error": null, "result": { "hash": "0x9945ee6bbbdb7c34565b8833d37d302da9c76d63262d12a36f7c8f822553fa84", "status": "success", "blockNumber": 791360, "transactionIndex": 0, "gasUsed": "51613", "cumulativeGasUsed": "51613", "effectiveGasPrice": "2606634082", "from": "0x092Af80778ff3c3D27Fd2744C39f6e9326d9AaEe", "to": "0xba447498DC4c169f2b4f427B2c4D532320457E89" } }hash— hash of the Ethereum transaction.status— transaction status:pending,confirmed, orfailed.blockNumber— block number in which the transaction has been included;nullif the transaction has not been confirmed yet.transactionIndex— value of the position of the transaction in the block in which it has been included.gasUsed— amount of gas spent for the transaction.cumulativeGasUsed— total amount of gas used by all transactions in a block up to this transaction.effectiveGasPrice— actual price per gas unit.from— sender address of this transaction.to— recipient address for this transaction.
-
To check the transaction status, send a GET request to /api/v1/staking/pool/[network]/transaction/status/[transactionHash].
Example request (for
hoodinetwork):curl --request GET \ --url https://api-test.p2p.org/api/v1/staking/pool/hoodi/transaction/status/0x8d80b8ed85b578eeb873731101a926221701ee48218f6c9b83895f7ac1535641 \ --header 'accept: application/json' \ --header 'authorization: Bearer <token>' \ --header 'content-type: application/json' \transactionHash— hash of the transaction.
What's Next?
- Getting Started
- Withdrawal
- Pooled Staking API reference
Updated 3 months ago