@d8x/perpetuals-sdk 2.0.12-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 (252) 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/contracts/IPerpetualManager.d.ts +74 -10
  8. package/dist/cjs/contracts/OracleFactory.d.ts +69 -20
  9. package/dist/cjs/contracts/PerpetualManagerProxy.d.ts +109 -4
  10. package/dist/cjs/contracts/factories/IPerpetualManager__factory.d.ts +95 -3
  11. package/dist/cjs/contracts/factories/IPerpetualManager__factory.js +124 -3
  12. package/dist/cjs/contracts/factories/IPerpetualManager__factory.js.map +1 -1
  13. package/dist/cjs/contracts/factories/OracleFactory__factory.d.ts +75 -20
  14. package/dist/cjs/contracts/factories/OracleFactory__factory.js +94 -25
  15. package/dist/cjs/contracts/factories/OracleFactory__factory.js.map +1 -1
  16. package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.d.ts +159 -2
  17. package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.js +212 -2
  18. package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.js.map +1 -1
  19. package/dist/cjs/d8XMath.d.ts +44 -1
  20. package/dist/cjs/d8XMath.js +236 -3
  21. package/dist/cjs/d8XMath.js.map +1 -1
  22. package/dist/cjs/liquidatorTool.d.ts +1 -0
  23. package/dist/cjs/liquidatorTool.js +24 -7
  24. package/dist/cjs/liquidatorTool.js.map +1 -1
  25. package/dist/cjs/marketData.d.ts +42 -20
  26. package/dist/cjs/marketData.js +261 -188
  27. package/dist/cjs/marketData.js.map +1 -1
  28. package/dist/cjs/nodeSDKTypes.d.ts +24 -2
  29. package/dist/cjs/nodeSDKTypes.js.map +1 -1
  30. package/dist/cjs/orderExecutorTool.d.ts +3 -3
  31. package/dist/cjs/orderExecutorTool.js +38 -13
  32. package/dist/cjs/orderExecutorTool.js.map +1 -1
  33. package/dist/cjs/perpetualDataHandler.d.ts +22 -12
  34. package/dist/cjs/perpetualDataHandler.js +59 -44
  35. package/dist/cjs/perpetualDataHandler.js.map +1 -1
  36. package/dist/cjs/perpetualEventHandler.d.ts +1 -1
  37. package/dist/cjs/perpetualEventHandler.js +6 -7
  38. package/dist/cjs/perpetualEventHandler.js.map +1 -1
  39. package/dist/cjs/polyMktsPxFeed.d.ts +6 -4
  40. package/dist/cjs/polyMktsPxFeed.js +24 -3
  41. package/dist/cjs/polyMktsPxFeed.js.map +1 -1
  42. package/dist/cjs/priceFeeds.d.ts +6 -7
  43. package/dist/cjs/priceFeeds.js +36 -14
  44. package/dist/cjs/priceFeeds.js.map +1 -1
  45. package/dist/cjs/version.d.ts +1 -1
  46. package/dist/cjs/version.js +1 -1
  47. package/dist/esm/abi/IPerpetualManager.json +124 -3
  48. package/dist/esm/abi/OracleFactory.json +94 -25
  49. package/dist/esm/abi/PerpetualManagerProxy.json +212 -2
  50. package/dist/esm/brokerTool.d.ts +5 -1
  51. package/dist/esm/brokerTool.js +15 -2
  52. package/dist/esm/brokerTool.js.map +1 -1
  53. package/dist/esm/contracts/IPerpetualManager.d.ts +74 -10
  54. package/dist/esm/contracts/OracleFactory.d.ts +69 -20
  55. package/dist/esm/contracts/PerpetualManagerProxy.d.ts +109 -4
  56. package/dist/esm/contracts/factories/IPerpetualManager__factory.d.ts +95 -3
  57. package/dist/esm/contracts/factories/IPerpetualManager__factory.js +124 -3
  58. package/dist/esm/contracts/factories/IPerpetualManager__factory.js.map +1 -1
  59. package/dist/esm/contracts/factories/OracleFactory__factory.d.ts +75 -20
  60. package/dist/esm/contracts/factories/OracleFactory__factory.js +94 -25
  61. package/dist/esm/contracts/factories/OracleFactory__factory.js.map +1 -1
  62. package/dist/{cjs/contracts/factories/MockToken__factory.d.ts → esm/contracts/factories/PerpStorage__factory.d.ts} +115 -128
  63. package/dist/esm/contracts/factories/{MockToken__factory.js → PerpStorage__factory.js} +128 -139
  64. package/dist/esm/contracts/factories/PerpStorage__factory.js.map +1 -0
  65. package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.d.ts +159 -2
  66. package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.js +212 -2
  67. package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.js.map +1 -1
  68. package/dist/esm/d8XMath.d.ts +44 -1
  69. package/dist/esm/d8XMath.js +229 -2
  70. package/dist/esm/d8XMath.js.map +1 -1
  71. package/dist/esm/liquidatorTool.d.ts +1 -0
  72. package/dist/esm/liquidatorTool.js +25 -8
  73. package/dist/esm/liquidatorTool.js.map +1 -1
  74. package/dist/esm/marketData.d.ts +42 -20
  75. package/dist/esm/marketData.js +263 -190
  76. package/dist/esm/marketData.js.map +1 -1
  77. package/dist/esm/nodeSDKTypes.d.ts +24 -2
  78. package/dist/esm/nodeSDKTypes.js.map +1 -1
  79. package/dist/esm/orderExecutorTool.d.ts +3 -3
  80. package/dist/esm/orderExecutorTool.js +38 -13
  81. package/dist/esm/orderExecutorTool.js.map +1 -1
  82. package/dist/esm/perpetualDataHandler.d.ts +22 -12
  83. package/dist/esm/perpetualDataHandler.js +60 -45
  84. package/dist/esm/perpetualDataHandler.js.map +1 -1
  85. package/dist/esm/perpetualEventHandler.d.ts +1 -1
  86. package/dist/esm/perpetualEventHandler.js +6 -7
  87. package/dist/esm/perpetualEventHandler.js.map +1 -1
  88. package/dist/esm/polyMktsPxFeed.d.ts +6 -4
  89. package/dist/esm/polyMktsPxFeed.js +24 -3
  90. package/dist/esm/polyMktsPxFeed.js.map +1 -1
  91. package/dist/esm/priceFeeds.d.ts +6 -7
  92. package/dist/esm/priceFeeds.js +36 -14
  93. package/dist/esm/priceFeeds.js.map +1 -1
  94. package/dist/esm/version.d.ts +1 -1
  95. package/dist/esm/version.js +1 -1
  96. package/package.json +1 -1
  97. package/src/abi/IPerpetualManager.json +124 -3
  98. package/src/abi/OracleFactory.json +523 -454
  99. package/src/abi/PerpetualManagerProxy.json +1596 -1386
  100. package/src/brokerTool.ts +16 -2
  101. package/src/contracts/IPerpetualManager.ts +107 -7
  102. package/src/contracts/OracleFactory.ts +100 -26
  103. package/src/contracts/PerpetualManagerProxy.ts +192 -3
  104. package/src/contracts/factories/IPerpetualManager__factory.ts +124 -3
  105. package/src/contracts/factories/OracleFactory__factory.ts +94 -25
  106. package/src/contracts/factories/PerpetualManagerProxy__factory.ts +212 -2
  107. package/src/d8XMath.ts +304 -2
  108. package/src/liquidatorTool.ts +29 -14
  109. package/src/marketData.ts +415 -238
  110. package/src/nodeSDKTypes.ts +30 -2
  111. package/src/orderExecutorTool.ts +48 -20
  112. package/src/perpetualDataHandler.ts +87 -45
  113. package/src/perpetualEventHandler.ts +6 -7
  114. package/src/polyMktsPxFeed.ts +30 -5
  115. package/src/priceFeeds.ts +41 -17
  116. package/src/version.ts +1 -1
  117. package/dist/cjs/abi/BeaconProxy.json +0 -71
  118. package/dist/cjs/abi/Maintainer.json +0 -774
  119. package/dist/cjs/abi/MockToken.json +0 -347
  120. package/dist/cjs/abi/UUPSUpgradeable.json +0 -104
  121. package/dist/cjs/abi/WeETH.json +0 -310
  122. package/dist/cjs/abi-zkevm/LimitOrderBook.json +0 -910
  123. package/dist/cjs/abi-zkevm/LimitOrderBookFactory.json +0 -236
  124. package/dist/cjs/contracts/BeaconProxy.d.ts +0 -63
  125. package/dist/cjs/contracts/BeaconProxy.js +0 -3
  126. package/dist/cjs/contracts/BeaconProxy.js.map +0 -1
  127. package/dist/cjs/contracts/Maintainer.d.ts +0 -799
  128. package/dist/cjs/contracts/Maintainer.js +0 -3
  129. package/dist/cjs/contracts/Maintainer.js.map +0 -1
  130. package/dist/cjs/contracts/MockToken.d.ts +0 -263
  131. package/dist/cjs/contracts/MockToken.js +0 -3
  132. package/dist/cjs/contracts/MockToken.js.map +0 -1
  133. package/dist/cjs/contracts/UUPSUpgradeable.d.ts +0 -118
  134. package/dist/cjs/contracts/UUPSUpgradeable.js +0 -3
  135. package/dist/cjs/contracts/UUPSUpgradeable.js.map +0 -1
  136. package/dist/cjs/contracts/WeETH.d.ts +0 -503
  137. package/dist/cjs/contracts/WeETH.js +0 -3
  138. package/dist/cjs/contracts/WeETH.js.map +0 -1
  139. package/dist/cjs/contracts/factories/BeaconProxy__factory.d.ts +0 -61
  140. package/dist/cjs/contracts/factories/BeaconProxy__factory.js +0 -89
  141. package/dist/cjs/contracts/factories/BeaconProxy__factory.js.map +0 -1
  142. package/dist/cjs/contracts/factories/Maintainer__factory.d.ts +0 -609
  143. package/dist/cjs/contracts/factories/Maintainer__factory.js +0 -792
  144. package/dist/cjs/contracts/factories/Maintainer__factory.js.map +0 -1
  145. package/dist/cjs/contracts/factories/MockToken__factory.js +0 -365
  146. package/dist/cjs/contracts/factories/MockToken__factory.js.map +0 -1
  147. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.d.ts +0 -87
  148. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js +0 -122
  149. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js.map +0 -1
  150. package/dist/cjs/contracts/factories/WeETH__factory.d.ts +0 -545
  151. package/dist/cjs/contracts/factories/WeETH__factory.js +0 -721
  152. package/dist/cjs/contracts/factories/WeETH__factory.js.map +0 -1
  153. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.d.ts +0 -4136
  154. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js +0 -5324
  155. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js.map +0 -1
  156. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +0 -189
  157. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js +0 -254
  158. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +0 -1
  159. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.d.ts +0 -715
  160. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js +0 -928
  161. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js.map +0 -1
  162. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.d.ts +0 -344
  163. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js +0 -456
  164. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js.map +0 -1
  165. package/dist/cjs/contracts/factories/lean0/index.d.ts +0 -4
  166. package/dist/cjs/contracts/factories/lean0/index.js +0 -15
  167. package/dist/cjs/contracts/factories/lean0/index.js.map +0 -1
  168. package/dist/cjs/contracts/lean0/IPerpetualManager.d.ts +0 -2821
  169. package/dist/cjs/contracts/lean0/IPerpetualManager.js +0 -3
  170. package/dist/cjs/contracts/lean0/IPerpetualManager.js.map +0 -1
  171. package/dist/cjs/contracts/lean0/LimitOrderBook.d.ts +0 -533
  172. package/dist/cjs/contracts/lean0/LimitOrderBook.js +0 -3
  173. package/dist/cjs/contracts/lean0/LimitOrderBook.js.map +0 -1
  174. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.d.ts +0 -210
  175. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js +0 -3
  176. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js.map +0 -1
  177. package/dist/cjs/contracts/lean0/ShareToken.d.ts +0 -320
  178. package/dist/cjs/contracts/lean0/ShareToken.js +0 -3
  179. package/dist/cjs/contracts/lean0/ShareToken.js.map +0 -1
  180. package/dist/cjs/contracts/lean0/index.d.ts +0 -4
  181. package/dist/cjs/contracts/lean0/index.js +0 -3
  182. package/dist/cjs/contracts/lean0/index.js.map +0 -1
  183. package/dist/esm/abi/BeaconProxy.json +0 -71
  184. package/dist/esm/abi/Maintainer.json +0 -774
  185. package/dist/esm/abi/MockToken.json +0 -347
  186. package/dist/esm/abi/UUPSUpgradeable.json +0 -104
  187. package/dist/esm/abi/WeETH.json +0 -310
  188. package/dist/esm/abi/lean0/IPerpetualManager.json +0 -5306
  189. package/dist/esm/abi/lean0/LimitOrderBook.json +0 -910
  190. package/dist/esm/abi/lean0/LimitOrderBookFactory.json +0 -236
  191. package/dist/esm/abi/lean0/ShareToken.json +0 -438
  192. package/dist/esm/abi-zkevm/LimitOrderBook.json +0 -910
  193. package/dist/esm/abi-zkevm/LimitOrderBookFactory.json +0 -236
  194. package/dist/esm/contracts/BeaconProxy.d.ts +0 -63
  195. package/dist/esm/contracts/BeaconProxy.js +0 -2
  196. package/dist/esm/contracts/BeaconProxy.js.map +0 -1
  197. package/dist/esm/contracts/Maintainer.d.ts +0 -799
  198. package/dist/esm/contracts/Maintainer.js +0 -2
  199. package/dist/esm/contracts/Maintainer.js.map +0 -1
  200. package/dist/esm/contracts/MockToken.d.ts +0 -263
  201. package/dist/esm/contracts/MockToken.js +0 -2
  202. package/dist/esm/contracts/MockToken.js.map +0 -1
  203. package/dist/esm/contracts/UUPSUpgradeable.d.ts +0 -118
  204. package/dist/esm/contracts/UUPSUpgradeable.js +0 -2
  205. package/dist/esm/contracts/UUPSUpgradeable.js.map +0 -1
  206. package/dist/esm/contracts/WeETH.d.ts +0 -503
  207. package/dist/esm/contracts/WeETH.js +0 -2
  208. package/dist/esm/contracts/WeETH.js.map +0 -1
  209. package/dist/esm/contracts/factories/BeaconProxy__factory.d.ts +0 -61
  210. package/dist/esm/contracts/factories/BeaconProxy__factory.js +0 -85
  211. package/dist/esm/contracts/factories/BeaconProxy__factory.js.map +0 -1
  212. package/dist/esm/contracts/factories/Maintainer__factory.d.ts +0 -609
  213. package/dist/esm/contracts/factories/Maintainer__factory.js +0 -788
  214. package/dist/esm/contracts/factories/Maintainer__factory.js.map +0 -1
  215. package/dist/esm/contracts/factories/MockToken__factory.d.ts +0 -273
  216. package/dist/esm/contracts/factories/MockToken__factory.js.map +0 -1
  217. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.d.ts +0 -87
  218. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js +0 -118
  219. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js.map +0 -1
  220. package/dist/esm/contracts/factories/WeETH__factory.d.ts +0 -545
  221. package/dist/esm/contracts/factories/WeETH__factory.js +0 -717
  222. package/dist/esm/contracts/factories/WeETH__factory.js.map +0 -1
  223. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.d.ts +0 -4136
  224. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js +0 -5320
  225. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js.map +0 -1
  226. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +0 -189
  227. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js +0 -250
  228. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +0 -1
  229. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.d.ts +0 -715
  230. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js +0 -924
  231. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js.map +0 -1
  232. package/dist/esm/contracts/factories/lean0/ShareToken__factory.d.ts +0 -344
  233. package/dist/esm/contracts/factories/lean0/ShareToken__factory.js +0 -452
  234. package/dist/esm/contracts/factories/lean0/ShareToken__factory.js.map +0 -1
  235. package/dist/esm/contracts/factories/lean0/index.d.ts +0 -4
  236. package/dist/esm/contracts/factories/lean0/index.js +0 -8
  237. package/dist/esm/contracts/factories/lean0/index.js.map +0 -1
  238. package/dist/esm/contracts/lean0/IPerpetualManager.d.ts +0 -2821
  239. package/dist/esm/contracts/lean0/IPerpetualManager.js +0 -2
  240. package/dist/esm/contracts/lean0/IPerpetualManager.js.map +0 -1
  241. package/dist/esm/contracts/lean0/LimitOrderBook.d.ts +0 -533
  242. package/dist/esm/contracts/lean0/LimitOrderBook.js +0 -2
  243. package/dist/esm/contracts/lean0/LimitOrderBook.js.map +0 -1
  244. package/dist/esm/contracts/lean0/LimitOrderBookFactory.d.ts +0 -210
  245. package/dist/esm/contracts/lean0/LimitOrderBookFactory.js +0 -2
  246. package/dist/esm/contracts/lean0/LimitOrderBookFactory.js.map +0 -1
  247. package/dist/esm/contracts/lean0/ShareToken.d.ts +0 -320
  248. package/dist/esm/contracts/lean0/ShareToken.js +0 -2
  249. package/dist/esm/contracts/lean0/ShareToken.js.map +0 -1
  250. package/dist/esm/contracts/lean0/index.d.ts +0 -4
  251. package/dist/esm/contracts/lean0/index.js +0 -2
  252. 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.