@gvnrdao/dh-sdk 0.0.347 → 0.0.348

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.
@@ -37,9 +37,12 @@ __export(sign_guard_exports, {
37
37
  QUANTUM_SECONDS: () => QUANTUM_SECONDS,
38
38
  REQUEST_TIMEOUT_MS: () => REQUEST_TIMEOUT_MS,
39
39
  SIGNABLE_FUNCTIONS: () => SIGNABLE_FUNCTIONS,
40
+ SIGNABLE_TYPED_DATA: () => SIGNABLE_TYPED_DATA,
40
41
  TxValidationError: () => TxValidationError,
42
+ TypedDataRefused: () => TypedDataRefused,
41
43
  asEnvelope: () => asEnvelope,
42
44
  assertFeeCeiling: () => assertFeeCeiling,
45
+ assertSignableTypedData: () => assertSignableTypedData,
43
46
  authValiditySec: () => authValiditySec,
44
47
  authorizeWithServer: () => authorizeWithServer,
45
48
  broadcastSignedTx: () => broadcastSignedTx,
@@ -201,6 +204,311 @@ function assertFeeCeiling(gasLimit, maxFeePerGas, raise, ceiling = DEFAULT_FEE_C
201
204
  var import_ethers3 = require("ethers");
202
205
 
203
206
  // src/constants/chunks/deployment-addresses.ts
207
+ var SEPOLIA_DEPLOYMENT = {
208
+ network: "sepolia",
209
+ chainId: 11155111,
210
+ timestamp: "2026-03-13T20:04:15.417Z",
211
+ deployer: "",
212
+ contracts: {
213
+ UpgradeValidator: "0x592e650edD9bA26ecc407989fdd6F9cdcDeC27A6",
214
+ UCDToken: "0xdd817Ff47C9b8f81335Ac579895D8EA321Fa86Df",
215
+ UCDController: "0x360Bde4e489ee94E26601B206932De09EE60FF04",
216
+ PriceFeedConsumer: "0xb3Dc64501935a6f0334779126Ee37bE463cee318",
217
+ PositionManagerCoreModule: "0xfFAA39a08887FeFB697eBC8691A8630CbCC33391",
218
+ TermManagerModule: "0x94Adc6F9558368B1482197584f1fc7133Ecf835b",
219
+ LoanOperationsManagerModule: "0x3e05e760a87715207b7F4e8fD35EF7559BcA72C0",
220
+ CollateralManagerModule: "0x967E92c976Fc0fa8268D37D4d6B7245d912aA7dB",
221
+ LiquidationManagerModule: "0xC4AB00f39e7ceD812F5C67058C9fa44e15d40e76",
222
+ CircuitBreakerModule: "0x3D0B2cAE481821E57BA9CC3807bCC0d0D7F18bd8",
223
+ AdminModule: "0xAcd1f07915b17CA3727e7fE89BdF618A1545a1ed",
224
+ PositionManagerViews: "0x3b970E41a0668508B4B2ACb83653b2A402F745AE",
225
+ PositionManager: "0x68e0507D982AEBF1D1C1Af8FBbd842327e2deeFF",
226
+ OperationAuthorizationRegistry: "0x75f36E772df9616d40b02092642744D6fd702Df8",
227
+ PKPValidation: "0x8a1365A974F91e92D2dF5C51216EFCD408e209A8",
228
+ BTCSpendAuthorizer: "0xd7E9Eb5eE53f1d9ee55Dc162bBC7486bE437B6bD",
229
+ LITActionValidator: "0x54eECd7C90F8A8fac27749Ba30BbE8AFBAccc856",
230
+ SimplePSMV2: "0x19EcF7BA26e054fd4Ff06009A03070103dbBB058",
231
+ BitcoinProviderRegistry: "0xbfA0c48B070D0a9A9CD27469AeacFD2d4261cEE2",
232
+ ContractVersionRegistry: "0x97E43AA6aFF2C0cf659d3aE501658D2Ef6777522",
233
+ mockUsdcToken: "0x96409A98e0D322d6566b7F44a0fAbD1BD4ce2AEc",
234
+ mockUsdtToken: "0xF8b7fB38b17a310960E47805Be9adba0b0e0394D",
235
+ PositionDelegateRegistry: "0x482369De283622E7b05731875ec137d4E3D208F9",
236
+ FeeRecipientRegistry: "0x95795F8403DDb629E8527B2934C4e71f5fC0C374",
237
+ BitcoinWithdrawalAddressRegistry: "0x6376D392097F0A81e51BD83960A97EA20eaf1dbe",
238
+ AgentDelegationRegistry: "0x6AE7fc6bE0925126b9D25b1B7Ce5AD5d127ec025",
239
+ DHAgentDelegate: "0xa5A14489ae883960df6E1463A41a47aBE9Ecc5AF",
240
+ AgentModuleFactory: "0x1Fd3aCa2C030Cf77ce28Af9694D3Bb3034ACa2E5"
241
+ },
242
+ upgraded: {
243
+ PositionManager: {
244
+ previousImplementation: "0xb1885Be99BA64Bba773Bf423783A0334B7109409",
245
+ newImplementation: "0xfA7413a4547F496BF223ed25DF443c17ef6D4668",
246
+ upgradedAt: "2026-07-30T17:55:25.314Z",
247
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
248
+ reason: "Add setViews escape hatch so PositionManagerViews can be repointed (mainnet Views is a frozen non-proxy)"
249
+ },
250
+ LoanOperationsManagerModule: {
251
+ previousImplementation: "0x8c20e9Edf44146718F2EF15eEF47A201CaC229B8",
252
+ newImplementation: "0x6Ad08177F264f441074921C437670D1fA5934676",
253
+ upgradedAt: "2026-07-03T20:19:49.032Z",
254
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
255
+ reason: "Shared upgrade script: LoanOperationsManagerModule implementation update"
256
+ },
257
+ UCDController: {
258
+ previousImplementation: "0xF820098c311C736AB1793656044d95A0F6806B27",
259
+ newImplementation: "0x91204831bBCfcDCEa5fEE09B0d875778E9651690",
260
+ upgradedAt: "2026-07-03T19:52:40.152Z",
261
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
262
+ reason: "Shared upgrade script: UCDController implementation update"
263
+ },
264
+ TermManagerModule: {
265
+ previousImplementation: "0x358d6A7A864853beAA3E157fEB83dCEb1628E8eB",
266
+ newImplementation: "0xA2D6543faFA9d84C16Cd5e5E34F746B6e138F54d",
267
+ upgradedAt: "2026-07-03T19:58:25.937Z",
268
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
269
+ reason: "Shared upgrade script: TermManagerModule implementation update"
270
+ },
271
+ CircuitBreakerModule: {
272
+ previousImplementation: "0xF6277dEF72D51312CC99616B5380f34Eb7603D75",
273
+ newImplementation: "0x4b28F1d4ecBcc13b51a8d0f890e6d5bF4966EEB4",
274
+ upgradedAt: "2026-07-30T09:28:12.835Z",
275
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
276
+ reason: "Shared upgrade script: CircuitBreakerModule implementation update"
277
+ },
278
+ AdminModule: {
279
+ previousImplementation: "0xBBA86246169f81a307Fafff02C1e3D8456aab973",
280
+ newImplementation: "0x2905964e27BD78595cf8fFa6FFc5A99E54F399c4",
281
+ upgradedAt: "2026-07-30T09:02:25.915Z",
282
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
283
+ reason: "Shared upgrade script: AdminModule implementation update"
284
+ },
285
+ PositionManagerViews: {
286
+ previousImplementation: "0xA455B542cFb36AF8451fc420dB89e590E5c87cef",
287
+ newImplementation: "0x8cEB3F1c07fDB3301f55b96a5B9aDb33C8d36Da3",
288
+ upgradedAt: "2026-10-02T17:04:25.853Z",
289
+ upgradedBy: "0x0f8f23674cc90Ef7107930a4437341fD8B460362",
290
+ reason: "1.1.2: getBackingVaults (PoR backing set) + implementation lock (constructor)"
291
+ },
292
+ TestPositionManager: {
293
+ previousImplementation: "0x0B46Ee1a9C6b42559758B7FF78294Cd867BB08f8",
294
+ newImplementation: "0x0B46Ee1a9C6b42559758B7FF78294Cd867BB08f8",
295
+ upgradedAt: "2026-03-17T15:18:07.382Z",
296
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
297
+ reason: "Add setPositionExpiry() for expiry-liquidation E2E testing"
298
+ },
299
+ UCDToken: {
300
+ previousImplementation: "0xC587a2cb7e828A44d8C6190eDA6c47b08BA07115",
301
+ newImplementation: "0xa6C8C4cfc7DD3dCE5F1259A4a1eAf8461aA8CeC8",
302
+ upgradedAt: "2026-07-03T19:54:36.519Z",
303
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
304
+ reason: "Shared upgrade script: UCDToken implementation update"
305
+ },
306
+ PositionManagerCoreModule: {
307
+ previousImplementation: "0xA52580D61Bc451dEe897F64cf51187Ad594B048c",
308
+ newImplementation: "0x0E721048c066C5589C41f97785f7E5737ac2BEB3",
309
+ upgradedAt: "2026-07-03T19:56:24.960Z",
310
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
311
+ reason: "Shared upgrade script: PositionManagerCoreModule implementation update"
312
+ },
313
+ CollateralManagerModule: {
314
+ previousImplementation: "0xCf5d2b210C8e30bE8e05bFC79593b9439b8b9670",
315
+ newImplementation: "0xF57BBbb4818371605e308228A04F8Ec4Dcc5E7Ba",
316
+ upgradedAt: "2026-07-07T16:59:13.883Z",
317
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
318
+ reason: "Shared upgrade script: CollateralManagerModule implementation update"
319
+ },
320
+ LiquidationManagerModule: {
321
+ previousImplementation: "0x31CD6191d80F484b72925Aa1834c80F5f739252A",
322
+ newImplementation: "0xCe7587C47094BBb3dCa13D7a2299Ec9beA6cd759",
323
+ upgradedAt: "2026-07-03T20:02:00.579Z",
324
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
325
+ reason: "Shared upgrade script: LiquidationManagerModule implementation update"
326
+ },
327
+ BTCSpendAuthorizer: {
328
+ previousImplementation: "0xdd3DFaEc50d6214d57eA64e8b76ff318b501607b",
329
+ newImplementation: "0xf3282B5A1AE6428ee1b08cfaAF4EB4e198877484",
330
+ upgradedAt: "2026-09-06T15:03:13.627Z",
331
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
332
+ reason: "Shared upgrade script: BTCSpendAuthorizer implementation update"
333
+ },
334
+ SimplePSMV2: {
335
+ previousImplementation: "0xd2488cb7d9ba211e7437FcE9dcfBC3c2D4CBe419",
336
+ newImplementation: "0xE38010BE47B389922A1cd4b533470F0af7d20101",
337
+ upgradedAt: "2026-07-03T20:21:49.843Z",
338
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
339
+ reason: "Shared upgrade script: SimplePSMV2 implementation update"
340
+ },
341
+ UpgradeValidator: {
342
+ previousImplementation: "0x2Dd375041Be067E7d12bAB2106911Ce209EbD12f",
343
+ newImplementation: "0x9E70e1D07AB11ac9dD37B67AA091Efe97d7Ed84b",
344
+ upgradedAt: "2026-07-30T09:32:13.726Z",
345
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
346
+ reason: "Shared upgrade script: UpgradeValidator implementation update"
347
+ },
348
+ LITActionValidator: {
349
+ previousImplementation: "0xE2f99EA35b4DA01A66338427EC9077581d28FDb5",
350
+ newImplementation: "0x8FF30Fab0cC09C67dF6DF0ee017f817d5B101457",
351
+ upgradedAt: "2026-07-30T09:30:13.928Z",
352
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
353
+ reason: "Shared upgrade script: LITActionValidator implementation update"
354
+ },
355
+ ContractVersionRegistry: {
356
+ previousImplementation: "0x327Ced106C2804283994F0C0e2436E4B76AA7dAD",
357
+ newImplementation: "0xF3389De4bCeC735e4F6d35b9f71170D96037D1B7",
358
+ upgradedAt: "2026-07-03T19:50:48.918Z",
359
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
360
+ reason: "Shared upgrade script: ContractVersionRegistry implementation update"
361
+ },
362
+ PositionDelegateRegistry: {
363
+ previousImplementation: "0x301fa9AA527016D033e151b982C64cD8670a39E3",
364
+ newImplementation: "0xc681c48688cdAA966119E265e4a378ef8Fe0eBcA",
365
+ upgradedAt: "2026-07-30T09:02:27.050Z",
366
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
367
+ reason: "Reconciled implementation from chain"
368
+ },
369
+ OperationAuthorizationRegistry: {
370
+ previousImplementation: "0xF56090039c268B90f1867075813B5B36C40092B4",
371
+ newImplementation: "0xe0D981B60351f0f8fFDA2b50C8180Fb37CeF3883",
372
+ upgradedAt: "2026-07-03T20:23:37.669Z",
373
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
374
+ reason: "Shared upgrade script: OperationAuthorizationRegistry implementation update"
375
+ },
376
+ FeeRecipientRegistry: {
377
+ previousImplementation: "0xd08513a7cB2dd354B26cDDf549616F12054c34c9",
378
+ newImplementation: "0x44057f5Ca13B1C3a74E5507c372704F3c8c5834f",
379
+ upgradedAt: "2026-07-30T09:23:25.934Z",
380
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
381
+ reason: "Shared upgrade script: FeeRecipientRegistry implementation update"
382
+ },
383
+ BitcoinProviderRegistry: {
384
+ previousImplementation: "0xc5899d53426aD9354CEdAFe3002cbd3aBfAC46ab",
385
+ newImplementation: "0x37A8D9a57f9dEa7ae7D5B7BC7B1BB61a80960eB7",
386
+ upgradedAt: "2026-07-30T09:26:01.725Z",
387
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
388
+ reason: "Shared upgrade script: BitcoinProviderRegistry implementation update"
389
+ },
390
+ BitcoinWithdrawalAddressRegistry: {
391
+ previousImplementation: "0xFF270BC4470dBA80430Bd1a3a66EB691599354fA",
392
+ newImplementation: "0x76E0a2c9d89562fD7c50b5f554d7fa25957e39Db",
393
+ upgradedAt: "2026-07-07T16:56:49.844Z",
394
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
395
+ reason: "Shared upgrade script: BitcoinWithdrawalAddressRegistry implementation update"
396
+ },
397
+ AgentDelegationRegistry: {
398
+ previousImplementation: "0xE931E4b9ceF2A48Ac7D57192da4B523756cFC310",
399
+ newImplementation: "0xE931E4b9ceF2A48Ac7D57192da4B523756cFC310",
400
+ upgradedAt: "2026-09-06T15:06:02.814Z",
401
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
402
+ reason: "Reconciled implementation from chain"
403
+ }
404
+ },
405
+ history: {
406
+ LoanOperationsManagerModule: {
407
+ previous: "0x48D46188e25452148A743f8f6599b0E66C178512",
408
+ new: "0x1f70024444C5E89fFC232d2768C0359F7a13c6e7",
409
+ reason: "Storage layout scrambled \u2014 fresh deploy with F20 admin",
410
+ deployedAt: "2026-03-12T10:28:15.833Z",
411
+ deployedBy: "0x2767441E044aCd9bbC21a759fB0517494875092d"
412
+ },
413
+ freshDeploy: {
414
+ reason: "Full fresh deploy \u2014 F20 as admin, correct AdminModule on PM, no 0x276 dependency",
415
+ deployedAt: "2026-03-12T11:07:45.335Z",
416
+ deployedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
417
+ old: {
418
+ UCDToken: "0x86060fa5b3e01e003b8afd9c1295f1f444a7dc60",
419
+ UCDController: "0x703Ce9a94A8e42EC48499a79ef5c38a37664Fc5a",
420
+ PositionManagerCoreModule: "0x3Ff6F2E40B0d7c0557Da8fd04F699198Bdcb1b4C",
421
+ LiquidationManagerModule: "0xAC3886766Ac20d379b069BdFB97e401aBad6188C",
422
+ LoanOperationsManagerModule: "0x1f70024444C5E89fFC232d2768C0359F7a13c6e7",
423
+ CollateralManagerModule: "0x34E3DcA5d00570f323c62f09f46D8314674de723",
424
+ PositionManagerViews: "0xAC32f1845ace22e012aF30760fe9296b9aEb8a45",
425
+ PositionManager: "0x141D078A82F093F4Ea8345b9Bc9999C9008619Ae"
426
+ },
427
+ new: {
428
+ UCDToken: "0xdd817Ff47C9b8f81335Ac579895D8EA321Fa86Df",
429
+ UCDController: "0x360Bde4e489ee94E26601B206932De09EE60FF04",
430
+ PositionManagerCoreModule: "0xfFAA39a08887FeFB697eBC8691A8630CbCC33391",
431
+ LiquidationManagerModule: "0xC4AB00f39e7ceD812F5C67058C9fa44e15d40e76",
432
+ LoanOperationsManagerModule: "0xD3ADCCe9b46287763f723dC9a3FCfa59ab74b8bB",
433
+ CollateralManagerModule: "0x967E92c976Fc0fa8268D37D4d6B7245d912aA7dB",
434
+ PositionManagerViews: "0x3b970E41a0668508B4B2ACb83653b2A402F745AE",
435
+ PositionManager: "0xc767484Cced727D3fC0c5C2872BA6549967d7517"
436
+ }
437
+ }
438
+ },
439
+ pkpValidationDeployed: {
440
+ address: "0x8a1365A974F91e92D2dF5C51216EFCD408e209A8",
441
+ deployedAt: "2026-07-03T19:48:13.932Z",
442
+ deployedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
443
+ setPKPValidationRegistryTx: "0xab6b7e610c1ecf68da9a1e1150e61631e1f2a945bec12608c8357e03be25c4a5",
444
+ replacedAddress: "0xC8Ca02238fbCDAEbE6dbF804461D43F46F9406F4"
445
+ },
446
+ latestEnv: {
447
+ UCD_TOKEN: "0xdd817Ff47C9b8f81335Ac579895D8EA321Fa86Df",
448
+ UCD_CONTROLLER: "0x360Bde4e489ee94E26601B206932De09EE60FF04",
449
+ POSITION_MANAGER: "0x68e0507D982AEBF1D1C1Af8FBbd842327e2deeFF",
450
+ PKP_VALIDATION_REGISTRY: "0x8a1365A974F91e92D2dF5C51216EFCD408e209A8",
451
+ PKP_VALIDATION_REGISTRY_IMPL: "0x4f752c8c00b75d925CC9C7e693e1D9E45B6D195d",
452
+ PKP_VALIDATION_CID_V1: "0x1220246b43f71828ed1cfdc455b6bd4fd9e7382251ea634589f8da9b12f61d40cd51",
453
+ PKP_ETH_ADDRESS: "0x9624C46073E1d1F5AB975c67Fc899536d599bb57",
454
+ OPERATION_AUTHORIZATION_REGISTRY: "0x75f36E772df9616d40b02092642744D6fd702Df8",
455
+ UCD_MINT_VALIDATOR_ADDRESS: "0x4D9299055093938d0CD2F26C42A87260CB50adD8",
456
+ UCD_MINT_VALIDATOR_VERSION: 1,
457
+ BTC_WITHDRAWAL_VALIDATOR_ADDRESS: "0x7b9316cAA00B257F7CE30F7F6979bd6867BA9eE2",
458
+ BTC_WITHDRAWAL_VALIDATOR_VERSION: 1,
459
+ UPDATE_BALANCE_VALIDATOR_ADDRESS: "0x8A40C22B03348bc10df9ae0dc54346b4AE8e909c",
460
+ UPDATE_BALANCE_VALIDATOR_VERSION: 1,
461
+ PROCESS_PAYMENT_VALIDATOR_ADDRESS: "0x2800E9e335e51730132f7CB9F4912bCc2ED0636C",
462
+ PROCESS_PAYMENT_VALIDATOR_VERSION: 1,
463
+ EXTEND_POSITION_VALIDATOR_ADDRESS: "0xa8031d1F4515Ef021A13357E8462340cE1b8711b",
464
+ EXTEND_POSITION_VALIDATOR_VERSION: 1,
465
+ LOAN_OPERATIONS_MANAGER_MODULE: "0x3e05e760a87715207b7F4e8fD35EF7559BcA72C0",
466
+ TERM_MANAGER_MODULE: "0x94Adc6F9558368B1482197584f1fc7133Ecf835b",
467
+ COMMUNITY_MANAGER_MODULE: "0x7f8fC386fbD96ed690cdf6B1648d060d93Bf99d5",
468
+ POSITION_MANAGER_VIEWS: "0x3b970E41a0668508B4B2ACb83653b2A402F745AE",
469
+ CIRCUIT_BREAKER_MODULE: "0x3D0B2cAE481821E57BA9CC3807bCC0d0D7F18bd8",
470
+ ADMIN_MODULE: "0xAcd1f07915b17CA3727e7fE89BdF618A1545a1ed",
471
+ UCD_CONTROLLER_IMPL: "0x91204831bBCfcDCEa5fEE09B0d875778E9651690",
472
+ LOAN_OPERATIONS_MANAGER_MODULE_IMPL: "0x6Ad08177F264f441074921C437670D1fA5934676",
473
+ TERM_MANAGER_MODULE_IMPL: "0xA2D6543faFA9d84C16Cd5e5E34F746B6e138F54d",
474
+ CIRCUIT_BREAKER_MODULE_IMPL: "0x4b28F1d4ecBcc13b51a8d0f890e6d5bF4966EEB4",
475
+ ADMIN_MODULE_IMPL: "0x2905964e27BD78595cf8fFa6FFc5A99E54F399c4",
476
+ POSITION_MANAGER_VIEWS_IMPL: "0xA455B542cFb36AF8451fc420dB89e590E5c87cef",
477
+ POSITION_MANAGER_IMPL: "0xfA7413a4547F496BF223ed25DF443c17ef6D4668",
478
+ SIMPLE_PSM_V2: "0x19EcF7BA26e054fd4Ff06009A03070103dbBB058",
479
+ SIMPLE_PSM_V2_IMPL: "0xE38010BE47B389922A1cd4b533470F0af7d20101",
480
+ UCD_TOKEN_IMPL: "0xa6C8C4cfc7DD3dCE5F1259A4a1eAf8461aA8CeC8",
481
+ POSITION_MANAGER_CORE_MODULE: "0xfFAA39a08887FeFB697eBC8691A8630CbCC33391",
482
+ POSITION_MANAGER_CORE_MODULE_IMPL: "0x0E721048c066C5589C41f97785f7E5737ac2BEB3",
483
+ COLLATERAL_MANAGER_MODULE: "0x967E92c976Fc0fa8268D37D4d6B7245d912aA7dB",
484
+ COLLATERAL_MANAGER_MODULE_IMPL: "0xF57BBbb4818371605e308228A04F8Ec4Dcc5E7Ba",
485
+ LIQUIDATION_MANAGER_MODULE: "0xC4AB00f39e7ceD812F5C67058C9fa44e15d40e76",
486
+ LIQUIDATION_MANAGER_MODULE_IMPL: "0xCe7587C47094BBb3dCa13D7a2299Ec9beA6cd759",
487
+ BTC_SPEND_AUTHORIZER: "0xd7E9Eb5eE53f1d9ee55Dc162bBC7486bE437B6bD",
488
+ BTC_SPEND_AUTHORIZER_IMPL: "0xf3282B5A1AE6428ee1b08cfaAF4EB4e198877484",
489
+ UPGRADE_VALIDATOR: "0x592e650edD9bA26ecc407989fdd6F9cdcDeC27A6",
490
+ UPGRADE_VALIDATOR_IMPL: "0x9E70e1D07AB11ac9dD37B67AA091Efe97d7Ed84b",
491
+ BITCOIN_PROVIDER_REGISTRY: "0xbfA0c48B070D0a9A9CD27469AeacFD2d4261cEE2",
492
+ BITCOIN_PROVIDER_REGISTRY_IMPL: "0x37A8D9a57f9dEa7ae7D5B7BC7B1BB61a80960eB7",
493
+ LIT_ACTION_VALIDATOR: "0x54eECd7C90F8A8fac27749Ba30BbE8AFBAccc856",
494
+ LIT_ACTION_VALIDATOR_IMPL: "0x8FF30Fab0cC09C67dF6DF0ee017f817d5B101457",
495
+ CONTRACT_VERSION_REGISTRY: "0x97E43AA6aFF2C0cf659d3aE501658D2Ef6777522",
496
+ CONTRACT_VERSION_REGISTRY_IMPL: "0xF3389De4bCeC735e4F6d35b9f71170D96037D1B7",
497
+ MOCK_USDC_TOKEN: "0x96409A98e0D322d6566b7F44a0fAbD1BD4ce2AEc",
498
+ MOCK_USDT_TOKEN: "0xF8b7fB38b17a310960E47805Be9adba0b0e0394D",
499
+ POSITION_DELEGATE_REGISTRY: "0x482369De283622E7b05731875ec137d4E3D208F9",
500
+ POSITION_DELEGATE_REGISTRY_IMPL: "0xc681c48688cdAA966119E265e4a378ef8Fe0eBcA",
501
+ AGENT_MODULE: "0xefb8C29C1e7e92ed7d81a52dbedaed74e37fe380",
502
+ FEE_RECIPIENT_REGISTRY: "0x95795F8403DDb629E8527B2934C4e71f5fC0C374",
503
+ FEE_RECIPIENT_REGISTRY_IMPL: "0x44057f5Ca13B1C3a74E5507c372704F3c8c5834f",
504
+ OPERATION_AUTHORIZATION_REGISTRY_IMPL: "0xe0D981B60351f0f8fFDA2b50C8180Fb37CeF3883",
505
+ BITCOIN_WITHDRAWAL_ADDRESS_REGISTRY: "0x6376D392097F0A81e51BD83960A97EA20eaf1dbe",
506
+ BITCOIN_WITHDRAWAL_ADDRESS_REGISTRY_IMPL: "0x76E0a2c9d89562fD7c50b5f554d7fa25957e39Db",
507
+ AGENT_DELEGATION_REGISTRY: "0x6AE7fc6bE0925126b9D25b1B7Ce5AD5d127ec025",
508
+ AGENT_DELEGATION_REGISTRY_IMPL: "0x56a5af2C1549EFf70feD1F3BB8E1997717A84973",
509
+ DH_AGENT_DELEGATE: "0xa5A14489ae883960df6E1463A41a47aBE9Ecc5AF"
510
+ }
511
+ };
204
512
  var SEPOLIA_CONTRACTS = {
205
513
  UpgradeValidator: "0x592e650edD9bA26ecc407989fdd6F9cdcDeC27A6",
206
514
  UCDToken: "0xdd817Ff47C9b8f81335Ac579895D8EA321Fa86Df",
@@ -231,6 +539,231 @@ var SEPOLIA_CONTRACTS = {
231
539
  DHAgentDelegate: "0xa5A14489ae883960df6E1463A41a47aBE9Ecc5AF",
232
540
  AgentModuleFactory: "0x1Fd3aCa2C030Cf77ce28Af9694D3Bb3034ACa2E5"
233
541
  };
542
+ var MAINNET_DEPLOYMENT = {
543
+ network: "mainnet",
544
+ chainId: 1,
545
+ timestamp: "2026-06-16T16:40:50.629Z",
546
+ deployer: "0xEba7BfAeB35ee18408b424Ee0BB45AdDf776589f",
547
+ contracts: {
548
+ MessageHashBuilder: "0xaDE074023F9e87f6AEaF679e36B5d7B93FA22269",
549
+ LITActionValidator: "0xD2c5d59c2CC5c409AC65ce0A817236aeC6869512",
550
+ UpgradeValidator: "0xC46Ae71F22e3741A6CF46E399aE914C4868fEbed",
551
+ UCDToken: "0xaAaB6B05E5EecB015898483d4e6703d7F218850b",
552
+ UCDController: "0x4b4f8063048bCD59D469219E3f07C6aaDF4f6157",
553
+ PositionManagerCoreModule: "0xd895B685914c1BE4e1c7aab9f89a90c203DE8d22",
554
+ TermManagerModule: "0xDB99CdF883ffa38acD099bC39F8d1f4508c9239E",
555
+ LoanOperationsManagerModule: "0x2561974A40F1AEed1251d0A090A83cF8536FB9E9",
556
+ BTCSpendAuthorizer: "0xfBbF108486fa07F1B06a811C5b66ed68DD9c508a",
557
+ CollateralManagerModule: "0x2Eb74FEc478218f5C260aAc78Bb8eC297F9d7135",
558
+ LiquidationManagerModule: "0x74B28695352E7bf736D6c9F76ccb7B4439477De9",
559
+ CircuitBreakerModule: "0xF7b545d3a4Ee056D06909AB367E2F7bFFE3cB1BC",
560
+ AdminModule: "0x0023B71B586795eE5fa4E83E384345C1EC8Bb946",
561
+ PositionManagerViews: "0x8B57954eA338c6A6bfF1457f71080e25baFF3937",
562
+ PositionManager: "0x12A1836e56139ccaD8722B89519d84233efc224B",
563
+ OperationAuthorizationRegistry: "0xD4505645b724754f5170a2027804a4265e860d44",
564
+ ContractVersionRegistry: "0x5e18f77d01940dA5B1D986D373D9A6ad0767008d",
565
+ FeeRecipientRegistry: "0x8fbCAAdA198E1C246ecEb2fB021C5A3d8050c6B3",
566
+ PositionDelegateRegistry: "0xf0aa2678aD4F60f49e8F7725089B5E86B7F8FE4C",
567
+ BitcoinProviderRegistry: "0x4ab3Fb96e02893Ed6FAa61bad1918390c8DbbFFC",
568
+ BitcoinWithdrawalAddressRegistry: "0xf667f77FDba7458345f227eB6Bfe4148243E7270",
569
+ SimplePSMV2: "0xfE0C14B4E614f40Bf58845b4B04CeD17fd116532",
570
+ PKPValidation: "0x29922d3ccb86516f6C24F89f1eb3068655ca7Fa0",
571
+ AgentDelegationRegistry: "0x54853b7E91ce2Be34ce65655D80c4447e67187Fa",
572
+ DHAgentDelegate: "0x70232d0caBe529e29a01A442423d7e03BBd414c8"
573
+ },
574
+ upgraded: {
575
+ SimplePSMV2: {
576
+ previousImplementation: "0x1a555FB8D6EDdF755a4575E541651EdB8B49a15A",
577
+ newImplementation: "0x8717761444b1822c2E6916aB5bD9ac96c91b6DF5",
578
+ upgradedAt: "2026-07-06T10:41:35.000Z",
579
+ upgradedBy: "AdminModule/Safe audit-batch upgradeToAndCall; executed by 0xEba7BfAeB35ee18408b424Ee0BB45AdDf776589f in tx 0x5052d1559d56b8e178699183e56c4fd84a163e987365c5af9c8d669a723c35d6 (block 25472960)",
580
+ reason: "Reconciled from chain \u2014 mainnet audit rollout batch (cross-ref onchain-auth/.safe-batches/mainnet-audit-execute.json)",
581
+ executeTx: "0x5052d1559d56b8e178699183e56c4fd84a163e987365c5af9c8d669a723c35d6",
582
+ block: 25472960
583
+ },
584
+ CollateralManagerModule: {
585
+ previousImplementation: "0x1919860e528Cd2AbbD31a17858c986b8aCc8C185",
586
+ newImplementation: "0x55110B9dd6B2c9f812564e7a1ef42b3c76E1A3Bb",
587
+ upgradedAt: "2026-07-08T20:33:59.000Z",
588
+ upgradedBy: "AdminModule generic-op 0x740efe0cfe85044479cbd8ee3058aa244057d90703dd2b37044dd6787cbf3485 (3-of-5 ADMIN_ROLE Safes, 24h timelock; executed via Safe 0xfb3B8cbeFB7D666A6Af34C53e189EdC31862a7be, submitted by EOA 0x2002827d34A781883Ec4c83c36ECC140c3911F2B, tx 0x430c8e450f12d3d9359cde356ac5e2ef39661d7a89884b5674a596c1090f6cff, block 25490267)",
589
+ reason: "Validator gas fix (#420): BitcoinAddressValidator packed-table lookups; VERSION 1.3.0 -> 1.3.1. NOTE: not part of the audit rollout batch \u2014 reconcile-deployment-record.ts --write templates every row as 'audit rollout batch'; this hand-authored provenance is the accurate one, restore it if --write flattens it again.",
590
+ executeTx: "0x430c8e450f12d3d9359cde356ac5e2ef39661d7a89884b5674a596c1090f6cff",
591
+ block: 25490267
592
+ },
593
+ BitcoinWithdrawalAddressRegistry: {
594
+ previousImplementation: "0x11731bFEC3068F2cc19D016381dfEA3B93013b1C",
595
+ newImplementation: "0x190c08300Ae650fb88ed8156445BBeb13bE9E8a3",
596
+ upgradedAt: "2026-07-08T20:33:59.000Z",
597
+ upgradedBy: "AdminModule generic-op 0x2603a486c0f34554b864cc1d909b325c7e105331da10ec0fd7e0b9373fa76207 (3-of-5 ADMIN_ROLE Safes, 24h timelock; executed via Safe 0xfb3B8cbeFB7D666A6Af34C53e189EdC31862a7be, submitted by EOA 0x2002827d34A781883Ec4c83c36ECC140c3911F2B, tx 0x430c8e450f12d3d9359cde356ac5e2ef39661d7a89884b5674a596c1090f6cff, block 25490267)",
598
+ reason: "Validator gas fix (#420): BitcoinAddressValidator packed-table lookups; VERSION 1.0.0 -> 1.0.1. NOTE: not part of the audit rollout batch \u2014 see the CollateralManagerModule row above.",
599
+ executeTx: "0x430c8e450f12d3d9359cde356ac5e2ef39661d7a89884b5674a596c1090f6cff",
600
+ block: 25490267
601
+ },
602
+ UCDController: {
603
+ previousImplementation: "0x16f94AcC78cE87bEeBCfF90552091B3EfC071E48",
604
+ newImplementation: "0x28B8cAB89D89B3F83581FD2290de2Ce84535bd0A",
605
+ upgradedAt: "2026-07-06T10:41:59.000Z",
606
+ upgradedBy: "AdminModule/Safe audit-batch upgradeToAndCall; executed by 0xEba7BfAeB35ee18408b424Ee0BB45AdDf776589f in tx 0xf6609d3fa43b460d953c85d8d7265b59bf177723042db79a6a700571bad777b7 (block 25472962)",
607
+ reason: "Reconciled from chain \u2014 mainnet audit rollout batch (cross-ref onchain-auth/.safe-batches/mainnet-audit-execute.json)",
608
+ executeTx: "0xf6609d3fa43b460d953c85d8d7265b59bf177723042db79a6a700571bad777b7",
609
+ block: 25472962
610
+ },
611
+ PositionManagerCoreModule: {
612
+ previousImplementation: "0x6C8b0FB93F8d0239254aefaC24d4264cA2F8AAeB",
613
+ newImplementation: "0x5067Ea1d40b2Aaf4ad693bD9b6e7463C1A29E849",
614
+ upgradedAt: "2026-07-06T08:02:35.000Z",
615
+ upgradedBy: "AdminModule/Safe audit-batch upgradeToAndCall; executed by 0x2002827d34A781883Ec4c83c36ECC140c3911F2B in tx 0xeb2bfe77d46394b6d0afd46beb0a80cd9beb91f6771ccb59ff9fba27d4af4f3d (block 25472167)",
616
+ reason: "Reconciled from chain \u2014 mainnet audit rollout batch (cross-ref onchain-auth/.safe-batches/mainnet-audit-execute.json)",
617
+ executeTx: "0xeb2bfe77d46394b6d0afd46beb0a80cd9beb91f6771ccb59ff9fba27d4af4f3d",
618
+ block: 25472167
619
+ },
620
+ LiquidationManagerModule: {
621
+ previousImplementation: "0xc2f4517eeD7c4c516939a64c7938a6ab432D99c4",
622
+ newImplementation: "0xe7444C1d9652dAb31BaAdBE4C7c7e7Df3515dA46",
623
+ upgradedAt: "2026-07-06T10:40:47.000Z",
624
+ upgradedBy: "AdminModule/Safe audit-batch upgradeToAndCall; executed by 0xEba7BfAeB35ee18408b424Ee0BB45AdDf776589f in tx 0xc173b97af68cc9172ea0ddc91a2c90bf02eac1505e749d92aa044aa69891f48c (block 25472956)",
625
+ reason: "Reconciled from chain \u2014 mainnet audit rollout batch (cross-ref onchain-auth/.safe-batches/mainnet-audit-execute.json)",
626
+ executeTx: "0xc173b97af68cc9172ea0ddc91a2c90bf02eac1505e749d92aa044aa69891f48c",
627
+ block: 25472956
628
+ },
629
+ BTCSpendAuthorizer: {
630
+ previousImplementation: "0x40c9e8C46C65E0A57BB63da5368868A9E8Df81A5",
631
+ newImplementation: "0x00D7a47798E8ff169104b748131703B78f23390C",
632
+ upgradedAt: "2026-09-09T12:05:35.000Z",
633
+ upgradedBy: "AdminModule generic op 0xc0214ff38bb454864a34f6482dcd03570b3fd04171c84be2c20184afb1a2e161 (bsa-1-7-0 ceremony: proposed by seat 0x3030C0414B6d95aA9d5A57269E51a347fCBaB472 2026-09-08T11:35:23Z, 3/3 seat signatures, 24h timelock); executeGenericAdminOperation sent by 0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6 in tx 0x77cd231966c546177bd8f1a07bd4e705afd5c2dfbd110b096836401679c0c69c (block 25939703)",
634
+ reason: "BTCSpendAuthorizer 1.6.0 -> 1.7.0: allow a full-vault sweep (targetAmount == satoshis); TargetMustLeaveFeeRoom -> TargetExceedsInputValue (PR #849; mainnet incidents 2026-09-04 and 2026-09-07). Impl deployed by 0xEba7BfAeB35ee18408b424Ee0BB45AdDf776589f at nonce 430 from source 0a7c535a1 (contracts/src identical to main 99b335f77). Cross-ref onchain-auth/.safe-batches/mainnet-bsa-1-7-0-{propose,sign,execute}.json and docs/mainnet-bsa-1-7-0-ceremony-2026-09-08.md",
635
+ executeTx: "0x77cd231966c546177bd8f1a07bd4e705afd5c2dfbd110b096836401679c0c69c",
636
+ block: 25939703
637
+ },
638
+ PositionManager: {
639
+ previousImplementation: "0x600Dc0D1C2c0F94882B6Bc09172f8650047Ad5B1",
640
+ newImplementation: "0x2e7170d6Fb15A876dB726732e72e63109bcB916d",
641
+ upgradedAt: "2026-08-03T08:34:23.000Z",
642
+ upgradedBy: "AdminModule generic-op 0x69b79a906ed2 (3-of-3 signatures, 24h timelock; proposed by 0xEba7BfAeB35ee18408b424Ee0BB45AdDf776589f, executed in the release batch onchain-auth/.safe-batches/mainnet-release-execute-B.json, submitted by EOA 0x2002827d34A781883Ec4c83c36ECC140c3911F2B, tx 0xf1f8d5fc13f45d7a3f932bf1a2d6e29381fdd41cd31298ad785bf7688df07fe6, block 25673200)",
643
+ reason: "2026-08 agent-stack release, Execute B: agent-delegation digest rebind. makePayment/mintUCD/extendPosition now bind their EIP-712 digest to the STORED borrower rather than msg.sender, so a scoped AgentDelegationRegistry grant can submit; withdrawBTC still binds msg.sender and stays non-delegable. Also adds setViews(address), which the same batch used to repoint PM at the replacement PositionManagerViews. NOTE: VERSION reads 1.5.4 on BOTH sides of this upgrade \u2014 verify by implementation ADDRESS, never by VERSION(). NOTE: not the July audit rollout batch \u2014 reconcile-deployment-record.ts --write templates every row with that text; this hand-authored provenance is the accurate one, restore it if --write flattens it again.",
644
+ executeTx: "0xf1f8d5fc13f45d7a3f932bf1a2d6e29381fdd41cd31298ad785bf7688df07fe6",
645
+ block: 25673200
646
+ },
647
+ LoanOperationsManagerModule: {
648
+ previousImplementation: "0x56671D671e492Dae625413d463D47605Cf54edf6",
649
+ newImplementation: "0x7d90aAB4466f59BA9aC9C7a9BF14dC53734336e7",
650
+ upgradedAt: "2026-07-06T10:41:23.000Z",
651
+ upgradedBy: "AdminModule/Safe audit-batch upgradeToAndCall; executed by 0xEba7BfAeB35ee18408b424Ee0BB45AdDf776589f in tx 0x327ae9f7a3917788d22dfe95611e1afcd18583f210b03a119d9f04eca50b9e7a (block 25472959)",
652
+ reason: "Reconciled from chain \u2014 mainnet audit rollout batch (cross-ref onchain-auth/.safe-batches/mainnet-audit-execute.json)",
653
+ executeTx: "0x327ae9f7a3917788d22dfe95611e1afcd18583f210b03a119d9f04eca50b9e7a",
654
+ block: 25472959
655
+ },
656
+ OperationAuthorizationRegistry: {
657
+ previousImplementation: "0x327662917Ac8EEda47851d74AF6A151348636fCe",
658
+ newImplementation: "0x493118746840EDB2D396E71632D2E774CA14070e",
659
+ upgradedAt: "2026-07-06T10:41:47.000Z",
660
+ upgradedBy: "AdminModule/Safe audit-batch upgradeToAndCall; executed by 0xEba7BfAeB35ee18408b424Ee0BB45AdDf776589f in tx 0x9820e259700865a281b8376e248044048ba2fed1d17c811ac66ac54d36711a5b (block 25472961)",
661
+ reason: "Reconciled from chain \u2014 mainnet audit rollout batch (cross-ref onchain-auth/.safe-batches/mainnet-audit-execute.json)",
662
+ executeTx: "0x9820e259700865a281b8376e248044048ba2fed1d17c811ac66ac54d36711a5b",
663
+ block: 25472961
664
+ },
665
+ BitcoinProviderRegistry: {
666
+ newImplementation: "0x7Bc9473E45fb3EA594e8b13992F57D0444902ddB",
667
+ upgradedAt: "2026-06-16T17:51:11.000Z",
668
+ upgradedBy: "AdminModule/Safe audit-batch upgradeToAndCall; executed by 0xEba7BfAeB35ee18408b424Ee0BB45AdDf776589f in tx 0xf97e21ce2bc23876d60414c24ce6f45b2f0dd5e1ce42aca84f245f90f18ea17d (block 25331694)",
669
+ reason: "Reconciled from chain \u2014 mainnet audit rollout batch (cross-ref onchain-auth/.safe-batches/mainnet-audit-execute.json)",
670
+ executeTx: "0xf97e21ce2bc23876d60414c24ce6f45b2f0dd5e1ce42aca84f245f90f18ea17d",
671
+ block: 25331694
672
+ },
673
+ FeeRecipientRegistry: {
674
+ newImplementation: "0xEfAeB37faAdc2D420dC6F99128296B79fDDe74bE",
675
+ upgradedAt: "2026-06-16T17:30:35.000Z",
676
+ upgradedBy: "AdminModule/Safe audit-batch upgradeToAndCall; executed by 0xEba7BfAeB35ee18408b424Ee0BB45AdDf776589f in tx 0xc8f592166923f83b9b0cfc44e67c2ec75f79ca95be4f8ffa01654f702eaac502 (block 25331591)",
677
+ reason: "Reconciled from chain \u2014 mainnet audit rollout batch (cross-ref onchain-auth/.safe-batches/mainnet-audit-execute.json)",
678
+ executeTx: "0xc8f592166923f83b9b0cfc44e67c2ec75f79ca95be4f8ffa01654f702eaac502",
679
+ block: 25331591
680
+ },
681
+ PositionDelegateRegistry: {
682
+ previousImplementation: "0x3c7B975c03F549fe0656D9cbbA218BcF1C7092af",
683
+ newImplementation: "0x560a87251b3D306116F32D6e197FD068577e5349",
684
+ upgradedAt: "2026-08-02T18:34:35.000Z",
685
+ upgradedBy: "AdminModule generic-op 0x9acc88e33647ed5158ea161728c60ee4afecea7e3767735e7c1af0bb10ee0cb5 (3-of-3 signatures, 24h timelock; proposed by 0xEba7BfAeB35ee18408b424Ee0BB45AdDf776589f, executed in the release batch onchain-auth/.safe-batches/mainnet-release-execute-A.json, submitted by EOA 0x2002827d34A781883Ec4c83c36ECC140c3911F2B, tx 0xf0f237f6c4e958c37de556571908283c59c3fba6ebf9fa3cefb956f37e315a10, block 25669024)",
686
+ reason: "2026-08 agent-stack release: PositionDelegateRegistry VERSION 1.1.0 -> 2.0.0 via upgradeToAndCall + initializeV2(AdminModule, registrar 0x5D54E0BE\u2026, pauser 0xC205Ae99\u2026) \u2014 kill-switch, deny-only registrar, permanent delegate burn. NOTE: not the July audit rollout batch \u2014 reconcile-deployment-record.ts --write templates every row with that text; this hand-authored provenance is the accurate one, restore it if --write flattens it again.",
687
+ executeTx: "0xf0f237f6c4e958c37de556571908283c59c3fba6ebf9fa3cefb956f37e315a10",
688
+ block: 25669024
689
+ },
690
+ PositionManagerViews: {
691
+ previousImplementation: "0xE68DC096A65Ecddbc6A9b5c6e5f878e2CE143Bfe",
692
+ newImplementation: "0x8fe7aF14dB9Bef814c4c8fBc0ce206Cb17F25E8e",
693
+ proxy: "0x8B57954eA338c6A6bfF1457f71080e25baFF3937",
694
+ upgradedAt: "2026-10-17T12:16:35.000Z",
695
+ upgradedBy: "AdminModule generic-op 0x60494d283c30afb95748d8c1bb95b800ab8f17d2a2a45fb04784ebde7b05393c upgradeToAndCall(0x8fe7aF14, initializeV2(AdminModule)) \u2014 3-of-3 signatures (0x3030C041, 0x52b67f31, 0xfb3B8cbe), 24h timelock; proposed by Safe 0x3030C0414B6d95aA9d5A57269E51a347fCBaB472 in tx 0xffe3dd376736d542a89f944290b876d8eb8e5c3df8fc8349bc34a963106dd0f2, executed from Safe 0x52b67f31Ca7A58Ef20322512EB359b7D4758C868 via onchain-auth/.safe-batches/mainnet-pmv-backing-view-execute.json",
696
+ reason: "PoR vault-address gaps (tasks/vault-address-por-gaps-plan-2026-10-02.md, runbook tasks/RUNBOOK-pmv-backing-view-mainnet-2026-10-02.md). VERSION 1.1.1 -> 1.1.2: adds getBackingVaults (paged backing set: positions with ucdDebt > 0 and their stored vault addresses), locks the implementation (_disableInitializers constructor), and the call data initializeV2(AdminModule) consumes the previously OPEN reinitializer(2) (Cloudflare audit finding) without changing adminModule. No storage layout change. Post-upgrade: scripts/audit/backing-vaults-verify.ts PASS @ block 26226360 (72 positions, 15 backing vaults, view == independent scan; Initializable version 2; impl locked). Pre-proposed rollback op 0x43f50eb30d360a779f24c8229dd2d3b56a5d9eb40f056d3cd13047e5f0f51e84 (1/3 sigs) is to be cancelled by the proposer Safe via mainnet-pmv-backing-view-cancel-REVERT.json.",
697
+ executeTx: "0xbb36e557141827a0de990b7124ef8615352a2eb8c197efb3ce3a63998994fef5",
698
+ block: 26212216,
699
+ history: [
700
+ {
701
+ previousImplementation: "0x9225647a30bbACA4Acc0491B786869036914242e",
702
+ newImplementation: "0xE68DC096A65Ecddbc6A9b5c6e5f878e2CE143Bfe",
703
+ proxy: "0x8B57954eA338c6A6bfF1457f71080e25baFF3937",
704
+ upgradedAt: "2026-08-03T08:34:23.000Z",
705
+ upgradedBy: "REPLACED, not upgraded. Fresh ERC1967Proxy (atomically initialized) + AdminModule generic-op 0x848a97186f0d PositionManager.setViews(proxy) \u2014 3-of-3, 24h timelock, executed in onchain-auth/.safe-batches/mainnet-release-execute-B.json",
706
+ reason: "2026-08 agent-stack release. The mainnet PositionManagerViews at 0x9225647a was deployed as a BARE implementation (EIP-1967 slot 0x00), so upgradeToAndCall reverts UUPSUnauthorizedCallContext \u2014 it could never be upgraded. PositionManager.setViews (added in the same Execute B batch) removed the repoint blocker, so Views was replaced behind a new proxy rather than upgraded. This makes the Pashov F3 renewal debt-ceiling check REACHABLE for the first time: ExceedsMaxLoan (0x499e7985) is present in 0xE68DC096 and absent from 0x9225647a. Views holds no protocol state (8 wiring slots + roles + pause), which is what made replacement safe. The old contract is ABANDONED, not decommissioned \u2014 it stays live and callable as the rollback target for setViews. NOTE: VERSION reads 1.1.1 on both sides; verify by address.",
707
+ executeTx: "0xf1f8d5fc13f45d7a3f932bf1a2d6e29381fdd41cd31298ad785bf7688df07fe6",
708
+ block: 25673200
709
+ }
710
+ ]
711
+ },
712
+ AgentDelegationRegistry: {
713
+ newImplementation: "0xa9fF405Edd4329fc3159a64F56B37EBD253e4928",
714
+ upgradedAt: "2026-07-31T22:03:35.000Z",
715
+ upgradedBy: "AdminModule/Safe audit-batch upgradeToAndCall; executed by 0xEba7BfAeB35ee18408b424Ee0BB45AdDf776589f in tx 0x8fed0ab7eee3aaaa3792a35b40b0ef74bd09cfb1a175934afd846bee546048d4 (block 25655710)",
716
+ reason: "Reconciled from chain \u2014 mainnet audit rollout batch (cross-ref onchain-auth/.safe-batches/mainnet-audit-execute.json)",
717
+ executeTx: "0x8fed0ab7eee3aaaa3792a35b40b0ef74bd09cfb1a175934afd846bee546048d4",
718
+ block: 25655710
719
+ }
720
+ },
721
+ latestEnv: {
722
+ CONTRACT_VERSION_REGISTRY: "0x5e18f77d01940dA5B1D986D373D9A6ad0767008d",
723
+ CONTRACT_VERSION_REGISTRY_IMPL: "0x1Cf8C10fE37092320CB9E7082e0bB482a6B3acE0",
724
+ FEE_RECIPIENT_REGISTRY: "0x8fbCAAdA198E1C246ecEb2fB021C5A3d8050c6B3",
725
+ FEE_RECIPIENT_REGISTRY_IMPL: "0xEfAeB37faAdc2D420dC6F99128296B79fDDe74bE",
726
+ POSITION_DELEGATE_REGISTRY: "0xf0aa2678aD4F60f49e8F7725089B5E86B7F8FE4C",
727
+ POSITION_DELEGATE_REGISTRY_IMPL: "0x560a87251b3D306116F32D6e197FD068577e5349",
728
+ BITCOIN_PROVIDER_REGISTRY: "0x4ab3Fb96e02893Ed6FAa61bad1918390c8DbbFFC",
729
+ BITCOIN_PROVIDER_REGISTRY_IMPL: "0x7Bc9473E45fb3EA594e8b13992F57D0444902ddB",
730
+ BITCOIN_WITHDRAWAL_ADDRESS_REGISTRY: "0xf667f77FDba7458345f227eB6Bfe4148243E7270",
731
+ BITCOIN_WITHDRAWAL_ADDRESS_REGISTRY_IMPL: "0x190c08300Ae650fb88ed8156445BBeb13bE9E8a3",
732
+ SIMPLE_PSM_V2: "0xfE0C14B4E614f40Bf58845b4B04CeD17fd116532",
733
+ SIMPLE_PSM_V2_IMPL: "0x8717761444b1822c2E6916aB5bD9ac96c91b6DF5",
734
+ UCD_CONTROLLER: "0x4b4f8063048bCD59D469219E3f07C6aaDF4f6157",
735
+ UCD_CONTROLLER_IMPL: "0x28B8cAB89D89B3F83581FD2290de2Ce84535bd0A",
736
+ UCD_TOKEN: "0xaAaB6B05E5EecB015898483d4e6703d7F218850b",
737
+ UCD_TOKEN_IMPL: "0x5f09C660036021D7e916DF47234C24a2536C3A72",
738
+ POSITION_MANAGER_CORE_MODULE: "0xd895B685914c1BE4e1c7aab9f89a90c203DE8d22",
739
+ POSITION_MANAGER_CORE_MODULE_IMPL: "0x5067Ea1d40b2Aaf4ad693bD9b6e7463C1A29E849",
740
+ TERM_MANAGER_MODULE: "0xDB99CdF883ffa38acD099bC39F8d1f4508c9239E",
741
+ TERM_MANAGER_MODULE_IMPL: "0x971f63f92990e59270E971612dd399fF2C63B0c3",
742
+ COLLATERAL_MANAGER_MODULE: "0x2Eb74FEc478218f5C260aAc78Bb8eC297F9d7135",
743
+ COLLATERAL_MANAGER_MODULE_IMPL: "0x55110B9dd6B2c9f812564e7a1ef42b3c76E1A3Bb",
744
+ LIQUIDATION_MANAGER_MODULE: "0x74B28695352E7bf736D6c9F76ccb7B4439477De9",
745
+ LIQUIDATION_MANAGER_MODULE_IMPL: "0xe7444C1d9652dAb31BaAdBE4C7c7e7Df3515dA46",
746
+ CIRCUIT_BREAKER_MODULE: "0xF7b545d3a4Ee056D06909AB367E2F7bFFE3cB1BC",
747
+ CIRCUIT_BREAKER_MODULE_IMPL: "0x40e8328D61342C6ADC51dfdC723296c908f95038",
748
+ ADMIN_MODULE: "0x0023B71B586795eE5fa4E83E384345C1EC8Bb946",
749
+ ADMIN_MODULE_IMPL: "0xb4C5C7E051A1e672F014B25CB5D55B225Aa0D512",
750
+ BTC_SPEND_AUTHORIZER: "0xfBbF108486fa07F1B06a811C5b66ed68DD9c508a",
751
+ BTC_SPEND_AUTHORIZER_IMPL: "0x00D7a47798E8ff169104b748131703B78f23390C",
752
+ POSITION_MANAGER_VIEWS: "0x8B57954eA338c6A6bfF1457f71080e25baFF3937",
753
+ POSITION_MANAGER_VIEWS_IMPL: "0xE68DC096A65Ecddbc6A9b5c6e5f878e2CE143Bfe",
754
+ POSITION_MANAGER: "0x12A1836e56139ccaD8722B89519d84233efc224B",
755
+ POSITION_MANAGER_IMPL: "0x2e7170d6Fb15A876dB726732e72e63109bcB916d",
756
+ LOAN_OPERATIONS_MANAGER_MODULE: "0x2561974A40F1AEed1251d0A090A83cF8536FB9E9",
757
+ LOAN_OPERATIONS_MANAGER_MODULE_IMPL: "0x7d90aAB4466f59BA9aC9C7a9BF14dC53734336e7",
758
+ UPGRADE_VALIDATOR: "0xC46Ae71F22e3741A6CF46E399aE914C4868fEbed",
759
+ UPGRADE_VALIDATOR_IMPL: "0x4f835e77D1211299a1cbb8Aa2b42d9B390cC95CA",
760
+ OPERATION_AUTHORIZATION_REGISTRY: "0xD4505645b724754f5170a2027804a4265e860d44",
761
+ OPERATION_AUTHORIZATION_REGISTRY_IMPL: "0x493118746840EDB2D396E71632D2E774CA14070e",
762
+ AGENT_DELEGATION_REGISTRY: "0x54853b7E91ce2Be34ce65655D80c4447e67187Fa",
763
+ AGENT_DELEGATION_REGISTRY_IMPL: "0xa9fF405Edd4329fc3159a64F56B37EBD253e4928",
764
+ DH_AGENT_DELEGATE: "0x70232d0caBe529e29a01A442423d7e03BBd414c8"
765
+ }
766
+ };
234
767
  var MAINNET_CONTRACTS = {
235
768
  MessageHashBuilder: "0xaDE074023F9e87f6AEaF679e36B5d7B93FA22269",
236
769
  LITActionValidator: "0xD2c5d59c2CC5c409AC65ce0A817236aeC6869512",
@@ -258,6 +791,31 @@ var MAINNET_CONTRACTS = {
258
791
  AgentDelegationRegistry: "0x54853b7E91ce2Be34ce65655D80c4447e67187Fa",
259
792
  DHAgentDelegate: "0x70232d0caBe529e29a01A442423d7e03BBd414c8"
260
793
  };
794
+ var LOCALHOST_DEPLOYMENT = {
795
+ network: "localhost",
796
+ chainId: 1337,
797
+ timestamp: "2026-07-20T19:45:58.514Z",
798
+ deployer: "",
799
+ contracts: {
800
+ MessageHashBuilder: "0xa82fF9aFd8f496c3d6ac40E2a0F282E47488CFc9",
801
+ LITActionValidator: "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853",
802
+ UpgradeValidator: "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318",
803
+ UCDToken: "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512",
804
+ UCDController: "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9",
805
+ PositionManagerCoreModule: "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e",
806
+ TermManagerModule: "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82",
807
+ LoanOperationsManagerModule: "0x68B1D87F95878fE05B998F19b66F4baba5De1aed",
808
+ BTCSpendAuthorizer: "0xc6e7DF5E7b4f2A278906862b61205850344D4e7d",
809
+ CollateralManagerModule: "0x322813Fd9A801c5507c9de605d63CEA4f2CE6c44",
810
+ LiquidationManagerModule: "0x4A679253410272dd5232B3Ff7cF5dbB88f295319",
811
+ CircuitBreakerModule: "0x0B306BF915C4d645ff596e518fAf3F9669b97016",
812
+ AdminModule: "0x09635F643e140090A9A8Dcd712eD6285858ceBef",
813
+ PositionManagerViews: "0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1",
814
+ PositionManager: "0x851356ae760d987E095750cCeb3bC6014560891C",
815
+ OperationAuthorizationRegistry: "0xc96304e3c037f81dA488ed9dEa1D8F2a48278a75",
816
+ PKPValidation: "0xD0141E899a65C95a556fE2B27e5982A6DE7fDD7A"
817
+ }
818
+ };
261
819
  var LOCALHOST_CONTRACTS = {
262
820
  MessageHashBuilder: "0xa82fF9aFd8f496c3d6ac40E2a0F282E47488CFc9",
263
821
  LITActionValidator: "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853",
@@ -277,6 +835,11 @@ var LOCALHOST_CONTRACTS = {
277
835
  OperationAuthorizationRegistry: "0xc96304e3c037f81dA488ed9dEa1D8F2a48278a75",
278
836
  PKPValidation: "0xD0141E899a65C95a556fE2B27e5982A6DE7fDD7A"
279
837
  };
838
+ var ALL_DEPLOYMENTS = {
839
+ sepolia: SEPOLIA_DEPLOYMENT,
840
+ mainnet: MAINNET_DEPLOYMENT,
841
+ localhost: LOCALHOST_DEPLOYMENT
842
+ };
280
843
  var ALL_CONTRACTS = {
281
844
  sepolia: SEPOLIA_CONTRACTS,
282
845
  mainnet: MAINNET_CONTRACTS,
@@ -1103,6 +1666,177 @@ async function executePsmPlan(plan, signer, vctx) {
1103
1666
  });
1104
1667
  return { ...exec, approvalHashes };
1105
1668
  }
1669
+
1670
+ // src/utils/sign-guard/typed-data-guard.ts
1671
+ var import_ethers7 = require("ethers");
1672
+ var LOGIN_BASE = [
1673
+ { name: "address", type: "address" },
1674
+ { name: "issuedAt", type: "uint256" },
1675
+ { name: "nonce", type: "bytes32" }
1676
+ ];
1677
+ function deepFreeze(value) {
1678
+ if (value && typeof value === "object" && !Object.isFrozen(value)) {
1679
+ Object.freeze(value);
1680
+ for (const child of Object.values(value))
1681
+ deepFreeze(child);
1682
+ }
1683
+ return value;
1684
+ }
1685
+ var SIGNABLE_TYPED_DATA = deepFreeze({
1686
+ DiamondHands: {
1687
+ label: "Sign in to Diamond Hands (no transaction, no funds)",
1688
+ domain: "login",
1689
+ variants: [
1690
+ LOGIN_BASE,
1691
+ [...LOGIN_BASE, { name: "audience", type: "string" }],
1692
+ [{ name: "statement", type: "string" }, ...LOGIN_BASE, { name: "audience", type: "string" }]
1693
+ ]
1694
+ },
1695
+ MintRequest: {
1696
+ label: "Authorize minting UCD against your position",
1697
+ domain: "loan-operations",
1698
+ variants: [[
1699
+ { name: "positionId", type: "bytes32" },
1700
+ { name: "mintAmount", type: "uint256" },
1701
+ { name: "quantumTimestamp", type: "uint256" }
1702
+ ]]
1703
+ },
1704
+ RepayRequest: {
1705
+ label: "Authorize a loan repayment",
1706
+ domain: "loan-operations",
1707
+ variants: [[
1708
+ { name: "positionId", type: "bytes32" },
1709
+ { name: "paymentAmount", type: "uint256" },
1710
+ { name: "quantumTimestamp", type: "uint256" }
1711
+ ]]
1712
+ },
1713
+ RenewRequest: {
1714
+ label: "Authorize renewing your loan term",
1715
+ domain: "loan-operations",
1716
+ variants: [[
1717
+ { name: "positionId", type: "bytes32" },
1718
+ { name: "selectedTerm", type: "uint256" },
1719
+ { name: "quantumTimestamp", type: "uint256" }
1720
+ ]]
1721
+ },
1722
+ WithdrawRequest: {
1723
+ label: "Request a BTC withdrawal (reserves the coins)",
1724
+ domain: "loan-operations",
1725
+ variants: [[
1726
+ { name: "positionId", type: "bytes32" },
1727
+ { name: "totalDeduction", type: "uint256" },
1728
+ { name: "withdrawalAddress", type: "string" },
1729
+ { name: "quantumTimestamp", type: "uint256" }
1730
+ ]]
1731
+ },
1732
+ ExecuteBtcWithdrawalRequest: {
1733
+ label: "Release a BTC withdrawal (sends the coins)",
1734
+ domain: "btc-spend-authorizer",
1735
+ variants: [[
1736
+ { name: "positionId", type: "bytes32" },
1737
+ { name: "withdrawalAddress", type: "string" },
1738
+ { name: "recipientAmount", type: "uint256" },
1739
+ { name: "networkFee", type: "uint256" },
1740
+ { name: "totalDeduction", type: "uint256" },
1741
+ { name: "spendTxid", type: "string" },
1742
+ { name: "spendVout", type: "uint32" },
1743
+ { name: "inputSetHash", type: "bytes32" },
1744
+ { name: "quantumTimestamp", type: "uint256" }
1745
+ ]]
1746
+ },
1747
+ InvalidateStaleSpendRequest: {
1748
+ label: "Invalidate a stuck BTC reservation (moves coins vault-to-vault)",
1749
+ domain: "btc-spend-authorizer",
1750
+ variants: [[
1751
+ { name: "positionId", type: "bytes32" },
1752
+ { name: "spendTxid", type: "string" },
1753
+ { name: "spendVout", type: "uint32" },
1754
+ { name: "quantumTimestamp", type: "uint256" }
1755
+ ]]
1756
+ }
1757
+ });
1758
+ var DOMAIN_FIELD_ORDER = [
1759
+ { name: "name", type: "string" },
1760
+ { name: "version", type: "string" },
1761
+ { name: "chainId", type: "uint256" },
1762
+ { name: "verifyingContract", type: "address" },
1763
+ { name: "salt", type: "bytes32" }
1764
+ ];
1765
+ var PROTOCOL_DOMAIN_NAME = "DiamondHands.Protocol";
1766
+ var LOGIN_DOMAIN_NAME = "Diamond Hands";
1767
+ var DOMAIN_VERSION = "1";
1768
+ var TypedDataRefused = class extends Error {
1769
+ constructor(reason) {
1770
+ super(`typed-data request refused before the wallet: ${reason}`);
1771
+ this.name = "TypedDataRefused";
1772
+ }
1773
+ };
1774
+ function pinnedVerifyingContract(chainId, kind) {
1775
+ const deployment = chainId === 31337 ? ALL_DEPLOYMENTS["localhost"] : Object.values(ALL_DEPLOYMENTS).find((d) => d.chainId === chainId);
1776
+ const address = kind === "loan-operations" ? deployment?.contracts?.LoanOperationsManagerModule : deployment?.contracts?.BTCSpendAuthorizer;
1777
+ if (!address) {
1778
+ throw new TypedDataRefused(`no pinned ${kind} contract for chainId ${chainId}`);
1779
+ }
1780
+ return address;
1781
+ }
1782
+ function sameFields(a, b) {
1783
+ return a.length === b.length && a.every((f, i) => f.name === b[i].name && f.type === b[i].type);
1784
+ }
1785
+ function assertSignableTypedData(chainId, domain, types, primaryType, message) {
1786
+ const suppliedDomainType = types["EIP712Domain"];
1787
+ if (suppliedDomainType !== void 0) {
1788
+ const expectedDomainType = DOMAIN_FIELD_ORDER.filter((f) => f.name in domain);
1789
+ if (!sameFields(suppliedDomainType, expectedDomainType)) {
1790
+ throw new TypedDataRefused("the supplied EIP712Domain type does not match the domain's keys");
1791
+ }
1792
+ }
1793
+ const structs = Object.fromEntries(
1794
+ Object.entries(types).filter(([name]) => name !== "EIP712Domain")
1795
+ );
1796
+ const structNames = Object.keys(structs);
1797
+ if (structNames.length !== 1) {
1798
+ throw new TypedDataRefused(`expected exactly one struct type, got ${structNames.join(", ") || "none"}`);
1799
+ }
1800
+ const derived = import_ethers7.TypedDataEncoder.getPrimaryType(structs);
1801
+ if (derived !== primaryType) {
1802
+ throw new TypedDataRefused(`primaryType "${primaryType}" does not match the types' primary "${derived}"`);
1803
+ }
1804
+ const allowed = Object.prototype.hasOwnProperty.call(SIGNABLE_TYPED_DATA, primaryType) ? SIGNABLE_TYPED_DATA[primaryType] : void 0;
1805
+ if (!allowed) {
1806
+ throw new TypedDataRefused(`"${primaryType}" is not a Diamond Hands request`);
1807
+ }
1808
+ if (!allowed.variants.some((variant) => sameFields(structs[primaryType], variant))) {
1809
+ throw new TypedDataRefused(`"${primaryType}" fields do not match any allowed field list`);
1810
+ }
1811
+ const expectedKeys = allowed.domain === "login" ? ["chainId", "name", "version"] : ["chainId", "name", "verifyingContract", "version"];
1812
+ const domainKeys = Object.keys(domain).sort();
1813
+ if (domainKeys.join(",") !== expectedKeys.join(",")) {
1814
+ throw new TypedDataRefused(
1815
+ `"${primaryType}" domain must have exactly ${expectedKeys.join(", ")}; got ${domainKeys.join(", ")}`
1816
+ );
1817
+ }
1818
+ const expectedName = allowed.domain === "login" ? LOGIN_DOMAIN_NAME : PROTOCOL_DOMAIN_NAME;
1819
+ if (domain["name"] !== expectedName || domain["version"] !== DOMAIN_VERSION) {
1820
+ throw new TypedDataRefused(`"${primaryType}" domain must be "${expectedName}" v${DOMAIN_VERSION}`);
1821
+ }
1822
+ if (typeof domain["chainId"] !== "number" || domain["chainId"] !== chainId) {
1823
+ throw new TypedDataRefused(`domain chainId ${String(domain["chainId"])} is not this session's chain ${chainId}`);
1824
+ }
1825
+ if (allowed.domain !== "login") {
1826
+ const pinned = pinnedVerifyingContract(chainId, allowed.domain);
1827
+ if (typeof domain["verifyingContract"] !== "string" || domain["verifyingContract"].toLowerCase() !== pinned.toLowerCase()) {
1828
+ throw new TypedDataRefused(
1829
+ `"${primaryType}" verifyingContract ${String(domain["verifyingContract"])} is not the pinned ${allowed.domain} contract ${pinned}`
1830
+ );
1831
+ }
1832
+ }
1833
+ const messageKeys = Object.keys(message).sort().join(",");
1834
+ const fieldKeys = structs[primaryType].map((f) => f.name).sort().join(",");
1835
+ if (messageKeys !== fieldKeys) {
1836
+ throw new TypedDataRefused(`"${primaryType}" message keys (${messageKeys}) are not exactly its fields (${fieldKeys})`);
1837
+ }
1838
+ return { label: allowed.label };
1839
+ }
1106
1840
  // Annotate the CommonJS export names for ESM import in node:
1107
1841
  0 && (module.exports = {
1108
1842
  AUTH_VALIDITY_WINDOWS,
@@ -1122,9 +1856,12 @@ async function executePsmPlan(plan, signer, vctx) {
1122
1856
  QUANTUM_SECONDS,
1123
1857
  REQUEST_TIMEOUT_MS,
1124
1858
  SIGNABLE_FUNCTIONS,
1859
+ SIGNABLE_TYPED_DATA,
1125
1860
  TxValidationError,
1861
+ TypedDataRefused,
1126
1862
  asEnvelope,
1127
1863
  assertFeeCeiling,
1864
+ assertSignableTypedData,
1128
1865
  authValiditySec,
1129
1866
  authorizeWithServer,
1130
1867
  broadcastSignedTx,