@debridge-finance/borderless-validation-sdk 0.0.0-dev-dee2389
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/graylists/evm/token-permit-metadata.js +28 -0
- package/dist/cjs/graylists/evm/token-permit-metadata.js.map +1 -0
- package/dist/cjs/helpers/address.js +75 -0
- package/dist/cjs/helpers/address.js.map +1 -0
- package/dist/cjs/helpers/caveat-decoder.js +60 -0
- package/dist/cjs/helpers/caveat-decoder.js.map +1 -0
- package/dist/cjs/helpers/constants.js +6 -0
- package/dist/cjs/helpers/constants.js.map +1 -0
- package/dist/cjs/helpers/evm-action.js +20 -0
- package/dist/cjs/helpers/evm-action.js.map +1 -0
- package/dist/cjs/helpers/evm-calldata.js +45 -0
- package/dist/cjs/helpers/evm-calldata.js.map +1 -0
- package/dist/cjs/helpers/evm-intent-id-abi.js +67 -0
- package/dist/cjs/helpers/evm-intent-id-abi.js.map +1 -0
- package/dist/cjs/helpers/evm-intent-id.js +70 -0
- package/dist/cjs/helpers/evm-intent-id.js.map +1 -0
- package/dist/cjs/helpers/evm-token.js +30 -0
- package/dist/cjs/helpers/evm-token.js.map +1 -0
- package/dist/cjs/helpers/evm-trade-amounts.js +42 -0
- package/dist/cjs/helpers/evm-trade-amounts.js.map +1 -0
- package/dist/cjs/helpers/solana-instruction.js +160 -0
- package/dist/cjs/helpers/solana-instruction.js.map +1 -0
- package/dist/cjs/helpers/solana-intent-id.js +460 -0
- package/dist/cjs/helpers/solana-intent-id.js.map +1 -0
- package/dist/cjs/helpers/solana-transaction-decode.js +58 -0
- package/dist/cjs/helpers/solana-transaction-decode.js.map +1 -0
- package/dist/cjs/helpers/zod.js +12 -0
- package/dist/cjs/helpers/zod.js.map +1 -0
- package/dist/cjs/index.js +9 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/types/enums.js +137 -0
- package/dist/cjs/types/enums.js.map +1 -0
- package/dist/cjs/types/index.js +21 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/request.js +65 -0
- package/dist/cjs/types/request.js.map +1 -0
- package/dist/cjs/types/response.js +252 -0
- package/dist/cjs/types/response.js.map +1 -0
- package/dist/cjs/types/validation.js +242 -0
- package/dist/cjs/types/validation.js.map +1 -0
- package/dist/cjs/validations/echo-fields.js +67 -0
- package/dist/cjs/validations/echo-fields.js.map +1 -0
- package/dist/cjs/validations/evm-caveats.js +235 -0
- package/dist/cjs/validations/evm-caveats.js.map +1 -0
- package/dist/cjs/validations/evm-op-budget.js +261 -0
- package/dist/cjs/validations/evm-op-budget.js.map +1 -0
- package/dist/cjs/validations/evm-op-gas-compensation.js +152 -0
- package/dist/cjs/validations/evm-op-gas-compensation.js.map +1 -0
- package/dist/cjs/validations/evm-op-hook.js +8 -0
- package/dist/cjs/validations/evm-op-hook.js.map +1 -0
- package/dist/cjs/validations/evm-op-wrap.js +112 -0
- package/dist/cjs/validations/evm-op-wrap.js.map +1 -0
- package/dist/cjs/validations/evm-permit.js +224 -0
- package/dist/cjs/validations/evm-permit.js.map +1 -0
- package/dist/cjs/validations/evm-permit2.js +361 -0
- package/dist/cjs/validations/evm-permit2.js.map +1 -0
- package/dist/cjs/validations/evm-required-actions.js +184 -0
- package/dist/cjs/validations/evm-required-actions.js.map +1 -0
- package/dist/cjs/validations/evm-sign712-metamask.js +147 -0
- package/dist/cjs/validations/evm-sign712-metamask.js.map +1 -0
- package/dist/cjs/validations/evm-sign712.js +203 -0
- package/dist/cjs/validations/evm-sign712.js.map +1 -0
- package/dist/cjs/validations/evm-sign7702.js +59 -0
- package/dist/cjs/validations/evm-sign7702.js.map +1 -0
- package/dist/cjs/validations/evm-transaction.js +38 -0
- package/dist/cjs/validations/evm-transaction.js.map +1 -0
- package/dist/cjs/validations/hooks-common.js +207 -0
- package/dist/cjs/validations/hooks-common.js.map +1 -0
- package/dist/cjs/validations/required-actions.js +69 -0
- package/dist/cjs/validations/required-actions.js.map +1 -0
- package/dist/cjs/validations/solana-hook.js +225 -0
- package/dist/cjs/validations/solana-hook.js.map +1 -0
- package/dist/cjs/validations/solana-op-budget.js +293 -0
- package/dist/cjs/validations/solana-op-budget.js.map +1 -0
- package/dist/cjs/validations/solana-op-wrap.js +191 -0
- package/dist/cjs/validations/solana-op-wrap.js.map +1 -0
- package/dist/cjs/validations/solana-required-actions.js +122 -0
- package/dist/cjs/validations/solana-required-actions.js.map +1 -0
- package/dist/cjs/validations/solana-sign.js +171 -0
- package/dist/cjs/validations/solana-sign.js.map +1 -0
- package/dist/cjs/validations/solana-transaction.js +238 -0
- package/dist/cjs/validations/solana-transaction.js.map +1 -0
- package/dist/cjs/validations/trade-grouping.js +165 -0
- package/dist/cjs/validations/trade-grouping.js.map +1 -0
- package/dist/cjs/validations/trade-intent-consistency.js +104 -0
- package/dist/cjs/validations/trade-intent-consistency.js.map +1 -0
- package/dist/cjs/validations/trades.js +517 -0
- package/dist/cjs/validations/trades.js.map +1 -0
- package/dist/cjs/validator.js +75 -0
- package/dist/cjs/validator.js.map +1 -0
- package/dist/cjs/whitelists/environment-config.js +118 -0
- package/dist/cjs/whitelists/environment-config.js.map +1 -0
- package/dist/cjs/whitelists/evm/caveat-enforcers.js +18 -0
- package/dist/cjs/whitelists/evm/caveat-enforcers.js.map +1 -0
- package/dist/cjs/whitelists/evm/delegation-manager.js +9 -0
- package/dist/cjs/whitelists/evm/delegation-manager.js.map +1 -0
- package/dist/cjs/whitelists/evm/eip7702-delegation.js +8 -0
- package/dist/cjs/whitelists/evm/eip7702-delegation.js.map +1 -0
- package/dist/cjs/whitelists/evm/index.js +17 -0
- package/dist/cjs/whitelists/evm/index.js.map +1 -0
- package/dist/cjs/whitelists/evm/permit2.js +18 -0
- package/dist/cjs/whitelists/evm/permit2.js.map +1 -0
- package/dist/cjs/whitelists/evm/weth.js +19 -0
- package/dist/cjs/whitelists/evm/weth.js.map +1 -0
- package/dist/cjs/whitelists/solana/index.js +19 -0
- package/dist/cjs/whitelists/solana/index.js.map +1 -0
- package/dist/cjs/whitelists/solana/intent-signature.js +25 -0
- package/dist/cjs/whitelists/solana/intent-signature.js.map +1 -0
- package/dist/cjs/whitelists/solana/programs.js +19 -0
- package/dist/cjs/whitelists/solana/programs.js.map +1 -0
- package/dist/cjs/whitelists/subscription-to-chain-id.js +36 -0
- package/dist/cjs/whitelists/subscription-to-chain-id.js.map +1 -0
- package/dist/cjs/whitelists/types.js +29 -0
- package/dist/cjs/whitelists/types.js.map +1 -0
- package/dist/esm/graylists/evm/token-permit-metadata.js +24 -0
- package/dist/esm/graylists/evm/token-permit-metadata.js.map +1 -0
- package/dist/esm/helpers/address.js +63 -0
- package/dist/esm/helpers/address.js.map +1 -0
- package/dist/esm/helpers/caveat-decoder.js +55 -0
- package/dist/esm/helpers/caveat-decoder.js.map +1 -0
- package/dist/esm/helpers/constants.js +3 -0
- package/dist/esm/helpers/constants.js.map +1 -0
- package/dist/esm/helpers/evm-action.js +16 -0
- package/dist/esm/helpers/evm-action.js.map +1 -0
- package/dist/esm/helpers/evm-calldata.js +39 -0
- package/dist/esm/helpers/evm-calldata.js.map +1 -0
- package/dist/esm/helpers/evm-intent-id-abi.js +64 -0
- package/dist/esm/helpers/evm-intent-id-abi.js.map +1 -0
- package/dist/esm/helpers/evm-intent-id.js +67 -0
- package/dist/esm/helpers/evm-intent-id.js.map +1 -0
- package/dist/esm/helpers/evm-token.js +25 -0
- package/dist/esm/helpers/evm-token.js.map +1 -0
- package/dist/esm/helpers/evm-trade-amounts.js +39 -0
- package/dist/esm/helpers/evm-trade-amounts.js.map +1 -0
- package/dist/esm/helpers/solana-instruction.js +146 -0
- package/dist/esm/helpers/solana-instruction.js.map +1 -0
- package/dist/esm/helpers/solana-intent-id.js +457 -0
- package/dist/esm/helpers/solana-intent-id.js.map +1 -0
- package/dist/esm/helpers/solana-transaction-decode.js +55 -0
- package/dist/esm/helpers/solana-transaction-decode.js.map +1 -0
- package/dist/esm/helpers/zod.js +9 -0
- package/dist/esm/helpers/zod.js.map +1 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/types/enums.js +134 -0
- package/dist/esm/types/enums.js.map +1 -0
- package/dist/esm/types/index.js +5 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/request.js +62 -0
- package/dist/esm/types/request.js.map +1 -0
- package/dist/esm/types/response.js +249 -0
- package/dist/esm/types/response.js.map +1 -0
- package/dist/esm/types/validation.js +239 -0
- package/dist/esm/types/validation.js.map +1 -0
- package/dist/esm/validations/echo-fields.js +64 -0
- package/dist/esm/validations/echo-fields.js.map +1 -0
- package/dist/esm/validations/evm-caveats.js +228 -0
- package/dist/esm/validations/evm-caveats.js.map +1 -0
- package/dist/esm/validations/evm-op-budget.js +258 -0
- package/dist/esm/validations/evm-op-budget.js.map +1 -0
- package/dist/esm/validations/evm-op-gas-compensation.js +149 -0
- package/dist/esm/validations/evm-op-gas-compensation.js.map +1 -0
- package/dist/esm/validations/evm-op-hook.js +5 -0
- package/dist/esm/validations/evm-op-hook.js.map +1 -0
- package/dist/esm/validations/evm-op-wrap.js +109 -0
- package/dist/esm/validations/evm-op-wrap.js.map +1 -0
- package/dist/esm/validations/evm-permit.js +221 -0
- package/dist/esm/validations/evm-permit.js.map +1 -0
- package/dist/esm/validations/evm-permit2.js +358 -0
- package/dist/esm/validations/evm-permit2.js.map +1 -0
- package/dist/esm/validations/evm-required-actions.js +181 -0
- package/dist/esm/validations/evm-required-actions.js.map +1 -0
- package/dist/esm/validations/evm-sign712-metamask.js +144 -0
- package/dist/esm/validations/evm-sign712-metamask.js.map +1 -0
- package/dist/esm/validations/evm-sign712.js +200 -0
- package/dist/esm/validations/evm-sign712.js.map +1 -0
- package/dist/esm/validations/evm-sign7702.js +56 -0
- package/dist/esm/validations/evm-sign7702.js.map +1 -0
- package/dist/esm/validations/evm-transaction.js +35 -0
- package/dist/esm/validations/evm-transaction.js.map +1 -0
- package/dist/esm/validations/hooks-common.js +204 -0
- package/dist/esm/validations/hooks-common.js.map +1 -0
- package/dist/esm/validations/required-actions.js +66 -0
- package/dist/esm/validations/required-actions.js.map +1 -0
- package/dist/esm/validations/solana-hook.js +222 -0
- package/dist/esm/validations/solana-hook.js.map +1 -0
- package/dist/esm/validations/solana-op-budget.js +290 -0
- package/dist/esm/validations/solana-op-budget.js.map +1 -0
- package/dist/esm/validations/solana-op-wrap.js +188 -0
- package/dist/esm/validations/solana-op-wrap.js.map +1 -0
- package/dist/esm/validations/solana-required-actions.js +119 -0
- package/dist/esm/validations/solana-required-actions.js.map +1 -0
- package/dist/esm/validations/solana-sign.js +168 -0
- package/dist/esm/validations/solana-sign.js.map +1 -0
- package/dist/esm/validations/solana-transaction.js +234 -0
- package/dist/esm/validations/solana-transaction.js.map +1 -0
- package/dist/esm/validations/trade-grouping.js +161 -0
- package/dist/esm/validations/trade-grouping.js.map +1 -0
- package/dist/esm/validations/trade-intent-consistency.js +101 -0
- package/dist/esm/validations/trade-intent-consistency.js.map +1 -0
- package/dist/esm/validations/trades.js +514 -0
- package/dist/esm/validations/trades.js.map +1 -0
- package/dist/esm/validator.js +72 -0
- package/dist/esm/validator.js.map +1 -0
- package/dist/esm/whitelists/environment-config.js +115 -0
- package/dist/esm/whitelists/environment-config.js.map +1 -0
- package/dist/esm/whitelists/evm/caveat-enforcers.js +15 -0
- package/dist/esm/whitelists/evm/caveat-enforcers.js.map +1 -0
- package/dist/esm/whitelists/evm/delegation-manager.js +6 -0
- package/dist/esm/whitelists/evm/delegation-manager.js.map +1 -0
- package/dist/esm/whitelists/evm/eip7702-delegation.js +5 -0
- package/dist/esm/whitelists/evm/eip7702-delegation.js.map +1 -0
- package/dist/esm/whitelists/evm/index.js +6 -0
- package/dist/esm/whitelists/evm/index.js.map +1 -0
- package/dist/esm/whitelists/evm/permit2.js +15 -0
- package/dist/esm/whitelists/evm/permit2.js.map +1 -0
- package/dist/esm/whitelists/evm/weth.js +16 -0
- package/dist/esm/whitelists/evm/weth.js.map +1 -0
- package/dist/esm/whitelists/solana/index.js +3 -0
- package/dist/esm/whitelists/solana/index.js.map +1 -0
- package/dist/esm/whitelists/solana/intent-signature.js +22 -0
- package/dist/esm/whitelists/solana/intent-signature.js.map +1 -0
- package/dist/esm/whitelists/solana/programs.js +16 -0
- package/dist/esm/whitelists/solana/programs.js.map +1 -0
- package/dist/esm/whitelists/subscription-to-chain-id.js +32 -0
- package/dist/esm/whitelists/subscription-to-chain-id.js.map +1 -0
- package/dist/esm/whitelists/types.js +26 -0
- package/dist/esm/whitelists/types.js.map +1 -0
- package/dist/types/graylists/evm/token-permit-metadata.d.ts +11 -0
- package/dist/types/graylists/evm/token-permit-metadata.d.ts.map +1 -0
- package/dist/types/helpers/address.d.ts +13 -0
- package/dist/types/helpers/address.d.ts.map +1 -0
- package/dist/types/helpers/caveat-decoder.d.ts +13 -0
- package/dist/types/helpers/caveat-decoder.d.ts.map +1 -0
- package/dist/types/helpers/constants.d.ts +2 -0
- package/dist/types/helpers/constants.d.ts.map +1 -0
- package/dist/types/helpers/evm-action.d.ts +4 -0
- package/dist/types/helpers/evm-action.d.ts.map +1 -0
- package/dist/types/helpers/evm-calldata.d.ts +15 -0
- package/dist/types/helpers/evm-calldata.d.ts.map +1 -0
- package/dist/types/helpers/evm-intent-id-abi.d.ts +106 -0
- package/dist/types/helpers/evm-intent-id-abi.d.ts.map +1 -0
- package/dist/types/helpers/evm-intent-id.d.ts +3 -0
- package/dist/types/helpers/evm-intent-id.d.ts.map +1 -0
- package/dist/types/helpers/evm-token.d.ts +4 -0
- package/dist/types/helpers/evm-token.d.ts.map +1 -0
- package/dist/types/helpers/evm-trade-amounts.d.ts +16 -0
- package/dist/types/helpers/evm-trade-amounts.d.ts.map +1 -0
- package/dist/types/helpers/solana-instruction.d.ts +44 -0
- package/dist/types/helpers/solana-instruction.d.ts.map +1 -0
- package/dist/types/helpers/solana-intent-id.d.ts +3 -0
- package/dist/types/helpers/solana-intent-id.d.ts.map +1 -0
- package/dist/types/helpers/solana-transaction-decode.d.ts +18 -0
- package/dist/types/helpers/solana-transaction-decode.d.ts.map +1 -0
- package/dist/types/helpers/zod.d.ts +2 -0
- package/dist/types/helpers/zod.d.ts.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/types/enums.d.ts +112 -0
- package/dist/types/types/enums.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +5 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/types/request.d.ts +134 -0
- package/dist/types/types/request.d.ts.map +1 -0
- package/dist/types/types/response.d.ts +1140 -0
- package/dist/types/types/response.d.ts.map +1 -0
- package/dist/types/types/validation.d.ts +216 -0
- package/dist/types/types/validation.d.ts.map +1 -0
- package/dist/types/validations/echo-fields.d.ts +3 -0
- package/dist/types/validations/echo-fields.d.ts.map +1 -0
- package/dist/types/validations/evm-caveats.d.ts +33 -0
- package/dist/types/validations/evm-caveats.d.ts.map +1 -0
- package/dist/types/validations/evm-op-budget.d.ts +4 -0
- package/dist/types/validations/evm-op-budget.d.ts.map +1 -0
- package/dist/types/validations/evm-op-gas-compensation.d.ts +3 -0
- package/dist/types/validations/evm-op-gas-compensation.d.ts.map +1 -0
- package/dist/types/validations/evm-op-hook.d.ts +3 -0
- package/dist/types/validations/evm-op-hook.d.ts.map +1 -0
- package/dist/types/validations/evm-op-wrap.d.ts +3 -0
- package/dist/types/validations/evm-op-wrap.d.ts.map +1 -0
- package/dist/types/validations/evm-permit.d.ts +4 -0
- package/dist/types/validations/evm-permit.d.ts.map +1 -0
- package/dist/types/validations/evm-permit2.d.ts +4 -0
- package/dist/types/validations/evm-permit2.d.ts.map +1 -0
- package/dist/types/validations/evm-required-actions.d.ts +4 -0
- package/dist/types/validations/evm-required-actions.d.ts.map +1 -0
- package/dist/types/validations/evm-sign712-metamask.d.ts +3 -0
- package/dist/types/validations/evm-sign712-metamask.d.ts.map +1 -0
- package/dist/types/validations/evm-sign712.d.ts +4 -0
- package/dist/types/validations/evm-sign712.d.ts.map +1 -0
- package/dist/types/validations/evm-sign7702.d.ts +3 -0
- package/dist/types/validations/evm-sign7702.d.ts.map +1 -0
- package/dist/types/validations/evm-transaction.d.ts +3 -0
- package/dist/types/validations/evm-transaction.d.ts.map +1 -0
- package/dist/types/validations/hooks-common.d.ts +3 -0
- package/dist/types/validations/hooks-common.d.ts.map +1 -0
- package/dist/types/validations/required-actions.d.ts +4 -0
- package/dist/types/validations/required-actions.d.ts.map +1 -0
- package/dist/types/validations/solana-hook.d.ts +4 -0
- package/dist/types/validations/solana-hook.d.ts.map +1 -0
- package/dist/types/validations/solana-op-budget.d.ts +5 -0
- package/dist/types/validations/solana-op-budget.d.ts.map +1 -0
- package/dist/types/validations/solana-op-wrap.d.ts +4 -0
- package/dist/types/validations/solana-op-wrap.d.ts.map +1 -0
- package/dist/types/validations/solana-required-actions.d.ts +4 -0
- package/dist/types/validations/solana-required-actions.d.ts.map +1 -0
- package/dist/types/validations/solana-sign.d.ts +4 -0
- package/dist/types/validations/solana-sign.d.ts.map +1 -0
- package/dist/types/validations/solana-transaction.d.ts +5 -0
- package/dist/types/validations/solana-transaction.d.ts.map +1 -0
- package/dist/types/validations/trade-grouping.d.ts +22 -0
- package/dist/types/validations/trade-grouping.d.ts.map +1 -0
- package/dist/types/validations/trade-intent-consistency.d.ts +3 -0
- package/dist/types/validations/trade-intent-consistency.d.ts.map +1 -0
- package/dist/types/validations/trades.d.ts +3 -0
- package/dist/types/validations/trades.d.ts.map +1 -0
- package/dist/types/validator.d.ts +3 -0
- package/dist/types/validator.d.ts.map +1 -0
- package/dist/types/whitelists/environment-config.d.ts +4 -0
- package/dist/types/whitelists/environment-config.d.ts.map +1 -0
- package/dist/types/whitelists/evm/caveat-enforcers.d.ts +6 -0
- package/dist/types/whitelists/evm/caveat-enforcers.d.ts.map +1 -0
- package/dist/types/whitelists/evm/delegation-manager.d.ts +3 -0
- package/dist/types/whitelists/evm/delegation-manager.d.ts.map +1 -0
- package/dist/types/whitelists/evm/eip7702-delegation.d.ts +3 -0
- package/dist/types/whitelists/evm/eip7702-delegation.d.ts.map +1 -0
- package/dist/types/whitelists/evm/index.d.ts +6 -0
- package/dist/types/whitelists/evm/index.d.ts.map +1 -0
- package/dist/types/whitelists/evm/permit2.d.ts +3 -0
- package/dist/types/whitelists/evm/permit2.d.ts.map +1 -0
- package/dist/types/whitelists/evm/weth.d.ts +3 -0
- package/dist/types/whitelists/evm/weth.d.ts.map +1 -0
- package/dist/types/whitelists/solana/index.d.ts +3 -0
- package/dist/types/whitelists/solana/index.d.ts.map +1 -0
- package/dist/types/whitelists/solana/intent-signature.d.ts +9 -0
- package/dist/types/whitelists/solana/intent-signature.d.ts.map +1 -0
- package/dist/types/whitelists/solana/programs.d.ts +9 -0
- package/dist/types/whitelists/solana/programs.d.ts.map +1 -0
- package/dist/types/whitelists/subscription-to-chain-id.d.ts +4 -0
- package/dist/types/whitelists/subscription-to-chain-id.d.ts.map +1 -0
- package/dist/types/whitelists/types.d.ts +18 -0
- package/dist/types/whitelists/types.d.ts.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { decodeAbiParameters } from "viem";
|
|
2
|
+
// ExactExecutionEnforcer uses packed encoding:
|
|
3
|
+
// bytes [0:20] — address target
|
|
4
|
+
// bytes [20:52] — uint256 value
|
|
5
|
+
// bytes [52:] — bytes callData
|
|
6
|
+
// See: https://docs.metamask.io/smart-accounts-kit/reference/delegation/caveats#exactexecution
|
|
7
|
+
export function decodeExactExecution(terms) {
|
|
8
|
+
const hex = strip0x(terms);
|
|
9
|
+
if (hex.length < 104) { // 52 bytes minimum (20 + 32 + 0)
|
|
10
|
+
// This exception will be caught and reported as a violation in the validation logic
|
|
11
|
+
throw new Error(`ExactExecution terms too short: ${hex.length / 2} bytes`);
|
|
12
|
+
}
|
|
13
|
+
const to = "0x" + hex.slice(0, 40);
|
|
14
|
+
const value = BigInt("0x" + hex.slice(40, 104)).toString();
|
|
15
|
+
const data = "0x" + hex.slice(104);
|
|
16
|
+
return { to, value, data };
|
|
17
|
+
}
|
|
18
|
+
// ExactExecutionBatchEnforcer uses abi.encode(Execution[]):
|
|
19
|
+
// Execution = (address target, uint256 value, bytes callData)
|
|
20
|
+
// See: https://docs.metamask.io/smart-accounts-kit/reference/delegation/caveats#exactexecutionbatch
|
|
21
|
+
export function decodeExactExecutionBatch(terms) {
|
|
22
|
+
const decoded = decodeAbiParameters([
|
|
23
|
+
{
|
|
24
|
+
type: "tuple[]",
|
|
25
|
+
components: [
|
|
26
|
+
{ name: "target", type: "address" },
|
|
27
|
+
{ name: "value", type: "uint256" },
|
|
28
|
+
{ name: "callData", type: "bytes" },
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
], terms);
|
|
32
|
+
const executions = decoded[0];
|
|
33
|
+
return executions.map(e => ({
|
|
34
|
+
to: e.target.toLowerCase(),
|
|
35
|
+
value: e.value.toString(),
|
|
36
|
+
data: e.callData,
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
// TimestampEnforcer uses packed encoding:
|
|
40
|
+
// bytes [0:16] — uint128 afterThreshold
|
|
41
|
+
// bytes [16:32] — uint128 beforeThreshold
|
|
42
|
+
// See: https://docs.metamask.io/smart-accounts-kit/reference/delegation/caveats#timestamp
|
|
43
|
+
export function decodeTimestampEnforcer(terms) {
|
|
44
|
+
const hex = strip0x(terms);
|
|
45
|
+
if (hex.length < 64) { // 32 bytes minimum (16 + 16)
|
|
46
|
+
throw new Error(`TimestampEnforcer terms too short: ${hex.length / 2} bytes`);
|
|
47
|
+
}
|
|
48
|
+
const afterThreshold = BigInt("0x" + hex.slice(0, 32));
|
|
49
|
+
const beforeThreshold = BigInt("0x" + hex.slice(32, 64));
|
|
50
|
+
return { afterThreshold, beforeThreshold };
|
|
51
|
+
}
|
|
52
|
+
function strip0x(hex) {
|
|
53
|
+
return hex.startsWith("0x") ? hex.slice(2) : hex;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=caveat-decoder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"caveat-decoder.js","sourceRoot":"","sources":["../../../src/helpers/caveat-decoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAQ3C,+CAA+C;AAC/C,mCAAmC;AACnC,kCAAkC;AAClC,mCAAmC;AACnC,+FAA+F;AAC/F,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAE3B,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,iCAAiC;QACrD,oFAAoF;QACpF,MAAM,IAAI,KAAK,CAAC,mCAAmC,GAAG,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,EAAE,GAAG,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC3D,MAAM,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEnC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED,4DAA4D;AAC5D,gEAAgE;AAChE,oGAAoG;AACpG,MAAM,UAAU,yBAAyB,CAAC,KAAa;IACnD,MAAM,OAAO,GAAG,mBAAmB,CAC/B;QACI;YACI,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;gBACnC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;gBAClC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE;aACtC;SACJ;KACJ,EACD,KAAsB,CACzB,CAAC;IAEF,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAmE,CAAC;IAEhG,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxB,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE;QAC1B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE;QACzB,IAAI,EAAE,CAAC,CAAC,QAAQ;KACnB,CAAC,CAAC,CAAC;AACR,CAAC;AAOD,0CAA0C;AAC1C,2CAA2C;AAC3C,4CAA4C;AAC5C,0FAA0F;AAC1F,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACjD,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAE3B,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC,CAAC,6BAA6B;QAChD,MAAM,IAAI,KAAK,CAAC,sCAAsC,GAAG,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACvD,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAEzD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,OAAO,CAAC,GAAW;IACxB,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/helpers/constants.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { EvmActionKind } from "../types/index.js";
|
|
2
|
+
// Transaction and Sign712MetaMask actions carry transactionCalls;
|
|
3
|
+
// Sign712 (Permit/Permit2) and Sign7702Authorization do not.
|
|
4
|
+
export function actionUsesTransactionCalls(action) {
|
|
5
|
+
return action.type === EvmActionKind.Transaction
|
|
6
|
+
|| action.type === EvmActionKind.Sign712MetaMask;
|
|
7
|
+
}
|
|
8
|
+
// For Transaction-type actions (non-AA), the call is in action.data directly.
|
|
9
|
+
// For Sign712MetaMask-type actions (AA), the calls are in details.transactionCalls.
|
|
10
|
+
export function getTransactionCalls(action) {
|
|
11
|
+
if (action.type === EvmActionKind.Transaction) {
|
|
12
|
+
return [action.data];
|
|
13
|
+
}
|
|
14
|
+
return action.details?.transactionCalls ?? [];
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=evm-action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evm-action.js","sourceRoot":"","sources":["../../../src/helpers/evm-action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyC,aAAa,EAAE,MAAM,UAAU,CAAC;AAEhF,kEAAkE;AAClE,6DAA6D;AAC7D,MAAM,UAAU,0BAA0B,CAAC,MAAyB;IAChE,OAAO,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,WAAW;WACzC,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,eAAe,CAAC;AACzD,CAAC;AAED,8EAA8E;AAC9E,oFAAoF;AACpF,MAAM,UAAU,mBAAmB,CAAC,MAAyB;IACzD,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,WAAW,EAAE,CAAC;QAC5C,OAAO,CAAC,MAAM,CAAC,IAA0B,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,EAAE,gBAAgB,IAAI,EAAE,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { decodeFunctionData, erc20Abi } from "viem";
|
|
2
|
+
export const APPROVE_SELECTOR = "0x095ea7b3";
|
|
3
|
+
export const DEPOSIT_SELECTOR = "0xd0e30db0";
|
|
4
|
+
export const TRANSFER_SELECTOR = "0xa9059cbb";
|
|
5
|
+
export function decodeApproveCalldata(data) {
|
|
6
|
+
if (!data.toLowerCase().startsWith(APPROVE_SELECTOR)) {
|
|
7
|
+
throw new Error(`expected approve selector ${APPROVE_SELECTOR}, got ${data.slice(0, 10)}`);
|
|
8
|
+
}
|
|
9
|
+
const decoded = decodeFunctionData({
|
|
10
|
+
abi: erc20Abi,
|
|
11
|
+
data: data,
|
|
12
|
+
});
|
|
13
|
+
if (decoded.functionName !== "approve") {
|
|
14
|
+
throw new Error(`unexpected function: ${decoded.functionName}`);
|
|
15
|
+
}
|
|
16
|
+
const [spender, amount] = decoded.args;
|
|
17
|
+
return { spender: spender.toLowerCase(), amount };
|
|
18
|
+
}
|
|
19
|
+
export function isDepositCalldata(data) {
|
|
20
|
+
const normalized = data.toLowerCase();
|
|
21
|
+
return (normalized === DEPOSIT_SELECTOR || // only selector
|
|
22
|
+
normalized === DEPOSIT_SELECTOR + "0".repeat(56) // selector + padding
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
export function decodeTransferCalldata(data) {
|
|
26
|
+
if (!data.toLowerCase().startsWith(TRANSFER_SELECTOR)) {
|
|
27
|
+
throw new Error(`expected transfer selector ${TRANSFER_SELECTOR}, got ${data.slice(0, 10)}`);
|
|
28
|
+
}
|
|
29
|
+
const decoded = decodeFunctionData({
|
|
30
|
+
abi: erc20Abi,
|
|
31
|
+
data: data,
|
|
32
|
+
});
|
|
33
|
+
if (decoded.functionName !== "transfer") {
|
|
34
|
+
throw new Error(`unexpected function: ${decoded.functionName}`);
|
|
35
|
+
}
|
|
36
|
+
const [to, amount] = decoded.args;
|
|
37
|
+
return { to: to.toLowerCase(), amount };
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=evm-calldata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evm-calldata.js","sourceRoot":"","sources":["../../../src/helpers/evm-calldata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEpD,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAC7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAC7C,MAAM,CAAC,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAY9C,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAC9C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CACX,6BAA6B,gBAAgB,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAC5E,CAAC;IACN,CAAC;IAED,MAAM,OAAO,GAAG,kBAAkB,CAAC;QAC/B,GAAG,EAAE,QAAQ;QACb,IAAI,EAAE,IAAqB;KAC9B,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IACvC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACtC,OAAO,CACH,UAAU,KAAK,gBAAgB,IAAI,gBAAgB;QACnD,UAAU,KAAK,gBAAgB,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,qBAAqB;KACzE,CAAC;AACN,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAY;IAC/C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CACX,8BAA8B,iBAAiB,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAC9E,CAAC;IACN,CAAC;IAED,MAAM,OAAO,GAAG,kBAAkB,CAAC;QAC/B,GAAG,EAAE,QAAQ;QACb,IAAI,EAAE,IAAqB;KAC9B,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAClC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// ABI parameter definition for DeBridgeIntentManager.submitIntent(_intent)
|
|
2
|
+
// Extracted from the on-chain contract ABI — used for encoding the intent
|
|
3
|
+
// struct before hashing to compute intentId.
|
|
4
|
+
const allowedAddressTuple = {
|
|
5
|
+
type: "tuple[]",
|
|
6
|
+
components: [
|
|
7
|
+
{ name: "allowedAddress", type: "bytes" },
|
|
8
|
+
{ name: "chains", type: "uint32[]" },
|
|
9
|
+
{ name: "isAnyChain", type: "bool" },
|
|
10
|
+
],
|
|
11
|
+
};
|
|
12
|
+
export const SUBMIT_INTENT_ABI_PARAMS = [
|
|
13
|
+
{
|
|
14
|
+
type: "tuple",
|
|
15
|
+
components: [
|
|
16
|
+
{ name: "intentChainId", type: "uint32" },
|
|
17
|
+
{ name: "intentOwner", type: "address" },
|
|
18
|
+
{ ...allowedAddressTuple, name: "receiverDetails" },
|
|
19
|
+
{
|
|
20
|
+
type: "tuple[]",
|
|
21
|
+
name: "inputToken",
|
|
22
|
+
components: [
|
|
23
|
+
{ name: "token", type: "address" },
|
|
24
|
+
{ name: "minPartialAmount", type: "uint256" },
|
|
25
|
+
{ name: "maxPartialAmount", type: "uint256" },
|
|
26
|
+
{ name: "budget", type: "uint256" },
|
|
27
|
+
],
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
type: "tuple[]",
|
|
31
|
+
name: "giveToken",
|
|
32
|
+
components: [
|
|
33
|
+
{ name: "inputToken", type: "address" },
|
|
34
|
+
{ name: "giveToken", type: "address" },
|
|
35
|
+
{ name: "numerator", type: "uint256" },
|
|
36
|
+
{ name: "denominator", type: "uint8" },
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
type: "tuple[]",
|
|
41
|
+
name: "takeToken",
|
|
42
|
+
components: [
|
|
43
|
+
{ name: "giveToken", type: "address" },
|
|
44
|
+
{ name: "takeTokenChain", type: "uint32" },
|
|
45
|
+
{ name: "takeToken", type: "bytes" },
|
|
46
|
+
{ name: "numerator", type: "uint256" },
|
|
47
|
+
{ name: "denominator", type: "uint8" },
|
|
48
|
+
],
|
|
49
|
+
},
|
|
50
|
+
{ name: "expirationTimestamp", type: "uint64" },
|
|
51
|
+
{ name: "intentTimestamp", type: "uint64" },
|
|
52
|
+
{ name: "srcAllowedSender", type: "address[]" },
|
|
53
|
+
{ name: "executionMetadata", type: "bytes" },
|
|
54
|
+
{ name: "isAnyDlnMetadataAllowed", type: "bool" },
|
|
55
|
+
{ name: "dlnMetadata", type: "bytes" },
|
|
56
|
+
{ name: "externalCallHash", type: "bytes32" },
|
|
57
|
+
{ name: "combinedInteractions", type: "bytes" },
|
|
58
|
+
{ name: "allowedCancelBeneficiary", type: "address" },
|
|
59
|
+
{ ...allowedAddressTuple, name: "dstAuthorityAddress" },
|
|
60
|
+
{ name: "intentAuthority", type: "address" },
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
//# sourceMappingURL=evm-intent-id-abi.js.map
|
|
@@ -0,0 +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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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { encodeAbiParameters, keccak256, zeroAddress, zeroHash } from "viem";
|
|
2
|
+
import { SUBMIT_INTENT_ABI_PARAMS } from "./evm-intent-id-abi.js";
|
|
3
|
+
export function computeIntentId(intent) {
|
|
4
|
+
const struct = convertToIntentStruct(intent);
|
|
5
|
+
const encoded = encodeAbiParameters(SUBMIT_INTENT_ABI_PARAMS, [struct]);
|
|
6
|
+
return keccak256(encoded);
|
|
7
|
+
}
|
|
8
|
+
function convertToIntentStruct(intent) {
|
|
9
|
+
return {
|
|
10
|
+
intentChainId: intent.intentChainId,
|
|
11
|
+
intentOwner: intent.intentOwner,
|
|
12
|
+
receiverDetails: convertAllowedAddresses(intent.receiverDetails),
|
|
13
|
+
inputToken: convertInputTokens(intent.inputToken),
|
|
14
|
+
giveToken: convertGiveTokens(intent.giveToken),
|
|
15
|
+
takeToken: convertTakeTokens(intent.takeToken),
|
|
16
|
+
expirationTimestamp: BigInt(intent.expirationTimestamp),
|
|
17
|
+
intentTimestamp: BigInt(intent.intentTimestamp),
|
|
18
|
+
srcAllowedSender: (intent.srcAllowedSender ?? []),
|
|
19
|
+
executionMetadata: (intent.executionMetadata ?? zeroHash),
|
|
20
|
+
isAnyDlnMetadataAllowed: true,
|
|
21
|
+
dlnMetadata: (intent.dlnMetadata ?? "0x"),
|
|
22
|
+
externalCallHash: (intent.externalCallHash ?? zeroHash),
|
|
23
|
+
combinedInteractions: "0x",
|
|
24
|
+
allowedCancelBeneficiary: (intent.allowedCancelBeneficiary ?? zeroAddress),
|
|
25
|
+
dstAuthorityAddress: convertAllowedAddresses(intent.dstAuthorityAddress),
|
|
26
|
+
intentAuthority: intent.intentAuthority,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function convertAllowedAddresses(details) {
|
|
30
|
+
if (!details)
|
|
31
|
+
return [];
|
|
32
|
+
return details.map(d => ({
|
|
33
|
+
allowedAddress: d.address,
|
|
34
|
+
chains: d.destinationChainIds === "any" ? [] : d.destinationChainIds,
|
|
35
|
+
isAnyChain: d.destinationChainIds === "any",
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
38
|
+
function convertInputTokens(tokens) {
|
|
39
|
+
if (!tokens)
|
|
40
|
+
return [];
|
|
41
|
+
return tokens.map(t => ({
|
|
42
|
+
token: t.address,
|
|
43
|
+
minPartialAmount: BigInt(t.minPartialAmount),
|
|
44
|
+
maxPartialAmount: BigInt(t.maxPartialAmount),
|
|
45
|
+
budget: BigInt(t.constraintBudget),
|
|
46
|
+
}));
|
|
47
|
+
}
|
|
48
|
+
function convertGiveTokens(tokens) {
|
|
49
|
+
if (!tokens)
|
|
50
|
+
return [];
|
|
51
|
+
return tokens.map(t => ({
|
|
52
|
+
inputToken: t.inputTokenAddress,
|
|
53
|
+
giveToken: t.giveTokenAddress,
|
|
54
|
+
numerator: BigInt(t.numerator),
|
|
55
|
+
denominator: Number(t.denominator),
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
58
|
+
function convertTakeTokens(tokens) {
|
|
59
|
+
return tokens.map(t => ({
|
|
60
|
+
giveToken: t.fromTokenAddress,
|
|
61
|
+
takeTokenChain: t.takeTokenChainId,
|
|
62
|
+
takeToken: t.takeTokenAddress,
|
|
63
|
+
numerator: BigInt(t.numerator),
|
|
64
|
+
denominator: Number(t.denominator),
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=evm-intent-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evm-intent-id.js","sourceRoot":"","sources":["../../../src/helpers/evm-intent-id.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { WETH_CONTRACTS } from "../whitelists/evm/index.js";
|
|
2
|
+
import { SPL_NATIVE_MINT } from "../whitelists/solana/programs.js";
|
|
3
|
+
import { ChainId } from "../types/enums.js";
|
|
4
|
+
import { isNativeToken } from "./address.js";
|
|
5
|
+
// Re-export for convenience — callers that only need isNativeToken
|
|
6
|
+
// don't have to know about address.ts
|
|
7
|
+
export { isNativeToken } from "./address.js";
|
|
8
|
+
// Returns the wrapped token address for native tokens, or the token address as-is for non-native.
|
|
9
|
+
// For EVM native (0x000...0) → WETH address for the given chain.
|
|
10
|
+
// For Tron native (T9yD14N...) → WTRX (0x891... in EVM hex).
|
|
11
|
+
// For Solana native (111...1) → WSOL (SPL_NATIVE_MINT).
|
|
12
|
+
// For non-native tokens → the address unchanged.
|
|
13
|
+
export function resolveWrappedTokenAddress(tokenAddress, realChainId) {
|
|
14
|
+
if (!isNativeToken(tokenAddress, realChainId)) {
|
|
15
|
+
return tokenAddress;
|
|
16
|
+
}
|
|
17
|
+
if (realChainId === ChainId.Solana) {
|
|
18
|
+
return SPL_NATIVE_MINT;
|
|
19
|
+
}
|
|
20
|
+
const wethAddresses = WETH_CONTRACTS[realChainId] ?? WETH_CONTRACTS[ChainId.Wildcard];
|
|
21
|
+
if (!wethAddresses || wethAddresses.length === 0)
|
|
22
|
+
return undefined;
|
|
23
|
+
return wethAddresses[0];
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=evm-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evm-token.js","sourceRoot":"","sources":["../../../src/helpers/evm-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,mEAAmE;AACnE,sCAAsC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,kGAAkG;AAClG,iEAAiE;AACjE,6DAA6D;AAC7D,wDAAwD;AACxD,iDAAiD;AACjD,MAAM,UAAU,0BAA0B,CACtC,YAAoB,EACpB,WAAoB;IAEpB,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE,CAAC;QAC5C,OAAO,YAAY,CAAC;IACxB,CAAC;IACD,IAAI,WAAW,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;QACjC,OAAO,eAAe,CAAC;IAC3B,CAAC;IACD,MAAM,aAAa,GAAG,cAAc,CAAC,WAAW,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtF,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACnE,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ViolationCode, SpecialAmount, } from "../types/index.js";
|
|
2
|
+
import { normalizeAddress } from "./address.js";
|
|
3
|
+
import { resolveWrappedTokenAddress } from "./evm-token.js";
|
|
4
|
+
// Sums srcChainTokenInAmount for trades matching a given token address.
|
|
5
|
+
// Returns skip=true if any matching trade has max/auto amount.
|
|
6
|
+
// Returns violations if any matching trade has an invalid (non-numeric) amount.
|
|
7
|
+
export function sumTradeAmounts(trades, tokenAddress, realChainId) {
|
|
8
|
+
let sum = 0n;
|
|
9
|
+
// Resolve native → WETH so Budget for WETH matches trades with native input (and vice versa)
|
|
10
|
+
const resolvedToken = resolveWrappedTokenAddress(tokenAddress, realChainId) ?? tokenAddress;
|
|
11
|
+
const normalized = normalizeAddress(realChainId, resolvedToken);
|
|
12
|
+
for (let i = 0; i < trades.length; i++) {
|
|
13
|
+
const trade = trades[i];
|
|
14
|
+
const resolvedTradeToken = resolveWrappedTokenAddress(trade.srcChainTokenIn, realChainId);
|
|
15
|
+
const normalizedTradeToken = normalizeAddress(realChainId, resolvedTradeToken ?? trade.srcChainTokenIn);
|
|
16
|
+
if (normalizedTradeToken !== normalized) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
const amount = trade.srcChainTokenInAmount;
|
|
20
|
+
if (amount === SpecialAmount.Max || amount === SpecialAmount.Auto) {
|
|
21
|
+
return { skip: true };
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
sum += BigInt(amount);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return {
|
|
28
|
+
violations: [{
|
|
29
|
+
code: ViolationCode.TradeAmountInvalid,
|
|
30
|
+
message: `trade srcChainTokenInAmount is not a valid number`,
|
|
31
|
+
path: `request.trades[${i}].srcChainTokenInAmount`,
|
|
32
|
+
actual: amount,
|
|
33
|
+
}],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return { sum };
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=evm-trade-amounts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evm-trade-amounts.js","sourceRoot":"","sources":["../../../src/helpers/evm-trade-amounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,aAAa,EAEb,aAAa,GAEhB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAOzD,wEAAwE;AACxE,+DAA+D;AAC/D,gFAAgF;AAChF,MAAM,UAAU,eAAe,CAC3B,MAAsB,EACtB,YAAoB,EACpB,WAAoB;IAEpB,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,6FAA6F;IAC7F,MAAM,aAAa,GAAG,0BAA0B,CAAC,YAAY,EAAE,WAAW,CAAC,IAAI,YAAY,CAAC;IAC5F,MAAM,UAAU,GAAG,gBAAgB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAEhE,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,oBAAoB,GAAG,gBAAgB,CACzC,WAAW,EAAE,kBAAkB,IAAI,KAAK,CAAC,eAAe,CAC3D,CAAC;QACF,IAAI,oBAAoB,KAAK,UAAU,EAAE,CAAC;YACtC,SAAS;QACb,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,qBAAqB,CAAC;QAC3C,IAAI,MAAM,KAAK,aAAa,CAAC,GAAG,IAAI,MAAM,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC;YAChE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC;YACD,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACL,OAAO;gBACH,UAAU,EAAE,CAAC;wBACT,IAAI,EAAE,aAAa,CAAC,kBAAkB;wBACtC,OAAO,EAAE,mDAAmD;wBAC5D,IAAI,EAAE,kBAAkB,CAAC,yBAAyB;wBAClD,MAAM,EAAE,MAAM;qBACjB,CAAC;aACL,CAAC;QACN,CAAC;IACL,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { PublicKey } from "@solana/web3.js";
|
|
2
|
+
import { ASSOCIATED_TOKEN_PROGRAM, COMPUTE_BUDGET_PROGRAM, MEMO_PROGRAM, SPL_TOKEN_PROGRAM, SPL_TOKEN_2022_PROGRAM, SYSTEM_PROGRAM, } from "../whitelists/solana/programs.js";
|
|
3
|
+
// =============================================
|
|
4
|
+
// Constants
|
|
5
|
+
// =============================================
|
|
6
|
+
// Classic SPL Token Approve discriminator (1 byte)
|
|
7
|
+
const CLASSIC_APPROVE_DISCRIMINATOR = 4;
|
|
8
|
+
// Classic approve instruction data length: 1 byte discriminator + 8 bytes amount
|
|
9
|
+
const CLASSIC_APPROVE_DATA_LENGTH = 9;
|
|
10
|
+
// Custom approveProtocolTransfers discriminator (8 bytes, Anchor)
|
|
11
|
+
const CUSTOM_APPROVE_DISCRIMINATOR = new Uint8Array([17, 3, 184, 144, 112, 130, 116, 98]);
|
|
12
|
+
// Token program IDs that can issue classic approve
|
|
13
|
+
const TOKEN_PROGRAMS = new Set([SPL_TOKEN_PROGRAM, SPL_TOKEN_2022_PROGRAM]);
|
|
14
|
+
// Custom approve accounts layout: [0]=maker, [1]=statePda, [2]=tokenProgram, [3+]=ATAs
|
|
15
|
+
export const CUSTOM_APPROVE_FIRST_ATA_INDEX = 3;
|
|
16
|
+
// =============================================
|
|
17
|
+
// Types
|
|
18
|
+
// =============================================
|
|
19
|
+
export var ApproveKind;
|
|
20
|
+
(function (ApproveKind) {
|
|
21
|
+
ApproveKind[ApproveKind["Classic"] = 0] = "Classic";
|
|
22
|
+
ApproveKind[ApproveKind["Custom"] = 1] = "Custom";
|
|
23
|
+
})(ApproveKind || (ApproveKind = {}));
|
|
24
|
+
// =============================================
|
|
25
|
+
// Instruction identification
|
|
26
|
+
// =============================================
|
|
27
|
+
export function isClassicApprove(ix) {
|
|
28
|
+
return TOKEN_PROGRAMS.has(ix.programId)
|
|
29
|
+
&& ix.data.length === CLASSIC_APPROVE_DATA_LENGTH
|
|
30
|
+
&& ix.data[0] === CLASSIC_APPROVE_DISCRIMINATOR;
|
|
31
|
+
}
|
|
32
|
+
export function isCustomApprove(ix, intentProgram) {
|
|
33
|
+
if (ix.programId !== intentProgram)
|
|
34
|
+
return false;
|
|
35
|
+
if (ix.data.length < CUSTOM_APPROVE_DISCRIMINATOR.length)
|
|
36
|
+
return false;
|
|
37
|
+
for (let i = 0; i < CUSTOM_APPROVE_DISCRIMINATOR.length; i++) {
|
|
38
|
+
if (ix.data[i] !== CUSTOM_APPROVE_DISCRIMINATOR[i])
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
// SystemProgram Transfer: discriminator = 2 as u32 LE, data >= 12 bytes
|
|
44
|
+
export function isSystemTransfer(ix) {
|
|
45
|
+
if (ix.programId !== SYSTEM_PROGRAM)
|
|
46
|
+
return false;
|
|
47
|
+
if (ix.data.length < 12)
|
|
48
|
+
return false; // 4 discriminator + 8 lamports
|
|
49
|
+
return ix.data[0] === 2 && ix.data[1] === 0 && ix.data[2] === 0 && ix.data[3] === 0;
|
|
50
|
+
}
|
|
51
|
+
// SPL Token SyncNative: discriminator = 17, data = 1 byte
|
|
52
|
+
export function isSyncNative(ix) {
|
|
53
|
+
return ix.programId === SPL_TOKEN_PROGRAM
|
|
54
|
+
&& ix.data.length === 1
|
|
55
|
+
&& ix.data[0] === 17;
|
|
56
|
+
}
|
|
57
|
+
// CreateAssociatedTokenAccountIdempotent: discriminator = 1, data = 1 byte
|
|
58
|
+
export function isCreateAtaIdempotent(ix) {
|
|
59
|
+
return ix.programId === ASSOCIATED_TOKEN_PROGRAM
|
|
60
|
+
&& ix.data.length === 1
|
|
61
|
+
&& ix.data[0] === 1;
|
|
62
|
+
}
|
|
63
|
+
// ComputeBudget program instruction (any discriminator)
|
|
64
|
+
export function isComputeBudget(ix) {
|
|
65
|
+
return ix.programId === COMPUTE_BUDGET_PROGRAM;
|
|
66
|
+
}
|
|
67
|
+
// Memo program instruction (any content)
|
|
68
|
+
export function isMemo(ix) {
|
|
69
|
+
return ix.programId === MEMO_PROGRAM;
|
|
70
|
+
}
|
|
71
|
+
// =============================================
|
|
72
|
+
// Instruction decoding
|
|
73
|
+
// =============================================
|
|
74
|
+
export function decodeClassicApprove(ix) {
|
|
75
|
+
const amount = readU64LE(ix.data, 1);
|
|
76
|
+
return {
|
|
77
|
+
kind: ApproveKind.Classic,
|
|
78
|
+
amount,
|
|
79
|
+
ataAddress: ix.accountKeys[0],
|
|
80
|
+
delegate: ix.accountKeys[1],
|
|
81
|
+
owner: ix.accountKeys[2],
|
|
82
|
+
tokenProgramId: ix.programId,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
export function decodeCustomApprove(ix) {
|
|
86
|
+
const vecLength = readU32LE(ix.data, 8);
|
|
87
|
+
const amounts = [];
|
|
88
|
+
for (let i = 0; i < vecLength; i++) {
|
|
89
|
+
amounts.push(readU64LE(ix.data, 12 + i * 8));
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
kind: ApproveKind.Custom,
|
|
93
|
+
vecLength,
|
|
94
|
+
amounts,
|
|
95
|
+
maker: ix.accountKeys[0],
|
|
96
|
+
statePda: ix.accountKeys[1],
|
|
97
|
+
tokenProgramId: ix.accountKeys[2],
|
|
98
|
+
ataAddresses: ix.accountKeys.slice(CUSTOM_APPROVE_FIRST_ATA_INDEX),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
// =============================================
|
|
102
|
+
// ATA derivation
|
|
103
|
+
// =============================================
|
|
104
|
+
const ASSOCIATED_TOKEN_PROGRAM_PUB_KEY = new PublicKey(ASSOCIATED_TOKEN_PROGRAM);
|
|
105
|
+
// Derives the Associated Token Account address.
|
|
106
|
+
// seeds = [owner, tokenProgramId, mint], program = ASSOCIATED_TOKEN_PROGRAM
|
|
107
|
+
export function deriveAta(owner, mint, tokenProgramId) {
|
|
108
|
+
const ownerPk = new PublicKey(owner);
|
|
109
|
+
const mintPk = new PublicKey(mint);
|
|
110
|
+
const tokenProgramPk = new PublicKey(tokenProgramId);
|
|
111
|
+
const [ata] = PublicKey.findProgramAddressSync([ownerPk.toBytes(), tokenProgramPk.toBytes(), mintPk.toBytes()], ASSOCIATED_TOKEN_PROGRAM_PUB_KEY);
|
|
112
|
+
return ata.toBase58();
|
|
113
|
+
}
|
|
114
|
+
// =============================================
|
|
115
|
+
// Resolve compiled instructions to ResolvedInstruction[]
|
|
116
|
+
// =============================================
|
|
117
|
+
export function resolveInstructions(compiledInstructions, staticAccountKeys) {
|
|
118
|
+
const resolved = [];
|
|
119
|
+
for (const ix of compiledInstructions) {
|
|
120
|
+
const programId = staticAccountKeys[ix.programIdIndex];
|
|
121
|
+
// Skip instructions with programId in Address Lookup Table
|
|
122
|
+
// (must be already reported by other validations)
|
|
123
|
+
if (programId === undefined)
|
|
124
|
+
continue;
|
|
125
|
+
const accountKeys = ix.accountKeyIndexes.map(idx => staticAccountKeys[idx] ?? "");
|
|
126
|
+
resolved.push({ programId, accountKeys, data: ix.data });
|
|
127
|
+
}
|
|
128
|
+
return resolved;
|
|
129
|
+
}
|
|
130
|
+
// =============================================
|
|
131
|
+
// Binary helpers (little-endian)
|
|
132
|
+
// =============================================
|
|
133
|
+
function readU64LE(data, offset) {
|
|
134
|
+
let value = 0n;
|
|
135
|
+
for (let i = 0; i < 8; i++) {
|
|
136
|
+
value |= BigInt(data[offset + i]) << BigInt(i * 8);
|
|
137
|
+
}
|
|
138
|
+
return value;
|
|
139
|
+
}
|
|
140
|
+
function readU32LE(data, offset) {
|
|
141
|
+
return (data[offset]
|
|
142
|
+
| (data[offset + 1] << 8)
|
|
143
|
+
| (data[offset + 2] << 16)
|
|
144
|
+
| (data[offset + 3] << 24)) >>> 0;
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=solana-instruction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana-instruction.js","sourceRoot":"","sources":["../../../src/helpers/solana-instruction.ts"],"names":[],"mappings":"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"}
|