@rhinestone/sdk 0.0.0-dev-20260331174807 → 0.0.0-dev-20260402181016
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/src/execution/signing.test.js +135 -3
- package/dist/src/execution/utils.d.ts.map +1 -1
- package/dist/src/execution/utils.js +23 -3
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/modules/validators/policies/claim/permit2.d.ts +55 -0
- package/dist/src/modules/validators/policies/claim/permit2.d.ts.map +1 -0
- package/dist/src/modules/validators/policies/claim/permit2.js +239 -0
- package/dist/src/modules/validators/policies/claim/permit2.test.d.ts +2 -0
- package/dist/src/modules/validators/policies/claim/permit2.test.d.ts.map +1 -0
- package/dist/src/modules/validators/policies/claim/permit2.test.js +519 -0
- package/dist/src/modules/validators/policies/claim/types.d.ts +12 -0
- package/dist/src/modules/validators/policies/claim/types.d.ts.map +1 -0
- package/dist/src/modules/validators/policies/claim/types.js +18 -0
- package/dist/src/modules/validators/smart-sessions.d.ts +1 -0
- package/dist/src/modules/validators/smart-sessions.d.ts.map +1 -1
- package/dist/src/modules/validators/smart-sessions.js +7 -2
- package/dist/src/orchestrator/consts.d.ts +1 -1
- package/dist/src/orchestrator/consts.js +1 -1
- package/dist/src/types.d.ts +35 -1
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
const viem_1 = require("viem");
|
|
4
37
|
const chains_1 = require("viem/chains");
|
|
@@ -91,7 +124,7 @@ vitest_1.vi.mock('../modules/validators', () => ({
|
|
|
91
124
|
additionalContext: '0x',
|
|
92
125
|
}),
|
|
93
126
|
buildMockSignature: vitest_1.vi.fn(),
|
|
94
|
-
getPermissionId: vitest_1.vi.fn().mockReturnValue(
|
|
127
|
+
getPermissionId: vitest_1.vi.fn().mockReturnValue(`0x${'cc'.repeat(32)}`),
|
|
95
128
|
getSmartSessionValidator: vitest_1.vi.fn().mockReturnValue({
|
|
96
129
|
address: MOCK_VALIDATOR,
|
|
97
130
|
type: 1,
|
|
@@ -131,11 +164,11 @@ const makeElement = (settlementLayer) => ({
|
|
|
131
164
|
mandate: {
|
|
132
165
|
destinationChainId: chains_1.base.id,
|
|
133
166
|
destinationOps: {
|
|
134
|
-
vt:
|
|
167
|
+
vt: `0x${'00'.repeat(32)}`,
|
|
135
168
|
ops: [],
|
|
136
169
|
},
|
|
137
170
|
preClaimOps: {
|
|
138
|
-
vt:
|
|
171
|
+
vt: `0x${'00'.repeat(32)}`,
|
|
139
172
|
ops: [],
|
|
140
173
|
},
|
|
141
174
|
qualifier: {
|
|
@@ -331,3 +364,102 @@ const ownerSigners = {
|
|
|
331
364
|
(0, vitest_1.expect)(targetExecutionSignature).toBe(MOCK_EMISSARY);
|
|
332
365
|
});
|
|
333
366
|
});
|
|
367
|
+
// Permit2 typed data shape that triggers resolveClaimPolicyData
|
|
368
|
+
const MOCK_PERMIT2_TYPED_DATA = {
|
|
369
|
+
domain: { name: 'Permit2', chainId: 8453, verifyingContract: MOCK_EXECUTOR },
|
|
370
|
+
types: {
|
|
371
|
+
PermitBatchWitnessTransferFrom: [{ name: 'nonce', type: 'uint256' }],
|
|
372
|
+
},
|
|
373
|
+
primaryType: 'PermitBatchWitnessTransferFrom',
|
|
374
|
+
message: {
|
|
375
|
+
permitted: [
|
|
376
|
+
{ token: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', amount: 20000n },
|
|
377
|
+
],
|
|
378
|
+
spender: MOCK_EXECUTOR,
|
|
379
|
+
nonce: 1n,
|
|
380
|
+
deadline: 9999999999n,
|
|
381
|
+
mandate: {
|
|
382
|
+
target: {
|
|
383
|
+
recipient: MOCK_ACCOUNT,
|
|
384
|
+
tokenOut: [],
|
|
385
|
+
targetChain: 8453n,
|
|
386
|
+
fillExpiry: 9999999999n,
|
|
387
|
+
},
|
|
388
|
+
minGas: 0n,
|
|
389
|
+
originOps: { vt: `0x${'00'.repeat(32)}`, ops: [] },
|
|
390
|
+
destOps: { vt: `0x${'00'.repeat(32)}`, ops: [] },
|
|
391
|
+
q: `0x${'ab'.repeat(32)}`,
|
|
392
|
+
},
|
|
393
|
+
},
|
|
394
|
+
};
|
|
395
|
+
const makePermit2IntentOp = () => ({
|
|
396
|
+
sponsor: MOCK_ACCOUNT,
|
|
397
|
+
nonce: '100',
|
|
398
|
+
targetExecutionNonce: '200',
|
|
399
|
+
expires: '9999999999',
|
|
400
|
+
elements: [
|
|
401
|
+
{
|
|
402
|
+
mandate: {
|
|
403
|
+
destinationChainId: chains_1.base.id,
|
|
404
|
+
destinationOps: { vt: `0x${'00'.repeat(32)}`, ops: [] },
|
|
405
|
+
preClaimOps: { vt: `0x${'00'.repeat(32)}`, ops: [] },
|
|
406
|
+
qualifier: {
|
|
407
|
+
settlementContext: {
|
|
408
|
+
// SAME_CHAIN avoids the INTENT_EXECUTOR branch so the PERMIT2 funding path is taken
|
|
409
|
+
settlementLayer: 'SAME_CHAIN',
|
|
410
|
+
fundingMethod: 'PERMIT2',
|
|
411
|
+
using7579: true,
|
|
412
|
+
gasRefund: { token: viem_1.zeroAddress, exchangeRate: 0n, overhead: 0n },
|
|
413
|
+
},
|
|
414
|
+
},
|
|
415
|
+
},
|
|
416
|
+
},
|
|
417
|
+
],
|
|
418
|
+
});
|
|
419
|
+
const sessionWithClaimPolicy = {
|
|
420
|
+
chain: chains_1.base,
|
|
421
|
+
owners: { type: 'ecdsa', accounts: [consts_1.accountA] },
|
|
422
|
+
actions: [{ policies: [{ type: 'usage-limit', limit: 1n }] }],
|
|
423
|
+
claimPolicies: [{ type: 'permit2-claim' }],
|
|
424
|
+
};
|
|
425
|
+
(0, vitest_1.describe)('signIntent with permit2 claim policy', () => {
|
|
426
|
+
(0, vitest_1.test)('Permit2 typed data + claimPolicies → getEip1271Signature called with claimPolicyData', async () => {
|
|
427
|
+
const { getTypedData: mockPermit2GetTypedData } = await Promise.resolve().then(() => __importStar(require('./permit2')));
|
|
428
|
+
vitest_1.vi.mocked(mockPermit2GetTypedData).mockReturnValueOnce(MOCK_PERMIT2_TYPED_DATA);
|
|
429
|
+
const signers = {
|
|
430
|
+
type: 'experimental_session',
|
|
431
|
+
session: sessionWithClaimPolicy,
|
|
432
|
+
verifyExecutions: true,
|
|
433
|
+
};
|
|
434
|
+
await (0, utils_1.signIntent)(config, makePermit2IntentOp(), chains_1.base, signers);
|
|
435
|
+
(0, vitest_1.expect)(mockGetEip1271Signature).toHaveBeenCalled();
|
|
436
|
+
const sessionSignersArg = mockGetEip1271Signature.mock.calls[0][1];
|
|
437
|
+
(0, vitest_1.expect)(sessionSignersArg.claimPolicyData).toBeDefined();
|
|
438
|
+
(0, vitest_1.expect)(sessionSignersArg.claimPolicyData).not.toBe('0x');
|
|
439
|
+
});
|
|
440
|
+
(0, vitest_1.test)('non-Permit2 typed data + claimPolicies → getEip1271Signature called without claimPolicyData', async () => {
|
|
441
|
+
// Default mock returns MOCK_TYPED_DATA (primaryType: 'Test'), not Permit2
|
|
442
|
+
const signers = {
|
|
443
|
+
type: 'experimental_session',
|
|
444
|
+
session: sessionWithClaimPolicy,
|
|
445
|
+
verifyExecutions: true,
|
|
446
|
+
};
|
|
447
|
+
await (0, utils_1.signIntent)(config, makeIntentOp('INTENT_EXECUTOR'), chains_1.base, signers);
|
|
448
|
+
(0, vitest_1.expect)(mockGetEip1271Signature).toHaveBeenCalled();
|
|
449
|
+
const sessionSignersArg = mockGetEip1271Signature.mock.calls[0][1];
|
|
450
|
+
(0, vitest_1.expect)(sessionSignersArg.claimPolicyData).toBeUndefined();
|
|
451
|
+
});
|
|
452
|
+
(0, vitest_1.test)('Permit2 typed data without claimPolicies → getEip1271Signature called without claimPolicyData', async () => {
|
|
453
|
+
const { getTypedData: mockPermit2GetTypedData } = await Promise.resolve().then(() => __importStar(require('./permit2')));
|
|
454
|
+
vitest_1.vi.mocked(mockPermit2GetTypedData).mockReturnValueOnce(MOCK_PERMIT2_TYPED_DATA);
|
|
455
|
+
const signers = {
|
|
456
|
+
type: 'experimental_session',
|
|
457
|
+
session: sessionWithActions, // no claimPolicies
|
|
458
|
+
verifyExecutions: true,
|
|
459
|
+
};
|
|
460
|
+
await (0, utils_1.signIntent)(config, makePermit2IntentOp(), chains_1.base, signers);
|
|
461
|
+
(0, vitest_1.expect)(mockGetEip1271Signature).toHaveBeenCalled();
|
|
462
|
+
const sessionSignersArg = mockGetEip1271Signature.mock.calls[0][1];
|
|
463
|
+
(0, vitest_1.expect)(sessionSignersArg.claimPolicyData).toBeUndefined();
|
|
464
|
+
});
|
|
465
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../execution/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,KAAK,EAMV,KAAK,uBAAuB,EAC5B,KAAK,GAAG,EAOR,KAAK,YAAY,EAEjB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,SAAS,EACd,KAAK,mBAAmB,EACxB,KAAK,eAAe,EAErB,MAAM,MAAM,CAAA;AACb,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../execution/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,12 +32,13 @@ const utils_1 = require("../accounts/utils");
|
|
|
32
32
|
const modules_1 = require("../modules");
|
|
33
33
|
const validators_1 = require("../modules/validators");
|
|
34
34
|
const core_1 = require("../modules/validators/core");
|
|
35
|
+
const permit2_1 = require("../modules/validators/policies/claim/permit2");
|
|
35
36
|
const orchestrator_1 = require("../orchestrator");
|
|
36
37
|
const registry_1 = require("../orchestrator/registry");
|
|
37
38
|
const types_1 = require("../orchestrator/types");
|
|
38
39
|
const compact_1 = require("./compact");
|
|
39
40
|
const error_1 = require("./error");
|
|
40
|
-
const
|
|
41
|
+
const permit2_2 = require("./permit2");
|
|
41
42
|
const singleChainOps_1 = require("./singleChainOps");
|
|
42
43
|
function isResolvedSessionSignerSet(signers) {
|
|
43
44
|
return (signers?.type === 'experimental_session' && 'verifyExecutions' in signers);
|
|
@@ -534,7 +535,7 @@ function getIntentMessages(config, intentOp) {
|
|
|
534
535
|
origin.push(typedData);
|
|
535
536
|
}
|
|
536
537
|
else if (withPermit2) {
|
|
537
|
-
const typedData = (0,
|
|
538
|
+
const typedData = (0, permit2_2.getTypedData)(element, BigInt(intentOp.nonce), BigInt(intentOp.expires));
|
|
538
539
|
origin.push(typedData);
|
|
539
540
|
}
|
|
540
541
|
else {
|
|
@@ -560,6 +561,22 @@ function getTargetExecutionMessage(config, intentOp) {
|
|
|
560
561
|
};
|
|
561
562
|
return typedData;
|
|
562
563
|
}
|
|
564
|
+
/** Computes claim policy calldata when parameters are Permit2 typed data with claim policies. */
|
|
565
|
+
function resolveClaimPolicyData(signers, parameters) {
|
|
566
|
+
if (parameters.primaryType !== 'PermitBatchWitnessTransferFrom' ||
|
|
567
|
+
!signers.session.claimPolicies?.length) {
|
|
568
|
+
return undefined;
|
|
569
|
+
}
|
|
570
|
+
const msg = parameters.message;
|
|
571
|
+
if (!msg.permitted ||
|
|
572
|
+
!msg.mandate ||
|
|
573
|
+
typeof msg.spender !== 'string' ||
|
|
574
|
+
typeof msg.nonce !== 'bigint' ||
|
|
575
|
+
typeof msg.deadline !== 'bigint') {
|
|
576
|
+
return undefined;
|
|
577
|
+
}
|
|
578
|
+
return (0, permit2_1.buildPermit2ClaimPolicyCalldata)(signers.session.claimPolicies[0], parameters.message);
|
|
579
|
+
}
|
|
563
580
|
async function signIntentTypedData(config, signers, validator, isRoot, parameters, chain, targetExecution) {
|
|
564
581
|
if ((0, core_1.supportsEip712)(validator)) {
|
|
565
582
|
const isK1Validator = validator.address.toLowerCase() ===
|
|
@@ -585,11 +602,13 @@ async function signIntentTypedData(config, signers, validator, isRoot, parameter
|
|
|
585
602
|
// internally, so no transform is needed here
|
|
586
603
|
return await (0, accounts_1.getEmissarySignature)(config, targetSigners, chain, hash);
|
|
587
604
|
}
|
|
605
|
+
const claimPolicyData = resolveClaimPolicyData(signers, parameters);
|
|
588
606
|
const sessionSignersForEip1271 = {
|
|
589
607
|
type: 'experimental_session',
|
|
590
608
|
session: signers.session,
|
|
591
609
|
verifyExecutions: false,
|
|
592
610
|
enableData: signers.enableData,
|
|
611
|
+
claimPolicyData,
|
|
593
612
|
};
|
|
594
613
|
const eip1271Signature = await (0, accounts_1.getEip1271Signature)(config, sessionSignersForEip1271, chain, {
|
|
595
614
|
address: validator.address,
|
|
@@ -607,7 +626,8 @@ async function signIntentTypedData(config, signers, validator, isRoot, parameter
|
|
|
607
626
|
};
|
|
608
627
|
}
|
|
609
628
|
if (isResolvedSessionSignerSet(signers)) {
|
|
610
|
-
|
|
629
|
+
const claimPolicyData = resolveClaimPolicyData(signers, parameters);
|
|
630
|
+
return await (0, accounts_1.getEip1271Signature)(config, claimPolicyData !== undefined ? { ...signers, claimPolicyData } : signers, chain, {
|
|
611
631
|
address: validator.address,
|
|
612
632
|
isRoot,
|
|
613
633
|
}, hash);
|
package/dist/src/index.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ import { type IntentRoute, type PreparedTransactionData, type PreparedUserOperat
|
|
|
8
8
|
import { MULTI_FACTOR_VALIDATOR_ADDRESS, OWNABLE_VALIDATOR_ADDRESS, SMART_SESSION_EMISSARY_ADDRESS, WEBAUTHN_VALIDATOR_ADDRESS } from './modules';
|
|
9
9
|
import { type SessionDetails } from './modules/validators/smart-sessions';
|
|
10
10
|
import { type ApprovalRequired, type AuxiliaryFunds, getAllSupportedChainsAndTokens, getSupportedTokens, getTokenAddress, getTokenDecimals, type IntentInput, type IntentOp, type IntentOpStatus, type Portfolio, type SettlementLayer, type SignedIntentOp, type SplitIntentsInput, type SplitIntentsResult, type TokenRequirements, type WrapRequired } from './orchestrator';
|
|
11
|
-
import type { AccountProviderConfig, AccountType, BundlerConfig, Call, CallInput, ChainSessionConfig, MultiFactorValidatorConfig, OwnableValidatorConfig, OwnerSet, PaymasterConfig, Policy, ProviderConfig, Recovery, RhinestoneAccountConfig, RhinestoneConfig, RhinestoneSDKConfig, Session, SignerSet, TokenRequest, TokenSymbol, Transaction, UniversalActionPolicyParamCondition, UserOperationTransaction, WebauthnValidatorConfig } from './types';
|
|
11
|
+
import type { AccountProviderConfig, AccountType, BundlerConfig, Call, CallInput, ChainSessionConfig, MultiFactorValidatorConfig, OwnableValidatorConfig, OwnerSet, PaymasterConfig, Permit2ClaimPolicy, Policy, ProviderConfig, Recovery, RhinestoneAccountConfig, RhinestoneConfig, RhinestoneSDKConfig, Session, SignerSet, TokenRequest, TokenSymbol, Transaction, UniversalActionPolicyParamCondition, UserOperationTransaction, WebauthnValidatorConfig } from './types';
|
|
12
12
|
interface RhinestoneAccount {
|
|
13
13
|
config: RhinestoneAccountConfig;
|
|
14
14
|
deploy: (chain: Chain, params?: {
|
|
@@ -75,5 +75,5 @@ declare class RhinestoneSDK {
|
|
|
75
75
|
splitIntents(input: SplitIntentsInput): Promise<SplitIntentsResult>;
|
|
76
76
|
}
|
|
77
77
|
export { RhinestoneSDK, createRhinestoneAccount, deployAccountsForOwners, walletClientToAccount, wrapParaAccount, OWNABLE_VALIDATOR_ADDRESS, WEBAUTHN_VALIDATOR_ADDRESS, MULTI_FACTOR_VALIDATOR_ADDRESS, SMART_SESSION_EMISSARY_ADDRESS, getSupportedTokens, getTokenAddress, getTokenDecimals, getAllSupportedChainsAndTokens, checkERC20AllowanceDirect, getPermit2Address, signPermit2Batch, signPermit2Sequential, };
|
|
78
|
-
export type { RhinestoneAccount, AccountType, RhinestoneAccountConfig, AccountProviderConfig, ProviderConfig, BundlerConfig, PaymasterConfig, Transaction, TokenSymbol, CallInput, Call, TokenRequest, OwnerSet, OwnableValidatorConfig, WebauthnValidatorConfig, MultiFactorValidatorConfig, SignerSet, ChainSessionConfig, Session, Recovery, Policy, UniversalActionPolicyParamCondition, PreparedTransactionData, SignedTransactionData, TransactionResult, PreparedUserOperationData, SignedUserOperationData, UserOperationResult, AuxiliaryFunds, IntentInput, IntentOp, IntentOpStatus, IntentRoute, SettlementLayer, SignedIntentOp, SplitIntentsInput, SplitIntentsResult, Portfolio, TokenRequirements, WrapRequired, ApprovalRequired, MultiChainPermit2Config, MultiChainPermit2Result, BatchPermit2Result, };
|
|
78
|
+
export type { RhinestoneAccount, AccountType, RhinestoneAccountConfig, AccountProviderConfig, ProviderConfig, BundlerConfig, PaymasterConfig, Transaction, TokenSymbol, CallInput, Call, TokenRequest, OwnerSet, OwnableValidatorConfig, WebauthnValidatorConfig, MultiFactorValidatorConfig, SignerSet, ChainSessionConfig, Session, Recovery, Policy, Permit2ClaimPolicy, UniversalActionPolicyParamCondition, PreparedTransactionData, SignedTransactionData, TransactionResult, PreparedUserOperationData, SignedUserOperationData, UserOperationResult, AuxiliaryFunds, IntentInput, IntentOp, IntentOpStatus, IntentRoute, SettlementLayer, SignedIntentOp, SplitIntentsInput, SplitIntentsResult, Portfolio, TokenRequirements, WrapRequired, ApprovalRequired, MultiChainPermit2Config, MultiChainPermit2Result, BatchPermit2Result, };
|
|
79
79
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,KAAK,EACL,uBAAuB,EACvB,GAAG,EACH,eAAe,EACf,uBAAuB,EACvB,SAAS,EACT,mBAAmB,EACpB,MAAM,MAAM,CAAA;AACb,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAapE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAChF,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,EAML,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EAEzB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,KAAK,kBAAkB,EACvB,yBAAyB,EAEzB,iBAAiB,EACjB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAG9B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAQ7B,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAKL,8BAA8B,EAC9B,yBAAyB,EACzB,8BAA8B,EAE9B,0BAA0B,EAC3B,MAAM,WAAW,CAAA;AAClB,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,8BAA8B,EAC9B,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EACV,qBAAqB,EACrB,WAAW,EACX,aAAa,EACb,IAAI,EACJ,SAAS,EACT,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,EACtB,QAAQ,EACR,eAAe,EACf,MAAM,EACN,cAAc,EACd,QAAQ,EACR,uBAAuB,EACvB,gBAAgB,EAChB,mBAAmB,EACnB,OAAO,EACP,SAAS,EACT,YAAY,EACZ,WAAW,EACX,WAAW,EACX,mCAAmC,EACnC,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,SAAS,CAAA;AAEhB,UAAU,iBAAiB;IACzB,MAAM,EAAE,uBAAuB,CAAA;IAC/B,MAAM,EAAE,CACN,KAAK,EAAE,KAAK,EACZ,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,KAChD,OAAO,CAAC,OAAO,CAAC,CAAA;IACrB,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9C,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACzC,WAAW,IAAI;QACb,OAAO,EAAE,OAAO,CAAA;QAChB,WAAW,EAAE,GAAG,CAAA;KACjB,CAAA;IACD,mBAAmB,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAA;IACvC,kBAAkB,EAAE,CAClB,WAAW,EAAE,WAAW,KACrB,OAAO,CAAC,uBAAuB,CAAC,CAAA;IACrC,sBAAsB,EAAE,CAAC,mBAAmB,EAAE,uBAAuB,KAAK;QACxE,MAAM,EAAE,mBAAmB,EAAE,CAAA;QAC7B,WAAW,EAAE,mBAAmB,CAAA;KACjC,CAAA;IACD,eAAe,EAAE,CACf,mBAAmB,EAAE,uBAAuB,KACzC,OAAO,CAAC,qBAAqB,CAAC,CAAA;IACnC,kBAAkB,EAAE,CAClB,mBAAmB,EAAE,uBAAuB,KACzC,OAAO,CAAC,uBAAuB,CAAC,CAAA;IACrC,WAAW,EAAE,CACX,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,SAAS,GAAG,SAAS,KAC3B,OAAO,CAAC,GAAG,CAAC,CAAA;IACjB,aAAa,EAAE,CACb,SAAS,SAAS,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACjE,WAAW,SAAS,MAAM,SAAS,GAAG,cAAc,GAAG,MAAM,SAAS,EAEtE,UAAU,EAAE,uBAAuB,CAAC,SAAS,EAAE,WAAW,CAAC,EAC3D,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,SAAS,GAAG,SAAS,KAC3B,OAAO,CAAC,GAAG,CAAC,CAAA;IACjB,iBAAiB,EAAE,CACjB,iBAAiB,EAAE,qBAAqB,EACxC,cAAc,CAAC,EAAE,uBAAuB,EACxC,MAAM,CAAC,EAAE,OAAO,KACb,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAC/B,eAAe,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACzE,oBAAoB,EAAE,CACpB,WAAW,EAAE,wBAAwB,KAClC,OAAO,CAAC,yBAAyB,CAAC,CAAA;IACvC,iBAAiB,EAAE,CACjB,qBAAqB,EAAE,yBAAyB,KAC7C,OAAO,CAAC,uBAAuB,CAAC,CAAA;IACrC,mBAAmB,EAAE,CACnB,mBAAmB,EAAE,uBAAuB,KACzC,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACjC,iBAAiB,EAAE,CACjB,WAAW,EAAE,wBAAwB,KAClC,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACjC,gBAAgB,CACd,MAAM,EAAE,iBAAiB,EACzB,uBAAuB,CAAC,EAAE,OAAO,GAChC,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAC7B,gBAAgB,CACd,MAAM,EAAE,mBAAmB,EAC3B,uBAAuB,CAAC,EAAE,OAAO,GAChC,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAChC,UAAU,EAAE,MAAM,OAAO,CAAA;IACzB,YAAY,EAAE,CAAC,UAAU,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,SAAS,CAAC,CAAA;IAC1D,8BAA8B,EAAE,CAC9B,QAAQ,EAAE,OAAO,EAAE,KAChB,OAAO,CAAC,cAAc,CAAC,CAAA;IAC5B,6BAA6B,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACrE,8BAA8B,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IACzE,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC;QACnC,QAAQ,EAAE,OAAO,EAAE,CAAA;QACnB,SAAS,EAAE,MAAM,CAAA;KAClB,GAAG,IAAI,CAAC,CAAA;IACT,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;IACnD,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;IAClD,mBAAmB,EAAE,CAAC,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CAC9E;AAED;;;;;GAKG;AACH,iBAAe,uBAAuB,CACpC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,iBAAiB,CAAC,CA2V5B;AAED,cAAM,aAAa;IACjB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,WAAW,CAAC,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,CAAgB;IACjC,OAAO,CAAC,OAAO,CAAC,CAAe;IAC/B,OAAO,CAAC,SAAS,CAAC,CAAiB;IACnC,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,OAAO,CAAC,CAAwB;gBAE5B,OAAO,EAAE,mBAAmB;IAUxC,aAAa,CAAC,MAAM,EAAE,uBAAuB;IAc7C,eAAe,CAAC,QAAQ,EAAE,MAAM;;;IAShC,YAAY,CAAC,KAAK,EAAE,iBAAiB;CAQtC;AAED,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,eAAe,EAEf,yBAAyB,EACzB,0BAA0B,EAC1B,8BAA8B,EAC9B,8BAA8B,EAE9B,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,8BAA8B,EAE9B,yBAAyB,EACzB,iBAAiB,EAEjB,gBAAgB,EAChB,qBAAqB,GACtB,CAAA;AACD,YAAY,EACV,iBAAiB,EACjB,WAAW,EACX,uBAAuB,EACvB,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,eAAe,EACf,WAAW,EACX,WAAW,EACX,SAAS,EACT,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,sBAAsB,EACtB,uBAAuB,EACvB,0BAA0B,EAC1B,SAAS,EACT,kBAAkB,EAClB,OAAO,EACP,QAAQ,EACR,MAAM,EACN,mCAAmC,EACnC,uBAAuB,EACvB,qBAAqB,EACrB,iBAAiB,EACjB,yBAAyB,EACzB,uBAAuB,EACvB,mBAAmB,EACnB,cAAc,EACd,WAAW,EACX,QAAQ,EACR,cAAc,EACd,WAAW,EACX,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAEhB,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,GACnB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { type Address, type Hex } from 'viem';
|
|
2
|
+
import type { Permit2ClaimPolicy } from '../../../../types';
|
|
3
|
+
/** Typed representation of the Permit2 message fields used for calldata building */
|
|
4
|
+
export interface Permit2ClaimMessage {
|
|
5
|
+
permitted: readonly {
|
|
6
|
+
token: Address;
|
|
7
|
+
amount: bigint;
|
|
8
|
+
}[];
|
|
9
|
+
spender: Address;
|
|
10
|
+
nonce: bigint;
|
|
11
|
+
deadline: bigint;
|
|
12
|
+
mandate: {
|
|
13
|
+
target: {
|
|
14
|
+
recipient: Address;
|
|
15
|
+
tokenOut: readonly {
|
|
16
|
+
token: Address;
|
|
17
|
+
amount: bigint;
|
|
18
|
+
}[];
|
|
19
|
+
targetChain: bigint;
|
|
20
|
+
fillExpiry: bigint;
|
|
21
|
+
};
|
|
22
|
+
minGas: bigint;
|
|
23
|
+
originOps: {
|
|
24
|
+
vt: Hex;
|
|
25
|
+
ops: readonly {
|
|
26
|
+
to: Address;
|
|
27
|
+
value: bigint;
|
|
28
|
+
data: Hex;
|
|
29
|
+
}[];
|
|
30
|
+
};
|
|
31
|
+
destOps: {
|
|
32
|
+
vt: Hex;
|
|
33
|
+
ops: readonly {
|
|
34
|
+
to: Address;
|
|
35
|
+
value: bigint;
|
|
36
|
+
data: Hex;
|
|
37
|
+
}[];
|
|
38
|
+
};
|
|
39
|
+
q: Hex;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Builds the policySpecificData calldata for a Permit2ClaimPolicy EIP-1271 check.
|
|
44
|
+
*
|
|
45
|
+
* Format (derived from Permit2ClaimPolicy.sol calldata layout):
|
|
46
|
+
* Header: [spender:20][nonce:32][deadline:32]
|
|
47
|
+
* TokenIn: expanded [count:1][token:32][amount:32]... OR pre-computed hash [32]
|
|
48
|
+
* Mandate: if any target check enabled — expanded target + minGas:16 + ops hashes + q
|
|
49
|
+
* else — pre-computed mandateHash [32]
|
|
50
|
+
*
|
|
51
|
+
*/
|
|
52
|
+
export declare function buildPermit2ClaimPolicyCalldata(policy: Permit2ClaimPolicy, message: Permit2ClaimMessage): Hex;
|
|
53
|
+
export declare const PERMIT2_CLAIM_POLICY_ADDRESS: Address;
|
|
54
|
+
export declare function encodePermit2ClaimPolicyInitData(policy: Permit2ClaimPolicy): Hex;
|
|
55
|
+
//# sourceMappingURL=permit2.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permit2.d.ts","sourceRoot":"","sources":["../../../../../../modules/validators/policies/claim/permit2.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAIZ,KAAK,GAAG,EAKT,MAAM,MAAM,CAAA;AACb,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAiD3D,oFAAoF;AACpF,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,SAAS;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACxD,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE;QACP,MAAM,EAAE;YACN,SAAS,EAAE,OAAO,CAAA;YAClB,QAAQ,EAAE,SAAS;gBAAE,KAAK,EAAE,OAAO,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,EAAE,CAAA;YACvD,WAAW,EAAE,MAAM,CAAA;YACnB,UAAU,EAAE,MAAM,CAAA;SACnB,CAAA;QACD,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,EAAE;YACT,EAAE,EAAE,GAAG,CAAA;YACP,GAAG,EAAE,SAAS;gBAAE,EAAE,EAAE,OAAO,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAC;gBAAC,IAAI,EAAE,GAAG,CAAA;aAAE,EAAE,CAAA;SAC1D,CAAA;QACD,OAAO,EAAE;YACP,EAAE,EAAE,GAAG,CAAA;YACP,GAAG,EAAE,SAAS;gBAAE,EAAE,EAAE,OAAO,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAC;gBAAC,IAAI,EAAE,GAAG,CAAA;aAAE,EAAE,CAAA;SAC1D,CAAA;QACD,CAAC,EAAE,GAAG,CAAA;KACP,CAAA;CACF;AA+ED;;;;;;;;;GASG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,mBAAmB,GAC3B,GAAG,CA2EL;AAED,eAAO,MAAM,4BAA4B,EAAE,OACG,CAAA;AAE9C,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,kBAAkB,GACzB,GAAG,CA2FL"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PERMIT2_CLAIM_POLICY_ADDRESS = void 0;
|
|
4
|
+
exports.buildPermit2ClaimPolicyCalldata = buildPermit2ClaimPolicyCalldata;
|
|
5
|
+
exports.encodePermit2ClaimPolicyInitData = encodePermit2ClaimPolicyInitData;
|
|
6
|
+
const viem_1 = require("viem");
|
|
7
|
+
const types_1 = require("./types");
|
|
8
|
+
// EIP-712 type definitions for Permit2/Mandate struct encoding.
|
|
9
|
+
// Note: the token-out struct is named 'Token' in the Solidity contract (matching the
|
|
10
|
+
// signed Permit2 message types in execution/permit2.ts).
|
|
11
|
+
const PERMIT2_TYPES = {
|
|
12
|
+
TokenPermissions: [
|
|
13
|
+
{ name: 'token', type: 'address' },
|
|
14
|
+
{ name: 'amount', type: 'uint256' },
|
|
15
|
+
],
|
|
16
|
+
Token: [
|
|
17
|
+
{ name: 'token', type: 'address' },
|
|
18
|
+
{ name: 'amount', type: 'uint256' },
|
|
19
|
+
],
|
|
20
|
+
Ops: [
|
|
21
|
+
{ name: 'to', type: 'address' },
|
|
22
|
+
{ name: 'value', type: 'uint256' },
|
|
23
|
+
{ name: 'data', type: 'bytes' },
|
|
24
|
+
],
|
|
25
|
+
Op: [
|
|
26
|
+
{ name: 'vt', type: 'bytes32' },
|
|
27
|
+
{ name: 'ops', type: 'Ops[]' },
|
|
28
|
+
],
|
|
29
|
+
Target: [
|
|
30
|
+
{ name: 'recipient', type: 'address' },
|
|
31
|
+
{ name: 'tokenOut', type: 'Token[]' },
|
|
32
|
+
{ name: 'targetChain', type: 'uint256' },
|
|
33
|
+
{ name: 'fillExpiry', type: 'uint256' },
|
|
34
|
+
],
|
|
35
|
+
Mandate: [
|
|
36
|
+
{ name: 'target', type: 'Target' },
|
|
37
|
+
{ name: 'minGas', type: 'uint128' },
|
|
38
|
+
{ name: 'originOps', type: 'Op' },
|
|
39
|
+
{ name: 'destOps', type: 'Op' },
|
|
40
|
+
{ name: 'q', type: 'bytes32' },
|
|
41
|
+
],
|
|
42
|
+
};
|
|
43
|
+
// --- EIP-712 hash helpers ---
|
|
44
|
+
function hashArray(hashes) {
|
|
45
|
+
return (0, viem_1.keccak256)(hashes.length > 0 ? (0, viem_1.concat)(hashes) : '0x');
|
|
46
|
+
}
|
|
47
|
+
function hashTokenPermissionsArray(permitted) {
|
|
48
|
+
return hashArray(permitted.map(({ token, amount }) => (0, viem_1.hashStruct)({
|
|
49
|
+
primaryType: 'TokenPermissions',
|
|
50
|
+
types: PERMIT2_TYPES,
|
|
51
|
+
data: { token, amount },
|
|
52
|
+
})));
|
|
53
|
+
}
|
|
54
|
+
function hashTokenOutArray(tokenOut) {
|
|
55
|
+
return hashArray(tokenOut.map(({ token, amount }) => (0, viem_1.hashStruct)({
|
|
56
|
+
primaryType: 'Token',
|
|
57
|
+
types: PERMIT2_TYPES,
|
|
58
|
+
data: { token, amount },
|
|
59
|
+
})));
|
|
60
|
+
}
|
|
61
|
+
function hashOpStruct(op) {
|
|
62
|
+
return (0, viem_1.hashStruct)({
|
|
63
|
+
primaryType: 'Op',
|
|
64
|
+
types: PERMIT2_TYPES,
|
|
65
|
+
data: { vt: op.vt, ops: Array.from(op.ops) },
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
function hashMandateStruct(mandate) {
|
|
69
|
+
return (0, viem_1.hashStruct)({
|
|
70
|
+
primaryType: 'Mandate',
|
|
71
|
+
types: PERMIT2_TYPES,
|
|
72
|
+
data: {
|
|
73
|
+
target: {
|
|
74
|
+
recipient: mandate.target.recipient,
|
|
75
|
+
tokenOut: Array.from(mandate.target.tokenOut),
|
|
76
|
+
targetChain: mandate.target.targetChain,
|
|
77
|
+
fillExpiry: mandate.target.fillExpiry,
|
|
78
|
+
},
|
|
79
|
+
minGas: mandate.minGas,
|
|
80
|
+
originOps: {
|
|
81
|
+
vt: mandate.originOps.vt,
|
|
82
|
+
ops: Array.from(mandate.originOps.ops),
|
|
83
|
+
},
|
|
84
|
+
destOps: { vt: mandate.destOps.vt, ops: Array.from(mandate.destOps.ops) },
|
|
85
|
+
q: mandate.q,
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
// --- Token array encoding helpers ---
|
|
90
|
+
/** Encodes a token+amount pair as [token_as_uint256:32][amount:32] (64 bytes) */
|
|
91
|
+
function encodeTokenEntry(token, amount) {
|
|
92
|
+
return (0, viem_1.encodeAbiParameters)([{ type: 'address' }, { type: 'uint256' }], [token, amount]);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Builds the policySpecificData calldata for a Permit2ClaimPolicy EIP-1271 check.
|
|
96
|
+
*
|
|
97
|
+
* Format (derived from Permit2ClaimPolicy.sol calldata layout):
|
|
98
|
+
* Header: [spender:20][nonce:32][deadline:32]
|
|
99
|
+
* TokenIn: expanded [count:1][token:32][amount:32]... OR pre-computed hash [32]
|
|
100
|
+
* Mandate: if any target check enabled — expanded target + minGas:16 + ops hashes + q
|
|
101
|
+
* else — pre-computed mandateHash [32]
|
|
102
|
+
*
|
|
103
|
+
*/
|
|
104
|
+
function buildPermit2ClaimPolicyCalldata(policy, message) {
|
|
105
|
+
const tokenInEnabled = !!policy.tokensIn?.length;
|
|
106
|
+
const recipientEnabled = !!policy.recipients?.length;
|
|
107
|
+
const fillExpiryEnabled = !!policy.fillExpiryBounds?.length;
|
|
108
|
+
const tokenOutEnabled = !!policy.tokensOut?.length;
|
|
109
|
+
const recipientIsSponsorEnabled = !!policy.recipientIsSponsor;
|
|
110
|
+
// hasAnyTargetCheck mirrors the Solidity MASK_TARGET_CHECKS logic for our supported fields
|
|
111
|
+
const hasAnyTargetCheck = recipientEnabled ||
|
|
112
|
+
fillExpiryEnabled ||
|
|
113
|
+
tokenOutEnabled ||
|
|
114
|
+
recipientIsSponsorEnabled;
|
|
115
|
+
const parts = [];
|
|
116
|
+
// Header: [spender:20][nonce:32][deadline:32] (spender == arbiter in Permit2 context)
|
|
117
|
+
parts.push((0, viem_1.encodePacked)(['address', 'uint256', 'uint256'], [message.spender, message.nonce, message.deadline]));
|
|
118
|
+
// TokenIn section
|
|
119
|
+
if (tokenInEnabled) {
|
|
120
|
+
// Expanded: [count:1][token_as_uint256:32][amount:32]...
|
|
121
|
+
if (message.permitted.length > 255)
|
|
122
|
+
throw new Error('permitted array exceeds max length of 255');
|
|
123
|
+
parts.push((0, viem_1.toHex)(message.permitted.length, { size: 1 }));
|
|
124
|
+
for (const { token, amount } of message.permitted) {
|
|
125
|
+
parts.push(encodeTokenEntry(token, amount));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
parts.push(hashTokenPermissionsArray(message.permitted));
|
|
130
|
+
}
|
|
131
|
+
// Mandate section
|
|
132
|
+
if (!hasAnyTargetCheck) {
|
|
133
|
+
// No mandate-level checks enabled — provide pre-computed mandateHash
|
|
134
|
+
parts.push(hashMandateStruct(message.mandate));
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
// Expanded mandate: target fields + minGas + ops hashes + q
|
|
138
|
+
const target = message.mandate.target;
|
|
139
|
+
// Target: [recipient:20][targetChain:32][fillExpiry:32]
|
|
140
|
+
parts.push((0, viem_1.encodePacked)(['address', 'uint256', 'uint256'], [target.recipient, target.targetChain, target.fillExpiry]));
|
|
141
|
+
// TokenOut (inside target)
|
|
142
|
+
if (tokenOutEnabled) {
|
|
143
|
+
if (target.tokenOut.length > 255)
|
|
144
|
+
throw new Error('tokenOut array exceeds max length of 255');
|
|
145
|
+
parts.push((0, viem_1.toHex)(target.tokenOut.length, { size: 1 }));
|
|
146
|
+
for (const { token, amount } of target.tokenOut) {
|
|
147
|
+
parts.push(encodeTokenEntry(token, amount));
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
parts.push(hashTokenOutArray(target.tokenOut));
|
|
152
|
+
}
|
|
153
|
+
// minGas: uint128 = 16 bytes
|
|
154
|
+
parts.push((0, viem_1.toHex)(message.mandate.minGas, { size: 16 }));
|
|
155
|
+
// originOpsHash and destOpsHash: always 32-byte hashes (we don't support ops checks)
|
|
156
|
+
parts.push(hashOpStruct(message.mandate.originOps));
|
|
157
|
+
parts.push(hashOpStruct(message.mandate.destOps));
|
|
158
|
+
// qualificationHash: q is already keccak256(qualifier.encodedVal)
|
|
159
|
+
parts.push(message.mandate.q);
|
|
160
|
+
}
|
|
161
|
+
return (0, viem_1.concat)(parts);
|
|
162
|
+
}
|
|
163
|
+
exports.PERMIT2_CLAIM_POLICY_ADDRESS = '0x62E3588C6d861C9f986E82EC3757434EDF16ce91';
|
|
164
|
+
function encodePermit2ClaimPolicyInitData(policy) {
|
|
165
|
+
let modeConfig = 0;
|
|
166
|
+
const setMode = (fieldId) => {
|
|
167
|
+
modeConfig |= types_1.MODE_CHECK_STORAGE << (fieldId * 2);
|
|
168
|
+
};
|
|
169
|
+
if (policy.arbiters?.length)
|
|
170
|
+
setMode(types_1.FIELD_ARBITER);
|
|
171
|
+
if (policy.expiryBounds)
|
|
172
|
+
setMode(types_1.FIELD_EXPIRY);
|
|
173
|
+
if (policy.tokensIn?.length)
|
|
174
|
+
setMode(types_1.FIELD_TOKEN_IN);
|
|
175
|
+
if (policy.recipients?.length)
|
|
176
|
+
setMode(types_1.FIELD_RECIPIENT);
|
|
177
|
+
if (policy.fillExpiryBounds?.length)
|
|
178
|
+
setMode(types_1.FIELD_FILL_EXPIRY);
|
|
179
|
+
if (policy.tokensOut?.length)
|
|
180
|
+
setMode(types_1.FIELD_TOKEN_OUT);
|
|
181
|
+
if (policy.recipientIsSponsor)
|
|
182
|
+
setMode(types_1.FIELD_RECIPIENT_IS_SPONSOR);
|
|
183
|
+
const parts = [(0, viem_1.toHex)(modeConfig, { size: 4 })];
|
|
184
|
+
// Arbiter: [count: 1][address: 20] each
|
|
185
|
+
if (policy.arbiters?.length) {
|
|
186
|
+
if (policy.arbiters.length > 255)
|
|
187
|
+
throw new Error('arbiters array exceeds max length of 255');
|
|
188
|
+
parts.push((0, viem_1.encodePacked)(['uint8', ...policy.arbiters.map(() => 'address')], [policy.arbiters.length, ...policy.arbiters]));
|
|
189
|
+
}
|
|
190
|
+
// Expiry: [maxExpiry: 16][minExpiry: 16] packed into uint256
|
|
191
|
+
if (policy.expiryBounds) {
|
|
192
|
+
const mask128 = (1n << 128n) - 1n;
|
|
193
|
+
const min = (policy.expiryBounds.min ?? 0n) & mask128;
|
|
194
|
+
const max = (policy.expiryBounds.max ?? viem_1.maxUint256) & mask128;
|
|
195
|
+
parts.push((0, viem_1.toHex)((min & mask128) | (max << 128n), { size: 32 }));
|
|
196
|
+
}
|
|
197
|
+
// TokenIn: [count: 1][chainId: 32][token: 20] each
|
|
198
|
+
if (policy.tokensIn?.length) {
|
|
199
|
+
if (policy.tokensIn.length > 255)
|
|
200
|
+
throw new Error('tokensIn array exceeds max length of 255');
|
|
201
|
+
parts.push((0, viem_1.toHex)(policy.tokensIn.length, { size: 1 }));
|
|
202
|
+
for (const { chainId, token } of policy.tokensIn) {
|
|
203
|
+
parts.push((0, viem_1.encodePacked)(['uint256', 'address'], [BigInt(chainId), token]));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// Recipient: [count: 1][chainId: 32][recipient: 20] each
|
|
207
|
+
if (policy.recipients?.length) {
|
|
208
|
+
if (policy.recipients.length > 255)
|
|
209
|
+
throw new Error('recipients array exceeds max length of 255');
|
|
210
|
+
parts.push((0, viem_1.toHex)(policy.recipients.length, { size: 1 }));
|
|
211
|
+
for (const { chainId, recipient } of policy.recipients) {
|
|
212
|
+
parts.push((0, viem_1.encodePacked)(['uint256', 'address'], [BigInt(chainId), recipient === 'any' ? types_1.ANY_ADDRESS : recipient]));
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// FillExpiry: [count: 1][chainId: 32][max<<128|min packed into uint256] each
|
|
216
|
+
if (policy.fillExpiryBounds?.length) {
|
|
217
|
+
if (policy.fillExpiryBounds.length > 255)
|
|
218
|
+
throw new Error('fillExpiryBounds array exceeds max length of 255');
|
|
219
|
+
const mask128 = (1n << 128n) - 1n;
|
|
220
|
+
parts.push((0, viem_1.toHex)(policy.fillExpiryBounds.length, { size: 1 }));
|
|
221
|
+
for (const { chainId, min: fMin, max: fMax } of policy.fillExpiryBounds) {
|
|
222
|
+
const minVal = (fMin ?? 0n) & mask128;
|
|
223
|
+
const maxVal = (fMax ?? viem_1.maxUint256) & mask128;
|
|
224
|
+
const packed = minVal | (maxVal << 128n);
|
|
225
|
+
parts.push((0, viem_1.encodePacked)(['uint256', 'uint256'], [BigInt(chainId), packed]));
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// TokenOut: [count: 1][chainId: 32][token: 20] each
|
|
229
|
+
if (policy.tokensOut?.length) {
|
|
230
|
+
if (policy.tokensOut.length > 255)
|
|
231
|
+
throw new Error('tokensOut array exceeds max length of 255');
|
|
232
|
+
parts.push((0, viem_1.toHex)(policy.tokensOut.length, { size: 1 }));
|
|
233
|
+
for (const { chainId, token } of policy.tokensOut) {
|
|
234
|
+
parts.push((0, viem_1.encodePacked)(['uint256', 'address'], [BigInt(chainId), token]));
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// RecipientIsSponsor has no data payload — mode bit alone enables it
|
|
238
|
+
return (0, viem_1.concat)(parts);
|
|
239
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permit2.test.d.ts","sourceRoot":"","sources":["../../../../../../modules/validators/policies/claim/permit2.test.ts"],"names":[],"mappings":""}
|