@permissionless-technologies/upd-sdk 0.1.0 → 0.2.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 (47) hide show
  1. package/dist/chunk-3V62JGJY.js +192 -0
  2. package/dist/chunk-3V62JGJY.js.map +1 -0
  3. package/dist/{chunk-ZSWETUGH.cjs → chunk-7BP37BGO.cjs} +359 -31
  4. package/dist/chunk-7BP37BGO.cjs.map +1 -0
  5. package/dist/{chunk-R64I3LAO.js → chunk-AGPBQ56J.js} +81 -155
  6. package/dist/chunk-AGPBQ56J.js.map +1 -0
  7. package/dist/chunk-KSGUFTW3.cjs +206 -0
  8. package/dist/chunk-KSGUFTW3.cjs.map +1 -0
  9. package/dist/{chunk-WRPVPA7E.cjs → chunk-LECDXCSW.cjs} +105 -184
  10. package/dist/chunk-LECDXCSW.cjs.map +1 -0
  11. package/dist/{chunk-4RBWWS2X.js → chunk-PS6EIE5E.js} +359 -32
  12. package/dist/chunk-PS6EIE5E.js.map +1 -0
  13. package/dist/{chunk-RIRT4JX6.js → chunk-TYRBIJVF.js} +3 -228
  14. package/dist/chunk-TYRBIJVF.js.map +1 -0
  15. package/dist/{chunk-ZDAHLZWC.cjs → chunk-VZZN3BR3.cjs} +2 -228
  16. package/dist/chunk-VZZN3BR3.cjs.map +1 -0
  17. package/dist/contracts/index.cjs +13 -13
  18. package/dist/contracts/index.d.cts +104 -24
  19. package/dist/contracts/index.d.ts +104 -24
  20. package/dist/contracts/index.js +2 -2
  21. package/dist/core/index.cjs +17 -17
  22. package/dist/core/index.d.cts +1 -1
  23. package/dist/core/index.d.ts +1 -1
  24. package/dist/core/index.js +3 -3
  25. package/dist/{index-XNClksom.d.ts → index-BMgIlGvW.d.ts} +11 -3
  26. package/dist/{index-yRBqVOHV.d.cts → index-D6VgT_bZ.d.cts} +11 -3
  27. package/dist/index.cjs +50 -50
  28. package/dist/index.d.cts +1 -1
  29. package/dist/index.d.ts +1 -1
  30. package/dist/index.js +4 -4
  31. package/dist/react/index.cjs +145 -22
  32. package/dist/react/index.cjs.map +1 -1
  33. package/dist/react/index.d.cts +112 -1
  34. package/dist/react/index.d.ts +112 -1
  35. package/dist/react/index.js +126 -5
  36. package/dist/react/index.js.map +1 -1
  37. package/package.json +3 -1
  38. package/dist/chunk-4RBWWS2X.js.map +0 -1
  39. package/dist/chunk-4VXNJTNQ.cjs +0 -58
  40. package/dist/chunk-4VXNJTNQ.cjs.map +0 -1
  41. package/dist/chunk-63FIKV36.js +0 -49
  42. package/dist/chunk-63FIKV36.js.map +0 -1
  43. package/dist/chunk-R64I3LAO.js.map +0 -1
  44. package/dist/chunk-RIRT4JX6.js.map +0 -1
  45. package/dist/chunk-WRPVPA7E.cjs.map +0 -1
  46. package/dist/chunk-ZDAHLZWC.cjs.map +0 -1
  47. package/dist/chunk-ZSWETUGH.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/client.ts","../src/core/eip3009.ts","../src/core/verify.ts"],"names":["getDeploymentOrThrow","createOracleClient","UPD_TOKEN_ABI","OVERCOLLATERALIZATION_REPORTER_ABI","STABILIZER_NFT_ABI","POSITION_ESCROW_ABI","STABILIZER_ESCROW_ABI","collateralizationRatio","SUPD_ABI","computeSystemHealth","bytesToHex","hexToBytes","INSURANCE_ESCROW_ABI"],"mappings":";;;;;;;;AA2CO,IAAM,YAAN,MAAgB;AAAA,EACZ,MAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EAET,YAAY,MAAA,EAAyB;AACnC,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,UAAA,GAAaA,sCAAA,CAAqB,MAAA,CAAO,OAAO,CAAA;AACrD,IAAA,IAAA,CAAK,SAASC,oCAAA,CAAmB,EAAE,SAAA,EAAW,MAAA,CAAO,WAAW,CAAA;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,cAAc,OAAA,EAAmC;AACrD,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,YAAA,CAAa;AAAA,MAC3C,OAAA,EAAS,IAAA,CAAK,UAAA,CAAW,SAAA,CAAU,QAAA;AAAA,MACnC,GAAA,EAAKC,+BAAA;AAAA,MACL,YAAA,EAAc,WAAA;AAAA,MACd,IAAA,EAAM,CAAC,OAAO;AAAA,KACf,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,cAAA,GAAkC;AACtC,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,YAAA,CAAa;AAAA,MAC3C,OAAA,EAAS,IAAA,CAAK,UAAA,CAAW,SAAA,CAAU,QAAA;AAAA,MACnC,GAAA,EAAKA,+BAAA;AAAA,MACL,YAAA,EAAc;AAAA,KACf,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,iBAAA,GAA6C;AACjD,IAAA,MAAM,CAAC,oBAAA,EAAsB,cAAc,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,MAC/D,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,YAAA,CAAa;AAAA,QACpC,OAAA,EAAS,IAAA,CAAK,UAAA,CAAW,SAAA,CAAU,6BAAA;AAAA,QACnC,GAAA,EAAKC,oDAAA;AAAA,QACL,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,MACD,KAAK,cAAA;AAAe,KACrB,CAAA;AAED,IAAA,OAAO,EAAE,sBAAsB,cAAA,EAAe;AAAA,EAChD;AAAA;AAAA,EAGA,MAAM,sBAAsB,OAAA,EAA8C;AACxE,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,SAAA,CAAU,aAAA;AAE1C,IAAA,MAAM,CAAC,aAAA,EAAe,cAAA,EAAgB,QAAQ,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,MAClE,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,YAAA,CAAa;AAAA,QACpC,OAAA,EAAS,OAAA;AAAA,QACT,GAAA,EAAKC,oCAAA;AAAA,QACL,YAAA,EAAc,iBAAA;AAAA,QACd,IAAA,EAAM,CAAC,OAAO;AAAA,OACf,CAAA;AAAA,MACD,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,YAAA,CAAa;AAAA,QACpC,OAAA,EAAS,OAAA;AAAA,QACT,GAAA,EAAKA,oCAAA;AAAA,QACL,YAAA,EAAc,mBAAA;AAAA,QACd,IAAA,EAAM,CAAC,OAAO;AAAA,OACf,CAAA;AAAA,MACD,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,YAAA,CAAa;AAAA,QACpC,OAAA,EAAS,OAAA;AAAA,QACT,GAAA,EAAKA,oCAAA;AAAA,QACL,YAAA,EAAc,qBAAA;AAAA,QACd,IAAA,EAAM,CAAC,OAAO;AAAA,OACf;AAAA,KACF,CAAA;AAED,IAAA,MAAM,CAAC,eAAA,EAAiB,YAAA,EAAc,gBAAgB,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,MAC1E,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,YAAA,CAAa;AAAA,QACpC,OAAA,EAAS,aAAA;AAAA,QACT,GAAA,EAAKC,qCAAA;AAAA,QACL,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,MACD,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,YAAA,CAAa;AAAA,QACpC,OAAA,EAAS,aAAA;AAAA,QACT,GAAA,EAAKA,qCAAA;AAAA,QACL,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,MACD,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,YAAA,CAAa;AAAA,QACpC,OAAA,EAAS,cAAA;AAAA,QACT,GAAA,EAAKC,uCAAA;AAAA,QACL,YAAA,EAAc;AAAA,OACf;AAAA,KACF,CAAA;AAGD,IAAA,IAAIC,uBAAAA,GAAyB,EAAA;AAC7B,IAAA,IAAI,eAAA,GAAkB,EAAA,IAAM,YAAA,GAAe,EAAA,EAAI;AAG7C,MAAAA,uBAAAA,GAAyB,EAAA;AAAA,IAC3B;AAEA,IAAA,OAAO;AAAA,MACL,OAAA;AAAA,MACA,qBAAA,EAAuB,aAAA;AAAA,MACvB,uBAAA,EAAyB,cAAA;AAAA,MACzB,sBAAA,EAAAA,uBAAAA;AAAA,MACA,eAAA;AAAA,MACA,YAAA;AAAA,MACA,gBAAA;AAAA,MACA,kBAAA,EAAoB;AAAA,KACtB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,MAAM,KAAK,MAAA,EAAmC;AAC5C,IAAA,MAAM,YAAA,GAAe,KAAK,cAAA,EAAe;AACzC,IAAA,MAAM,EAAE,EAAA,EAAI,SAAA,EAAW,gBAAA,EAAiB,GAAI,MAAA;AAE5C,IAAA,OAAO,aAAa,aAAA,CAAc;AAAA,MAChC,OAAA,EAAS,IAAA,CAAK,UAAA,CAAW,SAAA,CAAU,aAAA;AAAA,MACnC,GAAA,EAAKH,oCAAA;AAAA,MACL,YAAA,EAAc,SAAA;AAAA,MACd,MAAM,CAAC,EAAA,EAAI,IAAA,CAAK,sBAAA,CAAuB,gBAAgB,CAAC,CAAA;AAAA,MACxD,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,aAAa,KAAA,IAAS,IAAA;AAAA,MAC7B,SAAS,YAAA,CAAa;AAAA,KACvB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,MAAM,KAAK,MAAA,EAAmC;AAC5C,IAAA,MAAM,YAAA,GAAe,KAAK,cAAA,EAAe;AACzC,IAAA,MAAM,EAAE,SAAA,EAAW,gBAAA,EAAiB,GAAI,MAAA;AAExC,IAAA,OAAO,aAAa,aAAA,CAAc;AAAA,MAChC,OAAA,EAAS,IAAA,CAAK,UAAA,CAAW,SAAA,CAAU,aAAA;AAAA,MACnC,GAAA,EAAKA,oCAAA;AAAA,MACL,YAAA,EAAc,SAAA;AAAA,MACd,MAAM,CAAC,SAAA,EAAW,IAAA,CAAK,sBAAA,CAAuB,gBAAgB,CAAC,CAAA;AAAA,MAC/D,KAAA,EAAO,aAAa,KAAA,IAAS,IAAA;AAAA,MAC7B,SAAS,YAAA,CAAa;AAAA,KACvB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,WAAA,GAAiC;AACrC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,UAAA,CAAW,SAAA,CAAU,IAAA;AAC3C,IAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAEhE,IAAA,MAAM,CAAC,YAAY,cAAA,EAAgB,WAAA,EAAa,iBAAiB,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,MACrF,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,YAAA,CAAa;AAAA,QACpC,OAAA,EAAS,QAAA;AAAA,QACT,GAAA,EAAKI,0BAAA;AAAA,QACL,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,MACD,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,YAAA,CAAa;AAAA,QACpC,OAAA,EAAS,QAAA;AAAA,QACT,GAAA,EAAKA,0BAAA;AAAA,QACL,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,MACD,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,YAAA,CAAa;AAAA,QACpC,OAAA,EAAS,QAAA;AAAA,QACT,GAAA,EAAKA,0BAAA;AAAA,QACL,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,MACD,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,YAAA,CAAa;AAAA,QACpC,OAAA,EAAS,QAAA;AAAA,QACT,GAAA,EAAKA,0BAAA;AAAA,QACL,YAAA,EAAc;AAAA,OACf;AAAA,KACF,CAAA;AAED,IAAA,OAAO,EAAE,UAAA,EAAY,cAAA,EAAgB,WAAA,EAAa,iBAAA,EAAkB;AAAA,EACtE;AAAA;AAAA,EAGA,MAAM,SAAS,MAAA,EAAoC;AACjD,IAAA,MAAM,YAAA,GAAe,KAAK,cAAA,EAAe;AACzC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,UAAA,CAAW,SAAA,CAAU,IAAA;AAC3C,IAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAEhE,IAAA,OAAO,aAAa,aAAA,CAAc;AAAA,MAChC,OAAA,EAAS,QAAA;AAAA,MACT,GAAA,EAAKA,0BAAA;AAAA,MACL,YAAA,EAAc,UAAA;AAAA,MACd,IAAA,EAAM,CAAC,MAAA,CAAO,SAAA,EAAW,KAAK,sBAAA,CAAuB,MAAA,CAAO,gBAAgB,CAAC,CAAA;AAAA,MAC7E,KAAA,EAAO,aAAa,KAAA,IAAS,IAAA;AAAA,MAC7B,SAAS,YAAA,CAAa;AAAA,KACvB,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAW,MAAA,EAAsC;AACrD,IAAA,MAAM,YAAA,GAAe,KAAK,cAAA,EAAe;AACzC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,UAAA,CAAW,SAAA,CAAU,IAAA;AAC3C,IAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAEhE,IAAA,OAAO,aAAa,aAAA,CAAc;AAAA,MAChC,OAAA,EAAS,QAAA;AAAA,MACT,GAAA,EAAKA,0BAAA;AAAA,MACL,YAAA,EAAc,cAAA;AAAA,MACd,IAAA,EAAM,CAAC,MAAA,CAAO,MAAA,EAAQ,KAAK,sBAAA,CAAuB,MAAA,CAAO,gBAAgB,CAAC,CAAA;AAAA,MAC1E,KAAA,EAAO,aAAa,KAAA,IAAS,IAAA;AAAA,MAC7B,SAAS,YAAA,CAAa;AAAA,KACvB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,MAAM,eAAe,MAAA,EAA2D;AAC9E,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,MAAA,CAAO,oBAAA,EAAqB;AAC3D,IAAA,OAAO,KAAK,IAAA,CAAK,EAAE,GAAG,MAAA,EAAQ,gBAAA,EAAkB,aAAa,CAAA;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,eAAe,MAAA,EAA8C;AACjE,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,MAAA,CAAO,oBAAA,EAAqB;AAC3D,IAAA,OAAO,KAAK,IAAA,CAAK,EAAE,GAAG,MAAA,EAAQ,gBAAA,EAAkB,aAAa,CAAA;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,eAAA,GAAyC;AAC7C,IAAA,MAAM,CAAC,YAAY,EAAE,KAAA,EAAO,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,MAChD,KAAK,iBAAA,EAAkB;AAAA,MACvB,IAAA,CAAK,OAAO,cAAA;AAAe,KAC5B,CAAA;AACD,IAAA,OAAOC,qCAAA,CAAoB,YAAY,KAAK,CAAA;AAAA,EAC9C;AAAA;AAAA,EAGA,MAAM,mBAAmB,MAAA,EAA8C;AACrE,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,MAAA,CAAO,oBAAA,EAAqB;AAC3D,IAAA,OAAO,KAAK,QAAA,CAAS,EAAE,GAAG,MAAA,EAAQ,gBAAA,EAAkB,aAAa,CAAA;AAAA,EACnE;AAAA;AAAA,EAGA,MAAM,qBAAqB,MAAA,EAA2C;AACpE,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,MAAA,CAAO,oBAAA,EAAqB;AAC3D,IAAA,OAAO,KAAK,UAAA,CAAW,EAAE,GAAG,MAAA,EAAQ,gBAAA,EAAkB,aAAa,CAAA;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,YAAA,GAA8B;AAClC,IAAA,MAAM,YAAA,GAAe,KAAK,cAAA,EAAe;AACzC,IAAA,OAAO,aAAa,aAAA,CAAc;AAAA,MAChC,OAAA,EAAS,IAAA,CAAK,UAAA,CAAW,SAAA,CAAU,6BAAA;AAAA,MACnC,GAAA,EAAKN,oDAAA;AAAA,MACL,YAAA,EAAc,eAAA;AAAA,MACd,KAAA,EAAO,aAAa,KAAA,IAAS,IAAA;AAAA,MAC7B,SAAS,YAAA,CAAa;AAAA,KACvB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAMQ,cAAA,GAAiB;AACvB,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,YAAA,EAAc;AAC7B,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OAEF;AAAA,IACF;AACA,IAAA,OAAO,KAAK,MAAA,CAAO,YAAA;AAAA,EACrB;AAAA,EAEQ,uBAAuB,CAAA,EAA0B;AACvD,IAAA,OAAO;AAAA,MACL,OAAO,CAAA,CAAE,KAAA;AAAA,MACT,UAAU,CAAA,CAAE,QAAA;AAAA,MACZ,eAAe,CAAA,CAAE,aAAA;AAAA,MACjB,WAAW,CAAA,CAAE,SAAA;AAAA,MACb,WAAW,CAAA,CAAE;AAAA,KACf;AAAA,EACF;AACF;AAiBO,SAAS,gBAAgB,MAAA,EAAoC;AAClE,EAAA,OAAO,IAAI,UAAU,MAAM,CAAA;AAC7B;AC5UA,IAAM,sBAAA,GAAyB,GAAA;AAE/B,SAAS,WAAA,GAAmB;AAC1B,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,EAAE,CAAA;AAC/B,EAAA,MAAA,CAAO,gBAAgB,KAAK,CAAA;AAC5B,EAAA,OAAOO,gBAAW,KAAK,CAAA;AACzB;AAEA,SAAS,aAAA,CAAc,YAAA,EAAuB,OAAA,EAAiB,SAAA,EAAmB;AAChF,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,OAAA,EAAS,sBAAA;AAAA,IACT,OAAA;AAAA,IACA,iBAAA,EAAmB;AAAA,GACrB;AACF;AAQA,eAAsB,yBAAA,CACpB,MAAA,EACA,SAAA,GAAY,0BAAA,EACoB;AAChC,EAAA,MAAM;AAAA,IACJ,YAAA;AAAA,IACA,YAAA;AAAA,IACA,IAAA;AAAA,IACA,EAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA,GAAa,EAAA;AAAA,IACb,WAAA,GAAc,OAAO,IAAA,CAAK,KAAA,CAAM,KAAK,GAAA,EAAI,GAAI,GAAI,CAAA,GAAI,IAAI,CAAA;AAAA,IACzD,QAAQ,WAAA;AAAY,GACtB,GAAI,MAAA;AAEJ,EAAA,MAAM,OAAA,GAAU,aAAa,KAAA,EAAO,EAAA;AACpC,EAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAEzE,EAAA,MAAM,SAAA,GAAY,MAAM,YAAA,CAAa,aAAA,CAAc;AAAA,IACjD,OAAA,EAAS,IAAA;AAAA,IACT,MAAA,EAAQ,aAAA,CAAc,YAAA,EAAc,OAAA,EAAS,SAAS,CAAA;AAAA,IACtD,KAAA,EAAO;AAAA,MACL,yBAAA,EAA2B;AAAA,QACzB,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAU;AAAA,QAChC,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,SAAA,EAAU;AAAA,QAC9B,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,SAAA,EAAU;AAAA,QACjC,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,SAAA,EAAU;AAAA,QACtC,EAAE,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,SAAA,EAAU;AAAA,QACvC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,SAAA;AAAU;AACnC,KACF;AAAA,IACA,WAAA,EAAa,2BAAA;AAAA,IACb,SAAS,EAAE,IAAA,EAAM,IAAI,KAAA,EAAO,UAAA,EAAY,aAAa,KAAA;AAAM,GAC5D,CAAA;AAED,EAAA,MAAM,QAAA,GAAWC,gBAAW,SAAS,CAAA;AACrC,EAAA,MAAM,IAAID,eAAA,CAAW,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AAC1C,EAAA,MAAM,IAAIA,eAAA,CAAW,QAAA,CAAS,KAAA,CAAM,EAAA,EAAI,EAAE,CAAC,CAAA;AAC3C,EAAA,MAAM,CAAA,GAAI,SAAS,EAAE,CAAA;AAErB,EAAA,OAAO,EAAE,MAAM,EAAA,EAAI,KAAA,EAAO,YAAY,WAAA,EAAa,KAAA,EAAO,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE;AACpE;AAQA,eAAsB,wBAAA,CACpB,MAAA,EACA,SAAA,GAAY,0BAAA,EACoB;AAChC,EAAA,MAAM;AAAA,IACJ,YAAA;AAAA,IACA,YAAA;AAAA,IACA,IAAA;AAAA,IACA,EAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA,GAAa,EAAA;AAAA,IACb,WAAA,GAAc,OAAO,IAAA,CAAK,KAAA,CAAM,KAAK,GAAA,EAAI,GAAI,GAAI,CAAA,GAAI,IAAI,CAAA;AAAA,IACzD,QAAQ,WAAA;AAAY,GACtB,GAAI,MAAA;AAEJ,EAAA,MAAM,OAAA,GAAU,aAAa,KAAA,EAAO,EAAA;AACpC,EAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAEzE,EAAA,MAAM,SAAA,GAAY,MAAM,YAAA,CAAa,aAAA,CAAc;AAAA,IACjD,OAAA,EAAS,IAAA;AAAA,IACT,MAAA,EAAQ,aAAA,CAAc,YAAA,EAAc,OAAA,EAAS,SAAS,CAAA;AAAA,IACtD,KAAA,EAAO;AAAA,MACL,wBAAA,EAA0B;AAAA,QACxB,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAU;AAAA,QAChC,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,SAAA,EAAU;AAAA,QAC9B,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,SAAA,EAAU;AAAA,QACjC,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,SAAA,EAAU;AAAA,QACtC,EAAE,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,SAAA,EAAU;AAAA,QACvC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,SAAA;AAAU;AACnC,KACF;AAAA,IACA,WAAA,EAAa,0BAAA;AAAA,IACb,SAAS,EAAE,IAAA,EAAM,IAAI,KAAA,EAAO,UAAA,EAAY,aAAa,KAAA;AAAM,GAC5D,CAAA;AAED,EAAA,MAAM,QAAA,GAAWC,gBAAW,SAAS,CAAA;AACrC,EAAA,MAAM,IAAID,eAAA,CAAW,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AAC1C,EAAA,MAAM,IAAIA,eAAA,CAAW,QAAA,CAAS,KAAA,CAAM,EAAA,EAAI,EAAE,CAAC,CAAA;AAC3C,EAAA,MAAM,CAAA,GAAI,SAAS,EAAE,CAAA;AAErB,EAAA,OAAO,EAAE,MAAM,EAAA,EAAI,KAAA,EAAO,YAAY,WAAA,EAAa,KAAA,EAAO,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE;AACpE;AAOA,eAAsB,uBAAA,CACpB,MAAA,EACA,SAAA,GAAY,0BAAA,EACkB;AAC9B,EAAA,MAAM,EAAE,YAAA,EAAc,YAAA,EAAc,UAAA,EAAY,OAAM,GAAI,MAAA;AAE1D,EAAA,MAAM,OAAA,GAAU,aAAa,KAAA,EAAO,EAAA;AACpC,EAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAEzE,EAAA,MAAM,SAAA,GAAY,MAAM,YAAA,CAAa,aAAA,CAAc;AAAA,IACjD,OAAA,EAAS,UAAA;AAAA,IACT,MAAA,EAAQ,aAAA,CAAc,YAAA,EAAc,OAAA,EAAS,SAAS,CAAA;AAAA,IACtD,KAAA,EAAO;AAAA,MACL,mBAAA,EAAqB;AAAA,QACnB,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,SAAA,EAAU;AAAA,QACtC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,SAAA;AAAU;AACnC,KACF;AAAA,IACA,WAAA,EAAa,qBAAA;AAAA,IACb,OAAA,EAAS,EAAE,UAAA,EAAY,KAAA;AAAM,GAC9B,CAAA;AAED,EAAA,MAAM,QAAA,GAAWC,gBAAW,SAAS,CAAA;AACrC,EAAA,MAAM,IAAID,eAAA,CAAW,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AAC1C,EAAA,MAAM,IAAIA,eAAA,CAAW,QAAA,CAAS,KAAA,CAAM,EAAA,EAAI,EAAE,CAAC,CAAA;AAC3C,EAAA,MAAM,CAAA,GAAI,SAAS,EAAE,CAAA;AAErB,EAAA,OAAO,EAAE,UAAA,EAAY,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA,EAAE;AACtC;;;ACvMA,IAAM,iBAAA,GACJ,oEAAA;AA4BF,eAAsB,gBAAA,CACpB,cACA,UAAA,EAC6B;AAC7B,EAAA,MAAM,SAA8B,EAAC;AAGrC,EAAA,MAAM,gBAAgB,YAAA,EAAc,MAAA,EAAQ,UAAA,EAAY,UAAA,CAAW,UAAU,QAAQ,CAAA;AACrF,EAAA,MAAM,gBAAgB,YAAA,EAAc,MAAA,EAAQ,aAAA,EAAe,UAAA,CAAW,UAAU,WAAW,CAAA;AAC3F,EAAA,MAAM,gBAAgB,YAAA,EAAc,MAAA,EAAQ,eAAA,EAAiB,UAAA,CAAW,UAAU,aAAa,CAAA;AAC/F,EAAA,MAAM,gBAAgB,YAAA,EAAc,MAAA,EAAQ,UAAA,EAAY,UAAA,CAAW,UAAU,6BAA6B,CAAA;AAC1G,EAAA,MAAM,gBAAgB,YAAA,EAAc,MAAA,EAAQ,iBAAA,EAAmB,UAAA,CAAW,UAAU,eAAe,CAAA;AACnG,EAAA,MAAM,gBAAgB,YAAA,EAAc,MAAA,EAAQ,eAAA,EAAiB,UAAA,CAAW,UAAU,aAAa,CAAA;AAC/F,EAAA,MAAM,gBAAgB,YAAA,EAAc,MAAA,EAAQ,mBAAA,EAAqB,UAAA,CAAW,UAAU,iBAAiB,CAAA;AACvG,EAAA,MAAM,gBAAgB,YAAA,EAAc,MAAA,EAAQ,2BAAA,EAA6B,UAAA,CAAW,UAAU,gBAAgB,CAAA;AAC9G,EAAA,MAAM,gBAAgB,YAAA,EAAc,MAAA,EAAQ,yBAAA,EAA2B,UAAA,CAAW,UAAU,cAAc,CAAA;AAG1G,EAAA,MAAM,gBAAA,CAAiB,cAAc,MAAA,EAAQ,aAAA,EAAe,WAAW,SAAA,CAAU,WAAA,EAAa,UAAA,CAAW,eAAA,CAAgB,WAAW,CAAA;AACpI,EAAA,MAAM,gBAAA,CAAiB,cAAc,MAAA,EAAQ,eAAA,EAAiB,WAAW,SAAA,CAAU,aAAA,EAAe,UAAA,CAAW,eAAA,CAAgB,aAAa,CAAA;AAC1I,EAAA,MAAM,gBAAA,CAAiB,cAAc,MAAA,EAAQ,UAAA,EAAY,WAAW,SAAA,CAAU,6BAAA,EAA+B,UAAA,CAAW,eAAA,CAAgB,6BAA6B,CAAA;AAGrK,EAAA,MAAM,2BAAA,CAA4B,YAAA,EAAc,MAAA,EAAQ,UAAU,CAAA;AAClE,EAAA,MAAM,sBAAA,CAAuB,YAAA,EAAc,MAAA,EAAQ,UAAU,CAAA;AAI7D,EAAA,MAAM,WAAA;AAAA,IAAY,YAAA;AAAA,IAAc,MAAA;AAAA,IAAQ,2CAAA;AAAA,IACtC,WAAW,SAAA,CAAU,QAAA;AAAA,IAAUR,+BAAA;AAAA,IAC/B,oEAAA;AAAA;AAAA,IACA,WAAW,SAAA,CAAU;AAAA,GAAa;AAGpC,EAAA,MAAM,WAAA;AAAA,IAAY,YAAA;AAAA,IAAc,MAAA;AAAA,IAAQ,wCAAA;AAAA,IACtC,WAAW,SAAA,CAAU,6BAAA;AAAA,IAA+BC,oDAAA;AAAA,IACpD,oEAAA;AAAA;AAAA,IACA,WAAW,SAAA,CAAU;AAAA,GAAa;AAGpC,EAAA,MAAM,gBAAA,CAAiB,YAAA,EAAc,MAAA,EAAQ,UAAU,CAAA;AAEvD,EAAA,MAAM,SAAS,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAM,CAAA,CAAE,MAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,OAAO,MAAA,CAAO,CAAC,MAAM,CAAC,CAAA,CAAE,MAAM,CAAA,CAAE,MAAA;AAE/C,EAAA,OAAO;AAAA,IACL,SAAS,UAAA,CAAW,OAAA;AAAA,IACpB,MAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAW,MAAA,KAAW;AAAA,GACxB;AACF;AAIA,eAAe,eAAA,CACb,MAAA,EACA,MAAA,EACA,IAAA,EACA,OAAA,EACe;AACf,EAAA,IAAI;AACF,IAAA,MAAM,OAAO,MAAM,MAAA,CAAO,OAAA,CAAQ,EAAE,SAAS,CAAA;AAC7C,IAAA,MAAM,SAAS,IAAA,KAAS,KAAA,CAAA,IAAa,IAAA,KAAS,IAAA,IAAQ,KAAK,MAAA,GAAS,CAAA;AACpE,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,EAAG,IAAI,CAAA,gBAAA,CAAA,EAAoB,MAAA,EAAQ,QAAQ,CAAA;AAAA,EACjE,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,EAAG,IAAI,CAAA,gBAAA,CAAA,EAAoB,MAAA,EAAQ,OAAO,CAAA;AAAA,EAChE;AACF;AAEA,eAAe,gBAAA,CACb,MAAA,EACA,MAAA,EACA,IAAA,EACA,cACA,YAAA,EACe;AACf,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,MACzC,OAAA,EAAS,YAAA;AAAA,MACT,IAAA,EAAM;AAAA,KACP,CAAA;AACD,IAAA,MAAM,cAAc,IAAA,GAAA,CAAQ,QAAA,IAAY,MAAM,KAAA,CAAM,EAAE,GAAG,WAAA,EAAY;AACrE,IAAA,MAAM,QAAA,GAAW,aAAa,WAAA,EAAY;AAC1C,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,GAAG,IAAI,CAAA,cAAA,CAAA;AAAA,MACb,QAAQ,UAAA,KAAe,QAAA;AAAA,MACvB,QAAA,EAAU,YAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,EAAG,IAAI,kBAAkB,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,YAAA,EAAc,CAAA;AAAA,EACtF;AACF;AAEA,eAAe,2BAAA,CACb,MAAA,EACA,MAAA,EACA,CAAA,EACe;AACf,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,EAAE,SAAA,CAAU,aAAA;AACxB,IAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,MACzC,OAAA,EAAS,GAAA;AAAA,MAAK,GAAA,EAAKC,oCAAA;AAAA,MAAoB,YAAA,EAAc;AAAA,KACtD,CAAA;AACD,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,wBAAA;AAAA,MACN,QAAQ,QAAA,CAAS,WAAA,OAAkB,CAAA,CAAE,SAAA,CAAU,SAAS,WAAA,EAAY;AAAA,MACpE,QAAA,EAAU,EAAE,SAAA,CAAU,QAAA;AAAA,MACtB,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,MACvC,OAAA,EAAS,GAAA;AAAA,MAAK,GAAA,EAAKA,oCAAA;AAAA,MAAoB,YAAA,EAAc;AAAA,KACtD,CAAA;AACD,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,sBAAA;AAAA,MACN,QAAQ,MAAA,CAAO,WAAA,OAAkB,CAAA,CAAE,SAAA,CAAU,YAAY,WAAA,EAAY;AAAA,MACrE,QAAA,EAAU,EAAE,SAAA,CAAU,WAAA;AAAA,MACtB,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,MACtC,OAAA,EAAS,GAAA;AAAA,MAAK,GAAA,EAAKA,oCAAA;AAAA,MAAoB,YAAA,EAAc;AAAA,KACtD,CAAA;AACD,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,qBAAA;AAAA,MACN,QAAQ,KAAA,CAAM,WAAA,OAAkB,CAAA,CAAE,QAAA,CAAS,MAAM,WAAA,EAAY;AAAA,MAC7D,QAAA,EAAU,EAAE,QAAA,CAAS,KAAA;AAAA,MACrB,MAAA,EAAQ;AAAA,KACT,CAAA;AAGD,IAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,MACzC,OAAA,EAAS,GAAA;AAAA,MAAK,GAAA,EAAKA,oCAAA;AAAA,MAAoB,YAAA,EAAc;AAAA,KACtD,CAAA;AACD,IAAA,MAAM,IAAA,GAAO,4CAAA;AACb,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,sCAAA;AAAA,MACN,MAAA,EAAQ,QAAA,CAAS,WAAA,EAAY,KAAM,IAAA;AAAA,MACnC,QAAA,EAAU,MAAM,IAAI,CAAA,CAAA;AAAA,MACpB,MAAA,EAAQ;AAAA,KACT,CAAA;AACD,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,0CAAA;AAAA,MACN,QAAQ,QAAA,CAAS,WAAA,OAAkB,CAAA,CAAE,SAAA,CAAU,8BAA8B,WAAA,EAAY;AAAA,MACzF,QAAA,EAAU,EAAE,SAAA,CAAU,6BAAA;AAAA,MACtB,MAAA,EAAQ;AAAA,KACT,CAAA;AAGD,IAAA,MAAM,eAAA,GAAkB,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,MAChD,OAAA,EAAS,GAAA;AAAA,MAAK,GAAA,EAAKA,oCAAA;AAAA,MAAoB,YAAA,EAAc;AAAA,KACtD,CAAA;AACD,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,+BAAA;AAAA,MACN,QAAQ,eAAA,CAAgB,WAAA,OAAkB,CAAA,CAAE,SAAA,CAAU,gBAAgB,WAAA,EAAY;AAAA,MAClF,QAAA,EAAU,EAAE,SAAA,CAAU,eAAA;AAAA,MACtB,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,uBAAA,EAAyB,MAAA,EAAQ,OAAO,CAAA;AAAA,EAC9D;AACF;AAEA,eAAe,sBAAA,CACb,MAAA,EACA,MAAA,EACA,CAAA,EACe;AACf,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,EAAE,SAAA,CAAU,6BAAA;AAC7B,IAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,MACxC,OAAA,EAAS,QAAA;AAAA,MAAU,GAAA,EAAKD,oDAAA;AAAA,MAAoC,YAAA,EAAc;AAAA,KAC3E,CAAA;AACD,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,wBAAA;AAAA,MACN,QAAQ,OAAA,CAAQ,WAAA,OAAkB,CAAA,CAAE,SAAA,CAAU,cAAc,WAAA,EAAY;AAAA,MACxE,QAAA,EAAU,EAAE,SAAA,CAAU,aAAA;AAAA,MACtB,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,MACzC,OAAA,EAAS,QAAA;AAAA,MAAU,GAAA,EAAKA,oDAAA;AAAA,MAAoC,YAAA,EAAc;AAAA,KAC3E,CAAA;AACD,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,mBAAA;AAAA,MACN,QAAQ,QAAA,CAAS,WAAA,OAAkB,CAAA,CAAE,SAAA,CAAU,SAAS,WAAA,EAAY;AAAA,MACpE,QAAA,EAAU,EAAE,SAAA,CAAU,QAAA;AAAA,MACtB,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,kBAAA,EAAoB,MAAA,EAAQ,OAAO,CAAA;AAAA,EACzD;AACF;AAEA,eAAe,YACb,MAAA,EACA,MAAA,EACA,MACA,eAAA,EACA,GAAA,EACA,UACA,OAAA,EACe;AACf,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,MACxC,OAAA,EAAS,eAAA;AAAA,MACT,GAAA;AAAA,MACA,YAAA,EAAc,SAAA;AAAA,MACd,IAAA,EAAM,CAAC,QAAA,EAAU,OAAO;AAAA,KACzB,CAAA;AACD,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAA;AAAA,EACvC,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAO,CAAA;AAAA,EACrC;AACF;AAEA,eAAe,gBAAA,CACb,MAAA,EACA,MAAA,EACA,CAAA,EACe;AACf,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,MACtC,OAAA,EAAS,EAAE,SAAA,CAAU,eAAA;AAAA,MACrB,GAAA,EAAKS,sCAAA;AAAA,MACL,YAAA,EAAc;AAAA,KACf,CAAA;AACD,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,wCAAA;AAAA,MACN,QAAQ,KAAA,CAAM,WAAA,OAAkB,CAAA,CAAE,SAAA,CAAU,cAAc,WAAA,EAAY;AAAA,MACtE,QAAA,EAAU,EAAE,SAAA,CAAU,aAAA;AAAA,MACtB,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,uBAAA,EAAyB,MAAA,EAAQ,OAAO,CAAA;AAAA,EAC9D;AACF","file":"chunk-LECDXCSW.cjs","sourcesContent":["/**\n * UPDClient — Main client for interacting with the UPD protocol.\n *\n * Read operations use publicClient only (no wallet needed).\n * Write operations require a walletClient.\n *\n * @example\n * ```ts\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createUPDClient } from '@permissionless-technologies/upd-sdk'\n *\n * const publicClient = createPublicClient({ chain: mainnet, transport: http() })\n * const client = createUPDClient({ publicClient, chainId: 1 })\n *\n * const balance = await client.getUPDBalance('0x...')\n * const supply = await client.getTotalSupply()\n * ```\n */\n\nimport type { Address, Hash } from 'viem'\nimport type {\n UPDClientConfig,\n StabilizerPosition,\n MintParams,\n BurnParams,\n CollateralInfo,\n PriceAttestationQuery,\n SUPDInfo,\n StakeParams,\n UnstakeParams,\n} from './types.js'\nimport { getDeploymentOrThrow, type UPDDeploymentConfig } from '../deployments/index.js'\nimport { createOracleClient } from '../oracle/client.js'\nimport type { OracleClient } from '../oracle/types.js'\nimport { computeSystemHealth, type SystemHealth } from './health.js'\nimport { UPD_TOKEN_ABI } from '../contracts/abi/UPDToken.js'\nimport { STABILIZER_NFT_ABI } from '../contracts/abi/StabilizerNFT.js'\nimport { OVERCOLLATERALIZATION_REPORTER_ABI } from '../contracts/abi/OvercollateralizationReporter.js'\nimport { POSITION_ESCROW_ABI } from '../contracts/abi/PositionEscrow.js'\nimport { STABILIZER_ESCROW_ABI } from '../contracts/abi/StabilizerEscrow.js'\nimport { SUPD_ABI } from '../contracts/abi/sUPD.js'\n\nexport class UPDClient {\n readonly config: UPDClientConfig\n readonly deployment: UPDDeploymentConfig\n readonly oracle: OracleClient\n\n constructor(config: UPDClientConfig) {\n this.config = config\n this.deployment = getDeploymentOrThrow(config.chainId)\n this.oracle = createOracleClient({ oracleUrl: config.oracleUrl })\n }\n\n // ============================================================\n // READ OPERATIONS\n // ============================================================\n\n /** Get UPD token balance for an address. */\n async getUPDBalance(address: Address): Promise<bigint> {\n return this.config.publicClient.readContract({\n address: this.deployment.contracts.UPDToken,\n abi: UPD_TOKEN_ABI,\n functionName: 'balanceOf',\n args: [address],\n }) as Promise<bigint>\n }\n\n /** Get total UPD supply. */\n async getTotalSupply(): Promise<bigint> {\n return this.config.publicClient.readContract({\n address: this.deployment.contracts.UPDToken,\n abi: UPD_TOKEN_ABI,\n functionName: 'totalSupply',\n }) as Promise<bigint>\n }\n\n /** Get system collateral info: total stETH collateral (yield-inclusive) and total UPD supply. */\n async getCollateralInfo(): Promise<CollateralInfo> {\n const [totalStEthCollateral, totalUPDSupply] = await Promise.all([\n this.config.publicClient.readContract({\n address: this.deployment.contracts.OvercollateralizationReporter,\n abi: OVERCOLLATERALIZATION_REPORTER_ABI,\n functionName: 'getTotalStEthCollateral',\n }) as Promise<bigint>,\n this.getTotalSupply(),\n ])\n\n return { totalStEthCollateral, totalUPDSupply }\n }\n\n /** Get details for a specific stabilizer position. */\n async getStabilizerPosition(tokenId: bigint): Promise<StabilizerPosition> {\n const stabNFT = this.deployment.contracts.StabilizerNFT\n\n const [posEscrowAddr, stabEscrowAddr, minRatio] = await Promise.all([\n this.config.publicClient.readContract({\n address: stabNFT,\n abi: STABILIZER_NFT_ABI,\n functionName: 'positionEscrows',\n args: [tokenId],\n }) as Promise<Address>,\n this.config.publicClient.readContract({\n address: stabNFT,\n abi: STABILIZER_NFT_ABI,\n functionName: 'stabilizerEscrows',\n args: [tokenId],\n }) as Promise<Address>,\n this.config.publicClient.readContract({\n address: stabNFT,\n abi: STABILIZER_NFT_ABI,\n functionName: 'minCollateralRatios',\n args: [tokenId],\n }) as Promise<bigint>,\n ])\n\n const [backedUPDAmount, stETHBalance, unallocatedStETH] = await Promise.all([\n this.config.publicClient.readContract({\n address: posEscrowAddr,\n abi: POSITION_ESCROW_ABI,\n functionName: 'backedUPDAmount',\n }) as Promise<bigint>,\n this.config.publicClient.readContract({\n address: posEscrowAddr,\n abi: POSITION_ESCROW_ABI,\n functionName: 'getCurrentStEthBalance',\n }) as Promise<bigint>,\n this.config.publicClient.readContract({\n address: stabEscrowAddr,\n abi: STABILIZER_ESCROW_ABI,\n functionName: 'unallocatedStETH',\n }) as Promise<bigint>,\n ])\n\n // Calculate collateralization ratio locally if there's a liability\n let collateralizationRatio = 0n\n if (backedUPDAmount > 0n && stETHBalance > 0n) {\n // Note: this is approximate — actual ratio requires a price feed\n // For exact ratio, use the on-chain getCollateralizationRatio with a price response\n collateralizationRatio = 0n // Requires price — caller should compute\n }\n\n return {\n tokenId,\n positionEscrowAddress: posEscrowAddr,\n stabilizerEscrowAddress: stabEscrowAddr,\n collateralizationRatio,\n backedUPDAmount,\n stETHBalance,\n unallocatedStETH,\n minCollateralRatio: minRatio,\n }\n }\n\n // ============================================================\n // WRITE OPERATIONS\n // ============================================================\n\n /**\n * Mint UPD by sending ETH. Requires walletClient.\n *\n * @example\n * ```ts\n * const attestation = createMockAttestation(2000n * 10n**18n)\n * const hash = await client.mint({\n * to: '0x...',\n * ethAmount: parseEther('1'),\n * priceAttestation: attestation,\n * })\n * ```\n */\n async mint(params: MintParams): Promise<Hash> {\n const walletClient = this._requireWallet()\n const { to, ethAmount, priceAttestation } = params\n\n return walletClient.writeContract({\n address: this.deployment.contracts.StabilizerNFT,\n abi: STABILIZER_NFT_ABI,\n functionName: 'mintUPD',\n args: [to, this._toSolidityAttestation(priceAttestation)],\n value: ethAmount,\n chain: walletClient.chain ?? null,\n account: walletClient.account!,\n })\n }\n\n /**\n * Burn UPD to receive stETH. Requires walletClient.\n *\n * @example\n * ```ts\n * const attestation = createMockAttestation(2000n * 10n**18n)\n * const hash = await client.burn({\n * updAmount: parseUnits('2000', 18),\n * priceAttestation: attestation,\n * })\n * ```\n */\n async burn(params: BurnParams): Promise<Hash> {\n const walletClient = this._requireWallet()\n const { updAmount, priceAttestation } = params\n\n return walletClient.writeContract({\n address: this.deployment.contracts.StabilizerNFT,\n abi: STABILIZER_NFT_ABI,\n functionName: 'burnUPD',\n args: [updAmount, this._toSolidityAttestation(priceAttestation)],\n chain: walletClient.chain ?? null,\n account: walletClient.account!,\n })\n }\n\n // ============================================================\n // sUPD OPERATIONS\n // ============================================================\n\n /** Get sUPD contract info: share value, APY, supply, liability. */\n async getSUPDInfo(): Promise<SUPDInfo> {\n const supdAddr = this.deployment.contracts.sUPD\n if (!supdAddr) throw new Error('sUPD not deployed on this chain')\n\n const [shareValue, annualYieldBps, totalSupply, totalLiabilityUSD] = await Promise.all([\n this.config.publicClient.readContract({\n address: supdAddr,\n abi: SUPD_ABI,\n functionName: 'currentShareValue',\n }) as Promise<bigint>,\n this.config.publicClient.readContract({\n address: supdAddr,\n abi: SUPD_ABI,\n functionName: 'annualYieldBps',\n }) as Promise<bigint>,\n this.config.publicClient.readContract({\n address: supdAddr,\n abi: SUPD_ABI,\n functionName: 'totalSupply',\n }) as Promise<bigint>,\n this.config.publicClient.readContract({\n address: supdAddr,\n abi: SUPD_ABI,\n functionName: 'totalLiabilityUSD',\n }) as Promise<bigint>,\n ])\n\n return { shareValue, annualYieldBps, totalSupply, totalLiabilityUSD }\n }\n\n /** Stake UPD to receive sUPD shares. Requires walletClient. */\n async stakeUPD(params: StakeParams): Promise<Hash> {\n const walletClient = this._requireWallet()\n const supdAddr = this.deployment.contracts.sUPD\n if (!supdAddr) throw new Error('sUPD not deployed on this chain')\n\n return walletClient.writeContract({\n address: supdAddr,\n abi: SUPD_ABI,\n functionName: 'stakeUPD',\n args: [params.updAmount, this._toSolidityAttestation(params.priceAttestation)],\n chain: walletClient.chain ?? null,\n account: walletClient.account!,\n })\n }\n\n /** Unstake sUPD shares to receive UPD. Requires walletClient. */\n async unstakeUPD(params: UnstakeParams): Promise<Hash> {\n const walletClient = this._requireWallet()\n const supdAddr = this.deployment.contracts.sUPD\n if (!supdAddr) throw new Error('sUPD not deployed on this chain')\n\n return walletClient.writeContract({\n address: supdAddr,\n abi: SUPD_ABI,\n functionName: 'unstakeToUPD',\n args: [params.shares, this._toSolidityAttestation(params.priceAttestation)],\n chain: walletClient.chain ?? null,\n account: walletClient.account!,\n })\n }\n\n // ============================================================\n // CONVENIENCE METHODS\n // ============================================================\n\n /**\n * Mint UPD by sending ETH, automatically fetching a price attestation from the oracle.\n *\n * @example\n * ```ts\n * const hash = await client.mintWithOracle({\n * to: '0x...',\n * ethAmount: parseEther('1'),\n * })\n * ```\n */\n async mintWithOracle(params: { to: Address; ethAmount: bigint }): Promise<Hash> {\n const attestation = await this.oracle.getEthUsdAttestation()\n return this.mint({ ...params, priceAttestation: attestation })\n }\n\n /**\n * Burn UPD to receive stETH, automatically fetching a price attestation from the oracle.\n *\n * @example\n * ```ts\n * const hash = await client.burnWithOracle({\n * updAmount: parseUnits('2000', 18),\n * })\n * ```\n */\n async burnWithOracle(params: { updAmount: bigint }): Promise<Hash> {\n const attestation = await this.oracle.getEthUsdAttestation()\n return this.burn({ ...params, priceAttestation: attestation })\n }\n\n /**\n * Get system health metrics by combining on-chain collateral data with oracle price.\n *\n * @example\n * ```ts\n * const health = await client.getSystemHealth()\n * console.log(`System ratio: ${health.systemCollateralRatioBps} bps`)\n * console.log(`Healthy: ${health.isHealthy}`)\n * ```\n */\n async getSystemHealth(): Promise<SystemHealth> {\n const [collateral, { price }] = await Promise.all([\n this.getCollateralInfo(),\n this.oracle.getEthUsdPrice(),\n ])\n return computeSystemHealth(collateral, price)\n }\n\n /** Stake UPD, fetching oracle attestation automatically. */\n async stakeUPDWithOracle(params: { updAmount: bigint }): Promise<Hash> {\n const attestation = await this.oracle.getEthUsdAttestation()\n return this.stakeUPD({ ...params, priceAttestation: attestation })\n }\n\n /** Unstake sUPD, fetching oracle attestation automatically. */\n async unstakeUPDWithOracle(params: { shares: bigint }): Promise<Hash> {\n const attestation = await this.oracle.getEthUsdAttestation()\n return this.unstakeUPD({ ...params, priceAttestation: attestation })\n }\n\n /**\n * Permissionless sync: recalculates the reporter's collateral snapshot from on-chain truth.\n * Iterates all PositionEscrows, sums their stETH shares, and resets the reporter.\n * Anyone can call this — gas cost is proportional to the number of stabilizers.\n */\n async syncReporter(): Promise<Hash> {\n const walletClient = this._requireWallet()\n return walletClient.writeContract({\n address: this.deployment.contracts.OvercollateralizationReporter,\n abi: OVERCOLLATERALIZATION_REPORTER_ABI,\n functionName: 'syncFromChain',\n chain: walletClient.chain ?? null,\n account: walletClient.account!,\n })\n }\n\n // ============================================================\n // HELPERS\n // ============================================================\n\n private _requireWallet() {\n if (!this.config.walletClient) {\n throw new Error(\n 'UPDClient: walletClient is required for write operations. ' +\n 'Pass a walletClient in the config to use mint/burn.',\n )\n }\n return this.config.walletClient\n }\n\n private _toSolidityAttestation(a: PriceAttestationQuery) {\n return {\n price: a.price,\n decimals: a.decimals,\n dataTimestamp: a.dataTimestamp,\n assetPair: a.assetPair,\n signature: a.signature,\n } as const\n }\n}\n\n/**\n * Create a UPD client instance.\n *\n * @example\n * ```ts\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createUPDClient } from '@permissionless-technologies/upd-sdk'\n *\n * const client = createUPDClient({\n * publicClient: createPublicClient({ chain: mainnet, transport: http() }),\n * chainId: 1,\n * })\n * ```\n */\nexport function createUPDClient(config: UPDClientConfig): UPDClient {\n return new UPDClient(config)\n}\n","/**\n * EIP-3009 Transfer Authorization helpers for UPD.\n *\n * Pure signing functions — no blockchain calls. Generate off-chain EIP-712\n * signatures that can be submitted by any relayer or facilitator (e.g., x402).\n *\n * @example\n * ```ts\n * import { signTransferAuthorization } from '@permissionless-technologies/upd-sdk'\n *\n * const auth = await signTransferAuthorization({\n * walletClient,\n * tokenAddress: '0x...',\n * from: '0xAlice...',\n * to: '0xBob...',\n * value: parseUnits('100', 18),\n * validAfter: 0n,\n * validBefore: BigInt(Math.floor(Date.now() / 1000) + 3600),\n * })\n *\n * // Submit via relayer, x402 facilitator, or directly\n * await publicClient.writeContract({\n * address: tokenAddress,\n * abi: UPD_TOKEN_ABI,\n * functionName: 'transferWithAuthorization',\n * args: [auth.from, auth.to, auth.value, auth.validAfter, auth.validBefore, auth.nonce, auth.v, auth.r, auth.s],\n * })\n * ```\n */\n\nimport { type Address, type Hex, type WalletClient, hexToBytes, bytesToHex } from 'viem'\n\nexport interface TransferAuthorizationParams {\n walletClient: WalletClient\n tokenAddress: Address\n from: Address\n to: Address\n value: bigint\n validAfter?: bigint\n validBefore?: bigint\n nonce?: Hex\n}\n\nexport interface TransferAuthorization {\n from: Address\n to: Address\n value: bigint\n validAfter: bigint\n validBefore: bigint\n nonce: Hex\n v: number\n r: Hex\n s: Hex\n}\n\nexport interface CancelAuthorizationParams {\n walletClient: WalletClient\n tokenAddress: Address\n authorizer: Address\n nonce: Hex\n}\n\nexport interface CancelAuthorization {\n authorizer: Address\n nonce: Hex\n v: number\n r: Hex\n s: Hex\n}\n\nconst EIP3009_DOMAIN_VERSION = '1'\n\nfunction randomNonce(): Hex {\n const bytes = new Uint8Array(32)\n crypto.getRandomValues(bytes)\n return bytesToHex(bytes)\n}\n\nfunction eip3009Domain(tokenAddress: Address, chainId: number, tokenName: string) {\n return {\n name: tokenName,\n version: EIP3009_DOMAIN_VERSION,\n chainId,\n verifyingContract: tokenAddress,\n } as const\n}\n\n/**\n * Sign a TransferWithAuthorization (EIP-3009).\n *\n * Generates a random nonce if none is provided. Default time window: now → +1 hour.\n * The returned object contains all arguments needed for `transferWithAuthorization()`.\n */\nexport async function signTransferAuthorization(\n params: TransferAuthorizationParams,\n tokenName = 'Universal Private Dollar',\n): Promise<TransferAuthorization> {\n const {\n walletClient,\n tokenAddress,\n from,\n to,\n value,\n validAfter = 0n,\n validBefore = BigInt(Math.floor(Date.now() / 1000) + 3600),\n nonce = randomNonce(),\n } = params\n\n const chainId = walletClient.chain?.id\n if (!chainId) throw new Error('walletClient must have a chain configured')\n\n const signature = await walletClient.signTypedData({\n account: from,\n domain: eip3009Domain(tokenAddress, chainId, tokenName),\n types: {\n TransferWithAuthorization: [\n { name: 'from', type: 'address' },\n { name: 'to', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'validAfter', type: 'uint256' },\n { name: 'validBefore', type: 'uint256' },\n { name: 'nonce', type: 'bytes32' },\n ],\n },\n primaryType: 'TransferWithAuthorization',\n message: { from, to, value, validAfter, validBefore, nonce },\n })\n\n const sigBytes = hexToBytes(signature)\n const r = bytesToHex(sigBytes.slice(0, 32))\n const s = bytesToHex(sigBytes.slice(32, 64))\n const v = sigBytes[64]!\n\n return { from, to, value, validAfter, validBefore, nonce, v, r, s }\n}\n\n/**\n * Sign a ReceiveWithAuthorization (EIP-3009).\n *\n * Same as transferWithAuthorization but the resulting signature can only be\n * submitted by the `to` address (prevents front-running).\n */\nexport async function signReceiveAuthorization(\n params: TransferAuthorizationParams,\n tokenName = 'Universal Private Dollar',\n): Promise<TransferAuthorization> {\n const {\n walletClient,\n tokenAddress,\n from,\n to,\n value,\n validAfter = 0n,\n validBefore = BigInt(Math.floor(Date.now() / 1000) + 3600),\n nonce = randomNonce(),\n } = params\n\n const chainId = walletClient.chain?.id\n if (!chainId) throw new Error('walletClient must have a chain configured')\n\n const signature = await walletClient.signTypedData({\n account: from,\n domain: eip3009Domain(tokenAddress, chainId, tokenName),\n types: {\n ReceiveWithAuthorization: [\n { name: 'from', type: 'address' },\n { name: 'to', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'validAfter', type: 'uint256' },\n { name: 'validBefore', type: 'uint256' },\n { name: 'nonce', type: 'bytes32' },\n ],\n },\n primaryType: 'ReceiveWithAuthorization',\n message: { from, to, value, validAfter, validBefore, nonce },\n })\n\n const sigBytes = hexToBytes(signature)\n const r = bytesToHex(sigBytes.slice(0, 32))\n const s = bytesToHex(sigBytes.slice(32, 64))\n const v = sigBytes[64]!\n\n return { from, to, value, validAfter, validBefore, nonce, v, r, s }\n}\n\n/**\n * Sign a CancelAuthorization (EIP-3009).\n *\n * Cancels a previously signed authorization before it's been used.\n */\nexport async function signCancelAuthorization(\n params: CancelAuthorizationParams,\n tokenName = 'Universal Private Dollar',\n): Promise<CancelAuthorization> {\n const { walletClient, tokenAddress, authorizer, nonce } = params\n\n const chainId = walletClient.chain?.id\n if (!chainId) throw new Error('walletClient must have a chain configured')\n\n const signature = await walletClient.signTypedData({\n account: authorizer,\n domain: eip3009Domain(tokenAddress, chainId, tokenName),\n types: {\n CancelAuthorization: [\n { name: 'authorizer', type: 'address' },\n { name: 'nonce', type: 'bytes32' },\n ],\n },\n primaryType: 'CancelAuthorization',\n message: { authorizer, nonce },\n })\n\n const sigBytes = hexToBytes(signature)\n const r = bytesToHex(sigBytes.slice(0, 32))\n const s = bytesToHex(sigBytes.slice(32, 64))\n const v = sigBytes[64]!\n\n return { authorizer, nonce, v, r, s }\n}\n","/**\n * UPD Deployment Verification — Check on-chain state matches deployment config.\n *\n * Verifies:\n * 1. Bytecode exists at all deployed addresses\n * 2. UUPS proxy implementation slots point to correct implementations\n * 3. Critical storage values are initialized correctly (including reporter != address(0))\n * 4. Access control roles are granted properly (CONTROLLER_ROLE, UPDATER_ROLE)\n * 5. Ownership (InsuranceEscrow owned by StabilizerNFT)\n */\n\nimport type { Address, PublicClient } from 'viem'\nimport type { UPDDeploymentConfig } from '../deployments/index.js'\nimport { UPD_TOKEN_ABI } from '../contracts/abi/UPDToken.js'\nimport { STABILIZER_NFT_ABI } from '../contracts/abi/StabilizerNFT.js'\nimport { OVERCOLLATERALIZATION_REPORTER_ABI } from '../contracts/abi/OvercollateralizationReporter.js'\nimport { INSURANCE_ESCROW_ABI } from '../contracts/abi/InsuranceEscrow.js'\n\n/** ERC-1967 implementation storage slot */\nconst ERC1967_IMPL_SLOT =\n '0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc' as const\n\nexport interface VerificationCheck {\n name: string\n passed: boolean\n expected?: string\n actual?: string\n}\n\nexport interface VerificationResult {\n chainId: number\n checks: VerificationCheck[]\n passed: number\n failed: number\n allPassed: boolean\n}\n\n/**\n * Verify that a UPD deployment matches its on-chain state.\n *\n * @example\n * ```ts\n * const result = await verifyDeployment(publicClient, deployment)\n * if (!result.allPassed) {\n * console.error('Deployment verification failed:', result.checks.filter(c => !c.passed))\n * }\n * ```\n */\nexport async function verifyDeployment(\n publicClient: PublicClient,\n deployment: UPDDeploymentConfig,\n): Promise<VerificationResult> {\n const checks: VerificationCheck[] = []\n\n // 1. Bytecode existence — every deployed address must have code\n await _verifyBytecode(publicClient, checks, 'UPDToken', deployment.contracts.UPDToken)\n await _verifyBytecode(publicClient, checks, 'PriceOracle', deployment.contracts.PriceOracle)\n await _verifyBytecode(publicClient, checks, 'StabilizerNFT', deployment.contracts.StabilizerNFT)\n await _verifyBytecode(publicClient, checks, 'Reporter', deployment.contracts.OvercollateralizationReporter)\n await _verifyBytecode(publicClient, checks, 'InsuranceEscrow', deployment.contracts.InsuranceEscrow)\n await _verifyBytecode(publicClient, checks, 'LinkedListLib', deployment.libraries.LinkedListLib)\n await _verifyBytecode(publicClient, checks, 'CollateralMathLib', deployment.libraries.CollateralMathLib)\n await _verifyBytecode(publicClient, checks, 'StabilizerEscrow template', deployment.templates.StabilizerEscrow)\n await _verifyBytecode(publicClient, checks, 'PositionEscrow template', deployment.templates.PositionEscrow)\n\n // 2. Proxy implementation slots (ERC-1967)\n await _verifyProxyImpl(publicClient, checks, 'PriceOracle', deployment.contracts.PriceOracle, deployment.implementations.PriceOracle)\n await _verifyProxyImpl(publicClient, checks, 'StabilizerNFT', deployment.contracts.StabilizerNFT, deployment.implementations.StabilizerNFT)\n await _verifyProxyImpl(publicClient, checks, 'Reporter', deployment.contracts.OvercollateralizationReporter, deployment.implementations.OvercollateralizationReporter)\n\n // 3. Storage initialization — all dependency pointers must be wired\n await _verifyStabilizerNFTStorage(publicClient, checks, deployment)\n await _verifyReporterStorage(publicClient, checks, deployment)\n\n // 4. Access control\n // UPDToken uses a single CONTROLLER_ROLE for mint+burn (NOT separate MINTER/BURNER roles)\n await _verifyRole(publicClient, checks, 'UPDToken CONTROLLER_ROLE -> StabilizerNFT',\n deployment.contracts.UPDToken, UPD_TOKEN_ABI,\n '0x7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357', // keccak256(\"CONTROLLER_ROLE\")\n deployment.contracts.StabilizerNFT)\n\n // Reporter UPDATER_ROLE must be held by StabilizerNFT\n await _verifyRole(publicClient, checks, 'Reporter UPDATER_ROLE -> StabilizerNFT',\n deployment.contracts.OvercollateralizationReporter, OVERCOLLATERALIZATION_REPORTER_ABI,\n '0x73e573f9566d61418a34d5de3ff49360f9c51fec37f7486551670290f6285dab', // keccak256(\"UPDATER_ROLE\")\n deployment.contracts.StabilizerNFT)\n\n // 5. Ownership — InsuranceEscrow must be owned by StabilizerNFT\n await _verifyOwnership(publicClient, checks, deployment)\n\n const passed = checks.filter((c) => c.passed).length\n const failed = checks.filter((c) => !c.passed).length\n\n return {\n chainId: deployment.chainId,\n checks,\n passed,\n failed,\n allPassed: failed === 0,\n }\n}\n\n// ---- Internal helpers ----\n\nasync function _verifyBytecode(\n client: PublicClient,\n checks: VerificationCheck[],\n name: string,\n address: Address,\n): Promise<void> {\n try {\n const code = await client.getCode({ address })\n const exists = code !== undefined && code !== '0x' && code.length > 2\n checks.push({ name: `${name} bytecode exists`, passed: exists })\n } catch {\n checks.push({ name: `${name} bytecode exists`, passed: false })\n }\n}\n\nasync function _verifyProxyImpl(\n client: PublicClient,\n checks: VerificationCheck[],\n name: string,\n proxyAddress: Address,\n expectedImpl: Address,\n): Promise<void> {\n try {\n const implSlot = await client.getStorageAt({\n address: proxyAddress,\n slot: ERC1967_IMPL_SLOT,\n })\n const actualImpl = ('0x' + (implSlot ?? '0x').slice(26)).toLowerCase() as Address\n const expected = expectedImpl.toLowerCase()\n checks.push({\n name: `${name} proxy -> impl`,\n passed: actualImpl === expected,\n expected: expectedImpl,\n actual: actualImpl as string,\n })\n } catch {\n checks.push({ name: `${name} proxy -> impl`, passed: false, expected: expectedImpl })\n }\n}\n\nasync function _verifyStabilizerNFTStorage(\n client: PublicClient,\n checks: VerificationCheck[],\n d: UPDDeploymentConfig,\n): Promise<void> {\n try {\n const nft = d.contracts.StabilizerNFT\n const updToken = await client.readContract({\n address: nft, abi: STABILIZER_NFT_ABI, functionName: 'updToken',\n }) as Address\n checks.push({\n name: 'StabilizerNFT.updToken',\n passed: updToken.toLowerCase() === d.contracts.UPDToken.toLowerCase(),\n expected: d.contracts.UPDToken,\n actual: updToken,\n })\n\n const oracle = await client.readContract({\n address: nft, abi: STABILIZER_NFT_ABI, functionName: 'oracle',\n }) as Address\n checks.push({\n name: 'StabilizerNFT.oracle',\n passed: oracle.toLowerCase() === d.contracts.PriceOracle.toLowerCase(),\n expected: d.contracts.PriceOracle,\n actual: oracle,\n })\n\n const stETH = await client.readContract({\n address: nft, abi: STABILIZER_NFT_ABI, functionName: 'stETH',\n }) as Address\n checks.push({\n name: 'StabilizerNFT.stETH',\n passed: stETH.toLowerCase() === d.external.stETH.toLowerCase(),\n expected: d.external.stETH,\n actual: stETH,\n })\n\n // Critical: reporter must be wired (address(0) causes mintUPD to revert)\n const reporter = await client.readContract({\n address: nft, abi: STABILIZER_NFT_ABI, functionName: 'reporter',\n }) as Address\n const ZERO = '0x0000000000000000000000000000000000000000'\n checks.push({\n name: 'StabilizerNFT.reporter != address(0)',\n passed: reporter.toLowerCase() !== ZERO,\n expected: `!= ${ZERO}`,\n actual: reporter,\n })\n checks.push({\n name: 'StabilizerNFT.reporter == Reporter proxy',\n passed: reporter.toLowerCase() === d.contracts.OvercollateralizationReporter.toLowerCase(),\n expected: d.contracts.OvercollateralizationReporter,\n actual: reporter,\n })\n\n // InsuranceEscrow pointer\n const insuranceEscrow = await client.readContract({\n address: nft, abi: STABILIZER_NFT_ABI, functionName: 'insuranceEscrow',\n }) as Address\n checks.push({\n name: 'StabilizerNFT.insuranceEscrow',\n passed: insuranceEscrow.toLowerCase() === d.contracts.InsuranceEscrow.toLowerCase(),\n expected: d.contracts.InsuranceEscrow,\n actual: insuranceEscrow,\n })\n } catch {\n checks.push({ name: 'StabilizerNFT storage', passed: false })\n }\n}\n\nasync function _verifyReporterStorage(\n client: PublicClient,\n checks: VerificationCheck[],\n d: UPDDeploymentConfig,\n): Promise<void> {\n try {\n const reporter = d.contracts.OvercollateralizationReporter\n const stabNFT = await client.readContract({\n address: reporter, abi: OVERCOLLATERALIZATION_REPORTER_ABI, functionName: 'stabilizerNFTContract',\n }) as Address\n checks.push({\n name: 'Reporter.stabilizerNFT',\n passed: stabNFT.toLowerCase() === d.contracts.StabilizerNFT.toLowerCase(),\n expected: d.contracts.StabilizerNFT,\n actual: stabNFT,\n })\n\n const updToken = await client.readContract({\n address: reporter, abi: OVERCOLLATERALIZATION_REPORTER_ABI, functionName: 'updToken',\n }) as Address\n checks.push({\n name: 'Reporter.updToken',\n passed: updToken.toLowerCase() === d.contracts.UPDToken.toLowerCase(),\n expected: d.contracts.UPDToken,\n actual: updToken,\n })\n } catch {\n checks.push({ name: 'Reporter storage', passed: false })\n }\n}\n\nasync function _verifyRole(\n client: PublicClient,\n checks: VerificationCheck[],\n name: string,\n contractAddress: Address,\n abi: readonly unknown[],\n roleHash: `0x${string}`,\n account: Address,\n): Promise<void> {\n try {\n const hasRole = await client.readContract({\n address: contractAddress,\n abi: abi as never,\n functionName: 'hasRole',\n args: [roleHash, account],\n }) as boolean\n checks.push({ name, passed: hasRole })\n } catch {\n checks.push({ name, passed: false })\n }\n}\n\nasync function _verifyOwnership(\n client: PublicClient,\n checks: VerificationCheck[],\n d: UPDDeploymentConfig,\n): Promise<void> {\n try {\n const owner = await client.readContract({\n address: d.contracts.InsuranceEscrow,\n abi: INSURANCE_ESCROW_ABI,\n functionName: 'owner',\n }) as Address\n checks.push({\n name: 'InsuranceEscrow.owner == StabilizerNFT',\n passed: owner.toLowerCase() === d.contracts.StabilizerNFT.toLowerCase(),\n expected: d.contracts.StabilizerNFT,\n actual: owner,\n })\n } catch {\n checks.push({ name: 'InsuranceEscrow.owner', passed: false })\n }\n}\n"]}
@@ -1248,6 +1248,19 @@ var STABILIZER_NFT_ABI = [
1248
1248
  ],
1249
1249
  "stateMutability": "view"
1250
1250
  },
1251
+ {
1252
+ "type": "function",
1253
+ "name": "beaconProxyFactory",
1254
+ "inputs": [],
1255
+ "outputs": [
1256
+ {
1257
+ "name": "",
1258
+ "type": "address",
1259
+ "internalType": "address"
1260
+ }
1261
+ ],
1262
+ "stateMutability": "view"
1263
+ },
1251
1264
  {
1252
1265
  "type": "function",
1253
1266
  "name": "burnUPD",
@@ -1419,12 +1432,17 @@ var STABILIZER_NFT_ABI = [
1419
1432
  "internalType": "string"
1420
1433
  },
1421
1434
  {
1422
- "name": "_stabilizerEscrowImpl",
1435
+ "name": "_stabilizerEscrowBeacon",
1436
+ "type": "address",
1437
+ "internalType": "address"
1438
+ },
1439
+ {
1440
+ "name": "_positionEscrowBeacon",
1423
1441
  "type": "address",
1424
1442
  "internalType": "address"
1425
1443
  },
1426
1444
  {
1427
- "name": "_positionEscrowImpl",
1445
+ "name": "_beaconProxyFactory",
1428
1446
  "type": "address",
1429
1447
  "internalType": "address"
1430
1448
  },
@@ -1779,6 +1797,24 @@ var STABILIZER_NFT_ABI = [
1779
1797
  ],
1780
1798
  "stateMutability": "view"
1781
1799
  },
1800
+ {
1801
+ "type": "function",
1802
+ "name": "onCollateralAdded",
1803
+ "inputs": [
1804
+ {
1805
+ "name": "tokenId",
1806
+ "type": "uint256",
1807
+ "internalType": "uint256"
1808
+ },
1809
+ {
1810
+ "name": "stEthAmount",
1811
+ "type": "uint256",
1812
+ "internalType": "uint256"
1813
+ }
1814
+ ],
1815
+ "outputs": [],
1816
+ "stateMutability": "nonpayable"
1817
+ },
1782
1818
  {
1783
1819
  "type": "function",
1784
1820
  "name": "oracle",
@@ -1813,7 +1849,7 @@ var STABILIZER_NFT_ABI = [
1813
1849
  },
1814
1850
  {
1815
1851
  "type": "function",
1816
- "name": "positionEscrowImplementation",
1852
+ "name": "positionEscrowBeacon",
1817
1853
  "inputs": [],
1818
1854
  "outputs": [
1819
1855
  {
@@ -2100,6 +2136,19 @@ var STABILIZER_NFT_ABI = [
2100
2136
  "outputs": [],
2101
2137
  "stateMutability": "nonpayable"
2102
2138
  },
2139
+ {
2140
+ "type": "function",
2141
+ "name": "setReporter",
2142
+ "inputs": [
2143
+ {
2144
+ "name": "addr",
2145
+ "type": "address",
2146
+ "internalType": "address"
2147
+ }
2148
+ ],
2149
+ "outputs": [],
2150
+ "stateMutability": "nonpayable"
2151
+ },
2103
2152
  {
2104
2153
  "type": "function",
2105
2154
  "name": "stETH",
@@ -2115,7 +2164,7 @@ var STABILIZER_NFT_ABI = [
2115
2164
  },
2116
2165
  {
2117
2166
  "type": "function",
2118
- "name": "stabilizerEscrowImplementation",
2167
+ "name": "stabilizerEscrowBeacon",
2119
2168
  "inputs": [],
2120
2169
  "outputs": [
2121
2170
  {
@@ -2606,6 +2655,19 @@ var STABILIZER_NFT_ABI = [
2606
2655
  ],
2607
2656
  "anonymous": false
2608
2657
  },
2658
+ {
2659
+ "type": "event",
2660
+ "name": "ReporterUpdated",
2661
+ "inputs": [
2662
+ {
2663
+ "name": "newReporter",
2664
+ "type": "address",
2665
+ "indexed": true,
2666
+ "internalType": "address"
2667
+ }
2668
+ ],
2669
+ "anonymous": false
2670
+ },
2609
2671
  {
2610
2672
  "type": "event",
2611
2673
  "name": "RoleAdminChanged",
@@ -3000,27 +3062,6 @@ var STABILIZER_NFT_ABI = [
3000
3062
  "name": "FailedCall",
3001
3063
  "inputs": []
3002
3064
  },
3003
- {
3004
- "type": "error",
3005
- "name": "FailedDeployment",
3006
- "inputs": []
3007
- },
3008
- {
3009
- "type": "error",
3010
- "name": "InsufficientBalance",
3011
- "inputs": [
3012
- {
3013
- "name": "balance",
3014
- "type": "uint256",
3015
- "internalType": "uint256"
3016
- },
3017
- {
3018
- "name": "needed",
3019
- "type": "uint256",
3020
- "internalType": "uint256"
3021
- }
3022
- ]
3023
- },
3024
3065
  {
3025
3066
  "type": "error",
3026
3067
  "name": "InsuranceEscrowZero",
@@ -3096,6 +3137,11 @@ var STABILIZER_NFT_ABI = [
3096
3137
  "name": "NotLiquidatorTokenOwner",
3097
3138
  "inputs": []
3098
3139
  },
3140
+ {
3141
+ "type": "error",
3142
+ "name": "NotPositionEscrow",
3143
+ "inputs": []
3144
+ },
3099
3145
  {
3100
3146
  "type": "error",
3101
3147
  "name": "NotTokenOwner",
@@ -3200,6 +3246,19 @@ var OVERCOLLATERALIZATION_REPORTER_ABI = [
3200
3246
  ],
3201
3247
  "stateMutability": "view"
3202
3248
  },
3249
+ {
3250
+ "type": "function",
3251
+ "name": "MAX_SYNC_STABILIZERS",
3252
+ "inputs": [],
3253
+ "outputs": [
3254
+ {
3255
+ "name": "",
3256
+ "type": "uint256",
3257
+ "internalType": "uint256"
3258
+ }
3259
+ ],
3260
+ "stateMutability": "view"
3261
+ },
3203
3262
  {
3204
3263
  "type": "function",
3205
3264
  "name": "UPDATER_ROLE",
@@ -3294,6 +3353,19 @@ var OVERCOLLATERALIZATION_REPORTER_ABI = [
3294
3353
  ],
3295
3354
  "stateMutability": "view"
3296
3355
  },
3356
+ {
3357
+ "type": "function",
3358
+ "name": "getTotalStEthCollateral",
3359
+ "inputs": [],
3360
+ "outputs": [
3361
+ {
3362
+ "name": "",
3363
+ "type": "uint256",
3364
+ "internalType": "uint256"
3365
+ }
3366
+ ],
3367
+ "stateMutability": "view"
3368
+ },
3297
3369
  {
3298
3370
  "type": "function",
3299
3371
  "name": "grantRole",
@@ -3354,6 +3426,11 @@ var OVERCOLLATERALIZATION_REPORTER_ABI = [
3354
3426
  "name": "_updToken",
3355
3427
  "type": "address",
3356
3428
  "internalType": "address"
3429
+ },
3430
+ {
3431
+ "name": "_stETH",
3432
+ "type": "address",
3433
+ "internalType": "address"
3357
3434
  }
3358
3435
  ],
3359
3436
  "outputs": [],
@@ -3395,7 +3472,7 @@ var OVERCOLLATERALIZATION_REPORTER_ABI = [
3395
3472
  "name": "resetCollateralSnapshot",
3396
3473
  "inputs": [
3397
3474
  {
3398
- "name": "actualTotalStEth",
3475
+ "name": "actualTotalShares",
3399
3476
  "type": "uint256",
3400
3477
  "internalType": "uint256"
3401
3478
  }
@@ -3421,6 +3498,19 @@ var OVERCOLLATERALIZATION_REPORTER_ABI = [
3421
3498
  "outputs": [],
3422
3499
  "stateMutability": "nonpayable"
3423
3500
  },
3501
+ {
3502
+ "type": "function",
3503
+ "name": "stETHAddress",
3504
+ "inputs": [],
3505
+ "outputs": [
3506
+ {
3507
+ "name": "",
3508
+ "type": "address",
3509
+ "internalType": "address"
3510
+ }
3511
+ ],
3512
+ "stateMutability": "view"
3513
+ },
3424
3514
  {
3425
3515
  "type": "function",
3426
3516
  "name": "stabilizerNFTContract",
@@ -3455,7 +3545,14 @@ var OVERCOLLATERALIZATION_REPORTER_ABI = [
3455
3545
  },
3456
3546
  {
3457
3547
  "type": "function",
3458
- "name": "totalStEthCollateral",
3548
+ "name": "syncFromChain",
3549
+ "inputs": [],
3550
+ "outputs": [],
3551
+ "stateMutability": "nonpayable"
3552
+ },
3553
+ {
3554
+ "type": "function",
3555
+ "name": "totalStEthShares",
3459
3556
  "inputs": [],
3460
3557
  "outputs": [
3461
3558
  {
@@ -3629,7 +3726,7 @@ var OVERCOLLATERALIZATION_REPORTER_ABI = [
3629
3726
  "name": "SnapshotReset",
3630
3727
  "inputs": [
3631
3728
  {
3632
- "name": "newTotalStEth",
3729
+ "name": "newTotalShares",
3633
3730
  "type": "uint256",
3634
3731
  "indexed": false,
3635
3732
  "internalType": "uint256"
@@ -3642,7 +3739,7 @@ var OVERCOLLATERALIZATION_REPORTER_ABI = [
3642
3739
  "name": "SnapshotUpdated",
3643
3740
  "inputs": [
3644
3741
  {
3645
- "name": "newTotalStEth",
3742
+ "name": "newTotalShares",
3646
3743
  "type": "uint256",
3647
3744
  "indexed": false,
3648
3745
  "internalType": "uint256"
@@ -3764,6 +3861,11 @@ var OVERCOLLATERALIZATION_REPORTER_ABI = [
3764
3861
  "name": "NotInitializing",
3765
3862
  "inputs": []
3766
3863
  },
3864
+ {
3865
+ "type": "error",
3866
+ "name": "TooManyStabilizers",
3867
+ "inputs": []
3868
+ },
3767
3869
  {
3768
3870
  "type": "error",
3769
3871
  "name": "UUPSUnauthorizedCallContext",
@@ -6611,6 +6713,231 @@ var SUPD_ABI = [
6611
6713
  }
6612
6714
  ];
6613
6715
 
6614
- export { OVERCOLLATERALIZATION_REPORTER_ABI, POSITION_ESCROW_ABI, STABILIZER_ESCROW_ABI, STABILIZER_NFT_ABI, SUPD_ABI, UPD_TOKEN_ABI };
6615
- //# sourceMappingURL=chunk-4RBWWS2X.js.map
6616
- //# sourceMappingURL=chunk-4RBWWS2X.js.map
6716
+ // src/contracts/abi/InsuranceEscrow.ts
6717
+ var INSURANCE_ESCROW_ABI = [
6718
+ {
6719
+ "type": "constructor",
6720
+ "inputs": [
6721
+ {
6722
+ "name": "_stETHAddress",
6723
+ "type": "address",
6724
+ "internalType": "address"
6725
+ },
6726
+ {
6727
+ "name": "_initialOwner",
6728
+ "type": "address",
6729
+ "internalType": "address"
6730
+ }
6731
+ ],
6732
+ "stateMutability": "nonpayable"
6733
+ },
6734
+ {
6735
+ "type": "receive",
6736
+ "stateMutability": "payable"
6737
+ },
6738
+ {
6739
+ "type": "function",
6740
+ "name": "depositStEth",
6741
+ "inputs": [
6742
+ {
6743
+ "name": "_amount",
6744
+ "type": "uint256",
6745
+ "internalType": "uint256"
6746
+ }
6747
+ ],
6748
+ "outputs": [],
6749
+ "stateMutability": "nonpayable"
6750
+ },
6751
+ {
6752
+ "type": "function",
6753
+ "name": "getStEthBalance",
6754
+ "inputs": [],
6755
+ "outputs": [
6756
+ {
6757
+ "name": "",
6758
+ "type": "uint256",
6759
+ "internalType": "uint256"
6760
+ }
6761
+ ],
6762
+ "stateMutability": "view"
6763
+ },
6764
+ {
6765
+ "type": "function",
6766
+ "name": "owner",
6767
+ "inputs": [],
6768
+ "outputs": [
6769
+ {
6770
+ "name": "",
6771
+ "type": "address",
6772
+ "internalType": "address"
6773
+ }
6774
+ ],
6775
+ "stateMutability": "view"
6776
+ },
6777
+ {
6778
+ "type": "function",
6779
+ "name": "renounceOwnership",
6780
+ "inputs": [],
6781
+ "outputs": [],
6782
+ "stateMutability": "nonpayable"
6783
+ },
6784
+ {
6785
+ "type": "function",
6786
+ "name": "stETH",
6787
+ "inputs": [],
6788
+ "outputs": [
6789
+ {
6790
+ "name": "",
6791
+ "type": "address",
6792
+ "internalType": "contract IERC20"
6793
+ }
6794
+ ],
6795
+ "stateMutability": "view"
6796
+ },
6797
+ {
6798
+ "type": "function",
6799
+ "name": "transferOwnership",
6800
+ "inputs": [
6801
+ {
6802
+ "name": "newOwner",
6803
+ "type": "address",
6804
+ "internalType": "address"
6805
+ }
6806
+ ],
6807
+ "outputs": [],
6808
+ "stateMutability": "nonpayable"
6809
+ },
6810
+ {
6811
+ "type": "function",
6812
+ "name": "withdrawStEth",
6813
+ "inputs": [
6814
+ {
6815
+ "name": "_to",
6816
+ "type": "address",
6817
+ "internalType": "address"
6818
+ },
6819
+ {
6820
+ "name": "_amount",
6821
+ "type": "uint256",
6822
+ "internalType": "uint256"
6823
+ }
6824
+ ],
6825
+ "outputs": [],
6826
+ "stateMutability": "nonpayable"
6827
+ },
6828
+ {
6829
+ "type": "event",
6830
+ "name": "FundsDeposited",
6831
+ "inputs": [
6832
+ {
6833
+ "name": "by",
6834
+ "type": "address",
6835
+ "indexed": true,
6836
+ "internalType": "address"
6837
+ },
6838
+ {
6839
+ "name": "amount",
6840
+ "type": "uint256",
6841
+ "indexed": false,
6842
+ "internalType": "uint256"
6843
+ }
6844
+ ],
6845
+ "anonymous": false
6846
+ },
6847
+ {
6848
+ "type": "event",
6849
+ "name": "FundsWithdrawn",
6850
+ "inputs": [
6851
+ {
6852
+ "name": "by",
6853
+ "type": "address",
6854
+ "indexed": true,
6855
+ "internalType": "address"
6856
+ },
6857
+ {
6858
+ "name": "to",
6859
+ "type": "address",
6860
+ "indexed": true,
6861
+ "internalType": "address"
6862
+ },
6863
+ {
6864
+ "name": "amount",
6865
+ "type": "uint256",
6866
+ "indexed": false,
6867
+ "internalType": "uint256"
6868
+ }
6869
+ ],
6870
+ "anonymous": false
6871
+ },
6872
+ {
6873
+ "type": "event",
6874
+ "name": "OwnershipTransferred",
6875
+ "inputs": [
6876
+ {
6877
+ "name": "previousOwner",
6878
+ "type": "address",
6879
+ "indexed": true,
6880
+ "internalType": "address"
6881
+ },
6882
+ {
6883
+ "name": "newOwner",
6884
+ "type": "address",
6885
+ "indexed": true,
6886
+ "internalType": "address"
6887
+ }
6888
+ ],
6889
+ "anonymous": false
6890
+ },
6891
+ {
6892
+ "type": "error",
6893
+ "name": "OwnableInvalidOwner",
6894
+ "inputs": [
6895
+ {
6896
+ "name": "owner",
6897
+ "type": "address",
6898
+ "internalType": "address"
6899
+ }
6900
+ ]
6901
+ },
6902
+ {
6903
+ "type": "error",
6904
+ "name": "OwnableUnauthorizedAccount",
6905
+ "inputs": [
6906
+ {
6907
+ "name": "account",
6908
+ "type": "address",
6909
+ "internalType": "address"
6910
+ }
6911
+ ]
6912
+ },
6913
+ {
6914
+ "type": "error",
6915
+ "name": "SafeERC20FailedOperation",
6916
+ "inputs": [
6917
+ {
6918
+ "name": "token",
6919
+ "type": "address",
6920
+ "internalType": "address"
6921
+ }
6922
+ ]
6923
+ },
6924
+ {
6925
+ "type": "error",
6926
+ "name": "TransferFailed",
6927
+ "inputs": []
6928
+ },
6929
+ {
6930
+ "type": "error",
6931
+ "name": "ZeroAddress",
6932
+ "inputs": []
6933
+ },
6934
+ {
6935
+ "type": "error",
6936
+ "name": "ZeroAmount",
6937
+ "inputs": []
6938
+ }
6939
+ ];
6940
+
6941
+ export { INSURANCE_ESCROW_ABI, OVERCOLLATERALIZATION_REPORTER_ABI, POSITION_ESCROW_ABI, STABILIZER_ESCROW_ABI, STABILIZER_NFT_ABI, SUPD_ABI, UPD_TOKEN_ABI };
6942
+ //# sourceMappingURL=chunk-PS6EIE5E.js.map
6943
+ //# sourceMappingURL=chunk-PS6EIE5E.js.map