@folks-finance/xchain-sdk 0.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 +1 -0
- package/dist/chains/evm/common/constants/abi/ccip-data-adapter-abi.d.ts +796 -0
- package/dist/chains/evm/common/constants/abi/ccip-data-adapter-abi.js +614 -0
- package/dist/chains/evm/common/constants/abi/ccip-data-adapter-abi.js.map +1 -0
- package/dist/chains/evm/common/constants/abi/erc-20-abi.d.ts +235 -0
- package/dist/chains/evm/common/constants/abi/erc-20-abi.js +157 -0
- package/dist/chains/evm/common/constants/abi/erc-20-abi.js.map +1 -0
- package/dist/chains/evm/common/constants/abi/wormhole-data-adapter-abi.d.ts +807 -0
- package/dist/chains/evm/common/constants/abi/wormhole-data-adapter-abi.js +621 -0
- package/dist/chains/evm/common/constants/abi/wormhole-data-adapter-abi.js.map +1 -0
- package/dist/chains/evm/common/constants/chain.d.ts +2349 -0
- package/dist/chains/evm/common/constants/chain.js +45 -0
- package/dist/chains/evm/common/constants/chain.js.map +1 -0
- package/dist/chains/evm/common/constants/contract.d.ts +2 -0
- package/dist/chains/evm/common/constants/contract.js +6 -0
- package/dist/chains/evm/common/constants/contract.js.map +1 -0
- package/dist/chains/evm/common/constants/tokens.d.ts +6 -0
- package/dist/chains/evm/common/constants/tokens.js +33 -0
- package/dist/chains/evm/common/constants/tokens.js.map +1 -0
- package/dist/chains/evm/common/types/chain.d.ts +10 -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 +14 -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/index.d.ts +3 -0
- package/dist/chains/evm/common/types/index.js +4 -0
- package/dist/chains/evm/common/types/index.js.map +1 -0
- package/dist/chains/evm/common/types/module.d.ts +66 -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/tokens.d.ts +28 -0
- package/dist/chains/evm/common/types/tokens.js +2 -0
- package/dist/chains/evm/common/types/tokens.js.map +1 -0
- package/dist/chains/evm/common/utils/chain.d.ts +6 -0
- package/dist/chains/evm/common/utils/chain.js +16 -0
- package/dist/chains/evm/common/utils/chain.js.map +1 -0
- package/dist/chains/evm/common/utils/contract.d.ts +6006 -0
- package/dist/chains/evm/common/utils/contract.js +54 -0
- package/dist/chains/evm/common/utils/contract.js.map +1 -0
- package/dist/chains/evm/common/utils/gmp.d.ts +4 -0
- package/dist/chains/evm/common/utils/gmp.js +13 -0
- package/dist/chains/evm/common/utils/gmp.js.map +1 -0
- package/dist/chains/evm/common/utils/message.d.ts +22 -0
- package/dist/chains/evm/common/utils/message.js +398 -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 +10 -0
- package/dist/chains/evm/common/utils/tokens.js +37 -0
- package/dist/chains/evm/common/utils/tokens.js.map +1 -0
- package/dist/chains/evm/hub/constants/abi/account-manager-abi.d.ts +907 -0
- package/dist/chains/evm/hub/constants/abi/account-manager-abi.js +686 -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 +969 -0
- package/dist/chains/evm/hub/constants/abi/bridge-router-hub-abi.js +764 -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 +285 -0
- package/dist/chains/evm/hub/constants/abi/hub-abi.js +187 -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 +1742 -0
- package/dist/chains/evm/hub/constants/abi/hub-pool-abi.js +1346 -0
- package/dist/chains/evm/hub/constants/abi/hub-pool-abi.js.map +1 -0
- package/dist/chains/evm/hub/constants/abi/loan-manager-abi.d.ts +1559 -0
- package/dist/chains/evm/hub/constants/abi/loan-manager-abi.js +1040 -0
- package/dist/chains/evm/hub/constants/abi/loan-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 +389 -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 +96 -0
- package/dist/chains/evm/hub/constants/chain.js.map +1 -0
- package/dist/chains/evm/hub/modules/folks-hub-account.d.ts +15 -0
- package/dist/chains/evm/hub/modules/folks-hub-account.js +98 -0
- package/dist/chains/evm/hub/modules/folks-hub-account.js.map +1 -0
- package/dist/chains/evm/hub/modules/folks-hub-gmp.d.ts +14 -0
- package/dist/chains/evm/hub/modules/folks-hub-gmp.js +57 -0
- package/dist/chains/evm/hub/modules/folks-hub-gmp.js.map +1 -0
- package/dist/chains/evm/hub/modules/folks-hub-loan.d.ts +25 -0
- package/dist/chains/evm/hub/modules/folks-hub-loan.js +397 -0
- package/dist/chains/evm/hub/modules/folks-hub-loan.js.map +1 -0
- package/dist/chains/evm/hub/modules/folks-hub-oracle.d.ts +5 -0
- package/dist/chains/evm/hub/modules/folks-hub-oracle.js +24 -0
- package/dist/chains/evm/hub/modules/folks-hub-oracle.js.map +1 -0
- package/dist/chains/evm/hub/modules/folks-hub-pool.d.ts +5 -0
- package/dist/chains/evm/hub/modules/folks-hub-pool.js +114 -0
- package/dist/chains/evm/hub/modules/folks-hub-pool.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/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 +15 -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 +126 -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 +4 -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 +60 -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 +13 -0
- package/dist/chains/evm/hub/utils/chain.js +29 -0
- package/dist/chains/evm/hub/utils/chain.js.map +1 -0
- package/dist/chains/evm/hub/utils/contract.d.ts +17 -0
- package/dist/chains/evm/hub/utils/contract.js +52 -0
- package/dist/chains/evm/hub/utils/contract.js.map +1 -0
- package/dist/chains/evm/hub/utils/events.d.ts +24 -0
- package/dist/chains/evm/hub/utils/events.js +97 -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 +36 -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 +951 -0
- package/dist/chains/evm/spoke/constants/abi/bridge-router-spoke-abi.js +754 -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 +1101 -0
- package/dist/chains/evm/spoke/constants/abi/spoke-common-abi.js +710 -0
- package/dist/chains/evm/spoke/constants/abi/spoke-common-abi.js.map +1 -0
- package/dist/chains/evm/spoke/constants/abi/spoke-token-abi.d.ts +882 -0
- package/dist/chains/evm/spoke/constants/abi/spoke-token-abi.js +643 -0
- package/dist/chains/evm/spoke/constants/abi/spoke-token-abi.js.map +1 -0
- package/dist/chains/evm/spoke/modules/folks-evm-account.d.ts +18 -0
- package/dist/chains/evm/spoke/modules/folks-evm-account.js +119 -0
- package/dist/chains/evm/spoke/modules/folks-evm-account.js.map +1 -0
- package/dist/chains/evm/spoke/modules/folks-evm-gmp.d.ts +14 -0
- package/dist/chains/evm/spoke/modules/folks-evm-gmp.js +57 -0
- package/dist/chains/evm/spoke/modules/folks-evm-gmp.js.map +1 -0
- package/dist/chains/evm/spoke/modules/folks-evm-loan.d.ts +39 -0
- package/dist/chains/evm/spoke/modules/folks-evm-loan.js +396 -0
- package/dist/chains/evm/spoke/modules/folks-evm-loan.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/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 +12 -0
- package/dist/chains/evm/spoke/utils/contract.js +28 -0
- package/dist/chains/evm/spoke/utils/contract.js.map +1 -0
- package/dist/common/constants/adapter.d.ts +4 -0
- package/dist/common/constants/adapter.js +5 -0
- package/dist/common/constants/adapter.js.map +1 -0
- package/dist/common/constants/bytes.d.ts +5 -0
- package/dist/common/constants/bytes.js +6 -0
- package/dist/common/constants/bytes.js.map +1 -0
- package/dist/common/constants/chain.d.ts +15 -0
- package/dist/common/constants/chain.js +152 -0
- package/dist/common/constants/chain.js.map +1 -0
- package/dist/common/constants/gmp.d.ts +4 -0
- package/dist/common/constants/gmp.js +32 -0
- package/dist/common/constants/gmp.js.map +1 -0
- package/dist/common/constants/lending.d.ts +1 -0
- package/dist/common/constants/lending.js +3 -0
- package/dist/common/constants/lending.js.map +1 -0
- package/dist/common/constants/message.d.ts +4 -0
- package/dist/common/constants/message.js +5 -0
- package/dist/common/constants/message.js.map +1 -0
- package/dist/common/constants/pool.d.ts +8 -0
- package/dist/common/constants/pool.js +10 -0
- package/dist/common/constants/pool.js.map +1 -0
- package/dist/common/constants/token.d.ts +2 -0
- package/dist/common/constants/token.js +3 -0
- package/dist/common/constants/token.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 +10 -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 +17 -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 +4 -0
- package/dist/common/types/lending.js +2 -0
- package/dist/common/types/lending.js.map +1 -0
- package/dist/common/types/message.d.ts +239 -0
- package/dist/common/types/message.js +33 -0
- package/dist/common/types/message.js.map +1 -0
- package/dist/common/types/module.d.ts +21 -0
- package/dist/common/types/module.js +6 -0
- package/dist/common/types/module.js.map +1 -0
- package/dist/common/types/token.d.ts +42 -0
- package/dist/common/types/token.js +15 -0
- package/dist/common/types/token.js.map +1 -0
- package/dist/common/utils/adapter.d.ts +11 -0
- package/dist/common/utils/adapter.js +63 -0
- package/dist/common/utils/adapter.js.map +1 -0
- package/dist/common/utils/address.d.ts +8 -0
- package/dist/common/utils/address.js +35 -0
- package/dist/common/utils/address.js.map +1 -0
- package/dist/common/utils/bytes.d.ts +9 -0
- package/dist/common/utils/bytes.js +34 -0
- package/dist/common/utils/bytes.js.map +1 -0
- package/dist/common/utils/chain.d.ts +19 -0
- package/dist/common/utils/chain.js +74 -0
- package/dist/common/utils/chain.js.map +1 -0
- package/dist/common/utils/formulae.d.ts +15 -0
- package/dist/common/utils/formulae.js +77 -0
- package/dist/common/utils/formulae.js.map +1 -0
- package/dist/common/utils/gmp.d.ts +4 -0
- package/dist/common/utils/gmp.js +14 -0
- package/dist/common/utils/gmp.js.map +1 -0
- package/dist/common/utils/math-lib.d.ts +9 -0
- package/dist/common/utils/math-lib.js +38 -0
- package/dist/common/utils/math-lib.js.map +1 -0
- package/dist/common/utils/messages.d.ts +7 -0
- package/dist/common/utils/messages.js +93 -0
- package/dist/common/utils/messages.js.map +1 -0
- package/dist/common/utils/token.d.ts +2 -0
- package/dist/common/utils/token.js +5 -0
- package/dist/common/utils/token.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.js +38 -0
- package/dist/index.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/xchain/core/folks-core.d.ts +24 -0
- package/dist/xchain/core/folks-core.js +100 -0
- package/dist/xchain/core/folks-core.js.map +1 -0
- package/dist/xchain/modules/folks-account.d.ts +30 -0
- package/dist/xchain/modules/folks-account.js +205 -0
- package/dist/xchain/modules/folks-account.js.map +1 -0
- package/dist/xchain/modules/folks-gmp.d.ts +12 -0
- package/dist/xchain/modules/folks-gmp.js +53 -0
- package/dist/xchain/modules/folks-gmp.js.map +1 -0
- package/dist/xchain/modules/folks-loan.d.ts +68 -0
- package/dist/xchain/modules/folks-loan.js +598 -0
- package/dist/xchain/modules/folks-loan.js.map +1 -0
- package/dist/xchain/modules/folks-oracle.d.ts +4 -0
- package/dist/xchain/modules/folks-oracle.js +11 -0
- package/dist/xchain/modules/folks-oracle.js.map +1 -0
- package/dist/xchain/modules/folks-pool.d.ts +5 -0
- package/dist/xchain/modules/folks-pool.js +8 -0
- package/dist/xchain/modules/folks-pool.js.map +1 -0
- package/dist/xchain/modules/index.d.ts +5 -0
- package/dist/xchain/modules/index.js +6 -0
- package/dist/xchain/modules/index.js.map +1 -0
- package/package.json +79 -0
- package/src/chains/evm/common/constants/abi/ccip-data-adapter-abi.ts +613 -0
- package/src/chains/evm/common/constants/abi/erc-20-abi.ts +156 -0
- package/src/chains/evm/common/constants/abi/wormhole-data-adapter-abi.ts +620 -0
- package/src/chains/evm/common/constants/chain.ts +56 -0
- package/src/chains/evm/common/constants/contract.ts +7 -0
- package/src/chains/evm/common/constants/tokens.ts +39 -0
- package/src/chains/evm/common/types/chain.ts +23 -0
- package/src/chains/evm/common/types/contract.ts +7 -0
- package/src/chains/evm/common/types/gmp.ts +15 -0
- package/src/chains/evm/common/types/index.ts +3 -0
- package/src/chains/evm/common/types/module.ts +85 -0
- package/src/chains/evm/common/types/tokens.ts +31 -0
- package/src/chains/evm/common/utils/chain.ts +20 -0
- package/src/chains/evm/common/utils/contract.ts +84 -0
- package/src/chains/evm/common/utils/gmp.ts +24 -0
- package/src/chains/evm/common/utils/message.ts +496 -0
- package/src/chains/evm/common/utils/provider.ts +32 -0
- package/src/chains/evm/common/utils/tokens.ts +52 -0
- package/src/chains/evm/hub/constants/abi/account-manager-abi.ts +685 -0
- package/src/chains/evm/hub/constants/abi/bridge-router-hub-abi.ts +763 -0
- package/src/chains/evm/hub/constants/abi/hub-abi.ts +186 -0
- package/src/chains/evm/hub/constants/abi/hub-pool-abi.ts +1345 -0
- package/src/chains/evm/hub/constants/abi/loan-manager-abi.ts +1039 -0
- package/src/chains/evm/hub/constants/abi/oracle-manager-abi.ts +388 -0
- package/src/chains/evm/hub/constants/chain.ts +130 -0
- package/src/chains/evm/hub/modules/folks-hub-account.ts +137 -0
- package/src/chains/evm/hub/modules/folks-hub-gmp.ts +105 -0
- package/src/chains/evm/hub/modules/folks-hub-loan.ts +603 -0
- package/src/chains/evm/hub/modules/folks-hub-oracle.ts +38 -0
- package/src/chains/evm/hub/modules/folks-hub-pool.ts +171 -0
- package/src/chains/evm/hub/modules/index.ts +5 -0
- package/src/chains/evm/hub/types/account.ts +27 -0
- package/src/chains/evm/hub/types/chain.ts +16 -0
- package/src/chains/evm/hub/types/loan.ts +147 -0
- package/src/chains/evm/hub/types/oracle.ts +6 -0
- package/src/chains/evm/hub/types/pool.ts +66 -0
- package/src/chains/evm/hub/types/token.ts +10 -0
- package/src/chains/evm/hub/utils/chain.ts +41 -0
- package/src/chains/evm/hub/utils/contract.ts +98 -0
- package/src/chains/evm/hub/utils/events.ts +112 -0
- package/src/chains/evm/hub/utils/loan.ts +60 -0
- package/src/chains/evm/spoke/constants/abi/bridge-router-spoke-abi.ts +753 -0
- package/src/chains/evm/spoke/constants/abi/spoke-common-abi.ts +709 -0
- package/src/chains/evm/spoke/constants/abi/spoke-token-abi.ts +642 -0
- package/src/chains/evm/spoke/modules/folks-evm-account.ts +228 -0
- package/src/chains/evm/spoke/modules/folks-evm-gmp.ts +105 -0
- package/src/chains/evm/spoke/modules/folks-evm-loan.ts +721 -0
- package/src/chains/evm/spoke/modules/index.ts +3 -0
- package/src/chains/evm/spoke/types/pool.ts +7 -0
- package/src/chains/evm/spoke/utils/contract.ts +74 -0
- package/src/common/constants/adapter.ts +5 -0
- package/src/common/constants/bytes.ts +6 -0
- package/src/common/constants/chain.ts +227 -0
- package/src/common/constants/gmp.ts +38 -0
- package/src/common/constants/lending.ts +3 -0
- package/src/common/constants/message.ts +4 -0
- package/src/common/constants/pool.ts +11 -0
- package/src/common/constants/token.ts +3 -0
- package/src/common/types/adapter.ts +38 -0
- package/src/common/types/address.ts +11 -0
- package/src/common/types/brand.ts +3 -0
- package/src/common/types/chain.ts +35 -0
- package/src/common/types/core.ts +31 -0
- package/src/common/types/gmp.ts +22 -0
- package/src/common/types/lending.ts +5 -0
- package/src/common/types/message.ts +330 -0
- package/src/common/types/module.ts +42 -0
- package/src/common/types/token.ts +50 -0
- package/src/common/utils/adapter.ts +75 -0
- package/src/common/utils/address.ts +49 -0
- package/src/common/utils/bytes.ts +46 -0
- package/src/common/utils/chain.ts +103 -0
- package/src/common/utils/formulae.ts +124 -0
- package/src/common/utils/gmp.ts +16 -0
- package/src/common/utils/math-lib.ts +46 -0
- package/src/common/utils/messages.ts +192 -0
- package/src/common/utils/token.ts +7 -0
- package/src/index.ts +47 -0
- package/src/utils/exhaustive-check.ts +3 -0
- package/src/xchain/core/folks-core.ts +128 -0
- package/src/xchain/modules/folks-account.ts +385 -0
- package/src/xchain/modules/folks-gmp.ts +129 -0
- package/src/xchain/modules/folks-loan.ts +1175 -0
- package/src/xchain/modules/folks-oracle.ts +15 -0
- package/src/xchain/modules/folks-pool.ts +11 -0
- package/src/xchain/modules/index.ts +5 -0
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
import type { GenericAddress } from "./address.js";
|
|
2
|
+
import type { FolksChainId } from "./chain.js";
|
|
3
|
+
import type { AccountId, LoanId, LoanName } from "./lending.js";
|
|
4
|
+
import type { LoanTypeId } from "./module.js";
|
|
5
|
+
import type { FolksTokenId, FolksSpokeTokenType } from "./token.js";
|
|
6
|
+
import type { FINALITY } from "../constants/message.js";
|
|
7
|
+
import type { Hex } from "viem";
|
|
8
|
+
|
|
9
|
+
export enum AdapterType {
|
|
10
|
+
HUB = 1,
|
|
11
|
+
WORMHOLE_DATA = 2,
|
|
12
|
+
WORMHOLE_CCTP = 3,
|
|
13
|
+
CCIP_DATA = 4,
|
|
14
|
+
CCIP_TOKEN = 5,
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export enum Action {
|
|
18
|
+
// SPOKE -> HUB
|
|
19
|
+
CreateAccount,
|
|
20
|
+
InviteAddress,
|
|
21
|
+
AcceptInviteAddress,
|
|
22
|
+
UnregisterAddress,
|
|
23
|
+
AddDelegate,
|
|
24
|
+
RemoveDelegate,
|
|
25
|
+
CreateLoan,
|
|
26
|
+
DeleteLoan,
|
|
27
|
+
CreateLoanAndDeposit,
|
|
28
|
+
Deposit,
|
|
29
|
+
DepositFToken,
|
|
30
|
+
Withdraw,
|
|
31
|
+
WithdrawFToken,
|
|
32
|
+
Borrow,
|
|
33
|
+
Repay,
|
|
34
|
+
RepayWithCollateral,
|
|
35
|
+
Liquidate,
|
|
36
|
+
SwitchBorrowType,
|
|
37
|
+
// HUB -> SPOKE
|
|
38
|
+
SendToken,
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export type SendTokenAction = Extract<Action, Action.Deposit | Action.Repay>;
|
|
42
|
+
export type ReceiveTokenAction = Extract<Action, Action.Withdraw | Action.Borrow>;
|
|
43
|
+
export type HubAction = Extract<
|
|
44
|
+
Action,
|
|
45
|
+
Action.DepositFToken | Action.WithdrawFToken | Action.Liquidate | Action.SendToken
|
|
46
|
+
>;
|
|
47
|
+
export type DataAction = Extract<
|
|
48
|
+
Action,
|
|
49
|
+
| Action.CreateAccount
|
|
50
|
+
| Action.InviteAddress
|
|
51
|
+
| Action.AcceptInviteAddress
|
|
52
|
+
| Action.UnregisterAddress
|
|
53
|
+
| Action.AddDelegate
|
|
54
|
+
| Action.RemoveDelegate
|
|
55
|
+
| Action.CreateLoan
|
|
56
|
+
| Action.DeleteLoan
|
|
57
|
+
| Action.RepayWithCollateral
|
|
58
|
+
| Action.SwitchBorrowType
|
|
59
|
+
>;
|
|
60
|
+
|
|
61
|
+
export type Finality = (typeof FINALITY)[keyof typeof FINALITY];
|
|
62
|
+
|
|
63
|
+
export type MessageAdapters = {
|
|
64
|
+
adapterId: AdapterType;
|
|
65
|
+
returnAdapterId: AdapterType;
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export type SupportedMessageAdapters = {
|
|
69
|
+
adapterId: Array<AdapterType>;
|
|
70
|
+
returnAdapterId: Array<AdapterType>;
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export type FeeParams = {
|
|
74
|
+
receiverValue: bigint;
|
|
75
|
+
gasLimit: bigint;
|
|
76
|
+
returnGasLimit: bigint;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
export type MessageParams = FeeParams & MessageAdapters;
|
|
80
|
+
|
|
81
|
+
export type OptionalFeeParams = Partial<FeeParams>;
|
|
82
|
+
|
|
83
|
+
export type MessageToSend = {
|
|
84
|
+
params: MessageParams;
|
|
85
|
+
sender: GenericAddress;
|
|
86
|
+
destinationChainId: number;
|
|
87
|
+
handler: GenericAddress;
|
|
88
|
+
payload: Hex;
|
|
89
|
+
finalityLevel: Finality;
|
|
90
|
+
extraArgs: Hex;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
// Data
|
|
94
|
+
export type DefaultMessageData = "0x";
|
|
95
|
+
|
|
96
|
+
// Data: account
|
|
97
|
+
export type CreateAccountMessageData = {
|
|
98
|
+
refAccountId: AccountId;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
export type InviteAddressMessageData = {
|
|
102
|
+
folksChainIdToInvite: FolksChainId;
|
|
103
|
+
addressToInvite: GenericAddress;
|
|
104
|
+
refAccountId: AccountId;
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
export type UnregisterAddressMessageData = {
|
|
108
|
+
folksChainIdToUnregister: FolksChainId;
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
// Data: loan
|
|
112
|
+
export type CreateLoanMessageData = {
|
|
113
|
+
loanId: LoanId;
|
|
114
|
+
loanTypeId: LoanTypeId;
|
|
115
|
+
loanName: LoanName;
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
export type DeleteLoanMessageData = {
|
|
119
|
+
accountId: AccountId;
|
|
120
|
+
loanId: LoanId;
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
export type CreateLoanAndDepositMessageData = {
|
|
124
|
+
loanId: LoanId;
|
|
125
|
+
poolId: number;
|
|
126
|
+
amount: bigint;
|
|
127
|
+
loanTypeId: LoanTypeId;
|
|
128
|
+
loanName: LoanName;
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
export type DepositMessageData = {
|
|
132
|
+
loanId: LoanId;
|
|
133
|
+
poolId: number;
|
|
134
|
+
amount: bigint;
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
export type WithdrawMessageData = {
|
|
138
|
+
loanId: LoanId;
|
|
139
|
+
poolId: number;
|
|
140
|
+
receiverFolksChainId: FolksChainId;
|
|
141
|
+
amount: bigint;
|
|
142
|
+
isFAmount: boolean;
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
export type BorrowMessageData = {
|
|
146
|
+
loanId: LoanId;
|
|
147
|
+
poolId: number;
|
|
148
|
+
receiverFolksChainId: FolksChainId;
|
|
149
|
+
amount: bigint;
|
|
150
|
+
maxStableRate: bigint;
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
export type RepayMessageData = {
|
|
154
|
+
loanId: LoanId;
|
|
155
|
+
poolId: number;
|
|
156
|
+
amount: bigint;
|
|
157
|
+
maxOverRepayment: bigint;
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
export type RepayWithCollateralMessageData = {
|
|
161
|
+
loanId: LoanId;
|
|
162
|
+
poolId: number;
|
|
163
|
+
amount: bigint;
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
export type SwitchBorrowTypeMessageData = {
|
|
167
|
+
loanId: LoanId;
|
|
168
|
+
poolId: number;
|
|
169
|
+
maxStableRate: bigint;
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
export type LiquidateMessageData = {
|
|
173
|
+
violatorLoanId: LoanId;
|
|
174
|
+
liquidatorLoanId: LoanId;
|
|
175
|
+
colPoolId: number;
|
|
176
|
+
borPoolId: number;
|
|
177
|
+
repayingAmount: bigint;
|
|
178
|
+
minSeizedAmount: bigint;
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
export type SendTokenMessageData = {
|
|
182
|
+
folksTokenId: FolksTokenId;
|
|
183
|
+
amount: bigint;
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
// Extra args
|
|
187
|
+
export type DefaultExtraArgs = "0x";
|
|
188
|
+
|
|
189
|
+
// Extra args: loan
|
|
190
|
+
export type DepositExtraArgs = {
|
|
191
|
+
token: FolksSpokeTokenType;
|
|
192
|
+
recipient: GenericAddress;
|
|
193
|
+
amount: bigint;
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
export type RepayExtraArgs = {
|
|
197
|
+
token: FolksSpokeTokenType;
|
|
198
|
+
recipient: GenericAddress;
|
|
199
|
+
amount: bigint;
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
export type SendTokenExtraArgs = {
|
|
203
|
+
token: FolksSpokeTokenType;
|
|
204
|
+
recipient: GenericAddress;
|
|
205
|
+
amount: bigint;
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
// Params
|
|
209
|
+
export type DefaultMessageDataParams = {
|
|
210
|
+
action:
|
|
211
|
+
| Action.AcceptInviteAddress
|
|
212
|
+
| Action.AddDelegate
|
|
213
|
+
| Action.RemoveDelegate
|
|
214
|
+
| Action.DepositFToken
|
|
215
|
+
| Action.WithdrawFToken;
|
|
216
|
+
data: DefaultMessageData;
|
|
217
|
+
extraArgs: DefaultExtraArgs;
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
// Params: account
|
|
221
|
+
export type CreateAccountMessageDataParams = {
|
|
222
|
+
action: Action.CreateAccount;
|
|
223
|
+
data: CreateAccountMessageData;
|
|
224
|
+
extraArgs: DefaultExtraArgs;
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
export type InviteAddressMessageDataParams = {
|
|
228
|
+
action: Action.InviteAddress;
|
|
229
|
+
data: InviteAddressMessageData;
|
|
230
|
+
extraArgs: DefaultExtraArgs;
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
export type UnregisterAddressMessageDataParams = {
|
|
234
|
+
action: Action.UnregisterAddress;
|
|
235
|
+
data: UnregisterAddressMessageData;
|
|
236
|
+
extraArgs: DefaultExtraArgs;
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
// Params: loan
|
|
240
|
+
export type CreateLoanMessageDataParams = {
|
|
241
|
+
action: Action.CreateLoan;
|
|
242
|
+
data: CreateLoanMessageData;
|
|
243
|
+
extraArgs: DefaultExtraArgs;
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
export type DeleteLoanMessageDataParams = {
|
|
247
|
+
action: Action.DeleteLoan;
|
|
248
|
+
data: DeleteLoanMessageData;
|
|
249
|
+
extraArgs: DefaultExtraArgs;
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
export type CreateLoanAndDepositMessageDataParams = {
|
|
253
|
+
action: Action.CreateLoanAndDeposit;
|
|
254
|
+
data: CreateLoanAndDepositMessageData;
|
|
255
|
+
extraArgs: DepositExtraArgs;
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
export type DepositMessageDataParams = {
|
|
259
|
+
action: Action.Deposit;
|
|
260
|
+
data: DepositMessageData;
|
|
261
|
+
extraArgs: DepositExtraArgs;
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
export type WithdrawMessageDataParams = {
|
|
265
|
+
action: Action.Withdraw;
|
|
266
|
+
data: WithdrawMessageData;
|
|
267
|
+
extraArgs: DefaultExtraArgs;
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
export type BorrowMessageDataParams = {
|
|
271
|
+
action: Action.Borrow;
|
|
272
|
+
data: BorrowMessageData;
|
|
273
|
+
extraArgs: DefaultExtraArgs;
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
export type RepayMessageDataParams = {
|
|
277
|
+
action: Action.Repay;
|
|
278
|
+
data: RepayMessageData;
|
|
279
|
+
extraArgs: RepayExtraArgs;
|
|
280
|
+
};
|
|
281
|
+
|
|
282
|
+
export type RepayWithCollateralMessageDataParams = {
|
|
283
|
+
action: Action.RepayWithCollateral;
|
|
284
|
+
data: RepayWithCollateralMessageData;
|
|
285
|
+
extraArgs: DefaultExtraArgs;
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
export type SwitchBorrowTypeMessageDataParams = {
|
|
289
|
+
action: Action.SwitchBorrowType;
|
|
290
|
+
data: SwitchBorrowTypeMessageData;
|
|
291
|
+
extraArgs: DefaultExtraArgs;
|
|
292
|
+
};
|
|
293
|
+
|
|
294
|
+
export type LiquidateMessageDataParams = {
|
|
295
|
+
action: Action.Liquidate;
|
|
296
|
+
data: LiquidateMessageData;
|
|
297
|
+
extraArgs: DefaultExtraArgs;
|
|
298
|
+
};
|
|
299
|
+
|
|
300
|
+
export type SendTokenMessageDataParams = {
|
|
301
|
+
action: Action.SendToken;
|
|
302
|
+
data: SendTokenMessageData;
|
|
303
|
+
extraArgs: SendTokenExtraArgs;
|
|
304
|
+
};
|
|
305
|
+
|
|
306
|
+
export type MessageDataParams =
|
|
307
|
+
| DefaultMessageDataParams
|
|
308
|
+
| CreateAccountMessageDataParams
|
|
309
|
+
| InviteAddressMessageDataParams
|
|
310
|
+
| UnregisterAddressMessageDataParams
|
|
311
|
+
| CreateLoanMessageDataParams
|
|
312
|
+
| DeleteLoanMessageDataParams
|
|
313
|
+
| CreateLoanAndDepositMessageDataParams
|
|
314
|
+
| DepositMessageDataParams
|
|
315
|
+
| WithdrawMessageDataParams
|
|
316
|
+
| BorrowMessageDataParams
|
|
317
|
+
| RepayMessageDataParams
|
|
318
|
+
| RepayWithCollateralMessageDataParams
|
|
319
|
+
| SwitchBorrowTypeMessageDataParams
|
|
320
|
+
| LiquidateMessageDataParams
|
|
321
|
+
| SendTokenMessageDataParams;
|
|
322
|
+
|
|
323
|
+
export type MessageBuilderParams = {
|
|
324
|
+
userAddress: GenericAddress;
|
|
325
|
+
accountId: AccountId;
|
|
326
|
+
adapters: MessageAdapters;
|
|
327
|
+
sender: GenericAddress;
|
|
328
|
+
destinationChainId: FolksChainId;
|
|
329
|
+
handler: GenericAddress;
|
|
330
|
+
} & MessageDataParams;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
PrepareCreateAccountCall as PrepareCreateAccountEVMCall,
|
|
3
|
+
PrepareInviteAddressCall as PrepareInviteAddressEVMCall,
|
|
4
|
+
PrepareAcceptInviteAddressCall as PrepareAcceptInviteAddressEVMCall,
|
|
5
|
+
PrepareUnregisterAddressCall as PrepareUnregisterAddressEVMCall,
|
|
6
|
+
PrepareCreateLoanCall as PrepareCreateLoanEVMCall,
|
|
7
|
+
PrepareDeleteLoanCall as PrepareDeleteLoanEVMCall,
|
|
8
|
+
PrepareCreateLoanAndDepositCall as PrepareCreateLoanAndDepositEVMCall,
|
|
9
|
+
PrepareDepositCall as PrepareDepositEVMCall,
|
|
10
|
+
PrepareWithdrawCall as PrepareWithdrawEVMCall,
|
|
11
|
+
PrepareCall as PrepareEVMCall,
|
|
12
|
+
PrepareBorrowCall as PrepareBorrowEVMCall,
|
|
13
|
+
PrepareRepayCall as PrepareRepayEVMCall,
|
|
14
|
+
PrepareRepayWithCollateralCall as PrepareRepayWithCollateralEVMCall,
|
|
15
|
+
PrepareSwitchBorrowTypeCall as PrepareSwitchBorrowTypeEVMCall,
|
|
16
|
+
PrepareLiquidateCall as PrepareLiquidateEVMCall,
|
|
17
|
+
PrepareRetryMessageCall as PrepareRetryMessageEVMCall,
|
|
18
|
+
} from "../../chains/evm/common/types/module.js";
|
|
19
|
+
|
|
20
|
+
export enum LoanTypeId {
|
|
21
|
+
DEPOSIT = 1, // no support for borrows
|
|
22
|
+
GENERAL = 2,
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export type PrepareCall = PrepareEVMCall;
|
|
26
|
+
|
|
27
|
+
export type PrepareCreateAccountCall = PrepareCreateAccountEVMCall;
|
|
28
|
+
export type PrepareInviteAddressCall = PrepareInviteAddressEVMCall;
|
|
29
|
+
export type PrepareAcceptInviteAddressCall = PrepareAcceptInviteAddressEVMCall;
|
|
30
|
+
export type PrepareUnregisterAddressCall = PrepareUnregisterAddressEVMCall;
|
|
31
|
+
|
|
32
|
+
export type PrepareCreateLoanCall = PrepareCreateLoanEVMCall;
|
|
33
|
+
export type PrepareDeleteLoanCall = PrepareDeleteLoanEVMCall;
|
|
34
|
+
export type PrepareCreateLoanAndDepositCall = PrepareCreateLoanAndDepositEVMCall;
|
|
35
|
+
export type PrepareDepositCall = PrepareDepositEVMCall;
|
|
36
|
+
export type PrepareWithdrawCall = PrepareWithdrawEVMCall;
|
|
37
|
+
export type PrepareBorrowCall = PrepareBorrowEVMCall;
|
|
38
|
+
export type PrepareRepayCall = PrepareRepayEVMCall;
|
|
39
|
+
export type PrepareRepayWithCollateralCall = PrepareRepayWithCollateralEVMCall;
|
|
40
|
+
export type PrepareSwitchBorrowTypeCall = PrepareSwitchBorrowTypeEVMCall;
|
|
41
|
+
export type PrepareLiquidateCall = PrepareLiquidateEVMCall;
|
|
42
|
+
export type PrepareRetryMessageCall = PrepareRetryMessageEVMCall;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { GenericAddress } from "./address.js";
|
|
2
|
+
|
|
3
|
+
export enum FolksTokenId {
|
|
4
|
+
USDC = "USDC",
|
|
5
|
+
AVAX = "AVAX",
|
|
6
|
+
ETH_eth_sep = "ETH_eth_sep",
|
|
7
|
+
ETH_base_sep = "ETH_base_sep",
|
|
8
|
+
LINK_eth_sep = "LINK_eth_sep",
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export enum TokenType {
|
|
12
|
+
NATIVE = "NATIVE",
|
|
13
|
+
ERC20 = "ERC20",
|
|
14
|
+
CIRCLE = "CIRCLE",
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type ITokenData = {
|
|
18
|
+
folksTokenId: FolksTokenId;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
type Erc20SpokeTokenType = {
|
|
22
|
+
type: TokenType.ERC20;
|
|
23
|
+
address: GenericAddress;
|
|
24
|
+
decimals: number;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
type Erc20HubTokenType = {
|
|
28
|
+
type: TokenType.ERC20;
|
|
29
|
+
decimals: number;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
type CircleTokenType = {
|
|
33
|
+
type: TokenType.CIRCLE;
|
|
34
|
+
address: GenericAddress;
|
|
35
|
+
decimals: number;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
type NativeTokenType = {
|
|
39
|
+
type: TokenType.NATIVE;
|
|
40
|
+
decimals: number;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export type FolksSpokeTokenType = Erc20SpokeTokenType | CircleTokenType | NativeTokenType;
|
|
44
|
+
export type FolksHubTokenType = Erc20HubTokenType | CircleTokenType | NativeTokenType;
|
|
45
|
+
|
|
46
|
+
export type SpokeTokenData = {
|
|
47
|
+
poolId: number;
|
|
48
|
+
spokeAddress: GenericAddress;
|
|
49
|
+
token: FolksSpokeTokenType;
|
|
50
|
+
} & ITokenData;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { isHubChain } from "../../chains/evm/hub/utils/chain.js";
|
|
2
|
+
import { exhaustiveCheck } from "../../utils/exhaustive-check.js";
|
|
3
|
+
import { FolksCore } from "../../xchain/core/folks-core.js";
|
|
4
|
+
import { DATA_ADAPTERS, HUB_ADAPTERS, TOKEN_ADAPTERS } from "../constants/adapter.js";
|
|
5
|
+
import { MessageAdapterParamsType } from "../types/adapter.js";
|
|
6
|
+
import { AdapterType } from "../types/message.js";
|
|
7
|
+
|
|
8
|
+
import { isCircleToken } from "./token.js";
|
|
9
|
+
|
|
10
|
+
import type { MessageAdapterParams, ReceiveTokenMessageAdapterParams } from "../types/adapter.js";
|
|
11
|
+
import type { FolksChainId } from "../types/chain.js";
|
|
12
|
+
|
|
13
|
+
export function doesAdapterSupportDataMessage(folksChainId: FolksChainId, adapterId: AdapterType): boolean {
|
|
14
|
+
const isHub = isHubChain(folksChainId, FolksCore.getSelectedNetwork());
|
|
15
|
+
return (
|
|
16
|
+
(isHub && adapterId === AdapterType.HUB) ||
|
|
17
|
+
(!isHub && (adapterId === AdapterType.WORMHOLE_DATA || adapterId === AdapterType.CCIP_DATA))
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function assertAdapterSupportsDataMessage(folksChainId: FolksChainId, adapterId: AdapterType): void {
|
|
22
|
+
if (!doesAdapterSupportDataMessage(folksChainId, adapterId))
|
|
23
|
+
throw Error(`Adapter ${adapterId} does not support data message for folksChainId: ${folksChainId}`);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function doesAdapterSupportTokenMessage(folksChainId: FolksChainId, adapterId: AdapterType): boolean {
|
|
27
|
+
const isHub = isHubChain(folksChainId, FolksCore.getSelectedNetwork());
|
|
28
|
+
return (
|
|
29
|
+
(isHub && adapterId === AdapterType.HUB) ||
|
|
30
|
+
(!isHub && (adapterId === AdapterType.WORMHOLE_CCTP || adapterId === AdapterType.CCIP_TOKEN))
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function assertAdapterSupportsTokenMessage(folksChainId: FolksChainId, adapterId: AdapterType): void {
|
|
35
|
+
if (!doesAdapterSupportTokenMessage(folksChainId, adapterId))
|
|
36
|
+
throw Error(`Adapter ${adapterId} does not support token message for folksChainId: ${folksChainId}`);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function getAdapterIds(messageAdapterParams: MessageAdapterParams) {
|
|
40
|
+
const { sourceFolksChainId, network, messageAdapterParamType } = messageAdapterParams;
|
|
41
|
+
if (isHubChain(sourceFolksChainId, network)) return HUB_ADAPTERS;
|
|
42
|
+
if (messageAdapterParamType == MessageAdapterParamsType.SendToken && isCircleToken(messageAdapterParams.folksTokenId))
|
|
43
|
+
return TOKEN_ADAPTERS;
|
|
44
|
+
return DATA_ADAPTERS;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function getReturnAdapterIds({ folksTokenId, destFolksChainId, network }: ReceiveTokenMessageAdapterParams) {
|
|
48
|
+
if (isHubChain(destFolksChainId, network)) return HUB_ADAPTERS;
|
|
49
|
+
if (isCircleToken(folksTokenId)) return TOKEN_ADAPTERS;
|
|
50
|
+
return DATA_ADAPTERS;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function getSupportedMessageAdapters(params: MessageAdapterParams) {
|
|
54
|
+
const { messageAdapterParamType } = params;
|
|
55
|
+
|
|
56
|
+
switch (messageAdapterParamType) {
|
|
57
|
+
case MessageAdapterParamsType.SendToken:
|
|
58
|
+
return {
|
|
59
|
+
adapterIds: getAdapterIds(params),
|
|
60
|
+
returnAdapterIds: [AdapterType.HUB],
|
|
61
|
+
};
|
|
62
|
+
case MessageAdapterParamsType.ReceiveToken:
|
|
63
|
+
return {
|
|
64
|
+
adapterIds: getAdapterIds(params),
|
|
65
|
+
returnAdapterIds: getReturnAdapterIds(params),
|
|
66
|
+
};
|
|
67
|
+
case MessageAdapterParamsType.Data:
|
|
68
|
+
return {
|
|
69
|
+
adapterIds: getAdapterIds(params),
|
|
70
|
+
returnAdapterIds: [AdapterType.HUB],
|
|
71
|
+
};
|
|
72
|
+
default:
|
|
73
|
+
return exhaustiveCheck(messageAdapterParamType);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
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/bytes.js";
|
|
6
|
+
import { ChainType } from "../types/chain.js";
|
|
7
|
+
|
|
8
|
+
import type { AddressType, EvmAddress, GenericAddress } from "../types/address.js";
|
|
9
|
+
import type { AccountId } from "../types/lending.js";
|
|
10
|
+
|
|
11
|
+
export function getRandomGenericAddress(): GenericAddress {
|
|
12
|
+
return pad(privateKeyToAccount(generatePrivateKey()).address, {
|
|
13
|
+
size: BYTES32_LENGTH,
|
|
14
|
+
}).toLowerCase() as GenericAddress;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function isGenericAddress(address: GenericAddress): boolean {
|
|
18
|
+
return address.length === 64 + 2;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function isAccountId(accountId: AccountId): boolean {
|
|
22
|
+
return accountId.length === 64 + 2;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function convertToGenericAddress<T extends ChainType>(
|
|
26
|
+
address: AddressType<T>,
|
|
27
|
+
fromChainType: ChainType,
|
|
28
|
+
): GenericAddress {
|
|
29
|
+
switch (fromChainType) {
|
|
30
|
+
case ChainType.EVM:
|
|
31
|
+
return pad(address as EvmAddress, {
|
|
32
|
+
size: BYTES32_LENGTH,
|
|
33
|
+
}).toLowerCase() as GenericAddress;
|
|
34
|
+
default:
|
|
35
|
+
return exhaustiveCheck(fromChainType);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function convertFromGenericAddress<T extends ChainType>(
|
|
40
|
+
address: GenericAddress,
|
|
41
|
+
toChainType: ChainType,
|
|
42
|
+
): AddressType<T> {
|
|
43
|
+
switch (toChainType) {
|
|
44
|
+
case ChainType.EVM:
|
|
45
|
+
return getAddress(sliceHex(address, BYTES32_LENGTH - EVM_ADDRESS_BYTES_LENGTH)) as EvmAddress;
|
|
46
|
+
default:
|
|
47
|
+
return exhaustiveCheck(toChainType);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { bytesToHex, pad, toHex } from "viem";
|
|
2
|
+
|
|
3
|
+
import { BYTES32_LENGTH } from "../constants/bytes.js";
|
|
4
|
+
|
|
5
|
+
import type { AccountId, LoanId } from "../types/lending.js";
|
|
6
|
+
import type { Hex } from "viem";
|
|
7
|
+
|
|
8
|
+
export function getEmptyBytes(length: number): string {
|
|
9
|
+
return pad("0x", { size: length });
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function getAccountIdBytes(accountId: string): AccountId {
|
|
13
|
+
return pad(toHex(Buffer.from(accountId)), {
|
|
14
|
+
size: BYTES32_LENGTH,
|
|
15
|
+
}) as AccountId;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function convertNumberToBytes(num: number | bigint, length: number): Hex {
|
|
19
|
+
// insert 0s at the beginning if data is smaller than length bytes
|
|
20
|
+
const buf = Buffer.alloc(length, 0);
|
|
21
|
+
|
|
22
|
+
// convert num to bytes
|
|
23
|
+
const hex = num.toString(16);
|
|
24
|
+
const isEven = hex.length % 2 === 0;
|
|
25
|
+
const bytes = Buffer.from(isEven ? hex : "0" + hex, "hex");
|
|
26
|
+
|
|
27
|
+
// write bytes to fixed length buf
|
|
28
|
+
bytes.copy(buf, buf.length - bytes.length);
|
|
29
|
+
return toHex(buf);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function convertStringToBytes(str: string): Hex {
|
|
33
|
+
return toHex("0x" + Buffer.from(str).toString("hex"));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function convertBooleanToByte(bool: boolean): Hex {
|
|
37
|
+
return bool ? "0x01" : "0x00";
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function getRandomBytes(length: number): Hex {
|
|
41
|
+
return bytesToHex(crypto.getRandomValues(new Uint8Array(length)));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function generateLoanId(): LoanId {
|
|
45
|
+
return getRandomBytes(BYTES32_LENGTH) as LoanId;
|
|
46
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { getEvmSignerAddress } from "../../chains/evm/common/utils/chain.js";
|
|
2
|
+
import { getHubChainAdapterAddress, isHubChain } from "../../chains/evm/hub/utils/chain.js";
|
|
3
|
+
import { exhaustiveCheck } from "../../utils/exhaustive-check.js";
|
|
4
|
+
import { FOLKS_CHAIN, SPOKE_CHAIN } from "../constants/chain.js";
|
|
5
|
+
import { ChainType } from "../types/chain.js";
|
|
6
|
+
|
|
7
|
+
import { convertToGenericAddress } from "./address.js";
|
|
8
|
+
|
|
9
|
+
import type { GenericAddress } from "../types/address.js";
|
|
10
|
+
import type { FolksChain, FolksChainId, NetworkType, SpokeChain } from "../types/chain.js";
|
|
11
|
+
import type { FolksChainSigner } from "../types/core.js";
|
|
12
|
+
import type { AdapterType } from "../types/message.js";
|
|
13
|
+
import type { FolksTokenId, SpokeTokenData } from "../types/token.js";
|
|
14
|
+
|
|
15
|
+
export function getFolksChain(folksChainId: FolksChainId, network: NetworkType): FolksChain {
|
|
16
|
+
const folksChain = FOLKS_CHAIN[network][folksChainId];
|
|
17
|
+
if (!folksChain) throw new Error(`Folks Chain not found for folksChainId: ${folksChainId}`);
|
|
18
|
+
|
|
19
|
+
return folksChain;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function getFolksChainsByNetwork(network: NetworkType): Array<FolksChain> {
|
|
23
|
+
return Object.values(FOLKS_CHAIN[network]);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function getFolksChainIdsByNetwork(networkType: NetworkType): Array<FolksChainId> {
|
|
27
|
+
return getFolksChainsByNetwork(networkType).map((folksChain) => folksChain.folksChainId);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function isSpokeChainSupported(folksChainId: FolksChainId, network: NetworkType): boolean {
|
|
31
|
+
return SPOKE_CHAIN[network][folksChainId] !== undefined;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function assertSpokeChainSupported(folksChainId: FolksChainId, network: NetworkType) {
|
|
35
|
+
if (!isSpokeChainSupported(folksChainId, network))
|
|
36
|
+
throw new Error(`Spoke chain is not supported for folksChainId: ${folksChainId}`);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function getSpokeChain(folksChainId: FolksChainId, network: NetworkType): SpokeChain {
|
|
40
|
+
const spokeChain = SPOKE_CHAIN[network][folksChainId];
|
|
41
|
+
if (!spokeChain) throw new Error(`Spoke chain not found for folksChainId: ${folksChainId}`);
|
|
42
|
+
|
|
43
|
+
return spokeChain;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function doesSpokeSupportFolksToken(spokeChain: SpokeChain, folksTokenId: FolksTokenId): boolean {
|
|
47
|
+
return spokeChain.tokens[folksTokenId] !== undefined;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function getSpokeTokenData(spokeChain: SpokeChain, folksTokenId: FolksTokenId): SpokeTokenData {
|
|
51
|
+
const tokenData = spokeChain.tokens[folksTokenId];
|
|
52
|
+
if (!tokenData) throw new Error(`Spoke Token not found for folksTokenId: ${folksTokenId}`);
|
|
53
|
+
|
|
54
|
+
return tokenData;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function isFolksTokenSupported(
|
|
58
|
+
folksTokenId: FolksTokenId,
|
|
59
|
+
folksChainId: FolksChainId,
|
|
60
|
+
network: NetworkType,
|
|
61
|
+
): boolean {
|
|
62
|
+
const spokeChain = getSpokeChain(folksChainId, network);
|
|
63
|
+
return doesSpokeSupportFolksToken(spokeChain, folksTokenId);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function assertSpokeChainSupportFolksToken(
|
|
67
|
+
folksChainId: FolksChainId,
|
|
68
|
+
folksTokenId: FolksTokenId,
|
|
69
|
+
network: NetworkType,
|
|
70
|
+
) {
|
|
71
|
+
if (!isFolksTokenSupported(folksTokenId, folksChainId, network))
|
|
72
|
+
throw new Error(`Folks Token ${folksTokenId} is not supported on Folks Chain ${folksChainId}`);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export function getSpokeChainAdapterAddress(
|
|
76
|
+
folksChainId: FolksChainId,
|
|
77
|
+
network: NetworkType,
|
|
78
|
+
adapterType: AdapterType,
|
|
79
|
+
): GenericAddress {
|
|
80
|
+
const spokeChain = getSpokeChain(folksChainId, network);
|
|
81
|
+
const adapterAddress = spokeChain.adapters[adapterType];
|
|
82
|
+
if (adapterAddress) return adapterAddress;
|
|
83
|
+
throw new Error(`Adapter ${adapterType} not found for spoke chain ${folksChainId}`);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export function getAdapterAddress(folksChainId: FolksChainId, network: NetworkType, adapterType: AdapterType) {
|
|
87
|
+
if (isHubChain(folksChainId, network)) return getHubChainAdapterAddress(network, adapterType);
|
|
88
|
+
return getSpokeChainAdapterAddress(folksChainId, network, adapterType);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export function getSignerGenericAddress(folksChainSigner: FolksChainSigner): GenericAddress {
|
|
92
|
+
const chainType = folksChainSigner.chainType;
|
|
93
|
+
switch (chainType) {
|
|
94
|
+
case ChainType.EVM:
|
|
95
|
+
return convertToGenericAddress(getEvmSignerAddress(folksChainSigner.signer), chainType);
|
|
96
|
+
default:
|
|
97
|
+
return exhaustiveCheck(chainType);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export function assertHubChainSelected(folksChainId: FolksChainId, network: NetworkType) {
|
|
102
|
+
if (!isHubChain(folksChainId, network)) throw new Error(`Wrong chain selected: ${folksChainId}. Expected Hub chain`);
|
|
103
|
+
}
|