@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
package/package.json ADDED
@@ -0,0 +1,113 @@
1
+ {
2
+ "name": "@megatao/sdk",
3
+ "version": "1.1.0",
4
+ "description": "TypeScript SDK for MegaTAO perpetual futures protocol",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "scripts": {
8
+ "build": "tsc",
9
+ "dev": "tsc --watch",
10
+ "clean": "rm -rf dist",
11
+ "test": "jest",
12
+ "test:unit": "jest test/unit",
13
+ "test:integration": "jest test/integration",
14
+ "test:integration:anvil": "jest test/integration/anvil-trading.test.ts",
15
+ "test:e2e": "jest test/e2e",
16
+ "test:cli": "jest test/cli",
17
+ "test:watch": "jest --watch",
18
+ "test:coverage": "jest --coverage",
19
+ "test:ci": "jest --coverage --ci --reporters=default --reporters=jest-junit",
20
+ "anvil:start": "../script/e2e/anvil-manager.sh start",
21
+ "anvil:stop": "../script/e2e/anvil-manager.sh stop",
22
+ "anvil:restart": "../script/e2e/anvil-manager.sh restart",
23
+ "anvil:status": "../script/e2e/anvil-manager.sh status",
24
+ "anvil:logs": "../script/e2e/anvil-manager.sh logs",
25
+ "deploy:anvil": "../script/e2e/deploy.sh",
26
+ "lint": "eslint src --ext .ts",
27
+ "format": "prettier --write \"src/**/*.ts\" \"examples/**/*.ts\" \"cli/**/*.ts\"",
28
+ "prepublishOnly": "npm run clean && npm run build",
29
+ "cli": "tsx cli/index.ts",
30
+ "cli:dev": "tsx watch cli/index.ts",
31
+ "cli:interactive": "tsx cli/interactive.ts",
32
+ "postinstall": "node -e \"console.log('\\n✨ MegaTAO SDK installed successfully!\\n\\nRun \\'npx alf --help\\' to get started.\\n')\"",
33
+ "generate:abis": "ts-node scripts/generate-abis.ts",
34
+ "generate": "npm run generate:abis",
35
+ "sync-abi": "ts-node scripts/sync-abi.ts",
36
+ "sync": "ts-node scripts/sync-deployment.ts",
37
+ "typecheck": "tsc --noEmit",
38
+ "deploy:anvil": "./scripts/deploy-monolith-anvil.sh",
39
+ "test:deployment": "./scripts/test-deployment.sh",
40
+ "deploy:test": "npm run deploy:anvil && npm run test:deployment"
41
+ },
42
+ "keywords": [
43
+ "megatao",
44
+ "perpetual-futures",
45
+ "defi",
46
+ "bittensor",
47
+ "typescript",
48
+ "sdk"
49
+ ],
50
+ "author": "MegaTAO Team",
51
+ "license": "MIT",
52
+ "dependencies": {
53
+ "@types/node": "^20.10.5",
54
+ "abitype": "^1.0.0",
55
+ "chalk": "^5.3.0",
56
+ "cli-table3": "^0.6.3",
57
+ "commander": "^11.1.0",
58
+ "conf": "^12.0.0",
59
+ "dotenv": "^16.3.1",
60
+ "figlet": "^1.7.0",
61
+ "inquirer": "^9.2.12",
62
+ "ora": "^7.0.1",
63
+ "tsx": "^4.20.5",
64
+ "viem": "^2.38.6"
65
+ },
66
+ "peerDependencies": {
67
+ "viem": "^2.0.0"
68
+ },
69
+ "devDependencies": {
70
+ "@types/figlet": "^1.5.8",
71
+ "@types/inquirer": "^9.0.7",
72
+ "@types/jest": "^29.5.11",
73
+ "@typescript-eslint/eslint-plugin": "^6.15.0",
74
+ "@typescript-eslint/parser": "^6.15.0",
75
+ "eslint": "^8.56.0",
76
+ "eslint-config-prettier": "^9.1.0",
77
+ "jest": "^29.7.0",
78
+ "jest-junit": "^16.0.0",
79
+ "prettier": "^3.1.1",
80
+ "ts-jest": "^29.1.1",
81
+ "ts-node": "^10.9.2",
82
+ "typescript": "^5.3.3"
83
+ },
84
+ "bin": {
85
+ "alf": "./bin/alf"
86
+ },
87
+ "files": [
88
+ "dist",
89
+ "src",
90
+ "cli",
91
+ "bin",
92
+ "docs",
93
+ "README.md",
94
+ "CHANGELOG.md",
95
+ "config.example.json",
96
+ ".env.example"
97
+ ],
98
+ "engines": {
99
+ "node": ">=16.0.0"
100
+ },
101
+ "publishConfig": {
102
+ "access": "public"
103
+ },
104
+ "repository": {
105
+ "type": "git",
106
+ "url": "https://github.com/mega-tao/megatao-monorepo",
107
+ "directory": "sdk"
108
+ },
109
+ "homepage": "https://megatao.com",
110
+ "bugs": {
111
+ "url": "https://github.com/mega-tao/megatao-monorepo/issues"
112
+ }
113
+ }
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Alpha Futures Client
3
+ * Main client class that provides access to all protocol contracts
4
+ */
5
+
6
+ import { PriceOracleViem } from './contracts/viem/PriceOracleViem';
7
+ import { AlphaViem } from './contracts/viem/AlphaViem';
8
+ import { getEnvironmentConfig, type Environment } from './config/environments';
9
+ import {
10
+ createPublicClient,
11
+ createWalletClient,
12
+ http,
13
+ type PublicClient,
14
+ type WalletClient,
15
+ type Address,
16
+ } from 'viem';
17
+ import { privateKeyToAccount } from 'viem/accounts';
18
+
19
+ export interface AlphaClientConfig {
20
+ rpcUrl?: string;
21
+ privateKey?: `0x${string}`;
22
+ walletClient?: WalletClient;
23
+ }
24
+
25
+ export class AlphaFuturesClient {
26
+ private alphaContract: AlphaViem;
27
+ private oracleContract: PriceOracleViem;
28
+ private publicClient: PublicClient;
29
+ private walletClient?: WalletClient;
30
+ private environment?: Environment;
31
+ public readonly oracle: PriceOracleViem;
32
+
33
+ constructor(environment: Environment, config: AlphaClientConfig = {}) {
34
+ this.environment = environment;
35
+ const envConfig = getEnvironmentConfig(environment);
36
+
37
+ const rpcUrl = config.rpcUrl || envConfig.rpcUrl || 'http://localhost:8545';
38
+ // Multicall3 is deployed at the standard address on Bittensor EVM
39
+ const MULTICALL3_ADDRESS = '0xcA11bde05977b3631167028862bE2a173976CA11';
40
+
41
+ // Only configure multicall3 for non-localhost environments
42
+ // Anvil/localhost doesn't have multicall3 deployed by default
43
+ const isLocalhost = environment === 'localhost';
44
+ const chain = {
45
+ id: envConfig.chainId,
46
+ name: envConfig.name,
47
+ network: envConfig.name.toLowerCase().replace(/\s+/g, '-'),
48
+ nativeCurrency: { name: 'TAO', symbol: 'TAO', decimals: 18 },
49
+ rpcUrls: {
50
+ default: { http: [rpcUrl] },
51
+ public: { http: [rpcUrl] },
52
+ },
53
+ ...(isLocalhost
54
+ ? {}
55
+ : {
56
+ contracts: {
57
+ multicall3: {
58
+ address: MULTICALL3_ADDRESS as Address,
59
+ },
60
+ },
61
+ }),
62
+ } as any;
63
+
64
+ // Create public client with caching disabled for fresh blockchain data
65
+ // Multicall enabled only for non-localhost: batches eth_call requests into single multicall3 call
66
+ // This improves performance and guarantees all reads are from the same block
67
+ this.publicClient = createPublicClient({
68
+ chain,
69
+ transport: http(rpcUrl, {
70
+ // Disable Next.js/Vercel fetch caching - critical for fresh blockchain data
71
+ fetchOptions: { cache: 'no-store' },
72
+ }),
73
+ cacheTime: 0, // Disable viem's internal caching
74
+ ...(isLocalhost
75
+ ? {}
76
+ : {
77
+ batch: {
78
+ multicall: {
79
+ wait: 10, // Batch requests within 10ms window
80
+ },
81
+ },
82
+ }),
83
+ }) as PublicClient;
84
+
85
+ // Use provided wallet client or create one from private key
86
+ if (config.walletClient) {
87
+ this.walletClient = config.walletClient;
88
+ } else if (config.privateKey) {
89
+ const account = privateKeyToAccount(config.privateKey);
90
+ this.walletClient = createWalletClient({
91
+ account,
92
+ chain,
93
+ transport: http(rpcUrl, { fetchOptions: { cache: 'no-store' } }),
94
+ });
95
+ }
96
+
97
+ // Initialize Alpha contract
98
+ this.alphaContract = new AlphaViem(
99
+ envConfig.contracts.alpha as Address,
100
+ this.publicClient,
101
+ this.walletClient,
102
+ envConfig.contracts.collateralToken as Address,
103
+ );
104
+
105
+ // Initialize Oracle contract
106
+ this.oracleContract = new PriceOracleViem(
107
+ envConfig.contracts.priceOracle as Address,
108
+ this.publicClient,
109
+ this.walletClient,
110
+ );
111
+ this.oracle = this.oracleContract;
112
+ }
113
+
114
+ getAlpha(): AlphaViem {
115
+ return this.alphaContract;
116
+ }
117
+
118
+ getPublicClient(): PublicClient {
119
+ return this.publicClient;
120
+ }
121
+
122
+ getWalletClient(): WalletClient | undefined {
123
+ return this.walletClient;
124
+ }
125
+
126
+ getEnvironment(): Environment | undefined {
127
+ return this.environment;
128
+ }
129
+
130
+ get isInitialized(): boolean {
131
+ return !!this.alphaContract;
132
+ }
133
+
134
+ get isConnected(): boolean {
135
+ return !!this.walletClient;
136
+ }
137
+
138
+ async getSignerAddress(): Promise<Address | undefined> {
139
+ return this.walletClient?.account?.address;
140
+ }
141
+
142
+ /**
143
+ * Get the collateral token address (TAO/USDC) for the current environment
144
+ * @returns The collateral token contract address
145
+ */
146
+ getCollateralTokenAddress(): Address | undefined {
147
+ if (!this.environment) return undefined;
148
+ const envConfig = getEnvironmentConfig(this.environment);
149
+ return envConfig.contracts.collateralToken;
150
+ }
151
+
152
+ static forEnvironment(
153
+ environment: Environment,
154
+ config: AlphaClientConfig = {},
155
+ ): AlphaFuturesClient {
156
+ return new AlphaFuturesClient(environment, config);
157
+ }
158
+ }
@@ -0,0 +1 @@
1
+ # ABI files will be generated here by the generate-abis script