ox 0.9.16 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/README.md +4 -4
- package/TxEnvelope/package.json +6 -0
- package/TxEnvelopeEip1559/package.json +6 -0
- package/TxEnvelopeEip2930/package.json +6 -0
- package/TxEnvelopeEip4844/package.json +6 -0
- package/TxEnvelopeEip7702/package.json +6 -0
- package/TxEnvelopeLegacy/package.json +6 -0
- package/_cjs/core/{TransactionEnvelope.js → TxEnvelope.js} +1 -1
- package/_cjs/core/TxEnvelope.js.map +1 -0
- package/_cjs/core/{TransactionEnvelopeEip1559.js → TxEnvelopeEip1559.js} +2 -2
- package/_cjs/core/TxEnvelopeEip1559.js.map +1 -0
- package/_cjs/core/{TransactionEnvelopeEip2930.js → TxEnvelopeEip2930.js} +2 -2
- package/_cjs/core/TxEnvelopeEip2930.js.map +1 -0
- package/_cjs/core/{TransactionEnvelopeEip4844.js → TxEnvelopeEip4844.js} +4 -4
- package/_cjs/core/TxEnvelopeEip4844.js.map +1 -0
- package/_cjs/core/{TransactionEnvelopeEip7702.js → TxEnvelopeEip7702.js} +4 -4
- package/_cjs/core/TxEnvelopeEip7702.js.map +1 -0
- package/_cjs/core/{TransactionEnvelopeLegacy.js → TxEnvelopeLegacy.js} +2 -2
- package/_cjs/core/TxEnvelopeLegacy.js.map +1 -0
- package/_cjs/core/WebAuthnP256.js +1 -1
- package/_cjs/core/WebAuthnP256.js.map +1 -1
- package/_cjs/erc8021/Attribution.js +36 -6
- package/_cjs/erc8021/Attribution.js.map +1 -1
- package/_cjs/index.docs.js +1 -0
- package/_cjs/index.docs.js.map +1 -1
- package/_cjs/index.js +7 -7
- package/_cjs/index.js.map +1 -1
- package/_cjs/tempo/AuthorizationTempo.js +101 -0
- package/_cjs/tempo/AuthorizationTempo.js.map +1 -0
- package/_cjs/tempo/KeyAuthorization.js +123 -0
- package/_cjs/tempo/KeyAuthorization.js.map +1 -0
- package/_cjs/tempo/PoolId.js +10 -0
- package/_cjs/tempo/PoolId.js.map +1 -0
- package/_cjs/tempo/SignatureEnvelope.js +394 -0
- package/_cjs/tempo/SignatureEnvelope.js.map +1 -0
- package/_cjs/tempo/Tick.js +77 -0
- package/_cjs/tempo/Tick.js.map +1 -0
- package/_cjs/tempo/TokenId.js +28 -0
- package/_cjs/tempo/TokenId.js.map +1 -0
- package/_cjs/tempo/TokenRole.js +26 -0
- package/_cjs/tempo/TokenRole.js.map +1 -0
- package/_cjs/tempo/Transaction.js +80 -0
- package/_cjs/tempo/Transaction.js.map +1 -0
- package/_cjs/tempo/TransactionReceipt.js +26 -0
- package/_cjs/tempo/TransactionReceipt.js.map +1 -0
- package/_cjs/tempo/TransactionRequest.js +53 -0
- package/_cjs/tempo/TransactionRequest.js.map +1 -0
- package/_cjs/tempo/TxEnvelopeTempo.js +267 -0
- package/_cjs/tempo/TxEnvelopeTempo.js.map +1 -0
- package/_cjs/tempo/index.js +15 -0
- package/_cjs/tempo/index.js.map +1 -0
- package/_cjs/version.js +1 -1
- package/_esm/core/Blobs.js +8 -8
- package/_esm/core/{TransactionEnvelope.js → TxEnvelope.js} +11 -11
- package/_esm/core/TxEnvelope.js.map +1 -0
- package/_esm/core/{TransactionEnvelopeEip1559.js → TxEnvelopeEip1559.js} +42 -42
- package/_esm/core/TxEnvelopeEip1559.js.map +1 -0
- package/_esm/core/{TransactionEnvelopeEip2930.js → TxEnvelopeEip2930.js} +43 -43
- package/_esm/core/TxEnvelopeEip2930.js.map +1 -0
- package/_esm/core/{TransactionEnvelopeEip4844.js → TxEnvelopeEip4844.js} +42 -42
- package/_esm/core/TxEnvelopeEip4844.js.map +1 -0
- package/_esm/core/{TransactionEnvelopeEip7702.js → TxEnvelopeEip7702.js} +40 -40
- package/_esm/core/TxEnvelopeEip7702.js.map +1 -0
- package/_esm/core/{TransactionEnvelopeLegacy.js → TxEnvelopeLegacy.js} +42 -42
- package/_esm/core/TxEnvelopeLegacy.js.map +1 -0
- package/_esm/core/WebAuthnP256.js +1 -1
- package/_esm/core/WebAuthnP256.js.map +1 -1
- package/_esm/erc8021/Attribution.js +58 -13
- package/_esm/erc8021/Attribution.js.map +1 -1
- package/_esm/index.docs.js +1 -0
- package/_esm/index.docs.js.map +1 -1
- package/_esm/index.js +192 -192
- package/_esm/index.js.map +1 -1
- package/_esm/tempo/AuthorizationTempo.js +664 -0
- package/_esm/tempo/AuthorizationTempo.js.map +1 -0
- package/_esm/tempo/KeyAuthorization.js +426 -0
- package/_esm/tempo/KeyAuthorization.js.map +1 -0
- package/_esm/tempo/PoolId.js +28 -0
- package/_esm/tempo/PoolId.js.map +1 -0
- package/_esm/tempo/SignatureEnvelope.js +660 -0
- package/_esm/tempo/SignatureEnvelope.js.map +1 -0
- package/_esm/tempo/Tick.js +147 -0
- package/_esm/tempo/Tick.js.map +1 -0
- package/_esm/tempo/TokenId.js +71 -0
- package/_esm/tempo/TokenId.js.map +1 -0
- package/_esm/tempo/TokenRole.js +40 -0
- package/_esm/tempo/TokenRole.js.map +1 -0
- package/_esm/tempo/Transaction.js +167 -0
- package/_esm/tempo/Transaction.js.map +1 -0
- package/_esm/tempo/TransactionReceipt.js +138 -0
- package/_esm/tempo/TransactionReceipt.js.map +1 -0
- package/_esm/tempo/TransactionRequest.js +99 -0
- package/_esm/tempo/TransactionRequest.js.map +1 -0
- package/_esm/tempo/TxEnvelopeTempo.js +607 -0
- package/_esm/tempo/TxEnvelopeTempo.js.map +1 -0
- package/_esm/tempo/index.js +298 -0
- package/_esm/tempo/index.js.map +1 -0
- package/_esm/version.js +1 -1
- package/_types/core/Blobs.d.ts +8 -8
- package/_types/core/{TransactionEnvelope.d.ts → TxEnvelope.d.ts} +11 -11
- package/_types/core/TxEnvelope.d.ts.map +1 -0
- package/_types/core/{TransactionEnvelopeEip1559.d.ts → TxEnvelopeEip1559.d.ts} +54 -54
- package/_types/core/TxEnvelopeEip1559.d.ts.map +1 -0
- package/_types/core/{TransactionEnvelopeEip2930.d.ts → TxEnvelopeEip2930.d.ts} +55 -55
- package/_types/core/TxEnvelopeEip2930.d.ts.map +1 -0
- package/_types/core/{TransactionEnvelopeEip4844.d.ts → TxEnvelopeEip4844.d.ts} +54 -54
- package/_types/core/TxEnvelopeEip4844.d.ts.map +1 -0
- package/_types/core/{TransactionEnvelopeEip7702.d.ts → TxEnvelopeEip7702.d.ts} +49 -49
- package/_types/core/TxEnvelopeEip7702.d.ts.map +1 -0
- package/_types/core/{TransactionEnvelopeLegacy.d.ts → TxEnvelopeLegacy.d.ts} +54 -54
- package/_types/core/TxEnvelopeLegacy.d.ts.map +1 -0
- package/_types/core/WebAuthnP256.d.ts +1 -1
- package/_types/core/WebAuthnP256.d.ts.map +1 -1
- package/_types/erc8021/Attribution.d.ts +20 -6
- package/_types/erc8021/Attribution.d.ts.map +1 -1
- package/_types/index.d.ts +192 -192
- package/_types/index.d.ts.map +1 -1
- package/_types/index.docs.d.ts +1 -0
- package/_types/index.docs.d.ts.map +1 -1
- package/_types/tempo/AuthorizationTempo.d.ts +688 -0
- package/_types/tempo/AuthorizationTempo.d.ts.map +1 -0
- package/_types/tempo/KeyAuthorization.d.ts +437 -0
- package/_types/tempo/KeyAuthorization.d.ts.map +1 -0
- package/_types/tempo/PoolId.d.ts +33 -0
- package/_types/tempo/PoolId.d.ts.map +1 -0
- package/_types/tempo/SignatureEnvelope.d.ts +438 -0
- package/_types/tempo/SignatureEnvelope.d.ts.map +1 -0
- package/_types/tempo/Tick.d.ts +120 -0
- package/_types/tempo/Tick.d.ts.map +1 -0
- package/_types/tempo/TokenId.d.ts +55 -0
- package/_types/tempo/TokenId.d.ts.map +1 -0
- package/_types/tempo/TokenRole.d.ts +29 -0
- package/_types/tempo/TokenRole.d.ts.map +1 -0
- package/_types/tempo/Transaction.d.ts +208 -0
- package/_types/tempo/Transaction.d.ts.map +1 -0
- package/_types/tempo/TransactionReceipt.d.ts +165 -0
- package/_types/tempo/TransactionReceipt.d.ts.map +1 -0
- package/_types/tempo/TransactionRequest.d.ts +89 -0
- package/_types/tempo/TransactionRequest.d.ts.map +1 -0
- package/_types/tempo/TxEnvelopeTempo.d.ts +551 -0
- package/_types/tempo/TxEnvelopeTempo.d.ts.map +1 -0
- package/_types/tempo/index.d.ts +300 -0
- package/_types/tempo/index.d.ts.map +1 -0
- package/_types/version.d.ts +1 -1
- package/core/Blobs.ts +8 -8
- package/core/{TransactionEnvelope.ts → TxEnvelope.ts} +10 -10
- package/core/{TransactionEnvelopeEip1559.ts → TxEnvelopeEip1559.ts} +60 -69
- package/core/{TransactionEnvelopeEip2930.ts → TxEnvelopeEip2930.ts} +61 -72
- package/core/{TransactionEnvelopeEip4844.ts → TxEnvelopeEip4844.ts} +62 -71
- package/core/{TransactionEnvelopeEip7702.ts → TxEnvelopeEip7702.ts} +58 -67
- package/core/{TransactionEnvelopeLegacy.ts → TxEnvelopeLegacy.ts} +59 -68
- package/core/WebAuthnP256.ts +3 -1
- package/erc8021/Attribution.ts +77 -15
- package/index.docs.ts +1 -0
- package/index.ts +192 -195
- package/package.json +91 -31
- package/tempo/AuthorizationTempo/package.json +6 -0
- package/tempo/AuthorizationTempo.test.ts +1293 -0
- package/tempo/AuthorizationTempo.ts +884 -0
- package/tempo/KeyAuthorization/package.json +6 -0
- package/tempo/KeyAuthorization.test.ts +1373 -0
- package/tempo/KeyAuthorization.ts +622 -0
- package/tempo/PoolId/package.json +6 -0
- package/tempo/PoolId.test.ts +33 -0
- package/tempo/PoolId.ts +42 -0
- package/tempo/SignatureEnvelope/package.json +6 -0
- package/tempo/SignatureEnvelope.test.ts +1877 -0
- package/tempo/SignatureEnvelope.ts +973 -0
- package/tempo/Tick/package.json +6 -0
- package/tempo/Tick.test.ts +281 -0
- package/tempo/Tick.ts +186 -0
- package/tempo/TokenId/package.json +6 -0
- package/tempo/TokenId.test.ts +40 -0
- package/tempo/TokenId.ts +80 -0
- package/tempo/TokenRole/package.json +6 -0
- package/tempo/TokenRole.test.ts +16 -0
- package/tempo/TokenRole.ts +45 -0
- package/tempo/Transaction/package.json +6 -0
- package/tempo/Transaction.test.ts +523 -0
- package/tempo/Transaction.ts +339 -0
- package/tempo/TransactionReceipt/package.json +6 -0
- package/tempo/TransactionReceipt.ts +200 -0
- package/tempo/TransactionRequest/package.json +6 -0
- package/tempo/TransactionRequest.ts +160 -0
- package/tempo/TxEnvelopeTempo/package.json +6 -0
- package/tempo/TxEnvelopeTempo.test.ts +1371 -0
- package/tempo/TxEnvelopeTempo.ts +972 -0
- package/tempo/e2e.test.ts +1387 -0
- package/tempo/index.ts +308 -0
- package/tempo/package.json +6 -0
- package/version.ts +1 -1
- package/TransactionEnvelope/package.json +0 -6
- package/TransactionEnvelopeEip1559/package.json +0 -6
- package/TransactionEnvelopeEip2930/package.json +0 -6
- package/TransactionEnvelopeEip4844/package.json +0 -6
- package/TransactionEnvelopeEip7702/package.json +0 -6
- package/TransactionEnvelopeLegacy/package.json +0 -6
- package/_cjs/core/TransactionEnvelope.js.map +0 -1
- package/_cjs/core/TransactionEnvelopeEip1559.js.map +0 -1
- package/_cjs/core/TransactionEnvelopeEip2930.js.map +0 -1
- package/_cjs/core/TransactionEnvelopeEip4844.js.map +0 -1
- package/_cjs/core/TransactionEnvelopeEip7702.js.map +0 -1
- package/_cjs/core/TransactionEnvelopeLegacy.js.map +0 -1
- package/_esm/core/TransactionEnvelope.js.map +0 -1
- package/_esm/core/TransactionEnvelopeEip1559.js.map +0 -1
- package/_esm/core/TransactionEnvelopeEip2930.js.map +0 -1
- package/_esm/core/TransactionEnvelopeEip4844.js.map +0 -1
- package/_esm/core/TransactionEnvelopeEip7702.js.map +0 -1
- package/_esm/core/TransactionEnvelopeLegacy.js.map +0 -1
- package/_types/core/TransactionEnvelope.d.ts.map +0 -1
- package/_types/core/TransactionEnvelopeEip1559.d.ts.map +0 -1
- package/_types/core/TransactionEnvelopeEip2930.d.ts.map +0 -1
- package/_types/core/TransactionEnvelopeEip4844.d.ts.map +0 -1
- package/_types/core/TransactionEnvelopeEip7702.d.ts.map +0 -1
- package/_types/core/TransactionEnvelopeLegacy.d.ts.map +0 -1
|
@@ -0,0 +1,607 @@
|
|
|
1
|
+
import * as AccessList from '../core/AccessList.js';
|
|
2
|
+
import * as Address from '../core/Address.js';
|
|
3
|
+
import * as Errors from '../core/Errors.js';
|
|
4
|
+
import * as Hash from '../core/Hash.js';
|
|
5
|
+
import * as Hex from '../core/Hex.js';
|
|
6
|
+
import * as Rlp from '../core/Rlp.js';
|
|
7
|
+
import * as Signature from '../core/Signature.js';
|
|
8
|
+
import * as TransactionEnvelope from '../core/TxEnvelope.js';
|
|
9
|
+
import * as AuthorizationTempo from './AuthorizationTempo.js';
|
|
10
|
+
import * as KeyAuthorization from './KeyAuthorization.js';
|
|
11
|
+
import * as SignatureEnvelope from './SignatureEnvelope.js';
|
|
12
|
+
import * as TokenId from './TokenId.js';
|
|
13
|
+
export const feePayerMagic = '0x78';
|
|
14
|
+
export const serializedType = '0x76';
|
|
15
|
+
export const type = 'tempo';
|
|
16
|
+
/**
|
|
17
|
+
* Asserts a {@link ox#TxEnvelopeTempo.TxEnvelopeTempo} is valid.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts twoslash
|
|
21
|
+
* import { TxEnvelopeTempo } from 'ox/tempo'
|
|
22
|
+
*
|
|
23
|
+
* TxEnvelopeTempo.assert({
|
|
24
|
+
* calls: [{ to: '0x0000000000000000000000000000000000000000', value: 0n }],
|
|
25
|
+
* chainId: 1,
|
|
26
|
+
* maxFeePerGas: 1000000000n,
|
|
27
|
+
* })
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @param envelope - The transaction envelope to assert.
|
|
31
|
+
*/
|
|
32
|
+
export function assert(envelope) {
|
|
33
|
+
const { calls, chainId, maxFeePerGas, maxPriorityFeePerGas, validBefore, validAfter, } = envelope;
|
|
34
|
+
// Calls must not be empty
|
|
35
|
+
if (!calls || calls.length === 0)
|
|
36
|
+
throw new CallsEmptyError();
|
|
37
|
+
// validBefore must be greater than validAfter if both are set
|
|
38
|
+
if (typeof validBefore === 'number' &&
|
|
39
|
+
typeof validAfter === 'number' &&
|
|
40
|
+
validBefore <= validAfter) {
|
|
41
|
+
throw new InvalidValidityWindowError({
|
|
42
|
+
validBefore: validBefore,
|
|
43
|
+
validAfter: validAfter,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
// Validate each call
|
|
47
|
+
if (calls)
|
|
48
|
+
for (const call of calls)
|
|
49
|
+
if (call.to)
|
|
50
|
+
Address.assert(call.to, { strict: false });
|
|
51
|
+
// Validate chain ID
|
|
52
|
+
if (chainId <= 0)
|
|
53
|
+
throw new TransactionEnvelope.InvalidChainIdError({ chainId });
|
|
54
|
+
// Validate max fee per gas
|
|
55
|
+
if (maxFeePerGas && BigInt(maxFeePerGas) > 2n ** 256n - 1n)
|
|
56
|
+
throw new TransactionEnvelope.FeeCapTooHighError({
|
|
57
|
+
feeCap: maxFeePerGas,
|
|
58
|
+
});
|
|
59
|
+
if (maxPriorityFeePerGas &&
|
|
60
|
+
maxFeePerGas &&
|
|
61
|
+
maxPriorityFeePerGas > maxFeePerGas)
|
|
62
|
+
throw new TransactionEnvelope.TipAboveFeeCapError({
|
|
63
|
+
maxFeePerGas,
|
|
64
|
+
maxPriorityFeePerGas,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Deserializes a {@link ox#TxEnvelopeTempo.TxEnvelopeTempo} from its serialized form.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts twoslash
|
|
72
|
+
* import { TxEnvelopeTempo } from 'ox/tempo'
|
|
73
|
+
*
|
|
74
|
+
* const envelope = TxEnvelopeTempo.deserialize('0x76f84a0182031184773594008477359400809470997970c51812dc3a010c7d01b50e0d17dc79c8880de0b6b3a764000080c0808080')
|
|
75
|
+
* // @log: {
|
|
76
|
+
* // @log: type: 'tempo',
|
|
77
|
+
* // @log: nonce: 785n,
|
|
78
|
+
* // @log: maxFeePerGas: 2000000000n,
|
|
79
|
+
* // @log: gas: 1000000n,
|
|
80
|
+
* // @log: calls: [{ to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8', value: 1000000000000000000n }],
|
|
81
|
+
* // @log: }
|
|
82
|
+
* ```
|
|
83
|
+
*
|
|
84
|
+
* @param serialized - The serialized transaction.
|
|
85
|
+
* @returns Deserialized Transaction Envelope.
|
|
86
|
+
*/
|
|
87
|
+
export function deserialize(serialized) {
|
|
88
|
+
const transactionArray = Rlp.toHex(Hex.slice(serialized, 1));
|
|
89
|
+
const [chainId, maxPriorityFeePerGas, maxFeePerGas, gas, calls, accessList, nonceKey, nonce, validBefore, validAfter, feeToken, feePayerSignatureOrSender, authorizationList, keyAuthorizationOrSignature, maybeSignature,] = transactionArray;
|
|
90
|
+
const keyAuthorization = Array.isArray(keyAuthorizationOrSignature)
|
|
91
|
+
? keyAuthorizationOrSignature
|
|
92
|
+
: undefined;
|
|
93
|
+
const signature = keyAuthorization
|
|
94
|
+
? maybeSignature
|
|
95
|
+
: keyAuthorizationOrSignature;
|
|
96
|
+
if (!(transactionArray.length === 13 ||
|
|
97
|
+
transactionArray.length === 14 ||
|
|
98
|
+
transactionArray.length === 15))
|
|
99
|
+
throw new TransactionEnvelope.InvalidSerializedError({
|
|
100
|
+
attributes: {
|
|
101
|
+
authorizationList,
|
|
102
|
+
chainId,
|
|
103
|
+
maxPriorityFeePerGas,
|
|
104
|
+
maxFeePerGas,
|
|
105
|
+
gas,
|
|
106
|
+
calls,
|
|
107
|
+
accessList,
|
|
108
|
+
keyAuthorization,
|
|
109
|
+
nonceKey,
|
|
110
|
+
nonce,
|
|
111
|
+
validBefore,
|
|
112
|
+
validAfter,
|
|
113
|
+
feeToken,
|
|
114
|
+
feePayerSignatureOrSender,
|
|
115
|
+
...(transactionArray.length > 12
|
|
116
|
+
? {
|
|
117
|
+
signature,
|
|
118
|
+
}
|
|
119
|
+
: {}),
|
|
120
|
+
},
|
|
121
|
+
serialized,
|
|
122
|
+
type,
|
|
123
|
+
});
|
|
124
|
+
let transaction = {
|
|
125
|
+
chainId: Number(chainId),
|
|
126
|
+
type,
|
|
127
|
+
};
|
|
128
|
+
if (Hex.validate(gas) && gas !== '0x')
|
|
129
|
+
transaction.gas = BigInt(gas);
|
|
130
|
+
if (Hex.validate(nonce))
|
|
131
|
+
transaction.nonce = nonce === '0x' ? 0n : BigInt(nonce);
|
|
132
|
+
if (Hex.validate(maxFeePerGas) && maxFeePerGas !== '0x')
|
|
133
|
+
transaction.maxFeePerGas = BigInt(maxFeePerGas);
|
|
134
|
+
if (Hex.validate(maxPriorityFeePerGas) && maxPriorityFeePerGas !== '0x')
|
|
135
|
+
transaction.maxPriorityFeePerGas = BigInt(maxPriorityFeePerGas);
|
|
136
|
+
if (Hex.validate(nonceKey))
|
|
137
|
+
transaction.nonceKey = nonceKey === '0x' ? 0n : BigInt(nonceKey);
|
|
138
|
+
if (Hex.validate(validBefore) && validBefore !== '0x')
|
|
139
|
+
transaction.validBefore = Number(validBefore);
|
|
140
|
+
if (Hex.validate(validAfter) && validAfter !== '0x')
|
|
141
|
+
transaction.validAfter = Number(validAfter);
|
|
142
|
+
if (Hex.validate(feeToken) && feeToken !== '0x')
|
|
143
|
+
transaction.feeToken = feeToken;
|
|
144
|
+
// Parse calls array
|
|
145
|
+
if (calls && calls !== '0x') {
|
|
146
|
+
const callsArray = calls;
|
|
147
|
+
transaction.calls = callsArray.map((callTuple) => {
|
|
148
|
+
const [to, value, data] = callTuple;
|
|
149
|
+
const call = {};
|
|
150
|
+
if (to && to !== '0x')
|
|
151
|
+
call.to = to;
|
|
152
|
+
if (value && value !== '0x')
|
|
153
|
+
call.value = BigInt(value);
|
|
154
|
+
if (data && data !== '0x')
|
|
155
|
+
call.data = data;
|
|
156
|
+
return call;
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
if (accessList?.length !== 0 && accessList !== '0x')
|
|
160
|
+
transaction.accessList = AccessList.fromTupleList(accessList);
|
|
161
|
+
if (authorizationList?.length !== 0 && authorizationList !== '0x')
|
|
162
|
+
transaction.authorizationList = AuthorizationTempo.fromTupleList(authorizationList);
|
|
163
|
+
if (feePayerSignatureOrSender !== '0x' &&
|
|
164
|
+
feePayerSignatureOrSender !== undefined) {
|
|
165
|
+
if (feePayerSignatureOrSender === '0x00' ||
|
|
166
|
+
Address.validate(feePayerSignatureOrSender))
|
|
167
|
+
transaction.feePayerSignature = null;
|
|
168
|
+
else
|
|
169
|
+
transaction.feePayerSignature = Signature.fromTuple(feePayerSignatureOrSender);
|
|
170
|
+
}
|
|
171
|
+
if (keyAuthorization)
|
|
172
|
+
transaction.keyAuthorization = KeyAuthorization.fromTuple(keyAuthorization);
|
|
173
|
+
const signatureEnvelope = signature
|
|
174
|
+
? SignatureEnvelope.deserialize(signature)
|
|
175
|
+
: undefined;
|
|
176
|
+
if (signatureEnvelope)
|
|
177
|
+
transaction = {
|
|
178
|
+
...transaction,
|
|
179
|
+
signature: signatureEnvelope,
|
|
180
|
+
};
|
|
181
|
+
assert(transaction);
|
|
182
|
+
return transaction;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Converts an arbitrary transaction object into a Tempo Transaction Envelope.
|
|
186
|
+
*
|
|
187
|
+
* Use this to create transaction envelopes with Tempo-specific features like batched calls,
|
|
188
|
+
* fee tokens, access keys, and scheduled execution. Attach a signature using the `signature`
|
|
189
|
+
* option after signing with {@link ox#TxEnvelopeTempo.(getSignPayload:function)}.
|
|
190
|
+
*
|
|
191
|
+
* [Tempo Transaction Specification](https://docs.tempo.xyz/protocol/transactions/spec-tempo-transaction)
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* ```ts twoslash
|
|
195
|
+
* import { Value } from 'ox'
|
|
196
|
+
* import { TxEnvelopeTempo } from 'ox/tempo'
|
|
197
|
+
*
|
|
198
|
+
* const envelope = TxEnvelopeTempo.from({ // [!code focus]
|
|
199
|
+
* chainId: 1, // [!code focus]
|
|
200
|
+
* calls: [{ // [!code focus]
|
|
201
|
+
* data: '0xdeadbeef', // [!code focus]
|
|
202
|
+
* to: '0x0000000000000000000000000000000000000000', // [!code focus]
|
|
203
|
+
* }], // [!code focus]
|
|
204
|
+
* maxFeePerGas: Value.fromGwei('10'), // [!code focus]
|
|
205
|
+
* maxPriorityFeePerGas: Value.fromGwei('1'), // [!code focus]
|
|
206
|
+
* }) // [!code focus]
|
|
207
|
+
* ```
|
|
208
|
+
*
|
|
209
|
+
* @example
|
|
210
|
+
* ### Attaching Signatures
|
|
211
|
+
*
|
|
212
|
+
* It is possible to attach a `signature` to the transaction envelope.
|
|
213
|
+
*
|
|
214
|
+
* ```ts twoslash
|
|
215
|
+
* // @noErrors
|
|
216
|
+
* import { Secp256k1, Value } from 'ox'
|
|
217
|
+
* import { TxEnvelopeTempo } from 'ox/tempo'
|
|
218
|
+
*
|
|
219
|
+
* const envelope = TxEnvelopeTempo.from({
|
|
220
|
+
* chainId: 1,
|
|
221
|
+
* calls: [{
|
|
222
|
+
* data: '0xdeadbeef',
|
|
223
|
+
* to: '0x0000000000000000000000000000000000000000',
|
|
224
|
+
* }],
|
|
225
|
+
* maxFeePerGas: Value.fromGwei('10'),
|
|
226
|
+
* maxPriorityFeePerGas: Value.fromGwei('1'),
|
|
227
|
+
* })
|
|
228
|
+
*
|
|
229
|
+
* const signature = Secp256k1.sign({
|
|
230
|
+
* payload: TxEnvelopeTempo.getSignPayload(envelope),
|
|
231
|
+
* privateKey: '0x...',
|
|
232
|
+
* })
|
|
233
|
+
*
|
|
234
|
+
* const envelope_signed = TxEnvelopeTempo.from(envelope, { // [!code focus]
|
|
235
|
+
* signature, // [!code focus]
|
|
236
|
+
* }) // [!code focus]
|
|
237
|
+
* // @log: {
|
|
238
|
+
* // @log: chainId: 1,
|
|
239
|
+
* // @log: calls: [{ to: '0x0000000000000000000000000000000000000000', value: 1000000000000000000n }],
|
|
240
|
+
* // @log: maxFeePerGas: 10000000000n,
|
|
241
|
+
* // @log: maxPriorityFeePerGas: 1000000000n,
|
|
242
|
+
* // @log: type: 'tempo',
|
|
243
|
+
* // @log: r: 125...n,
|
|
244
|
+
* // @log: s: 642...n,
|
|
245
|
+
* // @log: yParity: 0,
|
|
246
|
+
* // @log: }
|
|
247
|
+
* ```
|
|
248
|
+
*
|
|
249
|
+
* @example
|
|
250
|
+
* ### From Serialized
|
|
251
|
+
*
|
|
252
|
+
* It is possible to instantiate a Tempo Transaction Envelope from a {@link ox#TxEnvelopeTempo.Serialized} value.
|
|
253
|
+
*
|
|
254
|
+
* ```ts twoslash
|
|
255
|
+
* import { TxEnvelopeTempo } from 'ox/tempo'
|
|
256
|
+
*
|
|
257
|
+
* const envelope = TxEnvelopeTempo.from('0x76f84a0182031184773594008477359400809470997970c51812dc3a010c7d01b50e0d17dc79c8880de0b6b3a764000080c0808080')
|
|
258
|
+
* // @log: {
|
|
259
|
+
* // @log: chainId: 1,
|
|
260
|
+
* // @log: calls: [{
|
|
261
|
+
* // @log: data: '0xdeadbeef',
|
|
262
|
+
* // @log: to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
|
|
263
|
+
* // @log: }],
|
|
264
|
+
* // @log: maxFeePerGas: 10000000000n,
|
|
265
|
+
* // @log: type: 'tempo',
|
|
266
|
+
* // @log: }
|
|
267
|
+
* ```
|
|
268
|
+
*
|
|
269
|
+
* @param envelope - The transaction object to convert.
|
|
270
|
+
* @param options - Options.
|
|
271
|
+
* @returns A Tempo Transaction Envelope.
|
|
272
|
+
*/
|
|
273
|
+
export function from(envelope, options = {}) {
|
|
274
|
+
const { feePayerSignature, signature } = options;
|
|
275
|
+
const envelope_ = (typeof envelope === 'string' ? deserialize(envelope) : envelope);
|
|
276
|
+
assert(envelope_);
|
|
277
|
+
return {
|
|
278
|
+
...envelope_,
|
|
279
|
+
...(signature ? { signature: SignatureEnvelope.from(signature) } : {}),
|
|
280
|
+
...(feePayerSignature
|
|
281
|
+
? { feePayerSignature: Signature.from(feePayerSignature) }
|
|
282
|
+
: {}),
|
|
283
|
+
type: 'tempo',
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Serializes a {@link ox#TxEnvelopeTempo.TxEnvelopeTempo}.
|
|
288
|
+
*
|
|
289
|
+
* RLP-encodes the transaction with type prefix `0x76`. For fee sponsorship, use `format: 'feePayer'`
|
|
290
|
+
* to serialize with the fee payer magic `0x78` and the sender address.
|
|
291
|
+
*
|
|
292
|
+
* [RLP Encoding](https://docs.tempo.xyz/protocol/transactions/spec-tempo-transaction#rlp-encoding)
|
|
293
|
+
*
|
|
294
|
+
* @example
|
|
295
|
+
* ```ts twoslash
|
|
296
|
+
* // @noErrors
|
|
297
|
+
* import { Value } from 'ox'
|
|
298
|
+
* import { TxEnvelopeTempo } from 'ox/tempo'
|
|
299
|
+
*
|
|
300
|
+
* const envelope = TxEnvelopeTempo.from({
|
|
301
|
+
* chainId: 1,
|
|
302
|
+
* calls: [{
|
|
303
|
+
* data: '0xdeadbeef',
|
|
304
|
+
* to: '0x0000000000000000000000000000000000000000',
|
|
305
|
+
* }],
|
|
306
|
+
* maxFeePerGas: Value.fromGwei('10'),
|
|
307
|
+
* })
|
|
308
|
+
*
|
|
309
|
+
* const serialized = TxEnvelopeTempo.serialize(envelope) // [!code focus]
|
|
310
|
+
* ```
|
|
311
|
+
*
|
|
312
|
+
* @example
|
|
313
|
+
* ### Attaching Signatures
|
|
314
|
+
*
|
|
315
|
+
* It is possible to attach a `signature` to the serialized Transaction Envelope.
|
|
316
|
+
*
|
|
317
|
+
* ```ts twoslash
|
|
318
|
+
* // @noErrors
|
|
319
|
+
* import { Secp256k1, Value } from 'ox'
|
|
320
|
+
* import { TxEnvelopeTempo } from 'ox/tempo'
|
|
321
|
+
*
|
|
322
|
+
* const envelope = TxEnvelopeTempo.from({
|
|
323
|
+
* chainId: 1,
|
|
324
|
+
* calls: [{
|
|
325
|
+
* data: '0xdeadbeef',
|
|
326
|
+
* to: '0x0000000000000000000000000000000000000000',
|
|
327
|
+
* }],
|
|
328
|
+
* maxFeePerGas: Value.fromGwei('10'),
|
|
329
|
+
* })
|
|
330
|
+
*
|
|
331
|
+
* const signature = Secp256k1.sign({
|
|
332
|
+
* payload: TxEnvelopeTempo.getSignPayload(envelope),
|
|
333
|
+
* privateKey: '0x...',
|
|
334
|
+
* })
|
|
335
|
+
*
|
|
336
|
+
* const serialized = TxEnvelopeTempo.serialize(envelope, { // [!code focus]
|
|
337
|
+
* signature, // [!code focus]
|
|
338
|
+
* }) // [!code focus]
|
|
339
|
+
*
|
|
340
|
+
* // ... send `serialized` transaction to JSON-RPC `eth_sendRawTransaction`
|
|
341
|
+
* ```
|
|
342
|
+
*
|
|
343
|
+
* @param envelope - The Transaction Envelope to serialize.
|
|
344
|
+
* @param options - Options.
|
|
345
|
+
* @returns The serialized Transaction Envelope.
|
|
346
|
+
*/
|
|
347
|
+
export function serialize(envelope, options = {}) {
|
|
348
|
+
const { accessList, authorizationList, calls, chainId, feeToken, gas, keyAuthorization, nonce, nonceKey, maxFeePerGas, maxPriorityFeePerGas, validBefore, validAfter, } = envelope;
|
|
349
|
+
assert(envelope);
|
|
350
|
+
const accessTupleList = AccessList.toTupleList(accessList);
|
|
351
|
+
const signature = options.signature || envelope.signature;
|
|
352
|
+
const authorizationTupleList = AuthorizationTempo.toTupleList(authorizationList);
|
|
353
|
+
// Encode calls as RLP list of [to, value, data] tuples
|
|
354
|
+
const callsTupleList = calls.map((call) => [
|
|
355
|
+
call.to ?? '0x',
|
|
356
|
+
call.value ? Hex.fromNumber(call.value) : '0x',
|
|
357
|
+
call.data ?? '0x',
|
|
358
|
+
]);
|
|
359
|
+
const feePayerSignatureOrSender = (() => {
|
|
360
|
+
if (options.sender)
|
|
361
|
+
return options.sender;
|
|
362
|
+
const feePayerSignature = typeof options.feePayerSignature !== 'undefined'
|
|
363
|
+
? options.feePayerSignature
|
|
364
|
+
: envelope.feePayerSignature;
|
|
365
|
+
if (feePayerSignature === null)
|
|
366
|
+
return '0x00';
|
|
367
|
+
if (!feePayerSignature)
|
|
368
|
+
return '0x';
|
|
369
|
+
return Signature.toTuple(feePayerSignature);
|
|
370
|
+
})();
|
|
371
|
+
const serialized = [
|
|
372
|
+
Hex.fromNumber(chainId),
|
|
373
|
+
maxPriorityFeePerGas ? Hex.fromNumber(maxPriorityFeePerGas) : '0x',
|
|
374
|
+
maxFeePerGas ? Hex.fromNumber(maxFeePerGas) : '0x',
|
|
375
|
+
gas ? Hex.fromNumber(gas) : '0x',
|
|
376
|
+
callsTupleList,
|
|
377
|
+
accessTupleList,
|
|
378
|
+
nonceKey ? Hex.fromNumber(nonceKey) : '0x',
|
|
379
|
+
nonce ? Hex.fromNumber(nonce) : '0x',
|
|
380
|
+
typeof validBefore === 'number' ? Hex.fromNumber(validBefore) : '0x',
|
|
381
|
+
typeof validAfter === 'number' ? Hex.fromNumber(validAfter) : '0x',
|
|
382
|
+
typeof feeToken === 'bigint' || typeof feeToken === 'string'
|
|
383
|
+
? TokenId.toAddress(feeToken)
|
|
384
|
+
: '0x',
|
|
385
|
+
feePayerSignatureOrSender,
|
|
386
|
+
authorizationTupleList,
|
|
387
|
+
...(keyAuthorization ? [KeyAuthorization.toTuple(keyAuthorization)] : []),
|
|
388
|
+
...(signature
|
|
389
|
+
? [SignatureEnvelope.serialize(SignatureEnvelope.from(signature))]
|
|
390
|
+
: []),
|
|
391
|
+
];
|
|
392
|
+
return Hex.concat(options.format === 'feePayer' ? feePayerMagic : serializedType, Rlp.fromHex(serialized));
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Returns the payload to sign for a {@link ox#TxEnvelopeTempo.TxEnvelopeTempo}.
|
|
396
|
+
*
|
|
397
|
+
* Computes the keccak256 hash of the unsigned serialized transaction. Sign this payload
|
|
398
|
+
* with secp256k1, P256, or WebAuthn, then attach the signature via {@link ox#TxEnvelopeTempo.(from:function)}.
|
|
399
|
+
*
|
|
400
|
+
* [Tempo Transaction Specification](https://docs.tempo.xyz/protocol/transactions/spec-tempo-transaction)
|
|
401
|
+
*
|
|
402
|
+
* @example
|
|
403
|
+
* The example below demonstrates how to compute the sign payload which can be used
|
|
404
|
+
* with ECDSA signing utilities like {@link ox#Secp256k1.(sign:function)}.
|
|
405
|
+
*
|
|
406
|
+
* ```ts twoslash
|
|
407
|
+
* // @noErrors
|
|
408
|
+
* import { Secp256k1 } from 'ox'
|
|
409
|
+
* import { TxEnvelopeTempo } from 'ox/tempo'
|
|
410
|
+
*
|
|
411
|
+
* const envelope = TxEnvelopeTempo.from({
|
|
412
|
+
* chainId: 1,
|
|
413
|
+
* calls: [{
|
|
414
|
+
* data: '0xdeadbeef',
|
|
415
|
+
* to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
|
|
416
|
+
* }],
|
|
417
|
+
* nonce: 0n,
|
|
418
|
+
* maxFeePerGas: 1000000000n,
|
|
419
|
+
* gas: 21000n,
|
|
420
|
+
* })
|
|
421
|
+
*
|
|
422
|
+
* const payload = TxEnvelopeTempo.getSignPayload(envelope) // [!code focus]
|
|
423
|
+
* // @log: '0x...'
|
|
424
|
+
*
|
|
425
|
+
* const signature = Secp256k1.sign({ payload, privateKey: '0x...' })
|
|
426
|
+
* ```
|
|
427
|
+
*
|
|
428
|
+
* @param envelope - The transaction envelope to get the sign payload for.
|
|
429
|
+
* @returns The sign payload.
|
|
430
|
+
*/
|
|
431
|
+
export function getSignPayload(envelope) {
|
|
432
|
+
return hash(envelope, { presign: true });
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Hashes a {@link ox#TxEnvelopeTempo.TxEnvelopeTempo}. This is the "transaction hash".
|
|
436
|
+
*
|
|
437
|
+
* @example
|
|
438
|
+
* ```ts twoslash
|
|
439
|
+
* // @noErrors
|
|
440
|
+
* import { Secp256k1 } from 'ox'
|
|
441
|
+
* import { TxEnvelopeTempo } from 'ox/tempo'
|
|
442
|
+
*
|
|
443
|
+
* const envelope = TxEnvelopeTempo.from({
|
|
444
|
+
* chainId: 1,
|
|
445
|
+
* calls: [{
|
|
446
|
+
* data: '0xdeadbeef',
|
|
447
|
+
* to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
|
|
448
|
+
* }],
|
|
449
|
+
* nonce: 0n,
|
|
450
|
+
* maxFeePerGas: 1000000000n,
|
|
451
|
+
* gas: 21000n,
|
|
452
|
+
* })
|
|
453
|
+
*
|
|
454
|
+
* const signature = Secp256k1.sign({
|
|
455
|
+
* payload: TxEnvelopeTempo.getSignPayload(envelope),
|
|
456
|
+
* privateKey: '0x...'
|
|
457
|
+
* })
|
|
458
|
+
*
|
|
459
|
+
* const envelope_signed = TxEnvelopeTempo.from(envelope, { signature })
|
|
460
|
+
*
|
|
461
|
+
* const hash = TxEnvelopeTempo.hash(envelope_signed) // [!code focus]
|
|
462
|
+
* ```
|
|
463
|
+
*
|
|
464
|
+
* @param envelope - The Tempo Transaction Envelope to hash.
|
|
465
|
+
* @param options - Options.
|
|
466
|
+
* @returns The hash of the transaction envelope.
|
|
467
|
+
*/
|
|
468
|
+
export function hash(envelope, options = {}) {
|
|
469
|
+
const serialized = serialize({
|
|
470
|
+
...envelope,
|
|
471
|
+
...(options.presign
|
|
472
|
+
? {
|
|
473
|
+
signature: undefined,
|
|
474
|
+
}
|
|
475
|
+
: {}),
|
|
476
|
+
});
|
|
477
|
+
return Hash.keccak256(serialized);
|
|
478
|
+
}
|
|
479
|
+
/**
|
|
480
|
+
* Returns the fee payer payload to sign for a {@link ox#TxEnvelopeTempo.TxEnvelopeTempo}.
|
|
481
|
+
*
|
|
482
|
+
* Fee sponsorship uses a dual-signature scheme: the sender signs the transaction, then a fee payer
|
|
483
|
+
* signs over the transaction with the sender's address to commit to paying fees. The fee payer's
|
|
484
|
+
* signature includes the `feeToken` and `sender_address`, using magic byte `0x78` for domain separation.
|
|
485
|
+
*
|
|
486
|
+
* [Fee Payer Signature](https://docs.tempo.xyz/protocol/transactions/spec-tempo-transaction#fee-payer-signature)
|
|
487
|
+
* [Fee Sponsorship Guide](https://docs.tempo.xyz/protocol/transactions#fee-sponsorship)
|
|
488
|
+
*
|
|
489
|
+
* @example
|
|
490
|
+
* ```ts twoslash
|
|
491
|
+
* // @noErrors
|
|
492
|
+
* import { Secp256k1 } from 'ox'
|
|
493
|
+
* import { TxEnvelopeTempo } from 'ox/tempo'
|
|
494
|
+
*
|
|
495
|
+
* const envelope = TxEnvelopeTempo.from({
|
|
496
|
+
* chainId: 1,
|
|
497
|
+
* calls: [{
|
|
498
|
+
* data: '0xdeadbeef',
|
|
499
|
+
* to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
|
|
500
|
+
* }],
|
|
501
|
+
* nonce: 0n,
|
|
502
|
+
* maxFeePerGas: 1000000000n,
|
|
503
|
+
* gas: 21000n,
|
|
504
|
+
* })
|
|
505
|
+
*
|
|
506
|
+
* const payload = TxEnvelopeTempo.getFeePayerSignPayload(envelope, {
|
|
507
|
+
* sender: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045'
|
|
508
|
+
* }) // [!code focus]
|
|
509
|
+
* // @log: '0x...'
|
|
510
|
+
*
|
|
511
|
+
* const signature = Secp256k1.sign({ payload, privateKey: '0x...' })
|
|
512
|
+
* ```
|
|
513
|
+
*
|
|
514
|
+
* @param envelope - The transaction envelope to get the fee payer sign payload for.
|
|
515
|
+
* @param options - Options.
|
|
516
|
+
* @returns The fee payer sign payload.
|
|
517
|
+
*/
|
|
518
|
+
export function getFeePayerSignPayload(envelope, options) {
|
|
519
|
+
const { sender } = options;
|
|
520
|
+
const serialized = serialize({ ...envelope, signature: undefined }, {
|
|
521
|
+
sender,
|
|
522
|
+
format: 'feePayer',
|
|
523
|
+
});
|
|
524
|
+
return Hash.keccak256(serialized);
|
|
525
|
+
}
|
|
526
|
+
/**
|
|
527
|
+
* Validates a {@link ox#TxEnvelopeTempo.TxEnvelopeTempo}. Returns `true` if the envelope is valid, `false` otherwise.
|
|
528
|
+
*
|
|
529
|
+
* @example
|
|
530
|
+
* ```ts twoslash
|
|
531
|
+
* import { TxEnvelopeTempo } from 'ox/tempo'
|
|
532
|
+
*
|
|
533
|
+
* const valid = TxEnvelopeTempo.validate({
|
|
534
|
+
* calls: [{
|
|
535
|
+
* data: '0xdeadbeef',
|
|
536
|
+
* to: '0x0000000000000000000000000000000000000000',
|
|
537
|
+
* }],
|
|
538
|
+
* chainId: 1,
|
|
539
|
+
* maxFeePerGas: 1000000000n,
|
|
540
|
+
* })
|
|
541
|
+
* // @log: true
|
|
542
|
+
* ```
|
|
543
|
+
*
|
|
544
|
+
* @param envelope - The transaction envelope to validate.
|
|
545
|
+
*/
|
|
546
|
+
export function validate(envelope) {
|
|
547
|
+
try {
|
|
548
|
+
assert(envelope);
|
|
549
|
+
return true;
|
|
550
|
+
}
|
|
551
|
+
catch {
|
|
552
|
+
return false;
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
/**
|
|
556
|
+
* Thrown when a transaction's calls list is empty.
|
|
557
|
+
*
|
|
558
|
+
* @example
|
|
559
|
+
* ```ts twoslash
|
|
560
|
+
* import { TxEnvelopeTempo } from 'ox/tempo'
|
|
561
|
+
*
|
|
562
|
+
* TxEnvelopeTempo.assert({
|
|
563
|
+
* calls: [],
|
|
564
|
+
* chainId: 1,
|
|
565
|
+
* })
|
|
566
|
+
* // @error: TxEnvelopeTempo.CallsEmptyError: Calls list cannot be empty.
|
|
567
|
+
* ```
|
|
568
|
+
*/
|
|
569
|
+
export class CallsEmptyError extends Errors.BaseError {
|
|
570
|
+
constructor() {
|
|
571
|
+
super('Calls list cannot be empty.');
|
|
572
|
+
Object.defineProperty(this, "name", {
|
|
573
|
+
enumerable: true,
|
|
574
|
+
configurable: true,
|
|
575
|
+
writable: true,
|
|
576
|
+
value: 'TxEnvelopeTempo.CallsEmptyError'
|
|
577
|
+
});
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
/**
|
|
581
|
+
* Thrown when validBefore is not greater than validAfter.
|
|
582
|
+
*
|
|
583
|
+
* @example
|
|
584
|
+
* ```ts twoslash
|
|
585
|
+
* import { TxEnvelopeTempo } from 'ox/tempo'
|
|
586
|
+
*
|
|
587
|
+
* TxEnvelopeTempo.assert({
|
|
588
|
+
* calls: [{ to: '0x0000000000000000000000000000000000000000' }],
|
|
589
|
+
* chainId: 1,
|
|
590
|
+
* validBefore: 100,
|
|
591
|
+
* validAfter: 200,
|
|
592
|
+
* })
|
|
593
|
+
* // @error: TxEnvelopeTempo.InvalidValidityWindowError: validBefore (100) must be greater than validAfter (200).
|
|
594
|
+
* ```
|
|
595
|
+
*/
|
|
596
|
+
export class InvalidValidityWindowError extends Errors.BaseError {
|
|
597
|
+
constructor({ validBefore, validAfter, }) {
|
|
598
|
+
super(`validBefore (${validBefore}) must be greater than validAfter (${validAfter}).`);
|
|
599
|
+
Object.defineProperty(this, "name", {
|
|
600
|
+
enumerable: true,
|
|
601
|
+
configurable: true,
|
|
602
|
+
writable: true,
|
|
603
|
+
value: 'TxEnvelopeTempo.InvalidValidityWindowError'
|
|
604
|
+
});
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
//# sourceMappingURL=TxEnvelopeTempo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TxEnvelopeTempo.js","sourceRoot":"","sources":["../../tempo/TxEnvelopeTempo.ts"],"names":[],"mappings":"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"}
|