@d8x/perpetuals-sdk 2.0.13-alpha → 2.1.0-alpha2

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 (255) hide show
  1. package/dist/cjs/abi/IPerpetualManager.json +124 -3
  2. package/dist/cjs/abi/OracleFactory.json +94 -25
  3. package/dist/cjs/abi/PerpetualManagerProxy.json +212 -2
  4. package/dist/cjs/brokerTool.d.ts +5 -1
  5. package/dist/cjs/brokerTool.js +14 -1
  6. package/dist/cjs/brokerTool.js.map +1 -1
  7. package/dist/cjs/config/priceFeedConfig.json +0 -18
  8. package/dist/cjs/contracts/IPerpetualManager.d.ts +74 -10
  9. package/dist/cjs/contracts/OracleFactory.d.ts +69 -20
  10. package/dist/cjs/contracts/PerpetualManagerProxy.d.ts +109 -4
  11. package/dist/cjs/contracts/factories/IPerpetualManager__factory.d.ts +95 -3
  12. package/dist/cjs/contracts/factories/IPerpetualManager__factory.js +124 -3
  13. package/dist/cjs/contracts/factories/IPerpetualManager__factory.js.map +1 -1
  14. package/dist/cjs/contracts/factories/OracleFactory__factory.d.ts +75 -20
  15. package/dist/cjs/contracts/factories/OracleFactory__factory.js +94 -25
  16. package/dist/cjs/contracts/factories/OracleFactory__factory.js.map +1 -1
  17. package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.d.ts +159 -2
  18. package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.js +212 -2
  19. package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.js.map +1 -1
  20. package/dist/cjs/d8XMath.d.ts +44 -1
  21. package/dist/cjs/d8XMath.js +236 -3
  22. package/dist/cjs/d8XMath.js.map +1 -1
  23. package/dist/cjs/liquidatorTool.d.ts +1 -0
  24. package/dist/cjs/liquidatorTool.js +24 -7
  25. package/dist/cjs/liquidatorTool.js.map +1 -1
  26. package/dist/cjs/marketData.d.ts +42 -20
  27. package/dist/cjs/marketData.js +261 -188
  28. package/dist/cjs/marketData.js.map +1 -1
  29. package/dist/cjs/nodeSDKTypes.d.ts +24 -2
  30. package/dist/cjs/nodeSDKTypes.js.map +1 -1
  31. package/dist/cjs/orderExecutorTool.d.ts +3 -3
  32. package/dist/cjs/orderExecutorTool.js +38 -13
  33. package/dist/cjs/orderExecutorTool.js.map +1 -1
  34. package/dist/cjs/perpetualDataHandler.d.ts +22 -12
  35. package/dist/cjs/perpetualDataHandler.js +59 -44
  36. package/dist/cjs/perpetualDataHandler.js.map +1 -1
  37. package/dist/cjs/perpetualEventHandler.d.ts +1 -1
  38. package/dist/cjs/perpetualEventHandler.js +6 -7
  39. package/dist/cjs/perpetualEventHandler.js.map +1 -1
  40. package/dist/cjs/polyMktsPxFeed.d.ts +6 -4
  41. package/dist/cjs/polyMktsPxFeed.js +24 -3
  42. package/dist/cjs/polyMktsPxFeed.js.map +1 -1
  43. package/dist/cjs/priceFeeds.d.ts +6 -7
  44. package/dist/cjs/priceFeeds.js +36 -14
  45. package/dist/cjs/priceFeeds.js.map +1 -1
  46. package/dist/cjs/version.d.ts +1 -1
  47. package/dist/cjs/version.js +1 -1
  48. package/dist/esm/abi/IPerpetualManager.json +124 -3
  49. package/dist/esm/abi/OracleFactory.json +94 -25
  50. package/dist/esm/abi/PerpetualManagerProxy.json +212 -2
  51. package/dist/esm/brokerTool.d.ts +5 -1
  52. package/dist/esm/brokerTool.js +15 -2
  53. package/dist/esm/brokerTool.js.map +1 -1
  54. package/dist/esm/config/priceFeedConfig.json +0 -18
  55. package/dist/esm/contracts/IPerpetualManager.d.ts +74 -10
  56. package/dist/esm/contracts/OracleFactory.d.ts +69 -20
  57. package/dist/esm/contracts/PerpetualManagerProxy.d.ts +109 -4
  58. package/dist/esm/contracts/factories/IPerpetualManager__factory.d.ts +95 -3
  59. package/dist/esm/contracts/factories/IPerpetualManager__factory.js +124 -3
  60. package/dist/esm/contracts/factories/IPerpetualManager__factory.js.map +1 -1
  61. package/dist/esm/contracts/factories/OracleFactory__factory.d.ts +75 -20
  62. package/dist/esm/contracts/factories/OracleFactory__factory.js +94 -25
  63. package/dist/esm/contracts/factories/OracleFactory__factory.js.map +1 -1
  64. package/dist/{cjs/contracts/factories/MockToken__factory.d.ts → esm/contracts/factories/PerpStorage__factory.d.ts} +115 -128
  65. package/dist/esm/contracts/factories/{MockToken__factory.js → PerpStorage__factory.js} +128 -139
  66. package/dist/esm/contracts/factories/PerpStorage__factory.js.map +1 -0
  67. package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.d.ts +159 -2
  68. package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.js +212 -2
  69. package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.js.map +1 -1
  70. package/dist/esm/d8XMath.d.ts +44 -1
  71. package/dist/esm/d8XMath.js +229 -2
  72. package/dist/esm/d8XMath.js.map +1 -1
  73. package/dist/esm/liquidatorTool.d.ts +1 -0
  74. package/dist/esm/liquidatorTool.js +25 -8
  75. package/dist/esm/liquidatorTool.js.map +1 -1
  76. package/dist/esm/marketData.d.ts +42 -20
  77. package/dist/esm/marketData.js +263 -190
  78. package/dist/esm/marketData.js.map +1 -1
  79. package/dist/esm/nodeSDKTypes.d.ts +24 -2
  80. package/dist/esm/nodeSDKTypes.js.map +1 -1
  81. package/dist/esm/orderExecutorTool.d.ts +3 -3
  82. package/dist/esm/orderExecutorTool.js +38 -13
  83. package/dist/esm/orderExecutorTool.js.map +1 -1
  84. package/dist/esm/perpetualDataHandler.d.ts +22 -12
  85. package/dist/esm/perpetualDataHandler.js +60 -45
  86. package/dist/esm/perpetualDataHandler.js.map +1 -1
  87. package/dist/esm/perpetualEventHandler.d.ts +1 -1
  88. package/dist/esm/perpetualEventHandler.js +6 -7
  89. package/dist/esm/perpetualEventHandler.js.map +1 -1
  90. package/dist/esm/polyMktsPxFeed.d.ts +6 -4
  91. package/dist/esm/polyMktsPxFeed.js +24 -3
  92. package/dist/esm/polyMktsPxFeed.js.map +1 -1
  93. package/dist/esm/priceFeeds.d.ts +6 -7
  94. package/dist/esm/priceFeeds.js +36 -14
  95. package/dist/esm/priceFeeds.js.map +1 -1
  96. package/dist/esm/version.d.ts +1 -1
  97. package/dist/esm/version.js +1 -1
  98. package/package.json +1 -1
  99. package/src/abi/IPerpetualManager.json +124 -3
  100. package/src/abi/OracleFactory.json +523 -454
  101. package/src/abi/PerpetualManagerProxy.json +1596 -1386
  102. package/src/brokerTool.ts +16 -2
  103. package/src/config/priceFeedConfig.json +0 -18
  104. package/src/contracts/IPerpetualManager.ts +107 -7
  105. package/src/contracts/OracleFactory.ts +100 -26
  106. package/src/contracts/PerpetualManagerProxy.ts +192 -3
  107. package/src/contracts/factories/IPerpetualManager__factory.ts +124 -3
  108. package/src/contracts/factories/OracleFactory__factory.ts +94 -25
  109. package/src/contracts/factories/PerpetualManagerProxy__factory.ts +212 -2
  110. package/src/d8XMath.ts +304 -2
  111. package/src/liquidatorTool.ts +29 -14
  112. package/src/marketData.ts +415 -238
  113. package/src/nodeSDKTypes.ts +30 -2
  114. package/src/orderExecutorTool.ts +48 -20
  115. package/src/perpetualDataHandler.ts +87 -45
  116. package/src/perpetualEventHandler.ts +6 -7
  117. package/src/polyMktsPxFeed.ts +30 -5
  118. package/src/priceFeeds.ts +41 -17
  119. package/src/version.ts +1 -1
  120. package/dist/cjs/abi/BeaconProxy.json +0 -71
  121. package/dist/cjs/abi/Maintainer.json +0 -774
  122. package/dist/cjs/abi/MockToken.json +0 -347
  123. package/dist/cjs/abi/UUPSUpgradeable.json +0 -104
  124. package/dist/cjs/abi/WeETH.json +0 -310
  125. package/dist/cjs/abi-zkevm/LimitOrderBook.json +0 -910
  126. package/dist/cjs/abi-zkevm/LimitOrderBookFactory.json +0 -236
  127. package/dist/cjs/contracts/BeaconProxy.d.ts +0 -63
  128. package/dist/cjs/contracts/BeaconProxy.js +0 -3
  129. package/dist/cjs/contracts/BeaconProxy.js.map +0 -1
  130. package/dist/cjs/contracts/Maintainer.d.ts +0 -799
  131. package/dist/cjs/contracts/Maintainer.js +0 -3
  132. package/dist/cjs/contracts/Maintainer.js.map +0 -1
  133. package/dist/cjs/contracts/MockToken.d.ts +0 -263
  134. package/dist/cjs/contracts/MockToken.js +0 -3
  135. package/dist/cjs/contracts/MockToken.js.map +0 -1
  136. package/dist/cjs/contracts/UUPSUpgradeable.d.ts +0 -118
  137. package/dist/cjs/contracts/UUPSUpgradeable.js +0 -3
  138. package/dist/cjs/contracts/UUPSUpgradeable.js.map +0 -1
  139. package/dist/cjs/contracts/WeETH.d.ts +0 -503
  140. package/dist/cjs/contracts/WeETH.js +0 -3
  141. package/dist/cjs/contracts/WeETH.js.map +0 -1
  142. package/dist/cjs/contracts/factories/BeaconProxy__factory.d.ts +0 -61
  143. package/dist/cjs/contracts/factories/BeaconProxy__factory.js +0 -89
  144. package/dist/cjs/contracts/factories/BeaconProxy__factory.js.map +0 -1
  145. package/dist/cjs/contracts/factories/Maintainer__factory.d.ts +0 -609
  146. package/dist/cjs/contracts/factories/Maintainer__factory.js +0 -792
  147. package/dist/cjs/contracts/factories/Maintainer__factory.js.map +0 -1
  148. package/dist/cjs/contracts/factories/MockToken__factory.js +0 -365
  149. package/dist/cjs/contracts/factories/MockToken__factory.js.map +0 -1
  150. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.d.ts +0 -87
  151. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js +0 -122
  152. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js.map +0 -1
  153. package/dist/cjs/contracts/factories/WeETH__factory.d.ts +0 -545
  154. package/dist/cjs/contracts/factories/WeETH__factory.js +0 -721
  155. package/dist/cjs/contracts/factories/WeETH__factory.js.map +0 -1
  156. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.d.ts +0 -4136
  157. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js +0 -5324
  158. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js.map +0 -1
  159. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +0 -189
  160. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js +0 -254
  161. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +0 -1
  162. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.d.ts +0 -715
  163. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js +0 -928
  164. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js.map +0 -1
  165. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.d.ts +0 -344
  166. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js +0 -456
  167. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js.map +0 -1
  168. package/dist/cjs/contracts/factories/lean0/index.d.ts +0 -4
  169. package/dist/cjs/contracts/factories/lean0/index.js +0 -15
  170. package/dist/cjs/contracts/factories/lean0/index.js.map +0 -1
  171. package/dist/cjs/contracts/lean0/IPerpetualManager.d.ts +0 -2821
  172. package/dist/cjs/contracts/lean0/IPerpetualManager.js +0 -3
  173. package/dist/cjs/contracts/lean0/IPerpetualManager.js.map +0 -1
  174. package/dist/cjs/contracts/lean0/LimitOrderBook.d.ts +0 -533
  175. package/dist/cjs/contracts/lean0/LimitOrderBook.js +0 -3
  176. package/dist/cjs/contracts/lean0/LimitOrderBook.js.map +0 -1
  177. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.d.ts +0 -210
  178. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js +0 -3
  179. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js.map +0 -1
  180. package/dist/cjs/contracts/lean0/ShareToken.d.ts +0 -320
  181. package/dist/cjs/contracts/lean0/ShareToken.js +0 -3
  182. package/dist/cjs/contracts/lean0/ShareToken.js.map +0 -1
  183. package/dist/cjs/contracts/lean0/index.d.ts +0 -4
  184. package/dist/cjs/contracts/lean0/index.js +0 -3
  185. package/dist/cjs/contracts/lean0/index.js.map +0 -1
  186. package/dist/esm/abi/BeaconProxy.json +0 -71
  187. package/dist/esm/abi/Maintainer.json +0 -774
  188. package/dist/esm/abi/MockToken.json +0 -347
  189. package/dist/esm/abi/UUPSUpgradeable.json +0 -104
  190. package/dist/esm/abi/WeETH.json +0 -310
  191. package/dist/esm/abi/lean0/IPerpetualManager.json +0 -5306
  192. package/dist/esm/abi/lean0/LimitOrderBook.json +0 -910
  193. package/dist/esm/abi/lean0/LimitOrderBookFactory.json +0 -236
  194. package/dist/esm/abi/lean0/ShareToken.json +0 -438
  195. package/dist/esm/abi-zkevm/LimitOrderBook.json +0 -910
  196. package/dist/esm/abi-zkevm/LimitOrderBookFactory.json +0 -236
  197. package/dist/esm/contracts/BeaconProxy.d.ts +0 -63
  198. package/dist/esm/contracts/BeaconProxy.js +0 -2
  199. package/dist/esm/contracts/BeaconProxy.js.map +0 -1
  200. package/dist/esm/contracts/Maintainer.d.ts +0 -799
  201. package/dist/esm/contracts/Maintainer.js +0 -2
  202. package/dist/esm/contracts/Maintainer.js.map +0 -1
  203. package/dist/esm/contracts/MockToken.d.ts +0 -263
  204. package/dist/esm/contracts/MockToken.js +0 -2
  205. package/dist/esm/contracts/MockToken.js.map +0 -1
  206. package/dist/esm/contracts/UUPSUpgradeable.d.ts +0 -118
  207. package/dist/esm/contracts/UUPSUpgradeable.js +0 -2
  208. package/dist/esm/contracts/UUPSUpgradeable.js.map +0 -1
  209. package/dist/esm/contracts/WeETH.d.ts +0 -503
  210. package/dist/esm/contracts/WeETH.js +0 -2
  211. package/dist/esm/contracts/WeETH.js.map +0 -1
  212. package/dist/esm/contracts/factories/BeaconProxy__factory.d.ts +0 -61
  213. package/dist/esm/contracts/factories/BeaconProxy__factory.js +0 -85
  214. package/dist/esm/contracts/factories/BeaconProxy__factory.js.map +0 -1
  215. package/dist/esm/contracts/factories/Maintainer__factory.d.ts +0 -609
  216. package/dist/esm/contracts/factories/Maintainer__factory.js +0 -788
  217. package/dist/esm/contracts/factories/Maintainer__factory.js.map +0 -1
  218. package/dist/esm/contracts/factories/MockToken__factory.d.ts +0 -273
  219. package/dist/esm/contracts/factories/MockToken__factory.js.map +0 -1
  220. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.d.ts +0 -87
  221. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js +0 -118
  222. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js.map +0 -1
  223. package/dist/esm/contracts/factories/WeETH__factory.d.ts +0 -545
  224. package/dist/esm/contracts/factories/WeETH__factory.js +0 -717
  225. package/dist/esm/contracts/factories/WeETH__factory.js.map +0 -1
  226. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.d.ts +0 -4136
  227. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js +0 -5320
  228. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js.map +0 -1
  229. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +0 -189
  230. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js +0 -250
  231. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +0 -1
  232. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.d.ts +0 -715
  233. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js +0 -924
  234. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js.map +0 -1
  235. package/dist/esm/contracts/factories/lean0/ShareToken__factory.d.ts +0 -344
  236. package/dist/esm/contracts/factories/lean0/ShareToken__factory.js +0 -452
  237. package/dist/esm/contracts/factories/lean0/ShareToken__factory.js.map +0 -1
  238. package/dist/esm/contracts/factories/lean0/index.d.ts +0 -4
  239. package/dist/esm/contracts/factories/lean0/index.js +0 -8
  240. package/dist/esm/contracts/factories/lean0/index.js.map +0 -1
  241. package/dist/esm/contracts/lean0/IPerpetualManager.d.ts +0 -2821
  242. package/dist/esm/contracts/lean0/IPerpetualManager.js +0 -2
  243. package/dist/esm/contracts/lean0/IPerpetualManager.js.map +0 -1
  244. package/dist/esm/contracts/lean0/LimitOrderBook.d.ts +0 -533
  245. package/dist/esm/contracts/lean0/LimitOrderBook.js +0 -2
  246. package/dist/esm/contracts/lean0/LimitOrderBook.js.map +0 -1
  247. package/dist/esm/contracts/lean0/LimitOrderBookFactory.d.ts +0 -210
  248. package/dist/esm/contracts/lean0/LimitOrderBookFactory.js +0 -2
  249. package/dist/esm/contracts/lean0/LimitOrderBookFactory.js.map +0 -1
  250. package/dist/esm/contracts/lean0/ShareToken.d.ts +0 -320
  251. package/dist/esm/contracts/lean0/ShareToken.js +0 -2
  252. package/dist/esm/contracts/lean0/ShareToken.js.map +0 -1
  253. package/dist/esm/contracts/lean0/index.d.ts +0 -4
  254. package/dist/esm/contracts/lean0/index.js +0 -2
  255. package/dist/esm/contracts/lean0/index.js.map +0 -1
@@ -587,17 +587,23 @@ const _abi = [
587
587
  anonymous: false,
588
588
  inputs: [
589
589
  {
590
- indexed: false,
590
+ indexed: true,
591
591
  internalType: "address",
592
592
  name: "trader",
593
593
  type: "address",
594
594
  },
595
595
  {
596
- indexed: false,
596
+ indexed: true,
597
597
  internalType: "address",
598
598
  name: "delegate",
599
599
  type: "address",
600
600
  },
601
+ {
602
+ indexed: false,
603
+ internalType: "uint256",
604
+ name: "index",
605
+ type: "uint256",
606
+ },
601
607
  ],
602
608
  name: "SetDelegate",
603
609
  type: "event",
@@ -1223,6 +1229,73 @@ const _abi = [
1223
1229
  stateMutability: "payable",
1224
1230
  type: "fallback",
1225
1231
  },
1232
+ {
1233
+ inputs: [
1234
+ {
1235
+ internalType: "uint8",
1236
+ name: "",
1237
+ type: "uint8",
1238
+ },
1239
+ {
1240
+ internalType: "address",
1241
+ name: "",
1242
+ type: "address",
1243
+ },
1244
+ ],
1245
+ name: "brokerVolumeEMA",
1246
+ outputs: [
1247
+ {
1248
+ internalType: "int128",
1249
+ name: "fTradingVolumeEMAusd",
1250
+ type: "int128",
1251
+ },
1252
+ {
1253
+ internalType: "uint64",
1254
+ name: "timestamp",
1255
+ type: "uint64",
1256
+ },
1257
+ ],
1258
+ stateMutability: "view",
1259
+ type: "function",
1260
+ },
1261
+ {
1262
+ inputs: [
1263
+ {
1264
+ internalType: "uint256",
1265
+ name: "",
1266
+ type: "uint256",
1267
+ },
1268
+ ],
1269
+ name: "brokerVolumeFeesTbps",
1270
+ outputs: [
1271
+ {
1272
+ internalType: "uint16",
1273
+ name: "",
1274
+ type: "uint16",
1275
+ },
1276
+ ],
1277
+ stateMutability: "view",
1278
+ type: "function",
1279
+ },
1280
+ {
1281
+ inputs: [
1282
+ {
1283
+ internalType: "uint256",
1284
+ name: "",
1285
+ type: "uint256",
1286
+ },
1287
+ ],
1288
+ name: "brokerVolumeTiers",
1289
+ outputs: [
1290
+ {
1291
+ internalType: "uint256",
1292
+ name: "",
1293
+ type: "uint256",
1294
+ },
1295
+ ],
1296
+ stateMutability: "view",
1297
+ type: "function",
1298
+ },
1226
1299
  {
1227
1300
  inputs: [
1228
1301
  {
@@ -1287,6 +1360,38 @@ const _abi = [
1287
1360
  stateMutability: "view",
1288
1361
  type: "function",
1289
1362
  },
1363
+ {
1364
+ inputs: [],
1365
+ name: "lastBaseToUSDUpdateTs",
1366
+ outputs: [
1367
+ {
1368
+ internalType: "uint64",
1369
+ name: "",
1370
+ type: "uint64",
1371
+ },
1372
+ ],
1373
+ stateMutability: "view",
1374
+ type: "function",
1375
+ },
1376
+ {
1377
+ inputs: [
1378
+ {
1379
+ internalType: "uint8",
1380
+ name: "",
1381
+ type: "uint8",
1382
+ },
1383
+ ],
1384
+ name: "liquidityProvisionIsPaused",
1385
+ outputs: [
1386
+ {
1387
+ internalType: "bool",
1388
+ name: "",
1389
+ type: "bool",
1390
+ },
1391
+ ],
1392
+ stateMutability: "view",
1393
+ type: "function",
1394
+ },
1290
1395
  {
1291
1396
  inputs: [],
1292
1397
  name: "maintainer",
@@ -1320,6 +1425,44 @@ const _abi = [
1320
1425
  stateMutability: "view",
1321
1426
  type: "function",
1322
1427
  },
1428
+ {
1429
+ inputs: [
1430
+ {
1431
+ internalType: "uint24",
1432
+ name: "",
1433
+ type: "uint24",
1434
+ },
1435
+ ],
1436
+ name: "perpBaseToUSDOracle",
1437
+ outputs: [
1438
+ {
1439
+ internalType: "address",
1440
+ name: "",
1441
+ type: "address",
1442
+ },
1443
+ ],
1444
+ stateMutability: "view",
1445
+ type: "function",
1446
+ },
1447
+ {
1448
+ inputs: [
1449
+ {
1450
+ internalType: "uint24",
1451
+ name: "",
1452
+ type: "uint24",
1453
+ },
1454
+ ],
1455
+ name: "perpToLastBaseToUSD",
1456
+ outputs: [
1457
+ {
1458
+ internalType: "int128",
1459
+ name: "",
1460
+ type: "int128",
1461
+ },
1462
+ ],
1463
+ stateMutability: "view",
1464
+ type: "function",
1465
+ },
1323
1466
  {
1324
1467
  inputs: [
1325
1468
  {
@@ -1359,6 +1502,73 @@ const _abi = [
1359
1502
  stateMutability: "nonpayable",
1360
1503
  type: "function",
1361
1504
  },
1505
+ {
1506
+ inputs: [
1507
+ {
1508
+ internalType: "uint8",
1509
+ name: "",
1510
+ type: "uint8",
1511
+ },
1512
+ {
1513
+ internalType: "address",
1514
+ name: "",
1515
+ type: "address",
1516
+ },
1517
+ ],
1518
+ name: "traderVolumeEMA",
1519
+ outputs: [
1520
+ {
1521
+ internalType: "int128",
1522
+ name: "fTradingVolumeEMAusd",
1523
+ type: "int128",
1524
+ },
1525
+ {
1526
+ internalType: "uint64",
1527
+ name: "timestamp",
1528
+ type: "uint64",
1529
+ },
1530
+ ],
1531
+ stateMutability: "view",
1532
+ type: "function",
1533
+ },
1534
+ {
1535
+ inputs: [
1536
+ {
1537
+ internalType: "uint256",
1538
+ name: "",
1539
+ type: "uint256",
1540
+ },
1541
+ ],
1542
+ name: "traderVolumeFeesTbps",
1543
+ outputs: [
1544
+ {
1545
+ internalType: "uint16",
1546
+ name: "",
1547
+ type: "uint16",
1548
+ },
1549
+ ],
1550
+ stateMutability: "view",
1551
+ type: "function",
1552
+ },
1553
+ {
1554
+ inputs: [
1555
+ {
1556
+ internalType: "uint256",
1557
+ name: "",
1558
+ type: "uint256",
1559
+ },
1560
+ ],
1561
+ name: "traderVolumeTiers",
1562
+ outputs: [
1563
+ {
1564
+ internalType: "uint256",
1565
+ name: "",
1566
+ type: "uint256",
1567
+ },
1568
+ ],
1569
+ stateMutability: "view",
1570
+ type: "function",
1571
+ },
1362
1572
  {
1363
1573
  inputs: [
1364
1574
  {
package/src/d8XMath.ts CHANGED
@@ -383,6 +383,7 @@ export function getNewPositionLeverage(
383
383
  * @param {number} price - price to trade amount 'tradeAmnt'
384
384
  * @param {number} S3 - collateral to quote conversion (=S2 if base-collateral, =1 if quote collateral, = index S3 if quanto)
385
385
  * @param {number} S2Mark - mark price
386
+ * @param {boolean} isPredMkt - true if prediction market
386
387
  * @returns {number} Amount to be deposited to have the given leverage when trading into position pos before fees
387
388
  */
388
389
  export function getDepositAmountForLvgTrade(
@@ -392,11 +393,25 @@ export function getDepositAmountForLvgTrade(
392
393
  targetLvg: number,
393
394
  price: number,
394
395
  S3: number,
395
- S2Mark: number
396
+ S2Mark: number,
397
+ isPredMkt: boolean
396
398
  ) {
397
399
  let pnl = (tradeAmnt * (S2Mark - price)) / S3;
400
+ let S2MarkBefore = S2Mark;
401
+ if (isPredMkt) {
402
+ // adjust mark price to 'probability'
403
+ S2Mark = S2Mark - 1;
404
+ S2MarkBefore = S2Mark;
405
+ if (pos0 < 0) {
406
+ S2MarkBefore = 1 - S2Mark;
407
+ }
408
+ if (pos0 + tradeAmnt < 0) {
409
+ S2Mark = 1 - S2Mark;
410
+ }
411
+ }
398
412
  if (targetLvg == 0) {
399
- targetLvg = (Math.abs(pos0) * S2Mark) / S3 / b0;
413
+ // use current leverage
414
+ targetLvg = (Math.abs(pos0) * S2MarkBefore) / S3 / b0;
400
415
  }
401
416
  let b = (Math.abs(pos0 + tradeAmnt) * S2Mark) / S3 / targetLvg;
402
417
  return -(b0 + pnl - b);
@@ -422,3 +437,290 @@ export function priceToProb(px: number) {
422
437
  export function probToPrice(prob: number) {
423
438
  return 1 + prob;
424
439
  }
440
+
441
+ // shannon entropy
442
+ export function entropy(prob: number) {
443
+ if (prob < 1e-15 || prob - 1 > 1e-15) {
444
+ return 0;
445
+ }
446
+ return -prob * Math.log2(prob) - (1 - prob) * Math.log2(1 - prob);
447
+ }
448
+
449
+ /**
450
+ * Maintenance margin requirement for prediction markets
451
+ * @param pos signed position
452
+ * @param s2 mark price
453
+ * @param s3 collateral to quote conversion
454
+ * @param m base margin rate
455
+ * @returns required margin balance
456
+ */
457
+ function pmMarginThresh(pos: number, s2: number, s3: number, m: number | undefined = 0.18) {
458
+ let p = s2 - 1;
459
+ if (pos < 0) {
460
+ p = 1 - p;
461
+ }
462
+ const h = entropy(p);
463
+ const tau = m + (0.4 - m) * h;
464
+ return (Math.abs(pos) * p * tau) / s3;
465
+ }
466
+
467
+ export function pmMaintenanceMarginRate(pos: number, s2: number, m: number | undefined = 0.18): number {
468
+ let p = s2 - 1;
469
+ if (pos < 0) {
470
+ p = 1 - p;
471
+ }
472
+ const h = entropy(p);
473
+ return m + (0.4 - m) * h;
474
+ }
475
+
476
+ /**
477
+ * Calculate the expected loss for a prediction market trade used for
478
+ * prediction market fees
479
+ * @param p probability derived from mark price (long)
480
+ * @param m maximal maintenance rate from which we defer the actual maintenance margin rate
481
+ * @param totLong total long in base currency
482
+ * @param totShort total short
483
+ * @param tradeAmt signed trade amount, can be zero
484
+ * @param tradeMgnRate margin rate of the trader
485
+ */
486
+ export function expectedLoss(
487
+ p: number,
488
+ m: number,
489
+ totLong: number,
490
+ totShort: number,
491
+ tradeAmt: number,
492
+ tradeMgnRate: number
493
+ ): number {
494
+ // maintenance margin rate
495
+ m = (0.4 - m) * entropy(p) + m;
496
+ let dlm = 0;
497
+ let dl = 0;
498
+ let dsm = 0;
499
+ let ds = 0;
500
+ if (tradeAmt > 0) {
501
+ dlm = p * tradeAmt * tradeMgnRate;
502
+ dl = tradeAmt;
503
+ } else if (tradeAmt < 0) {
504
+ dsm = (1 - p) * Math.abs(tradeAmt) * tradeMgnRate;
505
+ ds = Math.abs(tradeAmt);
506
+ }
507
+ const a = Math.max(0, dl + totLong - m * totShort - dsm);
508
+ const b = Math.max(0, ds + totShort - m * totLong + dsm);
509
+ return p * (1 - p) * (a + b);
510
+ }
511
+
512
+ /**
513
+ * Exchange fee as a rate for prediction markets
514
+ * @param prob long probability
515
+ * @param m max maintenance margin rate (0.18)
516
+ * @param totShort
517
+ * @param totLong
518
+ * @param tradeAmt trade amount in base currency
519
+ * @param tradeMgnRate margin rate for this trade
520
+ * @returns fee relative to tradeAmt
521
+ */
522
+ export function pmExchangeFee(
523
+ prob: number,
524
+ m: number,
525
+ totShort: number,
526
+ totLong: number,
527
+ tradeAmt: number,
528
+ tradeMgnRate: number
529
+ ): number {
530
+ const el0 = expectedLoss(prob, m, totLong, totShort, 0, 0);
531
+ const el1 = expectedLoss(prob, m, totLong, totShort, tradeAmt, tradeMgnRate);
532
+ const fee = (el1 - el0) / Math.abs(tradeAmt);
533
+ return Math.max(fee, 0.001);
534
+ }
535
+
536
+ /**
537
+ * Margin balance for prediction markets
538
+ * @param pos signed position
539
+ * @param s2 mark price
540
+ * @param s3 collateral to quote conversion
541
+ * @param ell locked in value
542
+ * @param mc margin cash in collateral currency
543
+ * @returns current margin balance
544
+ */
545
+ function pmMarginBalance(pos: number, s2: number, s3: number, ell: number, mc: number): number {
546
+ return (pos * s2) / s3 - ell / s3 + mc;
547
+ }
548
+
549
+ function pmExcessBalance(pos: number, s2: number, s3: number, ell: number, mc: number, m: number | undefined): number {
550
+ return pmMarginBalance(pos, mc, s2, s3, ell) - pmMarginThresh(pos, s2, s3, m);
551
+ }
552
+
553
+ // finds the liquidation price for prediction markets
554
+ // using Newton's algorithm
555
+ export function pmFindLiquidationPrice(
556
+ pos: number,
557
+ s3: number,
558
+ ell: number,
559
+ mc: number,
560
+ baseMarginRate: number | undefined,
561
+ s2Start: number | undefined = 0.5
562
+ ): number {
563
+ const delta_s = 0.01;
564
+ let s = 100;
565
+ let s_new = s2Start;
566
+
567
+ while (Math.abs(s_new - s) > 0.01) {
568
+ s = s_new;
569
+ const f = Math.pow(pmExcessBalance(pos, s, s3, ell, mc, baseMarginRate), 2);
570
+ const ds = (Math.pow(pmExcessBalance(pos, s + delta_s, s3, ell, mc, baseMarginRate), 2) - f) / delta_s;
571
+ s_new = s - f / ds;
572
+
573
+ if (s_new < 1) {
574
+ return 1;
575
+ }
576
+ if (s_new > 2) {
577
+ return 2;
578
+ }
579
+ }
580
+ return s;
581
+ }
582
+
583
+ /**
584
+ * Calculate the excess margin defined as
585
+ * excess := margin balance - trading fee - initial margin threshold
586
+ * for the given trade and position
587
+ * @param tradeAmt
588
+ * @param currentCashCC
589
+ * @param currentPos
590
+ * @param currentLockedInQC
591
+ * @param limitPrice
592
+ * @param Sm
593
+ * @param S3
594
+ * @param totLong
595
+ * @param totShort
596
+ * @returns
597
+ */
598
+ function excessMargin(
599
+ tradeAmt: number,
600
+ currentCashCC: number,
601
+ currentPos: number,
602
+ currentLockedInQC: number,
603
+ limitPrice: number,
604
+ Sm: number,
605
+ S3: number,
606
+ totLong: number,
607
+ totShort: number
608
+ ): number {
609
+ const m = 0.18; //max maintenance margin rate
610
+ const m0 = 0.2; //max initial margin rate
611
+ const pos = currentPos + tradeAmt;
612
+ let p = Sm - 1;
613
+ if (pos < 0) {
614
+ p = 2 - Sm; //=1-(Sm-1)
615
+ }
616
+ const h = entropy(p);
617
+ const tau = m0 + (0.5 - m0) * h;
618
+ const thresh = Math.abs(pos) * p * tau;
619
+ const b0 = currentCashCC + Math.abs(currentPos) * Sm - currentLockedInQC + Math.max(0, tradeAmt * (Sm - limitPrice));
620
+ // b0 + margin - fee > threshold
621
+ // margin = threshold - b0 + fee
622
+ const fee_cc = pmExchangeFee(p, m, totShort, totLong, tradeAmt, tau) / S3;
623
+
624
+ // missing: referral rebate
625
+ return b0 / S3 - thresh / S3 - fee_cc;
626
+ }
627
+
628
+ /**
629
+ * Find maximal trade size (short dir=-1 or long dir=1) for prediction
630
+ * markets.
631
+ * @param dir
632
+ * @param currentPosition
633
+ * @param currentCashCC
634
+ * @param currentLockedInValue
635
+ * @param limitPrice
636
+ * @param Sm
637
+ * @param S3
638
+ * @param totLong
639
+ * @param totShort
640
+ * @param maxShort
641
+ * @param maxLong
642
+ * @returns signed max trade size
643
+ */
644
+ export function pmFindMaxTradeSize(
645
+ dir: number,
646
+ currentPosition: number,
647
+ currentCashCC: number,
648
+ currentLockedInValue: number,
649
+ limitPrice: number,
650
+ Sm: number,
651
+ S3: number,
652
+ totLong: number,
653
+ totShort: number,
654
+ maxShort: number,
655
+ maxLong: number
656
+ ): number {
657
+ if (dir < 0) {
658
+ dir = -1;
659
+ } else {
660
+ dir = 1;
661
+ }
662
+ const lot = 10;
663
+ const deltaS = 1; //for derivative
664
+ const f0 = excessMargin(
665
+ dir * deltaS,
666
+ currentCashCC,
667
+ currentPosition,
668
+ currentLockedInValue,
669
+ limitPrice,
670
+ Sm,
671
+ S3,
672
+ totLong,
673
+ totShort
674
+ );
675
+ if (f0 < lot) {
676
+ // no trade possible
677
+ return 0;
678
+ }
679
+ // numerically find maximal trade size
680
+ let sNew = dir * lot * 10;
681
+ let s = 2 * sNew;
682
+ while (true) {
683
+ let count = 0;
684
+ while (Math.abs(sNew - s) > 1 && count < 100) {
685
+ s = sNew;
686
+ const f =
687
+ excessMargin(s, currentCashCC, currentPosition, currentLockedInValue, limitPrice, Sm, S3, totLong, totShort) **
688
+ 2;
689
+ const f2 =
690
+ excessMargin(
691
+ s + deltaS,
692
+ currentCashCC,
693
+ currentPosition,
694
+ currentLockedInValue,
695
+ limitPrice,
696
+ Sm,
697
+ S3,
698
+ totLong,
699
+ totShort
700
+ ) ** 2;
701
+ let ds = (f2 - f) / deltaS;
702
+ sNew = s - f / ds;
703
+ count += 1;
704
+ }
705
+ if (count < 100) {
706
+ break;
707
+ }
708
+ // Newton algorithm failed,
709
+ // choose new starting value
710
+ if (dir > 0) {
711
+ sNew = Math.random() * (maxLong - currentPosition);
712
+ } else {
713
+ sNew = -Math.random() * (Math.abs(maxShort) + currentPosition);
714
+ }
715
+ }
716
+ // ensure trade maximal trade sNew does not exceed
717
+ // the contract limits
718
+ if (currentPosition + sNew < maxShort) {
719
+ sNew = maxShort - currentPosition;
720
+ } else if (currentPosition + sNew > maxLong) {
721
+ sNew = maxLong - currentPosition;
722
+ }
723
+ // round trade size down to lot
724
+ sNew = Math.sign(sNew) * Math.floor(Math.abs(sNew) / lot) * lot;
725
+ return sNew;
726
+ }
@@ -1,9 +1,8 @@
1
1
  import { ContractTransactionResponse, JsonRpcProvider, Overrides, Signer, TransactionResponse } from "ethers";
2
2
  import { PayableOverrides } from "./contracts/common";
3
3
  import { IPyth__factory } from "./contracts/factories";
4
- import { ABK64x64ToFloat, floatToABK64x64 } from "./d8XMath";
4
+ import { ABK64x64ToFloat, floatToABK64x64, entropy } from "./d8XMath";
5
5
  import type { NodeSDKConfig, PriceFeedSubmission } from "./nodeSDKTypes";
6
- import PerpetualDataHandler from "./perpetualDataHandler";
7
6
  import WriteAccessHandler from "./writeAccessHandler";
8
7
 
9
8
  /**
@@ -221,15 +220,18 @@ export default class LiquidatorTool extends WriteAccessHandler {
221
220
  if (indexPrices == undefined) {
222
221
  // fetch from API
223
222
  let obj = await this.priceFeedGetter.fetchPricesForPerpetual(symbol);
224
- indexPrices = [obj.idxPrices[0], obj.idxPrices[1]];
223
+
224
+ indexPrices = [
225
+ obj.ema, // ema (pred mkts) or s2
226
+ obj.s3, // s3
227
+ ];
225
228
  }
226
- let traderState: bigint[] = await this.proxyContract.getTraderState(
227
- perpID,
228
- traderAddr,
229
- indexPrices.map((x) => floatToABK64x64(x == undefined || Number.isNaN(x) ? 0 : x)) as [bigint, bigint],
230
- overrides || {}
231
- );
232
- if (traderState[idx_notional] == 0n) {
229
+ const fIdxPx = indexPrices.map((x) => floatToABK64x64(x == undefined || Number.isNaN(x) ? 0 : x)) as [
230
+ bigint,
231
+ bigint
232
+ ];
233
+ let traderState = await this.proxyContract.getTraderState(perpID, traderAddr, fIdxPx, overrides || {});
234
+ if (traderState[idx_notional].eq(0)) {
233
235
  // trader does not have open position
234
236
  return true;
235
237
  }
@@ -242,15 +244,28 @@ export default class LiquidatorTool extends WriteAccessHandler {
242
244
  const pos = ABK64x64ToFloat(traderState[idx_marginAccountPositionBC]);
243
245
  const marginbalance = ABK64x64ToFloat(traderState[idx_marginBalance]);
244
246
  const coll2quote = ABK64x64ToFloat(traderState[idx_collateralToQuoteConversion]);
245
- let base2collateral = indexPrices[0] / coll2quote;
247
+ let threshold: number;
246
248
  if (this.isPredictionMarket(symbol)) {
247
- // flat margin rate for prediction markets
248
- base2collateral = 1;
249
+ const idx_markPrice = 8;
250
+ const markPrice = ABK64x64ToFloat(traderState[idx_markPrice]);
251
+ threshold = LiquidatorTool.maintenanceMarginPredMkts(maintMgnRate, pos, coll2quote, markPrice);
252
+ } else {
253
+ const base2collateral = indexPrices[0] / coll2quote;
254
+ threshold = Math.abs(pos * base2collateral * maintMgnRate);
249
255
  }
250
- const threshold = Math.abs(pos * base2collateral * maintMgnRate);
251
256
  return marginbalance >= threshold;
252
257
  }
253
258
 
259
+ public static maintenanceMarginPredMkts(maintMgnRateBase: number, pos: number, s3: number, markPx: number) {
260
+ let p = markPx - 1;
261
+ // p: price = 1+prob
262
+ if (pos < 0) {
263
+ p = 1 - p;
264
+ }
265
+ const tau = maintMgnRateBase + (0.4 - maintMgnRateBase) * entropy(p);
266
+ return (Math.abs(pos) * p * tau) / s3;
267
+ }
268
+
254
269
  /**
255
270
  * Total number of active accounts for this symbol, i.e. accounts with positions that are currently open.
256
271
  * @param {string} symbol Symbol of the form ETH-USD-MATIC.