# TxEnvelopeTempo

Utilities for instantiating, serializing, and hashing Tempo transaction envelopes.

Create, sign, and serialize Tempo transactions with support for configurable fee tokens,
call batching, fee sponsorship, access keys, and scheduled execution via `validAfter`/`validBefore`.

[Tempo Transaction Specification](https://docs.tempo.xyz/protocol/transactions/spec-tempo-transaction)

## Examples

```ts twoslash
import { Secp256k1, Value } from 'ox'
import { TxEnvelopeTempo } from 'ox/tempo'

const envelope = TxEnvelopeTempo.from({
  chainId: 1,
  calls: [
    {
      to: '0x0000000000000000000000000000000000000000',
      data: '0xdeadbeef'
    }
  ],
  maxFeePerGas: Value.fromGwei('10')
})

const payload = TxEnvelopeTempo.getSignPayload(envelope)
const signature = Secp256k1.sign({
  payload,
  privateKey: '0x...'
})

const envelope_signed = TxEnvelopeTempo.from(envelope, {
  signature
})
const envelope_serialized =
  TxEnvelopeTempo.serialize(envelope_signed)
```

## Functions

| Name                | Description                         |
| ------------------- | ----------------------------------- |
| [`TxEnvelopeTempo.assert`](/tempo/reference/TxEnvelopeTempo/assert) | Asserts a [`TxEnvelopeTempo.TxEnvelopeTempo`](/tempo/reference/TxEnvelopeTempo/types#txenvelopetempo) is valid. |
| [`TxEnvelopeTempo.deserialize`](/tempo/reference/TxEnvelopeTempo/deserialize) | Deserializes a [`TxEnvelopeTempo.TxEnvelopeTempo`](/tempo/reference/TxEnvelopeTempo/types#txenvelopetempo) from its serialized form. |
| [`TxEnvelopeTempo.encodeForSigning`](/tempo/reference/TxEnvelopeTempo/encodeForSigning) | Encodes a [`TxEnvelopeTempo.TxEnvelopeTempo`](/tempo/reference/TxEnvelopeTempo/types#txenvelopetempo) for sender signing. |
| [`TxEnvelopeTempo.from`](/tempo/reference/TxEnvelopeTempo/from) | Converts an arbitrary transaction object into a Tempo Transaction Envelope. |
| [`TxEnvelopeTempo.getFeePayerSignPayload`](/tempo/reference/TxEnvelopeTempo/getFeePayerSignPayload) | Returns the fee payer payload to sign for a [`TxEnvelopeTempo.TxEnvelopeTempo`](/tempo/reference/TxEnvelopeTempo/types#txenvelopetempo). |
| [`TxEnvelopeTempo.getSignPayload`](/tempo/reference/TxEnvelopeTempo/getSignPayload) | Returns the payload to sign for a [`TxEnvelopeTempo.TxEnvelopeTempo`](/tempo/reference/TxEnvelopeTempo/types#txenvelopetempo). |
| [`TxEnvelopeTempo.hash`](/tempo/reference/TxEnvelopeTempo/hash) | Hashes a [`TxEnvelopeTempo.TxEnvelopeTempo`](/tempo/reference/TxEnvelopeTempo/types#txenvelopetempo). This is the "transaction hash". |
| [`TxEnvelopeTempo.serialize`](/tempo/reference/TxEnvelopeTempo/serialize) | Serializes a [`TxEnvelopeTempo.TxEnvelopeTempo`](/tempo/reference/TxEnvelopeTempo/types#txenvelopetempo). |
| [`TxEnvelopeTempo.toTransactionRequest`](/tempo/reference/TxEnvelopeTempo/toTransactionRequest) | Converts a [`TxEnvelopeTempo.TxEnvelopeTempo`](/tempo/reference/TxEnvelopeTempo/types#txenvelopetempo) to a Tempo [`TransactionRequest.TransactionRequest`](/api/TransactionRequest/types#transactionrequest). |
| [`TxEnvelopeTempo.validate`](/tempo/reference/TxEnvelopeTempo/validate) | Validates a [`TxEnvelopeTempo.TxEnvelopeTempo`](/tempo/reference/TxEnvelopeTempo/types#txenvelopetempo). Returns `true` if the envelope is valid, `false` otherwise. |

## Errors

| Name                | Description                         |
| ------------------- | ----------------------------------- |
| [`TxEnvelopeTempo.CallsEmptyError`](/tempo/reference/TxEnvelopeTempo/errors#txenvelopetempocallsemptyerror) | Thrown when a transaction's calls list is empty. |
| [`TxEnvelopeTempo.InvalidValidityWindowError`](/tempo/reference/TxEnvelopeTempo/errors#txenvelopetempoinvalidvaliditywindowerror) | Thrown when validBefore is not greater than validAfter. |

## Types

| Name                | Description                         |
| ------------------- | ----------------------------------- |
| [`TxEnvelopeTempo.Call`](/tempo/reference/TxEnvelopeTempo/types#txenvelopetempocall) | Represents a single call within a Tempo transaction. |
| [`TxEnvelopeTempo.FeePayerMagic`](/tempo/reference/TxEnvelopeTempo/types#txenvelopetempofeepayermagic) |  |
| [`TxEnvelopeTempo.Input`](/tempo/reference/TxEnvelopeTempo/types#txenvelopetempoinput) | Input type for a Tempo transaction envelope. |
| [`TxEnvelopeTempo.Rpc`](/tempo/reference/TxEnvelopeTempo/types#txenvelopetemporpc) |  |
| [`TxEnvelopeTempo.Serialized`](/tempo/reference/TxEnvelopeTempo/types#txenvelopetemposerialized) |  |
| [`TxEnvelopeTempo.SerializedType`](/tempo/reference/TxEnvelopeTempo/types#txenvelopetemposerializedtype) |  |
| [`TxEnvelopeTempo.Signed`](/tempo/reference/TxEnvelopeTempo/types#txenvelopetemposigned) |  |
| [`TxEnvelopeTempo.TxEnvelopeTempo`](/tempo/reference/TxEnvelopeTempo/types#txenvelopetempotxenvelopetempo) | Tempo transaction envelope (type `0x76`). |
| [`TxEnvelopeTempo.Type`](/tempo/reference/TxEnvelopeTempo/types#txenvelopetempotype) |  |
