@townsq/mm-sdk 1.0.1
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 +95 -0
- package/dist/chains/evm/common/constant/abi/arbitrum-node-interface-abi.d.ts +25 -0
- package/dist/chains/evm/common/constant/abi/arbitrum-node-interface-abi.js +18 -0
- package/dist/chains/evm/common/constant/abi/arbitrum-node-interface-abi.js.map +1 -0
- package/dist/chains/evm/common/constant/abi/bridge-router-abi.d.ts +1030 -0
- package/dist/chains/evm/common/constant/abi/bridge-router-abi.js +794 -0
- package/dist/chains/evm/common/constant/abi/bridge-router-abi.js.map +1 -0
- package/dist/chains/evm/common/constant/abi/ccip-data-adapter-abi.d.ts +796 -0
- package/dist/chains/evm/common/constant/abi/ccip-data-adapter-abi.js +622 -0
- package/dist/chains/evm/common/constant/abi/ccip-data-adapter-abi.js.map +1 -0
- package/dist/chains/evm/common/constant/abi/erc-20-abi.d.ts +235 -0
- package/dist/chains/evm/common/constant/abi/erc-20-abi.js +157 -0
- package/dist/chains/evm/common/constant/abi/erc-20-abi.js.map +1 -0
- package/dist/chains/evm/common/constant/abi/wormhole-data-adapter-abi.d.ts +821 -0
- package/dist/chains/evm/common/constant/abi/wormhole-data-adapter-abi.js +645 -0
- package/dist/chains/evm/common/constant/abi/wormhole-data-adapter-abi.js.map +1 -0
- package/dist/chains/evm/common/constant/abi/wormhole-relayer-abi.d.ts +783 -0
- package/dist/chains/evm/common/constant/abi/wormhole-relayer-abi.js +501 -0
- package/dist/chains/evm/common/constant/abi/wormhole-relayer-abi.js.map +1 -0
- package/dist/chains/evm/common/constant/chain.d.ts +128 -0
- package/dist/chains/evm/common/constant/chain.js +62 -0
- package/dist/chains/evm/common/constant/chain.js.map +1 -0
- package/dist/chains/evm/common/constant/contract.d.ts +9 -0
- package/dist/chains/evm/common/constant/contract.js +13 -0
- package/dist/chains/evm/common/constant/contract.js.map +1 -0
- package/dist/chains/evm/common/constant/tokens.d.ts +6 -0
- package/dist/chains/evm/common/constant/tokens.js +21 -0
- package/dist/chains/evm/common/constant/tokens.js.map +1 -0
- package/dist/chains/evm/common/types/chain.d.ts +9 -0
- package/dist/chains/evm/common/types/chain.js +2 -0
- package/dist/chains/evm/common/types/chain.js.map +1 -0
- package/dist/chains/evm/common/types/contract.d.ts +8 -0
- package/dist/chains/evm/common/types/contract.js +2 -0
- package/dist/chains/evm/common/types/contract.js.map +1 -0
- package/dist/chains/evm/common/types/gmp.d.ts +37 -0
- package/dist/chains/evm/common/types/gmp.js +2 -0
- package/dist/chains/evm/common/types/gmp.js.map +1 -0
- package/dist/chains/evm/common/types/module.d.ts +90 -0
- package/dist/chains/evm/common/types/module.js +2 -0
- package/dist/chains/evm/common/types/module.js.map +1 -0
- package/dist/chains/evm/common/types/token.d.ts +28 -0
- package/dist/chains/evm/common/types/token.js +2 -0
- package/dist/chains/evm/common/types/token.js.map +1 -0
- package/dist/chains/evm/common/utils/chain.d.ts +7 -0
- package/dist/chains/evm/common/utils/chain.js +24 -0
- package/dist/chains/evm/common/utils/chain.js.map +1 -0
- package/dist/chains/evm/common/utils/contract.d.ts +7387 -0
- package/dist/chains/evm/common/utils/contract.js +67 -0
- package/dist/chains/evm/common/utils/contract.js.map +1 -0
- package/dist/chains/evm/common/utils/gmp.d.ts +7 -0
- package/dist/chains/evm/common/utils/gmp.js +32 -0
- package/dist/chains/evm/common/utils/gmp.js.map +1 -0
- package/dist/chains/evm/common/utils/message.d.ts +21 -0
- package/dist/chains/evm/common/utils/message.js +426 -0
- package/dist/chains/evm/common/utils/message.js.map +1 -0
- package/dist/chains/evm/common/utils/provider.d.ts +5 -0
- package/dist/chains/evm/common/utils/provider.js +24 -0
- package/dist/chains/evm/common/utils/provider.js.map +1 -0
- package/dist/chains/evm/common/utils/tokens.d.ts +11 -0
- package/dist/chains/evm/common/utils/tokens.js +58 -0
- package/dist/chains/evm/common/utils/tokens.js.map +1 -0
- package/dist/chains/evm/hub/constants/abi/account-manager-abi.d.ts +945 -0
- package/dist/chains/evm/hub/constants/abi/account-manager-abi.js +709 -0
- package/dist/chains/evm/hub/constants/abi/account-manager-abi.js.map +1 -0
- package/dist/chains/evm/hub/constants/abi/bridge-router-hub-abi.d.ts +1062 -0
- package/dist/chains/evm/hub/constants/abi/bridge-router-hub-abi.js +816 -0
- package/dist/chains/evm/hub/constants/abi/bridge-router-hub-abi.js.map +1 -0
- package/dist/chains/evm/hub/constants/abi/hub-abi.d.ts +344 -0
- package/dist/chains/evm/hub/constants/abi/hub-abi.js +229 -0
- package/dist/chains/evm/hub/constants/abi/hub-abi.js.map +1 -0
- package/dist/chains/evm/hub/constants/abi/hub-pool-abi.d.ts +1999 -0
- package/dist/chains/evm/hub/constants/abi/hub-pool-abi.js +1558 -0
- package/dist/chains/evm/hub/constants/abi/hub-pool-abi.js.map +1 -0
- package/dist/chains/evm/hub/constants/abi/hub-rewards-v1-abi.d.ts +850 -0
- package/dist/chains/evm/hub/constants/abi/hub-rewards-v1-abi.js +649 -0
- package/dist/chains/evm/hub/constants/abi/hub-rewards-v1-abi.js.map +1 -0
- package/dist/chains/evm/hub/constants/abi/hub-rewards-v2-abi.d.ts +1213 -0
- package/dist/chains/evm/hub/constants/abi/hub-rewards-v2-abi.js +890 -0
- package/dist/chains/evm/hub/constants/abi/hub-rewards-v2-abi.js.map +1 -0
- package/dist/chains/evm/hub/constants/abi/loan-manager-abi.d.ts +1573 -0
- package/dist/chains/evm/hub/constants/abi/loan-manager-abi.js +1055 -0
- package/dist/chains/evm/hub/constants/abi/loan-manager-abi.js.map +1 -0
- package/dist/chains/evm/hub/constants/abi/node-manager-abi.d.ts +269 -0
- package/dist/chains/evm/hub/constants/abi/node-manager-abi.js +228 -0
- package/dist/chains/evm/hub/constants/abi/node-manager-abi.js.map +1 -0
- package/dist/chains/evm/hub/constants/abi/oracle-manager-abi.d.ts +495 -0
- package/dist/chains/evm/hub/constants/abi/oracle-manager-abi.js +391 -0
- package/dist/chains/evm/hub/constants/abi/oracle-manager-abi.js.map +1 -0
- package/dist/chains/evm/hub/constants/chain.d.ts +3 -0
- package/dist/chains/evm/hub/constants/chain.js +242 -0
- package/dist/chains/evm/hub/constants/chain.js.map +1 -0
- package/dist/chains/evm/hub/modules/index.d.ts +5 -0
- package/dist/chains/evm/hub/modules/index.js +6 -0
- package/dist/chains/evm/hub/modules/index.js.map +1 -0
- package/dist/chains/evm/hub/modules/ts-hub-account.d.ts +8 -0
- package/dist/chains/evm/hub/modules/ts-hub-account.js +75 -0
- package/dist/chains/evm/hub/modules/ts-hub-account.js.map +1 -0
- package/dist/chains/evm/hub/modules/ts-hub-gmp.d.ts +18 -0
- package/dist/chains/evm/hub/modules/ts-hub-gmp.js +98 -0
- package/dist/chains/evm/hub/modules/ts-hub-gmp.js.map +1 -0
- package/dist/chains/evm/hub/modules/ts-hub-loan.d.ts +27 -0
- package/dist/chains/evm/hub/modules/ts-hub-loan.js +484 -0
- package/dist/chains/evm/hub/modules/ts-hub-loan.js.map +1 -0
- package/dist/chains/evm/hub/modules/ts-hub-oracle.d.ts +8 -0
- package/dist/chains/evm/hub/modules/ts-hub-oracle.js +58 -0
- package/dist/chains/evm/hub/modules/ts-hub-oracle.js.map +1 -0
- package/dist/chains/evm/hub/modules/ts-hub-pool.d.ts +5 -0
- package/dist/chains/evm/hub/modules/ts-hub-pool.js +138 -0
- package/dist/chains/evm/hub/modules/ts-hub-pool.js.map +1 -0
- package/dist/chains/evm/hub/types/account.d.ts +23 -0
- package/dist/chains/evm/hub/types/account.js +2 -0
- package/dist/chains/evm/hub/types/account.js.map +1 -0
- package/dist/chains/evm/hub/types/chain.d.ts +20 -0
- package/dist/chains/evm/hub/types/chain.js +2 -0
- package/dist/chains/evm/hub/types/chain.js.map +1 -0
- package/dist/chains/evm/hub/types/loan.d.ts +148 -0
- package/dist/chains/evm/hub/types/loan.js +9 -0
- package/dist/chains/evm/hub/types/loan.js.map +1 -0
- package/dist/chains/evm/hub/types/oracle.d.ts +19 -0
- package/dist/chains/evm/hub/types/oracle.js +2 -0
- package/dist/chains/evm/hub/types/oracle.js.map +1 -0
- package/dist/chains/evm/hub/types/pool.d.ts +66 -0
- package/dist/chains/evm/hub/types/pool.js +2 -0
- package/dist/chains/evm/hub/types/pool.js.map +1 -0
- package/dist/chains/evm/hub/types/token.d.ts +9 -0
- package/dist/chains/evm/hub/types/token.js +2 -0
- package/dist/chains/evm/hub/types/token.js.map +1 -0
- package/dist/chains/evm/hub/utils/chain.d.ts +15 -0
- package/dist/chains/evm/hub/utils/chain.js +37 -0
- package/dist/chains/evm/hub/utils/chain.js.map +1 -0
- package/dist/chains/evm/hub/utils/contract.d.ts +26 -0
- package/dist/chains/evm/hub/utils/contract.js +76 -0
- package/dist/chains/evm/hub/utils/contract.js.map +1 -0
- package/dist/chains/evm/hub/utils/events.d.ts +23 -0
- package/dist/chains/evm/hub/utils/events.js +100 -0
- package/dist/chains/evm/hub/utils/events.js.map +1 -0
- package/dist/chains/evm/hub/utils/loan.d.ts +4 -0
- package/dist/chains/evm/hub/utils/loan.js +37 -0
- package/dist/chains/evm/hub/utils/loan.js.map +1 -0
- package/dist/chains/evm/spoke/constants/abi/bridge-router-spoke-abi.d.ts +1044 -0
- package/dist/chains/evm/spoke/constants/abi/bridge-router-spoke-abi.js +806 -0
- package/dist/chains/evm/spoke/constants/abi/bridge-router-spoke-abi.js.map +1 -0
- package/dist/chains/evm/spoke/constants/abi/spoke-common-abi.d.ts +1152 -0
- package/dist/chains/evm/spoke/constants/abi/spoke-common-abi.js +735 -0
- package/dist/chains/evm/spoke/constants/abi/spoke-common-abi.js.map +1 -0
- package/dist/chains/evm/spoke/constants/abi/spoke-rewards-v2-common-abi.d.ts +697 -0
- package/dist/chains/evm/spoke/constants/abi/spoke-rewards-v2-common-abi.js +501 -0
- package/dist/chains/evm/spoke/constants/abi/spoke-rewards-v2-common-abi.js.map +1 -0
- package/dist/chains/evm/spoke/constants/abi/spoke-token-abi.d.ts +986 -0
- package/dist/chains/evm/spoke/constants/abi/spoke-token-abi.js +705 -0
- package/dist/chains/evm/spoke/constants/abi/spoke-token-abi.js.map +1 -0
- package/dist/chains/evm/spoke/modules/index.d.ts +3 -0
- package/dist/chains/evm/spoke/modules/index.js +4 -0
- package/dist/chains/evm/spoke/modules/index.js.map +1 -0
- package/dist/chains/evm/spoke/modules/ts-evm-account.d.ts +18 -0
- package/dist/chains/evm/spoke/modules/ts-evm-account.js +141 -0
- package/dist/chains/evm/spoke/modules/ts-evm-account.js.map +1 -0
- package/dist/chains/evm/spoke/modules/ts-evm-gmp.d.ts +20 -0
- package/dist/chains/evm/spoke/modules/ts-evm-gmp.js +163 -0
- package/dist/chains/evm/spoke/modules/ts-evm-gmp.js.map +1 -0
- package/dist/chains/evm/spoke/modules/ts-evm-loan.d.ts +38 -0
- package/dist/chains/evm/spoke/modules/ts-evm-loan.js +461 -0
- package/dist/chains/evm/spoke/modules/ts-evm-loan.js.map +1 -0
- package/dist/chains/evm/spoke/types/pool.d.ts +7 -0
- package/dist/chains/evm/spoke/types/pool.js +2 -0
- package/dist/chains/evm/spoke/types/pool.js.map +1 -0
- package/dist/chains/evm/spoke/utils/contract.d.ts +18 -0
- package/dist/chains/evm/spoke/utils/contract.js +46 -0
- package/dist/chains/evm/spoke/utils/contract.js.map +1 -0
- package/dist/common/constants/adapter.d.ts +2 -0
- package/dist/common/constants/adapter.js +6 -0
- package/dist/common/constants/adapter.js.map +1 -0
- package/dist/common/constants/byte.d.ts +6 -0
- package/dist/common/constants/byte.js +7 -0
- package/dist/common/constants/byte.js.map +1 -0
- package/dist/common/constants/chain.d.ts +10 -0
- package/dist/common/constants/chain.js +224 -0
- package/dist/common/constants/chain.js.map +1 -0
- package/dist/common/constants/gmp.d.ts +3 -0
- package/dist/common/constants/gmp.js +10 -0
- package/dist/common/constants/gmp.js.map +1 -0
- package/dist/common/constants/lending.d.ts +2 -0
- package/dist/common/constants/lending.js +4 -0
- package/dist/common/constants/lending.js.map +1 -0
- package/dist/common/constants/message.d.ts +9 -0
- package/dist/common/constants/message.js +23 -0
- package/dist/common/constants/message.js.map +1 -0
- package/dist/common/constants/pool.d.ts +14 -0
- package/dist/common/constants/pool.js +24 -0
- package/dist/common/constants/pool.js.map +1 -0
- package/dist/common/types/adapter.d.ts +30 -0
- package/dist/common/types/adapter.js +7 -0
- package/dist/common/types/adapter.js.map +1 -0
- package/dist/common/types/address.d.ts +9 -0
- package/dist/common/types/address.js +2 -0
- package/dist/common/types/address.js.map +1 -0
- package/dist/common/types/brand.d.ts +6 -0
- package/dist/common/types/brand.js +2 -0
- package/dist/common/types/brand.js.map +1 -0
- package/dist/common/types/chain.d.ts +29 -0
- package/dist/common/types/chain.js +9 -0
- package/dist/common/types/chain.js.map +1 -0
- package/dist/common/types/core.d.ts +28 -0
- package/dist/common/types/core.js +2 -0
- package/dist/common/types/core.js.map +1 -0
- package/dist/common/types/gmp.d.ts +15 -0
- package/dist/common/types/gmp.js +6 -0
- package/dist/common/types/gmp.js.map +1 -0
- package/dist/common/types/lending.d.ts +20 -0
- package/dist/common/types/lending.js +13 -0
- package/dist/common/types/lending.js.map +1 -0
- package/dist/common/types/message.d.ts +280 -0
- package/dist/common/types/message.js +32 -0
- package/dist/common/types/message.js.map +1 -0
- package/dist/common/types/module.d.ts +20 -0
- package/dist/common/types/module.js +2 -0
- package/dist/common/types/module.js.map +1 -0
- package/dist/common/types/token.d.ts +49 -0
- package/dist/common/types/token.js +24 -0
- package/dist/common/types/token.js.map +1 -0
- package/dist/common/utils/adapter.d.ts +17 -0
- package/dist/common/utils/adapter.js +98 -0
- package/dist/common/utils/adapter.js.map +1 -0
- package/dist/common/utils/address.d.ts +6 -0
- package/dist/common/utils/address.js +32 -0
- package/dist/common/utils/address.js.map +1 -0
- package/dist/common/utils/bytes.d.ts +6 -0
- package/dist/common/utils/bytes.js +25 -0
- package/dist/common/utils/bytes.js.map +1 -0
- package/dist/common/utils/chain.d.ts +20 -0
- package/dist/common/utils/chain.js +79 -0
- package/dist/common/utils/chain.js.map +1 -0
- package/dist/common/utils/formulae.d.ts +19 -0
- package/dist/common/utils/formulae.js +118 -0
- package/dist/common/utils/formulae.js.map +1 -0
- package/dist/common/utils/gmp.d.ts +3 -0
- package/dist/common/utils/gmp.js +5 -0
- package/dist/common/utils/gmp.js.map +1 -0
- package/dist/common/utils/lending.d.ts +7 -0
- package/dist/common/utils/lending.js +16 -0
- package/dist/common/utils/lending.js.map +1 -0
- package/dist/common/utils/math-lib.d.ts +10 -0
- package/dist/common/utils/math-lib.js +41 -0
- package/dist/common/utils/math-lib.js.map +1 -0
- package/dist/common/utils/messages.d.ts +16 -0
- package/dist/common/utils/messages.js +124 -0
- package/dist/common/utils/messages.js.map +1 -0
- package/dist/common/utils/token.d.ts +3 -0
- package/dist/common/utils/token.js +8 -0
- package/dist/common/utils/token.js.map +1 -0
- package/dist/common/utils/transaction.d.ts +4 -0
- package/dist/common/utils/transaction.js +18 -0
- package/dist/common/utils/transaction.js.map +1 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/lifeline/core/ts-core.d.ts +24 -0
- package/dist/lifeline/core/ts-core.js +101 -0
- package/dist/lifeline/core/ts-core.js.map +1 -0
- package/dist/lifeline/modules/index.d.ts +5 -0
- package/dist/lifeline/modules/index.js +6 -0
- package/dist/lifeline/modules/index.js.map +1 -0
- package/dist/lifeline/modules/ts-account.d.ts +23 -0
- package/dist/lifeline/modules/ts-account.js +205 -0
- package/dist/lifeline/modules/ts-account.js.map +1 -0
- package/dist/lifeline/modules/ts-gmp.d.ts +3 -0
- package/dist/lifeline/modules/ts-gmp.js +4 -0
- package/dist/lifeline/modules/ts-gmp.js.map +1 -0
- package/dist/lifeline/modules/ts-loan.d.ts +48 -0
- package/dist/lifeline/modules/ts-loan.js +580 -0
- package/dist/lifeline/modules/ts-loan.js.map +1 -0
- package/dist/lifeline/modules/ts-oracle.d.ts +8 -0
- package/dist/lifeline/modules/ts-oracle.js +27 -0
- package/dist/lifeline/modules/ts-oracle.js.map +1 -0
- package/dist/lifeline/modules/ts-pool.d.ts +5 -0
- package/dist/lifeline/modules/ts-pool.js +8 -0
- package/dist/lifeline/modules/ts-pool.js.map +1 -0
- package/dist/types/generics.d.ts +1 -0
- package/dist/types/generics.js +2 -0
- package/dist/types/generics.js.map +1 -0
- package/dist/utils/address.d.ts +1 -0
- package/dist/utils/address.js +2 -0
- package/dist/utils/address.js.map +1 -0
- package/dist/utils/array.d.ts +3 -0
- package/dist/utils/array.js +7 -0
- package/dist/utils/array.js.map +1 -0
- package/dist/utils/exhaustive-check.d.ts +1 -0
- package/dist/utils/exhaustive-check.js +4 -0
- package/dist/utils/exhaustive-check.js.map +1 -0
- package/dist/utils/random.d.ts +1 -0
- package/dist/utils/random.js +4 -0
- package/dist/utils/random.js.map +1 -0
- package/package.json +56 -0
- package/src/chains/evm/common/constant/abi/arbitrum-node-interface-abi.ts +17 -0
- package/src/chains/evm/common/constant/abi/bridge-router-abi.ts +793 -0
- package/src/chains/evm/common/constant/abi/ccip-data-adapter-abi.ts +621 -0
- package/src/chains/evm/common/constant/abi/erc-20-abi.ts +156 -0
- package/src/chains/evm/common/constant/abi/wormhole-data-adapter-abi.ts +644 -0
- package/src/chains/evm/common/constant/abi/wormhole-relayer-abi.ts +500 -0
- package/src/chains/evm/common/constant/chain.ts +88 -0
- package/src/chains/evm/common/constant/contract.ts +15 -0
- package/src/chains/evm/common/constant/tokens.ts +33 -0
- package/src/chains/evm/common/types/chain.ts +26 -0
- package/src/chains/evm/common/types/contract.ts +17 -0
- package/src/chains/evm/common/types/gmp.ts +43 -0
- package/src/chains/evm/common/types/module.ts +115 -0
- package/src/chains/evm/common/types/token.ts +35 -0
- package/src/chains/evm/common/utils/chain.ts +33 -0
- package/src/chains/evm/common/utils/contract.ts +120 -0
- package/src/chains/evm/common/utils/gmp.ts +54 -0
- package/src/chains/evm/common/utils/message.ts +648 -0
- package/src/chains/evm/common/utils/provider.ts +38 -0
- package/src/chains/evm/common/utils/tokens.ts +102 -0
- package/src/chains/evm/hub/constants/abi/account-manager-abi.ts +708 -0
- package/src/chains/evm/hub/constants/abi/bridge-router-hub-abi.ts +815 -0
- package/src/chains/evm/hub/constants/abi/hub-abi.ts +228 -0
- package/src/chains/evm/hub/constants/abi/hub-pool-abi.ts +1557 -0
- package/src/chains/evm/hub/constants/abi/hub-rewards-v1-abi.ts +648 -0
- package/src/chains/evm/hub/constants/abi/hub-rewards-v2-abi.ts +889 -0
- package/src/chains/evm/hub/constants/abi/loan-manager-abi.ts +1054 -0
- package/src/chains/evm/hub/constants/abi/node-manager-abi.ts +227 -0
- package/src/chains/evm/hub/constants/abi/oracle-manager-abi.ts +390 -0
- package/src/chains/evm/hub/constants/chain.ts +305 -0
- package/src/chains/evm/hub/modules/index.ts +5 -0
- package/src/chains/evm/hub/modules/ts-hub-account.ts +117 -0
- package/src/chains/evm/hub/modules/ts-hub-gmp.ts +231 -0
- package/src/chains/evm/hub/modules/ts-hub-loan.ts +915 -0
- package/src/chains/evm/hub/modules/ts-hub-oracle.ts +131 -0
- package/src/chains/evm/hub/modules/ts-hub-pool.ts +241 -0
- package/src/chains/evm/hub/types/account.ts +30 -0
- package/src/chains/evm/hub/types/chain.ts +22 -0
- package/src/chains/evm/hub/types/loan.ts +188 -0
- package/src/chains/evm/hub/types/oracle.ts +25 -0
- package/src/chains/evm/hub/types/pool.ts +75 -0
- package/src/chains/evm/hub/types/token.ts +10 -0
- package/src/chains/evm/hub/utils/chain.ts +78 -0
- package/src/chains/evm/hub/utils/contract.ts +178 -0
- package/src/chains/evm/hub/utils/events.ts +160 -0
- package/src/chains/evm/hub/utils/loan.ts +72 -0
- package/src/chains/evm/spoke/constants/abi/bridge-router-spoke-abi.ts +805 -0
- package/src/chains/evm/spoke/constants/abi/spoke-common-abi.ts +734 -0
- package/src/chains/evm/spoke/constants/abi/spoke-rewards-v2-common-abi.ts +500 -0
- package/src/chains/evm/spoke/constants/abi/spoke-token-abi.ts +704 -0
- package/src/chains/evm/spoke/modules/index.ts +3 -0
- package/src/chains/evm/spoke/modules/ts-evm-account.ts +341 -0
- package/src/chains/evm/spoke/modules/ts-evm-gmp.ts +353 -0
- package/src/chains/evm/spoke/modules/ts-evm-loan.ts +1032 -0
- package/src/chains/evm/spoke/types/pool.ts +7 -0
- package/src/chains/evm/spoke/utils/contract.ts +123 -0
- package/src/common/constants/adapter.ts +6 -0
- package/src/common/constants/byte.ts +7 -0
- package/src/common/constants/chain.ts +319 -0
- package/src/common/constants/gmp.ts +19 -0
- package/src/common/constants/lending.ts +9 -0
- package/src/common/constants/message.ts +25 -0
- package/src/common/constants/pool.ts +30 -0
- package/src/common/types/adapter.ts +44 -0
- package/src/common/types/address.ts +11 -0
- package/src/common/types/brand.ts +3 -0
- package/src/common/types/chain.ts +42 -0
- package/src/common/types/core.ts +31 -0
- package/src/common/types/gmp.ts +19 -0
- package/src/common/types/lending.ts +26 -0
- package/src/common/types/message.ts +401 -0
- package/src/common/types/module.ts +46 -0
- package/src/common/types/token.ts +72 -0
- package/src/common/utils/adapter.ts +197 -0
- package/src/common/utils/address.ts +50 -0
- package/src/common/utils/bytes.ts +36 -0
- package/src/common/utils/chain.ts +163 -0
- package/src/common/utils/formulae.ts +270 -0
- package/src/common/utils/gmp.ts +8 -0
- package/src/common/utils/lending.ts +31 -0
- package/src/common/utils/math-lib.ts +50 -0
- package/src/common/utils/messages.ts +283 -0
- package/src/common/utils/token.ts +13 -0
- package/src/common/utils/transaction.ts +27 -0
- package/src/index.ts +73 -0
- package/src/lifeline/core/ts-core.ts +136 -0
- package/src/lifeline/modules/index.ts +5 -0
- package/src/lifeline/modules/ts-account.ts +420 -0
- package/src/lifeline/modules/ts-gmp.ts +5 -0
- package/src/lifeline/modules/ts-loan.ts +1268 -0
- package/src/lifeline/modules/ts-oracle.ts +68 -0
- package/src/lifeline/modules/ts-pool.ts +19 -0
- package/src/types/generics.ts +1 -0
- package/src/utils/address.ts +0 -0
- package/src/utils/array.ts +11 -0
- package/src/utils/exhaustive-check.ts +3 -0
- package/src/utils/random.ts +3 -0
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getHubTokenData,
|
|
3
|
+
isHubChain,
|
|
4
|
+
} from '../../chains/evm/hub/utils/chain.js';
|
|
5
|
+
import { ensureNonEmpty, intersect } from '../../utils/array.js';
|
|
6
|
+
import { exhaustiveCheck } from '../../utils/exhaustive-check.js';
|
|
7
|
+
import { TSCore } from '../../lifeline/core/ts-core.js';
|
|
8
|
+
import { DATA_ADAPTERS } from '../constants/adapter.js';
|
|
9
|
+
import { MessageAdapterParamsType } from '../types/adapter.js';
|
|
10
|
+
import { AdapterType } from '../types/message.js';
|
|
11
|
+
import { TokenType } from '../types/token.js';
|
|
12
|
+
|
|
13
|
+
import { getSpokeChain } from './chain.js';
|
|
14
|
+
|
|
15
|
+
import type { NonEmptyArray } from '../../types/generics.js';
|
|
16
|
+
import type {
|
|
17
|
+
MessageAdapterParams,
|
|
18
|
+
ReceiveTokenMessageAdapterParams,
|
|
19
|
+
} from '../types/adapter.js';
|
|
20
|
+
import type { TSChainId, NetworkType } from '../types/chain.js';
|
|
21
|
+
import type { SupportedMessageAdaptersMap } from '../types/message.js';
|
|
22
|
+
import type { CrossChainTokenType, TSTokenId } from '../types/token.js';
|
|
23
|
+
|
|
24
|
+
export function getSpokeAdapterIds(
|
|
25
|
+
tsChainId: TSChainId,
|
|
26
|
+
network: NetworkType
|
|
27
|
+
): NonEmptyArray<AdapterType> {
|
|
28
|
+
const spokeChain = getSpokeChain(tsChainId, network);
|
|
29
|
+
const { adapters } = spokeChain;
|
|
30
|
+
const adapterIds = Object.keys(adapters).map<AdapterType>(Number);
|
|
31
|
+
return ensureNonEmpty(adapterIds, `No adapters found for chain ${tsChainId}`);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function doesAdapterSupportDataMessage(
|
|
35
|
+
tsChainId: TSChainId,
|
|
36
|
+
adapterId: AdapterType
|
|
37
|
+
): boolean {
|
|
38
|
+
const isHub = isHubChain(tsChainId, TSCore.getSelectedNetwork());
|
|
39
|
+
return (
|
|
40
|
+
(isHub && adapterId === AdapterType.HUB) ||
|
|
41
|
+
(!isHub && adapterId === AdapterType.WORMHOLE_DATA)
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function assertAdapterSupportsDataMessage(
|
|
46
|
+
tsChainId: TSChainId,
|
|
47
|
+
adapterId: AdapterType
|
|
48
|
+
): void {
|
|
49
|
+
if (!doesAdapterSupportDataMessage(tsChainId, adapterId))
|
|
50
|
+
throw Error(
|
|
51
|
+
`Adapter ${adapterId} does not support data message for tsChainId: ${tsChainId}`
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function doesAdapterSupportTokenMessage(
|
|
56
|
+
tsChainId: TSChainId,
|
|
57
|
+
adapterId: AdapterType
|
|
58
|
+
): boolean {
|
|
59
|
+
const isHub = isHubChain(tsChainId, TSCore.getSelectedNetwork());
|
|
60
|
+
return (
|
|
61
|
+
(isHub && adapterId === AdapterType.HUB) ||
|
|
62
|
+
(!isHub && adapterId === AdapterType.WORMHOLE_DATA)
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function assertAdapterSupportsTokenMessage(
|
|
67
|
+
tsChainId: TSChainId,
|
|
68
|
+
adapterId: AdapterType
|
|
69
|
+
): void {
|
|
70
|
+
if (!doesAdapterSupportTokenMessage(tsChainId, adapterId))
|
|
71
|
+
throw Error(
|
|
72
|
+
`Adapter ${adapterId} does not support token message for tsChainId: ${tsChainId}`
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export function doesAdapterSupportCrossChainToken(
|
|
77
|
+
crossChainToken: CrossChainTokenType,
|
|
78
|
+
tsChainId: TSChainId,
|
|
79
|
+
adapterId: AdapterType
|
|
80
|
+
): boolean {
|
|
81
|
+
const isHub = isHubChain(tsChainId, TSCore.getSelectedNetwork());
|
|
82
|
+
return (
|
|
83
|
+
(isHub && adapterId === AdapterType.HUB) ||
|
|
84
|
+
(!isHub && crossChainToken.adapters.includes(adapterId))
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export function assertCrossChainTokenSupportedByAdapter(
|
|
89
|
+
crossChainToken: CrossChainTokenType,
|
|
90
|
+
tsChainId: TSChainId,
|
|
91
|
+
adapterId: AdapterType
|
|
92
|
+
): void {
|
|
93
|
+
if (!doesAdapterSupportCrossChainToken(crossChainToken, tsChainId, adapterId))
|
|
94
|
+
throw Error(
|
|
95
|
+
`Adapter ${adapterId} does not support cross chain token: ${crossChainToken.address}`
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export function assertAdapterSupportsCrossChainToken(
|
|
100
|
+
tsChainId: TSChainId,
|
|
101
|
+
crossChainToken: CrossChainTokenType,
|
|
102
|
+
adapterId: AdapterType
|
|
103
|
+
): void {
|
|
104
|
+
assertAdapterSupportsTokenMessage(tsChainId, adapterId);
|
|
105
|
+
assertCrossChainTokenSupportedByAdapter(
|
|
106
|
+
crossChainToken,
|
|
107
|
+
tsChainId,
|
|
108
|
+
adapterId
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export function doesAdapterSupportReceiverValue(
|
|
113
|
+
tsChainId: TSChainId,
|
|
114
|
+
adapterId: AdapterType
|
|
115
|
+
): boolean {
|
|
116
|
+
const isHub = isHubChain(tsChainId, TSCore.getSelectedNetwork());
|
|
117
|
+
return (
|
|
118
|
+
(isHub && adapterId === AdapterType.HUB) ||
|
|
119
|
+
(!isHub && adapterId === AdapterType.WORMHOLE_DATA)
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export function assertAdapterSupportsReceiverValue(
|
|
124
|
+
tsChainId: TSChainId,
|
|
125
|
+
adapterId: AdapterType
|
|
126
|
+
): void {
|
|
127
|
+
if (!doesAdapterSupportReceiverValue(tsChainId, adapterId))
|
|
128
|
+
throw Error(
|
|
129
|
+
`Adapter ${adapterId} does not support receiver value for tsChainId: ${tsChainId}`
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
function getSendTokenAdapterIds(tsTokenId: TSTokenId, network: NetworkType) {
|
|
134
|
+
const hubTokenData = getHubTokenData(tsTokenId, network);
|
|
135
|
+
if (hubTokenData.token.type == TokenType.CROSS_CHAIN)
|
|
136
|
+
return hubTokenData.token.adapters;
|
|
137
|
+
return DATA_ADAPTERS;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function getMessageAdapterIds(messageAdapterParams: MessageAdapterParams) {
|
|
141
|
+
const { network, messageAdapterParamType } = messageAdapterParams;
|
|
142
|
+
if (messageAdapterParamType === MessageAdapterParamsType.SendToken)
|
|
143
|
+
return getSendTokenAdapterIds(messageAdapterParams.tsTokenId, network);
|
|
144
|
+
return DATA_ADAPTERS;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function getReturnMessageAdapterIds({
|
|
148
|
+
tsTokenId,
|
|
149
|
+
network,
|
|
150
|
+
}: ReceiveTokenMessageAdapterParams) {
|
|
151
|
+
return getSendTokenAdapterIds(tsTokenId, network);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export function getSupportedMessageAdapters<T extends MessageAdapterParams>(
|
|
155
|
+
params: T
|
|
156
|
+
): SupportedMessageAdaptersMap[T['messageAdapterParamType']] {
|
|
157
|
+
const { messageAdapterParamType, sourceTsChainId, network } = params;
|
|
158
|
+
const spokeAdapterIds = getSpokeAdapterIds(sourceTsChainId, network);
|
|
159
|
+
const supportedAdapterIds = ensureNonEmpty(
|
|
160
|
+
getMessageAdapterIds(params).filter(intersect(spokeAdapterIds)),
|
|
161
|
+
`No supported adapters found for chain ${sourceTsChainId}`
|
|
162
|
+
);
|
|
163
|
+
|
|
164
|
+
switch (messageAdapterParamType) {
|
|
165
|
+
case MessageAdapterParamsType.SendToken:
|
|
166
|
+
return {
|
|
167
|
+
adapterIds: supportedAdapterIds,
|
|
168
|
+
returnAdapterIds: supportedAdapterIds,
|
|
169
|
+
} as SupportedMessageAdaptersMap[T['messageAdapterParamType']];
|
|
170
|
+
|
|
171
|
+
case MessageAdapterParamsType.ReceiveToken: {
|
|
172
|
+
const destSpokeAdapterIds = getSpokeAdapterIds(
|
|
173
|
+
params.destTsChainId,
|
|
174
|
+
network
|
|
175
|
+
);
|
|
176
|
+
const supportedReturnAdapterIds = ensureNonEmpty(
|
|
177
|
+
getReturnMessageAdapterIds(params).filter(
|
|
178
|
+
intersect(destSpokeAdapterIds)
|
|
179
|
+
),
|
|
180
|
+
`No supported return adapters found for chain ${params.destTsChainId}`
|
|
181
|
+
);
|
|
182
|
+
return {
|
|
183
|
+
adapterIds: supportedAdapterIds,
|
|
184
|
+
returnAdapterIds: supportedReturnAdapterIds,
|
|
185
|
+
} as SupportedMessageAdaptersMap[T['messageAdapterParamType']];
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
case MessageAdapterParamsType.Data:
|
|
189
|
+
return {
|
|
190
|
+
adapterIds: supportedAdapterIds,
|
|
191
|
+
returnAdapterIds: [AdapterType.HUB],
|
|
192
|
+
} as SupportedMessageAdaptersMap[T['messageAdapterParamType']];
|
|
193
|
+
|
|
194
|
+
default:
|
|
195
|
+
return exhaustiveCheck(messageAdapterParamType);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { getAddress, pad, sliceHex } from 'viem';
|
|
2
|
+
import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts';
|
|
3
|
+
|
|
4
|
+
import { exhaustiveCheck } from '../../utils/exhaustive-check.js';
|
|
5
|
+
import { BYTES32_LENGTH, EVM_ADDRESS_BYTES_LENGTH } from '../constants/byte.js';
|
|
6
|
+
import { ChainType } from '../types/chain.js';
|
|
7
|
+
|
|
8
|
+
import type {
|
|
9
|
+
AddressType,
|
|
10
|
+
EvmAddress,
|
|
11
|
+
GenericAddress,
|
|
12
|
+
} from '../types/address.js';
|
|
13
|
+
|
|
14
|
+
export function getRandomGenericAddress(): GenericAddress {
|
|
15
|
+
return pad(privateKeyToAccount(generatePrivateKey()).address, {
|
|
16
|
+
size: BYTES32_LENGTH,
|
|
17
|
+
}).toLowerCase() as GenericAddress;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function isGenericAddress(address: GenericAddress): boolean {
|
|
21
|
+
return address.length === 64 + 2;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function convertToGenericAddress<T extends ChainType>(
|
|
25
|
+
address: AddressType<T>,
|
|
26
|
+
fromChainType: ChainType
|
|
27
|
+
): GenericAddress {
|
|
28
|
+
switch (fromChainType) {
|
|
29
|
+
case ChainType.EVM:
|
|
30
|
+
return pad(address as EvmAddress, {
|
|
31
|
+
size: BYTES32_LENGTH,
|
|
32
|
+
}).toLowerCase() as GenericAddress;
|
|
33
|
+
default:
|
|
34
|
+
return exhaustiveCheck(fromChainType);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function convertFromGenericAddress<T extends ChainType>(
|
|
39
|
+
address: GenericAddress,
|
|
40
|
+
toChainType: ChainType
|
|
41
|
+
): AddressType<T> {
|
|
42
|
+
switch (toChainType) {
|
|
43
|
+
case ChainType.EVM:
|
|
44
|
+
return getAddress(
|
|
45
|
+
sliceHex(address, BYTES32_LENGTH - EVM_ADDRESS_BYTES_LENGTH)
|
|
46
|
+
) as EvmAddress;
|
|
47
|
+
default:
|
|
48
|
+
return exhaustiveCheck(toChainType);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { bytesToHex, pad, toHex } from 'viem';
|
|
2
|
+
|
|
3
|
+
import type { Hex } from 'viem';
|
|
4
|
+
|
|
5
|
+
export function getEmptyBytes(length: number): string {
|
|
6
|
+
return pad('0x', { size: length });
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function convertNumberToBytes(
|
|
10
|
+
num: number | bigint,
|
|
11
|
+
length: number
|
|
12
|
+
): Hex {
|
|
13
|
+
// insert 0s at the beginning if data is smaller than length bytes
|
|
14
|
+
const buf = Buffer.alloc(length, 0);
|
|
15
|
+
|
|
16
|
+
// convert num to bytes
|
|
17
|
+
const hex = num.toString(16);
|
|
18
|
+
const isEven = hex.length % 2 === 0;
|
|
19
|
+
const bytes = Buffer.from(isEven ? hex : '0' + hex, 'hex');
|
|
20
|
+
|
|
21
|
+
// write bytes to fixed length buf
|
|
22
|
+
bytes.copy(buf, buf.length - bytes.length);
|
|
23
|
+
return toHex(buf);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function convertStringToBytes(str: string): Hex {
|
|
27
|
+
return toHex('0x' + Buffer.from(str).toString('hex'));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function convertBooleanToByte(bool: boolean): Hex {
|
|
31
|
+
return bool ? '0x01' : '0x00';
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function getRandomBytes(length: number): Hex {
|
|
35
|
+
return bytesToHex(crypto.getRandomValues(new Uint8Array(length)));
|
|
36
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { getEvmSignerAddress } from '../../chains/evm/common/utils/chain.js';
|
|
2
|
+
import {
|
|
3
|
+
getHubChainAdapterAddress,
|
|
4
|
+
isHubChain,
|
|
5
|
+
} from '../../chains/evm/hub/utils/chain.js';
|
|
6
|
+
import { exhaustiveCheck } from '../../utils/exhaustive-check.js';
|
|
7
|
+
import { TS_CHAIN, SPOKE_CHAIN } from '../constants/chain.js';
|
|
8
|
+
import { ChainType } from '../types/chain.js';
|
|
9
|
+
|
|
10
|
+
import { convertToGenericAddress } from './address.js';
|
|
11
|
+
|
|
12
|
+
import type { GenericAddress } from '../types/address.js';
|
|
13
|
+
import type {
|
|
14
|
+
TSChain,
|
|
15
|
+
TSChainId,
|
|
16
|
+
NetworkType,
|
|
17
|
+
SpokeChain,
|
|
18
|
+
} from '../types/chain.js';
|
|
19
|
+
import type { TSChainSigner } from '../types/core.js';
|
|
20
|
+
import type { AdapterType } from '../types/message.js';
|
|
21
|
+
|
|
22
|
+
import type { TSTokenId, SpokeTokenData } from '../types/token.js';
|
|
23
|
+
|
|
24
|
+
export function getTsChain(
|
|
25
|
+
tsChainId: TSChainId,
|
|
26
|
+
network: NetworkType
|
|
27
|
+
): TSChain {
|
|
28
|
+
const tsChain = TS_CHAIN[network][tsChainId];
|
|
29
|
+
if (!tsChain)
|
|
30
|
+
throw new Error(`Townsq Chain not found for tsChainId: ${tsChainId}`);
|
|
31
|
+
|
|
32
|
+
return tsChain;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function getTsChainsByNetwork(network: NetworkType): Array<TSChain> {
|
|
36
|
+
return Object.values(TS_CHAIN[network]);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function getTsChainIdsByNetwork(
|
|
40
|
+
networkType: NetworkType
|
|
41
|
+
): Array<TSChainId> {
|
|
42
|
+
return getTsChainsByNetwork(networkType).map(
|
|
43
|
+
(tsChain) => tsChain.tsChainId
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function isSpokeChainSupported(
|
|
48
|
+
tsChainId: TSChainId,
|
|
49
|
+
network: NetworkType
|
|
50
|
+
): boolean {
|
|
51
|
+
return SPOKE_CHAIN[network][tsChainId] !== undefined;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export function assertSpokeChainSupported(
|
|
55
|
+
tsChainId: TSChainId,
|
|
56
|
+
network: NetworkType
|
|
57
|
+
) {
|
|
58
|
+
if (!isSpokeChainSupported(tsChainId, network))
|
|
59
|
+
throw new Error(`Spoke chain is not supported for tsChainId: ${tsChainId}`);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function getSpokeChain(
|
|
63
|
+
tsChainId: TSChainId,
|
|
64
|
+
network: NetworkType
|
|
65
|
+
): SpokeChain {
|
|
66
|
+
const spokeChain = SPOKE_CHAIN[network][tsChainId];
|
|
67
|
+
if (!spokeChain)
|
|
68
|
+
throw new Error(`Spoke chain not found for tsChainId: ${tsChainId}`);
|
|
69
|
+
|
|
70
|
+
return spokeChain;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export function doesSpokeSupportTsToken(
|
|
74
|
+
spokeChain: SpokeChain,
|
|
75
|
+
tsTokenId: TSTokenId
|
|
76
|
+
): boolean {
|
|
77
|
+
return spokeChain.tokens[tsTokenId] !== undefined;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export function getSpokeTokenData(
|
|
81
|
+
spokeChain: SpokeChain,
|
|
82
|
+
tsTokenId: TSTokenId
|
|
83
|
+
): SpokeTokenData {
|
|
84
|
+
const tokenData = spokeChain.tokens[tsTokenId];
|
|
85
|
+
if (!tokenData)
|
|
86
|
+
throw new Error(`Spoke Token not found for tsTokenId: ${tsTokenId}`);
|
|
87
|
+
|
|
88
|
+
return tokenData;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export function isTsTokenSupported(
|
|
92
|
+
tsTokenId: TSTokenId,
|
|
93
|
+
tsChainId: TSChainId,
|
|
94
|
+
network: NetworkType
|
|
95
|
+
): boolean {
|
|
96
|
+
const spokeChain = getSpokeChain(tsChainId, network);
|
|
97
|
+
return doesSpokeSupportTsToken(spokeChain, tsTokenId);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export function assertSpokeChainSupportTsToken(
|
|
101
|
+
tsChainId: TSChainId,
|
|
102
|
+
tsTokenId: TSTokenId,
|
|
103
|
+
network: NetworkType
|
|
104
|
+
) {
|
|
105
|
+
if (!isTsTokenSupported(tsTokenId, tsChainId, network))
|
|
106
|
+
throw new Error(
|
|
107
|
+
`Townsq Token ${tsTokenId} is not supported on Townsq Chain ${tsChainId}`
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export function getSpokeChainAdapterAddress(
|
|
112
|
+
tsChainId: TSChainId,
|
|
113
|
+
network: NetworkType,
|
|
114
|
+
adapterType: AdapterType
|
|
115
|
+
): GenericAddress {
|
|
116
|
+
const spokeChain = getSpokeChain(tsChainId, network);
|
|
117
|
+
const { adapters } = spokeChain;
|
|
118
|
+
const adapterAddress = adapters[adapterType];
|
|
119
|
+
if (adapterAddress) return adapterAddress;
|
|
120
|
+
throw new Error(
|
|
121
|
+
`Adapter ${adapterType} not found for spoke chain ${tsChainId}`
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export function getAdapterAddress(
|
|
126
|
+
tsChainId: TSChainId,
|
|
127
|
+
network: NetworkType,
|
|
128
|
+
adapterType: AdapterType
|
|
129
|
+
) {
|
|
130
|
+
if (isHubChain(tsChainId, network))
|
|
131
|
+
return getHubChainAdapterAddress(network, adapterType);
|
|
132
|
+
return getSpokeChainAdapterAddress(tsChainId, network, adapterType);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export function getSpokeChainBridgeRouterAddress(spokeChain: SpokeChain) {
|
|
136
|
+
const { messageDispatcherAddress } = spokeChain;
|
|
137
|
+
return messageDispatcherAddress;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export function getSignerGenericAddress(
|
|
141
|
+
tsChainSigner: TSChainSigner
|
|
142
|
+
): GenericAddress {
|
|
143
|
+
const chainType = tsChainSigner.chainType;
|
|
144
|
+
switch (chainType) {
|
|
145
|
+
case ChainType.EVM:
|
|
146
|
+
return convertToGenericAddress(
|
|
147
|
+
getEvmSignerAddress(tsChainSigner.signer),
|
|
148
|
+
chainType
|
|
149
|
+
);
|
|
150
|
+
default:
|
|
151
|
+
return exhaustiveCheck(chainType);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export function assertHubChainSelected(
|
|
156
|
+
tsChainId: TSChainId,
|
|
157
|
+
network: NetworkType
|
|
158
|
+
) {
|
|
159
|
+
if (!isHubChain(tsChainId, network))
|
|
160
|
+
throw new Error(
|
|
161
|
+
`Wrong chain selected: ${tsChainId}. Expected Hub chain`
|
|
162
|
+
);
|
|
163
|
+
}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import * as dn from 'dnum';
|
|
2
|
+
|
|
3
|
+
import { SECONDS_IN_YEAR, expBySquaring, unixTime } from './math-lib.js';
|
|
4
|
+
|
|
5
|
+
import type { Dnum } from 'dnum';
|
|
6
|
+
|
|
7
|
+
export function calcPeriodNumber(offset: bigint, length: bigint): bigint {
|
|
8
|
+
return (BigInt(unixTime()) + offset) / length;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function calcNextPeriodReset(
|
|
12
|
+
periodNumber: bigint,
|
|
13
|
+
offset: bigint,
|
|
14
|
+
length: bigint
|
|
15
|
+
): bigint {
|
|
16
|
+
return (periodNumber + BigInt(1)) * length - offset;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function calcOverallBorrowInterestRate(
|
|
20
|
+
totalVarDebt: bigint,
|
|
21
|
+
totalStableDebt: bigint,
|
|
22
|
+
variableBorInterestRate: Dnum,
|
|
23
|
+
avgStableBorInterestRate: Dnum
|
|
24
|
+
): Dnum {
|
|
25
|
+
const totalDebt = totalVarDebt + totalStableDebt;
|
|
26
|
+
if (totalDebt === 0n) return dn.from(0, 18);
|
|
27
|
+
|
|
28
|
+
return dn.div(
|
|
29
|
+
dn.add(
|
|
30
|
+
dn.mul(totalVarDebt, variableBorInterestRate, {
|
|
31
|
+
rounding: 'ROUND_DOWN',
|
|
32
|
+
decimals: 0,
|
|
33
|
+
}),
|
|
34
|
+
dn.mul(totalStableDebt, avgStableBorInterestRate, {
|
|
35
|
+
rounding: 'ROUND_DOWN',
|
|
36
|
+
decimals: 0,
|
|
37
|
+
})
|
|
38
|
+
),
|
|
39
|
+
totalDebt,
|
|
40
|
+
{ rounding: 'ROUND_DOWN', decimals: 18 }
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function calcDepositInterestIndex(
|
|
45
|
+
dirt1: Dnum,
|
|
46
|
+
diit1: Dnum,
|
|
47
|
+
latestUpdate: bigint,
|
|
48
|
+
lastTimestamp = BigInt(unixTime())
|
|
49
|
+
): Dnum {
|
|
50
|
+
const dt = lastTimestamp - latestUpdate;
|
|
51
|
+
return dn.mul(
|
|
52
|
+
diit1,
|
|
53
|
+
dn.add(
|
|
54
|
+
dn.from(1, 18),
|
|
55
|
+
dn.div(dn.mul(dirt1, dt, { rounding: 'ROUND_DOWN' }), SECONDS_IN_YEAR, {
|
|
56
|
+
rounding: 'ROUND_DOWN',
|
|
57
|
+
})
|
|
58
|
+
),
|
|
59
|
+
{ rounding: 'ROUND_DOWN' }
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export function calcBorrowInterestIndex(
|
|
64
|
+
birt1: Dnum,
|
|
65
|
+
biit1: Dnum,
|
|
66
|
+
latestUpdate: bigint,
|
|
67
|
+
lastTimestamp = BigInt(unixTime())
|
|
68
|
+
): Dnum {
|
|
69
|
+
const dt = lastTimestamp - latestUpdate;
|
|
70
|
+
return dn.mul(
|
|
71
|
+
biit1,
|
|
72
|
+
expBySquaring(
|
|
73
|
+
dn.add(
|
|
74
|
+
dn.from(1, 18),
|
|
75
|
+
dn.div(birt1, SECONDS_IN_YEAR, { rounding: 'ROUND_DOWN' })
|
|
76
|
+
),
|
|
77
|
+
dt
|
|
78
|
+
),
|
|
79
|
+
{ rounding: 'ROUND_DOWN' }
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export function calcRetention(
|
|
84
|
+
actualRetained: bigint,
|
|
85
|
+
totalDebt: bigint,
|
|
86
|
+
overallBorrowInterestRate: Dnum,
|
|
87
|
+
retentionRate: Dnum,
|
|
88
|
+
latestUpdate: bigint,
|
|
89
|
+
lastTimestamp = BigInt(unixTime())
|
|
90
|
+
): bigint {
|
|
91
|
+
const dt = lastTimestamp - latestUpdate;
|
|
92
|
+
|
|
93
|
+
const [retainedDelta] = dn.div(
|
|
94
|
+
dn.mul(
|
|
95
|
+
dn.mul(
|
|
96
|
+
dn.mul(totalDebt, overallBorrowInterestRate, {
|
|
97
|
+
rounding: 'ROUND_DOWN',
|
|
98
|
+
decimals: 0,
|
|
99
|
+
}),
|
|
100
|
+
retentionRate,
|
|
101
|
+
{
|
|
102
|
+
rounding: 'ROUND_DOWN',
|
|
103
|
+
decimals: 0,
|
|
104
|
+
}
|
|
105
|
+
),
|
|
106
|
+
dt,
|
|
107
|
+
{ rounding: 'ROUND_DOWN' }
|
|
108
|
+
),
|
|
109
|
+
SECONDS_IN_YEAR,
|
|
110
|
+
{
|
|
111
|
+
rounding: 'ROUND_DOWN',
|
|
112
|
+
}
|
|
113
|
+
);
|
|
114
|
+
return actualRetained + retainedDelta;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export function calcRewardIndex(
|
|
118
|
+
used: bigint,
|
|
119
|
+
ma: bigint,
|
|
120
|
+
rit1: Dnum,
|
|
121
|
+
rs: Dnum,
|
|
122
|
+
latestUpdate: bigint
|
|
123
|
+
): Dnum {
|
|
124
|
+
if (used <= ma) return rit1;
|
|
125
|
+
const dt = BigInt(unixTime()) - latestUpdate;
|
|
126
|
+
return dn.add(
|
|
127
|
+
rit1,
|
|
128
|
+
dn.div(dn.mul(rs, dt, { rounding: 'ROUND_DOWN' }), used, {
|
|
129
|
+
rounding: 'ROUND_DOWN',
|
|
130
|
+
})
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export function calcAccruedRewards(
|
|
135
|
+
amount: bigint,
|
|
136
|
+
rit: Dnum,
|
|
137
|
+
ritn1: Dnum
|
|
138
|
+
): bigint {
|
|
139
|
+
const [accruedRewards] = dn.mul([amount, 0], dn.sub(rit, ritn1), {
|
|
140
|
+
rounding: 'ROUND_DOWN',
|
|
141
|
+
});
|
|
142
|
+
return accruedRewards;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export function toFAmount(underlyingAmount: bigint, diit: Dnum): bigint {
|
|
146
|
+
const [fAmount] = dn.div([underlyingAmount, 0], diit, {
|
|
147
|
+
rounding: 'ROUND_DOWN',
|
|
148
|
+
});
|
|
149
|
+
return fAmount;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export function toUnderlyingAmount(fAmount: bigint, diit: Dnum): bigint {
|
|
153
|
+
const [underlyingAmount] = dn.mul([fAmount, 0], diit, {
|
|
154
|
+
rounding: 'ROUND_DOWN',
|
|
155
|
+
});
|
|
156
|
+
return underlyingAmount;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export function calcAssetDollarValue(
|
|
160
|
+
amount: bigint,
|
|
161
|
+
tokenPrice: Dnum,
|
|
162
|
+
tokenDecimals: number
|
|
163
|
+
): Dnum {
|
|
164
|
+
return dn.mul(tokenPrice, [amount, tokenDecimals], {
|
|
165
|
+
rounding: 'ROUND_DOWN',
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export function calcCollateralAssetLoanValue(
|
|
170
|
+
amount: bigint,
|
|
171
|
+
tokenPrice: Dnum,
|
|
172
|
+
tokenDecimals: number,
|
|
173
|
+
collateralFactor: Dnum
|
|
174
|
+
): Dnum {
|
|
175
|
+
return dn.mul(
|
|
176
|
+
calcAssetDollarValue(amount, tokenPrice, tokenDecimals),
|
|
177
|
+
collateralFactor,
|
|
178
|
+
{
|
|
179
|
+
rounding: 'ROUND_DOWN',
|
|
180
|
+
decimals: 8,
|
|
181
|
+
}
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
export function calcBorrowAssetLoanValue(
|
|
186
|
+
amount: bigint,
|
|
187
|
+
tokenPrice: Dnum,
|
|
188
|
+
tokenDecimals: number,
|
|
189
|
+
borrowFactor: Dnum
|
|
190
|
+
): Dnum {
|
|
191
|
+
return dn.mul(
|
|
192
|
+
calcAssetDollarValue(amount, tokenPrice, tokenDecimals),
|
|
193
|
+
borrowFactor,
|
|
194
|
+
{
|
|
195
|
+
rounding: 'ROUND_UP',
|
|
196
|
+
decimals: 8,
|
|
197
|
+
}
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
export function calcBorrowBalance(
|
|
202
|
+
bbtn1: bigint,
|
|
203
|
+
biit: Dnum,
|
|
204
|
+
biitn1: Dnum
|
|
205
|
+
): bigint {
|
|
206
|
+
const [borrowBalance] = dn.mul(
|
|
207
|
+
[bbtn1, 0],
|
|
208
|
+
dn.div(biit, biitn1, { rounding: 'ROUND_UP' }),
|
|
209
|
+
{
|
|
210
|
+
rounding: 'ROUND_UP',
|
|
211
|
+
}
|
|
212
|
+
);
|
|
213
|
+
return borrowBalance;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
export function calcStableInterestRate(
|
|
217
|
+
bbt: bigint,
|
|
218
|
+
amount: bigint,
|
|
219
|
+
sbirtn1: Dnum,
|
|
220
|
+
sbirt1: Dnum
|
|
221
|
+
): Dnum {
|
|
222
|
+
return dn.div(
|
|
223
|
+
dn.add(dn.mul(sbirtn1, [bbt, 0]), dn.mul(sbirt1, [amount, 0])),
|
|
224
|
+
dn.add([bbt, 0], [amount, 0])
|
|
225
|
+
);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
export function calcLtvRatio(
|
|
229
|
+
totalBorrowBalanceValue: Dnum,
|
|
230
|
+
totalCollateralBalanceValue: Dnum
|
|
231
|
+
): Dnum {
|
|
232
|
+
const [, decimals] = totalBorrowBalanceValue;
|
|
233
|
+
if (dn.equal(totalCollateralBalanceValue, 0)) return dn.from(0, decimals);
|
|
234
|
+
return dn.div(totalBorrowBalanceValue, totalCollateralBalanceValue, {
|
|
235
|
+
rounding: 'ROUND_UP',
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
export function calcBorrowUtilisationRatio(
|
|
240
|
+
totalEffectiveBorrowBalanceValue: Dnum,
|
|
241
|
+
totalEffectiveCollateralBalanceValue: Dnum
|
|
242
|
+
): Dnum {
|
|
243
|
+
const [, decimals] = totalEffectiveBorrowBalanceValue;
|
|
244
|
+
if (dn.equal(totalEffectiveCollateralBalanceValue, 0))
|
|
245
|
+
return dn.from(0, decimals);
|
|
246
|
+
return dn.div(
|
|
247
|
+
totalEffectiveBorrowBalanceValue,
|
|
248
|
+
totalEffectiveCollateralBalanceValue,
|
|
249
|
+
{ rounding: 'ROUND_UP' }
|
|
250
|
+
);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
export function calcLiquidationMargin(
|
|
254
|
+
totalEffectiveBorrowBalanceValue: Dnum,
|
|
255
|
+
totalEffectiveCollateralBalanceValue: Dnum
|
|
256
|
+
): Dnum {
|
|
257
|
+
const [, decimals] = totalEffectiveBorrowBalanceValue;
|
|
258
|
+
if (dn.equal(totalEffectiveCollateralBalanceValue, 0))
|
|
259
|
+
return dn.from(0, decimals);
|
|
260
|
+
return dn.div(
|
|
261
|
+
dn.sub(
|
|
262
|
+
totalEffectiveCollateralBalanceValue,
|
|
263
|
+
totalEffectiveBorrowBalanceValue
|
|
264
|
+
),
|
|
265
|
+
totalEffectiveCollateralBalanceValue,
|
|
266
|
+
{
|
|
267
|
+
rounding: 'ROUND_DOWN',
|
|
268
|
+
}
|
|
269
|
+
);
|
|
270
|
+
}
|