@shapeshiftoss/contracts 1.0.3 → 1.0.4

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.
Files changed (124) hide show
  1. package/dist/cjs/.tsbuildinfo +1 -0
  2. package/dist/cjs/abis/arbOutbox.d.ts +413 -0
  3. package/dist/cjs/abis/arbOutbox.js +229 -0
  4. package/dist/cjs/abis/arbProxy.d.ts +102 -0
  5. package/dist/cjs/abis/arbProxy.js +69 -0
  6. package/dist/cjs/abis/arbRetryableTx.d.ts +230 -0
  7. package/dist/cjs/abis/arbRetryableTx.js +116 -0
  8. package/dist/cjs/abis/arbSys.d.ts +278 -0
  9. package/dist/cjs/abis/arbSys.js +142 -0
  10. package/dist/cjs/abis/evergreenFarming.d.ts +517 -0
  11. package/dist/cjs/abis/evergreenFarming.js +655 -0
  12. package/dist/cjs/abis/farming.d.ts +361 -0
  13. package/dist/cjs/abis/farming.js +459 -0
  14. package/dist/cjs/abis/foxy.d.ts +519 -0
  15. package/dist/cjs/abis/foxy.js +678 -0
  16. package/dist/cjs/abis/foxyStaking.d.ts +556 -0
  17. package/dist/cjs/abis/foxyStaking.js +720 -0
  18. package/dist/cjs/abis/iUniswapV2Pair.d.ts +560 -0
  19. package/dist/cjs/abis/iUniswapV2Pair.js +710 -0
  20. package/dist/cjs/abis/iUniswapV3Pool.d.ts +770 -0
  21. package/dist/cjs/abis/iUniswapV3Pool.js +986 -0
  22. package/dist/cjs/abis/index.d.ts +23 -0
  23. package/dist/cjs/abis/index.js +39 -0
  24. package/dist/cjs/abis/l1ArbitrumGateway.d.ts +494 -0
  25. package/dist/cjs/abis/l1ArbitrumGateway.js +259 -0
  26. package/dist/cjs/abis/l1OrbitCustomGateway.d.ts +769 -0
  27. package/dist/cjs/abis/l1OrbitCustomGateway.js +378 -0
  28. package/dist/cjs/abis/l2ArbitrumGateway.d.ts +308 -0
  29. package/dist/cjs/abis/l2ArbitrumGateway.js +172 -0
  30. package/dist/cjs/abis/liquidityReserve.d.ts +421 -0
  31. package/dist/cjs/abis/liquidityReserve.js +550 -0
  32. package/dist/cjs/abis/rfox.d.ts +680 -0
  33. package/dist/cjs/abis/rfox.js +558 -0
  34. package/dist/cjs/abis/thorchainRouter.d.ts +349 -0
  35. package/dist/cjs/abis/thorchainRouter.js +445 -0
  36. package/dist/cjs/abis/tokeManager.d.ts +774 -0
  37. package/dist/cjs/abis/tokeManager.js +511 -0
  38. package/dist/cjs/abis/tokePool.d.ts +502 -0
  39. package/dist/cjs/abis/tokePool.js +311 -0
  40. package/dist/cjs/abis/tokeRewardHash.d.ts +112 -0
  41. package/dist/cjs/abis/tokeRewardHash.js +74 -0
  42. package/dist/cjs/abis/uniV2StakingRewards.d.ts +316 -0
  43. package/dist/cjs/abis/uniV2StakingRewards.js +414 -0
  44. package/dist/cjs/abis/uniswapV2Router02.d.ts +737 -0
  45. package/dist/cjs/abis/uniswapV2Router02.js +956 -0
  46. package/dist/cjs/abis/uniswapV3Quoter.d.ts +147 -0
  47. package/dist/cjs/abis/uniswapV3Quoter.js +196 -0
  48. package/dist/cjs/abis/weth.d.ts +213 -0
  49. package/dist/cjs/abis/weth.js +282 -0
  50. package/dist/cjs/constants.d.ts +6640 -0
  51. package/dist/cjs/constants.js +108 -0
  52. package/dist/cjs/contractManager.d.ts +11 -0
  53. package/dist/cjs/contractManager.js +77 -0
  54. package/dist/cjs/ethersProviderSingleton.d.ts +6 -0
  55. package/dist/cjs/ethersProviderSingleton.js +77 -0
  56. package/dist/cjs/index.d.ts +6 -0
  57. package/dist/cjs/index.js +22 -0
  58. package/dist/cjs/package.json +1 -0
  59. package/dist/cjs/types.d.ts +21 -0
  60. package/dist/cjs/types.js +9 -0
  61. package/dist/cjs/viemClient.d.ts +69736 -0
  62. package/dist/cjs/viemClient.js +102 -0
  63. package/dist/esm/.tsbuildinfo +1 -0
  64. package/dist/esm/abis/arbOutbox.d.ts +413 -0
  65. package/dist/esm/abis/arbOutbox.js +226 -0
  66. package/dist/esm/abis/arbProxy.d.ts +102 -0
  67. package/dist/esm/abis/arbProxy.js +66 -0
  68. package/dist/esm/abis/arbRetryableTx.d.ts +230 -0
  69. package/dist/esm/abis/arbRetryableTx.js +113 -0
  70. package/dist/esm/abis/arbSys.d.ts +278 -0
  71. package/dist/esm/abis/arbSys.js +139 -0
  72. package/dist/esm/abis/evergreenFarming.d.ts +517 -0
  73. package/dist/esm/abis/evergreenFarming.js +652 -0
  74. package/dist/esm/abis/farming.d.ts +361 -0
  75. package/dist/esm/abis/farming.js +456 -0
  76. package/dist/esm/abis/foxy.d.ts +519 -0
  77. package/dist/esm/abis/foxy.js +675 -0
  78. package/dist/esm/abis/foxyStaking.d.ts +556 -0
  79. package/dist/esm/abis/foxyStaking.js +717 -0
  80. package/dist/esm/abis/iUniswapV2Pair.d.ts +560 -0
  81. package/dist/esm/abis/iUniswapV2Pair.js +707 -0
  82. package/dist/esm/abis/iUniswapV3Pool.d.ts +770 -0
  83. package/dist/esm/abis/iUniswapV3Pool.js +983 -0
  84. package/dist/esm/abis/index.d.ts +23 -0
  85. package/dist/esm/abis/index.js +23 -0
  86. package/dist/esm/abis/l1ArbitrumGateway.d.ts +494 -0
  87. package/dist/esm/abis/l1ArbitrumGateway.js +256 -0
  88. package/dist/esm/abis/l1OrbitCustomGateway.d.ts +769 -0
  89. package/dist/esm/abis/l1OrbitCustomGateway.js +375 -0
  90. package/dist/esm/abis/l2ArbitrumGateway.d.ts +308 -0
  91. package/dist/esm/abis/l2ArbitrumGateway.js +169 -0
  92. package/dist/esm/abis/liquidityReserve.d.ts +421 -0
  93. package/dist/esm/abis/liquidityReserve.js +547 -0
  94. package/dist/esm/abis/rfox.d.ts +680 -0
  95. package/dist/esm/abis/rfox.js +555 -0
  96. package/dist/esm/abis/thorchainRouter.d.ts +349 -0
  97. package/dist/esm/abis/thorchainRouter.js +442 -0
  98. package/dist/esm/abis/tokeManager.d.ts +774 -0
  99. package/dist/esm/abis/tokeManager.js +508 -0
  100. package/dist/esm/abis/tokePool.d.ts +502 -0
  101. package/dist/esm/abis/tokePool.js +308 -0
  102. package/dist/esm/abis/tokeRewardHash.d.ts +112 -0
  103. package/dist/esm/abis/tokeRewardHash.js +71 -0
  104. package/dist/esm/abis/uniV2StakingRewards.d.ts +316 -0
  105. package/dist/esm/abis/uniV2StakingRewards.js +411 -0
  106. package/dist/esm/abis/uniswapV2Router02.d.ts +737 -0
  107. package/dist/esm/abis/uniswapV2Router02.js +953 -0
  108. package/dist/esm/abis/uniswapV3Quoter.d.ts +147 -0
  109. package/dist/esm/abis/uniswapV3Quoter.js +193 -0
  110. package/dist/esm/abis/weth.d.ts +213 -0
  111. package/dist/esm/abis/weth.js +279 -0
  112. package/dist/esm/constants.d.ts +6640 -0
  113. package/dist/esm/constants.js +105 -0
  114. package/dist/esm/contractManager.d.ts +11 -0
  115. package/dist/esm/contractManager.js +69 -0
  116. package/dist/esm/ethersProviderSingleton.d.ts +6 -0
  117. package/dist/esm/ethersProviderSingleton.js +71 -0
  118. package/dist/esm/index.d.ts +6 -0
  119. package/dist/esm/index.js +6 -0
  120. package/dist/esm/types.d.ts +21 -0
  121. package/dist/esm/types.js +6 -0
  122. package/dist/esm/viemClient.d.ts +69736 -0
  123. package/dist/esm/viemClient.js +95 -0
  124. package/package.json +4 -4
@@ -0,0 +1,105 @@
1
+ import { erc20Abi } from 'viem';
2
+ import { EVERGREEN_FARMING_ABI } from './abis/evergreenFarming.js';
3
+ import { FARMING_ABI } from './abis/farming.js';
4
+ import { I_UNISWAP_V2_PAIR_ABI } from './abis/iUniswapV2Pair.js';
5
+ import { THORCHAIN_ROUTER_ABI } from './abis/thorchainRouter.js';
6
+ import { UNISWAP_V2_ROUTER_02_ABI } from './abis/uniswapV2Router02.js';
7
+ import { ContractType } from './types.js';
8
+ export const WETH_TOKEN_CONTRACT = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2';
9
+ export const FOX_TOKEN_CONTRACT = '0xc770EEfAd204B5180dF6a14Ee197D99d808ee52d';
10
+ // Staking contract addresses as string literals
11
+ export const ETH_FOX_STAKING_V1_CONTRACT = '0xdd80e21669a664bce83e3ad9a0d74f8dad5d9e72';
12
+ export const ETH_FOX_STAKING_V2_CONTRACT = '0xc54b9f82c1c54e9d4d274d633c7523f2299c42a0';
13
+ export const ETH_FOX_STAKING_V3_CONTRACT = '0x212ebf9fd3c10f371557b08e993eaab385c3932b';
14
+ export const ETH_FOX_STAKING_V4_CONTRACT = '0x24fd7fb95dc742e23dc3829d3e656feeb5f67fa0';
15
+ export const ETH_FOX_STAKING_V5_CONTRACT = '0xc14eaa8284feff79edc118e06cadbf3813a7e555';
16
+ export const ETH_FOX_STAKING_V6_CONTRACT = '0xebb1761ad43034fd7faa64d84e5bbd8cb5c40b68';
17
+ export const ETH_FOX_STAKING_V7_CONTRACT = '0x5939783dbf3e9f453a69bc9ddc1e492efac1fbcb';
18
+ export const ETH_FOX_STAKING_V8_CONTRACT = '0x662da6c777a258382f08b979d9489c3fbbbd8ac3';
19
+ export const ETH_FOX_STAKING_V9_CONTRACT = '0x721720784b76265aa3e34c1c7ba02a6027bcd3e5';
20
+ export const ETH_FOX_STAKING_EVERGREEN_CONTRACT = '0xe7e16e2b05440c2e484c5c41ac3e5a4d15da2744';
21
+ export const foxEthStakingContractAddresses = [
22
+ ETH_FOX_STAKING_V9_CONTRACT,
23
+ ETH_FOX_STAKING_V8_CONTRACT,
24
+ ETH_FOX_STAKING_V7_CONTRACT,
25
+ ETH_FOX_STAKING_V6_CONTRACT,
26
+ ETH_FOX_STAKING_V5_CONTRACT,
27
+ ETH_FOX_STAKING_V4_CONTRACT,
28
+ ETH_FOX_STAKING_V3_CONTRACT,
29
+ ETH_FOX_STAKING_V2_CONTRACT,
30
+ ETH_FOX_STAKING_V1_CONTRACT,
31
+ ETH_FOX_STAKING_EVERGREEN_CONTRACT,
32
+ ];
33
+ // Exported as a string literal for contract address discrimination purposes
34
+ export const ETH_FOX_POOL_CONTRACT = '0x470e8de2eBaef52014A47Cb5E6aF86884947F08c';
35
+ // Uniswap V2
36
+ export const UNISWAP_V2_ROUTER_02_CONTRACT_MAINNET = '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D';
37
+ export const UNISWAP_V2_FACTORY_CONTRACT_MAINNET = '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f';
38
+ // Uniswap V3
39
+ export const UNISWAP_V3_QUOTER_CONTRACT_MAINNET = '0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6';
40
+ export const UNISWAP_V3_POOL_FACTORY_CONTRACT_MAINNET = '0x1F98431c8aD98523631AE4a59f267346ea31F984';
41
+ // THORChain Contracts
42
+ export const THOR_ROUTER_CONTRACT_MAINNET = '0xd37bbe5744d730a1d98d8dc97c42f0ca46ad7146';
43
+ export const TS_AGGREGATOR_TOKEN_TRANSFER_PROXY_CONTRACT_MAINNET = '0xF892Fef9dA200d9E84c9b0647ecFF0F34633aBe8';
44
+ // RFOX on Arbitrum ERC1967Proxy contract address
45
+ // Uncomment me if you want to test RFOX with a shorter cooldown period
46
+ // export const RFOX_PROXY_CONTRACT: Address = '0x1094c4a99fce60e69ffe75849309408f1262d304'
47
+ // export const RFOX_UNI_V2_ETH_FOX_PROXY_CONTRACT: Address = '0x4843373F380aDf80C779cD4dEDC6452E414f7634'
48
+ export const RFOX_PROXY_CONTRACT = '0xaC2a4fD70BCD8Bab0662960455c363735f0e2b56';
49
+ export const RFOX_UNI_V2_ETH_FOX_PROXY_CONTRACT = '0x83B51B7605d2E277E03A7D6451B1efc0e5253A2F';
50
+ export const RFOX_REWARD_RATE = 1n * 10n ** 27n;
51
+ export const RFOX_WAD = 1n * 10n ** 18n;
52
+ export const CONTRACT_ADDRESS_TO_ABI = {
53
+ [ETH_FOX_POOL_CONTRACT]: I_UNISWAP_V2_PAIR_ABI,
54
+ [ETH_FOX_STAKING_V1_CONTRACT]: FARMING_ABI,
55
+ [ETH_FOX_STAKING_V2_CONTRACT]: FARMING_ABI,
56
+ [ETH_FOX_STAKING_V3_CONTRACT]: FARMING_ABI,
57
+ [ETH_FOX_STAKING_V4_CONTRACT]: FARMING_ABI,
58
+ [ETH_FOX_STAKING_V5_CONTRACT]: FARMING_ABI,
59
+ [ETH_FOX_STAKING_V6_CONTRACT]: FARMING_ABI,
60
+ [ETH_FOX_STAKING_V7_CONTRACT]: FARMING_ABI,
61
+ [ETH_FOX_STAKING_V8_CONTRACT]: FARMING_ABI,
62
+ [ETH_FOX_STAKING_V9_CONTRACT]: FARMING_ABI,
63
+ [ETH_FOX_STAKING_EVERGREEN_CONTRACT]: EVERGREEN_FARMING_ABI,
64
+ [FOX_TOKEN_CONTRACT]: erc20Abi,
65
+ [UNISWAP_V2_ROUTER_02_CONTRACT_MAINNET]: UNISWAP_V2_ROUTER_02_ABI,
66
+ // THOR Router Mainnet
67
+ [THOR_ROUTER_CONTRACT_MAINNET]: THORCHAIN_ROUTER_ABI,
68
+ };
69
+ export const CONTRACT_TYPE_TO_ABI = {
70
+ [ContractType.UniV2Pair]: I_UNISWAP_V2_PAIR_ABI,
71
+ [ContractType.ERC20]: erc20Abi,
72
+ [ContractType.ThorRouter]: THORCHAIN_ROUTER_ABI,
73
+ };
74
+ // 0x proxy contracts - all EVM chains except Optimism have the same address
75
+ export const ZRX_ETHEREUM_PROXY_CONTRACT = '0xDef1C0ded9bec7F1a1670819833240f027b25EfF';
76
+ export const ZRX_OPTIMISM_PROXY_CONTRACT = '0xDEF1ABE32c034e558Cdd535791643C58a13aCC10';
77
+ // Cowswap
78
+ export const COWSWAP_SETTLEMENT_CONTRACT_MAINNET = '0x9008D19f58AAbD9eD0D60971565AA8510560ab41';
79
+ // Arbitrum Bridge contracts
80
+ export const ARB_OUTBOX_CONTRACT = '0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840';
81
+ export const ARB_SYS_CONTRACT = '0x0000000000000000000000000000000000000064';
82
+ export const ARBITRUM_L2_ERC20_GATEWAY_PROXY_CONTRACT = '0x09e9222E96E7B4AE2a407B98d48e330053351EEe';
83
+ export const ARB_RETRYABLE_TX_CONTRACT = '0x000000000000000000000000000000000000006e';
84
+ export const L2_ARBITRUM_CUSTOM_GATEWAY_CONTRACT = '0x096760F208390250649E3e8763348E783AEF5562';
85
+ export const L2_ARBITRUM_GATEWAY_CONTRACT = '0x5288c571Fd7aD117beA99bF60FE0846C4E84F933';
86
+ export const L1_ARBITRUM_GATEWAY_CONTRACT = '0x72ce9c846789fdb6fc1f34ac4ad25dd9ef7031ef';
87
+ export const L1_ORBIT_CUSTOM_GATEWAY_CONTRACT = '0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f';
88
+ export const SHAPE_SHIFT_ROUTER_CONTRACT = '0x6a1e73f12018D8e5f966ce794aa2921941feB17E';
89
+ export const FOXY_STAKING_CONTRACT = '0xee77aa3Fd23BbeBaf94386dD44b548e9a785ea4b';
90
+ // Fox Staking Contracts
91
+ export const UNI_V2_FOX_STAKING_REWARDS_V1_CONTRACT = '0xDd80E21669A664Bce83E3AD9a0d74f8Dad5D9E72';
92
+ export const UNI_V2_FOX_STAKING_REWARDS_V2_CONTRACT = '0xc54B9F82C1c54E9D4d274d633c7523f2299c42A0';
93
+ export const UNI_V2_FOX_STAKING_REWARDS_V3_CONTRACT = '0x212ebf9FD3c10F371557b08E993eAaB385c3932b';
94
+ export const UNI_V2_FOX_STAKING_REWARDS_V4_CONTRACT = '0x24FD7FB95dc742e23Dc3829d3e656FEeb5f67fa0';
95
+ export const UNI_V2_FOX_STAKING_REWARDS_V5_CONTRACT = '0xC14eaA8284feFF79EDc118E06caDBf3813a7e555';
96
+ export const UNI_V2_FOX_STAKING_REWARDS_CONTRACTS = [
97
+ UNI_V2_FOX_STAKING_REWARDS_V1_CONTRACT,
98
+ UNI_V2_FOX_STAKING_REWARDS_V2_CONTRACT,
99
+ UNI_V2_FOX_STAKING_REWARDS_V3_CONTRACT,
100
+ UNI_V2_FOX_STAKING_REWARDS_V4_CONTRACT,
101
+ UNI_V2_FOX_STAKING_REWARDS_V5_CONTRACT,
102
+ ];
103
+ // Permit2 is deployed here across all chains.
104
+ // https://0x.org/docs/introduction/0x-cheat-sheet#permit2-contract
105
+ export const PERMIT2_CONTRACT = '0x000000000022D473030F116dDEE9F6B43aC78BA3';
@@ -0,0 +1,11 @@
1
+ import type { AssetId, ChainId } from '@shapeshiftoss/caip';
2
+ import type { Address } from 'viem';
3
+ import type { KnownContractAddress, KnownContractByAddress, KnownContractByType } from './types.js';
4
+ import { ContractType } from './types.js';
5
+ export declare const getOrCreateContractByAddress: <A extends KnownContractAddress>(address: A) => KnownContractByAddress<A>;
6
+ export declare const getOrCreateContractByType: <A extends KnownContractAddress, T extends ContractType>({ address, type, chainId, }: {
7
+ address: string | Address;
8
+ type: T;
9
+ chainId: ChainId;
10
+ }) => KnownContractByType<A, T>;
11
+ export declare const fetchUniV2PairData: ((pairAssetId: AssetId) => Promise<import("@uniswap/sdk").Pair>) & import("lodash").MemoizedFunction;
@@ -0,0 +1,69 @@
1
+ import { fromAssetId, toAssetId } from '@shapeshiftoss/caip';
2
+ import { KnownChainIds } from '@shapeshiftoss/types';
3
+ import { Fetcher } from '@uniswap/sdk';
4
+ import assert from 'assert';
5
+ import memoize from 'lodash/memoize';
6
+ import { getAddress, getContract } from 'viem';
7
+ import { CONTRACT_ADDRESS_TO_ABI, CONTRACT_TYPE_TO_ABI } from './constants.js';
8
+ import { getEthersV5Provider } from './ethersProviderSingleton.js';
9
+ import { ContractType } from './types.js';
10
+ import { viemClientByChainId, viemEthMainnetClient } from './viemClient.js';
11
+ const definedContracts = {};
12
+ export const getOrCreateContractByAddress = (address) => {
13
+ const checksumAddress = getAddress(address);
14
+ const definedContract = definedContracts[checksumAddress];
15
+ if (definedContract !== undefined) {
16
+ return definedContract;
17
+ }
18
+ const contractAbi = CONTRACT_ADDRESS_TO_ABI[address];
19
+ const contract = getContract({
20
+ abi: contractAbi,
21
+ address: checksumAddress,
22
+ client: viemEthMainnetClient,
23
+ });
24
+ definedContracts[checksumAddress] = contract;
25
+ return contract;
26
+ };
27
+ export const getOrCreateContractByType = ({ address, type, chainId, }) => {
28
+ const checksumAddress = getAddress(address);
29
+ const definedContract = definedContracts[checksumAddress];
30
+ if (definedContract !== undefined) {
31
+ return definedContract;
32
+ }
33
+ const publicClient = viemClientByChainId[chainId];
34
+ assert(publicClient !== undefined, `no public client found for chainId '${chainId}'`);
35
+ const contract = getContract({
36
+ abi: CONTRACT_TYPE_TO_ABI[type],
37
+ address: checksumAddress,
38
+ client: publicClient,
39
+ });
40
+ definedContracts[checksumAddress] = contract;
41
+ return contract;
42
+ };
43
+ export const fetchUniV2PairData = memoize(async (pairAssetId) => {
44
+ const { assetReference, chainId } = fromAssetId(pairAssetId);
45
+ const checksumAddress = getAddress(assetReference);
46
+ const pair = getOrCreateContractByType({
47
+ address: checksumAddress,
48
+ type: ContractType.UniV2Pair,
49
+ chainId: KnownChainIds.EthereumMainnet,
50
+ });
51
+ const ethersV5Provider = getEthersV5Provider();
52
+ const token0Address = await pair.read.token0();
53
+ const token1Address = await pair.read.token1();
54
+ const token0AssetId = toAssetId({
55
+ chainId,
56
+ assetNamespace: 'erc20',
57
+ assetReference: token0Address,
58
+ });
59
+ const token1AssetId = toAssetId({
60
+ chainId,
61
+ assetNamespace: 'erc20',
62
+ assetReference: token1Address,
63
+ });
64
+ const { chainReference: asset0EvmChainId, assetReference: asset0Address } = fromAssetId(token0AssetId);
65
+ const { chainReference: asset1EvmChainId, assetReference: asset1Address } = fromAssetId(token1AssetId);
66
+ const token0 = await Fetcher.fetchTokenData(Number(asset0EvmChainId), asset0Address, ethersV5Provider);
67
+ const token1 = await Fetcher.fetchTokenData(Number(asset1EvmChainId), asset1Address, ethersV5Provider);
68
+ return Fetcher.fetchPairData(token0, token1, ethersV5Provider);
69
+ });
@@ -0,0 +1,6 @@
1
+ import type { EvmChainId } from '@shapeshiftoss/types';
2
+ import { JsonRpcProvider } from 'ethers';
3
+ import { ethers as ethersV5 } from 'ethers5';
4
+ export declare const rpcUrlByChainId: (chainId: EvmChainId) => string;
5
+ export declare const getEthersProvider: (chainId: EvmChainId) => JsonRpcProvider;
6
+ export declare const getEthersV5Provider: (chainId?: EvmChainId) => ethersV5.providers.JsonRpcProvider;
@@ -0,0 +1,71 @@
1
+ import { KnownChainIds } from '@shapeshiftoss/types';
2
+ import { assertUnreachable } from '@shapeshiftoss/utils';
3
+ import { JsonRpcProvider } from 'ethers';
4
+ import { ethers as ethersV5 } from 'ethers5';
5
+ export const rpcUrlByChainId = (chainId) => {
6
+ const url = (() => {
7
+ switch (chainId) {
8
+ case KnownChainIds.AvalancheMainnet:
9
+ return process.env.VITE_AVALANCHE_NODE_URL;
10
+ case KnownChainIds.OptimismMainnet:
11
+ return process.env.VITE_OPTIMISM_NODE_URL;
12
+ case KnownChainIds.BnbSmartChainMainnet:
13
+ return process.env.VITE_BNBSMARTCHAIN_NODE_URL;
14
+ case KnownChainIds.PolygonMainnet:
15
+ return process.env.VITE_POLYGON_NODE_URL;
16
+ case KnownChainIds.GnosisMainnet:
17
+ return process.env.VITE_GNOSIS_NODE_URL;
18
+ case KnownChainIds.EthereumMainnet:
19
+ return process.env.VITE_ETHEREUM_NODE_URL;
20
+ case KnownChainIds.ArbitrumMainnet:
21
+ return process.env.VITE_ARBITRUM_NODE_URL;
22
+ case KnownChainIds.ArbitrumNovaMainnet:
23
+ return process.env.VITE_ARBITRUM_NOVA_NODE_URL;
24
+ case KnownChainIds.BaseMainnet:
25
+ return process.env.VITE_BASE_NODE_URL;
26
+ case KnownChainIds.MonadMainnet:
27
+ return process.env.VITE_MONAD_NODE_URL;
28
+ default:
29
+ return assertUnreachable(chainId);
30
+ }
31
+ })();
32
+ if (!url) {
33
+ throw new Error(`No RPC URL found for chainId ${chainId}`);
34
+ }
35
+ return url;
36
+ };
37
+ const ethersProviders = new Map();
38
+ const ethersV5Providers = new Map();
39
+ export const getEthersProvider = (chainId) => {
40
+ if (!ethersProviders.has(chainId)) {
41
+ const provider = new JsonRpcProvider(rpcUrlByChainId(chainId), undefined, {
42
+ staticNetwork: true,
43
+ });
44
+ ethersProviders.set(chainId, provider);
45
+ return provider;
46
+ }
47
+ else {
48
+ // This really should be defined but I guess enough safety never hurts mang...
49
+ const provider = ethersProviders.get(chainId);
50
+ if (!provider) {
51
+ throw new Error(`No provider found for chainId ${chainId}`);
52
+ }
53
+ return provider;
54
+ }
55
+ };
56
+ // For backwards-compatibility for libraries still stuck in v5
57
+ export const getEthersV5Provider = (chainId = KnownChainIds.EthereumMainnet) => {
58
+ if (!ethersV5Providers.has(chainId)) {
59
+ const provider = new ethersV5.providers.StaticJsonRpcProvider(rpcUrlByChainId(chainId));
60
+ ethersV5Providers.set(chainId, provider);
61
+ return provider;
62
+ }
63
+ else {
64
+ // This really should be defined but I guess enough safety never hurts mang...
65
+ const provider = ethersV5Providers.get(chainId);
66
+ if (!provider) {
67
+ throw new Error(`No provider found for chainId ${chainId}`);
68
+ }
69
+ return provider;
70
+ }
71
+ };
@@ -0,0 +1,6 @@
1
+ export * from './constants.js';
2
+ export * from './types.js';
3
+ export * from './contractManager.js';
4
+ export * from './ethersProviderSingleton.js';
5
+ export * from './abis/index.js';
6
+ export * from './viemClient.js';
@@ -0,0 +1,6 @@
1
+ export * from './constants.js';
2
+ export * from './types.js';
3
+ export * from './contractManager.js';
4
+ export * from './ethersProviderSingleton.js';
5
+ export * from './abis/index.js';
6
+ export * from './viemClient.js';
@@ -0,0 +1,21 @@
1
+ import type { Address, GetContractReturnType, PublicClient } from 'viem';
2
+ import type { EVERGREEN_FARMING_ABI, FARMING_ABI } from './abis/index.js';
3
+ import type { CONTRACT_ADDRESS_TO_ABI, CONTRACT_TYPE_TO_ABI, ETH_FOX_POOL_CONTRACT, FOX_TOKEN_CONTRACT, foxEthStakingContractAddresses, THOR_ROUTER_CONTRACT_MAINNET, UNISWAP_V2_ROUTER_02_CONTRACT_MAINNET } from './constants.js';
4
+ export declare enum ContractType {
5
+ UniV2Pair = "UniV2Pair",
6
+ ERC20 = "ERC20",
7
+ ThorRouter = "ThorRouter"
8
+ }
9
+ export type KnownContractAbiByAddress<T extends KnownContractAddress> = (typeof CONTRACT_ADDRESS_TO_ABI)[T];
10
+ export type KnownContractAbiByType<T extends ContractType> = (typeof CONTRACT_TYPE_TO_ABI)[T];
11
+ export type KnownContractByAddress<T extends KnownContractAddress> = GetContractReturnType<KnownContractAbiByAddress<T>, PublicClient, T>;
12
+ export type KnownContract = KnownContractByAddress<KnownContractAddress>;
13
+ export type KnownContractByType<A extends KnownContractAddress, T extends ContractType> = GetContractReturnType<KnownContractAbiByType<T>, PublicClient, A>;
14
+ export type KnownContractAddress = typeof ETH_FOX_POOL_CONTRACT | FoxEthStakingContractAddress | typeof FOX_TOKEN_CONTRACT | typeof UNISWAP_V2_ROUTER_02_CONTRACT_MAINNET | typeof THOR_ROUTER_CONTRACT_MAINNET;
15
+ export type DefinedContract = {
16
+ contract: KnownContractByAddress<KnownContractAddress>;
17
+ address: KnownContractAddress;
18
+ };
19
+ export type FoxEthStakingContractAddress = (typeof foxEthStakingContractAddresses)[number];
20
+ export type FoxEthStakingContractAbi = typeof FARMING_ABI | typeof EVERGREEN_FARMING_ABI;
21
+ export type FoxEthStakingContract<T extends FoxEthStakingContractAbi> = T extends typeof FARMING_ABI ? GetContractReturnType<typeof FARMING_ABI, PublicClient, Address> : GetContractReturnType<typeof EVERGREEN_FARMING_ABI, PublicClient, Address>;
@@ -0,0 +1,6 @@
1
+ export var ContractType;
2
+ (function (ContractType) {
3
+ ContractType["UniV2Pair"] = "UniV2Pair";
4
+ ContractType["ERC20"] = "ERC20";
5
+ ContractType["ThorRouter"] = "ThorRouter";
6
+ })(ContractType || (ContractType = {}));