ox
Version:
Ethereum Standard Library
80 lines (70 loc) • 2.34 kB
text/typescript
import { describe, expect, test } from 'vp/test'
import * as core_SignatureEnvelope from '../../../tempo/SignatureEnvelope.js'
import * as core_TxEnvelopeTempo from '../../../tempo/TxEnvelopeTempo.js'
import * as z_TxEnvelopeTempo from '../TxEnvelopeTempo.js'
import * as z from 'zod/mini'
const envelope = {
calls: [
{
to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
},
],
chainId: 1,
maxFeePerGas: 2_000_000_000n,
maxPriorityFeePerGas: 2_000_000_000n,
nonce: 785n,
nonceKey: 0n,
type: 'tempo',
} as const
const signature = core_SignatureEnvelope.from({
type: 'secp256k1',
signature: {
r: '0x635dc2033e60185bb36709c29c75d64ea51dfbd91c32ef4be198e4ceb169fb4d',
s: '0x50c2667ac4c771072746acfdcf1f1483336dcca8bd2df47cd83175dbe60f0540',
yParity: 0,
},
})
describe('TxEnvelopeTempo', () => {
test('validates an envelope', () => {
expect(
z.safeDecode(z_TxEnvelopeTempo.TxEnvelopeTempo, envelope).success,
).toBe(true)
})
test('validates a signed envelope', () => {
expect(
z.safeDecode(z_TxEnvelopeTempo.Signed, { ...envelope, signature })
.success,
).toBe(true)
})
test('rejects a signed envelope missing the signature', () => {
expect(
z.safeDecode(z_TxEnvelopeTempo.Signed, envelope as never).success,
).toBe(false)
})
test('rejects an invalid envelope', () => {
expect(
z.safeDecode(z_TxEnvelopeTempo.TxEnvelopeTempo, {
type: 'tempo',
} as never).success,
).toBe(false)
})
test('decodes the tempo type literal', () => {
expect(z.decode(z_TxEnvelopeTempo.Type, 'tempo')).toBe('tempo')
})
})
describe('serialized', () => {
test('decodes a serialized envelope', () => {
const signed = core_TxEnvelopeTempo.from(envelope, { signature })
const serialized = core_TxEnvelopeTempo.serialize(signed)
expect(z.decode(z_TxEnvelopeTempo.serialized, serialized)).toMatchObject({
chainId: 1,
type: 'tempo',
})
})
test('round-trips a serialized envelope via encode', () => {
const signed = core_TxEnvelopeTempo.from(envelope, { signature })
const serialized = core_TxEnvelopeTempo.serialize(signed)
const decoded = z.decode(z_TxEnvelopeTempo.serialized, serialized)
expect(z.encode(z_TxEnvelopeTempo.serialized, decoded)).toBe(serialized)
})
})