@swapkit/helpers 1.0.0-rc.99 → 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/dist/index.js +2 -2441
- package/dist/index.js.map +24 -23
- package/package.json +7 -14
- package/src/helpers/__tests__/asset.test.ts +40 -8
- package/src/helpers/__tests__/memo.test.ts +55 -74
- package/src/helpers/__tests__/others.test.ts +5 -3
- package/src/helpers/asset.ts +80 -26
- package/src/helpers/derivationPath.ts +5 -4
- package/src/helpers/memo.ts +157 -46
- package/src/helpers/others.ts +27 -2
- package/src/helpers/validators.ts +8 -3
- package/src/helpers/web3wallets.ts +34 -4
- package/src/modules/__tests__/assetValue.test.ts +183 -114
- package/src/modules/assetValue.ts +143 -101
- package/src/modules/bigIntArithmetics.ts +2 -6
- package/src/modules/requestClient.ts +22 -12
- package/src/modules/swapKitError.ts +77 -21
- package/src/types/chains.ts +12 -18
- package/src/types/commonTypes.ts +4 -0
- package/src/types/derivationPath.ts +4 -2
- package/src/types/errors/apiV1.ts +0 -0
- package/src/types/index.ts +2 -0
- package/src/types/network.ts +5 -3
- package/src/types/quotes.ts +391 -0
- package/src/types/radix.ts +14 -0
- package/src/types/sdk.ts +87 -5
- package/src/types/tokens.ts +18 -14
- package/src/types/wallet.ts +44 -19
package/dist/index.js.map
CHANGED
|
@@ -1,30 +1,31 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/types/abis/erc20.ts", "../src/types/abis/mayaEvmVaults.ts", "../src/types/abis/tcEthVault.ts", "../src/types/network.ts", "../src/types/chains.ts", "../src/types/commonTypes.ts", "../src/types/derivationPath.ts", "../src/types/wallet.ts", "../src/types/sdk.ts", "../src/
|
|
3
|
+
"sources": ["../src/types/abis/erc20.ts", "../src/types/abis/mayaEvmVaults.ts", "../src/types/abis/tcEthVault.ts", "../src/types/network.ts", "../src/types/chains.ts", "../src/types/commonTypes.ts", "../src/types/derivationPath.ts", "../src/types/wallet.ts", "../src/types/sdk.ts", "../src/types/quotes.ts", "../src/modules/swapKitError.ts", "../src/helpers/validators.ts", "../src/modules/bigIntArithmetics.ts", "../src/modules/assetValue.ts", "../src/modules/requestClient.ts", "../src/helpers/asset.ts", "../src/helpers/derivationPath.ts", "../src/helpers/liquidity.ts", "../src/helpers/memo.ts", "../src/helpers/others.ts", "../src/helpers/web3wallets.ts", "../src/modules/swapKitNumber.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"export const erc20ABI = [\n { inputs: [], stateMutability: \"nonpayable\", type: \"constructor\" },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"owner\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"spender\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"value\", type: \"uint256\" },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"from\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"value\", type: \"uint256\" },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"\", type: \"address\" },\n { internalType: \"address\", name: \"\", type: \"address\" },\n ],\n name: \"allowance\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"spender\", type: \"address\" },\n { internalType: \"uint256\", name: \"value\", type: \"uint256\" },\n ],\n name: \"approve\",\n outputs: [{ internalType: \"bool\", name: \"success\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n name: \"balanceOf\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"value\", type: \"uint256\" },\n ],\n name: \"transfer\",\n outputs: [{ internalType: \"bool\", name: \"success\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"from\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"value\", type: \"uint256\" },\n ],\n name: \"transferFrom\",\n outputs: [{ internalType: \"bool\", name: \"success\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n];\n",
|
|
6
|
-
"export const MayaEthereumVaultAbi = [\n { inputs: [], stateMutability: \"nonpayable\", type: \"constructor\" },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"Deposit\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"oldVault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newVault\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferAllowance\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"vault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferOut\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"vault\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"target\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"address\", name: \"finalAsset\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amountOutMin\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferOutAndCall\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"oldVault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newVault\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n indexed: false,\n internalType: \"struct MAYAChain_Router.Coin[]\",\n name: \"coins\",\n type: \"tuple[]\",\n },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"VaultTransfer\",\n type: \"event\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"deposit\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n { internalType: \"uint256\", name: \"expiration\", type: \"uint256\" },\n ],\n name: \"depositWithExpiry\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"router\", type: \"address\" },\n { internalType: \"address payable\", name: \"asgard\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n internalType: \"struct MAYAChain_Router.Coin[]\",\n name: \"coins\",\n type: \"tuple[]\",\n },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"returnVaultAssets\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"router\", type: \"address\" },\n { internalType: \"address\", name: \"newVault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferAllowance\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"to\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferOut\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"target\", type: \"address\" },\n { internalType: \"address\", name: \"finalToken\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"amountOutMin\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferOutAndCall\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n ],\n name: \"vaultAllowance\",\n outputs: [{ internalType: \"uint256\", name: \"amount\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n];\n\nexport const MayaArbitrumVaultAbi = [\n { inputs: [], stateMutability: \"nonpayable\", type: \"constructor\" },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"Deposit\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"oldVault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newVault\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferAllowance\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"vault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferOut\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"vault\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"target\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"address\", name: \"finalAsset\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amountOutMin\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferOutAndCall\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"oldVault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newVault\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n indexed: false,\n internalType: \"struct ArbRouter.Coin[]\",\n name: \"coins\",\n type: \"tuple[]\",\n },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"VaultTransfer\",\n type: \"event\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"deposit\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n { internalType: \"uint256\", name: \"expiration\", type: \"uint256\" },\n ],\n name: \"depositWithExpiry\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"router\", type: \"address\" },\n { internalType: \"address payable\", name: \"asgard\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n internalType: \"struct ArbRouter.Coin[]\",\n name: \"coins\",\n type: \"tuple[]\",\n },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"returnVaultAssets\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"router\", type: \"address\" },\n { internalType: \"address\", name: \"newVault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferAllowance\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"to\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferOut\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"target\", type: \"address\" },\n { internalType: \"address\", name: \"finalToken\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"amountOutMin\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferOutAndCall\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n ],\n name: \"vaultAllowance\",\n outputs: [{ internalType: \"uint256\", name: \"amount\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n];\n",
|
|
7
|
-
"export const TCEthereumVaultAbi = [\n {\n inputs: [{ internalType: \"address\", name: \"rune\", type: \"address\" }],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"Deposit\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"oldVault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newVault\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferAllowance\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"vault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferOut\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"vault\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"target\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"address\", name: \"finalAsset\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amountOutMin\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferOutAndCall\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"oldVault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newVault\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n indexed: false,\n internalType: \"struct THORChain_Router.Coin[]\",\n name: \"coins\",\n type: \"tuple[]\",\n },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"VaultTransfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"RUNE\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"deposit\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n { internalType: \"uint256\", name: \"expiration\", type: \"uint256\" },\n ],\n name: \"depositWithExpiry\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"router\", type: \"address\" },\n { internalType: \"address payable\", name: \"asgard\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n internalType: \"struct THORChain_Router.Coin[]\",\n name: \"coins\",\n type: \"tuple[]\",\n },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"returnVaultAssets\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"router\", type: \"address\" },\n { internalType: \"address\", name: \"newVault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferAllowance\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"to\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferOut\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"aggregator\", type: \"address\" },\n { internalType: \"address\", name: \"finalToken\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"amountOutMin\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferOutAndCall\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n ],\n name: \"vaultAllowance\",\n outputs: [{ internalType: \"uint256\", name: \"amount\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n];\n\nexport const TCAvalancheDepositABI = [\n { inputs: [], stateMutability: \"nonpayable\", type: \"constructor\" },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"Deposit\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"oldVault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newVault\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferAllowance\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"vault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferOut\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"vault\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"target\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"address\", name: \"finalAsset\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amountOutMin\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferOutAndCall\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"oldVault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newVault\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n indexed: false,\n internalType: \"struct AvaxRouter.Coin[]\",\n name: \"coins\",\n type: \"tuple[]\",\n },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"VaultTransfer\",\n type: \"event\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"deposit\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n { internalType: \"uint256\", name: \"expiration\", type: \"uint256\" },\n ],\n name: \"depositWithExpiry\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"router\", type: \"address\" },\n { internalType: \"address payable\", name: \"asgard\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n internalType: \"struct AvaxRouter.Coin[]\",\n name: \"coins\",\n type: \"tuple[]\",\n },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"returnVaultAssets\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"router\", type: \"address\" },\n { internalType: \"address\", name: \"newVault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferAllowance\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"to\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferOut\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"target\", type: \"address\" },\n { internalType: \"address\", name: \"finalToken\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"amountOutMin\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferOutAndCall\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n ],\n name: \"vaultAllowance\",\n outputs: [{ internalType: \"uint256\", name: \"amount\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n];\n\nexport const TCBscDepositABI = [\n { inputs: [], stateMutability: \"nonpayable\", type: \"constructor\" },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"Deposit\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"oldVault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newVault\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferAllowance\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"vault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferOut\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"vault\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"target\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"address\", name: \"finalAsset\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amountOutMin\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferOutAndCall\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"oldVault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newVault\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n indexed: false,\n internalType: \"struct THORChain_Router.Coin[]\",\n name: \"coins\",\n type: \"tuple[]\",\n },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"VaultTransfer\",\n type: \"event\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n { internalType: \"uint256\", name: \"expiration\", type: \"uint256\" },\n ],\n name: \"depositWithExpiry\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"router\", type: \"address\" },\n { internalType: \"address payable\", name: \"asgard\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n internalType: \"struct THORChain_Router.Coin[]\",\n name: \"coins\",\n type: \"tuple[]\",\n },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"returnVaultAssets\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"router\", type: \"address\" },\n { internalType: \"address\", name: \"newVault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferAllowance\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"to\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferOut\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"target\", type: \"address\" },\n { internalType: \"address\", name: \"finalToken\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"amountOutMin\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferOutAndCall\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n ],\n name: \"vaultAllowance\",\n outputs: [{ internalType: \"uint256\", name: \"amount\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n];\n",
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
"import type { Options } from \"ky\";\nimport ky from \"ky\";\n\nlet kyClient: typeof ky;\n\nexport const defaultRequestHeaders =\n typeof window !== \"undefined\"\n ? ({} as Record<string, string>)\n : { referrer: \"https://sk.thorswap.net\", referer: \"https://sk.thorswap.net\" };\n\nexport function setRequestClientConfig({ apiKey, ...config }: Options & { apiKey?: string }) {\n kyClient = ky.create({\n ...config,\n headers: { ...defaultRequestHeaders, ...config.headers, \"x-api-key\": apiKey },\n });\n}\n\nfunction getKyClient() {\n if (kyClient) return kyClient;\n kyClient = ky.create({ headers: defaultRequestHeaders });\n return kyClient;\n}\n\nexport const RequestClient = {\n get: <T>(url: string | URL | Request, options?: Options) =>\n getKyClient().get(url, options).json<T>(),\n post: <T>(url: string | URL | Request, options?: Options) =>\n getKyClient().post(url, options).json<T>(),\n};\n",
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
"import { SwapKitNumber } from \"../index.ts\";\nimport { BaseDecimal } from \"../types/chains.ts\";\n\ntype ShareParams<T extends {}> = T & {\n liquidityUnits: string;\n poolUnits: string;\n};\n\ntype PoolParams = {\n runeAmount: string;\n assetAmount: string;\n runeDepth: string;\n assetDepth: string;\n};\n\n/**\n * Ref: https://gitlab.com/thorchain/thornode/-/issues/657\n * share = (s * A * (2 * T^2 - 2 * T * s + s^2))/T^3\n * s = stakeUnits for member (after factoring in withdrawBasisPoints)\n * T = totalPoolUnits for pool\n * A = assetDepth to be withdrawn\n *\n * Formula:\n * share = (s * A * (2 * T^2 - 2 * T * s + s^2))/T^3\n * (part1 * (part2 - part3 + part4)) / part5\n */\nexport function getAsymmetricRuneShare({\n liquidityUnits,\n poolUnits,\n runeDepth,\n}: ShareParams<{ runeDepth: string }>) {\n const s = toTCSwapKitNumber(liquidityUnits);\n const T = toTCSwapKitNumber(poolUnits);\n const A = toTCSwapKitNumber(runeDepth);\n\n const part1 = s.mul(A);\n const part2 = T.mul(T).mul(2);\n const part3 = T.mul(s).mul(2);\n const part4 = s.mul(s);\n const part5 = T.mul(T).mul(T);\n\n const numerator = part1.mul(part2.sub(part3).add(part4));\n\n return numerator.div(part5);\n}\n\nexport function getAsymmetricAssetShare({\n liquidityUnits,\n poolUnits,\n assetDepth,\n}: ShareParams<{ assetDepth: string }>) {\n const s = toTCSwapKitNumber(liquidityUnits);\n const T = toTCSwapKitNumber(poolUnits);\n const A = toTCSwapKitNumber(assetDepth);\n\n const part1 = s.mul(A);\n const part2 = T.mul(T).mul(2);\n const part3 = T.mul(s).mul(2);\n const part4 = s.mul(s);\n const numerator = part1.mul(part2.sub(part3).add(part4));\n const part5 = T.mul(T).mul(T);\n\n return numerator.div(part5);\n}\n\nexport function getAsymmetricRuneWithdrawAmount({\n percent,\n runeDepth,\n liquidityUnits,\n poolUnits,\n}: ShareParams<{ percent: number; runeDepth: string }>) {\n return getAsymmetricRuneShare({ runeDepth, liquidityUnits, poolUnits }).mul(percent);\n}\n\nexport function getAsymmetricAssetWithdrawAmount({\n percent,\n assetDepth,\n liquidityUnits,\n poolUnits,\n}: ShareParams<{ percent: number; assetDepth: string }>) {\n return getAsymmetricAssetShare({ assetDepth, liquidityUnits, poolUnits }).mul(percent);\n}\n\nfunction toTCSwapKitNumber(value: string) {\n return SwapKitNumber.fromBigInt(BigInt(value), BaseDecimal.THOR);\n}\n\nexport function getSymmetricPoolShare({\n liquidityUnits,\n poolUnits,\n runeDepth,\n assetDepth,\n}: ShareParams<{\n runeDepth: string;\n assetDepth: string;\n}>) {\n return {\n assetAmount: toTCSwapKitNumber(assetDepth).mul(liquidityUnits).div(poolUnits),\n runeAmount: toTCSwapKitNumber(runeDepth).mul(liquidityUnits).div(poolUnits),\n };\n}\n\nexport function getSymmetricWithdraw({\n liquidityUnits,\n poolUnits,\n runeDepth,\n assetDepth,\n percent,\n}: ShareParams<{\n runeDepth: string;\n assetDepth: string;\n percent: number;\n}>) {\n return Object.fromEntries(\n Object.entries(getSymmetricPoolShare({ liquidityUnits, poolUnits, runeDepth, assetDepth })).map(\n ([name, value]) => [name, value.mul(percent)],\n ),\n );\n}\n\nexport function getEstimatedPoolShare({\n runeDepth,\n poolUnits,\n assetDepth,\n liquidityUnits,\n runeAmount,\n assetAmount,\n}: ShareParams<{\n runeAmount: string;\n assetAmount: string;\n runeDepth: string;\n assetDepth: string;\n}>) {\n const R = new SwapKitNumber({ value: runeDepth, decimal: 8 });\n const A = new SwapKitNumber({ value: assetDepth, decimal: 8 });\n const P = new SwapKitNumber({ value: poolUnits, decimal: 8 });\n const runeAddAmount = new SwapKitNumber({ value: runeAmount, decimal: 8 });\n const assetAddAmount = new SwapKitNumber({ value: assetAmount, decimal: 8 });\n\n // liquidityUnits = P * (r*A + a*R + 2*r*a) / (r*A + a*R + 2*R*A)\n const rA = runeAddAmount.mul(A);\n const aR = assetAddAmount.mul(R);\n const ra = runeAddAmount.mul(assetAddAmount);\n const RA = R.mul(A);\n const numerator = P.mul(rA.add(aR.add(ra.mul(2))));\n const denominator = rA.add(aR.add(RA.mul(2)));\n const liquidityUnitsAfterAdd = numerator.div(denominator);\n const estimatedLiquidityUnits = toTCSwapKitNumber(liquidityUnits).add(liquidityUnitsAfterAdd);\n\n if (liquidityUnitsAfterAdd.getBaseValue(\"number\") === 0) {\n return estimatedLiquidityUnits.div(P).getBaseValue(\"number\");\n }\n\n // get pool units after add\n const newPoolUnits = P.add(estimatedLiquidityUnits);\n\n return estimatedLiquidityUnits.div(newPoolUnits).getBaseValue(\"number\");\n}\n\nexport function getLiquiditySlippage({\n runeAmount,\n assetAmount,\n runeDepth,\n assetDepth,\n}: PoolParams) {\n if (runeAmount === \"0\" || assetAmount === \"0\" || runeDepth === \"0\" || assetDepth === \"0\")\n return 0;\n // formula: (t * R - T * r)/ (T*r + R*T)\n const R = toTCSwapKitNumber(runeDepth);\n const T = toTCSwapKitNumber(assetDepth);\n const assetAddAmount = toTCSwapKitNumber(assetAmount);\n const runeAddAmount = toTCSwapKitNumber(runeAmount);\n\n const numerator = assetAddAmount.mul(R).sub(T.mul(runeAddAmount));\n const denominator = T.mul(runeAddAmount).add(R.mul(T));\n\n // set absolute value of percent, no negative allowed\n return Math.abs(numerator.div(denominator).getBaseValue(\"number\"));\n}\n",
|
|
18
|
-
"import { Chain } from \"../types/chains\";\nimport { MemoType } from \"../types/sdk\";\n\nexport type ThornameRegisterParam = {\n name: string;\n chain: string;\n address: string;\n owner?: string;\n preferredAsset?: string;\n expiryBlock?: string;\n};\n\ntype WithChain<T extends {}> = T & { chain: Chain };\n\nexport type MemoOptions<T extends MemoType> = {\n [MemoType.BOND]: { address: string };\n [MemoType.LEAVE]: { address: string };\n [MemoType.CLOSE_LOAN]: { address: string; asset: string; minAmount?: string };\n [MemoType.OPEN_LOAN]: { address: string; asset: string; minAmount?: string };\n [MemoType.UNBOND]: { address: string; unbondAmount: number };\n [MemoType.DEPOSIT]: WithChain<{ symbol: string; address?: string; singleSide?: boolean }>;\n [MemoType.WITHDRAW]: WithChain<{\n ticker: string;\n symbol: string;\n basisPoints: number;\n targetAssetString?: string;\n singleSide?: boolean;\n }>;\n [MemoType.THORNAME_REGISTER]: Omit<ThornameRegisterParam, \"preferredAsset\" | \"expiryBlock\">;\n}[T];\n\nexport const getMemoFor = <T extends MemoType>(memoType: T, options: MemoOptions<T>) => {\n switch (memoType) {\n case MemoType.LEAVE:\n case MemoType.BOND: {\n const { address } = options as MemoOptions<MemoType.BOND>;\n return `${memoType}:${address}`;\n }\n\n case MemoType.UNBOND: {\n const { address, unbondAmount } = options as MemoOptions<MemoType.UNBOND>;\n return `${memoType}:${address}:${unbondAmount}`;\n }\n\n case MemoType.THORNAME_REGISTER: {\n const { name, chain, address, owner } = options as MemoOptions<MemoType.THORNAME_REGISTER>;\n return `${memoType}:${name}:${chain}:${address}${owner ? `:${owner}` : \"\"}`;\n }\n\n case MemoType.DEPOSIT: {\n const { chain, symbol, address, singleSide } = options as MemoOptions<MemoType.DEPOSIT>;\n\n const getPoolIdentifier = (chain: Chain, symbol: string): string => {\n switch (chain) {\n case Chain.Litecoin:\n return \"l\";\n case Chain.Dogecoin:\n return \"d\";\n case Chain.BitcoinCash:\n return \"c\";\n default:\n return `${chain}.${symbol}`;\n }\n };\n\n return singleSide\n ? `${memoType}:${chain}/${symbol}`\n : `${memoType}:${getPoolIdentifier(chain, symbol)}:${address || \"\"}`;\n }\n\n case MemoType.WITHDRAW: {\n const { chain, ticker, symbol, basisPoints, targetAssetString, singleSide } =\n options as MemoOptions<MemoType.WITHDRAW>;\n\n const shortenedSymbol =\n chain === \"ETH\" && ticker !== \"ETH\" ? `${ticker}-${symbol.slice(-3)}` : symbol;\n const target = !singleSide && targetAssetString ? `:${targetAssetString}` : \"\";\n const assetDivider = singleSide ? \"/\" : \".\";\n\n return `${memoType}:${chain}${assetDivider}${shortenedSymbol}:${basisPoints}${target}`;\n }\n\n case MemoType.OPEN_LOAN:\n case MemoType.CLOSE_LOAN: {\n const { asset, address } = options as MemoOptions<MemoType.OPEN_LOAN>;\n\n return `${memoType}:${asset}:${address}`; //:${minAmount ? `${minAmount}` : ''}:t:0`;\n }\n\n default:\n return \"\";\n }\n};\n",
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
"import { BaseDecimal } from \"../types/chains.ts\";\nimport type { SwapKitNumber } from \"./swapKitNumber.ts\";\n\ntype NumberPrimitivesType = {\n bigint: bigint;\n number: number;\n string: string;\n};\nexport type NumberPrimitives = bigint | number | string;\ntype InitialisationValueType = NumberPrimitives | BigIntArithmetics | SwapKitNumber;\n\ntype SKBigIntParams = InitialisationValueType | { decimal?: number; value: number | string };\ntype AllowedNumberTypes = \"bigint\" | \"number\" | \"string\";\n\nconst DEFAULT_DECIMAL = 8;\nconst toMultiplier = (decimal: number) => 10n ** BigInt(decimal);\nconst decimalFromMultiplier = (multiplier: bigint) =>\n Math.log10(Number.parseFloat(multiplier.toString()));\n\nexport function formatBigIntToSafeValue({\n value,\n bigIntDecimal = DEFAULT_DECIMAL,\n decimal = DEFAULT_DECIMAL,\n}: {\n value: bigint;\n bigIntDecimal?: number;\n decimal?: number;\n}) {\n if (decimal === 0) return value.toString();\n const isNegative = value < 0n;\n let valueString = value.toString().substring(isNegative ? 1 : 0);\n\n const padLength = decimal - (valueString.length - 1);\n\n if (padLength > 0) {\n valueString = \"0\".repeat(padLength) + valueString;\n }\n\n const decimalIndex = valueString.length - decimal;\n let decimalString = valueString.slice(-decimal);\n\n // Check if we need to round up\n if (Number.parseInt(decimalString[bigIntDecimal] || \"0\") >= 5) {\n // Increment the last decimal place and slice off the rest\n decimalString = `${decimalString.substring(0, bigIntDecimal - 1)}${(\n Number.parseInt(decimalString[bigIntDecimal - 1] || \"0\") + 1\n ).toString()}`;\n } else {\n // Just slice off the extra digits\n decimalString = decimalString.substring(0, bigIntDecimal);\n }\n\n return `${isNegative ? \"-\" : \"\"}${valueString.slice(0, decimalIndex)}.${decimalString}`.replace(\n /\\.?0*$/,\n \"\",\n );\n}\n\nexport class BigIntArithmetics {\n decimalMultiplier: bigint = 10n ** 8n;\n bigIntValue = 0n;\n decimal?: number;\n\n static fromBigInt(value: bigint, decimal?: number) {\n return new BigIntArithmetics({\n decimal,\n value: formatBigIntToSafeValue({ value, bigIntDecimal: decimal, decimal }),\n });\n }\n\n static shiftDecimals({\n value,\n from,\n to,\n }: {\n value: InstanceType<typeof SwapKitNumber>;\n from: number;\n to: number;\n }) {\n return BigIntArithmetics.fromBigInt(\n (value.getBaseValue(\"bigint\") * toMultiplier(to)) / toMultiplier(from),\n to,\n );\n }\n\n constructor(params: SKBigIntParams) {\n const value = getStringValue(params);\n const isComplex = typeof params === \"object\";\n this.decimal = isComplex ? params.decimal : undefined;\n\n // use the multiplier to keep track of decimal point - defaults to 8 if lower than 8\n this.decimalMultiplier =\n isComplex && \"decimalMultiplier\" in params\n ? params.decimalMultiplier\n : toMultiplier(Math.max(getFloatDecimals(toSafeValue(value)), this.decimal || 0));\n this.#setValue(value);\n }\n\n set(value: SKBigIntParams): this {\n // @ts-expect-error False positive\n return new this.constructor({ decimal: this.decimal, value, identifier: this.toString() });\n }\n add(...args: InitialisationValueType[]) {\n return this.#arithmetics(\"add\", ...args);\n }\n sub(...args: InitialisationValueType[]) {\n return this.#arithmetics(\"sub\", ...args);\n }\n mul(...args: InitialisationValueType[]) {\n return this.#arithmetics(\"mul\", ...args);\n }\n div(...args: InitialisationValueType[]) {\n return this.#arithmetics(\"div\", ...args);\n }\n gt(value: InitialisationValueType) {\n return this.#comparison(\"gt\", value);\n }\n gte(value: InitialisationValueType) {\n return this.#comparison(\"gte\", value);\n }\n lt(value: InitialisationValueType) {\n return this.#comparison(\"lt\", value);\n }\n lte(value: InitialisationValueType) {\n return this.#comparison(\"lte\", value);\n }\n eqValue(value: InitialisationValueType) {\n return this.#comparison(\"eqValue\", value);\n }\n\n // @ts-expect-error False positive\n getValue<T extends AllowedNumberTypes>(type: T): NumberPrimitivesType[T] {\n const value = this.formatBigIntToSafeValue(\n this.bigIntValue,\n this.decimal || decimalFromMultiplier(this.decimalMultiplier),\n );\n\n switch (type) {\n case \"number\":\n return Number(value) as NumberPrimitivesType[T];\n case \"string\":\n return value as NumberPrimitivesType[T];\n case \"bigint\":\n return ((this.bigIntValue * 10n ** BigInt(this.decimal || 8n)) /\n this.decimalMultiplier) as NumberPrimitivesType[T];\n }\n }\n\n // @ts-expect-error\n getBaseValue<T extends AllowedNumberTypes>(type: T): NumberPrimitivesType[T] {\n const divisor = this.decimalMultiplier / toMultiplier(this.decimal || BaseDecimal.THOR);\n const baseValue = this.bigIntValue / divisor;\n\n switch (type) {\n case \"number\":\n return Number(baseValue) as NumberPrimitivesType[T];\n case \"string\":\n return baseValue.toString() as NumberPrimitivesType[T];\n case \"bigint\":\n return baseValue as NumberPrimitivesType[T];\n }\n }\n\n getBigIntValue(value: InitialisationValueType, decimal?: number) {\n if (!decimal && typeof value === \"object\") return value.bigIntValue;\n\n const stringValue = getStringValue(value);\n const safeValue = toSafeValue(stringValue);\n\n if (safeValue === \"0\" || safeValue === \"undefined\") return 0n;\n return this.#toBigInt(safeValue, decimal);\n }\n\n toSignificant(significantDigits = 6) {\n const [int, dec] = this.getValue(\"string\").split(\".\");\n const integer = int || \"\";\n const decimal = dec || \"\";\n const valueLength = Number.parseInt(integer) ? integer.length + decimal.length : decimal.length;\n\n if (valueLength <= significantDigits) {\n return this.getValue(\"string\");\n }\n\n if (integer.length >= significantDigits) {\n return integer.slice(0, significantDigits).padEnd(integer.length, \"0\");\n }\n\n if (Number.parseInt(integer)) {\n return `${integer}.${decimal.slice(0, significantDigits - integer.length)}`.padEnd(\n significantDigits - integer.length,\n \"0\",\n );\n }\n\n const trimmedDecimal = Number.parseInt(decimal);\n const slicedDecimal = `${trimmedDecimal}`.slice(0, significantDigits);\n\n return `0.${slicedDecimal.padStart(\n decimal.length - `${trimmedDecimal}`.length + slicedDecimal.length,\n \"0\",\n )}`;\n }\n\n toFixed(fixedDigits = 6) {\n const [int, dec] = this.getValue(\"string\").split(\".\");\n const integer = int || \"\";\n const decimal = dec || \"\";\n\n if (Number.parseInt(integer)) {\n return `${integer}.${decimal.slice(0, fixedDigits)}`.padEnd(fixedDigits, \"0\");\n }\n\n const trimmedDecimal = Number.parseInt(decimal);\n const slicedDecimal = `${trimmedDecimal}`.slice(0, fixedDigits);\n\n return `0.${slicedDecimal.padStart(\n decimal.length - `${trimmedDecimal}`.length + slicedDecimal.length,\n \"0\",\n )}`;\n }\n\n toAbbreviation(digits = 2) {\n const value = this.getValue(\"number\");\n const abbreviations = [\"\", \"K\", \"M\", \"B\", \"T\", \"Q\", \"Qi\", \"S\"];\n const tier = Math.floor(Math.log10(Math.abs(value)) / 3);\n const suffix = abbreviations[tier];\n\n if (!suffix) return this.getValue(\"string\");\n\n const scale = 10 ** (tier * 3);\n const scaled = value / scale;\n\n return `${scaled.toFixed(digits)}${suffix}`;\n }\n\n toCurrency(\n currency = \"$\",\n {\n currencyPosition = \"start\",\n decimal = 2,\n decimalSeparator = \".\",\n thousandSeparator = \",\",\n } = {},\n ) {\n const value = this.getValue(\"number\");\n const [int = \"\", dec = \"\"] = value.toFixed(6).split(\".\");\n const integer = int.replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandSeparator);\n\n const parsedValue =\n int || dec\n ? int === \"0\"\n ? `${Number.parseFloat(`0.${dec}`)}`.replace(\".\", decimalSeparator)\n : `${integer}${Number.parseInt(dec) ? `${decimalSeparator}${dec.slice(0, decimal)}` : \"\"}`\n : \"0.00\";\n\n return `${currencyPosition === \"start\" ? currency : \"\"}${parsedValue}${\n currencyPosition === \"end\" ? currency : \"\"\n }`;\n }\n\n formatBigIntToSafeValue(value: bigint, decimal?: number) {\n const bigIntDecimal = decimal || this.decimal || DEFAULT_DECIMAL;\n const decimalToUseForConversion = Math.max(\n bigIntDecimal,\n decimalFromMultiplier(this.decimalMultiplier),\n );\n const isNegative = value < 0n;\n\n const valueString = value.toString().substring(isNegative ? 1 : 0);\n const padLength = decimalToUseForConversion - (valueString.length - 1);\n\n const parsedValueString = padLength > 0 ? \"0\".repeat(padLength) + valueString : valueString;\n\n const decimalIndex = parsedValueString.length - decimalToUseForConversion;\n let decimalString = parsedValueString.slice(-decimalToUseForConversion);\n\n // Check if we need to round up\n if (Number.parseInt(decimalString[bigIntDecimal] || \"0\") >= 5) {\n // Increment the last decimal place and slice off the rest\n decimalString = `${decimalString.substring(0, bigIntDecimal - 1)}${(\n Number.parseInt(decimalString[bigIntDecimal - 1] || \"0\") + 1\n ).toString()}`;\n } else {\n // Just slice off the extra digits\n decimalString = decimalString.substring(0, bigIntDecimal);\n }\n\n return `${isNegative ? \"-\" : \"\"}${parsedValueString.slice(\n 0,\n decimalIndex,\n )}.${decimalString}`.replace(/\\.?0*$/, \"\");\n }\n\n #arithmetics(method: \"add\" | \"sub\" | \"mul\" | \"div\", ...args: InitialisationValueType[]): this {\n const precisionDecimal = this.#retrievePrecisionDecimal(this, ...args);\n const decimal = Math.max(precisionDecimal, decimalFromMultiplier(this.decimalMultiplier));\n const precisionDecimalMultiplier = toMultiplier(decimal);\n\n const result = args.reduce(\n (acc: bigint, arg) => {\n const value = this.getBigIntValue(arg, decimal);\n\n switch (method) {\n case \"add\":\n return acc + value;\n case \"sub\":\n return acc - value;\n /**\n * Multiplication & division would end up with wrong result if we don't adjust the value\n * 200000000n * 200000000n => 40000000000000000n\n * 200000000n / 200000000n => 1n\n * So we do the following:\n * 200000000n * 200000000n = 40000000000000000n / 100000000n (decimals) => 400000000n\n * (200000000n * 100000000n (decimals)) / 200000000n => 100000000n\n */\n case \"mul\":\n return (acc * value) / precisionDecimalMultiplier;\n case \"div\": {\n if (value === 0n) throw new RangeError(\"Division by zero\");\n return (acc * precisionDecimalMultiplier) / value;\n }\n default:\n return acc;\n }\n },\n //normalize is to precision multiplier base\n (this.bigIntValue * precisionDecimalMultiplier) / this.decimalMultiplier,\n );\n\n const value = formatBigIntToSafeValue({\n bigIntDecimal: decimal,\n decimal,\n value: result,\n });\n\n // @ts-expect-error False positive\n return new this.constructor({\n decimalMultiplier: toMultiplier(decimal),\n decimal: this.decimal,\n value,\n identifier: this.toString(),\n });\n }\n\n #comparison(method: \"gt\" | \"gte\" | \"lt\" | \"lte\" | \"eqValue\", ...args: InitialisationValueType[]) {\n const decimal = this.#retrievePrecisionDecimal(this, ...args);\n const value = this.getBigIntValue(args[0] || \"0\", decimal);\n const compareToValue = this.getBigIntValue(this, decimal);\n\n switch (method) {\n case \"gt\":\n return compareToValue > value;\n case \"gte\":\n return compareToValue >= value;\n case \"lt\":\n return compareToValue < value;\n case \"lte\":\n return compareToValue <= value;\n case \"eqValue\":\n return compareToValue === value;\n }\n }\n\n #setValue(value: InitialisationValueType) {\n const safeValue = toSafeValue(value) || \"0\";\n this.bigIntValue = this.#toBigInt(safeValue);\n }\n\n #retrievePrecisionDecimal(...args: InitialisationValueType[]) {\n const decimals = args\n .map((arg) => {\n const isObject = typeof arg === \"object\";\n const value = isObject\n ? arg.decimal || decimalFromMultiplier(arg.decimalMultiplier)\n : getFloatDecimals(toSafeValue(arg));\n\n return value;\n })\n .filter(Boolean) as number[];\n\n return Math.max(...decimals, DEFAULT_DECIMAL);\n }\n\n #toBigInt(value: string, decimal?: number) {\n const multiplier = decimal ? toMultiplier(decimal) : this.decimalMultiplier;\n const padDecimal = decimalFromMultiplier(multiplier);\n const [integerPart = \"\", decimalPart = \"\"] = value.split(\".\");\n\n return BigInt(`${integerPart}${decimalPart.padEnd(padDecimal, \"0\")}`);\n }\n}\n\nconst numberFormatter = Intl.NumberFormat(\"fullwide\", {\n useGrouping: false,\n maximumFractionDigits: 20,\n});\n\nfunction toSafeValue(value: InitialisationValueType) {\n const parsedValue =\n typeof value === \"number\" ? numberFormatter.format(value) : getStringValue(value);\n const splitValue = `${parsedValue}`.replaceAll(\",\", \".\").split(\".\");\n\n return splitValue.length > 1\n ? `${splitValue.slice(0, -1).join(\"\")}.${splitValue.at(-1)}`\n : splitValue[0] || \"0\";\n}\n\nfunction getFloatDecimals(value: string) {\n const decimals = value.split(\".\")[1]?.length || 0;\n return Math.max(decimals, DEFAULT_DECIMAL);\n}\n\nfunction getStringValue(param: SKBigIntParams) {\n return typeof param === \"object\"\n ? \"getValue\" in param\n ? param.getValue(\"string\")\n : param.value\n : param;\n}\n",
|
|
24
|
-
|
|
25
|
-
"import type { CommonAssetString } from \"../helpers/asset.ts\";\nimport { getAssetType, getCommonAssetInfo, getDecimal, isGasAsset } from \"../helpers/asset.ts\";\nimport { validateIdentifier } from \"../helpers/validators.ts\";\nimport { BaseDecimal, Chain, type ChainId, ChainToChainId } from \"../types/chains.ts\";\nimport type { TokenNames, TokenTax } from \"../types/tokens.ts\";\n\nimport type { NumberPrimitives } from \"./bigIntArithmetics.ts\";\nimport { BigIntArithmetics, formatBigIntToSafeValue } from \"./bigIntArithmetics.ts\";\nimport { SwapKitNumber, type SwapKitValueType } from \"./swapKitNumber.ts\";\n\nconst staticTokensMap = new Map<\n TokenNames,\n { tax?: TokenTax; decimal: number; identifier: string }\n>();\n\nexport class AssetValue extends BigIntArithmetics {\n address?: string;\n chain: Chain;\n isGasAsset = false;\n isSynthetic = false;\n symbol: string;\n tax?: TokenTax;\n ticker: string;\n type: ReturnType<typeof getAssetType>;\n chainId: ChainId;\n\n constructor({\n value,\n decimal,\n tax,\n chain,\n symbol,\n identifier,\n }: { decimal: number; value: SwapKitValueType; tax?: TokenTax } & (\n | { chain: Chain; symbol: string; identifier?: never }\n | { identifier: string; chain?: never; symbol?: never }\n )) {\n super(typeof value === \"object\" ? value : { decimal, value });\n\n const assetInfo = getAssetInfo(identifier || `${chain}.${symbol}`);\n\n this.type = getAssetType(assetInfo);\n this.tax = tax;\n this.chain = assetInfo.chain;\n this.ticker = assetInfo.ticker;\n this.symbol = assetInfo.symbol;\n this.address = assetInfo.address;\n this.isSynthetic = assetInfo.isSynthetic;\n this.isGasAsset = assetInfo.isGasAsset;\n this.chainId = ChainToChainId[assetInfo.chain];\n }\n\n toString() {\n return this.isSynthetic ? this.symbol : `${this.chain}.${this.symbol}`;\n }\n\n toUrl() {\n return this.isSynthetic ? `${this.chain}.${this.symbol.replace(\"/\", \".\")}` : this.toString();\n }\n\n eq({ chain, symbol }: { chain: Chain; symbol: string }) {\n return this.chain === chain && this.symbol === symbol;\n }\n\n // THOR.RUNE\n // THOR.ETH.ETH\n // ETH.THOR-0x1234567890\n static fromUrl(urlAsset: string, value: NumberPrimitives = 0) {\n const [chain, ticker, symbol] = urlAsset.split(\".\");\n if (!(chain && ticker)) throw new Error(\"Invalid asset url\");\n\n const assetString =\n chain === Chain.THORChain && symbol ? `${chain}.${ticker}/${symbol}` : urlAsset;\n\n return createAssetValue(assetString, value);\n }\n\n static fromString(assetString: string, value: NumberPrimitives = 0) {\n return createAssetValue(assetString, value);\n }\n static fromIdentifier(\n assetString:\n | `${Chain}.${string}`\n | `${Chain}/${string}`\n | `${Chain}.${string}-${string}`\n | TokenNames,\n value: NumberPrimitives = 0,\n ) {\n return createAssetValue(assetString, value);\n }\n\n static fromStringSync(assetString: string, value: NumberPrimitives = 0) {\n const { chain, isSynthetic } = getAssetInfo(assetString);\n const tokenInfo = staticTokensMap.get(assetString.toUpperCase() as TokenNames);\n\n if (isSynthetic) return createSyntheticAssetValue(assetString, value);\n // TODO: write logger that will only run in dev mode with some flag\n // if (!tokenInfo) {\n // console.error(\n // `Asset ${assetString} is not loaded. Use AssetValue.loadStaticAssets() to load it`,\n // );\n // }\n\n const { tax, decimal, identifier } = tokenInfo || {\n decimal: BaseDecimal[chain],\n identifier: assetString,\n };\n\n return new AssetValue({\n tax,\n value: safeValue(value, decimal),\n identifier: isSynthetic ? assetString : identifier,\n decimal: isSynthetic ? 8 : decimal,\n });\n }\n\n static async fromStringWithBase(\n assetString: string,\n value: NumberPrimitives = 0,\n baseDecimal: number = BaseDecimal.THOR,\n ) {\n const shiftedAmount = BigIntArithmetics.shiftDecimals({\n value: SwapKitNumber.fromBigInt(BigInt(value)),\n from: 0,\n to: baseDecimal,\n }).getBaseValue(\"string\");\n const assetValue = await AssetValue.fromString(assetString, value);\n\n return assetValue.set(shiftedAmount);\n }\n\n static fromStringWithBaseSync(\n assetString: string,\n value: NumberPrimitives = 0,\n baseDecimal: number = BaseDecimal.THOR,\n ) {\n const { chain, isSynthetic } = getAssetInfo(assetString);\n const tokenInfo = staticTokensMap.get(assetString.toUpperCase() as TokenNames);\n\n if (isSynthetic) return createSyntheticAssetValue(assetString, value);\n\n const { tax, decimal, identifier } = tokenInfo || {\n decimal: BaseDecimal[chain],\n identifier: assetString,\n };\n\n return new AssetValue({\n tax,\n value: safeValue(BigInt(value), baseDecimal),\n identifier,\n decimal,\n });\n }\n\n static fromIdentifierSync(assetString: TokenNames, value: NumberPrimitives = 0) {\n const { chain, isSynthetic } = getAssetInfo(assetString);\n const tokenInfo = staticTokensMap.get(assetString);\n\n if (isSynthetic) return createSyntheticAssetValue(assetString, value);\n // TODO: write logger that will only run in dev mode with some flag\n // if (!tokenInfo) {\n // console.error(\n // `Asset ${assetString} is not loaded. - Loading with base Chain. Use AssetValue.loadStaticAssets() to load it`,\n // );\n // }\n\n const { tax, decimal, identifier } = tokenInfo || {\n decimal: BaseDecimal[chain],\n identifier: assetString,\n };\n return new AssetValue({ tax, decimal, identifier, value: safeValue(value, decimal) });\n }\n\n static fromChainOrSignature(assetString: CommonAssetString, value: NumberPrimitives = 0) {\n const { decimal, identifier } = getCommonAssetInfo(assetString);\n return new AssetValue({ value: safeValue(value, decimal), decimal, identifier });\n }\n\n static loadStaticAssets() {\n return new Promise<{ ok: true } | { ok: false; message: string; error: Todo }>(\n (resolve, reject) => {\n try {\n import(\"@swapkit/tokens\").then((tokenPackages) => {\n for (const tokenList of Object.values(tokenPackages)) {\n for (const { identifier, chain, ...rest } of tokenList.tokens) {\n staticTokensMap.set(identifier.toUpperCase() as TokenNames, {\n identifier,\n decimal: \"decimals\" in rest ? rest.decimals : BaseDecimal[chain as Chain],\n });\n }\n }\n\n resolve({ ok: true });\n });\n } catch (error) {\n console.error(error);\n reject({\n ok: false,\n error,\n message:\n \"Couldn't load static assets. Ensure you have installed @swapkit/tokens package\",\n });\n }\n },\n );\n }\n}\n\nexport function getMinAmountByChain(chain: Chain) {\n const asset = AssetValue.fromChainOrSignature(chain);\n\n switch (chain) {\n case Chain.Bitcoin:\n case Chain.Litecoin:\n case Chain.BitcoinCash:\n return asset.set(0.00010001);\n\n case Chain.Dogecoin:\n return asset.set(1.00000001);\n\n case Chain.Avalanche:\n case Chain.Ethereum:\n return asset.set(0.00000001);\n\n case Chain.THORChain:\n case Chain.Maya:\n return asset.set(0);\n\n case Chain.Cosmos:\n return asset.set(0.000001);\n\n default:\n return asset.set(0.00000001);\n }\n}\n\nasync function createAssetValue(identifier: string, value: NumberPrimitives = 0) {\n validateIdentifier(identifier);\n\n const staticToken = staticTokensMap.get(identifier.toUpperCase() as TokenNames);\n const decimal = staticToken?.decimal || (await getDecimal(getAssetInfo(identifier)));\n if (!staticToken) {\n staticTokensMap.set(identifier.toUpperCase() as TokenNames, { identifier, decimal });\n }\n\n return new AssetValue({ decimal, value: safeValue(value, decimal), identifier });\n}\n\nfunction createSyntheticAssetValue(identifier: string, value: NumberPrimitives = 0) {\n const [synthChain, symbol] =\n identifier.split(\".\")?.[0]?.toUpperCase() === Chain.THORChain\n ? identifier.split(\".\").slice(1).join().split(\"/\")\n : identifier.split(\"/\");\n\n if (!(synthChain && symbol)) throw new Error(\"Invalid asset identifier\");\n\n return new AssetValue({\n decimal: 8,\n value: safeValue(value, 8),\n identifier: `${Chain.THORChain}.${synthChain}/${symbol}`,\n });\n}\n\nfunction safeValue(value: NumberPrimitives, decimal: number) {\n return typeof value === \"bigint\"\n ? formatBigIntToSafeValue({ value, bigIntDecimal: decimal, decimal })\n : value;\n}\n\n// TODO refactor & split into smaller functions\nfunction getAssetInfo(identifier: string) {\n const isSynthetic = identifier.slice(0, 14).includes(\"/\");\n\n const isThorchain = identifier.split(\".\")?.[0]?.toUpperCase() === Chain.THORChain;\n const isMaya = identifier.split(\".\")?.[0]?.toUpperCase() === Chain.Maya;\n\n const [synthChain, synthSymbol = \"\"] =\n isThorchain || isMaya\n ? identifier.split(\".\").slice(1).join().split(\"/\")\n : identifier.split(\"/\");\n\n if (isSynthetic && !(synthChain && synthSymbol)) throw new Error(\"Invalid asset identifier\");\n\n const adjustedIdentifier =\n identifier.includes(\".\") && !isSynthetic\n ? identifier\n : `${isMaya ? Chain.Maya : Chain.THORChain}.${synthSymbol}`;\n\n const [chain, ...rest] = adjustedIdentifier.split(\".\") as [Chain, string];\n\n const symbol = isSynthetic ? synthSymbol : rest.join(\".\");\n const splitSymbol = symbol.split(\"-\");\n const ticker = (\n splitSymbol.length === 1 ? splitSymbol[0] : splitSymbol.slice(0, -1).join(\"-\")\n ) as string;\n const address = splitSymbol.length === 1 ? undefined : splitSymbol[splitSymbol.length - 1];\n\n return {\n address: address?.toLowerCase(),\n chain,\n isGasAsset: isGasAsset({ chain, symbol }),\n isSynthetic,\n symbol:\n (isSynthetic ? `${synthChain}/` : \"\") +\n (address ? `${ticker}-${address?.toLowerCase() ?? \"\"}` : symbol),\n ticker,\n };\n}\n"
|
|
6
|
+
"export const MayaEthereumVaultAbi = [\n { inputs: [], stateMutability: \"nonpayable\", type: \"constructor\" },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"Deposit\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"oldVault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newVault\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferAllowance\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"vault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferOut\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"vault\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"target\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"address\", name: \"finalAsset\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amountOutMin\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferOutAndCall\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"oldVault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newVault\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n indexed: false,\n internalType: \"struct MAYAChain_Router.Coin[]\",\n name: \"coins\",\n type: \"tuple[]\",\n },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"VaultTransfer\",\n type: \"event\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"deposit\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n { internalType: \"uint256\", name: \"expiration\", type: \"uint256\" },\n ],\n name: \"depositWithExpiry\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"router\", type: \"address\" },\n { internalType: \"address payable\", name: \"asgard\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n internalType: \"struct MAYAChain_Router.Coin[]\",\n name: \"coins\",\n type: \"tuple[]\",\n },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"returnVaultAssets\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"router\", type: \"address\" },\n { internalType: \"address\", name: \"newVault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferAllowance\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"to\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferOut\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"target\", type: \"address\" },\n { internalType: \"address\", name: \"finalToken\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"amountOutMin\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferOutAndCall\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n ],\n name: \"vaultAllowance\",\n outputs: [{ internalType: \"uint256\", name: \"amount\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n];\n\nexport const MayaArbitrumVaultAbi = [\n { inputs: [], stateMutability: \"nonpayable\", type: \"constructor\" },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"Deposit\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"oldVault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newVault\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferAllowance\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"vault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferOut\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"vault\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"target\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"address\", name: \"finalAsset\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amountOutMin\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferOutAndCall\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"oldVault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newVault\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n indexed: false,\n internalType: \"struct ArbRouter.Coin[]\",\n name: \"coins\",\n type: \"tuple[]\",\n },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"VaultTransfer\",\n type: \"event\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"deposit\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n { internalType: \"uint256\", name: \"expiration\", type: \"uint256\" },\n ],\n name: \"depositWithExpiry\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"router\", type: \"address\" },\n { internalType: \"address payable\", name: \"asgard\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n internalType: \"struct ArbRouter.Coin[]\",\n name: \"coins\",\n type: \"tuple[]\",\n },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"returnVaultAssets\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"router\", type: \"address\" },\n { internalType: \"address\", name: \"newVault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferAllowance\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"to\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferOut\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"target\", type: \"address\" },\n { internalType: \"address\", name: \"finalToken\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"amountOutMin\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferOutAndCall\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n ],\n name: \"vaultAllowance\",\n outputs: [{ internalType: \"uint256\", name: \"amount\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n];\n",
|
|
7
|
+
"export const TCEthereumVaultAbi = [\n {\n inputs: [{ internalType: \"address\", name: \"rune\", type: \"address\" }],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"Deposit\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"oldVault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newVault\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferAllowance\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"vault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferOut\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"vault\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"target\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"address\", name: \"finalAsset\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amountOutMin\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferOutAndCall\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"oldVault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newVault\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n indexed: false,\n internalType: \"struct THORChain_Router.Coin[]\",\n name: \"coins\",\n type: \"tuple[]\",\n },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"VaultTransfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"RUNE\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"deposit\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n { internalType: \"uint256\", name: \"expiration\", type: \"uint256\" },\n ],\n name: \"depositWithExpiry\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"router\", type: \"address\" },\n { internalType: \"address payable\", name: \"asgard\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n internalType: \"struct THORChain_Router.Coin[]\",\n name: \"coins\",\n type: \"tuple[]\",\n },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"returnVaultAssets\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"router\", type: \"address\" },\n { internalType: \"address\", name: \"newVault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferAllowance\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"to\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferOut\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"aggregator\", type: \"address\" },\n { internalType: \"address\", name: \"finalToken\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"amountOutMin\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferOutAndCall\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n ],\n name: \"vaultAllowance\",\n outputs: [{ internalType: \"uint256\", name: \"amount\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n];\n\nexport const TCAvalancheDepositABI = [\n { inputs: [], stateMutability: \"nonpayable\", type: \"constructor\" },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"Deposit\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"oldVault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newVault\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferAllowance\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"vault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferOut\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"vault\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"target\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"address\", name: \"finalAsset\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amountOutMin\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferOutAndCall\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"oldVault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newVault\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n indexed: false,\n internalType: \"struct AvaxRouter.Coin[]\",\n name: \"coins\",\n type: \"tuple[]\",\n },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"VaultTransfer\",\n type: \"event\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"deposit\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n { internalType: \"uint256\", name: \"expiration\", type: \"uint256\" },\n ],\n name: \"depositWithExpiry\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"router\", type: \"address\" },\n { internalType: \"address payable\", name: \"asgard\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n internalType: \"struct AvaxRouter.Coin[]\",\n name: \"coins\",\n type: \"tuple[]\",\n },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"returnVaultAssets\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"router\", type: \"address\" },\n { internalType: \"address\", name: \"newVault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferAllowance\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"to\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferOut\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"target\", type: \"address\" },\n { internalType: \"address\", name: \"finalToken\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"amountOutMin\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferOutAndCall\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n ],\n name: \"vaultAllowance\",\n outputs: [{ internalType: \"uint256\", name: \"amount\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n];\n\nexport const TCBscDepositABI = [\n { inputs: [], stateMutability: \"nonpayable\", type: \"constructor\" },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"Deposit\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"oldVault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newVault\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferAllowance\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"vault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"asset\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferOut\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"vault\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"target\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { indexed: false, internalType: \"address\", name: \"finalAsset\", type: \"address\" },\n { indexed: false, internalType: \"address\", name: \"to\", type: \"address\" },\n { indexed: false, internalType: \"uint256\", name: \"amountOutMin\", type: \"uint256\" },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"TransferOutAndCall\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"oldVault\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"newVault\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n indexed: false,\n internalType: \"struct THORChain_Router.Coin[]\",\n name: \"coins\",\n type: \"tuple[]\",\n },\n { indexed: false, internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"VaultTransfer\",\n type: \"event\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n { internalType: \"uint256\", name: \"expiration\", type: \"uint256\" },\n ],\n name: \"depositWithExpiry\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"router\", type: \"address\" },\n { internalType: \"address payable\", name: \"asgard\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n internalType: \"struct THORChain_Router.Coin[]\",\n name: \"coins\",\n type: \"tuple[]\",\n },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"returnVaultAssets\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"router\", type: \"address\" },\n { internalType: \"address\", name: \"newVault\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferAllowance\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"to\", type: \"address\" },\n { internalType: \"address\", name: \"asset\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferOut\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"target\", type: \"address\" },\n { internalType: \"address\", name: \"finalToken\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"amountOutMin\", type: \"uint256\" },\n { internalType: \"string\", name: \"memo\", type: \"string\" },\n ],\n name: \"transferOutAndCall\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"vault\", type: \"address\" },\n { internalType: \"address\", name: \"token\", type: \"address\" },\n ],\n name: \"vaultAllowance\",\n outputs: [{ internalType: \"uint256\", name: \"amount\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n];\n",
|
|
8
|
+
"export enum RPCUrl {\n Arbitrum = \"https://arb1.arbitrum.io/rpc\",\n Avalanche = \"https://node-router.thorswap.net/avalanche-c\",\n BinanceSmartChain = \"https://bsc-dataseed.binance.org\",\n Bitcoin = \"https://node-router.thorswap.net/bitcoin\",\n BitcoinCash = \"https://node-router.thorswap.net/bitcoin-cash\",\n Chainflip = \"wss://mainnet-archive.chainflip.io\",\n Cosmos = \"https://node-router.thorswap.net/cosmos/rpc\",\n Dash = \"https://node-router.thorswap.net/dash\",\n Dogecoin = \"https://node-router.thorswap.net/dogecoin\",\n Ethereum = \"https://node-router.thorswap.net/ethereum\",\n Kujira = \"https://rpc-kujira.synergynodes.com/\",\n Litecoin = \"https://node-router.thorswap.net/litecoin\",\n Maya = \"https://tendermint.mayachain.info\",\n MayaStagenet = \"https://stagenet.tendermint.mayachain.info\",\n Optimism = \"https://mainnet.optimism.io\",\n Polkadot = \"wss://rpc.polkadot.io\",\n Polygon = \"https://polygon-rpc.com\",\n Radix = \"https://radix-mainnet.rpc.grove.city/v1/326002fc/core\",\n THORChain = \"https://rpc.thorswap.net\",\n THORChainStagenet = \"https://stagenet-rpc.ninerealms.com\",\n Solana = \"https://mainnet.helius-rpc.com/?api-key=2cbe3ae6-cfc5-4141-a093-0055d0fa3d80\",\n}\n\nexport enum ExplorerUrl {\n Arbitrum = \"https://arbiscan.io\",\n Avalanche = \"https://snowtrace.io\",\n BinanceSmartChain = \"https://bscscan.com\",\n Bitcoin = \"https://blockchair.com/bitcoin\",\n BitcoinCash = \"https://www.blockchair.com/bitcoin-cash\",\n Chainflip = \"https://explorer.polkascan.io/polkadot\",\n Cosmos = \"https://www.mintscan.io/cosmos\",\n Dash = \"https://blockchair.com/dash\",\n Dogecoin = \"https://blockchair.com/dogecoin\",\n Ethereum = \"https://etherscan.io\",\n Kujira = \"https://finder.kujira.network/kaiyo-1\",\n Litecoin = \"https://blockchair.com/litecoin\",\n Maya = \"https://www.mayascan.org\",\n Optimism = \"https://optimistic.etherscan.io\",\n Polkadot = \"https://polkadot.subscan.io\",\n Polygon = \"https://polygonscan.com\",\n Radix = \"https://dashboard.radixdlt.com\",\n THORChain = \"https://runescan.io\",\n Solana = \"https://solscan.io\",\n}\n",
|
|
9
|
+
"import { ExplorerUrl, RPCUrl } from \"./network\";\n\nexport enum Chain {\n Arbitrum = \"ARB\",\n Avalanche = \"AVAX\",\n BinanceSmartChain = \"BSC\",\n Bitcoin = \"BTC\",\n BitcoinCash = \"BCH\",\n Cosmos = \"GAIA\",\n Dash = \"DASH\",\n Dogecoin = \"DOGE\",\n Ethereum = \"ETH\",\n Kujira = \"KUJI\",\n Litecoin = \"LTC\",\n Maya = \"MAYA\",\n Optimism = \"OP\",\n Polkadot = \"DOT\",\n Chainflip = \"FLIP\",\n Polygon = \"MATIC\",\n Radix = \"XRD\",\n THORChain = \"THOR\",\n Solana = \"SOL\",\n}\n\nexport type WalletChain = Exclude<Chain, Chain.Chainflip | Chain.Radix>;\n\nexport enum ChainId {\n Arbitrum = \"42161\",\n ArbitrumHex = \"0xa4b1\",\n Avalanche = \"43114\",\n AvalancheHex = \"0xa86a\",\n BinanceSmartChain = \"56\",\n BinanceSmartChainHex = \"0x38\",\n Bitcoin = \"bitcoin\",\n BitcoinCash = \"bitcoincash\",\n Chainflip = \"chainflip\",\n Cosmos = \"cosmoshub-4\",\n Dash = \"dash\",\n Dogecoin = \"dogecoin\",\n Kujira = \"kaiyo-1\",\n Ethereum = \"1\",\n EthereumHex = \"0x1\",\n Litecoin = \"litecoin\",\n Maya = \"mayachain-mainnet-v1\",\n MayaStagenet = \"mayachain-stagenet-v1\",\n Optimism = \"10\",\n OptimismHex = \"0xa\",\n Polkadot = \"polkadot\",\n Polygon = \"137\",\n PolygonHex = \"0x89\",\n Radix = \"radix-mainnet\",\n THORChain = \"thorchain-mainnet-v1\",\n THORChainStagenet = \"thorchain-stagenet-v2\",\n Solana = \"solana\",\n}\n\nexport const ChainIdToChain: Record<ChainId, Chain> = {\n [ChainId.ArbitrumHex]: Chain.Arbitrum,\n [ChainId.Arbitrum]: Chain.Arbitrum,\n [ChainId.AvalancheHex]: Chain.Avalanche,\n [ChainId.Avalanche]: Chain.Avalanche,\n [ChainId.BinanceSmartChainHex]: Chain.BinanceSmartChain,\n [ChainId.BinanceSmartChain]: Chain.BinanceSmartChain,\n [ChainId.BitcoinCash]: Chain.BitcoinCash,\n [ChainId.Bitcoin]: Chain.Bitcoin,\n [ChainId.Chainflip]: Chain.Chainflip,\n [ChainId.Cosmos]: Chain.Cosmos,\n [ChainId.Dash]: Chain.Dash,\n [ChainId.Dogecoin]: Chain.Dogecoin,\n [ChainId.EthereumHex]: Chain.Ethereum,\n [ChainId.Kujira]: Chain.Kujira,\n [ChainId.Ethereum]: Chain.Ethereum,\n [ChainId.Litecoin]: Chain.Litecoin,\n [ChainId.MayaStagenet]: Chain.Maya,\n [ChainId.Maya]: Chain.Maya,\n [ChainId.OptimismHex]: Chain.Optimism,\n [ChainId.Optimism]: Chain.Optimism,\n [ChainId.Polkadot]: Chain.Polkadot,\n [ChainId.PolygonHex]: Chain.Polygon,\n [ChainId.Polygon]: Chain.Polygon,\n [ChainId.Radix]: Chain.Radix,\n [ChainId.THORChainStagenet]: Chain.THORChain,\n [ChainId.THORChain]: Chain.THORChain,\n [ChainId.Solana]: Chain.Solana,\n};\n\ntype ChainNameType = keyof typeof Chain;\nconst chainNames = Object.keys(Chain) as ChainNameType[];\nconst chains = Object.values(Chain) as Chain[];\n\nexport enum BaseDecimal {\n ARB = 18,\n AVAX = 18,\n BCH = 8,\n BSC = 18,\n BTC = 8,\n DASH = 8,\n DOGE = 8,\n DOT = 10,\n ETH = 18,\n FLIP = 18,\n GAIA = 6,\n KUJI = 6,\n LTC = 8,\n MATIC = 18,\n MAYA = 10,\n OP = 18,\n SOL = 9,\n THOR = 8,\n XRD = 18,\n ZEC = 8,\n}\n\nexport type SubstrateChain = Chain.Polkadot | Chain.Chainflip;\nexport const SubstrateChains = [Chain.Polkadot, Chain.Chainflip];\n\nexport type EVMChain =\n | Chain.Ethereum\n | Chain.Avalanche\n | Chain.BinanceSmartChain\n | Chain.Arbitrum\n | Chain.Optimism\n | Chain.Polygon;\nexport const EVMChains = [\n Chain.Ethereum,\n Chain.Avalanche,\n Chain.BinanceSmartChain,\n Chain.Arbitrum,\n Chain.Optimism,\n Chain.Polygon,\n] as const;\n\nexport type UTXOChain =\n | Chain.Bitcoin\n | Chain.BitcoinCash\n | Chain.Dash\n | Chain.Dogecoin\n | Chain.Litecoin;\nexport const UTXOChains = [\n Chain.Bitcoin,\n Chain.BitcoinCash,\n Chain.Dash,\n Chain.Dogecoin,\n Chain.Litecoin,\n] as const;\n\nexport type CosmosChain = Chain.Cosmos | Chain.THORChain | Chain.Maya | Chain.Kujira;\nexport const CosmosChains = [Chain.Cosmos, Chain.THORChain, Chain.Maya, Chain.Kujira] as const;\n\nexport const TCSupportedChains = [\n Chain.Avalanche,\n Chain.BinanceSmartChain,\n Chain.Bitcoin,\n Chain.BitcoinCash,\n Chain.Cosmos,\n Chain.Dogecoin,\n Chain.Ethereum,\n Chain.Litecoin,\n Chain.THORChain,\n] as const;\n\nexport const MAYASupportedChains = [\n Chain.Arbitrum,\n Chain.Dash,\n Chain.Ethereum,\n Chain.Kujira,\n Chain.Maya,\n Chain.THORChain,\n] as const;\n\nconst ChainToChainName = chains.reduce(\n (acc, chain) => {\n const chainName = chainNames.find((key) => Chain[key as ChainNameType] === chain);\n\n if (chainName) acc[chain] = chainName;\n\n return acc;\n },\n {} as { [key in Chain]: ChainNameType },\n);\n\nexport const ChainToChainId = chains.reduce(\n (acc, chain) => {\n acc[chain] = ChainId[ChainToChainName[chain]];\n return acc;\n },\n {} as { [key in Chain]: ChainId },\n);\n\nexport const ChainToRPC = chains.reduce(\n (acc, chain) => {\n acc[chain] = RPCUrl[ChainToChainName[chain]];\n return acc;\n },\n {} as { [key in Chain]: RPCUrl },\n);\n\nexport const ChainToHexChainId = chains.reduce(\n (acc, chain) => {\n const chainString = `${ChainToChainName[chain]}Hex` as keyof typeof ChainId;\n\n acc[chain] = ChainId[chainString];\n return acc;\n },\n {} as { [key in Chain]: ChainId },\n);\n\nexport const ChainToExplorerUrl = chains.reduce(\n (acc, chain) => {\n acc[chain] = ExplorerUrl[ChainToChainName[chain]];\n return acc;\n },\n {} as { [key in Chain]: string },\n);\n",
|
|
10
|
+
"import type { AssetValue } from \"../modules/assetValue.ts\";\nimport type { Chain, CosmosChain, EVMChain, UTXOChain } from \"./chains.ts\";\nimport type { WalletOption } from \"./wallet.ts\";\n\nexport type ConnectConfig = {\n stagenet?: boolean;\n /**\n * @required\n */\n thorswapApiKey?: string;\n /**\n * @required for AVAX & BSC\n */\n covalentApiKey?: string;\n /**\n * @required for ETH\n */\n ethplorerApiKey?: string;\n /**\n * @required for BTC, BCH, LTC, DOGE\n */\n blockchairApiKey?: string;\n /**\n * @required for Walletconnect\n */\n walletConnectProjectId?: string;\n /**\n * @optional for Trezor config\n */\n trezorManifest?: {\n email: string;\n appUrl: string;\n };\n /**\n * @optional for KeepKey config\n */\n keepkeyConfig?: {\n apiKey: string;\n pairingInfo: {\n name: string;\n imageUrl: string;\n basePath: string;\n url: string;\n };\n };\n /**\n * @optional for setting the chainflip broker url\n */\n chainflipBrokerUrl?: string;\n};\n\nexport type AddChainWalletParams<T extends Chain> = {\n address: string;\n balance: AssetValue[];\n walletType: WalletOption;\n chain: T;\n [key: string]: Todo;\n};\n\ntype ApisType = { [key in UTXOChain]?: string | Todo } & {\n [key in EVMChain]?: string | Todo;\n} & {\n [key in CosmosChain]?: string;\n};\n\nexport type ConnectWalletParams = {\n addChain: <T extends Chain>(params: AddChainWalletParams<T>) => void;\n apis: ApisType;\n config: ConnectConfig;\n rpcUrls: { [chain in Chain]?: string };\n};\n\nexport type Witness = {\n value: number;\n script: Buffer;\n};\n\nexport enum QuoteMode {\n TC_SUPPORTED_TO_TC_SUPPORTED = \"TC-TC\",\n TC_SUPPORTED_TO_ETH = \"TC-ERC20\",\n TC_SUPPORTED_TO_AVAX = \"TC-ARC20\",\n TC_SUPPORTED_TO_BSC = \"TC-BEP20\",\n ETH_TO_TC_SUPPORTED = \"ERC20-TC\",\n ETH_TO_ETH = \"ERC20-ERC20\",\n ETH_TO_AVAX = \"ERC20-ARC20\",\n ETH_TO_BSC = \"ERC20-BEP20\",\n AVAX_TO_TC_SUPPORTED = \"ARC20-TC\",\n AVAX_TO_ETH = \"ARC20-ERC20\",\n AVAX_TO_AVAX = \"ARC20-ARC20\",\n AVAX_TO_BSC = \"ARC20-BEP20\",\n BSC_TO_TC_SUPPORTED = \"BEP20-TC\",\n BSC_TO_ETH = \"BEP20-ERC20\",\n BSC_TO_AVAX = \"BEP20-ARC20\",\n BSC_TO_BSC = \"BEP20-BEP20\",\n}\n\nexport type Asset = {\n chain: Chain;\n symbol: string;\n ticker: string;\n synth?: boolean;\n};\n\nexport const AGG_SWAP = [QuoteMode.ETH_TO_ETH, QuoteMode.AVAX_TO_AVAX, QuoteMode.BSC_TO_BSC];\n\nexport const SWAP_IN = [\n QuoteMode.ETH_TO_TC_SUPPORTED,\n QuoteMode.ETH_TO_AVAX,\n QuoteMode.ETH_TO_BSC,\n QuoteMode.AVAX_TO_TC_SUPPORTED,\n QuoteMode.AVAX_TO_ETH,\n QuoteMode.AVAX_TO_BSC,\n QuoteMode.BSC_TO_TC_SUPPORTED,\n QuoteMode.BSC_TO_ETH,\n QuoteMode.BSC_TO_AVAX,\n];\n\nexport const SWAP_OUT = [\n QuoteMode.TC_SUPPORTED_TO_TC_SUPPORTED,\n QuoteMode.TC_SUPPORTED_TO_ETH,\n QuoteMode.TC_SUPPORTED_TO_AVAX,\n QuoteMode.TC_SUPPORTED_TO_BSC,\n];\n",
|
|
11
|
+
"import type { Chain } from \"./chains\";\n\nexport enum ContractAddress {\n ARB = \"0x0000000000000000000000000000000000000000\",\n AVAX = \"0x0000000000000000000000000000000000000000\",\n ETH = \"0x0000000000000000000000000000000000000000\",\n BSC = \"0x0000000000000000000000000000000000000000\",\n MATIC = \"0x0000000000000000000000000000000000001010\",\n OP = \"0x4200000000000000000000000000000000000042\",\n}\n\nexport enum DerivationPath {\n ARB = \"m/44'/60'/0'/0\",\n AVAX = \"m/44'/60'/0'/0\",\n BCH = \"m/44'/145'/0'/0\",\n BSC = \"m/44'/60'/0'/0\",\n BTC = \"m/84'/0'/0'/0\",\n DASH = \"m/44'/5'/0'/0\",\n DOGE = \"m/44'/3'/0'/0\",\n DOT = \"////\",\n ETH = \"m/44'/60'/0'/0\",\n FLIP = \"////\",\n GAIA = \"m/44'/118'/0'/0\",\n KUJI = \"m/44'/118'/0'/0\",\n LTC = \"m/84'/2'/0'/0\",\n MATIC = \"m/44'/60'/0'/0\",\n MAYA = \"m/44'/931'/0'/0\",\n OP = \"m/44'/60'/0'/0\",\n SOL = \"m/44'/501'/0'/0\",\n THOR = \"m/44'/931'/0'/0\",\n XRD = \"////\",\n}\n\nexport type DerivationPathArray = [number, number, number, number, number?];\n\nexport const NetworkDerivationPath: Record<Chain, DerivationPathArray> = {\n ARB: [44, 60, 0, 0, 0],\n AVAX: [44, 60, 0, 0, 0],\n BCH: [44, 145, 0, 0, 0],\n BSC: [44, 60, 0, 0, 0],\n BTC: [84, 0, 0, 0, 0],\n DASH: [44, 5, 0, 0, 0],\n DOGE: [44, 3, 0, 0, 0],\n ETH: [44, 60, 0, 0, 0],\n GAIA: [44, 118, 0, 0, 0],\n KUJI: [44, 118, 0, 0, 0],\n LTC: [84, 2, 0, 0, 0],\n MATIC: [44, 60, 0, 0, 0],\n MAYA: [44, 931, 0, 0, 0],\n OP: [44, 60, 0, 0, 0],\n SOL: [44, 501, 0, 0, 0],\n THOR: [44, 931, 0, 0, 0],\n\n // Polkadot and related network derivation path is not number based\n XRD: [0, 0, 0, 0, 0],\n DOT: [0, 0, 0, 0, 0],\n FLIP: [0, 0, 0, 0, 0],\n};\n",
|
|
12
|
+
"import type { Eip1193Provider } from \"ethers\";\nimport type { AssetValue } from \"../modules/assetValue\";\nimport type { Chain } from \"./chains\";\n\ndeclare global {\n interface WindowEventMap {\n \"eip6963:announceProvider\": CustomEvent;\n }\n}\n\nexport enum WalletOption {\n BRAVE = \"BRAVE\",\n COINBASE_MOBILE = \"COINBASE_MOBILE\",\n COINBASE_WEB = \"COINBASE_WEB\",\n EIP6963 = \"EIP6963\",\n EXODUS = \"EXODUS\",\n KEEPKEY = \"KEEPKEY\",\n KEPLR = \"KEPLR\",\n KEYSTORE = \"KEYSTORE\",\n LEDGER = \"LEDGER\",\n METAMASK = \"METAMASK\",\n OKX = \"OKX\",\n OKX_MOBILE = \"OKX_MOBILE\",\n PHANTOM = \"PHANTOM\",\n RADIX_WALLET = \"RADIX_WALLET\",\n TREZOR = \"TREZOR\",\n TALISMAN = \"TALISMAN\",\n TRUSTWALLET_WEB = \"TRUSTWALLET_WEB\",\n WALLETCONNECT = \"WALLETCONNECT\",\n XDEFI = \"XDEFI\",\n}\n\nexport enum LedgerErrorCode {\n NoError = 0x9000,\n LockedDevice = 0x5515,\n TC_NotFound = 65535,\n}\n\nexport type ChainWallet = {\n chain: Chain;\n address: string;\n balance: AssetValue[];\n walletType: WalletOption;\n disconnect?: () => void;\n};\n\nexport type EmptyWallet = { [key in Chain]?: unknown };\nexport type BaseWallet<T extends EmptyWallet | Record<string, unknown>> = {\n [key in Chain]: ChainWallet & (T extends EmptyWallet ? T[key] : unknown);\n};\n\nexport type EIP6963ProviderInfo = {\n walletId: string;\n uuid: string;\n name: string;\n icon: string;\n};\n\nexport type EIP6963ProviderDetail = {\n info: EIP6963ProviderInfo;\n provider: Eip1193Provider;\n};\n\nexport type EIP6963Provider = {\n info: EIP6963ProviderInfo;\n provider: Eip1193Provider;\n};\n\n// This type represents the structure of an event dispatched by a wallet to announce its presence based on EIP-6963.\nexport type EIP6963AnnounceProviderEvent = Event & {\n detail: EIP6963Provider;\n};\n",
|
|
13
|
+
"import { z } from \"zod\";\nimport type { AssetValue } from \"../modules/assetValue\";\nimport type { QuoteResponseRoute } from \"./quotes\";\n\nexport type GenericSwapParams = {\n buyAsset?: AssetValue;\n sellAsset?: AssetValue;\n recipient?: string;\n feeOptionKey?: FeeOption;\n route: QuoteResponseRoute;\n};\n\nexport type SwapParams<PluginNames = string, T = GenericSwapParams> = T & {\n pluginName?: PluginNames;\n};\n\nexport enum FeeOption {\n Average = \"average\",\n Fast = \"fast\",\n Fastest = \"fastest\",\n}\n\nexport enum ApproveMode {\n Approve = \"approve\",\n CheckOnly = \"checkOnly\",\n}\n\nexport type ApproveReturnType<T extends ApproveMode> = T extends \"checkOnly\"\n ? Promise<boolean>\n : Promise<string>;\n\nexport type WalletTxParams = {\n feeOptionKey?: FeeOption;\n from?: string;\n memo?: string; // optional memo to pass\n recipient: string;\n};\n\nexport enum MemoType {\n BOND = \"BOND\",\n DEPOSIT = \"+\",\n LEAVE = \"LEAVE\",\n NAME_REGISTER = \"~\",\n UNBOND = \"UNBOND\",\n WITHDRAW = \"-\",\n OPEN_LOAN = \"$+\",\n CLOSE_LOAN = \"$-\",\n}\n\nexport const QuoteRequestSchema = z\n .object({\n sellAsset: z.string({\n description: \"Asset to sell\",\n }),\n buyAsset: z.string({\n description: \"Asset to buy\",\n }),\n sellAmount: z\n .number({\n description: \"Amount of asset to sell\",\n })\n .refine((amount) => amount > 0, {\n message: \"sellAmount must be greater than 0\",\n path: [\"sellAmount\"],\n }),\n providers: z.optional(\n z.array(\n z.string({\n description: \"List of providers to use\",\n }),\n ),\n ),\n sourceAddress: z.optional(\n z.string({\n description: \"Address to send asset from\",\n }),\n ),\n destinationAddress: z.optional(\n z.string({\n description: \"Address to send asset to\",\n }),\n ),\n slippage: z.optional(\n z.number({\n description: \"Slippage tolerance as a percentage. Default is 3%.\",\n }),\n ),\n affiliate: z.optional(\n z.string({\n description: \"Affiliate thorname\",\n }),\n ),\n affiliateFee: z.optional(\n z\n .number({\n description: \"Affiliate fee in basis points\",\n })\n .refine(\n (fee) => {\n return fee === Math.floor(fee) && fee >= 0;\n },\n { message: \"affiliateFee must be a positive integer\", path: [\"affiliateFee\"] },\n ),\n ),\n allowSmartContractSender: z.optional(\n z.boolean({\n description: \"Allow smart contract as sender\",\n }),\n ),\n allowSmartContractReceiver: z.optional(\n z.boolean({\n description: \"Allow smart contract as recipient\",\n }),\n ),\n disableSecurityChecks: z.optional(\n z.boolean({\n description: \"Disable security checks\",\n }),\n ),\n })\n .refine((data) => data.sellAsset !== data.buyAsset, {\n message: \"Must be different\",\n path: [\"sellAsset\", \"buyAsset\"],\n });\n\nexport type QuoteRequest = z.infer<typeof QuoteRequestSchema>;\n",
|
|
14
|
+
"import { z } from \"zod\";\n\nexport enum WarningCodeEnum {\n highSlippage = \"highSlippage\",\n highPriceImpact = \"highPriceImpact\",\n}\n\nexport const EVMTransactionDetailsParamsSchema = z.array(\n z.union([\n z.string(),\n z.number(),\n z.array(z.string()),\n z\n .object({\n from: z.string(),\n value: z.string(),\n })\n .describe(\"Parameters to pass to the contract method\"),\n ]),\n);\n\nexport type EVMTransactionDetailsParams = z.infer<typeof EVMTransactionDetailsParamsSchema>;\n\nexport const EVMTransactionDetailsSchema = z.object({\n contractAddress: z.string({\n description: \"Address of the contract to interact with\",\n }),\n contractMethod: z.string({\n description: \"Name of the method to call\",\n }),\n contractParams: EVMTransactionDetailsParamsSchema,\n // contractParamsStreaming: z.array(\n // z.string({\n // description:\n // \"If making a streaming swap through THORChain, parameters to pass to the contract method\",\n // }),\n // ),\n contractParamNames: z.array(\n z.string({\n description: \"Names of the parameters to pass to the contract method\",\n }),\n ),\n approvalToken: z.optional(\n z.string({\n description: \"Address of the token to approve spending of\",\n }),\n ),\n approvalSpender: z.optional(\n z.string({\n description: \"Address of the spender to approve\",\n }),\n ),\n});\n\nexport type EVMTransactionDetails = z.infer<typeof EVMTransactionDetailsSchema>;\n\nexport const EstimatedTimeSchema = z.object({\n inbound: z.optional(\n z.number({\n description: \"Time to receive inbound asset in seconds\",\n }),\n ),\n swap: z.optional(\n z.number({\n description: \"Time to swap assets in seconds\",\n }),\n ),\n outbound: z.optional(\n z.number({\n description: \"Time to receive outbound asset in seconds\",\n }),\n ),\n total: z.number({\n description: \"Total time in seconds\",\n }),\n});\n\nexport type EstimatedTime = z.infer<typeof EstimatedTimeSchema>;\n\nexport enum ProviderName {\n CHAINFLIP = \"CHAINFLIP\",\n TRADERJOE_V1 = \"TRADERJOE_V1\",\n PANGOLIN_V1 = \"PANGOLIN_V1\",\n UNISWAP_V2 = \"UNISWAP_V2\",\n THORCHAIN = \"THORCHAIN\",\n THORCHAIN_STREAMING = \"THORCHAIN_STREAMING\",\n MAYACHAIN = \"MAYACHAIN\",\n ONEINCH = \"ONEINCH\",\n SUSHISWAP_V2 = \"SUSHISWAP_V2\",\n WOOFI_V2 = \"WOOFI_V2\",\n PANCAKESWAP = \"PANCAKESWAP\",\n}\n\nexport enum FeeTypeEnum {\n LIQUIDITY = \"liquidity\",\n NETWORK = \"network\",\n INBOUND = \"inbound\",\n OUTBOUND = \"outbound\",\n AFFILIATE = \"affiliate\",\n TAX = \"tax\",\n}\n\nexport const FeesSchema = z.array(\n z.object({\n type: z.nativeEnum(FeeTypeEnum),\n amount: z.string(),\n asset: z.string(),\n chain: z.string(),\n protocol: z.nativeEnum(ProviderName),\n }),\n);\n\nexport type Fees = z.infer<typeof FeesSchema>;\n\nexport const RouteLegSchema = z.object({\n sellAsset: z.string({\n description: \"Asset to sell\",\n }),\n buyAsset: z.string({\n description: \"Asset to buy\",\n }),\n provider: z.nativeEnum(ProviderName),\n sourceAddress: z.string({\n description: \"Source address\",\n }),\n destinationAddress: z.string({\n description: \"Destination address\",\n }),\n estimatedTime: EstimatedTimeSchema.optional(),\n affiliate: z\n .string({\n description: \"Affiliate address\",\n })\n .optional(),\n affiliateFee: z\n .number({\n description: \"Affiliate fee\",\n })\n .optional(),\n slipPercentage: z.number({\n description: \"Slippage as a percentage\",\n }),\n});\n\nexport type RouteLeg = z.infer<typeof RouteLegSchema>;\n\nexport const RouteLegWithoutAddressesSchema = RouteLegSchema.omit({\n sourceAddress: true,\n destinationAddress: true,\n slipPercentage: true,\n});\n\nexport type RouteLegWithoutAddresses = z.infer<typeof RouteLegWithoutAddressesSchema>;\n\nexport const RouteQuoteMetadataAssetSchema = z.object({\n name: z.string({\n description: \"Asset name\",\n }),\n price: z.number({\n description: \"Price in USD\",\n }),\n image: z.string({\n description: \"Asset image\",\n }),\n});\n\nexport type RouteQuoteMetadataAsset = z.infer<typeof RouteQuoteMetadataAssetSchema>;\n\nexport const RouteQuoteMetadataSchema = z.object({\n priceImpact: z.number({\n description: \"Price impact\",\n }),\n assets: z.optional(z.array(RouteQuoteMetadataAssetSchema)),\n});\n\nexport const RouteQuoteWarningSchema = z.array(\n z.object({\n code: z.nativeEnum(WarningCodeEnum),\n display: z.string(),\n tooltip: z.string().optional(),\n }),\n);\n\nexport const RouteQuoteLegSchema = z.object({\n sellAsset: z.string({\n description: \"Asset to sell\",\n }),\n buyAsset: z.string({\n description: \"Asset to buy\",\n }),\n provider: z.nativeEnum(ProviderName),\n buyAmount: z.string({\n description: \"Amount of asset to buy\",\n }),\n buyAmountMaxSlippage: z.string({\n description: \"Amount of asset to buy\",\n }),\n sellAmount: z.string({\n description: \"Amount of asset to sell\",\n }),\n sourceAddress: z.string({\n description: \"Source address\",\n }),\n destinationAddress: z.string({\n description: \"Destination address\",\n }),\n slippageBps: z.number({\n description: \"Slippage in bps\",\n }),\n targetAddress: z.optional(\n z.string({\n description: \"Target address for contract call or transfer address\",\n }),\n ),\n inboundAddress: z.optional(\n z.string({\n description: \"Inbound address\",\n }),\n ),\n routerAddress: z.optional(\n z.string({\n description: \"Inbound address\",\n }),\n ),\n contractMethod: z.optional(\n z.string({\n description: \"Contract method\",\n }),\n ),\n fees: z.optional(FeesSchema),\n estimatedTime: z.optional(EstimatedTimeSchema),\n memo: z.optional(\n z.string({\n description: \"Memo\",\n }),\n ),\n expiration: z.optional(\n z.string({\n description: \"Expiration\",\n }),\n ),\n});\n\nexport type RouteQuoteLeg = z.infer<typeof RouteQuoteLegSchema>;\n\nexport const RouteQuoteSchema = z.object({\n providers: z.array(z.nativeEnum(ProviderName)),\n sellAsset: z.string({\n description: \"Asset to sell\",\n }),\n sellAmount: z.string({\n description: \"sell amount\",\n }),\n buyAsset: z.string({\n description: \"Asset to buy\",\n }),\n expectedBuyAmount: z.string({\n description: \"Expected Buy amount\",\n }),\n expectedBuyAmountMaxSlippage: z.string({\n description: \"Expected Buy amount max slippage\",\n }),\n sourceAddress: z.string({\n description: \"Source address\",\n }),\n destinationAddress: z.string({\n description: \"Destination address\",\n }),\n targetAddress: z.optional(\n z.string({\n description: \"Target address\",\n }),\n ),\n routerAddress: z.optional(\n z.string({\n description: \"Router address\",\n }),\n ),\n inboundAddress: z.optional(\n z.string({\n description: \"Inbound address\",\n }),\n ),\n expiration: z.optional(\n z.string({\n description: \"Expiration\",\n }),\n ),\n memo: z.optional(\n z.string({\n description: \"Memo\",\n }),\n ),\n evmTransactionDetails: z.optional(EVMTransactionDetailsSchema),\n routePathArray: z.optional(z.array(z.string())),\n estimatedTime: z.optional(EstimatedTimeSchema),\n totalSlippageBps: z.number({\n description: \"Total slippage in bps\",\n }),\n legs: z.array(RouteQuoteLegSchema),\n // TODO use enum\n errorCode: z.optional(z.string()),\n warnings: RouteQuoteWarningSchema,\n meta: RouteQuoteMetadataSchema,\n});\n\nexport type RouteQuote = z.infer<typeof RouteQuoteSchema>;\n\nconst QuoteResponseRouteLegItem = z.object({\n provider: z.nativeEnum(ProviderName),\n sellAsset: z.string({\n description: \"Asset to sell\",\n }),\n sellAmount: z.string({\n description: \"Sell amount\",\n }),\n buyAsset: z.string({\n description: \"Asset to buy\",\n }),\n buyAmount: z.string({\n description: \"Buy amount\",\n }),\n buyAmountMaxSlippage: z.string({\n description: \"Buy amount max slippage\",\n }),\n fees: z.optional(FeesSchema), // TODO remove optionality\n});\n\nconst QuoteResponseRouteItem = z.object({\n providers: z.array(z.nativeEnum(ProviderName)),\n sellAsset: z.string({\n description: \"Asset to sell\",\n }),\n sellAmount: z.string({\n description: \"sell amount\",\n }),\n buyAsset: z.string({\n description: \"Asset to buy\",\n }),\n expectedBuyAmount: z.string({\n description: \"Expected Buy amount\",\n }),\n expectedBuyAmountMaxSlippage: z.string({\n description: \"Expected Buy amount max slippage\",\n }),\n sourceAddress: z.string({\n description: \"Source address\",\n }),\n destinationAddress: z.string({\n description: \"Destination address\",\n }),\n targetAddress: z.optional(\n z.string({\n description: \"Target address\",\n }),\n ),\n expiration: z.optional(\n z.string({\n description: \"Expiration\",\n }),\n ),\n memo: z.optional(\n z.string({\n description: \"Memo\",\n }),\n ),\n evmTransactionDetails: z.optional(EVMTransactionDetailsSchema),\n estimatedTime: z.optional(EstimatedTimeSchema), // TODO remove optionality\n totalSlippageBps: z.number({\n description: \"Total slippage in bps\",\n }),\n legs: z.array(QuoteResponseRouteLegItem),\n warnings: RouteQuoteWarningSchema,\n meta: RouteQuoteMetadataSchema,\n});\n\nexport const QuoteResponseSchema = z.object({\n quoteId: z.string({\n description: \"Quote ID\",\n }),\n routes: z.array(QuoteResponseRouteItem),\n error: z.optional(\n z.string({\n description: \"Error message\",\n }),\n ),\n});\n\nexport type QuoteResponse = z.infer<typeof QuoteResponseSchema>;\nexport type QuoteResponseRoute = z.infer<typeof QuoteResponseRouteItem>;\nexport type QuoteResponseRouteLeg = z.infer<typeof QuoteResponseRouteLegItem>;\n",
|
|
15
|
+
"const errorCodes = {\n /**\n * Core\n */\n core_estimated_max_spendable_chain_not_supported: 10002,\n core_extend_error: 10003,\n core_inbound_data_not_found: 10004,\n core_approve_asset_address_or_from_not_found: 10005,\n core_plugin_not_found: 10006,\n core_plugin_swap_not_found: 10007,\n core_approve_asset_target_invalid: 10008,\n core_explorer_unsupported_chain: 10009,\n core_chain_halted: 10099,\n\n core_wallet_connection_not_found: 10100,\n core_wallet_xdefi_not_installed: 10101,\n core_wallet_evmwallet_not_installed: 10102,\n core_wallet_walletconnect_not_installed: 10103,\n core_wallet_keystore_not_installed: 10104,\n core_wallet_ledger_not_installed: 10105,\n core_wallet_trezor_not_installed: 10106,\n core_wallet_keplr_not_installed: 10107,\n core_wallet_okx_not_installed: 10108,\n core_wallet_keepkey_not_installed: 10109,\n /**\n * Core - Swap\n */\n core_swap_invalid_params: 10200,\n core_swap_route_not_complete: 10201,\n core_swap_asset_not_recognized: 10202,\n core_swap_contract_not_found: 10203,\n core_swap_route_transaction_not_found: 10204,\n core_swap_contract_not_supported: 10205,\n core_swap_transaction_error: 10206,\n core_swap_quote_mode_not_supported: 10207,\n /**\n * Core - Transaction\n */\n core_transaction_deposit_error: 10301,\n core_transaction_create_liquidity_base_error: 10302,\n core_transaction_create_liquidity_asset_error: 10303,\n core_transaction_create_liquidity_invalid_params: 10304,\n core_transaction_add_liquidity_invalid_params: 10305,\n core_transaction_add_liquidity_base_address: 10306,\n core_transaction_add_liquidity_base_error: 10307,\n core_transaction_add_liquidity_asset_error: 10308,\n core_transaction_withdraw_error: 10309,\n core_transaction_deposit_to_pool_error: 10310,\n core_transaction_deposit_insufficient_funds_error: 10311,\n core_transaction_deposit_gas_error: 10312,\n core_transaction_invalid_sender_address: 10313,\n core_transaction_deposit_server_error: 10314,\n core_transaction_user_rejected: 10315,\n /**\n * Wallets\n */\n wallet_connection_rejected_by_user: 20000,\n wallet_missing_api_key: 20001,\n wallet_chain_not_supported: 20002,\n wallet_missing_params: 20003,\n wallet_provider_not_found: 20004,\n wallet_failed_to_add_or_switch_network: 20005,\n wallet_ledger_connection_error: 20101,\n wallet_ledger_connection_claimed: 20102,\n wallet_ledger_get_address_error: 20103,\n wallet_ledger_device_not_found: 20104,\n wallet_ledger_device_locked: 20105,\n wallet_phantom_not_found: 20201,\n wallet_xdefi_not_found: 20301,\n wallet_xdefi_send_transaction_no_address: 20302,\n wallet_xdefi_contract_address_not_provided: 20303,\n wallet_xdefi_asset_not_defined: 20304,\n wallet_walletconnect_project_id_not_specified: 20401,\n wallet_walletconnect_connection_not_established: 20402,\n wallet_walletconnect_namespace_not_supported: 20403,\n wallet_trezor_failed_to_sign_transaction: 20501,\n wallet_trezor_derivation_path_not_supported: 20502,\n wallet_trezor_failed_to_get_address: 20503,\n wallet_talisman_not_enabled: 20601,\n wallet_talisman_not_found: 20602,\n /**\n * Chainflip\n */\n chainflip_channel_error: 30001,\n chainflip_unknown_asset: 30002,\n chainflip_broker_invalid_params: 30100,\n chainflip_broker_recipient_error: 30101,\n chainflip_broker_register: 30102,\n chainflip_broker_tx_error: 30103,\n chainflip_broker_withdraw: 30104,\n chainflip_broker_fund_only_flip_supported: 30105,\n chainflip_broker_fund_invalid_address: 30106,\n /**\n * THORChain\n */\n thorchain_chain_halted: 40001,\n thorchain_trading_halted: 40002,\n thorchain_swapin_router_required: 40100,\n thorchain_swapin_vault_required: 40101,\n thorchain_swapin_memo_required: 40102,\n thorchain_swapin_token_required: 40103,\n /**\n * SwapKit API\n */\n api_v2_invalid_response: 50001,\n\n /**\n * Toolboxes\n */\n toolbox_cosmos_signer_not_defined: 90101,\n toolbox_cosmos_no_accounts_found: 90102,\n /**\n * Helpers\n */\n helpers_invalid_number_different_decimals: 99000,\n helpers_invalid_number_of_years: 99001,\n helpers_invalid_identifier: 99002,\n helpers_invalid_asset_url: 99003,\n helpers_invalid_asset_identifier: 99004,\n helpers_invalid_memo_type: 99005,\n helpers_failed_to_switch_network: 99103,\n helpers_not_found_provider: 99200,\n} as const;\n\nexport type ErrorKeys = keyof typeof errorCodes;\n\nexport class SwapKitError extends Error {\n static ErrorCode = errorCodes;\n\n constructor(\n errorOrErrorKey: ErrorKeys | { errorKey: ErrorKeys; info?: Record<string, NotWorth> },\n sourceError?: NotWorth,\n ) {\n const isErrorString = typeof errorOrErrorKey === \"string\";\n\n const errorKey = isErrorString ? errorOrErrorKey : errorOrErrorKey.errorKey;\n\n if (sourceError) {\n console.error(sourceError, {\n stack: sourceError?.stack,\n message: sourceError?.message,\n });\n }\n\n super(errorKey, {\n cause: {\n code: SwapKitError.ErrorCode[errorKey],\n message: `${errorKey}${isErrorString ? \"\" : `: ${JSON.stringify(errorOrErrorKey.info)}`}`,\n },\n });\n\n Object.setPrototypeOf(this, SwapKitError.prototype);\n }\n}\n",
|
|
16
|
+
"import { SwapKitError } from \"../modules/swapKitError\";\nimport { Chain } from \"../types/chains\";\n\n// Backward compatibility\nconst supportedChains = [...Object.values(Chain), \"TERRA\"];\n\nexport function validateIdentifier(identifier = \"\") {\n const uppercasedIdentifier = identifier.toUpperCase();\n\n const [chain] = uppercasedIdentifier.split(\".\") as [Chain, string];\n if (supportedChains.includes(chain)) return true;\n\n const [synthChain] = uppercasedIdentifier.split(\"/\") as [Chain, string];\n if (supportedChains.includes(synthChain)) return true;\n\n throw new SwapKitError({\n errorKey: \"helpers_invalid_identifier\",\n info: {\n message: `Invalid identifier: ${identifier}. Expected format: <Chain>.<Ticker> or <Chain>.<Ticker>-<ContractAddress>`,\n identifier,\n },\n });\n}\n\nexport function validateTNS(name: string) {\n if (name.length > 30) return false;\n\n const regex = /^[a-zA-Z0-9+_-]+$/g;\n\n return !!name.match(regex);\n}\n",
|
|
17
|
+
"import { BaseDecimal } from \"../types/chains.ts\";\nimport type { SwapKitNumber } from \"./swapKitNumber.ts\";\n\ntype NumberPrimitivesType = {\n bigint: bigint;\n number: number;\n string: string;\n};\nexport type NumberPrimitives = bigint | number | string;\ntype InitialisationValueType = NumberPrimitives | BigIntArithmetics | SwapKitNumber;\n\ntype SKBigIntParams = InitialisationValueType | { decimal?: number; value: number | string };\ntype AllowedNumberTypes = \"bigint\" | \"number\" | \"string\";\n\nconst DEFAULT_DECIMAL = 8;\nconst toMultiplier = (decimal: number) => 10n ** BigInt(decimal);\nconst decimalFromMultiplier = (multiplier: bigint) =>\n Math.log10(Number.parseFloat(multiplier.toString()));\n\nexport function formatBigIntToSafeValue({\n value,\n bigIntDecimal = DEFAULT_DECIMAL,\n decimal = DEFAULT_DECIMAL,\n}: {\n value: bigint;\n bigIntDecimal?: number;\n decimal?: number;\n}) {\n if (decimal === 0) return value.toString();\n const isNegative = value < 0n;\n let valueString = value.toString().substring(isNegative ? 1 : 0);\n\n const padLength = decimal - (valueString.length - 1);\n\n if (padLength > 0) {\n valueString = \"0\".repeat(padLength) + valueString;\n }\n\n const decimalIndex = valueString.length - decimal;\n let decimalString = valueString.slice(-decimal);\n\n // Check if we need to round up\n if (Number.parseInt(decimalString[bigIntDecimal] || \"0\") >= 5) {\n // Increment the last decimal place and slice off the rest\n decimalString = `${decimalString.substring(0, bigIntDecimal - 1)}${(Number.parseInt(decimalString[bigIntDecimal - 1] || \"0\") + 1).toString()}`;\n } else {\n // Just slice off the extra digits\n decimalString = decimalString.substring(0, bigIntDecimal);\n }\n\n return `${isNegative ? \"-\" : \"\"}${valueString.slice(0, decimalIndex)}.${decimalString}`.replace(\n /\\.?0*$/,\n \"\",\n );\n}\n\nexport class BigIntArithmetics {\n decimalMultiplier: bigint = 10n ** 8n;\n bigIntValue = 0n;\n decimal?: number;\n\n static fromBigInt(value: bigint, decimal?: number) {\n return new BigIntArithmetics({\n decimal,\n value: formatBigIntToSafeValue({ value, bigIntDecimal: decimal, decimal }),\n });\n }\n\n static shiftDecimals({\n value,\n from,\n to,\n }: {\n value: InstanceType<typeof SwapKitNumber>;\n from: number;\n to: number;\n }) {\n return BigIntArithmetics.fromBigInt(\n (value.getBaseValue(\"bigint\") * toMultiplier(to)) / toMultiplier(from),\n to,\n );\n }\n\n constructor(params: SKBigIntParams) {\n const value = getStringValue(params);\n const isComplex = typeof params === \"object\";\n this.decimal = isComplex ? params.decimal : undefined;\n\n // use the multiplier to keep track of decimal point - defaults to 8 if lower than 8\n this.decimalMultiplier =\n isComplex && \"decimalMultiplier\" in params\n ? params.decimalMultiplier\n : toMultiplier(Math.max(getFloatDecimals(toSafeValue(value)), this.decimal || 0));\n this.#setValue(value);\n }\n\n set(value: SKBigIntParams): this {\n // @ts-expect-error False positive\n return new this.constructor({ decimal: this.decimal, value, identifier: this.toString() });\n }\n add(...args: InitialisationValueType[]) {\n return this.#arithmetics(\"add\", ...args);\n }\n sub(...args: InitialisationValueType[]) {\n return this.#arithmetics(\"sub\", ...args);\n }\n mul(...args: InitialisationValueType[]) {\n return this.#arithmetics(\"mul\", ...args);\n }\n div(...args: InitialisationValueType[]) {\n return this.#arithmetics(\"div\", ...args);\n }\n gt(value: InitialisationValueType) {\n return this.#comparison(\"gt\", value);\n }\n gte(value: InitialisationValueType) {\n return this.#comparison(\"gte\", value);\n }\n lt(value: InitialisationValueType) {\n return this.#comparison(\"lt\", value);\n }\n lte(value: InitialisationValueType) {\n return this.#comparison(\"lte\", value);\n }\n eqValue(value: InitialisationValueType) {\n return this.#comparison(\"eqValue\", value);\n }\n\n // @ts-expect-error False positive\n getValue<T extends AllowedNumberTypes>(type: T): NumberPrimitivesType[T] {\n const value = this.formatBigIntToSafeValue(\n this.bigIntValue,\n this.decimal || decimalFromMultiplier(this.decimalMultiplier),\n );\n\n switch (type) {\n case \"number\":\n return Number(value) as NumberPrimitivesType[T];\n case \"string\":\n return value as NumberPrimitivesType[T];\n case \"bigint\":\n return ((this.bigIntValue * 10n ** BigInt(this.decimal || 8n)) /\n this.decimalMultiplier) as NumberPrimitivesType[T];\n }\n }\n\n // @ts-expect-error\n getBaseValue<T extends AllowedNumberTypes>(type: T): NumberPrimitivesType[T] {\n const divisor = this.decimalMultiplier / toMultiplier(this.decimal || BaseDecimal.THOR);\n const baseValue = this.bigIntValue / divisor;\n\n switch (type) {\n case \"number\":\n return Number(baseValue) as NumberPrimitivesType[T];\n case \"string\":\n return baseValue.toString() as NumberPrimitivesType[T];\n case \"bigint\":\n return baseValue as NumberPrimitivesType[T];\n }\n }\n\n getBigIntValue(value: InitialisationValueType, decimal?: number) {\n if (!decimal && typeof value === \"object\") return value.bigIntValue;\n\n const stringValue = getStringValue(value);\n const safeValue = toSafeValue(stringValue);\n\n if (safeValue === \"0\" || safeValue === \"undefined\") return 0n;\n return this.#toBigInt(safeValue, decimal);\n }\n\n toSignificant(significantDigits = 6) {\n const [int, dec] = this.getValue(\"string\").split(\".\");\n const integer = int || \"\";\n const decimal = dec || \"\";\n const valueLength = Number.parseInt(integer) ? integer.length + decimal.length : decimal.length;\n\n if (valueLength <= significantDigits) {\n return this.getValue(\"string\");\n }\n\n if (integer.length >= significantDigits) {\n return integer.slice(0, significantDigits).padEnd(integer.length, \"0\");\n }\n\n if (Number.parseInt(integer)) {\n return `${integer}.${decimal.slice(0, significantDigits - integer.length)}`.padEnd(\n significantDigits - integer.length,\n \"0\",\n );\n }\n\n const trimmedDecimal = Number.parseInt(decimal);\n const slicedDecimal = `${trimmedDecimal}`.slice(0, significantDigits);\n\n return `0.${slicedDecimal.padStart(\n decimal.length - `${trimmedDecimal}`.length + slicedDecimal.length,\n \"0\",\n )}`;\n }\n\n toFixed(fixedDigits = 6) {\n const [int, dec] = this.getValue(\"string\").split(\".\");\n const integer = int || \"\";\n const decimal = dec || \"\";\n\n if (Number.parseInt(integer)) {\n return `${integer}.${decimal.slice(0, fixedDigits)}`.padEnd(fixedDigits, \"0\");\n }\n\n const trimmedDecimal = Number.parseInt(decimal);\n const slicedDecimal = `${trimmedDecimal}`.slice(0, fixedDigits);\n\n return `0.${slicedDecimal.padStart(\n decimal.length - `${trimmedDecimal}`.length + slicedDecimal.length,\n \"0\",\n )}`;\n }\n\n toAbbreviation(digits = 2) {\n const value = this.getValue(\"number\");\n const abbreviations = [\"\", \"K\", \"M\", \"B\", \"T\", \"Q\", \"Qi\", \"S\"];\n const tier = Math.floor(Math.log10(Math.abs(value)) / 3);\n const suffix = abbreviations[tier];\n\n if (!suffix) return this.getValue(\"string\");\n\n const scale = 10 ** (tier * 3);\n const scaled = value / scale;\n\n return `${scaled.toFixed(digits)}${suffix}`;\n }\n\n toCurrency(\n currency = \"$\",\n {\n currencyPosition = \"start\",\n decimal = 2,\n decimalSeparator = \".\",\n thousandSeparator = \",\",\n } = {},\n ) {\n const value = this.getValue(\"number\");\n const [int = \"\", dec = \"\"] = value.toFixed(6).split(\".\");\n const integer = int.replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandSeparator);\n\n const parsedValue =\n int || dec\n ? int === \"0\"\n ? `${Number.parseFloat(`0.${dec}`)}`.replace(\".\", decimalSeparator)\n : `${integer}${Number.parseInt(dec) ? `${decimalSeparator}${dec.slice(0, decimal)}` : \"\"}`\n : \"0.00\";\n\n return `${currencyPosition === \"start\" ? currency : \"\"}${parsedValue}${\n currencyPosition === \"end\" ? currency : \"\"\n }`;\n }\n\n formatBigIntToSafeValue(value: bigint, decimal?: number) {\n const bigIntDecimal = decimal || this.decimal || DEFAULT_DECIMAL;\n const decimalToUseForConversion = Math.max(\n bigIntDecimal,\n decimalFromMultiplier(this.decimalMultiplier),\n );\n const isNegative = value < 0n;\n\n const valueString = value.toString().substring(isNegative ? 1 : 0);\n const padLength = decimalToUseForConversion - (valueString.length - 1);\n\n const parsedValueString = padLength > 0 ? \"0\".repeat(padLength) + valueString : valueString;\n\n const decimalIndex = parsedValueString.length - decimalToUseForConversion;\n let decimalString = parsedValueString.slice(-decimalToUseForConversion);\n\n // Check if we need to round up\n if (Number.parseInt(decimalString[bigIntDecimal] || \"0\") >= 5) {\n // Increment the last decimal place and slice off the rest\n decimalString = `${decimalString.substring(0, bigIntDecimal - 1)}${(Number.parseInt(decimalString[bigIntDecimal - 1] || \"0\") + 1).toString()}`;\n } else {\n // Just slice off the extra digits\n decimalString = decimalString.substring(0, bigIntDecimal);\n }\n\n return `${isNegative ? \"-\" : \"\"}${parsedValueString.slice(\n 0,\n decimalIndex,\n )}.${decimalString}`.replace(/\\.?0*$/, \"\");\n }\n\n #arithmetics(method: \"add\" | \"sub\" | \"mul\" | \"div\", ...args: InitialisationValueType[]): this {\n const precisionDecimal = this.#retrievePrecisionDecimal(this, ...args);\n const decimal = Math.max(precisionDecimal, decimalFromMultiplier(this.decimalMultiplier));\n const precisionDecimalMultiplier = toMultiplier(decimal);\n\n const result = args.reduce(\n (acc: bigint, arg) => {\n const value = this.getBigIntValue(arg, decimal);\n\n switch (method) {\n case \"add\":\n return acc + value;\n case \"sub\":\n return acc - value;\n /**\n * Multiplication & division would end up with wrong result if we don't adjust the value\n * 200000000n * 200000000n => 40000000000000000n\n * 200000000n / 200000000n => 1n\n * So we do the following:\n * 200000000n * 200000000n = 40000000000000000n / 100000000n (decimals) => 400000000n\n * (200000000n * 100000000n (decimals)) / 200000000n => 100000000n\n */\n case \"mul\":\n return (acc * value) / precisionDecimalMultiplier;\n case \"div\": {\n if (value === 0n) throw new RangeError(\"Division by zero\");\n return (acc * precisionDecimalMultiplier) / value;\n }\n default:\n return acc;\n }\n },\n //normalize is to precision multiplier base\n (this.bigIntValue * precisionDecimalMultiplier) / this.decimalMultiplier,\n );\n\n const value = formatBigIntToSafeValue({\n bigIntDecimal: decimal,\n decimal,\n value: result,\n });\n\n // @ts-expect-error False positive\n return new this.constructor({\n decimalMultiplier: toMultiplier(decimal),\n decimal: this.decimal,\n value,\n identifier: this.toString(),\n });\n }\n\n #comparison(method: \"gt\" | \"gte\" | \"lt\" | \"lte\" | \"eqValue\", ...args: InitialisationValueType[]) {\n const decimal = this.#retrievePrecisionDecimal(this, ...args);\n const value = this.getBigIntValue(args[0] || \"0\", decimal);\n const compareToValue = this.getBigIntValue(this, decimal);\n\n switch (method) {\n case \"gt\":\n return compareToValue > value;\n case \"gte\":\n return compareToValue >= value;\n case \"lt\":\n return compareToValue < value;\n case \"lte\":\n return compareToValue <= value;\n case \"eqValue\":\n return compareToValue === value;\n }\n }\n\n #setValue(value: InitialisationValueType) {\n const safeValue = toSafeValue(value) || \"0\";\n this.bigIntValue = this.#toBigInt(safeValue);\n }\n\n #retrievePrecisionDecimal(...args: InitialisationValueType[]) {\n const decimals = args\n .map((arg) => {\n const isObject = typeof arg === \"object\";\n const value = isObject\n ? arg.decimal || decimalFromMultiplier(arg.decimalMultiplier)\n : getFloatDecimals(toSafeValue(arg));\n\n return value;\n })\n .filter(Boolean) as number[];\n\n return Math.max(...decimals, DEFAULT_DECIMAL);\n }\n\n #toBigInt(value: string, decimal?: number) {\n const multiplier = decimal ? toMultiplier(decimal) : this.decimalMultiplier;\n const padDecimal = decimalFromMultiplier(multiplier);\n const [integerPart = \"\", decimalPart = \"\"] = value.split(\".\");\n\n return BigInt(`${integerPart}${decimalPart.padEnd(padDecimal, \"0\")}`);\n }\n}\n\nconst numberFormatter = Intl.NumberFormat(\"fullwide\", {\n useGrouping: false,\n maximumFractionDigits: 20,\n});\n\nfunction toSafeValue(value: InitialisationValueType) {\n const parsedValue =\n typeof value === \"number\" ? numberFormatter.format(value) : getStringValue(value);\n const splitValue = `${parsedValue}`.replaceAll(\",\", \".\").split(\".\");\n\n return splitValue.length > 1\n ? `${splitValue.slice(0, -1).join(\"\")}.${splitValue.at(-1)}`\n : splitValue[0] || \"0\";\n}\n\nfunction getFloatDecimals(value: string) {\n const decimals = value.split(\".\")[1]?.length || 0;\n return Math.max(decimals, DEFAULT_DECIMAL);\n}\n\nfunction getStringValue(param: SKBigIntParams) {\n return typeof param === \"object\"\n ? \"getValue\" in param\n ? param.getValue(\"string\")\n : param.value\n : param;\n}\n",
|
|
18
|
+
"import {\n type CommonAssetString,\n CommonAssetStrings,\n getAssetType,\n getCommonAssetInfo,\n getDecimal,\n isGasAsset,\n} from \"../helpers/asset.ts\";\nimport { validateIdentifier } from \"../helpers/validators.ts\";\nimport { BaseDecimal, Chain, type ChainId, ChainToChainId } from \"../types/chains.ts\";\nimport type { TokenNames, TokenTax } from \"../types/tokens.ts\";\n\nimport type { NumberPrimitives } from \"./bigIntArithmetics.ts\";\nimport { BigIntArithmetics, formatBigIntToSafeValue } from \"./bigIntArithmetics.ts\";\nimport { SwapKitError } from \"./swapKitError.ts\";\nimport type { SwapKitValueType } from \"./swapKitNumber.ts\";\n\nconst staticTokensMap = new Map<\n TokenNames,\n { tax?: TokenTax; decimal: number; identifier: string }\n>();\n\ntype ConditionalAssetValueReturn<T extends { asyncTokenLookup?: boolean }> =\n T[\"asyncTokenLookup\"] extends true ? Promise<AssetValue> : AssetValue;\n\ntype AssetIdentifier =\n | { asset: CommonAssetString }\n | { asset: TokenNames }\n | { asset: string }\n | { chain: Chain };\n\ntype AssetValueFromParams = AssetIdentifier & {\n value?: NumberPrimitives | SwapKitValueType;\n fromBaseDecimal?: number;\n asyncTokenLookup?: boolean;\n};\n\nexport class AssetValue extends BigIntArithmetics {\n address?: string;\n chain: Chain;\n isGasAsset = false;\n isSynthetic = false;\n symbol: string;\n tax?: TokenTax;\n ticker: string;\n type: ReturnType<typeof getAssetType>;\n chainId: ChainId;\n\n constructor({\n value,\n decimal,\n tax,\n chain,\n symbol,\n identifier,\n }: { decimal: number; value: SwapKitValueType; tax?: TokenTax } & (\n | { chain: Chain; symbol: string; identifier?: never }\n | { identifier: string; chain?: never; symbol?: never }\n )) {\n super(typeof value === \"object\" ? value : { decimal, value });\n\n const assetInfo = getAssetInfo(identifier || `${chain}.${symbol}`);\n\n this.type = getAssetType(assetInfo);\n this.tax = tax;\n this.chain = assetInfo.chain;\n this.ticker = assetInfo.ticker;\n this.symbol = assetInfo.symbol;\n this.address = assetInfo.address;\n this.isSynthetic = assetInfo.isSynthetic;\n this.isGasAsset = assetInfo.isGasAsset;\n this.chainId = ChainToChainId[assetInfo.chain];\n }\n\n toString() {\n return this.isSynthetic ? this.symbol : `${this.chain}.${this.symbol}`;\n }\n\n toUrl() {\n return this.isSynthetic ? `${this.chain}.${this.symbol.replace(\"/\", \".\")}` : this.toString();\n }\n\n eqAsset({ chain, symbol }: { chain: Chain; symbol: string }) {\n return this.chain === chain && this.symbol === symbol;\n }\n\n eq(assetValue: AssetValue) {\n return this.eqAsset(assetValue) && this.eqValue(assetValue);\n }\n\n // THOR.RUNE\n // THOR.ETH.ETH\n // ETH.THOR-0x1234567890\n static fromUrl(urlAsset: string, value: NumberPrimitives = 0) {\n const [chain, ticker, symbol] = urlAsset.split(\".\");\n if (!(chain && ticker)) {\n throw new SwapKitError({\n errorKey: \"helpers_invalid_asset_url\",\n info: { urlAsset },\n });\n }\n\n const asset = chain === Chain.THORChain && symbol ? `${chain}.${ticker}/${symbol}` : urlAsset;\n\n return AssetValue.from({ asset, value });\n }\n\n static from<T extends {}>({\n value = 0,\n fromBaseDecimal,\n asyncTokenLookup,\n ...fromAssetOrChain\n }: T & AssetValueFromParams): ConditionalAssetValueReturn<T> {\n const parsedValue = value instanceof BigIntArithmetics ? value.getValue(\"string\") : value;\n\n const isFromChain = \"chain\" in fromAssetOrChain;\n\n const assetOrChain = isFromChain ? fromAssetOrChain.chain : fromAssetOrChain.asset;\n\n const isFromCommonAssetOrChain =\n isFromChain ||\n CommonAssetStrings.includes(assetOrChain as (typeof CommonAssetStrings)[number]);\n\n const { identifier: unsafeIdentifier, decimal: commonAssetDecimal } = isFromCommonAssetOrChain\n ? getCommonAssetInfo(assetOrChain as CommonAssetString)\n : { identifier: assetOrChain, decimal: undefined };\n\n const { chain, isSynthetic } = getAssetInfo(unsafeIdentifier);\n\n const { tax, decimal, identifier } = staticTokensMap.get(\n unsafeIdentifier.toUpperCase() as TokenNames,\n ) || {\n decimal: commonAssetDecimal || BaseDecimal[chain],\n identifier: unsafeIdentifier,\n };\n\n const adjustedValue = fromBaseDecimal\n ? safeValue(BigInt(parsedValue), fromBaseDecimal)\n : safeValue(parsedValue, decimal);\n\n const assetValue = asyncTokenLookup\n ? createAssetValue(identifier, fromBaseDecimal ? adjustedValue : parsedValue)\n : isSynthetic\n ? createSyntheticAssetValue(identifier, parsedValue)\n : new AssetValue({ tax, decimal, identifier, value: adjustedValue });\n\n return assetValue as ConditionalAssetValueReturn<T>;\n }\n\n static loadStaticAssets() {\n return new Promise<{ ok: true } | { ok: false; message: string; error: Todo }>(\n (resolve, reject) => {\n try {\n import(\"@swapkit/tokens\").then((tokenPackages) => {\n for (const tokenList of Object.values(tokenPackages)) {\n for (const { identifier, chain, ...rest } of tokenList.tokens) {\n staticTokensMap.set(identifier.toUpperCase() as TokenNames, {\n identifier,\n decimal: \"decimals\" in rest ? rest.decimals : BaseDecimal[chain as Chain],\n });\n }\n }\n\n resolve({ ok: true });\n });\n } catch (error) {\n console.error(error);\n reject({\n ok: false,\n error,\n message:\n \"Couldn't load static assets. Ensure you have installed @swapkit/tokens package\",\n });\n }\n },\n );\n }\n\n /**\n * @deprecated use AssetValue.from({ asset, value, asyncTokenLookup: true })\n */\n static fromString(asset: string, value: NumberPrimitives = 0) {\n return AssetValue.from({ asset, value, asyncTokenLookup: true });\n }\n /**\n * @deprecated use AssetValue.from({ asset, value, asyncTokenLookup: true })\n */\n static fromIdentifier(\n asset: `${Chain}.${string}` | `${Chain}/${string}` | TokenNames,\n value: NumberPrimitives = 0,\n ) {\n return AssetValue.from({ asset: asset as TokenNames, value, asyncTokenLookup: true });\n }\n /**\n * @deprecated use AssetValue.from({ asset, value })\n */\n static fromStringSync(asset: string, value: NumberPrimitives = 0) {\n return AssetValue.from({ asset, value });\n }\n /**\n * @deprecated use AssetValue.from({ asset, value, fromBaseDecimal, asyncTokenLookup: true })\n */\n static fromStringWithBase(\n asset: string,\n value: string | bigint = 0n,\n fromBaseDecimal: number = BaseDecimal.THOR,\n ) {\n return AssetValue.from({ asyncTokenLookup: true, asset, value, fromBaseDecimal });\n }\n /**\n * @deprecated use AssetValue.from({ asset, value, fromBaseDecimal, asyncTokenLookup: true })\n */\n static fromStringWithBaseSync(\n asset: string,\n value: string | bigint = 0n,\n fromBaseDecimal: number = BaseDecimal.THOR,\n ) {\n return AssetValue.from({ asset, value, fromBaseDecimal });\n }\n /**\n * @deprecated use AssetValue.from({ asset, value })\n */\n static fromIdentifierSync(asset: TokenNames, value: NumberPrimitives = 0) {\n return AssetValue.from({ asset, value });\n }\n /**\n * @deprecated use AssetValue.from({ asset, value }) or AssetValue.from({ chain, value })\n */\n static fromChainOrSignature(assetOrChain: CommonAssetString, value: NumberPrimitives = 0) {\n if (assetOrChain in Chain) {\n return AssetValue.from({ chain: assetOrChain as Chain, value });\n }\n return AssetValue.from({ asset: assetOrChain, value });\n }\n}\n\nexport function getMinAmountByChain(chain: Chain) {\n const asset = AssetValue.from({ chain });\n\n switch (chain) {\n case Chain.Bitcoin:\n case Chain.Litecoin:\n case Chain.BitcoinCash:\n case Chain.Dash:\n return asset.set(0.00010001);\n\n case Chain.Dogecoin:\n return asset.set(1.00000001);\n\n case Chain.Avalanche:\n case Chain.Ethereum:\n case Chain.Arbitrum:\n case Chain.BinanceSmartChain:\n return asset.set(0.00000001);\n\n case Chain.THORChain:\n case Chain.Maya:\n return asset.set(0);\n\n case Chain.Cosmos:\n case Chain.Kujira:\n return asset.set(0.000001);\n\n default:\n return asset.set(0.00000001);\n }\n}\n\nasync function createAssetValue(identifier: string, value: NumberPrimitives = 0) {\n validateIdentifier(identifier);\n\n const staticToken = staticTokensMap.get(identifier.toUpperCase() as TokenNames);\n const decimal = staticToken?.decimal || (await getDecimal(getAssetInfo(identifier)));\n if (!staticToken) {\n staticTokensMap.set(identifier.toUpperCase() as TokenNames, { identifier, decimal });\n }\n\n return new AssetValue({ decimal, value: safeValue(value, decimal), identifier });\n}\n\nfunction createSyntheticAssetValue(identifier: string, value: NumberPrimitives = 0) {\n const [synthChain, symbol] =\n identifier.split(\".\")?.[0]?.toUpperCase() === Chain.THORChain\n ? identifier.split(\".\").slice(1).join().split(\"/\")\n : identifier.split(\"/\");\n\n if (!(synthChain && symbol)) {\n throw new SwapKitError({\n errorKey: \"helpers_invalid_asset_identifier\",\n info: { identifier },\n });\n }\n\n return new AssetValue({\n decimal: 8,\n value: safeValue(value, 8),\n identifier: `${Chain.THORChain}.${synthChain}/${symbol}`,\n });\n}\n\nfunction safeValue(value: NumberPrimitives, decimal: number) {\n return typeof value === \"bigint\"\n ? formatBigIntToSafeValue({ value, bigIntDecimal: decimal, decimal })\n : value;\n}\n\n// TODO refactor & split into smaller functions\nfunction getAssetInfo(identifier: string) {\n const isSynthetic = identifier.slice(0, 14).includes(\"/\");\n\n const isThorchain = identifier.split(\".\")?.[0]?.toUpperCase() === Chain.THORChain;\n const isMaya = identifier.split(\".\")?.[0]?.toUpperCase() === Chain.Maya;\n\n const [synthChain, synthSymbol = \"\"] =\n isThorchain || isMaya\n ? identifier.split(\".\").slice(1).join().split(\"/\")\n : identifier.split(\"/\");\n\n if (isSynthetic && !(synthChain && synthSymbol)) {\n throw new SwapKitError({\n errorKey: \"helpers_invalid_asset_identifier\",\n info: { identifier },\n });\n }\n\n const adjustedIdentifier =\n identifier.includes(\".\") && !isSynthetic\n ? identifier\n : `${isMaya ? Chain.Maya : Chain.THORChain}.${synthSymbol}`;\n\n const [chain, ...rest] = adjustedIdentifier.split(\".\") as [Chain, string];\n\n const symbol = isSynthetic ? synthSymbol : rest.join(\".\");\n const splitSymbol = symbol.split(\"-\");\n const ticker = (\n splitSymbol.length === 1 ? splitSymbol[0] : splitSymbol.slice(0, -1).join(\"-\")\n ) as string;\n const address = splitSymbol.length === 1 ? undefined : splitSymbol[splitSymbol.length - 1];\n\n return {\n address: address?.toLowerCase(),\n chain,\n isGasAsset: isGasAsset({ chain, symbol }),\n isSynthetic,\n ticker,\n symbol:\n (isSynthetic ? `${synthChain}/` : \"\") +\n (address ? `${ticker}-${address?.toLowerCase() ?? \"\"}` : symbol),\n };\n}\n",
|
|
19
|
+
"import type { KyInstance, Options } from \"ky\";\nimport ky from \"ky\";\n\nlet kyClientConfig: Options & { apiKey?: string } = {};\n\nexport const defaultRequestHeaders =\n typeof window !== \"undefined\"\n ? ({} as Record<string, string>)\n : { referrer: \"https://sk.thorswap.net\", referer: \"https://sk.thorswap.net\" };\n\nexport function setRequestClientConfig({ apiKey, ...config }: Options & { apiKey?: string }) {\n kyClientConfig = { ...config, apiKey };\n}\n\nfunction getKyClient() {\n const { apiKey, ...config } = kyClientConfig;\n return ky.create({\n ...config,\n headers: { ...defaultRequestHeaders, ...config.headers, \"x-api-key\": apiKey },\n });\n}\n\nconst getTypedBaseRequestClient = (ky: KyInstance) => ({\n get: async <T>(url: string | URL | Request, options?: Options) =>\n (await ky.get(url, options)).json<T>(),\n post: async <T>(url: string | URL | Request, options?: Options) =>\n (await ky.post(url, options)).json<T>(),\n});\n\nexport const RequestClient = {\n ...getTypedBaseRequestClient(getKyClient()),\n extend: (options: Options) => {\n const extendedClient = getKyClient().extend(options);\n return {\n ...getTypedBaseRequestClient(extendedClient),\n extend: RequestClient.extend,\n };\n },\n};\n",
|
|
20
|
+
"import { AssetValue } from \"../modules/assetValue.ts\";\nimport { RequestClient } from \"../modules/requestClient.ts\";\nimport { BaseDecimal, Chain, ChainToRPC, type EVMChain, EVMChains } from \"../types/chains.ts\";\nimport type { RadixCoreStateResourceDTO } from \"../types/radix.ts\";\nimport type { TokenNames } from \"../types/tokens.ts\";\n\nconst getDecimalMethodHex = \"0x313ce567\";\n\nexport type CommonAssetString = (typeof CommonAssetStrings)[number] | Chain;\n\nexport const CommonAssetStrings = [\n `${Chain.Maya}.MAYA`,\n `${Chain.Ethereum}.THOR`,\n `${Chain.Ethereum}.vTHOR`,\n `${Chain.Kujira}.USK`,\n] as const;\n\nconst getContractDecimals = async ({ chain, to }: { chain: EVMChain; to: string }) => {\n try {\n const { result } = await RequestClient.post<{ result: string }>(ChainToRPC[chain], {\n headers: {\n accept: \"*/*\",\n \"content-type\": \"application/json\",\n \"cache-control\": \"no-cache\",\n },\n body: JSON.stringify({\n id: 44,\n jsonrpc: \"2.0\",\n method: \"eth_call\",\n params: [{ to: to.toLowerCase(), data: getDecimalMethodHex }, \"latest\"],\n }),\n });\n\n return Number.parseInt(BigInt(result || BaseDecimal[chain]).toString());\n } catch (error) {\n console.error(error);\n return BaseDecimal[chain];\n }\n};\n\nconst getRadixResourceDecimals = async ({ symbol }: { symbol: string }) => {\n try {\n const resourceAddress = symbol.split(\"-\")[1]?.toLowerCase();\n\n const { manager } = await RequestClient.post<RadixCoreStateResourceDTO>(\n `${ChainToRPC[Chain.Radix]}/state/resource`,\n {\n headers: {\n Accept: \"*/*\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n network: \"mainnet\",\n resource_address: resourceAddress,\n }),\n },\n );\n\n return manager.divisibility.value.divisibility;\n } catch (error) {\n console.error(error);\n return BaseDecimal[Chain.Radix];\n }\n};\n\nconst getETHAssetDecimal = (symbol: string) => {\n if (symbol === Chain.Ethereum) return BaseDecimal.ETH;\n const splitSymbol = symbol.split(\"-\");\n const address =\n splitSymbol.length === 1 ? undefined : splitSymbol[splitSymbol.length - 1]?.toLowerCase();\n\n return address?.startsWith(\"0x\")\n ? getContractDecimals({ chain: Chain.Ethereum, to: address })\n : BaseDecimal.ETH;\n};\n\nconst getAVAXAssetDecimal = (symbol: string) => {\n const splitSymbol = symbol.split(\"-\");\n const address = splitSymbol.length === 1 ? undefined : splitSymbol[splitSymbol.length - 1];\n\n return address?.startsWith(\"0x\")\n ? getContractDecimals({ chain: Chain.Avalanche, to: address.toLowerCase() })\n : BaseDecimal.AVAX;\n};\n\nconst getBSCAssetDecimal = (symbol: string) => {\n if (symbol === Chain.BinanceSmartChain) return BaseDecimal.BSC;\n\n return BaseDecimal.BSC;\n};\n\nconst getRadixAssetDecimal = (symbol: string) => {\n if (symbol === Chain.Radix) return BaseDecimal.XRD;\n\n return getRadixResourceDecimals({ symbol });\n};\n\nexport const getDecimal = ({ chain, symbol }: { chain: Chain; symbol: string }) => {\n switch (chain) {\n case Chain.Ethereum:\n return getETHAssetDecimal(symbol);\n case Chain.Avalanche:\n return getAVAXAssetDecimal(symbol);\n case Chain.BinanceSmartChain:\n return getBSCAssetDecimal(symbol);\n case Chain.Radix:\n return getRadixAssetDecimal(symbol);\n default:\n return BaseDecimal[chain];\n }\n};\n\nexport const getGasAsset = ({ chain }: { chain: Chain }) => {\n switch (chain) {\n case Chain.Arbitrum:\n case Chain.Optimism:\n return AssetValue.from({ asset: `${chain}.ETH` });\n case Chain.Maya:\n return AssetValue.from({ asset: `${chain}.CACAO` });\n case Chain.Cosmos:\n return AssetValue.from({ asset: `${chain}.ATOM` });\n case Chain.BinanceSmartChain:\n return AssetValue.from({ asset: `${chain}.BNB` });\n case Chain.THORChain:\n return AssetValue.from({ asset: `${chain}.RUNE` });\n\n default:\n return AssetValue.from({ asset: `${chain}.${chain}` });\n }\n};\n\nexport const isGasAsset = ({ chain, symbol }: { chain: Chain; symbol: string }) => {\n switch (chain) {\n case Chain.Arbitrum:\n case Chain.Optimism:\n return symbol === \"ETH\";\n case Chain.Maya:\n return symbol === \"CACAO\";\n case Chain.Cosmos:\n return symbol === \"ATOM\";\n case Chain.BinanceSmartChain:\n return symbol === \"BNB\";\n case Chain.THORChain:\n return symbol === \"RUNE\";\n\n default:\n return symbol === chain;\n }\n};\n\nexport const getCommonAssetInfo = (\n assetString: CommonAssetString,\n): { identifier: string; decimal: number } => {\n switch (assetString) {\n case Chain.Arbitrum:\n case Chain.Optimism:\n return { identifier: `${assetString}.ETH`, decimal: BaseDecimal[assetString] };\n\n case `${Chain.Ethereum}.THOR`:\n return { identifier: \"ETH.THOR-0xa5f2211b9b8170f694421f2046281775e8468044\", decimal: 18 };\n case `${Chain.Ethereum}.vTHOR`:\n return { identifier: \"ETH.vTHOR-0x815c23eca83261b6ec689b60cc4a58b54bc24d8d\", decimal: 18 };\n case Chain.Cosmos:\n return { identifier: `${assetString}.ATOM`, decimal: BaseDecimal[assetString] };\n case Chain.THORChain:\n return { identifier: `${assetString}.RUNE`, decimal: BaseDecimal[assetString] };\n case Chain.BinanceSmartChain:\n return { identifier: `${assetString}.BNB`, decimal: BaseDecimal[assetString] };\n case Chain.Maya:\n return { identifier: `${assetString}.CACAO`, decimal: BaseDecimal[assetString] };\n case Chain.Radix:\n return { identifier: `${Chain.Radix}.XRD`, decimal: BaseDecimal[assetString] };\n\n case `${Chain.Maya}.MAYA`:\n return { identifier: assetString, decimal: 4 };\n case `${Chain.Kujira}.USK`:\n return { identifier: assetString, decimal: 6 };\n\n default:\n return { identifier: `${assetString}.${assetString}`, decimal: BaseDecimal[assetString] };\n }\n};\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO: Refactor\nexport const getAssetType = ({ chain, symbol }: { chain: Chain; symbol: string }) => {\n if (symbol.includes(\"/\")) return \"Synth\";\n\n switch (chain) {\n case Chain.Cosmos:\n return symbol === \"ATOM\" ? \"Native\" : Chain.Cosmos;\n case Chain.Kujira:\n return symbol === Chain.Kujira ? \"Native\" : Chain.Kujira;\n case Chain.BinanceSmartChain:\n return symbol === \"BNB\" ? \"Native\" : \"BEP20\";\n case Chain.Ethereum:\n return symbol === Chain.Ethereum ? \"Native\" : \"ERC20\";\n case Chain.Avalanche:\n return symbol === Chain.Avalanche ? \"Native\" : Chain.Avalanche;\n case Chain.Polygon:\n return symbol === Chain.Polygon ? \"Native\" : \"POLYGON\";\n case Chain.Arbitrum:\n return [Chain.Ethereum, Chain.Arbitrum].includes(symbol as Chain) ? \"Native\" : \"ARBITRUM\";\n case Chain.Optimism:\n return [Chain.Ethereum, Chain.Optimism].includes(symbol as Chain) ? \"Native\" : \"OPTIMISM\";\n case Chain.Radix:\n return symbol === Chain.Radix ? \"Native\" : \"RADIX\";\n\n default:\n return \"Native\";\n }\n};\n\nexport const assetFromString = (assetString: string) => {\n const [chain, ...symbolArray] = assetString.split(\".\") as [Chain, ...(string | undefined)[]];\n const synth = assetString.includes(\"/\");\n const symbol = symbolArray.join(\".\");\n const splitSymbol = symbol?.split(\"-\");\n const ticker = splitSymbol?.length\n ? splitSymbol.length === 1\n ? splitSymbol[0]\n : splitSymbol.slice(0, -1).join(\"-\")\n : undefined;\n\n return { chain, symbol, ticker, synth };\n};\n\nconst potentialScamRegex = new RegExp(\n /(.)\\1{6}|\\.ORG|\\.NET|\\.FINANCE|\\.COM|WWW|HTTP|\\\\\\\\|\\/\\/|[\\s$%:[\\]]/,\n \"gmi\",\n);\n\nconst evmAssetHasAddress = (assetString: string) => {\n const [chain, symbol] = assetString.split(\".\") as [EVMChain, string];\n if (!EVMChains.includes(chain as EVMChain)) return true;\n const splitSymbol = symbol.split(\"-\");\n const address = splitSymbol.length === 1 ? undefined : splitSymbol[splitSymbol.length - 1];\n\n return isGasAsset({ chain: chain as Chain, symbol }) || !!address;\n};\n\nexport const filterAssets = (\n tokens: {\n value: string;\n decimal: number;\n chain: Chain;\n symbol: string;\n }[],\n) =>\n tokens.filter(({ chain, value, symbol }) => {\n const assetString = `${chain}.${symbol}`;\n\n return (\n !potentialScamRegex.test(assetString) && evmAssetHasAddress(assetString) && value !== \"0\"\n );\n });\n\nexport async function findAssetBy(\n params: { chain: EVMChain; contract: string } | { identifier: `${Chain}.${string}` },\n) {\n const tokenPackages = await import(\"@swapkit/tokens\");\n\n for (const tokenList of Object.values(tokenPackages)) {\n for (const { identifier, chain: tokenChain, ...rest } of tokenList.tokens) {\n if (\"identifier\" in params && identifier === params.identifier) {\n return identifier as TokenNames;\n }\n\n if (\n \"address\" in rest &&\n \"chain\" in params &&\n tokenChain === params.chain &&\n rest.address.toLowerCase() === params.contract.toLowerCase()\n )\n return identifier as TokenNames;\n }\n }\n\n return;\n}\n",
|
|
21
|
+
"import {\n Chain,\n type DerivationPathArray,\n type EVMChain,\n EVMChains,\n NetworkDerivationPath,\n} from \"../types\";\n\ntype Params = {\n chain: Chain;\n index: number;\n addressIndex?: number;\n type?: \"legacy\" | \"ledgerLive\" | \"nativeSegwitMiddleAccount\" | \"segwit\";\n};\n\nconst updatedLastIndex = (path: DerivationPathArray, index: number) => [\n ...path.slice(0, path.length - 1),\n index,\n];\n\nexport function getDerivationPathFor({ chain, index, addressIndex = 0, type }: Params) {\n if (EVMChains.includes(chain as EVMChain)) {\n if (type === \"legacy\") return [44, 60, 0, index];\n if (type === \"ledgerLive\") return [44, 60, index, 0, addressIndex];\n return updatedLastIndex(NetworkDerivationPath[chain], index);\n }\n\n if ([Chain.Bitcoin, Chain.Litecoin].includes(chain)) {\n const chainId = chain === Chain.Bitcoin ? 0 : 2;\n\n if (type === \"nativeSegwitMiddleAccount\") return [84, chainId, index, 0, addressIndex];\n if (type === \"segwit\") return [49, chainId, 0, 0, index];\n if (type === \"legacy\") return [44, chainId, 0, 0, index];\n return updatedLastIndex(NetworkDerivationPath[chain], index);\n }\n\n return updatedLastIndex(NetworkDerivationPath[chain], index);\n}\n\nexport function getWalletFormatFor(path: string) {\n const [_, purpose, chainId] = path.split(\"/\").map((p) => Number.parseInt(p, 10));\n\n if (chainId === 145) \"cashaddr\";\n\n switch (purpose) {\n case 44:\n return \"legacy\";\n case 49:\n return \"p2sh\";\n default:\n return \"bech32\";\n }\n}\n",
|
|
22
|
+
"import { SwapKitNumber } from \"../index.ts\";\nimport { BaseDecimal } from \"../types/chains.ts\";\n\ntype ShareParams<T extends {}> = T & {\n liquidityUnits: string;\n poolUnits: string;\n};\n\ntype PoolParams = {\n runeAmount: string;\n assetAmount: string;\n runeDepth: string;\n assetDepth: string;\n};\n\n/**\n * Ref: https://gitlab.com/thorchain/thornode/-/issues/657\n * share = (s * A * (2 * T^2 - 2 * T * s + s^2))/T^3\n * s = stakeUnits for member (after factoring in withdrawBasisPoints)\n * T = totalPoolUnits for pool\n * A = assetDepth to be withdrawn\n *\n * Formula:\n * share = (s * A * (2 * T^2 - 2 * T * s + s^2))/T^3\n * (part1 * (part2 - part3 + part4)) / part5\n */\nexport function getAsymmetricRuneShare({\n liquidityUnits,\n poolUnits,\n runeDepth,\n}: ShareParams<{ runeDepth: string }>) {\n const s = toTCSwapKitNumber(liquidityUnits);\n const T = toTCSwapKitNumber(poolUnits);\n const A = toTCSwapKitNumber(runeDepth);\n\n const part1 = s.mul(A);\n const part2 = T.mul(T).mul(2);\n const part3 = T.mul(s).mul(2);\n const part4 = s.mul(s);\n const part5 = T.mul(T).mul(T);\n\n const numerator = part1.mul(part2.sub(part3).add(part4));\n\n return numerator.div(part5);\n}\n\nexport function getAsymmetricAssetShare({\n liquidityUnits,\n poolUnits,\n assetDepth,\n}: ShareParams<{ assetDepth: string }>) {\n const s = toTCSwapKitNumber(liquidityUnits);\n const T = toTCSwapKitNumber(poolUnits);\n const A = toTCSwapKitNumber(assetDepth);\n\n const part1 = s.mul(A);\n const part2 = T.mul(T).mul(2);\n const part3 = T.mul(s).mul(2);\n const part4 = s.mul(s);\n const numerator = part1.mul(part2.sub(part3).add(part4));\n const part5 = T.mul(T).mul(T);\n\n return numerator.div(part5);\n}\n\nexport function getAsymmetricRuneWithdrawAmount({\n percent,\n runeDepth,\n liquidityUnits,\n poolUnits,\n}: ShareParams<{ percent: number; runeDepth: string }>) {\n return getAsymmetricRuneShare({ runeDepth, liquidityUnits, poolUnits }).mul(percent);\n}\n\nexport function getAsymmetricAssetWithdrawAmount({\n percent,\n assetDepth,\n liquidityUnits,\n poolUnits,\n}: ShareParams<{ percent: number; assetDepth: string }>) {\n return getAsymmetricAssetShare({ assetDepth, liquidityUnits, poolUnits }).mul(percent);\n}\n\nfunction toTCSwapKitNumber(value: string) {\n return SwapKitNumber.fromBigInt(BigInt(value), BaseDecimal.THOR);\n}\n\nexport function getSymmetricPoolShare({\n liquidityUnits,\n poolUnits,\n runeDepth,\n assetDepth,\n}: ShareParams<{\n runeDepth: string;\n assetDepth: string;\n}>) {\n return {\n assetAmount: toTCSwapKitNumber(assetDepth).mul(liquidityUnits).div(poolUnits),\n runeAmount: toTCSwapKitNumber(runeDepth).mul(liquidityUnits).div(poolUnits),\n };\n}\n\nexport function getSymmetricWithdraw({\n liquidityUnits,\n poolUnits,\n runeDepth,\n assetDepth,\n percent,\n}: ShareParams<{\n runeDepth: string;\n assetDepth: string;\n percent: number;\n}>) {\n return Object.fromEntries(\n Object.entries(getSymmetricPoolShare({ liquidityUnits, poolUnits, runeDepth, assetDepth })).map(\n ([name, value]) => [name, value.mul(percent)],\n ),\n );\n}\n\nexport function getEstimatedPoolShare({\n runeDepth,\n poolUnits,\n assetDepth,\n liquidityUnits,\n runeAmount,\n assetAmount,\n}: ShareParams<{\n runeAmount: string;\n assetAmount: string;\n runeDepth: string;\n assetDepth: string;\n}>) {\n const R = new SwapKitNumber({ value: runeDepth, decimal: 8 });\n const A = new SwapKitNumber({ value: assetDepth, decimal: 8 });\n const P = new SwapKitNumber({ value: poolUnits, decimal: 8 });\n const runeAddAmount = new SwapKitNumber({ value: runeAmount, decimal: 8 });\n const assetAddAmount = new SwapKitNumber({ value: assetAmount, decimal: 8 });\n\n // liquidityUnits = P * (r*A + a*R + 2*r*a) / (r*A + a*R + 2*R*A)\n const rA = runeAddAmount.mul(A);\n const aR = assetAddAmount.mul(R);\n const ra = runeAddAmount.mul(assetAddAmount);\n const RA = R.mul(A);\n const numerator = P.mul(rA.add(aR.add(ra.mul(2))));\n const denominator = rA.add(aR.add(RA.mul(2)));\n const liquidityUnitsAfterAdd = numerator.div(denominator);\n const estimatedLiquidityUnits = toTCSwapKitNumber(liquidityUnits).add(liquidityUnitsAfterAdd);\n\n if (liquidityUnitsAfterAdd.getBaseValue(\"number\") === 0) {\n return estimatedLiquidityUnits.div(P).getBaseValue(\"number\");\n }\n\n // get pool units after add\n const newPoolUnits = P.add(estimatedLiquidityUnits);\n\n return estimatedLiquidityUnits.div(newPoolUnits).getBaseValue(\"number\");\n}\n\nexport function getLiquiditySlippage({\n runeAmount,\n assetAmount,\n runeDepth,\n assetDepth,\n}: PoolParams) {\n if (runeAmount === \"0\" || assetAmount === \"0\" || runeDepth === \"0\" || assetDepth === \"0\")\n return 0;\n // formula: (t * R - T * r)/ (T*r + R*T)\n const R = toTCSwapKitNumber(runeDepth);\n const T = toTCSwapKitNumber(assetDepth);\n const assetAddAmount = toTCSwapKitNumber(assetAmount);\n const runeAddAmount = toTCSwapKitNumber(runeAmount);\n\n const numerator = assetAddAmount.mul(R).sub(T.mul(runeAddAmount));\n const denominator = T.mul(runeAddAmount).add(R.mul(T));\n\n // set absolute value of percent, no negative allowed\n return Math.abs(numerator.div(denominator).getBaseValue(\"number\"));\n}\n",
|
|
23
|
+
"import { SwapKitError } from \"../modules/swapKitError\";\nimport { Chain } from \"../types/chains\";\nimport { MemoType } from \"../types/sdk\";\n\ntype WithChain<T extends {}> = T & { chain: Chain };\n\ntype WithAffiliate<T extends {}> = T & { affiliateAddress?: string; affiliateBasisPoints?: number };\n\nfunction addAffiliate(memo: string, { affiliateAddress, affiliateBasisPoints }: WithAffiliate<{}>) {\n const affiliatePart = affiliateAddress ? `:${affiliateAddress}:${affiliateBasisPoints || 0}` : \"\";\n\n return `${memo}${affiliatePart}`;\n}\n\nfunction getPoolIdentifier({ chain, symbol }: { chain: Chain; symbol: string }) {\n switch (chain) {\n case Chain.Bitcoin:\n case Chain.Dogecoin:\n case Chain.Litecoin:\n return chain.slice(0, 1).toLowerCase();\n case Chain.BitcoinCash:\n return \"c\";\n\n default:\n return `${chain}.${symbol}`;\n }\n}\n\nexport function getMemoForLeaveAndBond({\n type,\n address,\n}: { type: MemoType.BOND | MemoType.LEAVE; address: string }) {\n return `${type}:${address}`;\n}\n\nexport function getMemoForUnbond({\n address,\n unbondAmount,\n}: { address: string; unbondAmount: number }) {\n return `${MemoType.UNBOND}:${address}:${unbondAmount}`;\n}\n\nexport function getMemoForNameRegister({\n name,\n chain,\n address,\n owner,\n}: { name: string; chain: string; address: string; owner?: string }) {\n const baseMemo = `${MemoType.NAME_REGISTER}:${name}:${chain}:${address}`;\n const ownerAssignmentOrChangePart = owner ? `:${owner}` : \"\";\n\n return `${baseMemo}${ownerAssignmentOrChangePart}`;\n}\n\nexport function getMemoForLoan(\n memoType: MemoType.OPEN_LOAN | MemoType.CLOSE_LOAN,\n {\n asset,\n address,\n minAmount,\n ...affiliate\n }: WithAffiliate<{\n address: string;\n asset: string;\n minAmount?: string;\n }>,\n) {\n const baseMemo = `${memoType}:${asset}:${address}`;\n const minAmountPart = minAmount ? `:${minAmount}` : \"\";\n\n return addAffiliate(`${baseMemo}${minAmountPart}`, affiliate);\n}\n\nexport function getMemoForSaverDeposit({\n chain,\n symbol,\n ...affiliate\n}: WithAffiliate<{ chain: Chain; symbol: string }>) {\n return addAffiliate(`${MemoType.DEPOSIT}:${chain}/${symbol}`, affiliate);\n}\n\nexport function getMemoForDeposit({\n chain,\n symbol,\n address,\n}: { chain: Chain; symbol: string; address?: string }) {\n const poolIdentifier = getPoolIdentifier({ chain, symbol });\n const addressPart = address ? `:${address}` : \"\";\n\n return `${MemoType.DEPOSIT}:${poolIdentifier}${addressPart}`;\n}\n\nexport function getMemoForSaverWithdraw({\n chain,\n symbol,\n basisPoints,\n ...affiliate\n}: WithAffiliate<{ chain: Chain; symbol: string; basisPoints: number }>) {\n return addAffiliate(`${MemoType.WITHDRAW}:${chain}/${symbol}:${basisPoints}`, affiliate);\n}\n\nexport function getMemoForWithdraw({\n chain,\n symbol,\n ticker,\n basisPoints,\n targetAsset,\n ...affiliate\n}: WithAffiliate<{\n chain: Chain;\n symbol: string;\n ticker: string;\n basisPoints: number;\n targetAsset?: string;\n}>) {\n const shortenedSymbol =\n chain === \"ETH\" && ticker !== \"ETH\" ? `${ticker}-${symbol.slice(-3)}` : symbol;\n const targetPart = targetAsset ? `:${targetAsset}` : \"\";\n\n return addAffiliate(\n `${MemoType.WITHDRAW}:${chain}.${shortenedSymbol}:${basisPoints}${targetPart}`,\n affiliate,\n );\n}\n\n/**\n * @deprecated - Use separate functions per each memo type like getMemoForDeposit, getMemoForWithdraw, etc.\n */\nexport type MemoOptions<T extends MemoType> = {\n [MemoType.BOND]: { address: string };\n [MemoType.LEAVE]: { address: string };\n [MemoType.CLOSE_LOAN]: { address: string; asset: string; minAmount?: string };\n [MemoType.OPEN_LOAN]: { address: string; asset: string; minAmount?: string };\n [MemoType.UNBOND]: { address: string; unbondAmount: number };\n [MemoType.DEPOSIT]: WithChain<{ symbol: string; address?: string; singleSide?: boolean }>;\n [MemoType.WITHDRAW]: WithChain<{\n ticker: string;\n symbol: string;\n basisPoints: number;\n targetAssetString?: string;\n singleSide?: boolean;\n }>;\n [MemoType.NAME_REGISTER]: { name: string; chain: string; address: string };\n}[T];\n\n/**\n * @deprecated - Use separate functions per each memo type like getMemoForDeposit, getMemoForWithdraw, etc.\n */\nexport const getMemoFor = <T extends MemoType>(memoType: T, options: MemoOptions<T>) => {\n switch (memoType) {\n case MemoType.LEAVE:\n case MemoType.BOND: {\n const { address } = options as MemoOptions<MemoType.BOND>;\n return getMemoForLeaveAndBond({ type: memoType, address });\n }\n\n case MemoType.UNBOND: {\n const { address, unbondAmount } = options as MemoOptions<MemoType.UNBOND>;\n return getMemoForUnbond({ address, unbondAmount });\n }\n\n case MemoType.NAME_REGISTER: {\n return getMemoForNameRegister(options as MemoOptions<MemoType.NAME_REGISTER>);\n }\n\n case MemoType.OPEN_LOAN:\n case MemoType.CLOSE_LOAN: {\n return getMemoForLoan(memoType, options as MemoOptions<MemoType.OPEN_LOAN>);\n }\n\n case MemoType.DEPOSIT: {\n const { chain, symbol, address, singleSide } = options as MemoOptions<MemoType.DEPOSIT>;\n\n if (singleSide) {\n return getMemoForSaverDeposit({ chain, symbol });\n }\n\n return getMemoForDeposit({ chain, symbol, address });\n }\n\n case MemoType.WITHDRAW: {\n const {\n chain,\n ticker,\n symbol,\n basisPoints,\n targetAssetString: targetAsset,\n singleSide,\n } = options as MemoOptions<MemoType.WITHDRAW>;\n\n if (singleSide) {\n return getMemoForSaverWithdraw({ chain, symbol, basisPoints });\n }\n\n return getMemoForWithdraw({ chain, ticker, symbol, basisPoints, targetAsset });\n }\n\n default:\n throw new SwapKitError({\n errorKey: \"helpers_invalid_memo_type\",\n info: { memoType },\n });\n }\n};\n",
|
|
24
|
+
"import { type ErrorKeys, SwapKitError } from \"../modules/swapKitError\";\nimport { Chain } from \"../types\";\nimport type { DerivationPathArray } from \"../types/derivationPath\";\n\n// 10 rune for register, 1 rune per year\n// MINIMUM_REGISTRATION_FEE = 11\nexport function getTHORNameCost(numberOfYears: number) {\n if (numberOfYears < 0)\n throw new SwapKitError({\n errorKey: \"helpers_invalid_number_of_years\",\n info: { numberOfYears },\n });\n return 10 + numberOfYears;\n}\n\n// 10 CACAO for register\n// 1.0512 CACAO per year\nexport function getMAYANameCost(numberOfYears: number) {\n if (numberOfYears < 0)\n throw new SwapKitError({\n errorKey: \"helpers_invalid_number_of_years\",\n info: { numberOfYears },\n });\n // round to max 10 decimals\n return Math.round((10 + numberOfYears * 1.0512) * 1e10) / 1e10;\n}\n\nexport function derivationPathToString([network, chainId, account, change, index]:\n | [number, number, number, number, number | undefined]\n | DerivationPathArray) {\n const shortPath = typeof index !== \"number\";\n\n return `m/${network}'/${chainId}'/${account}'/${change}${shortPath ? \"\" : `/${index}`}`;\n}\n\nexport function wrapWithThrow<T>(fn: () => T, errorKey?: ErrorKeys) {\n try {\n return fn();\n } catch (error) {\n if (errorKey) {\n throw new SwapKitError(errorKey, error);\n }\n\n return console.error(error);\n }\n}\n\nexport const getChainIdentifier = (chain: Chain) => {\n switch (chain) {\n case Chain.THORChain:\n return `${chain}.RUNE`;\n\n case Chain.Cosmos:\n return `${chain}.ATOM`;\n\n case Chain.BinanceSmartChain:\n return `${chain}`;\n\n default:\n return `${chain}.${chain}`;\n }\n};\n",
|
|
25
|
+
"import type { BrowserProvider } from \"ethers\";\nimport { SwapKitError } from \"../modules/swapKitError\";\nimport {\n ChainId,\n type EIP6963AnnounceProviderEvent,\n type EIP6963Provider,\n WalletOption,\n} from \"../types\";\n\nexport type EthereumWindowProvider = BrowserProvider & {\n __XDEFI?: boolean;\n isBraveWallet?: boolean;\n isCoinbaseWallet?: boolean;\n isMetaMask?: boolean;\n isOkxWallet?: boolean;\n isTrust?: boolean;\n isTalisman?: boolean;\n on: (event: string, callback?: () => void) => void;\n overrideIsMetaMask?: boolean;\n request: <T = unknown>(args: { method: string; params?: unknown[] }) => Promise<T>;\n selectedProvider?: EthereumWindowProvider;\n};\n\ndeclare const window: {\n ethereum: EthereumWindowProvider;\n trustwallet: EthereumWindowProvider;\n coinbaseWalletExtension: EthereumWindowProvider;\n braveSolana: Todo;\n} & Window;\n\n// declare global {\n// interface Window {\n// ethereum: EthereumWindowProvider;\n// trustwallet: EthereumWindowProvider;\n// coinbaseWalletExtension: EthereumWindowProvider;\n// braveSolana: Todo;\n// }\n// }\n\ntype NetworkParams = {\n chainId: ChainId;\n chainName: string;\n nativeCurrency: {\n name: string;\n symbol: string;\n decimals: number;\n };\n rpcUrls: string[];\n blockExplorerUrls: string[];\n};\n\ntype ProviderRequestParams = {\n provider?: BrowserProvider;\n params?: Todo;\n method:\n | \"wallet_addEthereumChain\"\n | \"wallet_switchEthereumChain\"\n | \"eth_requestAccounts\"\n | \"eth_sendTransaction\"\n | \"eth_signTransaction\";\n};\n\nconst methodsToWrap = [\n \"approve\",\n \"approvedAmount\",\n \"call\",\n \"sendTransaction\",\n \"transfer\",\n \"isApproved\",\n \"approvedAmount\",\n \"EIP1193SendTransaction\",\n \"getFeeData\",\n \"broadcastTransaction\",\n \"estimateCall\",\n \"estimateGasLimit\",\n \"estimateGasPrices\",\n \"createContractTxObject\",\n];\n\nexport const wrapMethodWithNetworkSwitch = <T extends (...args: Todo[]) => Todo>(\n func: T,\n provider: BrowserProvider,\n chainId: ChainId,\n) =>\n (async (...args: Todo[]) => {\n try {\n await switchEVMWalletNetwork(provider, chainId);\n } catch (error) {\n throw new SwapKitError({\n errorKey: \"helpers_failed_to_switch_network\",\n info: { error },\n });\n }\n return func(...args);\n }) as unknown as T;\n\nconst providerRequest = ({ provider, params, method }: ProviderRequestParams) => {\n if (!provider?.send) {\n throw new SwapKitError(\"helpers_not_found_provider\");\n }\n\n const providerParams = params ? (Array.isArray(params) ? params : [params]) : [];\n return provider.send(method, providerParams);\n};\n\nexport const prepareNetworkSwitch = <T extends { [key: string]: (...args: Todo[]) => Todo }>({\n toolbox,\n chainId,\n provider = window.ethereum,\n}: {\n toolbox: T;\n chainId: ChainId;\n provider?: BrowserProvider;\n}) => {\n const wrappedMethods = methodsToWrap.reduce((object, methodName) => {\n if (!toolbox[methodName]) return object;\n const method = toolbox[methodName];\n\n if (typeof method !== \"function\") return object;\n\n return {\n // biome-ignore lint/performance/noAccumulatingSpread: This is a valid use case\n ...object,\n [methodName]: wrapMethodWithNetworkSwitch<typeof method>(method, provider, chainId),\n };\n }, {});\n\n return { ...toolbox, ...wrappedMethods };\n};\n\nexport const addEVMWalletNetwork = (provider: BrowserProvider, networkParams: NetworkParams) =>\n providerRequest({ provider, method: \"wallet_addEthereumChain\", params: [networkParams] });\n\nexport const switchEVMWalletNetwork = (provider: BrowserProvider, chainId = ChainId.EthereumHex) =>\n providerRequest({ provider, method: \"wallet_switchEthereumChain\", params: [{ chainId }] });\n\nexport const addAccountsChangedCallback = (callback: () => void) => {\n window.ethereum?.on(\"accountsChanged\", () => callback());\n // @ts-expect-error that should be implemented in xdefi and hooked up via swapkit core\n window.xfi?.ethereum.on(\"accountsChanged\", () => callback());\n};\n\nexport const getETHDefaultWallet = () => {\n const { isTrust, isBraveWallet, __XDEFI, overrideIsMetaMask, selectedProvider } =\n window?.ethereum || {};\n if (isTrust) return WalletOption.TRUSTWALLET_WEB;\n if (isBraveWallet) return WalletOption.BRAVE;\n if (overrideIsMetaMask && selectedProvider?.isCoinbaseWallet) return WalletOption.COINBASE_WEB;\n if (__XDEFI) WalletOption.XDEFI;\n return WalletOption.METAMASK;\n};\n\nexport const isDetected = (walletOption: WalletOption) => {\n return listWeb3EVMWallets().includes(walletOption);\n};\n\nexport const listWeb3EVMWallets = () => {\n const metamaskEnabled = window?.ethereum && !window.ethereum?.isBraveWallet;\n // @ts-ignore that should be implemented in xdefi and hooked up via swapkit core\n const xdefiEnabled = window?.xfi || window?.ethereum?.__XDEFI;\n const braveEnabled = window?.ethereum?.isBraveWallet;\n const trustEnabled = window?.ethereum?.isTrust || window?.trustwallet;\n const coinbaseEnabled =\n (window?.ethereum?.overrideIsMetaMask &&\n window?.ethereum?.selectedProvider?.isCoinbaseWallet) ||\n window?.coinbaseWalletExtension;\n\n const wallets = [];\n if (metamaskEnabled) wallets.push(WalletOption.METAMASK);\n if (xdefiEnabled) wallets.push(WalletOption.XDEFI);\n if (braveEnabled) wallets.push(WalletOption.BRAVE);\n if (trustEnabled) wallets.push(WalletOption.TRUSTWALLET_WEB);\n if (coinbaseEnabled) wallets.push(WalletOption.COINBASE_WEB);\n if (okxMobileEnabled()) wallets.push(WalletOption.OKX_MOBILE);\n\n return wallets;\n};\n\nexport function getEIP6963Wallets() {\n const providers: EIP6963Provider[] = [];\n\n function onAnnouncement(event: EIP6963AnnounceProviderEvent) {\n if (providers.map((p) => p.info.uuid).includes(event.detail.info.uuid)) return;\n providers.push(event.detail);\n }\n\n window.addEventListener(\"eip6963:announceProvider\", onAnnouncement);\n window.dispatchEvent(new Event(\"eip6963:requestProvider\"));\n\n function removeEIP6963EventListener() {\n window.removeEventListener(\"eip6963:announceProvider\", onAnnouncement);\n }\n\n return { providers, removeEIP6963EventListener };\n}\n\nexport const okxMobileEnabled = () => {\n const ua = navigator.userAgent;\n const isIOS = /iphone|ipad|ipod|ios/i.test(ua);\n const isAndroid = /android|XiaoMi|MiuiBrowser/i.test(ua);\n const isMobile = isIOS || isAndroid;\n const isOKApp = /OKApp/i.test(ua);\n\n return isMobile && isOKApp;\n};\n\nexport const isWeb3Detected = () => typeof window.ethereum !== \"undefined\";\n",
|
|
26
|
+
"import { BigIntArithmetics, formatBigIntToSafeValue } from \"./bigIntArithmetics.ts\";\n\nexport type SwapKitValueType = BigIntArithmetics | string | number;\n\nexport class SwapKitNumber extends BigIntArithmetics {\n eq(value: SwapKitValueType) {\n return this.eqValue(value);\n }\n\n static fromBigInt(value: bigint, decimal?: number) {\n return new SwapKitNumber({\n decimal,\n value: formatBigIntToSafeValue({ value, bigIntDecimal: decimal, decimal }),\n });\n }\n}\n"
|
|
26
27
|
],
|
|
27
|
-
"mappings": "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",
|
|
28
|
-
"debugId": "
|
|
28
|
+
"mappings": "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",
|
|
29
|
+
"debugId": "10B3754A9D3A879764756E2164756E21",
|
|
29
30
|
"names": []
|
|
30
31
|
}
|