@megatao/sdk 1.1.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 (228) hide show
  1. package/.env.example +37 -0
  2. package/CHANGELOG.md +19 -0
  3. package/README.md +199 -0
  4. package/bin/alf +4 -0
  5. package/cli/README.md +198 -0
  6. package/cli/TEST_MANUAL.md +577 -0
  7. package/cli/commands/account.ts +545 -0
  8. package/cli/commands/funding.ts +481 -0
  9. package/cli/commands/liquidation.ts +523 -0
  10. package/cli/commands/market.ts +590 -0
  11. package/cli/commands/orders.ts +395 -0
  12. package/cli/commands/position.ts +1085 -0
  13. package/cli/commands/shared/positionUtils.ts +239 -0
  14. package/cli/commands/trading.ts +483 -0
  15. package/cli/commands/utils.ts +281 -0
  16. package/cli/commands/vault.ts +522 -0
  17. package/cli/index.ts +169 -0
  18. package/cli/interactive.ts +530 -0
  19. package/cli/utils/client.ts +457 -0
  20. package/cli/utils/config.ts +226 -0
  21. package/cli/utils/display.ts +258 -0
  22. package/cli/utils/index.ts +10 -0
  23. package/cli/utils/prompts.ts +364 -0
  24. package/config.example.json +23 -0
  25. package/dist/AlphaFuturesClient.d.ts +36 -0
  26. package/dist/AlphaFuturesClient.d.ts.map +1 -0
  27. package/dist/AlphaFuturesClient.js +116 -0
  28. package/dist/AlphaFuturesClient.js.map +1 -0
  29. package/dist/abi/Alpha.json +5987 -0
  30. package/dist/abi/abis.d.ts +319 -0
  31. package/dist/abi/abis.d.ts.map +1 -0
  32. package/dist/abi/abis.js +128 -0
  33. package/dist/abi/abis.js.map +1 -0
  34. package/dist/abi/index.d.ts +11 -0
  35. package/dist/abi/index.d.ts.map +1 -0
  36. package/dist/abi/index.js +15 -0
  37. package/dist/abi/index.js.map +1 -0
  38. package/dist/config/contracts.config.d.ts +70 -0
  39. package/dist/config/contracts.config.d.ts.map +1 -0
  40. package/dist/config/contracts.config.js +137 -0
  41. package/dist/config/contracts.config.js.map +1 -0
  42. package/dist/config/environments/alpha.config.d.ts +17 -0
  43. package/dist/config/environments/alpha.config.d.ts.map +1 -0
  44. package/dist/config/environments/alpha.config.js +140 -0
  45. package/dist/config/environments/alpha.config.js.map +1 -0
  46. package/dist/config/environments/beta.config.d.ts +16 -0
  47. package/dist/config/environments/beta.config.d.ts.map +1 -0
  48. package/dist/config/environments/beta.config.js +131 -0
  49. package/dist/config/environments/beta.config.js.map +1 -0
  50. package/dist/config/environments/dev.config.d.ts +13 -0
  51. package/dist/config/environments/dev.config.d.ts.map +1 -0
  52. package/dist/config/environments/dev.config.js +123 -0
  53. package/dist/config/environments/dev.config.js.map +1 -0
  54. package/dist/config/environments/index.d.ts +48 -0
  55. package/dist/config/environments/index.d.ts.map +1 -0
  56. package/dist/config/environments/index.js +81 -0
  57. package/dist/config/environments/index.js.map +1 -0
  58. package/dist/config/environments/localhost.config.d.ts +16 -0
  59. package/dist/config/environments/localhost.config.d.ts.map +1 -0
  60. package/dist/config/environments/localhost.config.js +152 -0
  61. package/dist/config/environments/localhost.config.js.map +1 -0
  62. package/dist/config/environments/prod.config.d.ts +20 -0
  63. package/dist/config/environments/prod.config.d.ts.map +1 -0
  64. package/dist/config/environments/prod.config.js +143 -0
  65. package/dist/config/environments/prod.config.js.map +1 -0
  66. package/dist/config/index.d.ts +7 -0
  67. package/dist/config/index.d.ts.map +1 -0
  68. package/dist/config/index.js +41 -0
  69. package/dist/config/index.js.map +1 -0
  70. package/dist/constants/assets.d.ts +76 -0
  71. package/dist/constants/assets.d.ts.map +1 -0
  72. package/dist/constants/assets.js +277 -0
  73. package/dist/constants/assets.js.map +1 -0
  74. package/dist/constants/contracts.d.ts +41 -0
  75. package/dist/constants/contracts.d.ts.map +1 -0
  76. package/dist/constants/contracts.js +57 -0
  77. package/dist/constants/contracts.js.map +1 -0
  78. package/dist/constants/index.d.ts +36 -0
  79. package/dist/constants/index.d.ts.map +1 -0
  80. package/dist/constants/index.js +75 -0
  81. package/dist/constants/index.js.map +1 -0
  82. package/dist/constants/networks.d.ts +32 -0
  83. package/dist/constants/networks.d.ts.map +1 -0
  84. package/dist/constants/networks.js +174 -0
  85. package/dist/constants/networks.js.map +1 -0
  86. package/dist/contracts/index.d.ts +5 -0
  87. package/dist/contracts/index.d.ts.map +1 -0
  88. package/dist/contracts/index.js +21 -0
  89. package/dist/contracts/index.js.map +1 -0
  90. package/dist/contracts/viem/AlphaViem.d.ts +518 -0
  91. package/dist/contracts/viem/AlphaViem.d.ts.map +1 -0
  92. package/dist/contracts/viem/AlphaViem.js +1287 -0
  93. package/dist/contracts/viem/AlphaViem.js.map +1 -0
  94. package/dist/contracts/viem/PriceOracleViem.d.ts +71 -0
  95. package/dist/contracts/viem/PriceOracleViem.d.ts.map +1 -0
  96. package/dist/contracts/viem/PriceOracleViem.js +212 -0
  97. package/dist/contracts/viem/PriceOracleViem.js.map +1 -0
  98. package/dist/contracts/viem/index.d.ts +9 -0
  99. package/dist/contracts/viem/index.d.ts.map +1 -0
  100. package/dist/contracts/viem/index.js +17 -0
  101. package/dist/contracts/viem/index.js.map +1 -0
  102. package/dist/errors/index.d.ts +44 -0
  103. package/dist/errors/index.d.ts.map +1 -0
  104. package/dist/errors/index.js +83 -0
  105. package/dist/errors/index.js.map +1 -0
  106. package/dist/index.d.ts +19 -0
  107. package/dist/index.d.ts.map +1 -0
  108. package/dist/index.js +60 -0
  109. package/dist/index.js.map +1 -0
  110. package/dist/types/alpha.d.ts +299 -0
  111. package/dist/types/alpha.d.ts.map +1 -0
  112. package/dist/types/alpha.js +6 -0
  113. package/dist/types/alpha.js.map +1 -0
  114. package/dist/types/client.d.ts +24 -0
  115. package/dist/types/client.d.ts.map +1 -0
  116. package/dist/types/client.js +13 -0
  117. package/dist/types/client.js.map +1 -0
  118. package/dist/types/contracts.d.ts +48 -0
  119. package/dist/types/contracts.d.ts.map +1 -0
  120. package/dist/types/contracts.js +6 -0
  121. package/dist/types/contracts.js.map +1 -0
  122. package/dist/types/funding.d.ts +27 -0
  123. package/dist/types/funding.d.ts.map +1 -0
  124. package/dist/types/funding.js +6 -0
  125. package/dist/types/funding.js.map +1 -0
  126. package/dist/types/index.d.ts +92 -0
  127. package/dist/types/index.d.ts.map +1 -0
  128. package/dist/types/index.js +47 -0
  129. package/dist/types/index.js.map +1 -0
  130. package/dist/types/liquidation.d.ts +20 -0
  131. package/dist/types/liquidation.d.ts.map +1 -0
  132. package/dist/types/liquidation.js +6 -0
  133. package/dist/types/liquidation.js.map +1 -0
  134. package/dist/types/margin.d.ts +29 -0
  135. package/dist/types/margin.d.ts.map +1 -0
  136. package/dist/types/margin.js +6 -0
  137. package/dist/types/margin.js.map +1 -0
  138. package/dist/types/oracle.d.ts +21 -0
  139. package/dist/types/oracle.d.ts.map +1 -0
  140. package/dist/types/oracle.js +6 -0
  141. package/dist/types/oracle.js.map +1 -0
  142. package/dist/types/positions.d.ts +43 -0
  143. package/dist/types/positions.d.ts.map +1 -0
  144. package/dist/types/positions.js +13 -0
  145. package/dist/types/positions.js.map +1 -0
  146. package/dist/utils/calculations.d.ts +84 -0
  147. package/dist/utils/calculations.d.ts.map +1 -0
  148. package/dist/utils/calculations.js +155 -0
  149. package/dist/utils/calculations.js.map +1 -0
  150. package/dist/utils/errors.d.ts +24 -0
  151. package/dist/utils/errors.d.ts.map +1 -0
  152. package/dist/utils/errors.js +129 -0
  153. package/dist/utils/errors.js.map +1 -0
  154. package/dist/utils/events.d.ts +40 -0
  155. package/dist/utils/events.d.ts.map +1 -0
  156. package/dist/utils/events.js +73 -0
  157. package/dist/utils/events.js.map +1 -0
  158. package/dist/utils/format.d.ts +40 -0
  159. package/dist/utils/format.d.ts.map +1 -0
  160. package/dist/utils/format.js +86 -0
  161. package/dist/utils/format.js.map +1 -0
  162. package/dist/utils/index.d.ts +10 -0
  163. package/dist/utils/index.d.ts.map +1 -0
  164. package/dist/utils/index.js +26 -0
  165. package/dist/utils/index.js.map +1 -0
  166. package/dist/utils/network.d.ts +52 -0
  167. package/dist/utils/network.d.ts.map +1 -0
  168. package/dist/utils/network.js +192 -0
  169. package/dist/utils/network.js.map +1 -0
  170. package/dist/utils/positionCalculations.d.ts +145 -0
  171. package/dist/utils/positionCalculations.d.ts.map +1 -0
  172. package/dist/utils/positionCalculations.js +278 -0
  173. package/dist/utils/positionCalculations.js.map +1 -0
  174. package/dist/utils/validation.d.ts +28 -0
  175. package/dist/utils/validation.d.ts.map +1 -0
  176. package/dist/utils/validation.js +68 -0
  177. package/dist/utils/validation.js.map +1 -0
  178. package/docs/README.md +40 -0
  179. package/docs/api/API.md +831 -0
  180. package/docs/guides/GETTING_STARTED.md +316 -0
  181. package/docs/guides/TRADING_GUIDE.md +677 -0
  182. package/docs/integration/INTEGRATION_GUIDE.md +1679 -0
  183. package/docs/integration/VIEM_INTEGRATION.md +294 -0
  184. package/docs/reference/CLI_QUICK_REFERENCE.md +197 -0
  185. package/docs/reference/TROUBLESHOOTING.md +922 -0
  186. package/package.json +113 -0
  187. package/src/AlphaFuturesClient.ts +158 -0
  188. package/src/abi/.gitkeep +1 -0
  189. package/src/abi/Alpha.json +5987 -0
  190. package/src/abi/README.md +99 -0
  191. package/src/abi/abis.ts +131 -0
  192. package/src/abi/index.ts +13 -0
  193. package/src/config/contracts.config.ts +186 -0
  194. package/src/config/environments/alpha.config.ts +139 -0
  195. package/src/config/environments/beta.config.ts +130 -0
  196. package/src/config/environments/dev.config.ts +122 -0
  197. package/src/config/environments/index.ts +87 -0
  198. package/src/config/environments/localhost.config.ts +153 -0
  199. package/src/config/environments/prod.config.ts +142 -0
  200. package/src/config/index.ts +29 -0
  201. package/src/constants/assets.ts +299 -0
  202. package/src/constants/contracts.ts +64 -0
  203. package/src/constants/index.ts +69 -0
  204. package/src/constants/networks.ts +182 -0
  205. package/src/contracts/index.ts +5 -0
  206. package/src/contracts/viem/AlphaViem.ts +1615 -0
  207. package/src/contracts/viem/PriceOracleViem.ts +272 -0
  208. package/src/contracts/viem/index.ts +11 -0
  209. package/src/errors/index.ts +87 -0
  210. package/src/index.ts +59 -0
  211. package/src/types/VIEM_TYPES_README.md +70 -0
  212. package/src/types/alpha.ts +358 -0
  213. package/src/types/client.ts +27 -0
  214. package/src/types/contracts.ts +74 -0
  215. package/src/types/funding.ts +31 -0
  216. package/src/types/index.ts +108 -0
  217. package/src/types/liquidation.ts +23 -0
  218. package/src/types/margin.ts +34 -0
  219. package/src/types/oracle.ts +24 -0
  220. package/src/types/positions.ts +48 -0
  221. package/src/utils/calculations.ts +175 -0
  222. package/src/utils/errors.ts +147 -0
  223. package/src/utils/events.ts +98 -0
  224. package/src/utils/format.ts +84 -0
  225. package/src/utils/index.ts +10 -0
  226. package/src/utils/network.ts +212 -0
  227. package/src/utils/positionCalculations.ts +317 -0
  228. package/src/utils/validation.ts +76 -0
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ /**
3
+ * Alpha Futures Client
4
+ * Main client class that provides access to all protocol contracts
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.AlphaFuturesClient = void 0;
8
+ const PriceOracleViem_1 = require("./contracts/viem/PriceOracleViem");
9
+ const AlphaViem_1 = require("./contracts/viem/AlphaViem");
10
+ const environments_1 = require("./config/environments");
11
+ const viem_1 = require("viem");
12
+ const accounts_1 = require("viem/accounts");
13
+ class AlphaFuturesClient {
14
+ constructor(environment, config = {}) {
15
+ this.environment = environment;
16
+ const envConfig = (0, environments_1.getEnvironmentConfig)(environment);
17
+ const rpcUrl = config.rpcUrl || envConfig.rpcUrl || 'http://localhost:8545';
18
+ // Multicall3 is deployed at the standard address on Bittensor EVM
19
+ const MULTICALL3_ADDRESS = '0xcA11bde05977b3631167028862bE2a173976CA11';
20
+ // Only configure multicall3 for non-localhost environments
21
+ // Anvil/localhost doesn't have multicall3 deployed by default
22
+ const isLocalhost = environment === 'localhost';
23
+ const chain = {
24
+ id: envConfig.chainId,
25
+ name: envConfig.name,
26
+ network: envConfig.name.toLowerCase().replace(/\s+/g, '-'),
27
+ nativeCurrency: { name: 'TAO', symbol: 'TAO', decimals: 18 },
28
+ rpcUrls: {
29
+ default: { http: [rpcUrl] },
30
+ public: { http: [rpcUrl] },
31
+ },
32
+ ...(isLocalhost
33
+ ? {}
34
+ : {
35
+ contracts: {
36
+ multicall3: {
37
+ address: MULTICALL3_ADDRESS,
38
+ },
39
+ },
40
+ }),
41
+ };
42
+ // Create public client with caching disabled for fresh blockchain data
43
+ // Multicall enabled only for non-localhost: batches eth_call requests into single multicall3 call
44
+ // This improves performance and guarantees all reads are from the same block
45
+ this.publicClient = (0, viem_1.createPublicClient)({
46
+ chain,
47
+ transport: (0, viem_1.http)(rpcUrl, {
48
+ // Disable Next.js/Vercel fetch caching - critical for fresh blockchain data
49
+ fetchOptions: { cache: 'no-store' },
50
+ }),
51
+ cacheTime: 0, // Disable viem's internal caching
52
+ ...(isLocalhost
53
+ ? {}
54
+ : {
55
+ batch: {
56
+ multicall: {
57
+ wait: 10, // Batch requests within 10ms window
58
+ },
59
+ },
60
+ }),
61
+ });
62
+ // Use provided wallet client or create one from private key
63
+ if (config.walletClient) {
64
+ this.walletClient = config.walletClient;
65
+ }
66
+ else if (config.privateKey) {
67
+ const account = (0, accounts_1.privateKeyToAccount)(config.privateKey);
68
+ this.walletClient = (0, viem_1.createWalletClient)({
69
+ account,
70
+ chain,
71
+ transport: (0, viem_1.http)(rpcUrl, { fetchOptions: { cache: 'no-store' } }),
72
+ });
73
+ }
74
+ // Initialize Alpha contract
75
+ this.alphaContract = new AlphaViem_1.AlphaViem(envConfig.contracts.alpha, this.publicClient, this.walletClient, envConfig.contracts.collateralToken);
76
+ // Initialize Oracle contract
77
+ this.oracleContract = new PriceOracleViem_1.PriceOracleViem(envConfig.contracts.priceOracle, this.publicClient, this.walletClient);
78
+ this.oracle = this.oracleContract;
79
+ }
80
+ getAlpha() {
81
+ return this.alphaContract;
82
+ }
83
+ getPublicClient() {
84
+ return this.publicClient;
85
+ }
86
+ getWalletClient() {
87
+ return this.walletClient;
88
+ }
89
+ getEnvironment() {
90
+ return this.environment;
91
+ }
92
+ get isInitialized() {
93
+ return !!this.alphaContract;
94
+ }
95
+ get isConnected() {
96
+ return !!this.walletClient;
97
+ }
98
+ async getSignerAddress() {
99
+ return this.walletClient?.account?.address;
100
+ }
101
+ /**
102
+ * Get the collateral token address (TAO/USDC) for the current environment
103
+ * @returns The collateral token contract address
104
+ */
105
+ getCollateralTokenAddress() {
106
+ if (!this.environment)
107
+ return undefined;
108
+ const envConfig = (0, environments_1.getEnvironmentConfig)(this.environment);
109
+ return envConfig.contracts.collateralToken;
110
+ }
111
+ static forEnvironment(environment, config = {}) {
112
+ return new AlphaFuturesClient(environment, config);
113
+ }
114
+ }
115
+ exports.AlphaFuturesClient = AlphaFuturesClient;
116
+ //# sourceMappingURL=AlphaFuturesClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlphaFuturesClient.js","sourceRoot":"","sources":["../src/AlphaFuturesClient.ts"],"names":[],"mappings":"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"}