@debridge-finance/borderless-validation-sdk 0.0.6 → 0.0.8
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/cjs/helpers/eip712-types.js +29 -0
- package/dist/cjs/helpers/eip712-types.js.map +1 -0
- package/dist/cjs/helpers/evm-action.js +18 -2
- package/dist/cjs/helpers/evm-action.js.map +1 -1
- package/dist/cjs/helpers/evm-dln-hook-pack.js +8 -6
- package/dist/cjs/helpers/evm-dln-hook-pack.js.map +1 -1
- package/dist/cjs/helpers/evm-gas-compensation-tx.js +26 -7
- package/dist/cjs/helpers/evm-gas-compensation-tx.js.map +1 -1
- package/dist/cjs/helpers/evm-intent-id.js +6 -5
- package/dist/cjs/helpers/evm-intent-id.js.map +1 -1
- package/dist/cjs/helpers/evm-token.js +1 -1
- package/dist/cjs/helpers/evm-token.js.map +1 -1
- package/dist/cjs/helpers/evm-trade-amounts.js +2 -1
- package/dist/cjs/helpers/evm-trade-amounts.js.map +1 -1
- package/dist/cjs/helpers/expected-delegate.js +10 -11
- package/dist/cjs/helpers/expected-delegate.js.map +1 -1
- package/dist/cjs/helpers/gas-compensation.js +3 -0
- package/dist/cjs/helpers/gas-compensation.js.map +1 -1
- package/dist/cjs/helpers/hex.js +35 -0
- package/dist/cjs/helpers/hex.js.map +1 -1
- package/dist/cjs/helpers/integer.js +10 -0
- package/dist/cjs/helpers/integer.js.map +1 -0
- package/dist/cjs/helpers/placeholder.js +99 -4
- package/dist/cjs/helpers/placeholder.js.map +1 -1
- package/dist/cjs/helpers/solana-intent-id.js +6 -5
- package/dist/cjs/helpers/solana-intent-id.js.map +1 -1
- package/dist/cjs/helpers/synthetic-native-wrap.js +56 -0
- package/dist/cjs/helpers/synthetic-native-wrap.js.map +1 -0
- package/dist/cjs/types/enums.js +2 -0
- package/dist/cjs/types/enums.js.map +1 -1
- package/dist/cjs/types/request.js +25 -5
- package/dist/cjs/types/request.js.map +1 -1
- package/dist/cjs/types/response.js +10 -3
- package/dist/cjs/types/response.js.map +1 -1
- package/dist/cjs/types/validation.js +28 -1
- package/dist/cjs/types/validation.js.map +1 -1
- package/dist/cjs/validations/accumulative-token.js +5 -4
- package/dist/cjs/validations/accumulative-token.js.map +1 -1
- package/dist/cjs/validations/compensation-hook.js +14 -4
- package/dist/cjs/validations/compensation-hook.js.map +1 -1
- package/dist/cjs/validations/dln-metadata.js +63 -0
- package/dist/cjs/validations/dln-metadata.js.map +1 -0
- package/dist/cjs/validations/evm-caveats.js +12 -11
- package/dist/cjs/validations/evm-caveats.js.map +1 -1
- package/dist/cjs/validations/evm-op-budget.js +162 -53
- package/dist/cjs/validations/evm-op-budget.js.map +1 -1
- package/dist/cjs/validations/evm-op-hook.js +67 -26
- package/dist/cjs/validations/evm-op-hook.js.map +1 -1
- package/dist/cjs/validations/evm-op-wrap.js +29 -26
- package/dist/cjs/validations/evm-op-wrap.js.map +1 -1
- package/dist/cjs/validations/evm-permit.js +143 -42
- package/dist/cjs/validations/evm-permit.js.map +1 -1
- package/dist/cjs/validations/evm-permit2.js +32 -39
- package/dist/cjs/validations/evm-permit2.js.map +1 -1
- package/dist/cjs/validations/evm-required-actions.js +17 -9
- package/dist/cjs/validations/evm-required-actions.js.map +1 -1
- package/dist/cjs/validations/evm-sign712-metamask.js +126 -3
- package/dist/cjs/validations/evm-sign712-metamask.js.map +1 -1
- package/dist/cjs/validations/evm-sign712-shared.js +4 -5
- package/dist/cjs/validations/evm-sign712-shared.js.map +1 -1
- package/dist/cjs/validations/evm-sign712.js +3 -23
- package/dist/cjs/validations/evm-sign712.js.map +1 -1
- package/dist/cjs/validations/evm-sign7702.js +4 -5
- package/dist/cjs/validations/evm-sign7702.js.map +1 -1
- package/dist/cjs/validations/external-call.js +330 -0
- package/dist/cjs/validations/external-call.js.map +1 -0
- package/dist/cjs/validations/hooks-common.js +279 -25
- package/dist/cjs/validations/hooks-common.js.map +1 -1
- package/dist/cjs/validations/intent-tokens.js +23 -15
- package/dist/cjs/validations/intent-tokens.js.map +1 -1
- package/dist/cjs/validations/intent.js +194 -72
- package/dist/cjs/validations/intent.js.map +1 -1
- package/dist/cjs/validations/ptp.js +7 -6
- package/dist/cjs/validations/ptp.js.map +1 -1
- package/dist/cjs/validations/required-actions.js +6 -4
- package/dist/cjs/validations/required-actions.js.map +1 -1
- package/dist/cjs/validations/solana-hook.js +74 -9
- package/dist/cjs/validations/solana-hook.js.map +1 -1
- package/dist/cjs/validations/solana-op-budget.js +71 -2
- package/dist/cjs/validations/solana-op-budget.js.map +1 -1
- package/dist/cjs/validations/solana-op-wrap.js +32 -4
- package/dist/cjs/validations/solana-op-wrap.js.map +1 -1
- package/dist/cjs/validations/solana-sign.js +31 -15
- package/dist/cjs/validations/solana-sign.js.map +1 -1
- package/dist/cjs/validations/solana-transaction.js +29 -2
- package/dist/cjs/validations/solana-transaction.js.map +1 -1
- package/dist/cjs/validations/total-dst-amount.js +36 -22
- package/dist/cjs/validations/total-dst-amount.js.map +1 -1
- package/dist/cjs/validations/trade-grouping.js +67 -31
- package/dist/cjs/validations/trade-grouping.js.map +1 -1
- package/dist/cjs/validations/trade-matching.js +112 -0
- package/dist/cjs/validations/trade-matching.js.map +1 -0
- package/dist/cjs/validations/trades.js +53 -52
- package/dist/cjs/validations/trades.js.map +1 -1
- package/dist/cjs/validator.js +19 -7
- package/dist/cjs/validator.js.map +1 -1
- package/dist/cjs/whitelists/environment-config.js +65 -16
- package/dist/cjs/whitelists/environment-config.js.map +1 -1
- package/dist/cjs/whitelists/solana/intent-signature.js +7 -2
- package/dist/cjs/whitelists/solana/intent-signature.js.map +1 -1
- package/dist/cjs/whitelists/types.js.map +1 -1
- package/dist/esm/helpers/eip712-types.js +26 -0
- package/dist/esm/helpers/eip712-types.js.map +1 -0
- package/dist/esm/helpers/evm-action.js +16 -2
- package/dist/esm/helpers/evm-action.js.map +1 -1
- package/dist/esm/helpers/evm-dln-hook-pack.js +8 -6
- package/dist/esm/helpers/evm-dln-hook-pack.js.map +1 -1
- package/dist/esm/helpers/evm-gas-compensation-tx.js +26 -7
- package/dist/esm/helpers/evm-gas-compensation-tx.js.map +1 -1
- package/dist/esm/helpers/evm-intent-id.js +6 -5
- package/dist/esm/helpers/evm-intent-id.js.map +1 -1
- package/dist/esm/helpers/evm-token.js +3 -3
- package/dist/esm/helpers/evm-token.js.map +1 -1
- package/dist/esm/helpers/evm-trade-amounts.js +2 -1
- package/dist/esm/helpers/evm-trade-amounts.js.map +1 -1
- package/dist/esm/helpers/expected-delegate.js +10 -11
- package/dist/esm/helpers/expected-delegate.js.map +1 -1
- package/dist/esm/helpers/gas-compensation.js +3 -0
- package/dist/esm/helpers/gas-compensation.js.map +1 -1
- package/dist/esm/helpers/hex.js +29 -0
- package/dist/esm/helpers/hex.js.map +1 -1
- package/dist/esm/helpers/integer.js +7 -0
- package/dist/esm/helpers/integer.js.map +1 -0
- package/dist/esm/helpers/placeholder.js +98 -4
- package/dist/esm/helpers/placeholder.js.map +1 -1
- package/dist/esm/helpers/solana-intent-id.js +6 -5
- package/dist/esm/helpers/solana-intent-id.js.map +1 -1
- package/dist/esm/helpers/synthetic-native-wrap.js +52 -0
- package/dist/esm/helpers/synthetic-native-wrap.js.map +1 -0
- package/dist/esm/types/enums.js +2 -0
- package/dist/esm/types/enums.js.map +1 -1
- package/dist/esm/types/request.js +23 -4
- package/dist/esm/types/request.js.map +1 -1
- package/dist/esm/types/response.js +10 -3
- package/dist/esm/types/response.js.map +1 -1
- package/dist/esm/types/validation.js +28 -1
- package/dist/esm/types/validation.js.map +1 -1
- package/dist/esm/validations/accumulative-token.js +5 -4
- package/dist/esm/validations/accumulative-token.js.map +1 -1
- package/dist/esm/validations/compensation-hook.js +14 -4
- package/dist/esm/validations/compensation-hook.js.map +1 -1
- package/dist/esm/validations/dln-metadata.js +56 -0
- package/dist/esm/validations/dln-metadata.js.map +1 -0
- package/dist/esm/validations/evm-caveats.js +12 -11
- package/dist/esm/validations/evm-caveats.js.map +1 -1
- package/dist/esm/validations/evm-op-budget.js +162 -54
- package/dist/esm/validations/evm-op-budget.js.map +1 -1
- package/dist/esm/validations/evm-op-hook.js +68 -27
- package/dist/esm/validations/evm-op-hook.js.map +1 -1
- package/dist/esm/validations/evm-op-wrap.js +30 -27
- package/dist/esm/validations/evm-op-wrap.js.map +1 -1
- package/dist/esm/validations/evm-permit.js +144 -43
- package/dist/esm/validations/evm-permit.js.map +1 -1
- package/dist/esm/validations/evm-permit2.js +33 -40
- package/dist/esm/validations/evm-permit2.js.map +1 -1
- package/dist/esm/validations/evm-required-actions.js +18 -10
- package/dist/esm/validations/evm-required-actions.js.map +1 -1
- package/dist/esm/validations/evm-sign712-metamask.js +126 -3
- package/dist/esm/validations/evm-sign712-metamask.js.map +1 -1
- package/dist/esm/validations/evm-sign712-shared.js +4 -5
- package/dist/esm/validations/evm-sign712-shared.js.map +1 -1
- package/dist/esm/validations/evm-sign712.js +3 -23
- package/dist/esm/validations/evm-sign712.js.map +1 -1
- package/dist/esm/validations/evm-sign7702.js +4 -5
- package/dist/esm/validations/evm-sign7702.js.map +1 -1
- package/dist/esm/validations/external-call.js +325 -0
- package/dist/esm/validations/external-call.js.map +1 -0
- package/dist/esm/validations/hooks-common.js +280 -26
- package/dist/esm/validations/hooks-common.js.map +1 -1
- package/dist/esm/validations/intent-tokens.js +23 -15
- package/dist/esm/validations/intent-tokens.js.map +1 -1
- package/dist/esm/validations/intent.js +197 -75
- package/dist/esm/validations/intent.js.map +1 -1
- package/dist/esm/validations/ptp.js +7 -6
- package/dist/esm/validations/ptp.js.map +1 -1
- package/dist/esm/validations/required-actions.js +7 -5
- package/dist/esm/validations/required-actions.js.map +1 -1
- package/dist/esm/validations/solana-hook.js +74 -9
- package/dist/esm/validations/solana-hook.js.map +1 -1
- package/dist/esm/validations/solana-op-budget.js +71 -2
- package/dist/esm/validations/solana-op-budget.js.map +1 -1
- package/dist/esm/validations/solana-op-wrap.js +32 -4
- package/dist/esm/validations/solana-op-wrap.js.map +1 -1
- package/dist/esm/validations/solana-sign.js +31 -15
- package/dist/esm/validations/solana-sign.js.map +1 -1
- package/dist/esm/validations/solana-transaction.js +29 -2
- package/dist/esm/validations/solana-transaction.js.map +1 -1
- package/dist/esm/validations/total-dst-amount.js +36 -22
- package/dist/esm/validations/total-dst-amount.js.map +1 -1
- package/dist/esm/validations/trade-grouping.js +67 -31
- package/dist/esm/validations/trade-grouping.js.map +1 -1
- package/dist/esm/validations/trade-matching.js +109 -0
- package/dist/esm/validations/trade-matching.js.map +1 -0
- package/dist/esm/validations/trades.js +53 -52
- package/dist/esm/validations/trades.js.map +1 -1
- package/dist/esm/validator.js +19 -7
- package/dist/esm/validator.js.map +1 -1
- package/dist/esm/whitelists/environment-config.js +65 -16
- package/dist/esm/whitelists/environment-config.js.map +1 -1
- package/dist/esm/whitelists/solana/intent-signature.js +7 -2
- package/dist/esm/whitelists/solana/intent-signature.js.map +1 -1
- package/dist/esm/whitelists/types.js.map +1 -1
- package/dist/types/helpers/eip712-types.d.ts +7 -0
- package/dist/types/helpers/eip712-types.d.ts.map +1 -0
- package/dist/types/helpers/evm-action.d.ts +6 -0
- package/dist/types/helpers/evm-action.d.ts.map +1 -1
- package/dist/types/helpers/evm-dln-hook-pack.d.ts.map +1 -1
- package/dist/types/helpers/evm-gas-compensation-tx.d.ts +3 -1
- package/dist/types/helpers/evm-gas-compensation-tx.d.ts.map +1 -1
- package/dist/types/helpers/evm-intent-id.d.ts.map +1 -1
- package/dist/types/helpers/evm-token.d.ts.map +1 -1
- package/dist/types/helpers/evm-trade-amounts.d.ts.map +1 -1
- package/dist/types/helpers/expected-delegate.d.ts.map +1 -1
- package/dist/types/helpers/gas-compensation.d.ts.map +1 -1
- package/dist/types/helpers/hex.d.ts +6 -0
- package/dist/types/helpers/hex.d.ts.map +1 -1
- package/dist/types/helpers/integer.d.ts +2 -0
- package/dist/types/helpers/integer.d.ts.map +1 -0
- package/dist/types/helpers/placeholder.d.ts +3 -1
- package/dist/types/helpers/placeholder.d.ts.map +1 -1
- package/dist/types/helpers/solana-intent-id.d.ts.map +1 -1
- package/dist/types/helpers/synthetic-native-wrap.d.ts +4 -0
- package/dist/types/helpers/synthetic-native-wrap.d.ts.map +1 -0
- package/dist/types/types/enums.d.ts +4 -2
- package/dist/types/types/enums.d.ts.map +1 -1
- package/dist/types/types/request.d.ts +83 -6
- package/dist/types/types/request.d.ts.map +1 -1
- package/dist/types/types/response.d.ts +95 -12
- package/dist/types/types/response.d.ts.map +1 -1
- package/dist/types/types/validation.d.ts +29 -1
- package/dist/types/types/validation.d.ts.map +1 -1
- package/dist/types/validations/accumulative-token.d.ts.map +1 -1
- package/dist/types/validations/compensation-hook.d.ts +2 -1
- package/dist/types/validations/compensation-hook.d.ts.map +1 -1
- package/dist/types/validations/dln-metadata.d.ts +7 -0
- package/dist/types/validations/dln-metadata.d.ts.map +1 -0
- package/dist/types/validations/evm-caveats.d.ts +2 -1
- package/dist/types/validations/evm-caveats.d.ts.map +1 -1
- package/dist/types/validations/evm-op-budget.d.ts +8 -0
- package/dist/types/validations/evm-op-budget.d.ts.map +1 -1
- package/dist/types/validations/evm-op-hook.d.ts +2 -1
- package/dist/types/validations/evm-op-hook.d.ts.map +1 -1
- package/dist/types/validations/evm-op-wrap.d.ts.map +1 -1
- package/dist/types/validations/evm-permit.d.ts.map +1 -1
- package/dist/types/validations/evm-permit2.d.ts.map +1 -1
- package/dist/types/validations/evm-required-actions.d.ts +1 -1
- package/dist/types/validations/evm-required-actions.d.ts.map +1 -1
- package/dist/types/validations/evm-sign712-metamask.d.ts +2 -1
- package/dist/types/validations/evm-sign712-metamask.d.ts.map +1 -1
- package/dist/types/validations/evm-sign712-shared.d.ts +3 -2
- package/dist/types/validations/evm-sign712-shared.d.ts.map +1 -1
- package/dist/types/validations/evm-sign712.d.ts.map +1 -1
- package/dist/types/validations/evm-sign7702.d.ts +3 -2
- package/dist/types/validations/evm-sign7702.d.ts.map +1 -1
- package/dist/types/validations/external-call.d.ts +15 -0
- package/dist/types/validations/external-call.d.ts.map +1 -0
- package/dist/types/validations/hooks-common.d.ts +5 -1
- package/dist/types/validations/hooks-common.d.ts.map +1 -1
- package/dist/types/validations/intent-tokens.d.ts.map +1 -1
- package/dist/types/validations/intent.d.ts +1 -1
- package/dist/types/validations/intent.d.ts.map +1 -1
- package/dist/types/validations/ptp.d.ts.map +1 -1
- package/dist/types/validations/required-actions.d.ts +1 -1
- package/dist/types/validations/required-actions.d.ts.map +1 -1
- package/dist/types/validations/solana-hook.d.ts +2 -1
- package/dist/types/validations/solana-hook.d.ts.map +1 -1
- package/dist/types/validations/solana-op-budget.d.ts.map +1 -1
- package/dist/types/validations/solana-op-wrap.d.ts.map +1 -1
- package/dist/types/validations/solana-transaction.d.ts.map +1 -1
- package/dist/types/validations/total-dst-amount.d.ts.map +1 -1
- package/dist/types/validations/trade-grouping.d.ts +2 -1
- package/dist/types/validations/trade-grouping.d.ts.map +1 -1
- package/dist/types/validations/trade-matching.d.ts +13 -0
- package/dist/types/validations/trade-matching.d.ts.map +1 -0
- package/dist/types/validations/trades.d.ts +2 -1
- package/dist/types/validations/trades.d.ts.map +1 -1
- package/dist/types/validator.d.ts.map +1 -1
- package/dist/types/whitelists/environment-config.d.ts.map +1 -1
- package/dist/types/whitelists/solana/intent-signature.d.ts +1 -0
- package/dist/types/whitelists/solana/intent-signature.d.ts.map +1 -1
- package/dist/types/whitelists/types.d.ts +9 -0
- package/dist/types/whitelists/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.validateBudgetOperations = validateBudgetOperations;
|
|
4
|
+
exports.getBudgetApprovalInfo = getBudgetApprovalInfo;
|
|
4
5
|
const types_1 = require("../types");
|
|
5
6
|
const types_2 = require("../whitelists/types");
|
|
6
7
|
const evm_calldata_1 = require("../helpers/evm-calldata");
|
|
@@ -9,6 +10,7 @@ const evm_token_1 = require("../helpers/evm-token");
|
|
|
9
10
|
const address_1 = require("../helpers/address");
|
|
10
11
|
const evm_trade_amounts_1 = require("../helpers/evm-trade-amounts");
|
|
11
12
|
const evm_action_1 = require("../helpers/evm-action");
|
|
13
|
+
const integer_1 = require("../helpers/integer");
|
|
12
14
|
function validateBudgetOperations(actions, basePath, request, trades, responseTrades, realChainId, envConfig) {
|
|
13
15
|
const violations = [];
|
|
14
16
|
for (let i = 0; i < actions.length; i++) {
|
|
@@ -18,12 +20,11 @@ function validateBudgetOperations(actions, basePath, request, trades, responseTr
|
|
|
18
20
|
const actionPath = `${basePath}.requiredActions[${i}]`;
|
|
19
21
|
// Applies to ALL Budget actions regardless of type
|
|
20
22
|
violations.push(...validateBudgetApproveNone(request, actionPath));
|
|
21
|
-
// Token address and calldata checks only apply to actions that
|
|
22
|
-
//
|
|
23
|
-
// validated by the permit/permit2 validators instead.
|
|
23
|
+
// Token address and calldata checks only apply to actions that carry
|
|
24
|
+
// effective transaction calls. Permit/Permit2 are validated separately.
|
|
24
25
|
if (!(0, evm_action_1.actionUsesTransactionCalls)(action))
|
|
25
26
|
continue;
|
|
26
|
-
violations.push(...validateBudgetTokenAddress(action, actionPath, trades, realChainId), ...
|
|
27
|
+
violations.push(...validateBudgetTokenAddress(action, actionPath, trades, realChainId), ...validateBudgetTransactionValues(action, actionPath), ...validateBudgetCalldata(actions, i, actionPath, request, trades, responseTrades, realChainId, envConfig));
|
|
27
28
|
}
|
|
28
29
|
return violations;
|
|
29
30
|
}
|
|
@@ -39,17 +40,19 @@ function validateBudgetApproveNone(request, actionPath) {
|
|
|
39
40
|
}
|
|
40
41
|
return [];
|
|
41
42
|
}
|
|
42
|
-
// CRITICAL:
|
|
43
|
+
// CRITICAL: effective call target == details.tokenAddress, non-zero, in trades
|
|
43
44
|
function validateBudgetTokenAddress(action, actionPath, trades, realChainId) {
|
|
44
45
|
const violations = [];
|
|
45
|
-
const
|
|
46
|
+
const txCallRefs = (0, evm_action_1.getTransactionCallRefs)(action, actionPath);
|
|
46
47
|
const tokenAddress = action.details?.tokenAddress;
|
|
47
|
-
// CRITICAL:
|
|
48
|
-
|
|
48
|
+
// CRITICAL: at least one effective transaction call must be present.
|
|
49
|
+
// Non-AA Transaction actions store it in action.data; AA actions store it
|
|
50
|
+
// in details.transactionCalls[].
|
|
51
|
+
if (txCallRefs.length === 0) {
|
|
49
52
|
violations.push({
|
|
50
53
|
code: types_1.ViolationCode.BudgetTransactionCallsMissing,
|
|
51
|
-
message: `Budget must have at least one
|
|
52
|
-
path:
|
|
54
|
+
message: `Budget must have at least one effective transaction call`,
|
|
55
|
+
path: (0, evm_action_1.getTransactionCallsContainerPath)(action, actionPath),
|
|
53
56
|
actual: [],
|
|
54
57
|
});
|
|
55
58
|
}
|
|
@@ -64,18 +67,21 @@ function validateBudgetTokenAddress(action, actionPath, trades, realChainId) {
|
|
|
64
67
|
}
|
|
65
68
|
// Skip further checks if critical data is missing.
|
|
66
69
|
// It's safe as we already reported the violations for missing the required fields.
|
|
67
|
-
if (
|
|
70
|
+
if (txCallRefs.length === 0 || !tokenAddress)
|
|
68
71
|
return violations;
|
|
69
|
-
|
|
70
|
-
//
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
72
|
+
// CRITICAL: every effective Budget approve/reset call target must equal
|
|
73
|
+
// details.tokenAddress. This covers both one-call and reset+approve shapes.
|
|
74
|
+
for (const txCallRef of txCallRefs) {
|
|
75
|
+
const txTo = txCallRef.call.to;
|
|
76
|
+
if (!txTo || !(0, address_1.addressEquals)(realChainId, txTo, tokenAddress)) {
|
|
77
|
+
violations.push({
|
|
78
|
+
code: types_1.ViolationCode.BudgetTokenAddressMismatch,
|
|
79
|
+
message: `Budget transaction call target must equal details.tokenAddress`,
|
|
80
|
+
path: `${txCallRef.path}.to`,
|
|
81
|
+
expected: tokenAddress,
|
|
82
|
+
actual: txTo,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
79
85
|
}
|
|
80
86
|
// CRITICAL: must be non-zero address
|
|
81
87
|
if ((0, evm_token_1.isNativeToken)(tokenAddress, realChainId)) {
|
|
@@ -104,70 +110,111 @@ function validateBudgetTokenAddress(action, actionPath, trades, realChainId) {
|
|
|
104
110
|
}
|
|
105
111
|
return violations;
|
|
106
112
|
}
|
|
113
|
+
// CRITICAL: Budget approve/reset calls must not send native value.
|
|
114
|
+
function validateBudgetTransactionValues(action, actionPath) {
|
|
115
|
+
const violations = [];
|
|
116
|
+
const txCallRefs = (0, evm_action_1.getTransactionCallRefs)(action, actionPath);
|
|
117
|
+
for (const txCallRef of txCallRefs) {
|
|
118
|
+
try {
|
|
119
|
+
const value = (0, integer_1.parseIntegerString)(txCallRef.call.value);
|
|
120
|
+
if (value !== 0n) {
|
|
121
|
+
violations.push({
|
|
122
|
+
code: types_1.ViolationCode.BudgetTransactionValueNonZero,
|
|
123
|
+
message: `Budget transaction call value must be zero`,
|
|
124
|
+
path: `${txCallRef.path}.value`,
|
|
125
|
+
expected: "0",
|
|
126
|
+
actual: value.toString(),
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
violations.push({
|
|
132
|
+
code: types_1.ViolationCode.BudgetTransactionValueNonZero,
|
|
133
|
+
message: `Budget transaction call value is not a valid integer`,
|
|
134
|
+
path: `${txCallRef.path}.value`,
|
|
135
|
+
expected: "0",
|
|
136
|
+
actual: txCallRef.call.value,
|
|
137
|
+
details: error,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return violations;
|
|
142
|
+
}
|
|
107
143
|
// CRITICAL: decode approve calldata, validate spender + amount + allowanceHolder
|
|
108
|
-
// Handles
|
|
109
|
-
|
|
110
|
-
|
|
144
|
+
// Handles both accepted reset shapes:
|
|
145
|
+
// - separate reset action followed by the main Budget action;
|
|
146
|
+
// - one action with reset + main transactionCalls.
|
|
147
|
+
function validateBudgetCalldata(actions, actionIndex, actionPath, request, trades, responseTrades, realChainId, envConfig) {
|
|
148
|
+
const action = actions[actionIndex];
|
|
149
|
+
const txCallRefs = (0, evm_action_1.getTransactionCallRefs)(action, actionPath);
|
|
111
150
|
// Missing txCalls is reported by validateBudgetTokenAddress
|
|
112
|
-
if (
|
|
151
|
+
if (txCallRefs.length === 0)
|
|
113
152
|
return [];
|
|
114
|
-
const decoded = decodeBudgetApproveCalls(
|
|
153
|
+
const decoded = decodeBudgetApproveCalls(txCallRefs, action, actionPath, realChainId);
|
|
115
154
|
if ("violations" in decoded)
|
|
116
155
|
return decoded.violations;
|
|
117
156
|
const violations = [];
|
|
118
|
-
|
|
157
|
+
const isSeparateReset = txCallRefs.length === 1 && decoded.amount === 0n;
|
|
158
|
+
violations.push(...validateBudgetAllowanceHolder(decoded.spender, action, actionPath, decoded.path, realChainId, envConfig));
|
|
159
|
+
if (isSeparateReset) {
|
|
160
|
+
violations.push(...validateSeparateBudgetResetPair(actions, actionIndex, actionPath, decoded, realChainId));
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
violations.push(...validateBudgetAmount(decoded.amount, decoded.path, request, trades, responseTrades, action, realChainId));
|
|
164
|
+
}
|
|
119
165
|
return violations;
|
|
120
166
|
}
|
|
121
167
|
// Decodes one or two approve calls. Returns the "real" approve.
|
|
122
168
|
// If two calls: first must be approve(spender, 0), second is the real one.
|
|
123
|
-
function decodeBudgetApproveCalls(
|
|
124
|
-
const calldataPath =
|
|
125
|
-
// CRITICAL: at most 2
|
|
126
|
-
if (
|
|
169
|
+
function decodeBudgetApproveCalls(txCallRefs, action, actionPath, realChainId) {
|
|
170
|
+
const calldataPath = (0, evm_action_1.getTransactionCallsContainerPath)(action, actionPath);
|
|
171
|
+
// CRITICAL: at most 2 effective transaction calls
|
|
172
|
+
if (txCallRefs.length > 2) {
|
|
127
173
|
return { violations: [{
|
|
128
174
|
code: types_1.ViolationCode.BudgetTooManyTransactionCalls,
|
|
129
|
-
message: `Budget must have at most 2
|
|
175
|
+
message: `Budget must have at most 2 effective transaction calls`,
|
|
130
176
|
path: calldataPath,
|
|
131
177
|
expected: 2,
|
|
132
|
-
actual:
|
|
178
|
+
actual: txCallRefs.length,
|
|
133
179
|
}] };
|
|
134
180
|
}
|
|
135
|
-
const mainApproveIndex =
|
|
181
|
+
const mainApproveIndex = txCallRefs.length - 1;
|
|
182
|
+
const mainCallRef = txCallRefs[mainApproveIndex];
|
|
136
183
|
// Decode last call — this is always the "real" approve
|
|
137
184
|
let mainApprove;
|
|
138
185
|
try {
|
|
139
|
-
mainApprove = (0, evm_calldata_1.decodeApproveCalldata)(
|
|
186
|
+
mainApprove = (0, evm_calldata_1.decodeApproveCalldata)(mainCallRef.call.data);
|
|
140
187
|
}
|
|
141
188
|
catch (e) {
|
|
142
189
|
return { violations: [{
|
|
143
190
|
code: types_1.ViolationCode.BudgetCalldataInvalid,
|
|
144
191
|
message: `Budget calldata is not valid approve`,
|
|
145
|
-
path: `${
|
|
146
|
-
actual:
|
|
192
|
+
path: `${mainCallRef.path}.data`,
|
|
193
|
+
actual: mainCallRef.call.data,
|
|
147
194
|
details: e,
|
|
148
195
|
}] };
|
|
149
196
|
}
|
|
150
197
|
// If two calls, the first must be a reset: approve(same spender, 0)
|
|
151
|
-
if (
|
|
152
|
-
const resetViolations = validateBudgetResetCall(
|
|
198
|
+
if (txCallRefs.length === 2) {
|
|
199
|
+
const resetViolations = validateBudgetResetCall(txCallRefs[0], mainApprove.spender, realChainId);
|
|
153
200
|
if (resetViolations.length > 0) {
|
|
154
201
|
return { violations: resetViolations };
|
|
155
202
|
}
|
|
156
203
|
}
|
|
157
|
-
return { ...mainApprove,
|
|
204
|
+
return { ...mainApprove, path: `${mainCallRef.path}.data` };
|
|
158
205
|
}
|
|
159
206
|
// Validates the reset call: must be approve(same spender, 0)
|
|
160
|
-
function validateBudgetResetCall(
|
|
207
|
+
function validateBudgetResetCall(txCallRef, expectedSpender, realChainId) {
|
|
161
208
|
let resetApprove;
|
|
162
209
|
try {
|
|
163
|
-
resetApprove = (0, evm_calldata_1.decodeApproveCalldata)(
|
|
210
|
+
resetApprove = (0, evm_calldata_1.decodeApproveCalldata)(txCallRef.call.data);
|
|
164
211
|
}
|
|
165
212
|
catch (e) {
|
|
166
213
|
return [{
|
|
167
214
|
code: types_1.ViolationCode.BudgetCalldataInvalid,
|
|
168
215
|
message: `Budget reset calldata is not valid approve`,
|
|
169
|
-
path: `${
|
|
170
|
-
actual:
|
|
216
|
+
path: `${txCallRef.path}.data`,
|
|
217
|
+
actual: txCallRef.call.data,
|
|
171
218
|
details: e,
|
|
172
219
|
}];
|
|
173
220
|
}
|
|
@@ -177,37 +224,99 @@ function validateBudgetResetCall(txCall, expectedSpender, calldataPath) {
|
|
|
177
224
|
violations.push({
|
|
178
225
|
code: types_1.ViolationCode.BudgetCalldataInvalid,
|
|
179
226
|
message: `Budget two-step approve: first call must be approve(spender, 0)`,
|
|
180
|
-
path: `${
|
|
227
|
+
path: `${txCallRef.path}.data`,
|
|
181
228
|
expected: "0",
|
|
182
229
|
actual: resetApprove.amount.toString(),
|
|
183
230
|
});
|
|
184
231
|
}
|
|
185
232
|
// CRITICAL: reset spender must match main spender
|
|
186
|
-
if (resetApprove.spender
|
|
233
|
+
if (!(0, address_1.addressEquals)(realChainId, resetApprove.spender, expectedSpender)) {
|
|
187
234
|
violations.push({
|
|
188
235
|
code: types_1.ViolationCode.BudgetCalldataInvalid,
|
|
189
236
|
message: `Budget two-step approve: reset spender must match main spender`,
|
|
190
|
-
path: `${
|
|
237
|
+
path: `${txCallRef.path}.data`,
|
|
191
238
|
expected: expectedSpender,
|
|
192
239
|
actual: resetApprove.spender,
|
|
193
240
|
});
|
|
194
241
|
}
|
|
195
242
|
return violations;
|
|
196
243
|
}
|
|
244
|
+
function getBudgetApprovalInfo(action) {
|
|
245
|
+
if (action === undefined ||
|
|
246
|
+
!action.actions.includes(types_1.EvmActionOperation.Budget) ||
|
|
247
|
+
!(0, evm_action_1.actionUsesTransactionCalls)(action) ||
|
|
248
|
+
!action.details?.tokenAddress) {
|
|
249
|
+
return undefined;
|
|
250
|
+
}
|
|
251
|
+
const txCalls = (0, evm_action_1.getTransactionCalls)(action);
|
|
252
|
+
if (txCalls.length === 0 || txCalls.length > 2)
|
|
253
|
+
return undefined;
|
|
254
|
+
try {
|
|
255
|
+
const approve = (0, evm_calldata_1.decodeApproveCalldata)(txCalls[txCalls.length - 1].data);
|
|
256
|
+
return {
|
|
257
|
+
tokenAddress: action.details.tokenAddress,
|
|
258
|
+
allowanceHolder: action.details.allowanceHolder,
|
|
259
|
+
spender: approve.spender,
|
|
260
|
+
amount: approve.amount,
|
|
261
|
+
callCount: txCalls.length,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
return undefined;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
// HIGH: a standalone zero-reset approve is only valid when it is immediately
|
|
269
|
+
// followed by the main Budget approve for the same token/spender/holder.
|
|
270
|
+
function validateSeparateBudgetResetPair(actions, actionIndex, actionPath, decodedReset, realChainId) {
|
|
271
|
+
const current = getBudgetApprovalInfo(actions[actionIndex]);
|
|
272
|
+
const next = getBudgetApprovalInfo(actions[actionIndex + 1]);
|
|
273
|
+
const paired = current !== undefined &&
|
|
274
|
+
next !== undefined &&
|
|
275
|
+
current.callCount === 1 &&
|
|
276
|
+
next.callCount === 1 &&
|
|
277
|
+
next.amount !== 0n &&
|
|
278
|
+
sameBudgetApprovalTarget(current, next, realChainId);
|
|
279
|
+
if (paired)
|
|
280
|
+
return [];
|
|
281
|
+
return [{
|
|
282
|
+
code: types_1.ViolationCode.BudgetResetActionUnpaired,
|
|
283
|
+
message: `Budget zero-reset action must be immediately followed by`
|
|
284
|
+
+ ` the main Budget approve for the same token and spender`,
|
|
285
|
+
path: actionPath,
|
|
286
|
+
actual: {
|
|
287
|
+
tokenAddress: current?.tokenAddress,
|
|
288
|
+
allowanceHolder: current?.allowanceHolder,
|
|
289
|
+
spender: decodedReset.spender,
|
|
290
|
+
amount: decodedReset.amount.toString(),
|
|
291
|
+
next: next ? {
|
|
292
|
+
tokenAddress: next.tokenAddress,
|
|
293
|
+
allowanceHolder: next.allowanceHolder,
|
|
294
|
+
spender: next.spender,
|
|
295
|
+
amount: next.amount.toString(),
|
|
296
|
+
} : undefined,
|
|
297
|
+
},
|
|
298
|
+
}];
|
|
299
|
+
}
|
|
300
|
+
function sameBudgetApprovalTarget(a, b, realChainId) {
|
|
301
|
+
return (0, address_1.addressEquals)(realChainId, a.tokenAddress, b.tokenAddress) &&
|
|
302
|
+
(0, address_1.addressEquals)(realChainId, a.spender, b.spender) &&
|
|
303
|
+
a.allowanceHolder !== undefined &&
|
|
304
|
+
b.allowanceHolder !== undefined &&
|
|
305
|
+
(0, address_1.addressEquals)(realChainId, a.allowanceHolder, b.allowanceHolder);
|
|
306
|
+
}
|
|
197
307
|
// CRITICAL: approve amount validation. The expected amount is
|
|
198
308
|
// `Σ response.trades[i].srcChainTokenIn.amount` over trades whose input
|
|
199
309
|
// token matches the Budget action's token — the same response-side number
|
|
200
310
|
// the API uses for `intent.inputToken[].constraintBudget` and Wrap.value.
|
|
201
|
-
function validateBudgetAmount(approveAmount,
|
|
311
|
+
function validateBudgetAmount(approveAmount, calldataPath, request, trades, responseTrades, action, realChainId) {
|
|
202
312
|
const flag = request.approveAmountFlag;
|
|
203
|
-
const dataPath = `${actionPath}.details.transactionCalls[${mainIndex}].data`;
|
|
204
313
|
// unlimited: must be maxUint256
|
|
205
314
|
if (flag === types_1.ApproveAmountFlag.Unlimited) {
|
|
206
315
|
if (approveAmount !== viem_1.maxUint256) {
|
|
207
316
|
return [{
|
|
208
317
|
code: types_1.ViolationCode.BudgetAmountMismatch,
|
|
209
318
|
message: `Budget approve amount must be maxUint256 when approveAmountFlag="unlimited"`,
|
|
210
|
-
path:
|
|
319
|
+
path: calldataPath,
|
|
211
320
|
expected: viem_1.maxUint256.toString(),
|
|
212
321
|
actual: approveAmount.toString(),
|
|
213
322
|
}];
|
|
@@ -228,7 +337,7 @@ function validateBudgetAmount(approveAmount, actionPath, mainIndex, request, tra
|
|
|
228
337
|
return [{
|
|
229
338
|
code: types_1.ViolationCode.BudgetAmountMismatch,
|
|
230
339
|
message: `Budget approve amount does not match sum of trade amounts`,
|
|
231
|
-
path:
|
|
340
|
+
path: calldataPath,
|
|
232
341
|
expected: sumResult.sum.toString(),
|
|
233
342
|
actual: approveAmount.toString(),
|
|
234
343
|
}];
|
|
@@ -236,7 +345,7 @@ function validateBudgetAmount(approveAmount, actionPath, mainIndex, request, tra
|
|
|
236
345
|
return [];
|
|
237
346
|
}
|
|
238
347
|
// CRITICAL: approve target == details.allowanceHolder, both whitelisted
|
|
239
|
-
function validateBudgetAllowanceHolder(approveSpender, action, actionPath,
|
|
348
|
+
function validateBudgetAllowanceHolder(approveSpender, action, actionPath, calldataPath, realChainId, envConfig) {
|
|
240
349
|
const violations = [];
|
|
241
350
|
const allowanceHolder = action.details?.allowanceHolder;
|
|
242
351
|
// CRITICAL: approve target must equal details.allowanceHolder
|
|
@@ -255,7 +364,7 @@ function validateBudgetAllowanceHolder(approveSpender, action, actionPath, mainI
|
|
|
255
364
|
violations.push({
|
|
256
365
|
code: types_1.ViolationCode.BudgetAllowanceHolderNotWhitelisted,
|
|
257
366
|
message: `Budget approve spender is not a whitelisted AllowanceHolder`,
|
|
258
|
-
path:
|
|
367
|
+
path: calldataPath,
|
|
259
368
|
actual: approveSpender,
|
|
260
369
|
});
|
|
261
370
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm-op-budget.js","sourceRoot":"","sources":["../../../src/validations/evm-op-budget.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"evm-op-budget.js","sourceRoot":"","sources":["../../../src/validations/evm-op-budget.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.validateEvmHookActions = validateEvmHookActions;
|
|
4
4
|
const types_1 = require("../types");
|
|
5
|
+
const request_1 = require("../types/request");
|
|
5
6
|
const placeholder_1 = require("../helpers/placeholder");
|
|
6
7
|
const gas_compensation_1 = require("../helpers/gas-compensation");
|
|
7
8
|
const evm_gas_compensation_tx_1 = require("../helpers/evm-gas-compensation-tx");
|
|
9
|
+
const integer_1 = require("../helpers/integer");
|
|
8
10
|
const address_1 = require("../helpers/address");
|
|
9
11
|
const expected_delegate_1 = require("../helpers/expected-delegate");
|
|
10
12
|
const evm_sign7702_1 = require("./evm-sign7702");
|
|
@@ -13,12 +15,14 @@ const SIGN712_HOOK_TYPES = [
|
|
|
13
15
|
types_1.EvmActionKind.Sign712MetaMaskCaveats,
|
|
14
16
|
types_1.EvmActionKind.Sign712MetaMaskCaveatsWithPlaceholders,
|
|
15
17
|
];
|
|
16
|
-
function validateEvmHookActions(hookPayload, requestHook, basePath, mode, responseTrades, realChainId, request) {
|
|
18
|
+
function validateEvmHookActions(hookPayload, requestHook, basePath, mode, responseTrades, realChainId, request, envConfig) {
|
|
17
19
|
const violations = [];
|
|
20
|
+
if (!(0, request_1.isRequestHookV2)(hookPayload.hook))
|
|
21
|
+
return violations;
|
|
18
22
|
for (let i = 0; i < hookPayload.requiredActions.length; i++) {
|
|
19
23
|
const action = hookPayload.requiredActions[i];
|
|
20
24
|
const actionPath = `${basePath}.requiredActions[${i}]`;
|
|
21
|
-
violations.push(...validateHookSign7702Binding(action, actionPath, realChainId));
|
|
25
|
+
violations.push(...validateHookSign7702Binding(action, actionPath, realChainId, envConfig));
|
|
22
26
|
}
|
|
23
27
|
if (hookPayload.hook.type === types_1.BundleHookType.Direct) {
|
|
24
28
|
violations.push(...validateDirectEvmHookActions(hookPayload, requestHook, basePath));
|
|
@@ -30,12 +34,12 @@ function validateEvmHookActions(hookPayload, requestHook, basePath, mode, respon
|
|
|
30
34
|
const expectedDelegate = request.enableAccountAbstraction
|
|
31
35
|
? (0, expected_delegate_1.getExpectedBundleHookDelegate)(request.trades, hookPayload.hook.chainId)
|
|
32
36
|
: undefined;
|
|
33
|
-
violations.push(...validateDelegatedEvmHookActions(hookPayload, requestHook, basePath, realChainId, request.expirationTimestamp, expectedDelegate));
|
|
37
|
+
violations.push(...validateDelegatedEvmHookActions(hookPayload, requestHook, basePath, realChainId, request.expirationTimestamp, expectedDelegate, envConfig));
|
|
34
38
|
}
|
|
35
39
|
violations.push(...validateHookActionCalldata(hookPayload, requestHook, basePath, mode, responseTrades, realChainId));
|
|
36
|
-
violations.push(...validateHookActionTransactionCallsMatch(hookPayload, basePath));
|
|
40
|
+
violations.push(...validateHookActionTransactionCallsMatch(hookPayload, requestHook, basePath, mode, responseTrades, realChainId));
|
|
37
41
|
if (requestHook === undefined && mode === placeholder_1.HookMode.PreHooks) {
|
|
38
|
-
violations.push(...validateCompensationHookTransactionCall(hookPayload, basePath, request, realChainId));
|
|
42
|
+
violations.push(...validateCompensationHookTransactionCall(hookPayload, basePath, request, realChainId, envConfig));
|
|
39
43
|
}
|
|
40
44
|
return violations;
|
|
41
45
|
}
|
|
@@ -46,7 +50,7 @@ function validateEvmHookActions(hookPayload, requestHook, basePath, mode, respon
|
|
|
46
50
|
// `Transaction`) would slip through the operation/position checks elsewhere.
|
|
47
51
|
// The per-action [Delegate] + contractAddress checks are shared with intent-scope
|
|
48
52
|
// via `validateSign7702Action`; the type <-> [Delegate] binding is hook-specific.
|
|
49
|
-
function validateHookSign7702Binding(action, actionPath, realChainId) {
|
|
53
|
+
function validateHookSign7702Binding(action, actionPath, realChainId, envConfig) {
|
|
50
54
|
const violations = [];
|
|
51
55
|
const ops = action.actions;
|
|
52
56
|
const hasDelegate = ops.includes(types_1.EvmActionOperation.Delegate);
|
|
@@ -62,7 +66,7 @@ function validateHookSign7702Binding(action, actionPath, realChainId) {
|
|
|
62
66
|
});
|
|
63
67
|
}
|
|
64
68
|
if (isSign7702) {
|
|
65
|
-
violations.push(...(0, evm_sign7702_1.validateSign7702Action)(action, actionPath, realChainId));
|
|
69
|
+
violations.push(...(0, evm_sign7702_1.validateSign7702Action)(action, actionPath, realChainId, envConfig));
|
|
66
70
|
}
|
|
67
71
|
return violations;
|
|
68
72
|
}
|
|
@@ -109,7 +113,7 @@ function validateDirectAction(action, expectsTransaction, hookChainId, expectedD
|
|
|
109
113
|
// `Sign712MetaMaskCaveatsWithPlaceholders` (when at least one deferred
|
|
110
114
|
// placeholder is declared). transactionCalls form, placeholders match, and
|
|
111
115
|
// EIP-712 content checks (domain, delegator, caveats) are checked per-action below.
|
|
112
|
-
function validateDelegatedEvmHookActions(hookPayload, requestHook, basePath, realChainId, expirationTimestamp, expectedDelegate) {
|
|
116
|
+
function validateDelegatedEvmHookActions(hookPayload, requestHook, basePath, realChainId, expirationTimestamp, expectedDelegate, envConfig) {
|
|
113
117
|
const violations = [];
|
|
114
118
|
const expectedDeferred = collectDeferredPlaceholders(requestHook);
|
|
115
119
|
const hasDeferred = expectedDeferred.length > 0;
|
|
@@ -122,6 +126,7 @@ function validateDelegatedEvmHookActions(hookPayload, requestHook, basePath, rea
|
|
|
122
126
|
realChainId,
|
|
123
127
|
expirationTimestamp,
|
|
124
128
|
expectedDelegate,
|
|
129
|
+
envConfig,
|
|
125
130
|
};
|
|
126
131
|
// Collected `message.delegate` values across all delegated actions in this
|
|
127
132
|
// hook — checked for cross-action consistency after the loop.
|
|
@@ -176,7 +181,7 @@ function validateDelegatedAction(action, actionPath, ctx, observedDelegates) {
|
|
|
176
181
|
violations.push(...presenceErrors);
|
|
177
182
|
return violations;
|
|
178
183
|
}
|
|
179
|
-
violations.push(...(0, evm_sign712_shared_1.validateSign712Domain)(data, actionPath, ctx.realChainId), ...(0, evm_sign712_shared_1.validateSign712Delegator)(data, actionPath, ctx.realChainId, ctx.hookFrom, "hook.from"));
|
|
184
|
+
violations.push(...(0, evm_sign712_shared_1.validateSign712Domain)(data, actionPath, ctx.realChainId, ctx.envConfig), ...(0, evm_sign712_shared_1.validateSign712Delegator)(data, actionPath, ctx.realChainId, ctx.hookFrom, "hook.from"));
|
|
180
185
|
// Scoped delegate check: applies only when the request explicitly
|
|
181
186
|
// pinned a delegate via `trade.srcAllowedSender` on a matching-chain
|
|
182
187
|
// trade (caller set `ctx.expectedDelegate`). Otherwise the API
|
|
@@ -206,7 +211,7 @@ function validateDelegatedAction(action, actionPath, ctx, observedDelegates) {
|
|
|
206
211
|
}
|
|
207
212
|
const caveats = (data.message.caveats ?? []);
|
|
208
213
|
const txCalls = action.details?.transactionCalls ?? [];
|
|
209
|
-
violations.push(...(0, evm_sign712_shared_1.validateSign712Caveats)(caveats, action.actionId, txCalls, actionPath, ctx.realChainId, ctx.expirationTimestamp));
|
|
214
|
+
violations.push(...(0, evm_sign712_shared_1.validateSign712Caveats)(caveats, action.actionId, txCalls, actionPath, ctx.realChainId, ctx.expirationTimestamp, ctx.envConfig));
|
|
210
215
|
if (ctx.expectedType === types_1.EvmActionKind.Sign712MetaMaskCaveatsWithPlaceholders) {
|
|
211
216
|
const withPlaceholdersData = data;
|
|
212
217
|
const actualPlaceholders = withPlaceholdersData.placeholders ?? [];
|
|
@@ -345,46 +350,53 @@ function validateHookActionCalldata(hookPayload, requestHook, basePath, mode, re
|
|
|
345
350
|
// `Sign712MetaMaskCaveats(WithPlaceholders)` actions — otherwise the user
|
|
346
351
|
// would sign a delegation that wraps a tx targeting / valued differently than
|
|
347
352
|
// the echoed hook fields.
|
|
348
|
-
function validateHookActionTransactionCallsMatch(hookPayload, basePath) {
|
|
353
|
+
function validateHookActionTransactionCallsMatch(hookPayload, requestHook, basePath, mode, responseTrades, realChainId) {
|
|
349
354
|
const violations = [];
|
|
350
355
|
const hook = hookPayload.hook;
|
|
356
|
+
if (!(0, request_1.isRequestHookV2)(hook))
|
|
357
|
+
return violations;
|
|
351
358
|
for (let i = 0; i < hookPayload.requiredActions.length; i++) {
|
|
352
359
|
const action = hookPayload.requiredActions[i];
|
|
353
360
|
const actionPath = `${basePath}.requiredActions[${i}]`;
|
|
354
|
-
|
|
361
|
+
// Safe skip: Delegate-bearing actions carry EIP-7702 authorization,
|
|
362
|
+
// not the hook transaction.
|
|
363
|
+
if (action.actions.includes(types_1.EvmActionOperation.Delegate))
|
|
355
364
|
continue;
|
|
356
|
-
|
|
357
|
-
// `validateSign712TransactionCalls`.
|
|
358
|
-
const tx = action.details?.transactionCalls?.[0];
|
|
365
|
+
const tx = extractEvmHookActionTransaction(action);
|
|
359
366
|
if (!tx)
|
|
360
367
|
continue;
|
|
361
|
-
violations.push(...compareTransactionCallToHook(tx, hook, actionPath));
|
|
368
|
+
violations.push(...compareTransactionCallToHook(tx.triplet, hook, requestHook, actionPath, tx.path, mode, responseTrades, realChainId));
|
|
362
369
|
}
|
|
363
370
|
return violations;
|
|
364
371
|
}
|
|
365
|
-
function compareTransactionCallToHook(tx, hook, actionPath) {
|
|
372
|
+
function compareTransactionCallToHook(tx, hook, requestHook, actionPath, txPath, mode, responseTrades, realChainId) {
|
|
366
373
|
const violations = [];
|
|
367
|
-
if (hook.to !== undefined && tx.to
|
|
374
|
+
if (hook.to !== undefined && !(0, address_1.addressEquals)(realChainId, tx.to, hook.to)) {
|
|
368
375
|
violations.push({
|
|
369
376
|
code: types_1.ViolationCode.HookActionTransactionToMismatch,
|
|
370
|
-
message: "
|
|
371
|
-
path: `${actionPath}.
|
|
377
|
+
message: "hook action transaction target must equal hook.to",
|
|
378
|
+
path: `${actionPath}.${txPath}.to`,
|
|
372
379
|
expected: hook.to,
|
|
373
380
|
actual: tx.to,
|
|
374
381
|
});
|
|
375
382
|
}
|
|
376
|
-
const hookValue = hook
|
|
383
|
+
const hookValue = resolveExpectedHookValue(hook, requestHook, mode, responseTrades, realChainId);
|
|
377
384
|
if (!evmValuesEqual(tx.value, hookValue)) {
|
|
378
385
|
violations.push({
|
|
379
386
|
code: types_1.ViolationCode.HookActionTransactionValueMismatch,
|
|
380
|
-
message: "
|
|
381
|
-
path: `${actionPath}.
|
|
387
|
+
message: "hook action transaction value must equal hook.value",
|
|
388
|
+
path: `${actionPath}.${txPath}.value`,
|
|
382
389
|
expected: hookValue,
|
|
383
390
|
actual: tx.value,
|
|
384
391
|
});
|
|
385
392
|
}
|
|
386
393
|
return violations;
|
|
387
394
|
}
|
|
395
|
+
function resolveExpectedHookValue(hook, requestHook, mode, responseTrades, realChainId) {
|
|
396
|
+
if (requestHook?.value === undefined)
|
|
397
|
+
return hook.value ?? "0";
|
|
398
|
+
return (0, placeholder_1.resolveEagerValuePlaceholders)(requestHook.value, realChainId, requestHook.placeHolders, responseTrades, mode).resolved;
|
|
399
|
+
}
|
|
388
400
|
// Returns true if two EVM-value strings are byte-identical or if both parse as
|
|
389
401
|
// BigInt and represent the same number (e.g. `"0x100"` vs `"256"`). Returns
|
|
390
402
|
// false otherwise.
|
|
@@ -392,7 +404,7 @@ function evmValuesEqual(a, b) {
|
|
|
392
404
|
if (a === b)
|
|
393
405
|
return true;
|
|
394
406
|
try {
|
|
395
|
-
return
|
|
407
|
+
return (0, integer_1.parseIntegerString)(a) === (0, integer_1.parseIntegerString)(b);
|
|
396
408
|
}
|
|
397
409
|
catch {
|
|
398
410
|
return false;
|
|
@@ -402,7 +414,7 @@ function evmValuesEqual(a, b) {
|
|
|
402
414
|
// gas-compensation transfer — same rules as `compensation-hook.ts` applies to
|
|
403
415
|
// `hook.{to, data, value}`, but here applied to `transactionCalls[0]` so the
|
|
404
416
|
// user does not sign a delegation around a different (malicious) tx.
|
|
405
|
-
function validateCompensationHookTransactionCall(hookPayload, basePath, request, realChainId) {
|
|
417
|
+
function validateCompensationHookTransactionCall(hookPayload, basePath, request, realChainId, envConfig) {
|
|
406
418
|
const allGroups = (0, gas_compensation_1.extractGasCompensationGroups)(request);
|
|
407
419
|
const matchingGroups = allGroups.filter(g => g.realChainId === realChainId
|
|
408
420
|
&& (0, address_1.addressEquals)(realChainId, g.sender, hookPayload.hook.from));
|
|
@@ -424,9 +436,10 @@ function validateCompensationHookTransactionCall(hookPayload, basePath, request,
|
|
|
424
436
|
continue;
|
|
425
437
|
violations.push(...(0, evm_gas_compensation_tx_1.validateEvmGasCompensationTx)(tx, matchingGroups, realChainId, `${actionPath}.details.transactionCalls[0]`, {
|
|
426
438
|
toMismatch: types_1.ViolationCode.CompensationHookEvmToMismatch,
|
|
439
|
+
recipientMismatch: types_1.ViolationCode.CompensationHookEvmRecipientMismatch,
|
|
427
440
|
dataInvalid: types_1.ViolationCode.CompensationHookEvmDataInvalid,
|
|
428
441
|
valueInvalid: types_1.ViolationCode.CompensationHookEvmValueInvalid,
|
|
429
|
-
}));
|
|
442
|
+
}, envConfig.compensationDelegateContracts));
|
|
430
443
|
}
|
|
431
444
|
return violations;
|
|
432
445
|
}
|
|
@@ -468,4 +481,32 @@ function extractEvmHookActionCalldata(action) {
|
|
|
468
481
|
}
|
|
469
482
|
return undefined;
|
|
470
483
|
}
|
|
484
|
+
function extractEvmHookActionTransaction(action) {
|
|
485
|
+
if (action.type === types_1.EvmActionKind.Transaction) {
|
|
486
|
+
const data = action.data;
|
|
487
|
+
if (!isTransactionTriplet(data))
|
|
488
|
+
return undefined;
|
|
489
|
+
return { triplet: data, path: "data" };
|
|
490
|
+
}
|
|
491
|
+
if (action.type === types_1.EvmActionKind.ProvidePlaceholders) {
|
|
492
|
+
const data = action.data;
|
|
493
|
+
if (!isTransactionTriplet(data?.transaction))
|
|
494
|
+
return undefined;
|
|
495
|
+
return { triplet: data.transaction, path: "data.transaction" };
|
|
496
|
+
}
|
|
497
|
+
if (action.type === types_1.EvmActionKind.Sign712MetaMaskCaveats
|
|
498
|
+
|| action.type === types_1.EvmActionKind.Sign712MetaMaskCaveatsWithPlaceholders) {
|
|
499
|
+
const tx = action.details?.transactionCalls?.[0];
|
|
500
|
+
if (!isTransactionTriplet(tx))
|
|
501
|
+
return undefined;
|
|
502
|
+
return { triplet: tx, path: "details.transactionCalls[0]" };
|
|
503
|
+
}
|
|
504
|
+
return undefined;
|
|
505
|
+
}
|
|
506
|
+
function isTransactionTriplet(value) {
|
|
507
|
+
const maybe = value;
|
|
508
|
+
return typeof maybe?.to === "string"
|
|
509
|
+
&& typeof maybe.data === "string"
|
|
510
|
+
&& typeof maybe.value === "string";
|
|
511
|
+
}
|
|
471
512
|
//# sourceMappingURL=evm-op-hook.js.map
|