eth_signTransaction - Manta RPC Method
Sign a transaction without broadcasting it on Manta Pacific. Public shared RPC endpoints commonly return deprecation, unsupported-method, or account-management errors because they do not keep unlocked signers.
Signs a transaction with the private key of the specified account on Manta Pacific without submitting it to the network.
Why Manta? Build on the modular ZK L2 with Celestia DA delivering the lowest fees for 200+ dApps with first L2 on Celestia mainnet, ZK-as-a-Service via Universal Circuits, Polygon CDK integration, and modular OP Stack architecture.
Security Warning: Public Dwellir endpoints do not keep unlocked signers. On shared infrastructure,
eth_signTransactioncommonly returns a deprecation, unsupported-method, or account-management error instead of a signed payload. For production use, sign transactions client-side using libraries like ethers.js or web3.py, then broadcast witheth_sendRawTransaction.
When to Use This Method
eth_signTransaction is relevant for ZK application developers, privacy-focused builders, and teams requiring modular scalability in limited scenarios:
- Understanding the Signing Flow — Learn how transaction signing works before implementing client-side signing
- Local Development — Sign transactions on a local dev node (Hardhat, Anvil, Ganache) where accounts are unlocked
- Offline Signing Workflows — Generate signed transaction payloads for later broadcast
Code Examples
# Local dev node only. Public Dwellir endpoints do not expose unlocked-account signing.
curl -X POST http://127.0.0.1:8545 \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "eth_signTransaction",
"params": [{
"from": "0x407d73d8a49eeb85d32cf465507dd71d507100c1",
"to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
"gas": "0x76c0",
"gasPrice": "0x9184e72a000",
"value": "0x9184e72a",
"nonce": "0x0"
}],
"id": 1
}'Common Use Cases
1. Offline Transaction Signing
Sign transactions on an air-gapped machine for later broadcast:
import { Wallet } from 'ethers';
async function createSignedTransaction(privateKey, to, value, { chainId, nonce, gasLimit }) {
const wallet = new Wallet(privateKey);
const tx = {
to,
value,
gasLimit,
nonce,
chainId,
};
const signedTx = await wallet.signTransaction(tx);
// Store signedTx and broadcast from an online machine
return signedTx;
}2. Batch Transaction Preparation
Pre-sign multiple transactions for sequential submission on Manta:
async function prepareBatch(wallet, transactions) {
const signed = [];
for (let i = 0; i < transactions.length; i++) {
const tx = {
...transactions[i],
nonce: baseNonce + i
};
signed.push(await wallet.signTransaction(tx));
}
return signed; // Submit via eth_sendRawTransaction in order
}Error Handling
Common errors and solutions:
| Error Code | Description | Solution |
|---|---|---|
| -32000 | Deprecated, unavailable, or account not unlocked | Use client-side signing instead of node-side signing |
| -32601 | Method not found | Method disabled on this node — use client-side signing |
| -32602 | Invalid params | Verify transaction fields (from, to, gas, etc.) |
| -32603 | Internal error | Check node logs for signing failures |
Related Methods
eth_sendRawTransaction— Broadcast a signed transactioneth_sendTransaction— Sign and send in one step (requires unlocked account)eth_accounts— List accounts available for signing
eth_feeHistory
Get historical gas fee data on Manta Pacific including base fees and priority fee percentiles. Essential for gas price prediction, fee estimation UIs, and network congestion monitoring.
eth_sendTransaction
Send a transaction from an unlocked account on Manta Pacific. Requires the node to hold the sender's private key — intended for development and testing only.