@debridge-finance/borderless-validation-sdk 0.3.0 → 0.4.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/README.md +120 -11
- package/dist/cjs/graylists/evm/token-permit-metadata.js +7 -1
- package/dist/cjs/graylists/evm/token-permit-metadata.js.map +1 -1
- package/dist/cjs/helpers/address.js +152 -60
- package/dist/cjs/helpers/address.js.map +1 -1
- package/dist/cjs/helpers/amount.js +8 -0
- package/dist/cjs/helpers/amount.js.map +1 -0
- package/dist/cjs/helpers/evm-dln-hook-pack.js +16 -4
- package/dist/cjs/helpers/evm-dln-hook-pack.js.map +1 -1
- package/dist/cjs/helpers/evm-gas-compensation-tx.js +11 -26
- package/dist/cjs/helpers/evm-gas-compensation-tx.js.map +1 -1
- package/dist/cjs/helpers/evm-intent-id-abi.js +8 -1
- package/dist/cjs/helpers/evm-intent-id-abi.js.map +1 -1
- package/dist/cjs/helpers/evm-trade-amounts.js +11 -3
- package/dist/cjs/helpers/evm-trade-amounts.js.map +1 -1
- package/dist/cjs/helpers/expected-delegate.js +2 -6
- package/dist/cjs/helpers/expected-delegate.js.map +1 -1
- package/dist/cjs/helpers/gas-compensation.js +8 -4
- package/dist/cjs/helpers/gas-compensation.js.map +1 -1
- package/dist/cjs/helpers/interactions.js +4 -20
- package/dist/cjs/helpers/interactions.js.map +1 -1
- package/dist/cjs/helpers/synthetic-native-wrap.js +3 -2
- package/dist/cjs/helpers/synthetic-native-wrap.js.map +1 -1
- package/dist/cjs/types/enums.js +1 -0
- package/dist/cjs/types/enums.js.map +1 -1
- package/dist/cjs/types/request.js +15 -2
- package/dist/cjs/types/request.js.map +1 -1
- package/dist/cjs/types/response.js +2 -1
- package/dist/cjs/types/response.js.map +1 -1
- package/dist/cjs/types/validation.js +21 -3
- package/dist/cjs/types/validation.js.map +1 -1
- package/dist/cjs/validations/compensation-hook.js +4 -5
- package/dist/cjs/validations/compensation-hook.js.map +1 -1
- package/dist/cjs/validations/cost-token.js +9 -1
- package/dist/cjs/validations/cost-token.js.map +1 -1
- package/dist/cjs/validations/echo-fields.js +18 -0
- package/dist/cjs/validations/echo-fields.js.map +1 -1
- package/dist/cjs/validations/evm-caveats.js +3 -0
- package/dist/cjs/validations/evm-caveats.js.map +1 -1
- package/dist/cjs/validations/evm-on-chain-intent.js +150 -0
- package/dist/cjs/validations/evm-on-chain-intent.js.map +1 -0
- package/dist/cjs/validations/evm-op-budget.js +23 -3
- package/dist/cjs/validations/evm-op-budget.js.map +1 -1
- package/dist/cjs/validations/evm-op-hook.js +6 -6
- package/dist/cjs/validations/evm-op-hook.js.map +1 -1
- package/dist/cjs/validations/evm-permit.js +17 -6
- package/dist/cjs/validations/evm-permit.js.map +1 -1
- package/dist/cjs/validations/evm-permit2.js +14 -6
- package/dist/cjs/validations/evm-permit2.js.map +1 -1
- package/dist/cjs/validations/evm-required-actions.js +26 -7
- package/dist/cjs/validations/evm-required-actions.js.map +1 -1
- package/dist/cjs/validations/evm-sign712-metamask.js +3 -126
- package/dist/cjs/validations/evm-sign712-metamask.js.map +1 -1
- package/dist/cjs/validations/evm-sign712-shared.js +127 -0
- package/dist/cjs/validations/evm-sign712-shared.js.map +1 -1
- package/dist/cjs/validations/evm-sign712.js +18 -2
- package/dist/cjs/validations/evm-sign712.js.map +1 -1
- package/dist/cjs/validations/evm-sign7702.js +2 -0
- package/dist/cjs/validations/evm-sign7702.js.map +1 -1
- package/dist/cjs/validations/evm-transaction.js +7 -1
- package/dist/cjs/validations/evm-transaction.js.map +1 -1
- package/dist/cjs/validations/external-call.js +9 -20
- package/dist/cjs/validations/external-call.js.map +1 -1
- package/dist/cjs/validations/hook-version.js +35 -0
- package/dist/cjs/validations/hook-version.js.map +1 -0
- package/dist/cjs/validations/hooks-common.js +74 -199
- package/dist/cjs/validations/hooks-common.js.map +1 -1
- package/dist/cjs/validations/intent-destinations.js +52 -50
- package/dist/cjs/validations/intent-destinations.js.map +1 -1
- package/dist/cjs/validations/intent-tokens.js +319 -79
- package/dist/cjs/validations/intent-tokens.js.map +1 -1
- package/dist/cjs/validations/intent.js +34 -26
- package/dist/cjs/validations/intent.js.map +1 -1
- package/dist/cjs/validations/max-reserved.js +54 -0
- package/dist/cjs/validations/max-reserved.js.map +1 -0
- package/dist/cjs/validations/on-chain-intent-submission.js +70 -0
- package/dist/cjs/validations/on-chain-intent-submission.js.map +1 -0
- package/dist/cjs/validations/ptp.js +9 -6
- package/dist/cjs/validations/ptp.js.map +1 -1
- package/dist/cjs/validations/refill.js +11 -5
- package/dist/cjs/validations/refill.js.map +1 -1
- package/dist/cjs/validations/solana-hook.js +12 -54
- package/dist/cjs/validations/solana-hook.js.map +1 -1
- package/dist/cjs/validations/solana-op-budget.js +1 -1
- package/dist/cjs/validations/solana-op-budget.js.map +1 -1
- package/dist/cjs/validations/solana-op-wrap.js +29 -47
- package/dist/cjs/validations/solana-op-wrap.js.map +1 -1
- package/dist/cjs/validations/solana-required-actions.js +2 -2
- package/dist/cjs/validations/solana-required-actions.js.map +1 -1
- package/dist/cjs/validations/solana-transaction.js +4 -53
- package/dist/cjs/validations/solana-transaction.js.map +1 -1
- package/dist/cjs/validations/total-dst-amount.js +19 -3
- package/dist/cjs/validations/total-dst-amount.js.map +1 -1
- package/dist/cjs/validations/trade-grouping.js +35 -9
- package/dist/cjs/validations/trade-grouping.js.map +1 -1
- package/dist/cjs/validations/trade-matching.js +1 -1
- package/dist/cjs/validations/trade-matching.js.map +1 -1
- package/dist/cjs/validations/trades.js +29 -9
- package/dist/cjs/validations/trades.js.map +1 -1
- package/dist/cjs/validator.js +28 -17
- package/dist/cjs/validator.js.map +1 -1
- package/dist/cjs/whitelists/environment-config.js +143 -182
- package/dist/cjs/whitelists/environment-config.js.map +1 -1
- package/dist/cjs/whitelists/types.js +2 -5
- package/dist/cjs/whitelists/types.js.map +1 -1
- package/dist/esm/graylists/evm/token-permit-metadata.js +7 -1
- package/dist/esm/graylists/evm/token-permit-metadata.js.map +1 -1
- package/dist/esm/helpers/address.js +146 -59
- package/dist/esm/helpers/address.js.map +1 -1
- package/dist/esm/helpers/amount.js +5 -0
- package/dist/esm/helpers/amount.js.map +1 -0
- package/dist/esm/helpers/evm-dln-hook-pack.js +15 -4
- package/dist/esm/helpers/evm-dln-hook-pack.js.map +1 -1
- package/dist/esm/helpers/evm-gas-compensation-tx.js +12 -27
- package/dist/esm/helpers/evm-gas-compensation-tx.js.map +1 -1
- package/dist/esm/helpers/evm-intent-id-abi.js +7 -0
- package/dist/esm/helpers/evm-intent-id-abi.js.map +1 -1
- package/dist/esm/helpers/evm-trade-amounts.js +12 -4
- package/dist/esm/helpers/evm-trade-amounts.js.map +1 -1
- package/dist/esm/helpers/expected-delegate.js +2 -6
- package/dist/esm/helpers/expected-delegate.js.map +1 -1
- package/dist/esm/helpers/gas-compensation.js +9 -5
- package/dist/esm/helpers/gas-compensation.js.map +1 -1
- package/dist/esm/helpers/interactions.js +5 -21
- package/dist/esm/helpers/interactions.js.map +1 -1
- package/dist/esm/helpers/synthetic-native-wrap.js +4 -3
- package/dist/esm/helpers/synthetic-native-wrap.js.map +1 -1
- package/dist/esm/types/enums.js +1 -0
- package/dist/esm/types/enums.js.map +1 -1
- package/dist/esm/types/request.js +15 -2
- package/dist/esm/types/request.js.map +1 -1
- package/dist/esm/types/response.js +3 -2
- package/dist/esm/types/response.js.map +1 -1
- package/dist/esm/types/validation.js +21 -3
- package/dist/esm/types/validation.js.map +1 -1
- package/dist/esm/validations/compensation-hook.js +4 -5
- package/dist/esm/validations/compensation-hook.js.map +1 -1
- package/dist/esm/validations/cost-token.js +9 -1
- package/dist/esm/validations/cost-token.js.map +1 -1
- package/dist/esm/validations/echo-fields.js +18 -0
- package/dist/esm/validations/echo-fields.js.map +1 -1
- package/dist/esm/validations/evm-caveats.js +3 -0
- package/dist/esm/validations/evm-caveats.js.map +1 -1
- package/dist/esm/validations/evm-on-chain-intent.js +147 -0
- package/dist/esm/validations/evm-on-chain-intent.js.map +1 -0
- package/dist/esm/validations/evm-op-budget.js +25 -5
- package/dist/esm/validations/evm-op-budget.js.map +1 -1
- package/dist/esm/validations/evm-op-hook.js +8 -8
- package/dist/esm/validations/evm-op-hook.js.map +1 -1
- package/dist/esm/validations/evm-permit.js +18 -7
- package/dist/esm/validations/evm-permit.js.map +1 -1
- package/dist/esm/validations/evm-permit2.js +15 -7
- package/dist/esm/validations/evm-permit2.js.map +1 -1
- package/dist/esm/validations/evm-required-actions.js +28 -9
- package/dist/esm/validations/evm-required-actions.js.map +1 -1
- package/dist/esm/validations/evm-sign712-metamask.js +4 -126
- package/dist/esm/validations/evm-sign712-metamask.js.map +1 -1
- package/dist/esm/validations/evm-sign712-shared.js +126 -1
- package/dist/esm/validations/evm-sign712-shared.js.map +1 -1
- package/dist/esm/validations/evm-sign712.js +17 -2
- package/dist/esm/validations/evm-sign712.js.map +1 -1
- package/dist/esm/validations/evm-sign7702.js +2 -0
- package/dist/esm/validations/evm-sign7702.js.map +1 -1
- package/dist/esm/validations/evm-transaction.js +7 -1
- package/dist/esm/validations/evm-transaction.js.map +1 -1
- package/dist/esm/validations/external-call.js +10 -21
- package/dist/esm/validations/external-call.js.map +1 -1
- package/dist/esm/validations/hook-version.js +31 -0
- package/dist/esm/validations/hook-version.js.map +1 -0
- package/dist/esm/validations/hooks-common.js +75 -200
- package/dist/esm/validations/hooks-common.js.map +1 -1
- package/dist/esm/validations/intent-destinations.js +53 -51
- package/dist/esm/validations/intent-destinations.js.map +1 -1
- package/dist/esm/validations/intent-tokens.js +320 -80
- package/dist/esm/validations/intent-tokens.js.map +1 -1
- package/dist/esm/validations/intent.js +34 -26
- package/dist/esm/validations/intent.js.map +1 -1
- package/dist/esm/validations/max-reserved.js +51 -0
- package/dist/esm/validations/max-reserved.js.map +1 -0
- package/dist/esm/validations/on-chain-intent-submission.js +67 -0
- package/dist/esm/validations/on-chain-intent-submission.js.map +1 -0
- package/dist/esm/validations/ptp.js +9 -6
- package/dist/esm/validations/ptp.js.map +1 -1
- package/dist/esm/validations/refill.js +11 -5
- package/dist/esm/validations/refill.js.map +1 -1
- package/dist/esm/validations/solana-hook.js +12 -54
- package/dist/esm/validations/solana-hook.js.map +1 -1
- package/dist/esm/validations/solana-op-budget.js +1 -1
- package/dist/esm/validations/solana-op-budget.js.map +1 -1
- package/dist/esm/validations/solana-op-wrap.js +30 -48
- package/dist/esm/validations/solana-op-wrap.js.map +1 -1
- package/dist/esm/validations/solana-required-actions.js +2 -2
- package/dist/esm/validations/solana-required-actions.js.map +1 -1
- package/dist/esm/validations/solana-transaction.js +4 -53
- package/dist/esm/validations/solana-transaction.js.map +1 -1
- package/dist/esm/validations/total-dst-amount.js +20 -4
- package/dist/esm/validations/total-dst-amount.js.map +1 -1
- package/dist/esm/validations/trade-grouping.js +35 -10
- package/dist/esm/validations/trade-grouping.js.map +1 -1
- package/dist/esm/validations/trade-matching.js +1 -1
- package/dist/esm/validations/trade-matching.js.map +1 -1
- package/dist/esm/validations/trades.js +29 -9
- package/dist/esm/validations/trades.js.map +1 -1
- package/dist/esm/validator.js +28 -17
- package/dist/esm/validator.js.map +1 -1
- package/dist/esm/whitelists/environment-config.js +144 -183
- package/dist/esm/whitelists/environment-config.js.map +1 -1
- package/dist/esm/whitelists/types.js +3 -6
- package/dist/esm/whitelists/types.js.map +1 -1
- package/dist/types/graylists/evm/token-permit-metadata.d.ts.map +1 -1
- package/dist/types/helpers/address.d.ts +10 -5
- package/dist/types/helpers/address.d.ts.map +1 -1
- package/dist/types/helpers/amount.d.ts +2 -0
- package/dist/types/helpers/amount.d.ts.map +1 -0
- package/dist/types/helpers/evm-dln-hook-pack.d.ts +1 -0
- package/dist/types/helpers/evm-dln-hook-pack.d.ts.map +1 -1
- package/dist/types/helpers/evm-gas-compensation-tx.d.ts +1 -3
- package/dist/types/helpers/evm-gas-compensation-tx.d.ts.map +1 -1
- package/dist/types/helpers/evm-intent-id-abi.d.ts +111 -0
- package/dist/types/helpers/evm-intent-id-abi.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/interactions.d.ts.map +1 -1
- package/dist/types/helpers/synthetic-native-wrap.d.ts.map +1 -1
- package/dist/types/types/enums.d.ts +1 -0
- package/dist/types/types/enums.d.ts.map +1 -1
- package/dist/types/types/request.d.ts +32 -23
- package/dist/types/types/request.d.ts.map +1 -1
- package/dist/types/types/response.d.ts +10 -42
- package/dist/types/types/response.d.ts.map +1 -1
- package/dist/types/types/validation.d.ts +19 -4
- package/dist/types/types/validation.d.ts.map +1 -1
- package/dist/types/validations/compensation-hook.d.ts +1 -2
- package/dist/types/validations/compensation-hook.d.ts.map +1 -1
- package/dist/types/validations/cost-token.d.ts.map +1 -1
- package/dist/types/validations/echo-fields.d.ts.map +1 -1
- package/dist/types/validations/evm-caveats.d.ts.map +1 -1
- package/dist/types/validations/evm-on-chain-intent.d.ts +4 -0
- package/dist/types/validations/evm-on-chain-intent.d.ts.map +1 -0
- package/dist/types/validations/evm-op-budget.d.ts.map +1 -1
- package/dist/types/validations/evm-op-hook.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.map +1 -1
- package/dist/types/validations/evm-sign712-metamask.d.ts +0 -11
- package/dist/types/validations/evm-sign712-metamask.d.ts.map +1 -1
- package/dist/types/validations/evm-sign712-shared.d.ts +12 -0
- package/dist/types/validations/evm-sign712-shared.d.ts.map +1 -1
- package/dist/types/validations/evm-sign712.d.ts +1 -0
- package/dist/types/validations/evm-sign712.d.ts.map +1 -1
- package/dist/types/validations/evm-sign7702.d.ts.map +1 -1
- package/dist/types/validations/evm-transaction.d.ts +1 -1
- package/dist/types/validations/evm-transaction.d.ts.map +1 -1
- package/dist/types/validations/external-call.d.ts.map +1 -1
- package/dist/types/validations/hook-version.d.ts +7 -0
- package/dist/types/validations/hook-version.d.ts.map +1 -0
- package/dist/types/validations/hooks-common.d.ts +1 -4
- package/dist/types/validations/hooks-common.d.ts.map +1 -1
- package/dist/types/validations/intent-destinations.d.ts.map +1 -1
- package/dist/types/validations/intent-tokens.d.ts.map +1 -1
- package/dist/types/validations/max-reserved.d.ts +3 -0
- package/dist/types/validations/max-reserved.d.ts.map +1 -0
- package/dist/types/validations/on-chain-intent-submission.d.ts +3 -0
- package/dist/types/validations/on-chain-intent-submission.d.ts.map +1 -0
- package/dist/types/validations/ptp.d.ts.map +1 -1
- package/dist/types/validations/refill.d.ts.map +1 -1
- package/dist/types/validations/solana-hook.d.ts +1 -2
- package/dist/types/validations/solana-hook.d.ts.map +1 -1
- package/dist/types/validations/solana-op-wrap.d.ts +2 -2
- package/dist/types/validations/solana-op-wrap.d.ts.map +1 -1
- package/dist/types/validations/solana-required-actions.d.ts.map +1 -1
- package/dist/types/validations/solana-transaction.d.ts +3 -3
- 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 +1 -0
- package/dist/types/validations/trade-grouping.d.ts.map +1 -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 +9 -4
- package/dist/types/whitelists/environment-config.d.ts.map +1 -1
- package/dist/types/whitelists/types.d.ts +0 -1
- package/dist/types/whitelists/types.d.ts.map +1 -1
- package/package.json +5 -2
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// best-effort validation. If a value is absent from a graylist, the
|
|
4
4
|
// corresponding check is skipped rather than producing a violation.
|
|
5
5
|
import { ChainId } from "../../types/enums.js";
|
|
6
|
+
import { addressToHex } from "../../helpers/address.js";
|
|
6
7
|
// Note: addresses in this map MUST be lowercased.
|
|
7
8
|
export const TOKEN_PERMIT_METADATA = {
|
|
8
9
|
// TODO: extend this verified-only graylist with additional tokens after
|
|
@@ -52,6 +53,11 @@ export function getTokenPermitMetadata(realChainId, tokenAddress) {
|
|
|
52
53
|
const chain = TOKEN_PERMIT_METADATA[realChainId];
|
|
53
54
|
if (!chain)
|
|
54
55
|
return undefined;
|
|
55
|
-
|
|
56
|
+
try {
|
|
57
|
+
return chain[addressToHex(realChainId, tokenAddress)];
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
56
62
|
}
|
|
57
63
|
//# sourceMappingURL=token-permit-metadata.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-permit-metadata.js","sourceRoot":"","sources":["../../../../src/graylists/evm/token-permit-metadata.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,mEAAmE;AACnE,oEAAoE;AACpE,oEAAoE;AAEpE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"token-permit-metadata.js","sourceRoot":"","sources":["../../../../src/graylists/evm/token-permit-metadata.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,mEAAmE;AACnE,oEAAoE;AACpE,oEAAoE;AAEpE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAgBrD,kDAAkD;AAClD,MAAM,CAAC,MAAM,qBAAqB,GAA2B;IACzD,wEAAwE;IACxE,2EAA2E;IAC3E,uEAAuE;IACvE,kEAAkE;IAClE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAChB,4CAA4C,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE;QAChF,4CAA4C,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,EAAE;QACtF,4CAA4C,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;KACvE;IACD,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAChB,4CAA4C,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE;KACnF;IACD,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QACf,4CAA4C,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE;KACnF;IACD,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACb,4CAA4C,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE;KAC/E;IACD,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACb,4CAA4C,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE;KAC/E;IACD,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAChB,4CAA4C,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE;KAC/E;IACD,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACX,4CAA4C,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE;KAC/E;IACD,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QACjB,4CAA4C,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE;KAC/E;IACD,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACZ,4CAA4C,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE;KACnF;IACD,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACb,4CAA4C,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE;KAC/E;IACD,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAChB,4CAA4C,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE;KACnF;IACD,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QACjB,4CAA4C,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE;KACnF;CACJ,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAClC,WAAoB,EACpB,YAAoB;IAEpB,MAAM,KAAK,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACjD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,IAAI,CAAC;QACD,OAAO,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
-
import { bytesToHex, zeroAddress } from "viem";
|
|
1
|
+
import { bytesToHex, concatBytes, hexToBytes, sha256, zeroAddress, } from "viem";
|
|
2
2
|
import bs58 from "bs58";
|
|
3
3
|
import { ChainEngine, ChainId } from "../types/enums.js";
|
|
4
4
|
import { SYSTEM_PROGRAM } from "../whitelists/solana/index.js";
|
|
5
5
|
// Tron-specific addresses (Base58Check format)
|
|
6
6
|
export const TRON_NATIVE_ADDRESS = "T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb";
|
|
7
|
-
const EVM_HEX_ADDRESS_REGEX = /^0x[0-9a-
|
|
7
|
+
const EVM_HEX_ADDRESS_REGEX = /^0x[0-9a-fA-F]{40}$/u;
|
|
8
|
+
const EVM_ADDRESS_BYTE_LENGTH = 20;
|
|
9
|
+
const SOLANA_ADDRESS_BYTE_LENGTH = 32;
|
|
10
|
+
const TRON_ADDRESS_PREFIX = 0x41;
|
|
11
|
+
const TRON_PAYLOAD_BYTE_LENGTH = 1 + EVM_ADDRESS_BYTE_LENGTH;
|
|
12
|
+
const TRON_CHECKSUM_BYTE_LENGTH = 4;
|
|
13
|
+
const TRON_ADDRESS_BYTE_LENGTH = TRON_PAYLOAD_BYTE_LENGTH + TRON_CHECKSUM_BYTE_LENGTH;
|
|
8
14
|
export function getChainEngine(chainId) {
|
|
9
15
|
if (chainId === ChainId.Tron)
|
|
10
16
|
return ChainEngine.Tron;
|
|
@@ -16,89 +22,170 @@ export function isEvmHexAddress(address) {
|
|
|
16
22
|
return EVM_HEX_ADDRESS_REGEX.test(address);
|
|
17
23
|
}
|
|
18
24
|
export function isTronAddress(address) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
return decodeTronAddressBytes(address) !== undefined;
|
|
26
|
+
}
|
|
27
|
+
export function isTronAddressOrEvmHex(address) {
|
|
28
|
+
return isEvmHexAddress(address) || isTronAddress(address);
|
|
29
|
+
}
|
|
30
|
+
export function isSolanaAddress(address) {
|
|
31
|
+
return decodeSolanaAddressBytes(address) !== undefined;
|
|
32
|
+
}
|
|
33
|
+
// Use only for standalone semantic address fields. Encoded EIP-712, ABI and
|
|
34
|
+
// interaction fields keep their own stricter wire-format validation.
|
|
35
|
+
export function isAddressRepresentationValidForChain(chainId, address) {
|
|
36
|
+
return isAddressRepresentationValidForEngine(getChainEngine(chainId), address);
|
|
37
|
+
}
|
|
38
|
+
export function isAddressRepresentationValidForEngine(engine, address) {
|
|
39
|
+
if (engine === ChainEngine.EVM)
|
|
40
|
+
return isEvmHexAddress(address);
|
|
41
|
+
if (engine === ChainEngine.Tron)
|
|
42
|
+
return isTronAddressOrEvmHex(address);
|
|
43
|
+
return isSolanaAddress(address);
|
|
44
|
+
}
|
|
45
|
+
// Converts a 20-byte EVM hex address to Tron Base58Check format.
|
|
46
|
+
export function evmHexToTronAddress(evmAddress) {
|
|
47
|
+
if (!isEvmHexAddress(evmAddress)) {
|
|
48
|
+
throw new Error(`Invalid EVM hex address: ${evmAddress}`);
|
|
49
|
+
}
|
|
50
|
+
const payload = concatBytes([
|
|
51
|
+
Uint8Array.of(TRON_ADDRESS_PREFIX),
|
|
52
|
+
hexToBytes(evmAddress),
|
|
53
|
+
]);
|
|
54
|
+
const checksum = computeTronChecksum(payload);
|
|
55
|
+
return bs58.encode(concatBytes([payload, checksum]));
|
|
29
56
|
}
|
|
30
|
-
// Converts Tron Base58Check address to EVM hex
|
|
31
|
-
// Tron address = 0x41 (1 byte prefix) + 20 bytes address + 4 bytes checksum
|
|
32
|
-
// We extract the 20-byte address part and return as 0x-prefixed hex
|
|
57
|
+
// Converts a valid Tron Base58Check address to its 20-byte EVM hex identity.
|
|
33
58
|
export function tronAddressToEvmHex(tronAddress) {
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
59
|
+
const addressBytes = decodeTronAddressBytes(tronAddress);
|
|
60
|
+
if (addressBytes === undefined) {
|
|
61
|
+
throw new Error(`Invalid Tron Base58Check address: ${tronAddress}`);
|
|
62
|
+
}
|
|
37
63
|
return bytesToHex(addressBytes);
|
|
38
64
|
}
|
|
39
|
-
//
|
|
40
|
-
|
|
65
|
+
// Builds a canonical address-byte key using the representation rules of the
|
|
66
|
+
// given chain. Malformed values have no address identity and return undefined.
|
|
67
|
+
export function getAddressIdentityKey(chainId, address) {
|
|
41
68
|
const engine = getChainEngine(chainId);
|
|
42
|
-
return
|
|
69
|
+
return toCanonicalAddressHex(address, engine);
|
|
70
|
+
}
|
|
71
|
+
// Builds an address identity key using only its own value — no chainId needed.
|
|
72
|
+
export function getAddressIdentityKeyByValue(address) {
|
|
73
|
+
return toCanonicalAddressHexByValue(address);
|
|
43
74
|
}
|
|
44
|
-
// Detects the chain engine from
|
|
45
|
-
//
|
|
75
|
+
// Detects the chain engine from a valid address value alone. Ambiguous 20-byte
|
|
76
|
+
// hex belongs to the EVM-compatible representation. Invalid values have no
|
|
77
|
+
// detectable chain engine.
|
|
46
78
|
export function detectChainEngine(address) {
|
|
47
|
-
if (address
|
|
79
|
+
if (isEvmHexAddress(address))
|
|
48
80
|
return ChainEngine.EVM;
|
|
49
81
|
if (isTronAddress(address))
|
|
50
82
|
return ChainEngine.Tron;
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
export function normalizeAddressByValue(address) {
|
|
55
|
-
return applyEngineNormalization(address, detectChainEngine(address));
|
|
56
|
-
}
|
|
57
|
-
function applyEngineNormalization(address, engine) {
|
|
58
|
-
if (engine === ChainEngine.Tron || engine === ChainEngine.Solana) {
|
|
59
|
-
return address; // case-sensitive
|
|
60
|
-
}
|
|
61
|
-
return address.toLowerCase(); // EVM: case-insensitive
|
|
83
|
+
if (isSolanaAddress(address))
|
|
84
|
+
return ChainEngine.Solana;
|
|
85
|
+
return undefined;
|
|
62
86
|
}
|
|
63
|
-
// Compares
|
|
64
|
-
|
|
65
|
-
|
|
87
|
+
// Compares canonical address identity. Field-specific format validation must
|
|
88
|
+
// happen separately; malformed values never compare equal and never throw.
|
|
89
|
+
export function addressEquals(chainId, left, right) {
|
|
90
|
+
const engine = getChainEngine(chainId);
|
|
91
|
+
const leftCanonical = toCanonicalAddressHex(left, engine);
|
|
92
|
+
const rightCanonical = toCanonicalAddressHex(right, engine);
|
|
93
|
+
return leftCanonical !== undefined
|
|
94
|
+
&& rightCanonical !== undefined
|
|
95
|
+
&& leftCanonical === rightCanonical;
|
|
66
96
|
}
|
|
67
97
|
// Raw byte representation, used when an address flows into the intent ID
|
|
68
|
-
// keccak256 hash. EVM → 20 bytes, Tron → 20 bytes
|
|
69
|
-
// prefix and checksum), Solana → 32 bytes (base58, no checksum).
|
|
98
|
+
// keccak256 hash. EVM → 20 bytes, Tron → 20 bytes, Solana → 32 bytes.
|
|
70
99
|
export function addressToHex(chainId, address) {
|
|
71
|
-
|
|
100
|
+
const engine = getChainEngine(chainId);
|
|
101
|
+
const canonical = toCanonicalAddressHex(address, engine);
|
|
102
|
+
if (canonical === undefined) {
|
|
103
|
+
throw new Error(`Invalid ${ChainEngine[engine]} address: ${address}`);
|
|
104
|
+
}
|
|
105
|
+
return canonical;
|
|
72
106
|
}
|
|
73
107
|
// Same as addressToHex but infers the engine from the address value alone.
|
|
74
108
|
// Use when the chainId is unknown (e.g. destinationChainIds = "any").
|
|
75
109
|
export function addressToHexByValue(address) {
|
|
76
|
-
|
|
110
|
+
const canonical = toCanonicalAddressHexByValue(address);
|
|
111
|
+
if (canonical === undefined)
|
|
112
|
+
throw new Error(`Invalid address: ${address}`);
|
|
113
|
+
return canonical;
|
|
77
114
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
return address
|
|
115
|
+
// Checks if address is the native token for the given chain.
|
|
116
|
+
export function isNativeToken(address, chainId) {
|
|
117
|
+
const engine = getChainEngine(chainId);
|
|
118
|
+
if (engine === ChainEngine.Tron) {
|
|
119
|
+
// Accept strict Tron Base58Check and the equivalent 20-byte EVM hex representation.
|
|
120
|
+
return addressEquals(chainId, address, TRON_NATIVE_ADDRESS);
|
|
84
121
|
}
|
|
122
|
+
if (engine === ChainEngine.Solana) {
|
|
123
|
+
// Accept only a valid 32-byte Solana Base58 address.
|
|
124
|
+
return addressEquals(chainId, address, SYSTEM_PROGRAM);
|
|
125
|
+
}
|
|
126
|
+
// Accept only a valid 20-byte EVM hex address.
|
|
127
|
+
return isEvmHexAddress(address) && address.toLowerCase() === zeroAddress;
|
|
128
|
+
}
|
|
129
|
+
function toCanonicalAddressHex(address, engine) {
|
|
85
130
|
if (engine === ChainEngine.EVM) {
|
|
86
|
-
return address.toLowerCase();
|
|
131
|
+
return isEvmHexAddress(address) ? address.toLowerCase() : undefined;
|
|
87
132
|
}
|
|
88
133
|
if (engine === ChainEngine.Tron) {
|
|
89
|
-
|
|
134
|
+
if (isEvmHexAddress(address))
|
|
135
|
+
return address.toLowerCase();
|
|
136
|
+
const bytes = decodeTronAddressBytes(address);
|
|
137
|
+
return bytes === undefined ? undefined : bytesToHex(bytes);
|
|
90
138
|
}
|
|
91
|
-
|
|
139
|
+
const bytes = decodeSolanaAddressBytes(address);
|
|
140
|
+
return bytes === undefined ? undefined : bytesToHex(bytes);
|
|
92
141
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
142
|
+
function toCanonicalAddressHexByValue(address) {
|
|
143
|
+
if (isEvmHexAddress(address))
|
|
144
|
+
return address.toLowerCase();
|
|
145
|
+
const tronBytes = decodeTronAddressBytes(address);
|
|
146
|
+
if (tronBytes !== undefined)
|
|
147
|
+
return bytesToHex(tronBytes);
|
|
148
|
+
const solanaBytes = decodeSolanaAddressBytes(address);
|
|
149
|
+
return solanaBytes === undefined ? undefined : bytesToHex(solanaBytes);
|
|
150
|
+
}
|
|
151
|
+
function decodeTronAddressBytes(address) {
|
|
152
|
+
const decoded = decodeBase58(address);
|
|
153
|
+
if (decoded === undefined || decoded.length !== TRON_ADDRESS_BYTE_LENGTH)
|
|
154
|
+
return undefined;
|
|
155
|
+
if (decoded[0] !== TRON_ADDRESS_PREFIX)
|
|
156
|
+
return undefined;
|
|
157
|
+
const payload = decoded.slice(0, TRON_PAYLOAD_BYTE_LENGTH);
|
|
158
|
+
const checksum = decoded.slice(TRON_PAYLOAD_BYTE_LENGTH);
|
|
159
|
+
if (!bytesEqual(checksum, computeTronChecksum(payload)))
|
|
160
|
+
return undefined;
|
|
161
|
+
return payload.slice(1);
|
|
162
|
+
}
|
|
163
|
+
function decodeSolanaAddressBytes(address) {
|
|
164
|
+
const decoded = decodeBase58(address);
|
|
165
|
+
return decoded?.length === SOLANA_ADDRESS_BYTE_LENGTH ? decoded : undefined;
|
|
166
|
+
}
|
|
167
|
+
function decodeBase58(value) {
|
|
168
|
+
if (value.length === 0)
|
|
169
|
+
return undefined;
|
|
170
|
+
try {
|
|
171
|
+
return bs58.decode(value);
|
|
98
172
|
}
|
|
99
|
-
|
|
100
|
-
return
|
|
173
|
+
catch {
|
|
174
|
+
return undefined;
|
|
101
175
|
}
|
|
102
|
-
|
|
176
|
+
}
|
|
177
|
+
function computeTronChecksum(payload) {
|
|
178
|
+
const firstHash = sha256(payload);
|
|
179
|
+
const secondHash = sha256(hexToBytes(firstHash));
|
|
180
|
+
return hexToBytes(secondHash).slice(0, TRON_CHECKSUM_BYTE_LENGTH);
|
|
181
|
+
}
|
|
182
|
+
function bytesEqual(left, right) {
|
|
183
|
+
if (left.length !== right.length)
|
|
184
|
+
return false;
|
|
185
|
+
for (let i = 0; i < left.length; i++) {
|
|
186
|
+
if (left[i] !== right[i])
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
return true;
|
|
103
190
|
}
|
|
104
191
|
//# sourceMappingURL=address.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"address.js","sourceRoot":"","sources":["../../../src/helpers/address.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"address.js","sourceRoot":"","sources":["../../../src/helpers/address.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"amount.js","sourceRoot":"","sources":["../../../src/helpers/amount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,eAAe,CAAC,MAAc;IAC1C,OAAO,MAAM,KAAK,aAAa,CAAC,GAAG,IAAI,MAAM,KAAK,aAAa,CAAC,WAAW,CAAC;AAChF,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { concatHex, encodeAbiParameters, zeroAddress } from "viem";
|
|
2
2
|
import { DlnHookType } from "../types/enums.js";
|
|
3
|
+
import { resolveChainId } from "../whitelists/subscription-to-chain-id.js";
|
|
4
|
+
import { addressToHex } from "./address.js";
|
|
3
5
|
import { normalizeHexByteString } from "./hex.js";
|
|
4
6
|
// Hook envelope: ABI-encoded tuple prefixed with a `uint8 version=1` byte.
|
|
5
7
|
// keccak256 of these bytes is what ends up in `intent.externalCallHash`.
|
|
@@ -55,6 +57,18 @@ export function packEvmTransactionCall(data, dstChainAuthorityAddress) {
|
|
|
55
57
|
targetPayload: inner,
|
|
56
58
|
});
|
|
57
59
|
}
|
|
60
|
+
export function packEvmTransactionCallForTrade(data, trade) {
|
|
61
|
+
if (trade.dstChainAuthorityAddress === undefined) {
|
|
62
|
+
throw new Error("evm_transaction_call hook requires dstChainAuthorityAddress on the trade");
|
|
63
|
+
}
|
|
64
|
+
const realDestinationChainId = resolveChainId(trade.dstChainId);
|
|
65
|
+
// The API converts a chain-native destination authority, including Tron
|
|
66
|
+
// Base58Check, to its raw address before ABI-encoding the EVM hook envelope.
|
|
67
|
+
const fallbackAddress = realDestinationChainId === undefined
|
|
68
|
+
? trade.dstChainAuthorityAddress
|
|
69
|
+
: addressToHex(realDestinationChainId, trade.dstChainAuthorityAddress);
|
|
70
|
+
return packEvmTransactionCall(data, fallbackAddress);
|
|
71
|
+
}
|
|
58
72
|
// Parses an EVM request trade's `dlnHook` JSON and returns the serialized
|
|
59
73
|
// external-call bytes used for hashing. Returns `undefined` when the trade has
|
|
60
74
|
// no hook. Throws on unknown / Solana hook types; Solana hooks are verified
|
|
@@ -68,10 +82,7 @@ export function serializeDlnHook(trade) {
|
|
|
68
82
|
case DlnHookType.EvmHookV1:
|
|
69
83
|
return packEvmHookV1(hook.data);
|
|
70
84
|
case DlnHookType.EvmTransactionCall: {
|
|
71
|
-
|
|
72
|
-
throw new Error("evm_transaction_call hook requires dstChainAuthorityAddress on the trade");
|
|
73
|
-
}
|
|
74
|
-
return packEvmTransactionCall(hook.data, trade.dstChainAuthorityAddress);
|
|
85
|
+
return packEvmTransactionCallForTrade(hook.data, trade);
|
|
75
86
|
}
|
|
76
87
|
case DlnHookType.SolanaSerializedInstructions:
|
|
77
88
|
throw new Error("Solana hook types are not folded into externalCallHash");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm-dln-hook-pack.js","sourceRoot":"","sources":["../../../src/helpers/evm-dln-hook-pack.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"evm-dln-hook-pack.js","sourceRoot":"","sources":["../../../src/helpers/evm-dln-hook-pack.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { decodeTransferCalldata } from "./evm-calldata.js";
|
|
2
2
|
import { isNativeToken } from "./evm-token.js";
|
|
3
|
-
import {
|
|
3
|
+
import { getAddressIdentityKey } from "./address.js";
|
|
4
4
|
import { parseIntegerString } from "./integer.js";
|
|
5
|
-
import { isWhitelisted } from "../whitelists/types.js";
|
|
6
5
|
// Validates an EVM `{to, data, value}` triplet that is expected to encode a
|
|
7
6
|
// gas-compensation transfer. `groups` are the gas-compensation groups
|
|
8
7
|
// associated with this triplet's source (already filtered to the relevant
|
|
@@ -13,13 +12,13 @@ import { isWhitelisted } from "../whitelists/types.js";
|
|
|
13
12
|
// and at least one group must carry a native token).
|
|
14
13
|
// - otherwise → ERC20 compensation (`triplet.to` matches some non-native
|
|
15
14
|
// group's tokenAddress, data is `transfer(...)`, value === "0").
|
|
16
|
-
export function validateEvmGasCompensationTx(triplet, groups, realChainId, basePath, codes
|
|
15
|
+
export function validateEvmGasCompensationTx(triplet, groups, realChainId, basePath, codes) {
|
|
17
16
|
if (triplet.data === "0x") {
|
|
18
|
-
return validateNativeCompensation(triplet, groups,
|
|
17
|
+
return validateNativeCompensation(triplet, groups, basePath, codes);
|
|
19
18
|
}
|
|
20
|
-
return validateErc20Compensation(triplet, groups, realChainId, basePath, codes
|
|
19
|
+
return validateErc20Compensation(triplet, groups, realChainId, basePath, codes);
|
|
21
20
|
}
|
|
22
|
-
function validateNativeCompensation(triplet, groups,
|
|
21
|
+
function validateNativeCompensation(triplet, groups, basePath, codes) {
|
|
23
22
|
const violations = [];
|
|
24
23
|
// CRITICAL: data="0x" implies native — must have at least one native group.
|
|
25
24
|
const hasNativeGroup = groups.some(g => isNativeToken(g.tokenAddress, g.realChainId));
|
|
@@ -32,15 +31,6 @@ function validateNativeCompensation(triplet, groups, realChainId, basePath, code
|
|
|
32
31
|
actual: "0x",
|
|
33
32
|
});
|
|
34
33
|
}
|
|
35
|
-
// CRITICAL: native compensation must transfer to the configured delegate.
|
|
36
|
-
if (!isWhitelisted(delegateContracts, realChainId, triplet.to)) {
|
|
37
|
-
violations.push({
|
|
38
|
-
code: codes.recipientMismatch,
|
|
39
|
-
message: "native compensation recipient is not whitelisted",
|
|
40
|
-
path: `${basePath}.to`,
|
|
41
|
-
actual: triplet.to,
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
34
|
// HIGH: native compensation value must parse and be > 0.
|
|
45
35
|
violations.push(...validateNativeValue(triplet.value, basePath, codes));
|
|
46
36
|
return violations;
|
|
@@ -67,12 +57,15 @@ function validateNativeValue(rawValue, basePath, codes) {
|
|
|
67
57
|
}];
|
|
68
58
|
}
|
|
69
59
|
}
|
|
70
|
-
function validateErc20Compensation(triplet, groups, realChainId, basePath, codes
|
|
60
|
+
function validateErc20Compensation(triplet, groups, realChainId, basePath, codes) {
|
|
71
61
|
const violations = [];
|
|
72
62
|
// CRITICAL: `to` must equal some non-native group's tokenAddress.
|
|
73
63
|
const erc20Groups = groups.filter(g => !isNativeToken(g.tokenAddress, g.realChainId));
|
|
74
|
-
const
|
|
75
|
-
|
|
64
|
+
const targetKey = getAddressIdentityKey(realChainId, triplet.to);
|
|
65
|
+
const matches = targetKey !== undefined && erc20Groups.some(g => {
|
|
66
|
+
const groupTokenKey = getAddressIdentityKey(g.realChainId, g.tokenAddress);
|
|
67
|
+
return groupTokenKey !== undefined && groupTokenKey === targetKey;
|
|
68
|
+
});
|
|
76
69
|
if (!matches) {
|
|
77
70
|
violations.push({
|
|
78
71
|
code: codes.toMismatch,
|
|
@@ -84,15 +77,7 @@ function validateErc20Compensation(triplet, groups, realChainId, basePath, codes
|
|
|
84
77
|
}
|
|
85
78
|
// CRITICAL: data must be a valid ERC20 transfer calldata.
|
|
86
79
|
try {
|
|
87
|
-
|
|
88
|
-
if (!isWhitelisted(delegateContracts, realChainId, decoded.to)) {
|
|
89
|
-
violations.push({
|
|
90
|
-
code: codes.recipientMismatch,
|
|
91
|
-
message: "ERC20 compensation transfer recipient is not whitelisted",
|
|
92
|
-
path: `${basePath}.data`,
|
|
93
|
-
actual: decoded.to,
|
|
94
|
-
});
|
|
95
|
-
}
|
|
80
|
+
decodeTransferCalldata(triplet.data);
|
|
96
81
|
}
|
|
97
82
|
catch (error) {
|
|
98
83
|
violations.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm-gas-compensation-tx.js","sourceRoot":"","sources":["../../../src/helpers/evm-gas-compensation-tx.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"evm-gas-compensation-tx.js","sourceRoot":"","sources":["../../../src/helpers/evm-gas-compensation-tx.ts"],"names":[],"mappings":"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"}
|
|
@@ -61,4 +61,11 @@ export const SUBMIT_INTENT_ABI_PARAMS = [
|
|
|
61
61
|
],
|
|
62
62
|
},
|
|
63
63
|
];
|
|
64
|
+
export const SUBMIT_INTENT_ABI_ITEM = {
|
|
65
|
+
type: "function",
|
|
66
|
+
name: "submitIntent",
|
|
67
|
+
stateMutability: "nonpayable",
|
|
68
|
+
inputs: SUBMIT_INTENT_ABI_PARAMS,
|
|
69
|
+
outputs: [],
|
|
70
|
+
};
|
|
64
71
|
//# sourceMappingURL=evm-intent-id-abi.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm-intent-id-abi.js","sourceRoot":"","sources":["../../../src/helpers/evm-intent-id-abi.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"evm-intent-id-abi.js","sourceRoot":"","sources":["../../../src/helpers/evm-intent-id-abi.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ViolationCode, } from "../types/index.js";
|
|
2
|
-
import {
|
|
2
|
+
import { getAddressIdentityKey } from "./address.js";
|
|
3
3
|
import { resolveWrappedTokenAddress } from "./evm-token.js";
|
|
4
4
|
import { parseIntegerString } from "./integer.js";
|
|
5
5
|
// Sums `response.trades[i].srcChainTokenIn.amount` over trades whose input
|
|
@@ -18,12 +18,20 @@ export function sumTradeAmounts(trades, tokenAddress, realChainId, responseTrade
|
|
|
18
18
|
let matchedAny = false;
|
|
19
19
|
// Resolve native → WETH so Budget for WETH matches trades with native input (and vice versa)
|
|
20
20
|
const resolvedToken = resolveWrappedTokenAddress(tokenAddress, realChainId) ?? tokenAddress;
|
|
21
|
-
const
|
|
21
|
+
const tokenKey = getAddressIdentityKey(realChainId, resolvedToken);
|
|
22
|
+
// Safe skip: the owning Budget/Wrap validator reports an invalid target
|
|
23
|
+
// address; without a valid identity no trade amount can be matched safely.
|
|
24
|
+
if (tokenKey === undefined)
|
|
25
|
+
return { skip: true };
|
|
22
26
|
for (let i = 0; i < trades.length; i++) {
|
|
23
27
|
const trade = trades[i];
|
|
24
28
|
const resolvedTradeToken = resolveWrappedTokenAddress(trade.srcChainTokenIn, realChainId);
|
|
25
|
-
const
|
|
26
|
-
|
|
29
|
+
const tradeTokenKey = getAddressIdentityKey(realChainId, resolvedTradeToken ?? trade.srcChainTokenIn);
|
|
30
|
+
// Safe skip: malformed request trade token addresses are reported by
|
|
31
|
+
// trade-level address validation and cannot match a valid target.
|
|
32
|
+
if (tradeTokenKey === undefined)
|
|
33
|
+
continue;
|
|
34
|
+
if (tradeTokenKey !== tokenKey) {
|
|
27
35
|
continue;
|
|
28
36
|
}
|
|
29
37
|
matchedAny = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm-trade-amounts.js","sourceRoot":"","sources":["../../../src/helpers/evm-trade-amounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,aAAa,GAIhB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"evm-trade-amounts.js","sourceRoot":"","sources":["../../../src/helpers/evm-trade-amounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,aAAa,GAIhB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAO/C,2EAA2E;AAC3E,6EAA6E;AAC7E,4EAA4E;AAC5E,6EAA6E;AAC7E,EAAE;AACF,8EAA8E;AAC9E,4EAA4E;AAC5E,qEAAqE;AACrE,6EAA6E;AAC7E,6EAA6E;AAC7E,+CAA+C;AAC/C,MAAM,UAAU,eAAe,CAC3B,MAAsB,EACtB,YAAoB,EACpB,WAAoB,EACpB,cAA6C;IAE7C,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,6FAA6F;IAC7F,MAAM,aAAa,GAAG,0BAA0B,CAAC,YAAY,EAAE,WAAW,CAAC,IAAI,YAAY,CAAC;IAC5F,MAAM,QAAQ,GAAG,qBAAqB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAEnE,wEAAwE;IACxE,2EAA2E;IAC3E,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAElD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,kBAAkB,GAAG,0BAA0B,CAAC,KAAK,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QAC1F,MAAM,aAAa,GAAG,qBAAqB,CACvC,WAAW,EAAE,kBAAkB,IAAI,KAAK,CAAC,eAAe,CAC3D,CAAC;QACF,qEAAqE;QACrE,kEAAkE;QAClE,IAAI,aAAa,KAAK,SAAS;YAAE,SAAS;QAC1C,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;YAC7B,SAAS;QACb,CAAC;QAED,UAAU,GAAG,IAAI,CAAC;QAClB,MAAM,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;QACxC,qEAAqE;QACrE,uBAAuB;QACvB,IAAI,CAAC,aAAa,EAAE,CAAC;YACjB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC1B,CAAC;QAED,MAAM,cAAc,GAAG,aAAa,CAAC,eAAe,CAAC,MAAM,CAAC;QAC5D,IAAI,CAAC;YACD,GAAG,IAAI,kBAAkB,CAAC,cAAc,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO;gBACH,UAAU,EAAE,CAAC;wBACT,IAAI,EAAE,aAAa,CAAC,kBAAkB;wBACtC,OAAO,EACH,gEAAgE;wBACpE,IAAI,EAAE,mBAAmB,CAAC,0BAA0B;wBACpD,MAAM,EAAE,cAAc;wBACtB,OAAO,EAAE,KAAK;qBACjB,CAAC;aACL,CAAC;QACN,CAAC;IACL,CAAC;IAED,oDAAoD;IACpD,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IAEpC,OAAO,EAAE,GAAG,EAAE,CAAC;AACnB,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
// Helpers that derive configured delegate values accepted by
|
|
2
|
-
|
|
3
|
-
import { getChainEngine } from "./address.js";
|
|
1
|
+
// Helpers that derive configured EVM/Tron delegate values accepted by
|
|
2
|
+
// API-controlled MetaMask AA paths.
|
|
4
3
|
export function getExpectedIntentDelegates(chainId, envConfig) {
|
|
5
4
|
return getConfiguredDelegates(chainId, envConfig);
|
|
6
5
|
}
|
|
@@ -8,9 +7,6 @@ export function getExpectedBundleHookDelegates(chainId, envConfig) {
|
|
|
8
7
|
return getConfiguredDelegates(chainId, envConfig);
|
|
9
8
|
}
|
|
10
9
|
function getConfiguredDelegates(chainId, envConfig) {
|
|
11
|
-
const engine = getChainEngine(chainId);
|
|
12
|
-
if (engine === ChainEngine.Solana)
|
|
13
|
-
return [envConfig.solanaDelegateAddress];
|
|
14
10
|
return envConfig.evmDelegateAddresses[chainId];
|
|
15
11
|
}
|
|
16
12
|
//# sourceMappingURL=expected-delegate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expected-delegate.js","sourceRoot":"","sources":["../../../src/helpers/expected-delegate.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"expected-delegate.js","sourceRoot":"","sources":["../../../src/helpers/expected-delegate.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,oCAAoC;AAKpC,MAAM,UAAU,0BAA0B,CACtC,OAAgB,EAChB,SAA4B;IAE5B,OAAO,sBAAsB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC1C,OAAgB,EAChB,SAA4B;IAE5B,OAAO,sBAAsB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,sBAAsB,CAC3B,OAAgB,EAChB,SAA4B;IAE5B,OAAO,SAAS,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getAddressIdentityKey } from "./address.js";
|
|
2
2
|
import { resolveChainId } from "../whitelists/subscription-to-chain-id.js";
|
|
3
3
|
import { isRequestHookV2 } from "../types/request.js";
|
|
4
4
|
// Groups `gasCompensationInfo` entries from request.preHooks by
|
|
5
5
|
// (chainId, tokenAddress, sender). One compensation hook per
|
|
6
6
|
// unique group is expected to be appended to response.preHooks.
|
|
7
7
|
// Groups with an unknown subscription chainId are skipped — they'll surface as
|
|
8
|
-
// `UnknownSubscriptionId` via
|
|
8
|
+
// `UnknownSubscriptionId` via `validateRequestHookChainFields()`.
|
|
9
9
|
export function extractGasCompensationGroups(request) {
|
|
10
10
|
const seen = new Set();
|
|
11
11
|
const groups = [];
|
|
@@ -18,9 +18,13 @@ export function extractGasCompensationGroups(request) {
|
|
|
18
18
|
const realChainId = resolveChainId(info.chainId);
|
|
19
19
|
if (realChainId === undefined)
|
|
20
20
|
continue;
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
const tokenKey = getAddressIdentityKey(realChainId, info.tokenAddress);
|
|
22
|
+
const senderKey = getAddressIdentityKey(realChainId, info.sender);
|
|
23
|
+
// Safe skip: malformed gas-compensation addresses cannot form a
|
|
24
|
+
// verifiable group and are reported by hook/address validation.
|
|
25
|
+
if (tokenKey === undefined || senderKey === undefined)
|
|
26
|
+
continue;
|
|
27
|
+
const key = `${realChainId}:${tokenKey}:${senderKey}`;
|
|
24
28
|
if (seen.has(key))
|
|
25
29
|
continue;
|
|
26
30
|
seen.add(key);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gas-compensation.js","sourceRoot":"","sources":["../../../src/helpers/gas-compensation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"gas-compensation.js","sourceRoot":"","sources":["../../../src/helpers/gas-compensation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AASnD,gEAAgE;AAChE,6DAA6D;AAC7D,gEAAgE;AAChE,+EAA+E;AAC/E,kEAAkE;AAClE,MAAM,UAAU,4BAA4B,CACxC,OAA8B;IAE9B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QACxC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAAE,SAAS;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACtC,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,WAAW,KAAK,SAAS;YAAE,SAAS;QAExC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,qBAAqB,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAElE,gEAAgE;QAChE,gEAAgE;QAChE,IAAI,QAAQ,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS;YAAE,SAAS;QAEhE,MAAM,GAAG,GAAG,GAAG,WAAW,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;QAEtD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAE5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEd,MAAM,CAAC,IAAI,CAAC;YACR,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,WAAW;YACX,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;SACtB,CAAC,CAAC;IACP,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC"}
|