@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,124 @@
|
|
|
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(periodNumber: bigint, offset: bigint, length: bigint): bigint {
|
|
12
|
+
return (periodNumber + BigInt(1)) * length - offset;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function calcDepositInterestIndex(dirt1: Dnum, diit1: Dnum, latestUpdate: bigint): Dnum {
|
|
16
|
+
const dt = BigInt(unixTime()) - latestUpdate;
|
|
17
|
+
return dn.mul(
|
|
18
|
+
diit1,
|
|
19
|
+
dn.add(
|
|
20
|
+
dn.from(1, 18),
|
|
21
|
+
dn.div(dn.mul(dirt1, dt, { rounding: "ROUND_DOWN" }), SECONDS_IN_YEAR, {
|
|
22
|
+
rounding: "ROUND_DOWN",
|
|
23
|
+
}),
|
|
24
|
+
),
|
|
25
|
+
{ rounding: "ROUND_DOWN" },
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function calcBorrowInterestIndex(birt1: Dnum, biit1: Dnum, latestUpdate: bigint): Dnum {
|
|
30
|
+
const dt = BigInt(unixTime()) - latestUpdate;
|
|
31
|
+
return dn.mul(
|
|
32
|
+
biit1,
|
|
33
|
+
expBySquaring(dn.add(dn.from(1, 18), dn.div(birt1, SECONDS_IN_YEAR, { rounding: "ROUND_DOWN" })), dt),
|
|
34
|
+
{ rounding: "ROUND_DOWN" },
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function calcRewardIndex(used: bigint, ma: bigint, rit1: Dnum, rs: Dnum, latestUpdate: bigint): Dnum {
|
|
39
|
+
if (used <= ma) return rit1;
|
|
40
|
+
const dt = BigInt(unixTime()) - latestUpdate;
|
|
41
|
+
return dn.add(
|
|
42
|
+
rit1,
|
|
43
|
+
dn.div(dn.mul(rs, dt, { rounding: "ROUND_DOWN" }), used, {
|
|
44
|
+
rounding: "ROUND_DOWN",
|
|
45
|
+
}),
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function toFAmount(underlyingAmount: bigint, diit: Dnum): bigint {
|
|
50
|
+
const [fAmount] = dn.div([underlyingAmount, 0], diit, { rounding: "ROUND_DOWN" });
|
|
51
|
+
return fAmount;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export function toUnderlyingAmount(fAmount: bigint, diit: Dnum): bigint {
|
|
55
|
+
const [underlyingAmount] = dn.mul([fAmount, 0], diit, { rounding: "ROUND_DOWN" });
|
|
56
|
+
return underlyingAmount;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function calcAssetDollarValue(amount: bigint, tokenPrice: Dnum, tokenDecimals: number): Dnum {
|
|
60
|
+
return dn.mul([amount, tokenDecimals], tokenPrice, {
|
|
61
|
+
rounding: "ROUND_DOWN",
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function calcCollateralAssetLoanValue(
|
|
66
|
+
amount: bigint,
|
|
67
|
+
tokenPrice: Dnum,
|
|
68
|
+
tokenDecimals: number,
|
|
69
|
+
collateralFactor: Dnum,
|
|
70
|
+
): Dnum {
|
|
71
|
+
return dn.mul(calcAssetDollarValue(amount, tokenPrice, tokenDecimals), collateralFactor, { rounding: "ROUND_DOWN" });
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function calcBorrowAssetLoanValue(
|
|
75
|
+
amount: bigint,
|
|
76
|
+
tokenPrice: Dnum,
|
|
77
|
+
tokenDecimals: number,
|
|
78
|
+
borrowFactor: Dnum,
|
|
79
|
+
): Dnum {
|
|
80
|
+
return dn.mul(calcAssetDollarValue(amount, tokenPrice, tokenDecimals), borrowFactor, { rounding: "ROUND_UP" });
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export function calcBorrowBalance(bbtn1: bigint, biit: Dnum, biitn1: Dnum): bigint {
|
|
84
|
+
const [borrowBalance] = dn.mul([bbtn1, 0], dn.div(biit, biitn1, { rounding: "ROUND_UP" }), {
|
|
85
|
+
rounding: "ROUND_UP",
|
|
86
|
+
});
|
|
87
|
+
return borrowBalance;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export function calcStableInterestRate(bbt: bigint, amount: bigint, sbirtn1: Dnum, sbirt1: Dnum): Dnum {
|
|
91
|
+
return dn.div(dn.add(dn.mul(sbirtn1, [bbt, 0]), dn.mul(sbirt1, [amount, 0])), dn.add([bbt, 0], [amount, 0]));
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export function calcLtvRatio(totalBorrowBalanceValue: Dnum, totalCollateralBalanceValue: Dnum): Dnum {
|
|
95
|
+
const [, decimals] = totalBorrowBalanceValue;
|
|
96
|
+
if (dn.equal(totalCollateralBalanceValue, 0)) return dn.from(0, decimals);
|
|
97
|
+
return dn.div(totalBorrowBalanceValue, totalCollateralBalanceValue, {
|
|
98
|
+
rounding: "ROUND_UP",
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export function calcBorrowUtilisationRatio(
|
|
103
|
+
totalEffectiveBorrowBalanceValue: Dnum,
|
|
104
|
+
totalEffectiveCollateralBalanceValue: Dnum,
|
|
105
|
+
): Dnum {
|
|
106
|
+
const [, decimals] = totalEffectiveBorrowBalanceValue;
|
|
107
|
+
if (dn.equal(totalEffectiveCollateralBalanceValue, 0)) return dn.from(0, decimals);
|
|
108
|
+
return dn.div(totalEffectiveBorrowBalanceValue, totalEffectiveCollateralBalanceValue, { rounding: "ROUND_UP" });
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export function calcLiquidationMargin(
|
|
112
|
+
totalEffectiveBorrowBalanceValue: Dnum,
|
|
113
|
+
totalEffectiveCollateralBalanceValue: Dnum,
|
|
114
|
+
): Dnum {
|
|
115
|
+
const [, decimals] = totalEffectiveBorrowBalanceValue;
|
|
116
|
+
if (dn.equal(totalEffectiveCollateralBalanceValue, 0)) return dn.from(0, decimals);
|
|
117
|
+
return dn.div(
|
|
118
|
+
dn.sub(totalEffectiveCollateralBalanceValue, totalEffectiveBorrowBalanceValue),
|
|
119
|
+
totalEffectiveCollateralBalanceValue,
|
|
120
|
+
{
|
|
121
|
+
rounding: "ROUND_DOWN",
|
|
122
|
+
},
|
|
123
|
+
);
|
|
124
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { CCIP_DATA, WORMHOLE_DATA } from "../constants/gmp.js";
|
|
2
|
+
|
|
3
|
+
import type { FolksChainId } from "../types/chain.js";
|
|
4
|
+
import type { CCIPData, WormholeData } from "../types/gmp.js";
|
|
5
|
+
|
|
6
|
+
export function getWormholeData(folksChainId: FolksChainId): WormholeData {
|
|
7
|
+
const wormholeData = WORMHOLE_DATA[folksChainId];
|
|
8
|
+
if (wormholeData) return wormholeData;
|
|
9
|
+
throw new Error(`Wormhole data not found for folksChainId: ${folksChainId}`);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function getCcipData(folksChainId: FolksChainId): CCIPData {
|
|
13
|
+
const ccipData = CCIP_DATA[folksChainId];
|
|
14
|
+
if (ccipData) return ccipData;
|
|
15
|
+
throw new Error(`CCIP data not found for folksChainId: ${folksChainId}`);
|
|
16
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import * as dn from "dnum";
|
|
2
|
+
|
|
3
|
+
import type { Dnum } from "dnum";
|
|
4
|
+
|
|
5
|
+
export const SECONDS_IN_YEAR = BigInt(365 * 24 * 60 * 60);
|
|
6
|
+
export const HOURS_IN_YEAR = BigInt(365 * 24);
|
|
7
|
+
|
|
8
|
+
export function unixTime(): number {
|
|
9
|
+
return Math.floor(Date.now() / 1000);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function expBySquaring(x: Dnum, n: bigint): Dnum {
|
|
13
|
+
const [, decimals] = x;
|
|
14
|
+
const one = dn.from(1, decimals);
|
|
15
|
+
|
|
16
|
+
if (n === BigInt(0)) return one;
|
|
17
|
+
|
|
18
|
+
let y = one;
|
|
19
|
+
while (n > BigInt(1)) {
|
|
20
|
+
if (n % BigInt(2)) {
|
|
21
|
+
y = dn.mul(x, y, { rounding: "ROUND_DOWN" });
|
|
22
|
+
n = (n - BigInt(1)) / BigInt(2);
|
|
23
|
+
} else {
|
|
24
|
+
n = n / BigInt(2);
|
|
25
|
+
}
|
|
26
|
+
x = dn.mul(x, x, { rounding: "ROUND_DOWN" });
|
|
27
|
+
}
|
|
28
|
+
return dn.mul(x, y, { rounding: "ROUND_DOWN" });
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function compound(rate: Dnum, period: bigint): Dnum {
|
|
32
|
+
const [, decimals] = rate;
|
|
33
|
+
const one = dn.from(1, decimals);
|
|
34
|
+
return dn.sub(expBySquaring(dn.add(one, dn.div(rate, period)), period), one);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function compoundEverySecond(rate: Dnum): Dnum {
|
|
38
|
+
return compound(rate, SECONDS_IN_YEAR);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function compoundEveryHour(rate: Dnum): Dnum {
|
|
42
|
+
return compound(rate, HOURS_IN_YEAR);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export const bigIntMax = (...args: Array<bigint>) => args.reduce((m, e) => (e > m ? e : m));
|
|
46
|
+
export const bigIntMin = (...args: Array<bigint>) => args.reduce((m, e) => (e < m ? e : m));
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import {
|
|
2
|
+
buildEvmMessageToSend,
|
|
3
|
+
estimateEvmCcipDataGasLimit,
|
|
4
|
+
estimateEvmWormholeDataGasLimit,
|
|
5
|
+
getSendTokenStateOverride,
|
|
6
|
+
} from "../../chains/evm/common/utils/message.js";
|
|
7
|
+
import { getHubChainAdapterAddress } from "../../chains/evm/hub/utils/chain.js";
|
|
8
|
+
import { exhaustiveCheck } from "../../utils/exhaustive-check.js";
|
|
9
|
+
import { ChainType } from "../types/chain.js";
|
|
10
|
+
import { MessageDirection } from "../types/gmp.js";
|
|
11
|
+
import { Action, AdapterType } from "../types/message.js";
|
|
12
|
+
|
|
13
|
+
import { convertFromGenericAddress } from "./address.js";
|
|
14
|
+
import { getFolksChain, getSpokeChainAdapterAddress } from "./chain.js";
|
|
15
|
+
import { getCcipData, getWormholeData } from "./gmp.js";
|
|
16
|
+
|
|
17
|
+
import type { FolksChainId, NetworkType } from "../types/chain.js";
|
|
18
|
+
import type { FolksProvider } from "../types/core.js";
|
|
19
|
+
import type { MessageAdapters, MessageBuilderParams, MessageToSend, OptionalFeeParams } from "../types/message.js";
|
|
20
|
+
import type { Client as EVMProvider, StateOverride } from "viem";
|
|
21
|
+
|
|
22
|
+
export function buildMessageToSend(
|
|
23
|
+
chainType: ChainType,
|
|
24
|
+
messageToSendBuilderParams: MessageBuilderParams,
|
|
25
|
+
feeParams: OptionalFeeParams = {},
|
|
26
|
+
): MessageToSend {
|
|
27
|
+
switch (chainType) {
|
|
28
|
+
case ChainType.EVM: {
|
|
29
|
+
return buildEvmMessageToSend(messageToSendBuilderParams, feeParams);
|
|
30
|
+
}
|
|
31
|
+
default:
|
|
32
|
+
return exhaustiveCheck(chainType);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function getAdapterId(messageDirection: MessageDirection, adapters: MessageAdapters): AdapterType {
|
|
37
|
+
if (messageDirection === MessageDirection.SpokeToHub) return adapters.adapterId;
|
|
38
|
+
return adapters.returnAdapterId;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function getAdaptersAddresses(
|
|
42
|
+
messageDirection: MessageDirection,
|
|
43
|
+
sourceFolksChainId: FolksChainId,
|
|
44
|
+
destFolksChainId: FolksChainId,
|
|
45
|
+
network: NetworkType,
|
|
46
|
+
adapterId: AdapterType,
|
|
47
|
+
) {
|
|
48
|
+
if (messageDirection === MessageDirection.SpokeToHub)
|
|
49
|
+
return {
|
|
50
|
+
sourceAdapterAddress: getSpokeChainAdapterAddress(sourceFolksChainId, network, adapterId),
|
|
51
|
+
destAdapterAddress: getHubChainAdapterAddress(network, adapterId),
|
|
52
|
+
};
|
|
53
|
+
return {
|
|
54
|
+
sourceAdapterAddress: getHubChainAdapterAddress(network, adapterId),
|
|
55
|
+
destAdapterAddress: getSpokeChainAdapterAddress(destFolksChainId, network, adapterId),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export async function estimateAdapterReceiveGasLimit(
|
|
60
|
+
sourceFolksChainId: FolksChainId,
|
|
61
|
+
destFolksChainId: FolksChainId,
|
|
62
|
+
destFolksChainProvider: FolksProvider,
|
|
63
|
+
network: NetworkType,
|
|
64
|
+
messageDirection: MessageDirection,
|
|
65
|
+
messageBuilderParams: MessageBuilderParams,
|
|
66
|
+
receiverValue = BigInt(0),
|
|
67
|
+
returnGasLimit = BigInt(0),
|
|
68
|
+
) {
|
|
69
|
+
const destFolksChain = getFolksChain(destFolksChainId, network);
|
|
70
|
+
|
|
71
|
+
const adapterId = getAdapterId(messageDirection, messageBuilderParams.adapters);
|
|
72
|
+
const { sourceAdapterAddress, destAdapterAddress } = getAdaptersAddresses(
|
|
73
|
+
messageDirection,
|
|
74
|
+
sourceFolksChainId,
|
|
75
|
+
destFolksChainId,
|
|
76
|
+
network,
|
|
77
|
+
adapterId,
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
switch (destFolksChain.chainType) {
|
|
81
|
+
case ChainType.EVM: {
|
|
82
|
+
let stateOverride: StateOverride = [];
|
|
83
|
+
if (messageBuilderParams.action === Action.SendToken) {
|
|
84
|
+
stateOverride = stateOverride.concat(
|
|
85
|
+
getSendTokenStateOverride(
|
|
86
|
+
destFolksChainId,
|
|
87
|
+
messageBuilderParams.data.folksTokenId,
|
|
88
|
+
messageBuilderParams.extraArgs,
|
|
89
|
+
),
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
switch (adapterId) {
|
|
93
|
+
case AdapterType.WORMHOLE_DATA: {
|
|
94
|
+
const sourceWormholeChainId = getWormholeData(sourceFolksChainId).wormholeChainId;
|
|
95
|
+
const wormholeRelayer = convertFromGenericAddress(
|
|
96
|
+
getWormholeData(destFolksChainId).wormholeRelayer,
|
|
97
|
+
ChainType.EVM,
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
return await estimateEvmWormholeDataGasLimit(
|
|
101
|
+
// eslint-disable-next-line @typescript-eslint/non-nullable-type-assertion-style
|
|
102
|
+
destFolksChainProvider as EVMProvider,
|
|
103
|
+
messageBuilderParams,
|
|
104
|
+
receiverValue,
|
|
105
|
+
returnGasLimit,
|
|
106
|
+
sourceWormholeChainId,
|
|
107
|
+
wormholeRelayer,
|
|
108
|
+
destAdapterAddress,
|
|
109
|
+
sourceAdapterAddress,
|
|
110
|
+
stateOverride,
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
case AdapterType.WORMHOLE_CCTP: {
|
|
114
|
+
const { sourceAdapterAddress, destAdapterAddress } = getAdaptersAddresses(
|
|
115
|
+
messageDirection,
|
|
116
|
+
sourceFolksChainId,
|
|
117
|
+
destFolksChainId,
|
|
118
|
+
network,
|
|
119
|
+
AdapterType.WORMHOLE_DATA,
|
|
120
|
+
);
|
|
121
|
+
const sourceWormholeChainId = getWormholeData(sourceFolksChainId).wormholeChainId;
|
|
122
|
+
const wormholeRelayer = convertFromGenericAddress(
|
|
123
|
+
getWormholeData(destFolksChainId).wormholeRelayer,
|
|
124
|
+
ChainType.EVM,
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
// Due to ERC20 transfer and additional checks in the Wormhole CCTP Adapter
|
|
128
|
+
const increaseGasLimit = BigInt(150000);
|
|
129
|
+
const gasLimitEstimation = await estimateEvmWormholeDataGasLimit(
|
|
130
|
+
// eslint-disable-next-line @typescript-eslint/non-nullable-type-assertion-style
|
|
131
|
+
destFolksChainProvider as EVMProvider,
|
|
132
|
+
messageBuilderParams,
|
|
133
|
+
receiverValue,
|
|
134
|
+
returnGasLimit,
|
|
135
|
+
sourceWormholeChainId,
|
|
136
|
+
wormholeRelayer,
|
|
137
|
+
destAdapterAddress,
|
|
138
|
+
sourceAdapterAddress,
|
|
139
|
+
stateOverride,
|
|
140
|
+
);
|
|
141
|
+
return gasLimitEstimation + increaseGasLimit;
|
|
142
|
+
}
|
|
143
|
+
case AdapterType.HUB: {
|
|
144
|
+
return 0n;
|
|
145
|
+
}
|
|
146
|
+
case AdapterType.CCIP_DATA: {
|
|
147
|
+
const sourceCcipChainId = getCcipData(sourceFolksChainId).ccipChainId;
|
|
148
|
+
const ccipRouter = convertFromGenericAddress(getCcipData(destFolksChainId).ccipRouter, ChainType.EVM);
|
|
149
|
+
return await estimateEvmCcipDataGasLimit(
|
|
150
|
+
// eslint-disable-next-line @typescript-eslint/non-nullable-type-assertion-style
|
|
151
|
+
destFolksChainProvider as EVMProvider,
|
|
152
|
+
messageBuilderParams,
|
|
153
|
+
returnGasLimit,
|
|
154
|
+
sourceCcipChainId,
|
|
155
|
+
ccipRouter,
|
|
156
|
+
destAdapterAddress,
|
|
157
|
+
sourceAdapterAddress,
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
case AdapterType.CCIP_TOKEN: {
|
|
161
|
+
const { sourceAdapterAddress, destAdapterAddress } = getAdaptersAddresses(
|
|
162
|
+
messageDirection,
|
|
163
|
+
sourceFolksChainId,
|
|
164
|
+
destFolksChainId,
|
|
165
|
+
network,
|
|
166
|
+
AdapterType.CCIP_DATA,
|
|
167
|
+
);
|
|
168
|
+
const sourceCcipChainId = getCcipData(sourceFolksChainId).ccipChainId;
|
|
169
|
+
const ccipRouter = convertFromGenericAddress(getCcipData(destFolksChainId).ccipRouter, ChainType.EVM);
|
|
170
|
+
|
|
171
|
+
// Due to ERC20 transfer and additional checks in the CCIP Token Adapter
|
|
172
|
+
const increaseGasLimit = BigInt(150000);
|
|
173
|
+
const gasLimitEstimation = await estimateEvmCcipDataGasLimit(
|
|
174
|
+
// eslint-disable-next-line @typescript-eslint/non-nullable-type-assertion-style
|
|
175
|
+
destFolksChainProvider as EVMProvider,
|
|
176
|
+
messageBuilderParams,
|
|
177
|
+
returnGasLimit,
|
|
178
|
+
sourceCcipChainId,
|
|
179
|
+
ccipRouter,
|
|
180
|
+
destAdapterAddress,
|
|
181
|
+
sourceAdapterAddress,
|
|
182
|
+
);
|
|
183
|
+
return gasLimitEstimation + increaseGasLimit;
|
|
184
|
+
}
|
|
185
|
+
default:
|
|
186
|
+
return exhaustiveCheck(adapterId);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
default:
|
|
190
|
+
return exhaustiveCheck(destFolksChain.chainType);
|
|
191
|
+
}
|
|
192
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// === CORE ===
|
|
2
|
+
export { FolksCore } from "./xchain/core/folks-core.js";
|
|
3
|
+
|
|
4
|
+
// === MODULES ===
|
|
5
|
+
export { FolksAccount, FolksLoan, FolksOracle, FolksPool } from "./xchain/modules/index.js";
|
|
6
|
+
|
|
7
|
+
// === COMMON ===
|
|
8
|
+
export * from "./common/types/adapter.js";
|
|
9
|
+
export * from "./common/types/address.js";
|
|
10
|
+
export * from "./common/types/chain.js";
|
|
11
|
+
export * from "./common/types/core.js";
|
|
12
|
+
export * from "./common/types/gmp.js";
|
|
13
|
+
export * from "./common/types/lending.js";
|
|
14
|
+
export * from "./common/types/message.js";
|
|
15
|
+
export * from "./common/types/module.js";
|
|
16
|
+
export * from "./common/types/token.js";
|
|
17
|
+
|
|
18
|
+
export * from "./common/constants/bytes.js";
|
|
19
|
+
export * from "./common/constants/chain.js";
|
|
20
|
+
export * from "./common/constants/gmp.js";
|
|
21
|
+
export * from "./common/constants/message.js";
|
|
22
|
+
|
|
23
|
+
export { getSupportedMessageAdapters } from "./common/utils/adapter.js";
|
|
24
|
+
export { convertFromGenericAddress, convertToGenericAddress } from "./common/utils/address.js";
|
|
25
|
+
export { generateLoanId } from "./common/utils/bytes.js";
|
|
26
|
+
export { getAdapterAddress } from "./common/utils/chain.js";
|
|
27
|
+
export { getCcipData, getWormholeData } from "./common/utils/gmp.js";
|
|
28
|
+
|
|
29
|
+
// === HUB ===
|
|
30
|
+
export { isHubChain } from "./chains/evm/hub/utils/chain.js";
|
|
31
|
+
|
|
32
|
+
// === CHAINS ===
|
|
33
|
+
|
|
34
|
+
// - EVM
|
|
35
|
+
export * from "./chains/evm/common/constants/chain.js";
|
|
36
|
+
|
|
37
|
+
export * from "./chains/evm/common/types/chain.js";
|
|
38
|
+
|
|
39
|
+
export { isEvmChainId } from "./chains/evm/common/utils/chain.js";
|
|
40
|
+
|
|
41
|
+
// - EVM: HUB
|
|
42
|
+
export * from "./chains/evm/hub/types/account.js";
|
|
43
|
+
export * from "./chains/evm/hub/types/chain.js";
|
|
44
|
+
export * from "./chains/evm/hub/types/loan.js";
|
|
45
|
+
export * from "./chains/evm/hub/types/oracle.js";
|
|
46
|
+
export * from "./chains/evm/hub/types/pool.js";
|
|
47
|
+
export * from "./chains/evm/hub/types/token.js";
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { initProviders } from "../../chains/evm/common/utils/provider.js";
|
|
2
|
+
import { getHubChain } from "../../chains/evm/hub/utils/chain.js";
|
|
3
|
+
import { ChainType } from "../../common/types/chain.js";
|
|
4
|
+
import { getFolksChain } from "../../common/utils/chain.js";
|
|
5
|
+
import { exhaustiveCheck } from "../../utils/exhaustive-check.js";
|
|
6
|
+
|
|
7
|
+
import type { FolksChainId, FolksChain, NetworkType } from "../../common/types/chain.js";
|
|
8
|
+
import type {
|
|
9
|
+
FolksCoreProvider,
|
|
10
|
+
FolksSigner,
|
|
11
|
+
FolksCoreConfig,
|
|
12
|
+
FolksProviderType,
|
|
13
|
+
FolksSignerType,
|
|
14
|
+
FolksProvider,
|
|
15
|
+
} from "../../common/types/core.js";
|
|
16
|
+
import type { Client as EVMProvider } from "viem";
|
|
17
|
+
|
|
18
|
+
export class FolksCore {
|
|
19
|
+
private static instance: FolksCore | undefined;
|
|
20
|
+
private folksCoreProvider: FolksCoreProvider;
|
|
21
|
+
|
|
22
|
+
private selectedNetwork: NetworkType;
|
|
23
|
+
private folksSigner?: FolksSigner;
|
|
24
|
+
|
|
25
|
+
private constructor(folksCoreConfig: FolksCoreConfig) {
|
|
26
|
+
this.selectedNetwork = folksCoreConfig.network;
|
|
27
|
+
this.folksCoreProvider = { evm: {} as Record<FolksChainId, EVMProvider> };
|
|
28
|
+
this.folksCoreProvider.evm = initProviders(folksCoreConfig.provider.evm);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
static init(folksCoreConfig: FolksCoreConfig): FolksCore {
|
|
32
|
+
if (FolksCore.instance) throw new Error("FolksCore is already initialized");
|
|
33
|
+
FolksCore.instance = new FolksCore(folksCoreConfig);
|
|
34
|
+
return FolksCore.instance;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
static isInitialized(): boolean {
|
|
38
|
+
return !!FolksCore.instance;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
static getInstance(): FolksCore {
|
|
42
|
+
if (FolksCore.instance) return FolksCore.instance;
|
|
43
|
+
throw new Error("FolksCore is not initialized");
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
static getProvider<T extends ChainType>(folksChainId: FolksChainId): FolksProviderType<T> {
|
|
47
|
+
const folksChain = getFolksChain(folksChainId, this.getSelectedNetwork());
|
|
48
|
+
switch (folksChain.chainType) {
|
|
49
|
+
case ChainType.EVM:
|
|
50
|
+
return FolksCore.getEVMProvider(folksChainId) as FolksProviderType<T>;
|
|
51
|
+
default:
|
|
52
|
+
return exhaustiveCheck(folksChain.chainType);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
static getFolksSigner() {
|
|
57
|
+
const instance = this.getInstance();
|
|
58
|
+
if (!instance.folksSigner) throw new Error("FolksSigner is not initialized");
|
|
59
|
+
|
|
60
|
+
return instance.folksSigner;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
static getSigner<T extends ChainType>(): FolksSignerType<T> {
|
|
64
|
+
const { signer } = this.getFolksSigner();
|
|
65
|
+
|
|
66
|
+
return signer as FolksSignerType<T>;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
static getSelectedFolksChain(): FolksChain {
|
|
70
|
+
const { folksChainId } = this.getFolksSigner();
|
|
71
|
+
|
|
72
|
+
return getFolksChain(folksChainId, this.getSelectedNetwork());
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
static getSelectedNetwork() {
|
|
76
|
+
const instance = this.getInstance();
|
|
77
|
+
return instance.selectedNetwork;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
static getHubProvider(): EVMProvider {
|
|
81
|
+
const instance = this.getInstance();
|
|
82
|
+
const hubFolksChainId = getHubChain(instance.selectedNetwork).folksChainId;
|
|
83
|
+
|
|
84
|
+
const hubProvider = instance.folksCoreProvider.evm[hubFolksChainId];
|
|
85
|
+
if (!hubProvider) throw new Error(`Hub Provider has not been initialized`);
|
|
86
|
+
|
|
87
|
+
return hubProvider;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
static setProvider(folksChainId: FolksChainId, provider: FolksProvider) {
|
|
91
|
+
const instance = this.getInstance();
|
|
92
|
+
const folksChain = getFolksChain(folksChainId, this.getSelectedNetwork());
|
|
93
|
+
switch (folksChain.chainType) {
|
|
94
|
+
case ChainType.EVM:
|
|
95
|
+
// eslint-disable-next-line @typescript-eslint/non-nullable-type-assertion-style -- in the future FolksProvider will contain more than just EVMProvider
|
|
96
|
+
instance.folksCoreProvider.evm[folksChainId] = provider as EVMProvider;
|
|
97
|
+
break;
|
|
98
|
+
default:
|
|
99
|
+
return exhaustiveCheck(folksChain.chainType);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
static setNetwork(network: NetworkType) {
|
|
104
|
+
const instance = this.getInstance();
|
|
105
|
+
instance.selectedNetwork = network;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
static setFolksSigner(folksSigner: FolksSigner) {
|
|
109
|
+
const instance = this.getInstance();
|
|
110
|
+
const folksChain = getFolksChain(folksSigner.folksChainId, this.getSelectedNetwork());
|
|
111
|
+
|
|
112
|
+
switch (folksChain.chainType) {
|
|
113
|
+
case ChainType.EVM:
|
|
114
|
+
instance.folksSigner = folksSigner;
|
|
115
|
+
break;
|
|
116
|
+
default:
|
|
117
|
+
return exhaustiveCheck(folksChain.chainType);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
static getEVMProvider(folksChainId: FolksChainId): EVMProvider {
|
|
122
|
+
const instance = this.getInstance();
|
|
123
|
+
const evmProvider = instance.folksCoreProvider.evm[folksChainId];
|
|
124
|
+
if (!evmProvider) throw new Error(`EVM Provider not found for folksChainId: ${folksChainId}`);
|
|
125
|
+
|
|
126
|
+
return evmProvider;
|
|
127
|
+
}
|
|
128
|
+
}
|