Skip to main content

Overview

The Python SDK exposes two methods for transactions on EVM chains:
  • send_transaction — signs a legacy transaction and broadcasts it via JSON-RPC in a single call. Returns the transaction hash.
  • sign_transaction — signs a legacy transaction and returns the raw ECDSA signature (0x + r + s + v, 132 chars). Broadcasting is your responsibility.
send_transaction is the recommended path for most apps. Reach for sign_transaction only if you need the signature out-of-band — co-signing, custom relayers, or assembling the raw tx yourself.

Prerequisites

Quick Start: Send a Transaction

send_transaction signs and broadcasts in one call. Pass a JSON-RPC endpoint either per-call via rpc_url=, or once at construction via rpc_urls={chainId: url}.
You can also pass rpc_url= per call, which overrides the constructor mapping:
The SDK adds EIP-155 replay protection automatically based on chainId.

Signing with a Password-Protected Wallet

If the wallet was created with a password, pass it via password=. The same kwarg also auto-recovers key shares in stateless or fresh processes — see Step 3 of Create an EVM Wallet.

Common Transaction Types

ETH Transfer

Contract Interaction

EIP-1559 Support

EIP-1559 (Type 2) transactions are not yet supported — the SDK currently signs legacy transactions only. Use gasPrice rather than maxFeePerGas / maxPriorityFeePerGas. Passing EIP-1559 fields raises DynamicSDKError.

Manual Signing and Broadcasting

If you need the raw signature — for offline workflows, custom broadcast logic, or co-signing — call sign_transaction directly. It returns just the 65-byte ECDSA signature as a 0x-prefixed hex string (r + s + v, 132 chars). It does not return an RLP-encoded transaction.
To broadcast yourself, combine the signature with the unsigned tx and apply EIP-155 v adjustment:

Error Handling

Next Steps

Last modified on May 5, 2026