TransactionEnvelopeLegacy
Utility functions for working with Legacy Transaction Envelopes.
Examples
Below are some examples demonstrating common usages of the TransactionEnvelopeLegacy
module:
Instantiating
Transaction Envelopes can be instantiated using TransactionEnvelopeLegacy.from
:
import { TransactionEnvelopeLegacy, Value } from 'ox'
const envelope = TransactionEnvelopeLegacy.from({
gasPrice: Value.fromGwei('10'),
to: '0x0000000000000000000000000000000000000000',
value: Value.fromEther('1'),
})
Signing
Transaction Envelopes can be signed using TransactionEnvelopeLegacy.getSignPayload
and a signing function such as Secp256k1.sign
or P256.sign
:
import { Secp256k1, TransactionEnvelopeLegacy } from 'ox'
const envelope = TransactionEnvelopeLegacy.from({
nonce: 0n,
gasPrice: 1000000000n,
gas: 21000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: 1000000000000000000n,
})
const signature = Secp256k1.sign({
payload: TransactionEnvelopeLegacy.getSignPayload(envelope),
privateKey: '0x...'
})
const envelope_signed = TransactionEnvelopeLegacy.from(envelope, { signature })
Serializing
Transaction Envelopes can be serialized using TransactionEnvelopeLegacy.serialize
:
import { TransactionEnvelopeLegacy, Value } from 'ox'
const envelope = TransactionEnvelopeLegacy.from({
chainId: 1,
gasPrice: Value.fromGwei('10'),
to: '0x0000000000000000000000000000000000000000',
value: Value.fromEther('1'),
})
const serialized = TransactionEnvelopeLegacy.serialize(envelope)
Sending
We can send a Transaction Envelope to the network by serializing the signed envelope with .serialize
, and then broadcasting it over JSON-RPC with eth_sendRawTransaction
.
In this example, we will use RpcTransport.fromHttp
to broadcast a eth_sendRawTransaction
request over HTTP JSON-RPC.
import { RpcTransport, TransactionEnvelopeLegacy, Secp256k1, Value } from 'ox'
// Construct the Envelope.
const envelope = TransactionEnvelopeLegacy.from({
chainId: 1,
gasPrice: Value.fromGwei('10'),
nonce: 69n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: Value.fromEther('1.5'),
})
// Sign over the Envelope.
const signature = Secp256k1.sign({
payload: TransactionEnvelopeLegacy.getSignPayload(envelope),
privateKey: '0x...',
})
// Serialize the Envelope with the Signature.
const serialized = TransactionEnvelopeLegacy.serialize(envelope, {
signature
})
// Broadcast the Envelope with `eth_sendRawTransaction`.
const transport = RpcTransport.fromHttp('https://1.rpc.thirdweb.com')
const hash = await transport.request({
method: 'eth_sendRawTransaction',
params: [serialized],
})
If you are interfacing with an RPC that supports eth_sendTransaction
, you can also use
TransactionEnvelopeLegacy.toRpc
to convert an Envelope to an RPC-compatible format.
This means you can skip the ceremony of manually filling & signing the Transaction.
import 'ox/window'
import { Provider, TransactionEnvelopeLegacy, Value } from 'ox'
const envelope = TransactionEnvelopeLegacy.from({
chainId: 1,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: Value.fromEther('1.5'),
})
const envelope_rpc = TransactionEnvelopeLegacy.toRpc(envelope)
const provider = Provider.from(window.ethereum)
const hash = await provider.request({
method: 'eth_sendTransaction',
params: [envelope_rpc],
})
Computing Hashes
Transaction Hashes can be computed using TransactionEnvelopeLegacy.hash
:
import { Secp256k1, TransactionEnvelopeLegacy } from 'ox'
const envelope = TransactionEnvelopeLegacy.from({
chainId: 1,
nonce: 0n,
gasPrice: 1000000000n,
gas: 21000n,
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
value: 1000000000000000000n,
data: '0x',
})
const signature = Secp256k1.sign({
payload: TransactionEnvelopeLegacy.getSignPayload(envelope),
privateKey: '0x...'
})
const envelope_signed = TransactionEnvelopeLegacy.from(envelope, { signature })
const hash = TransactionEnvelopeLegacy.hash(envelope_signed)
Functions
Name | Description |
---|---|
TransactionEnvelopeLegacy.assert | Asserts a TransactionEnvelopeLegacy.TransactionEnvelopeLegacy is valid. |
TransactionEnvelopeLegacy.deserialize | Deserializes a TransactionEnvelopeLegacy.TransactionEnvelopeLegacy from its serialized form. |
TransactionEnvelopeLegacy.from | Converts an arbitrary transaction object into a legacy Transaction Envelope. |
TransactionEnvelopeLegacy.getSignPayload | Returns the payload to sign for a TransactionEnvelopeLegacy.TransactionEnvelopeLegacy . |
TransactionEnvelopeLegacy.hash | Hashes a TransactionEnvelopeLegacy.TransactionEnvelopeLegacy . This is the "transaction hash". |
TransactionEnvelopeLegacy.serialize | Serializes a TransactionEnvelopeLegacy.TransactionEnvelopeLegacy . |
TransactionEnvelopeLegacy.toRpc | Converts an TransactionEnvelopeLegacy.TransactionEnvelopeLegacy to an TransactionEnvelopeLegacy.Rpc . |
TransactionEnvelopeLegacy.validate | Validates a TransactionEnvelopeLegacy.TransactionEnvelopeLegacy . Returns true if the envelope is valid, false otherwise. |
Types
Name | Description |
---|---|
TransactionEnvelopeLegacy.Rpc | |
TransactionEnvelopeLegacy.Serialized | |
TransactionEnvelopeLegacy.Signed | |
TransactionEnvelopeLegacy.TransactionEnvelopeLegacy | |
TransactionEnvelopeLegacy.Type |