@reyaxyz/common 0.47.0 → 0.48.0

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 (37) hide show
  1. package/dist/services/getSocketAddresses.js +74 -52
  2. package/dist/services/getSocketAddresses.js.map +1 -1
  3. package/dist/types/services/getSocketAddresses.d.ts +7 -1
  4. package/dist/types/services/getSocketAddresses.d.ts.map +1 -1
  5. package/dist/types/types.d.ts +9 -3
  6. package/dist/types/types.d.ts.map +1 -1
  7. package/dist/types/utils/consts.d.ts +0 -7
  8. package/dist/types/utils/consts.d.ts.map +1 -1
  9. package/dist/types/utils/index.d.ts +1 -0
  10. package/dist/types/utils/index.d.ts.map +1 -1
  11. package/dist/types/utils/network.d.ts +4 -0
  12. package/dist/types/utils/network.d.ts.map +1 -0
  13. package/dist/types/utils/token-info.d.ts +3 -0
  14. package/dist/types/utils/token-info.d.ts.map +1 -0
  15. package/dist/types/utils/token.d.ts +3 -6
  16. package/dist/types/utils/token.d.ts.map +1 -1
  17. package/dist/types.js.map +1 -1
  18. package/dist/utils/consts.js +1 -76
  19. package/dist/utils/consts.js.map +1 -1
  20. package/dist/utils/index.js +1 -0
  21. package/dist/utils/index.js.map +1 -1
  22. package/dist/utils/network.js +25 -0
  23. package/dist/utils/network.js.map +1 -0
  24. package/dist/utils/socket/reyaCronos.json +77 -0
  25. package/dist/utils/token-info.js +77 -0
  26. package/dist/utils/token-info.js.map +1 -0
  27. package/dist/utils/token.js +38 -20
  28. package/dist/utils/token.js.map +1 -1
  29. package/package.json +2 -2
  30. package/src/services/getSocketAddresses.ts +113 -67
  31. package/src/types.ts +10 -3
  32. package/src/utils/consts.ts +0 -90
  33. package/src/utils/index.ts +1 -0
  34. package/src/utils/network.ts +23 -0
  35. package/src/utils/socket/reyaCronos.json +77 -0
  36. package/src/utils/token-info.ts +75 -0
  37. package/src/utils/token.ts +62 -24
@@ -0,0 +1,23 @@
1
+ import { MoneyInOutChainId, ReyaChainId } from '../types';
2
+
3
+ export function getReyaNetwork(env: 'production' | 'test'): ReyaChainId {
4
+ if (env === 'production') return ReyaChainId.reyaNetwork;
5
+ if (env === 'test') return ReyaChainId.reyaCronos;
6
+
7
+ throw new Error('Unknown error passed');
8
+ }
9
+
10
+ export function getReyaNetworkFromMoneyInOutChainId(
11
+ moneyInOutChainId: MoneyInOutChainId,
12
+ ): ReyaChainId {
13
+ switch (moneyInOutChainId) {
14
+ case MoneyInOutChainId.polygonMumbai:
15
+ case MoneyInOutChainId.arbitrumSepolia:
16
+ case MoneyInOutChainId.opSepolia:
17
+ case MoneyInOutChainId.ethereumSepolia:
18
+ return getReyaNetwork('test');
19
+
20
+ default:
21
+ throw new Error('getReyaNetwork: unexpected moneyInOutChainId');
22
+ }
23
+ }
@@ -0,0 +1,77 @@
1
+ {
2
+ "80001": {
3
+ "USDC": {
4
+ "isAppChain": false,
5
+ "NonMintableToken": "0xD9edcC943ed9729B08E52Bb1e110FE43d1930773",
6
+ "Vault": "0xEC5b7075F581D46983EBe2Be6baB0f58Bf1E8C4b",
7
+ "connectors": {
8
+ "89346161": {
9
+ "FAST": "0xF5541Ea3ee034D8f7C397bf77556f07e7562dF9A"
10
+ }
11
+ },
12
+ "ExecutionHelper": "0xA858f95c50240A6a28E5cd323869cE77ee7677Bd"
13
+ }
14
+ },
15
+ "421614": {
16
+ "USDC": {
17
+ "isAppChain": false,
18
+ "NonMintableToken": "0x8537307810fC40F4073A12a38554D4Ff78EfFf41",
19
+ "Vault": "0x85314b664cB2e443C93F09EDb51088f76b048212",
20
+ "connectors": {
21
+ "89346161": {
22
+ "FAST": "0x7dE4937420935c7C8767b06eCd7F7dC54e2D7C9b"
23
+ }
24
+ },
25
+ "ExecutionHelper": "0x4caE6101A2645AE58038Aeb04079621458b00753"
26
+ }
27
+ },
28
+ "11155111": {
29
+ "USDC": {
30
+ "isAppChain": false,
31
+ "NonMintableToken": "0x565810cbfa3Cf1390963E5aFa2fB953795686339",
32
+ "Vault": "0x8487daa5864a5cE18E5a89406c11EC748da33fbB",
33
+ "connectors": {
34
+ "89346161": {
35
+ "FAST": "0x42229a5DDC5E32149311265F6F4BC016EaB778FC"
36
+ }
37
+ },
38
+ "ExecutionHelper": "0x4F3e01e8f7d0224b5988Cb0FBf7f6D156B9255cD"
39
+ }
40
+ },
41
+ "11155420": {
42
+ "USDC": {
43
+ "isAppChain": false,
44
+ "NonMintableToken": "0x6D290609b3F5F02D52F28d97C75a443ED8564cBf",
45
+ "Vault": "0x1019958C2BD43B882a4e1349337a32Ef9563FC4D",
46
+ "connectors": {
47
+ "89346161": {
48
+ "FAST": "0x805Dc5ac616bCB1A59a446eb1777C0Cc3Aa0c3Fe"
49
+ }
50
+ },
51
+ "ExecutionHelper": "0xD664eF6159562190ea6D1AFa3f0Ea1C0D77D14E3"
52
+ }
53
+ },
54
+ "89346161": {
55
+ "USDC": {
56
+ "isAppChain": true,
57
+ "MintableToken": "0x1b700A40A0707Dd5f0BC31cbc57D730558E5714d",
58
+ "ExchangeRate": "0x1Aba89fC7ff67D27ccaa51893c46FD1e5fEE924B",
59
+ "Controller": "0x663dc7E91157c58079f55C1BF5ee1BdB6401Ca7a",
60
+ "connectors": {
61
+ "80001": {
62
+ "FAST": "0x54CAA0946dA179425e1abB169C020004284d64D3"
63
+ },
64
+ "421614": {
65
+ "FAST": "0xd7627d03dEA4006cBe8E701F6932dBF75d3269B3"
66
+ },
67
+ "11155111": {
68
+ "FAST": "0xdA089249ccE9d9726Fa6b755c5ec3d9C260C90C2"
69
+ },
70
+ "11155420": {
71
+ "FAST": "0x11695Ff9EE5E600b90BcbD651D1758A9B240A2d8"
72
+ }
73
+ },
74
+ "ExecutionHelper": "0xB6fb3062405985F700fa23758A3053162ddBeFb9"
75
+ }
76
+ }
77
+ }
@@ -0,0 +1,75 @@
1
+ import { MoneyInOutChainId, ReyaChainId, TokenInfo } from '../types';
2
+
3
+ export const TOKEN_INFO: Record<ReyaChainId | MoneyInOutChainId, TokenInfo[]> =
4
+ {
5
+ /* ------------------------------------------------------ */
6
+ /* MAINNET */
7
+ /* ------------------------------------------------------ */
8
+ [ReyaChainId.reyaNetwork]: [
9
+ // todo
10
+ ],
11
+
12
+ /* ------------------------------------------------------ */
13
+ /* TESTNET */
14
+ /* ------------------------------------------------------ */
15
+ [ReyaChainId.reyaCronos]: [
16
+ {
17
+ name: 'RUSD',
18
+ address: '0xcfbb14b2a2acb5779b6365a260e4a9d63a12100b',
19
+ decimals: 6,
20
+ },
21
+ {
22
+ name: 'USDC',
23
+ address: '0x1b700a40a0707dd5f0bc31cbc57d730558e5714d',
24
+ decimals: 6,
25
+ },
26
+ {
27
+ name: 'USDT',
28
+ address: '0x9ade781dacbd220f0161d98f496a2982b231a9d6',
29
+ decimals: 6,
30
+ },
31
+ {
32
+ name: 'DAI',
33
+ address: '0x733299259c45726ee1bfc9bd0deeba58e48a1853',
34
+ decimals: 18,
35
+ },
36
+ {
37
+ name: 'WETH',
38
+ address: '0xc123b7aeb9d2b2e8a035217d5c29e317c91842e2',
39
+ decimals: 18,
40
+ },
41
+ {
42
+ name: 'WBTC',
43
+ address: '0xd382e2f0df859ff9e82f963dcad1aaee939c5e4f',
44
+ decimals: 8,
45
+ },
46
+ ],
47
+ [MoneyInOutChainId.polygonMumbai]: [
48
+ {
49
+ name: 'USDC',
50
+ address: '0xd9edcc943ed9729b08e52bb1e110fe43d1930773',
51
+ decimals: 6,
52
+ },
53
+ ],
54
+ [MoneyInOutChainId.arbitrumSepolia]: [
55
+ {
56
+ name: 'USDC',
57
+ address: '0x8537307810fc40f4073a12a38554d4ff78efff41',
58
+ decimals: 6,
59
+ },
60
+ ],
61
+ [MoneyInOutChainId.opSepolia]: [
62
+ {
63
+ name: 'USDC',
64
+ address: '0x6d290609b3f5f02d52f28d97c75a443ed8564cbf',
65
+ decimals: 6,
66
+ },
67
+ ],
68
+ [MoneyInOutChainId.ethereumSepolia]: [
69
+ {
70
+ name: 'USDC',
71
+ address: '0x565810cbfa3cf1390963e5afa2fb953795686339',
72
+ decimals: 6,
73
+ },
74
+ ],
75
+ };
@@ -1,9 +1,16 @@
1
1
  import { ethers } from 'ethers';
2
2
 
3
3
  import { Contract, Signer } from 'ethers';
4
- import { tokenDetails } from './consts';
4
+ import { TOKEN_INFO } from './token-info';
5
5
  import { exponentialBackoff } from './retry';
6
- import { Address, GetERC20AllowanceParams } from '../types';
6
+ import {
7
+ Address,
8
+ GetERC20AllowanceParams,
9
+ MoneyInOutChainId,
10
+ ReyaChainId,
11
+ TokenInfo,
12
+ TokenName,
13
+ } from '../types';
7
14
 
8
15
  export const descale = (tokenDecimals: number) => {
9
16
  const f = (value: bigint) => {
@@ -43,26 +50,57 @@ export const convertToAddress = (str: string): Address => {
43
50
  return str.toLowerCase() as Address;
44
51
  };
45
52
 
46
- export const getTokenDetails = (
47
- caseSensitiveAddress: string,
48
- ): {
49
- tokenName: Uppercase<string>;
50
- tokenDecimals: number;
51
- tokenDescaler: (value: bigint) => number;
52
- } => {
53
- const address = convertToAddress(caseSensitiveAddress);
54
-
55
- if (!Object.keys(tokenDetails).includes(address)) {
56
- throw new Error(`Token details not found for ${address}.`);
53
+ export const getTokenInfoByAddress = (
54
+ tokenAddressParam: Address | string,
55
+ chainId?: ReyaChainId | MoneyInOutChainId,
56
+ ): TokenInfo => {
57
+ const tokenAddress =
58
+ typeof tokenAddressParam === 'string'
59
+ ? convertToAddress(tokenAddressParam)
60
+ : tokenAddressParam;
61
+
62
+ if (chainId) {
63
+ const tokenInfo = TOKEN_INFO[chainId].find(
64
+ (tokenInfo) => tokenInfo.address === tokenAddress,
65
+ );
66
+ if (!tokenInfo) {
67
+ throw new Error(
68
+ `getTokenInfoByAddress: no token info found [chainId ${chainId}, token address ${tokenAddress}]`,
69
+ );
70
+ }
71
+ return tokenInfo;
72
+ } else {
73
+ for (const chainId in TOKEN_INFO) {
74
+ const tokenInfos =
75
+ TOKEN_INFO[chainId as unknown as keyof typeof TOKEN_INFO];
76
+ const tokenInfo = tokenInfos.find(
77
+ (tokenInfo) => tokenInfo.address === tokenAddress,
78
+ );
79
+ if (tokenInfo) {
80
+ return tokenInfo;
81
+ }
82
+ }
83
+ throw new Error(
84
+ `getTokenInfoByAddress: no token info found [token address ${tokenAddress}]`,
85
+ );
57
86
  }
87
+ };
88
+
89
+ export const getTokenInfoByName = (
90
+ tokenName: TokenName,
91
+ chainId: ReyaChainId | MoneyInOutChainId,
92
+ ): TokenInfo => {
93
+ const tokenInfo = TOKEN_INFO[chainId].find(
94
+ (tokenInfo) => tokenInfo.name === tokenName,
95
+ );
58
96
 
59
- const { tokenName, tokenDecimals } = tokenDetails[address];
97
+ if (!tokenInfo) {
98
+ throw new Error(
99
+ `getTokenInfoByName: no token info found [chain id ${chainId}, token name ${tokenName}]`,
100
+ );
101
+ }
60
102
 
61
- return {
62
- tokenName,
63
- tokenDecimals,
64
- tokenDescaler: descale(tokenDecimals),
65
- };
103
+ return tokenInfo;
66
104
  };
67
105
 
68
106
  export const getERC20Allowance = async ({
@@ -72,15 +110,15 @@ export const getERC20Allowance = async ({
72
110
  subject,
73
111
  }: GetERC20AllowanceParams): Promise<number> => {
74
112
  const tokenContract = getERC20TokenContract(tokenAddress, subject);
75
- const { tokenDecimals } = getTokenDetails(tokenAddress);
113
+ const tokenInfo = getTokenInfoByAddress(tokenAddress);
76
114
 
77
115
  const allowance = await exponentialBackoff(() =>
78
116
  tokenContract.allowance(walletAddress, spenderAddress),
79
117
  );
80
118
 
81
- return BigInt(allowance) > scale(tokenDecimals)(Number.MAX_SAFE_INTEGER)
119
+ return BigInt(allowance) > scale(tokenInfo.decimals)(Number.MAX_SAFE_INTEGER)
82
120
  ? Number.MAX_SAFE_INTEGER
83
- : descale(tokenDecimals)(allowance);
121
+ : descale(tokenInfo.decimals)(allowance);
84
122
  };
85
123
 
86
124
  export type GetERC20BalanceArgs = {
@@ -96,11 +134,11 @@ export const getERC20Balance = async ({
96
134
  }: GetERC20BalanceArgs): Promise<number> => {
97
135
  const token = getERC20TokenContract(tokenAddress, subject);
98
136
 
99
- const { tokenDescaler } = getTokenDetails(tokenAddress);
137
+ const tokenInfo = getTokenInfoByAddress(convertToAddress(tokenAddress));
100
138
 
101
139
  const currentBalance = await exponentialBackoff(() =>
102
140
  token.balanceOf(walletAddress),
103
141
  );
104
142
 
105
- return tokenDescaler(currentBalance);
143
+ return descale(tokenInfo.decimals)(currentBalance);
106
144
  };