eth_sendRawTransaction
eth_sendRawTransaction(signedTx) → txHash 서명된 트랜잭션을 네트워크에 브로드캐스트합니다. 트랜잭션을 로컬에서 서명한 뒤(예: ethers.js, viem 사용) 결과로 나오는 16진수 RLP 바이트를 전달합니다. 노드는 즉시 트랜잭션 해시를 반환하며, 블록에 포함될 때까지 대기하려면 eth_getTransactionReceipt를 사용하세요.
파라미터
| 이름 | 타입 | 필수 | 설명 |
|---|---|---|---|
signedTx | string | ✓ | 16진수 인코딩된(0x 접두사 포함) 서명된 트랜잭션 데이터입니다. 발신자의 개인 키로 EIP-1559 또는 레거시 트랜잭션을 로컬에서 서명하여 생성합니다. |
반환값
타입:
string 트랜잭션 해시(32바이트, 16진수 인코딩)입니다. 트랜잭션은 멤풀에 있지만 아직 채굴되지 않았습니다.
에러
| 코드 | 이름 | 설명 |
|---|---|---|
-32000 | Insufficient funds | 발신자에게 value + gas만큼의 OKRW가 부족합니다 |
-32000 | Nonce too low | 트랜잭션의 nonce가 발신자의 현재 nonce보다 낮습니다. `eth_getTransactionCount`로 다시 가져와 재서명하세요. |
-32602 | Invalid signature | 서명이 체인 ID와 일치하지 않습니다. chainId가 450815인지, 서명자가 EIP-155 리플레이 보호를 사용했는지 확인하세요. |
예제
ethers.js v6 — 서명 및 브로드캐스트
ethers.js는 서명과 RPC 호출을 함께 처리합니다. 직접 제어가 필요하면 `wallet.signTransaction(req)`로 서명한 뒤 `provider.send("eth_sendRawTransaction", [signedHex])`를 호출하세요.
import { JsonRpcProvider, Wallet, parseEther } from "ethers";
const provider = new JsonRpcProvider("https://rpc-testnet.maroo.io");
const wallet = new Wallet(process.env.PRIVATE_KEY!, provider);
// `sendTransaction` signs locally and calls eth_sendRawTransaction internally.
const tx = await wallet.sendTransaction({
to: "0xRecipientAddress",
value: parseEther("1.5"), // 1.5 OKRW
});
console.log("Tx hash:", tx.hash);
const receipt = await tx.wait();
console.log("Mined in block:", receipt!.blockNumber); 사전 서명된 트랜잭션을 cURL로 전송
params의 16진수를 로컬에서 서명한 트랜잭션으로 교체하세요. 성공 시 `{ jsonrpc, id, result: "0x<txHash>" }`를 반환합니다.
curl -X POST https://rpc-testnet.maroo.io \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "eth_sendRawTransaction",
"params": ["0xf86c80...signed-tx-hex..."],
"id": 1
}'