@hyperlane-xyz/sdk 30.0.0 → 30.1.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/dist/core/EvmCoreModule.d.ts.map +1 -1
- package/dist/core/EvmCoreModule.hardhat-test.js +22 -3
- package/dist/core/EvmCoreModule.hardhat-test.js.map +1 -1
- package/dist/core/EvmCoreModule.js +11 -0
- package/dist/core/EvmCoreModule.js.map +1 -1
- package/dist/core/HyperlaneCoreDeployer.d.ts +2 -1
- package/dist/core/HyperlaneCoreDeployer.d.ts.map +1 -1
- package/dist/core/HyperlaneCoreDeployer.js +13 -4
- package/dist/core/HyperlaneCoreDeployer.js.map +1 -1
- package/dist/core/MultiProtocolCore.test.js +1 -0
- package/dist/core/MultiProtocolCore.test.js.map +1 -1
- package/dist/core/TestCoreApp.d.ts +1 -0
- package/dist/core/TestCoreApp.d.ts.map +1 -1
- package/dist/core/contracts.d.ts +3 -1
- package/dist/core/contracts.d.ts.map +1 -1
- package/dist/core/contracts.js +4 -1
- package/dist/core/contracts.js.map +1 -1
- package/dist/core/types.d.ts +344 -16
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +4 -0
- package/dist/core/types.js.map +1 -1
- package/dist/fee/EvmTokenFeeDeployer.d.ts +2 -0
- package/dist/fee/EvmTokenFeeDeployer.d.ts.map +1 -1
- package/dist/fee/EvmTokenFeeDeployer.hardhat-test.js +80 -9
- package/dist/fee/EvmTokenFeeDeployer.hardhat-test.js.map +1 -1
- package/dist/fee/EvmTokenFeeDeployer.js +68 -25
- package/dist/fee/EvmTokenFeeDeployer.js.map +1 -1
- package/dist/fee/EvmTokenFeeModule.d.ts +5 -3
- package/dist/fee/EvmTokenFeeModule.d.ts.map +1 -1
- package/dist/fee/EvmTokenFeeModule.hardhat-test.js +384 -20
- package/dist/fee/EvmTokenFeeModule.hardhat-test.js.map +1 -1
- package/dist/fee/EvmTokenFeeModule.js +190 -68
- package/dist/fee/EvmTokenFeeModule.js.map +1 -1
- package/dist/fee/EvmTokenFeeReader.d.ts +15 -2
- package/dist/fee/EvmTokenFeeReader.d.ts.map +1 -1
- package/dist/fee/EvmTokenFeeReader.hardhat-test.d.ts.map +1 -1
- package/dist/fee/EvmTokenFeeReader.hardhat-test.js +191 -4
- package/dist/fee/EvmTokenFeeReader.hardhat-test.js.map +1 -1
- package/dist/fee/EvmTokenFeeReader.js +104 -13
- package/dist/fee/EvmTokenFeeReader.js.map +1 -1
- package/dist/fee/contracts.d.ts +3 -1
- package/dist/fee/contracts.d.ts.map +1 -1
- package/dist/fee/contracts.js +3 -1
- package/dist/fee/contracts.js.map +1 -1
- package/dist/fee/crossCollateralUtils.d.ts +8 -0
- package/dist/fee/crossCollateralUtils.d.ts.map +1 -0
- package/dist/fee/crossCollateralUtils.js +49 -0
- package/dist/fee/crossCollateralUtils.js.map +1 -0
- package/dist/fee/types.d.ts +296 -32
- package/dist/fee/types.d.ts.map +1 -1
- package/dist/fee/types.js +94 -11
- package/dist/fee/types.js.map +1 -1
- package/dist/fee/types.test.js +39 -1
- package/dist/fee/types.test.js.map +1 -1
- package/dist/gas/HyperlaneIgpDeployer.d.ts.map +1 -1
- package/dist/gas/HyperlaneIgpDeployer.js +6 -0
- package/dist/gas/HyperlaneIgpDeployer.js.map +1 -1
- package/dist/hook/EvmHookModule.d.ts +5 -1
- package/dist/hook/EvmHookModule.d.ts.map +1 -1
- package/dist/hook/EvmHookModule.hardhat-test.js +69 -1
- package/dist/hook/EvmHookModule.hardhat-test.js.map +1 -1
- package/dist/hook/EvmHookModule.js +65 -2
- package/dist/hook/EvmHookModule.js.map +1 -1
- package/dist/hook/EvmHookReader.d.ts.map +1 -1
- package/dist/hook/EvmHookReader.js +7 -1
- package/dist/hook/EvmHookReader.js.map +1 -1
- package/dist/hook/HyperlaneHookDeployer.d.ts +5 -0
- package/dist/hook/HyperlaneHookDeployer.d.ts.map +1 -1
- package/dist/hook/types.d.ts +60 -0
- package/dist/hook/types.d.ts.map +1 -1
- package/dist/hook/types.js +2 -0
- package/dist/hook/types.js.map +1 -1
- package/dist/ica/types.d.ts +236 -12
- package/dist/ica/types.d.ts.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/metadata/warpRouteConfig.d.ts +10 -8
- package/dist/metadata/warpRouteConfig.d.ts.map +1 -1
- package/dist/middleware/account/InterchainAccount.d.ts +8 -8
- package/dist/quoted-calls/builder.d.ts +52 -0
- package/dist/quoted-calls/builder.d.ts.map +1 -0
- package/dist/quoted-calls/builder.js +161 -0
- package/dist/quoted-calls/builder.js.map +1 -0
- package/dist/quoted-calls/builder.test.d.ts +2 -0
- package/dist/quoted-calls/builder.test.d.ts.map +1 -0
- package/dist/quoted-calls/builder.test.js +193 -0
- package/dist/quoted-calls/builder.test.js.map +1 -0
- package/dist/quoted-calls/codec.d.ts +94 -0
- package/dist/quoted-calls/codec.d.ts.map +1 -0
- package/dist/quoted-calls/codec.js +223 -0
- package/dist/quoted-calls/codec.js.map +1 -0
- package/dist/quoted-calls/codec.test.d.ts +2 -0
- package/dist/quoted-calls/codec.test.d.ts.map +1 -0
- package/dist/quoted-calls/codec.test.js +307 -0
- package/dist/quoted-calls/codec.test.js.map +1 -0
- package/dist/quoted-calls/types.d.ts +68 -0
- package/dist/quoted-calls/types.d.ts.map +1 -0
- package/dist/quoted-calls/types.js +22 -0
- package/dist/quoted-calls/types.js.map +1 -0
- package/dist/router/types.d.ts +246 -12
- package/dist/router/types.d.ts.map +1 -1
- package/dist/token/EvmWarpModule.d.ts +1 -0
- package/dist/token/EvmWarpModule.d.ts.map +1 -1
- package/dist/token/EvmWarpModule.hardhat-test.js +146 -2
- package/dist/token/EvmWarpModule.hardhat-test.js.map +1 -1
- package/dist/token/EvmWarpModule.js +36 -5
- package/dist/token/EvmWarpModule.js.map +1 -1
- package/dist/token/EvmWarpRouteReader.d.ts +3 -1
- package/dist/token/EvmWarpRouteReader.d.ts.map +1 -1
- package/dist/token/EvmWarpRouteReader.hardhat-test.js +129 -5
- package/dist/token/EvmWarpRouteReader.hardhat-test.js.map +1 -1
- package/dist/token/EvmWarpRouteReader.js +86 -24
- package/dist/token/EvmWarpRouteReader.js.map +1 -1
- package/dist/token/IToken.d.ts +2 -2
- package/dist/token/Token.d.ts.map +1 -1
- package/dist/token/Token.js +12 -1
- package/dist/token/Token.js.map +1 -1
- package/dist/token/Token.test.js +1 -0
- package/dist/token/Token.test.js.map +1 -1
- package/dist/token/TokenStandard.d.ts +2 -1
- package/dist/token/TokenStandard.d.ts.map +1 -1
- package/dist/token/TokenStandard.js +8 -0
- package/dist/token/TokenStandard.js.map +1 -1
- package/dist/token/adapters/EvmCrossCollateralAdapter.d.ts +1 -1
- package/dist/token/adapters/EvmCrossCollateralAdapter.d.ts.map +1 -1
- package/dist/token/adapters/EvmCrossCollateralAdapter.js +1 -1
- package/dist/token/adapters/EvmCrossCollateralAdapter.js.map +1 -1
- package/dist/token/adapters/EvmTokenAdapter.d.ts +2 -2
- package/dist/token/adapters/EvmTokenAdapter.d.ts.map +1 -1
- package/dist/token/adapters/EvmTokenAdapter.js +11 -5
- package/dist/token/adapters/EvmTokenAdapter.js.map +1 -1
- package/dist/token/adapters/ITokenAdapter.d.ts +20 -0
- package/dist/token/adapters/ITokenAdapter.d.ts.map +1 -1
- package/dist/token/adapters/ITokenAdapter.js +6 -1
- package/dist/token/adapters/ITokenAdapter.js.map +1 -1
- package/dist/token/adapters/SealevelCrossCollateralAdapter.d.ts +36 -0
- package/dist/token/adapters/SealevelCrossCollateralAdapter.d.ts.map +1 -0
- package/dist/token/adapters/SealevelCrossCollateralAdapter.js +364 -0
- package/dist/token/adapters/SealevelCrossCollateralAdapter.js.map +1 -0
- package/dist/token/adapters/SealevelTokenAdapter.d.ts +9 -0
- package/dist/token/adapters/SealevelTokenAdapter.d.ts.map +1 -1
- package/dist/token/adapters/SealevelTokenAdapter.js +1 -1
- package/dist/token/adapters/SealevelTokenAdapter.js.map +1 -1
- package/dist/token/adapters/serialization.d.ts +27 -0
- package/dist/token/adapters/serialization.d.ts.map +1 -1
- package/dist/token/adapters/serialization.js +93 -0
- package/dist/token/adapters/serialization.js.map +1 -1
- package/dist/token/config.d.ts +2 -0
- package/dist/token/config.d.ts.map +1 -1
- package/dist/token/config.js +2 -0
- package/dist/token/config.js.map +1 -1
- package/dist/token/configUtils.d.ts +0 -6
- package/dist/token/configUtils.d.ts.map +1 -1
- package/dist/token/configUtils.js +108 -15
- package/dist/token/configUtils.js.map +1 -1
- package/dist/token/configUtils.test.js +248 -4
- package/dist/token/configUtils.test.js.map +1 -1
- package/dist/token/contracts.d.ts +3 -2
- package/dist/token/contracts.d.ts.map +1 -1
- package/dist/token/contracts.js +3 -2
- package/dist/token/contracts.js.map +1 -1
- package/dist/token/deploy.d.ts +4 -5
- package/dist/token/deploy.d.ts.map +1 -1
- package/dist/token/deploy.hardhat-test.js +82 -0
- package/dist/token/deploy.hardhat-test.js.map +1 -1
- package/dist/token/deploy.js +60 -17
- package/dist/token/deploy.js.map +1 -1
- package/dist/token/tokenMetadataUtils.d.ts.map +1 -1
- package/dist/token/tokenMetadataUtils.js +17 -2
- package/dist/token/tokenMetadataUtils.js.map +1 -1
- package/dist/token/types.d.ts +2277 -567
- package/dist/token/types.d.ts.map +1 -1
- package/dist/token/types.js +55 -5
- package/dist/token/types.js.map +1 -1
- package/dist/token/types.test.js +132 -0
- package/dist/token/types.test.js.map +1 -1
- package/dist/warp/WarpCore.d.ts +59 -1
- package/dist/warp/WarpCore.d.ts.map +1 -1
- package/dist/warp/WarpCore.js +206 -6
- package/dist/warp/WarpCore.js.map +1 -1
- package/dist/warp/WarpCore.test.js +161 -9
- package/dist/warp/WarpCore.test.js.map +1 -1
- package/dist/warp/types.d.ts +24 -24
- package/package.json +11 -12
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { decodeFunctionData, zeroAddress } from 'viem';
|
|
3
|
+
import { buildExecuteCalldata, buildQuoteCalldata } from './builder.js';
|
|
4
|
+
import { QuotedCallsCommand, TokenPullMode } from './types.js';
|
|
5
|
+
const QUOTED_CALLS = '0x1111111111111111111111111111111111111111';
|
|
6
|
+
const WARP_ROUTE = '0x2222222222222222222222222222222222222222';
|
|
7
|
+
const TOKEN = '0x3333333333333333333333333333333333333333';
|
|
8
|
+
const RECIPIENT = '0x0000000000000000000000004444444444444444444444444444444444444444';
|
|
9
|
+
const CLIENT_SALT = '0x5555555555555555555555555555555555555555555555555555555555555555';
|
|
10
|
+
const MOCK_QUOTE = {
|
|
11
|
+
quoter: '0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
|
12
|
+
quote: {
|
|
13
|
+
context: '0xdeadbeef',
|
|
14
|
+
data: '0xcafebabe',
|
|
15
|
+
issuedAt: 1000,
|
|
16
|
+
expiry: 1000,
|
|
17
|
+
salt: CLIENT_SALT,
|
|
18
|
+
submitter: QUOTED_CALLS,
|
|
19
|
+
},
|
|
20
|
+
signature: '0xaabb',
|
|
21
|
+
};
|
|
22
|
+
const BASE_PARAMS = {
|
|
23
|
+
quotedCallsAddress: QUOTED_CALLS,
|
|
24
|
+
warpRoute: WARP_ROUTE,
|
|
25
|
+
destination: 42161,
|
|
26
|
+
recipient: RECIPIENT,
|
|
27
|
+
amount: 1000n,
|
|
28
|
+
token: TOKEN,
|
|
29
|
+
quotes: [MOCK_QUOTE],
|
|
30
|
+
clientSalt: CLIENT_SALT,
|
|
31
|
+
};
|
|
32
|
+
const executeAbi = [
|
|
33
|
+
{
|
|
34
|
+
name: 'execute',
|
|
35
|
+
type: 'function',
|
|
36
|
+
inputs: [
|
|
37
|
+
{ name: 'commands', type: 'bytes' },
|
|
38
|
+
{ name: 'inputs', type: 'bytes[]' },
|
|
39
|
+
],
|
|
40
|
+
outputs: [],
|
|
41
|
+
stateMutability: 'payable',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'quoteExecute',
|
|
45
|
+
type: 'function',
|
|
46
|
+
inputs: [
|
|
47
|
+
{ name: 'commands', type: 'bytes' },
|
|
48
|
+
{ name: 'inputs', type: 'bytes[]' },
|
|
49
|
+
],
|
|
50
|
+
outputs: [],
|
|
51
|
+
stateMutability: 'nonpayable',
|
|
52
|
+
},
|
|
53
|
+
];
|
|
54
|
+
function decodeCommands(data) {
|
|
55
|
+
const decoded = decodeFunctionData({ abi: executeAbi, data });
|
|
56
|
+
const commandsHex = decoded.args[0].slice(2);
|
|
57
|
+
const commands = [];
|
|
58
|
+
for (let i = 0; i < commandsHex.length; i += 2) {
|
|
59
|
+
commands.push(parseInt(commandsHex.slice(i, i + 2), 16));
|
|
60
|
+
}
|
|
61
|
+
return { fn: decoded.functionName, commands };
|
|
62
|
+
}
|
|
63
|
+
// Mock fee quotes from quoteExecute
|
|
64
|
+
const MOCK_FEE_QUOTES = [
|
|
65
|
+
[], // SUBMIT_QUOTE → empty
|
|
66
|
+
[
|
|
67
|
+
// TRANSFER_REMOTE → 3 quotes
|
|
68
|
+
{ token: zeroAddress, amount: 100n }, // IGP native fee
|
|
69
|
+
{ token: TOKEN, amount: 1050n }, // amount + internal fee
|
|
70
|
+
{ token: TOKEN, amount: 10n }, // external fee
|
|
71
|
+
],
|
|
72
|
+
];
|
|
73
|
+
describe('buildQuoteCalldata', () => {
|
|
74
|
+
it('builds quoteExecute with SUBMIT_QUOTE + TRANSFER_REMOTE', () => {
|
|
75
|
+
const result = buildQuoteCalldata(BASE_PARAMS);
|
|
76
|
+
expect(result.to).to.equal(QUOTED_CALLS);
|
|
77
|
+
expect(result.value).to.equal(0n);
|
|
78
|
+
const { fn, commands } = decodeCommands(result.data);
|
|
79
|
+
expect(fn).to.equal('quoteExecute');
|
|
80
|
+
expect(commands).to.deep.equal([
|
|
81
|
+
QuotedCallsCommand.SUBMIT_QUOTE,
|
|
82
|
+
QuotedCallsCommand.TRANSFER_REMOTE,
|
|
83
|
+
]);
|
|
84
|
+
});
|
|
85
|
+
it('builds quoteExecute with TRANSFER_REMOTE_TO for cross-collateral', () => {
|
|
86
|
+
const targetRouter = '0x0000000000000000000000007777777777777777777777777777777777777777';
|
|
87
|
+
const result = buildQuoteCalldata({ ...BASE_PARAMS, targetRouter });
|
|
88
|
+
const { commands } = decodeCommands(result.data);
|
|
89
|
+
expect(commands).to.deep.equal([
|
|
90
|
+
QuotedCallsCommand.SUBMIT_QUOTE,
|
|
91
|
+
QuotedCallsCommand.TRANSFER_REMOTE_TO,
|
|
92
|
+
]);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
describe('buildExecuteCalldata', () => {
|
|
96
|
+
it('builds ERC20 TransferFrom execute from fee quotes', () => {
|
|
97
|
+
const result = buildExecuteCalldata({
|
|
98
|
+
...BASE_PARAMS,
|
|
99
|
+
feeQuotes: MOCK_FEE_QUOTES,
|
|
100
|
+
tokenPullMode: TokenPullMode.TransferFrom,
|
|
101
|
+
});
|
|
102
|
+
expect(result.to).to.equal(QUOTED_CALLS);
|
|
103
|
+
// native value = IGP fee (100)
|
|
104
|
+
expect(result.value).to.equal(100n);
|
|
105
|
+
const { fn, commands } = decodeCommands(result.data);
|
|
106
|
+
expect(fn).to.equal('execute');
|
|
107
|
+
expect(commands).to.deep.equal([
|
|
108
|
+
QuotedCallsCommand.SUBMIT_QUOTE,
|
|
109
|
+
QuotedCallsCommand.TRANSFER_FROM,
|
|
110
|
+
QuotedCallsCommand.TRANSFER_REMOTE,
|
|
111
|
+
QuotedCallsCommand.SWEEP,
|
|
112
|
+
]);
|
|
113
|
+
});
|
|
114
|
+
it('builds Permit2 execute from fee quotes', () => {
|
|
115
|
+
const result = buildExecuteCalldata({
|
|
116
|
+
...BASE_PARAMS,
|
|
117
|
+
feeQuotes: MOCK_FEE_QUOTES,
|
|
118
|
+
tokenPullMode: TokenPullMode.Permit2,
|
|
119
|
+
permit2Data: {
|
|
120
|
+
permitSingle: {
|
|
121
|
+
details: {
|
|
122
|
+
token: TOKEN,
|
|
123
|
+
amount: 2000n,
|
|
124
|
+
expiration: 9999,
|
|
125
|
+
nonce: 0,
|
|
126
|
+
},
|
|
127
|
+
spender: QUOTED_CALLS,
|
|
128
|
+
sigDeadline: 9999,
|
|
129
|
+
},
|
|
130
|
+
signature: '0xaabb',
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
const { commands } = decodeCommands(result.data);
|
|
134
|
+
expect(commands).to.deep.equal([
|
|
135
|
+
QuotedCallsCommand.SUBMIT_QUOTE,
|
|
136
|
+
QuotedCallsCommand.PERMIT2_PERMIT,
|
|
137
|
+
QuotedCallsCommand.PERMIT2_TRANSFER_FROM,
|
|
138
|
+
QuotedCallsCommand.TRANSFER_REMOTE,
|
|
139
|
+
QuotedCallsCommand.SWEEP,
|
|
140
|
+
]);
|
|
141
|
+
});
|
|
142
|
+
it('builds native route execute (no TRANSFER_FROM)', () => {
|
|
143
|
+
const nativeFeeQuotes = [
|
|
144
|
+
[],
|
|
145
|
+
[{ token: zeroAddress, amount: 5100n }],
|
|
146
|
+
];
|
|
147
|
+
const result = buildExecuteCalldata({
|
|
148
|
+
...BASE_PARAMS,
|
|
149
|
+
token: zeroAddress,
|
|
150
|
+
amount: 5000n,
|
|
151
|
+
feeQuotes: nativeFeeQuotes,
|
|
152
|
+
tokenPullMode: TokenPullMode.TransferFrom,
|
|
153
|
+
});
|
|
154
|
+
// msg.value = native total from quotes (5100 already includes transfer amount)
|
|
155
|
+
expect(result.value).to.equal(5100n);
|
|
156
|
+
const { commands } = decodeCommands(result.data);
|
|
157
|
+
// No TRANSFER_FROM for native route
|
|
158
|
+
expect(commands).to.deep.equal([
|
|
159
|
+
QuotedCallsCommand.SUBMIT_QUOTE,
|
|
160
|
+
QuotedCallsCommand.TRANSFER_REMOTE,
|
|
161
|
+
QuotedCallsCommand.SWEEP,
|
|
162
|
+
]);
|
|
163
|
+
});
|
|
164
|
+
it('skips SWEEP for TransferFrom with zero token fees', () => {
|
|
165
|
+
const zeroTokenFeeQuotes = [
|
|
166
|
+
[], // SUBMIT_QUOTE → empty
|
|
167
|
+
[
|
|
168
|
+
// TRANSFER_REMOTE → native fee only, no token fee
|
|
169
|
+
{ token: zeroAddress, amount: 100n },
|
|
170
|
+
],
|
|
171
|
+
];
|
|
172
|
+
const result = buildExecuteCalldata({
|
|
173
|
+
...BASE_PARAMS,
|
|
174
|
+
feeQuotes: zeroTokenFeeQuotes,
|
|
175
|
+
tokenPullMode: TokenPullMode.TransferFrom,
|
|
176
|
+
});
|
|
177
|
+
const { commands } = decodeCommands(result.data);
|
|
178
|
+
// No TRANSFER_FROM (totalTokenNeeded=0) and no SWEEP (TransferFrom + zero token fees)
|
|
179
|
+
expect(commands).to.deep.equal([
|
|
180
|
+
QuotedCallsCommand.SUBMIT_QUOTE,
|
|
181
|
+
QuotedCallsCommand.TRANSFER_REMOTE,
|
|
182
|
+
]);
|
|
183
|
+
expect(result.value).to.equal(100n);
|
|
184
|
+
});
|
|
185
|
+
it('throws when Permit2 mode without permit2Data', () => {
|
|
186
|
+
expect(() => buildExecuteCalldata({
|
|
187
|
+
...BASE_PARAMS,
|
|
188
|
+
feeQuotes: MOCK_FEE_QUOTES,
|
|
189
|
+
tokenPullMode: TokenPullMode.Permit2,
|
|
190
|
+
})).to.throw('permit2Data required');
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
//# sourceMappingURL=builder.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.test.js","sourceRoot":"","sources":["../../src/quoted-calls/builder.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { type Address, type Hex } from 'viem';
|
|
2
|
+
import type { Permit2Data, SubmitQuoteCommand } from './types.js';
|
|
3
|
+
import { QuotedCallsCommand } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Sentinel value: resolves to the contract's token balance (ERC20) or
|
|
6
|
+
* native balance (ETH) at execution time. Matches QuotedCalls.CONTRACT_BALANCE.
|
|
7
|
+
*/
|
|
8
|
+
export declare const CONTRACT_BALANCE: bigint;
|
|
9
|
+
/** Matches QuotedCalls._scopeSalt: keccak256(abi.encodePacked(caller, salt)) */
|
|
10
|
+
export declare function computeScopedSalt(caller: Address, clientSalt: Hex): Hex;
|
|
11
|
+
/** Encode SUBMIT_QUOTE input: abi.encode(address quoter, SignedQuote quote, bytes signature, bytes32 clientSalt) */
|
|
12
|
+
export declare function encodeSubmitQuoteInput(cmd: SubmitQuoteCommand, clientSalt: Hex): Hex;
|
|
13
|
+
/** Encode PERMIT2_PERMIT input: abi.encode(IAllowanceTransfer.PermitSingle, bytes signature) */
|
|
14
|
+
export declare function encodePermit2PermitInput(permit2Data: Permit2Data): Hex;
|
|
15
|
+
/** Encode PERMIT2_TRANSFER_FROM input: abi.encode(address token, uint160 amount) */
|
|
16
|
+
export declare function encodePermit2TransferFromInput(token: Address, amount: bigint): Hex;
|
|
17
|
+
/** Encode TRANSFER_FROM input: abi.encode(address token, uint256 amount) */
|
|
18
|
+
export declare function encodeTransferFromInput(token: Address, amount: bigint): Hex;
|
|
19
|
+
/** Encode TRANSFER_REMOTE input: abi.encode(address warpRoute, uint32 destination, bytes32 recipient, uint256 amount, uint256 value, address token, uint256 approval) */
|
|
20
|
+
export declare function encodeTransferRemoteInput(params: {
|
|
21
|
+
warpRoute: Address;
|
|
22
|
+
destination: number;
|
|
23
|
+
recipient: Hex;
|
|
24
|
+
amount: bigint;
|
|
25
|
+
value: bigint;
|
|
26
|
+
token: Address;
|
|
27
|
+
approval: bigint;
|
|
28
|
+
}): Hex;
|
|
29
|
+
/** Encode TRANSFER_REMOTE_TO input: abi.encode(address router, uint32 destination, bytes32 recipient, uint256 amount, bytes32 targetRouter, uint256 value, address token, uint256 approval) */
|
|
30
|
+
export declare function encodeTransferRemoteToInput(params: {
|
|
31
|
+
router: Address;
|
|
32
|
+
destination: number;
|
|
33
|
+
recipient: Hex;
|
|
34
|
+
amount: bigint;
|
|
35
|
+
targetRouter: Hex;
|
|
36
|
+
value: bigint;
|
|
37
|
+
token: Address;
|
|
38
|
+
approval: bigint;
|
|
39
|
+
}): Hex;
|
|
40
|
+
/** Encode SWEEP input: abi.encode(address token) */
|
|
41
|
+
export declare function encodeSweepInput(token: Address): Hex;
|
|
42
|
+
export declare const quotedCallsAbi: readonly [{
|
|
43
|
+
readonly name: "execute";
|
|
44
|
+
readonly type: "function";
|
|
45
|
+
readonly inputs: readonly [{
|
|
46
|
+
readonly name: "commands";
|
|
47
|
+
readonly type: "bytes";
|
|
48
|
+
}, {
|
|
49
|
+
readonly name: "inputs";
|
|
50
|
+
readonly type: "bytes[]";
|
|
51
|
+
}];
|
|
52
|
+
readonly outputs: readonly [];
|
|
53
|
+
readonly stateMutability: "payable";
|
|
54
|
+
}, {
|
|
55
|
+
readonly name: "quoteExecute";
|
|
56
|
+
readonly type: "function";
|
|
57
|
+
readonly inputs: readonly [{
|
|
58
|
+
readonly name: "commands";
|
|
59
|
+
readonly type: "bytes";
|
|
60
|
+
}, {
|
|
61
|
+
readonly name: "inputs";
|
|
62
|
+
readonly type: "bytes[]";
|
|
63
|
+
}];
|
|
64
|
+
readonly outputs: readonly [{
|
|
65
|
+
readonly name: "results";
|
|
66
|
+
readonly type: "tuple[][]";
|
|
67
|
+
readonly components: ({
|
|
68
|
+
name: string;
|
|
69
|
+
type: "address";
|
|
70
|
+
} | {
|
|
71
|
+
name: string;
|
|
72
|
+
type: "uint256";
|
|
73
|
+
})[];
|
|
74
|
+
}];
|
|
75
|
+
readonly stateMutability: "nonpayable";
|
|
76
|
+
}];
|
|
77
|
+
/** Encode QuotedCalls.execute(commands, inputs) calldata */
|
|
78
|
+
export declare function encodeExecuteCalldata(commands: QuotedCallsCommand[], inputs: Hex[]): Hex;
|
|
79
|
+
/** Encode QuotedCalls.quoteExecute(commands, inputs) calldata */
|
|
80
|
+
export declare function encodeQuoteExecuteCalldata(commands: QuotedCallsCommand[], inputs: Hex[]): Hex;
|
|
81
|
+
export interface Quote {
|
|
82
|
+
token: Address;
|
|
83
|
+
amount: bigint;
|
|
84
|
+
}
|
|
85
|
+
/** Decode the return value of quoteExecute into Quote[][] */
|
|
86
|
+
export declare function decodeQuoteExecuteResult(data: Hex): Quote[][];
|
|
87
|
+
/** Sum Quote[][] into totals per token address (normalized to lowercase) */
|
|
88
|
+
export declare function sumQuotesByToken(results: Quote[][]): Map<Address, bigint>;
|
|
89
|
+
/** Extract native (address(0)) and ERC20 totals from quote results */
|
|
90
|
+
export declare function extractQuoteTotals(results: Quote[][]): {
|
|
91
|
+
nativeValue: bigint;
|
|
92
|
+
tokenTotals: Map<Address, bigint>;
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/quoted-calls/codec.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,GAAG,EAST,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAAa,CAAC;AA0C3C,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,GAAG,GAAG,CAEvE;AAID,oHAAoH;AACpH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,kBAAkB,EACvB,UAAU,EAAE,GAAG,GACd,GAAG,CAsBL;AAED,gGAAgG;AAChG,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,WAAW,GAAG,GAAG,CAkBtE;AAED,oFAAoF;AACpF,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,GACb,GAAG,CAKL;AAED,4EAA4E;AAC5E,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAK3E;AAED,yKAAyK;AACzK,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAChD,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,GAAG,CAqBN;AAED,+LAA+L;AAC/L,wBAAgB,2BAA2B,CAAC,MAAM,EAAE;IAClD,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,GAAG,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,GAAG,CAuBN;AAED,oDAAoD;AACpD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,CAEpD;AAcD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BjB,CAAC;AAQX,4DAA4D;AAC5D,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,kBAAkB,EAAE,EAC9B,MAAM,EAAE,GAAG,EAAE,GACZ,GAAG,CAML;AAED,iEAAiE;AACjE,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,kBAAkB,EAAE,EAC9B,MAAM,EAAE,GAAG,EAAE,GACZ,GAAG,CAML;AAID,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,6DAA6D;AAC7D,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,GAAG,GAAG,KAAK,EAAE,EAAE,CAc7D;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CASzE;AAED,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;CACnC,CAKA"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { concat, decodeAbiParameters, encodeAbiParameters, encodeFunctionData, encodePacked, keccak256, toHex, zeroAddress, } from 'viem';
|
|
2
|
+
/**
|
|
3
|
+
* Sentinel value: resolves to the contract's token balance (ERC20) or
|
|
4
|
+
* native balance (ETH) at execution time. Matches QuotedCalls.CONTRACT_BALANCE.
|
|
5
|
+
*/
|
|
6
|
+
export const CONTRACT_BALANCE = 2n ** 255n;
|
|
7
|
+
// ============ SignedQuote ABI tuple ============
|
|
8
|
+
// Matches: abi.decode(input, (address, SignedQuote, bytes, bytes32))
|
|
9
|
+
// SignedQuote = (bytes context, bytes data, uint48 issuedAt, uint48 expiry, bytes32 salt, address submitter)
|
|
10
|
+
const signedQuoteTuple = {
|
|
11
|
+
type: 'tuple',
|
|
12
|
+
components: [
|
|
13
|
+
{ name: 'context', type: 'bytes' },
|
|
14
|
+
{ name: 'data', type: 'bytes' },
|
|
15
|
+
{ name: 'issuedAt', type: 'uint48' },
|
|
16
|
+
{ name: 'expiry', type: 'uint48' },
|
|
17
|
+
{ name: 'salt', type: 'bytes32' },
|
|
18
|
+
{ name: 'submitter', type: 'address' },
|
|
19
|
+
],
|
|
20
|
+
};
|
|
21
|
+
// ============ Permit2 PermitSingle ABI tuple ============
|
|
22
|
+
// Matches: abi.decode(input, (IAllowanceTransfer.PermitSingle, bytes))
|
|
23
|
+
const permitDetailsTuple = {
|
|
24
|
+
type: 'tuple',
|
|
25
|
+
components: [
|
|
26
|
+
{ name: 'token', type: 'address' },
|
|
27
|
+
{ name: 'amount', type: 'uint160' },
|
|
28
|
+
{ name: 'expiration', type: 'uint48' },
|
|
29
|
+
{ name: 'nonce', type: 'uint48' },
|
|
30
|
+
],
|
|
31
|
+
};
|
|
32
|
+
const permitSingleTuple = {
|
|
33
|
+
type: 'tuple',
|
|
34
|
+
components: [
|
|
35
|
+
{ name: 'details', ...permitDetailsTuple },
|
|
36
|
+
{ name: 'spender', type: 'address' },
|
|
37
|
+
{ name: 'sigDeadline', type: 'uint256' },
|
|
38
|
+
],
|
|
39
|
+
};
|
|
40
|
+
// ============ Salt scoping ============
|
|
41
|
+
/** Matches QuotedCalls._scopeSalt: keccak256(abi.encodePacked(caller, salt)) */
|
|
42
|
+
export function computeScopedSalt(caller, clientSalt) {
|
|
43
|
+
return keccak256(encodePacked(['address', 'bytes32'], [caller, clientSalt]));
|
|
44
|
+
}
|
|
45
|
+
// ============ Per-command input encoders ============
|
|
46
|
+
/** Encode SUBMIT_QUOTE input: abi.encode(address quoter, SignedQuote quote, bytes signature, bytes32 clientSalt) */
|
|
47
|
+
export function encodeSubmitQuoteInput(cmd, clientSalt) {
|
|
48
|
+
return encodeAbiParameters([
|
|
49
|
+
{ type: 'address' },
|
|
50
|
+
signedQuoteTuple,
|
|
51
|
+
{ type: 'bytes' },
|
|
52
|
+
{ type: 'bytes32' },
|
|
53
|
+
], [
|
|
54
|
+
cmd.quoter,
|
|
55
|
+
{
|
|
56
|
+
context: cmd.quote.context,
|
|
57
|
+
data: cmd.quote.data,
|
|
58
|
+
issuedAt: cmd.quote.issuedAt,
|
|
59
|
+
expiry: cmd.quote.expiry,
|
|
60
|
+
salt: cmd.quote.salt,
|
|
61
|
+
submitter: cmd.quote.submitter,
|
|
62
|
+
},
|
|
63
|
+
cmd.signature,
|
|
64
|
+
clientSalt,
|
|
65
|
+
]);
|
|
66
|
+
}
|
|
67
|
+
/** Encode PERMIT2_PERMIT input: abi.encode(IAllowanceTransfer.PermitSingle, bytes signature) */
|
|
68
|
+
export function encodePermit2PermitInput(permit2Data) {
|
|
69
|
+
const { permitSingle, signature } = permit2Data;
|
|
70
|
+
return encodeAbiParameters([permitSingleTuple, { type: 'bytes' }], [
|
|
71
|
+
{
|
|
72
|
+
details: {
|
|
73
|
+
token: permitSingle.details.token,
|
|
74
|
+
amount: permitSingle.details.amount,
|
|
75
|
+
expiration: permitSingle.details.expiration,
|
|
76
|
+
nonce: permitSingle.details.nonce,
|
|
77
|
+
},
|
|
78
|
+
spender: permitSingle.spender,
|
|
79
|
+
sigDeadline: BigInt(permitSingle.sigDeadline),
|
|
80
|
+
},
|
|
81
|
+
signature,
|
|
82
|
+
]);
|
|
83
|
+
}
|
|
84
|
+
/** Encode PERMIT2_TRANSFER_FROM input: abi.encode(address token, uint160 amount) */
|
|
85
|
+
export function encodePermit2TransferFromInput(token, amount) {
|
|
86
|
+
return encodeAbiParameters([{ type: 'address' }, { type: 'uint160' }], [token, amount]);
|
|
87
|
+
}
|
|
88
|
+
/** Encode TRANSFER_FROM input: abi.encode(address token, uint256 amount) */
|
|
89
|
+
export function encodeTransferFromInput(token, amount) {
|
|
90
|
+
return encodeAbiParameters([{ type: 'address' }, { type: 'uint256' }], [token, amount]);
|
|
91
|
+
}
|
|
92
|
+
/** Encode TRANSFER_REMOTE input: abi.encode(address warpRoute, uint32 destination, bytes32 recipient, uint256 amount, uint256 value, address token, uint256 approval) */
|
|
93
|
+
export function encodeTransferRemoteInput(params) {
|
|
94
|
+
return encodeAbiParameters([
|
|
95
|
+
{ type: 'address' },
|
|
96
|
+
{ type: 'uint32' },
|
|
97
|
+
{ type: 'bytes32' },
|
|
98
|
+
{ type: 'uint256' },
|
|
99
|
+
{ type: 'uint256' },
|
|
100
|
+
{ type: 'address' },
|
|
101
|
+
{ type: 'uint256' },
|
|
102
|
+
], [
|
|
103
|
+
params.warpRoute,
|
|
104
|
+
params.destination,
|
|
105
|
+
params.recipient,
|
|
106
|
+
params.amount,
|
|
107
|
+
params.value,
|
|
108
|
+
params.token,
|
|
109
|
+
params.approval,
|
|
110
|
+
]);
|
|
111
|
+
}
|
|
112
|
+
/** Encode TRANSFER_REMOTE_TO input: abi.encode(address router, uint32 destination, bytes32 recipient, uint256 amount, bytes32 targetRouter, uint256 value, address token, uint256 approval) */
|
|
113
|
+
export function encodeTransferRemoteToInput(params) {
|
|
114
|
+
return encodeAbiParameters([
|
|
115
|
+
{ type: 'address' },
|
|
116
|
+
{ type: 'uint32' },
|
|
117
|
+
{ type: 'bytes32' },
|
|
118
|
+
{ type: 'uint256' },
|
|
119
|
+
{ type: 'bytes32' },
|
|
120
|
+
{ type: 'uint256' },
|
|
121
|
+
{ type: 'address' },
|
|
122
|
+
{ type: 'uint256' },
|
|
123
|
+
], [
|
|
124
|
+
params.router,
|
|
125
|
+
params.destination,
|
|
126
|
+
params.recipient,
|
|
127
|
+
params.amount,
|
|
128
|
+
params.targetRouter,
|
|
129
|
+
params.value,
|
|
130
|
+
params.token,
|
|
131
|
+
params.approval,
|
|
132
|
+
]);
|
|
133
|
+
}
|
|
134
|
+
/** Encode SWEEP input: abi.encode(address token) */
|
|
135
|
+
export function encodeSweepInput(token) {
|
|
136
|
+
return encodeAbiParameters([{ type: 'address' }], [token]);
|
|
137
|
+
}
|
|
138
|
+
// ============ Execute calldata ============
|
|
139
|
+
// ============ ABI definitions ============
|
|
140
|
+
const quoteTuple = {
|
|
141
|
+
type: 'tuple',
|
|
142
|
+
components: [
|
|
143
|
+
{ name: 'token', type: 'address' },
|
|
144
|
+
{ name: 'amount', type: 'uint256' },
|
|
145
|
+
],
|
|
146
|
+
};
|
|
147
|
+
export const quotedCallsAbi = [
|
|
148
|
+
{
|
|
149
|
+
name: 'execute',
|
|
150
|
+
type: 'function',
|
|
151
|
+
inputs: [
|
|
152
|
+
{ name: 'commands', type: 'bytes' },
|
|
153
|
+
{ name: 'inputs', type: 'bytes[]' },
|
|
154
|
+
],
|
|
155
|
+
outputs: [],
|
|
156
|
+
stateMutability: 'payable',
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
name: 'quoteExecute',
|
|
160
|
+
type: 'function',
|
|
161
|
+
inputs: [
|
|
162
|
+
{ name: 'commands', type: 'bytes' },
|
|
163
|
+
{ name: 'inputs', type: 'bytes[]' },
|
|
164
|
+
],
|
|
165
|
+
outputs: [
|
|
166
|
+
{
|
|
167
|
+
name: 'results',
|
|
168
|
+
type: 'tuple[][]',
|
|
169
|
+
components: quoteTuple.components,
|
|
170
|
+
},
|
|
171
|
+
],
|
|
172
|
+
stateMutability: 'nonpayable',
|
|
173
|
+
},
|
|
174
|
+
];
|
|
175
|
+
// ============ Encode helpers ============
|
|
176
|
+
function encodeCommandsBytes(commands) {
|
|
177
|
+
return concat(commands.map((c) => toHex(c, { size: 1 })));
|
|
178
|
+
}
|
|
179
|
+
/** Encode QuotedCalls.execute(commands, inputs) calldata */
|
|
180
|
+
export function encodeExecuteCalldata(commands, inputs) {
|
|
181
|
+
return encodeFunctionData({
|
|
182
|
+
abi: quotedCallsAbi,
|
|
183
|
+
functionName: 'execute',
|
|
184
|
+
args: [encodeCommandsBytes(commands), inputs],
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
/** Encode QuotedCalls.quoteExecute(commands, inputs) calldata */
|
|
188
|
+
export function encodeQuoteExecuteCalldata(commands, inputs) {
|
|
189
|
+
return encodeFunctionData({
|
|
190
|
+
abi: quotedCallsAbi,
|
|
191
|
+
functionName: 'quoteExecute',
|
|
192
|
+
args: [encodeCommandsBytes(commands), inputs],
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
/** Decode the return value of quoteExecute into Quote[][] */
|
|
196
|
+
export function decodeQuoteExecuteResult(data) {
|
|
197
|
+
const [results] = decodeAbiParameters([
|
|
198
|
+
{
|
|
199
|
+
type: 'tuple[][]',
|
|
200
|
+
components: quoteTuple.components,
|
|
201
|
+
},
|
|
202
|
+
], data);
|
|
203
|
+
return results.map((perCommand) => perCommand.map((q) => ({ token: q.token, amount: q.amount })));
|
|
204
|
+
}
|
|
205
|
+
/** Sum Quote[][] into totals per token address (normalized to lowercase) */
|
|
206
|
+
export function sumQuotesByToken(results) {
|
|
207
|
+
const totals = new Map();
|
|
208
|
+
for (const perCommand of results) {
|
|
209
|
+
for (const q of perCommand) {
|
|
210
|
+
const key = q.token.toLowerCase();
|
|
211
|
+
totals.set(key, (totals.get(key) ?? 0n) + q.amount);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return totals;
|
|
215
|
+
}
|
|
216
|
+
/** Extract native (address(0)) and ERC20 totals from quote results */
|
|
217
|
+
export function extractQuoteTotals(results) {
|
|
218
|
+
const all = sumQuotesByToken(results);
|
|
219
|
+
const nativeValue = all.get(zeroAddress) ?? 0n;
|
|
220
|
+
all.delete(zeroAddress);
|
|
221
|
+
return { nativeValue, tokenTotals: all };
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/quoted-calls/codec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.test.d.ts","sourceRoot":"","sources":["../../src/quoted-calls/codec.test.ts"],"names":[],"mappings":""}
|