@gvnrdao/dh-sdk 0.0.320 → 0.0.324

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.
@@ -0,0 +1,838 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/safe-delegation.ts
21
+ var safe_delegation_exports = {};
22
+ __export(safe_delegation_exports, {
23
+ buildSafeAgentDelegationDisableCalls: () => buildSafeAgentDelegationDisableCalls,
24
+ getSafeAgentDelegation: () => getSafeAgentDelegation
25
+ });
26
+ module.exports = __toCommonJS(safe_delegation_exports);
27
+
28
+ // src/utils/safe-agent-delegation.utils.ts
29
+ var import_ethers = require("ethers");
30
+
31
+ // src/constants/chunks/deployment-addresses.ts
32
+ var SEPOLIA_DEPLOYMENT = {
33
+ network: "sepolia",
34
+ chainId: 11155111,
35
+ timestamp: "2026-03-13T20:04:15.417Z",
36
+ deployer: "",
37
+ contracts: {
38
+ UpgradeValidator: "0x592e650edD9bA26ecc407989fdd6F9cdcDeC27A6",
39
+ UCDToken: "0xdd817Ff47C9b8f81335Ac579895D8EA321Fa86Df",
40
+ UCDController: "0x360Bde4e489ee94E26601B206932De09EE60FF04",
41
+ PriceFeedConsumer: "0xb3Dc64501935a6f0334779126Ee37bE463cee318",
42
+ PositionManagerCoreModule: "0xfFAA39a08887FeFB697eBC8691A8630CbCC33391",
43
+ TermManagerModule: "0x94Adc6F9558368B1482197584f1fc7133Ecf835b",
44
+ LoanOperationsManagerModule: "0x3e05e760a87715207b7F4e8fD35EF7559BcA72C0",
45
+ CollateralManagerModule: "0x967E92c976Fc0fa8268D37D4d6B7245d912aA7dB",
46
+ LiquidationManagerModule: "0xC4AB00f39e7ceD812F5C67058C9fa44e15d40e76",
47
+ CircuitBreakerModule: "0x3D0B2cAE481821E57BA9CC3807bCC0d0D7F18bd8",
48
+ AdminModule: "0xAcd1f07915b17CA3727e7fE89BdF618A1545a1ed",
49
+ PositionManagerViews: "0x3b970E41a0668508B4B2ACb83653b2A402F745AE",
50
+ PositionManager: "0x68e0507D982AEBF1D1C1Af8FBbd842327e2deeFF",
51
+ OperationAuthorizationRegistry: "0x75f36E772df9616d40b02092642744D6fd702Df8",
52
+ PKPValidation: "0x8a1365A974F91e92D2dF5C51216EFCD408e209A8",
53
+ BTCSpendAuthorizer: "0xd7E9Eb5eE53f1d9ee55Dc162bBC7486bE437B6bD",
54
+ LITActionValidator: "0x54eECd7C90F8A8fac27749Ba30BbE8AFBAccc856",
55
+ SimplePSMV2: "0x19EcF7BA26e054fd4Ff06009A03070103dbBB058",
56
+ BitcoinProviderRegistry: "0xbfA0c48B070D0a9A9CD27469AeacFD2d4261cEE2",
57
+ ContractVersionRegistry: "0x97E43AA6aFF2C0cf659d3aE501658D2Ef6777522",
58
+ mockUsdcToken: "0x96409A98e0D322d6566b7F44a0fAbD1BD4ce2AEc",
59
+ mockUsdtToken: "0xF8b7fB38b17a310960E47805Be9adba0b0e0394D",
60
+ PositionDelegateRegistry: "0x482369De283622E7b05731875ec137d4E3D208F9",
61
+ FeeRecipientRegistry: "0x95795F8403DDb629E8527B2934C4e71f5fC0C374",
62
+ BitcoinWithdrawalAddressRegistry: "0x6376D392097F0A81e51BD83960A97EA20eaf1dbe",
63
+ CarryAgentRegistry: "0x5595CB538D44E6Cf179D20364fD631D0477e69f7",
64
+ AgentDelegationRegistry: "0x6AE7fc6bE0925126b9D25b1B7Ce5AD5d127ec025",
65
+ DHAgentDelegate: "0xa5A14489ae883960df6E1463A41a47aBE9Ecc5AF",
66
+ AgentModuleFactory: "0x1Fd3aCa2C030Cf77ce28Af9694D3Bb3034ACa2E5"
67
+ },
68
+ upgraded: {
69
+ PositionManager: {
70
+ previousImplementation: "0xb1885Be99BA64Bba773Bf423783A0334B7109409",
71
+ newImplementation: "0xfA7413a4547F496BF223ed25DF443c17ef6D4668",
72
+ upgradedAt: "2026-07-30T17:55:25.314Z",
73
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
74
+ reason: "Add setViews escape hatch so PositionManagerViews can be repointed (mainnet Views is a frozen non-proxy)"
75
+ },
76
+ LoanOperationsManagerModule: {
77
+ previousImplementation: "0x8c20e9Edf44146718F2EF15eEF47A201CaC229B8",
78
+ newImplementation: "0x6Ad08177F264f441074921C437670D1fA5934676",
79
+ upgradedAt: "2026-07-03T20:19:49.032Z",
80
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
81
+ reason: "Shared upgrade script: LoanOperationsManagerModule implementation update"
82
+ },
83
+ UCDController: {
84
+ previousImplementation: "0xF820098c311C736AB1793656044d95A0F6806B27",
85
+ newImplementation: "0x91204831bBCfcDCEa5fEE09B0d875778E9651690",
86
+ upgradedAt: "2026-07-03T19:52:40.152Z",
87
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
88
+ reason: "Shared upgrade script: UCDController implementation update"
89
+ },
90
+ TermManagerModule: {
91
+ previousImplementation: "0x358d6A7A864853beAA3E157fEB83dCEb1628E8eB",
92
+ newImplementation: "0xA2D6543faFA9d84C16Cd5e5E34F746B6e138F54d",
93
+ upgradedAt: "2026-07-03T19:58:25.937Z",
94
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
95
+ reason: "Shared upgrade script: TermManagerModule implementation update"
96
+ },
97
+ CircuitBreakerModule: {
98
+ previousImplementation: "0xF6277dEF72D51312CC99616B5380f34Eb7603D75",
99
+ newImplementation: "0x4b28F1d4ecBcc13b51a8d0f890e6d5bF4966EEB4",
100
+ upgradedAt: "2026-07-30T09:28:12.835Z",
101
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
102
+ reason: "Shared upgrade script: CircuitBreakerModule implementation update"
103
+ },
104
+ AdminModule: {
105
+ previousImplementation: "0xBBA86246169f81a307Fafff02C1e3D8456aab973",
106
+ newImplementation: "0x2905964e27BD78595cf8fFa6FFc5A99E54F399c4",
107
+ upgradedAt: "2026-07-30T09:02:25.915Z",
108
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
109
+ reason: "Shared upgrade script: AdminModule implementation update"
110
+ },
111
+ PositionManagerViews: {
112
+ previousImplementation: "0x1EB2B1d058006ACd9033E01e846D73eDE686b620",
113
+ newImplementation: "0xA455B542cFb36AF8451fc420dB89e590E5c87cef",
114
+ upgradedAt: "2026-07-03T20:11:25.817Z",
115
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
116
+ reason: "Shared upgrade script: PositionManagerViews implementation update"
117
+ },
118
+ TestPositionManager: {
119
+ previousImplementation: "0x0B46Ee1a9C6b42559758B7FF78294Cd867BB08f8",
120
+ newImplementation: "0x0B46Ee1a9C6b42559758B7FF78294Cd867BB08f8",
121
+ upgradedAt: "2026-03-17T15:18:07.382Z",
122
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
123
+ reason: "Add setPositionExpiry() for expiry-liquidation E2E testing"
124
+ },
125
+ UCDToken: {
126
+ previousImplementation: "0xC587a2cb7e828A44d8C6190eDA6c47b08BA07115",
127
+ newImplementation: "0xa6C8C4cfc7DD3dCE5F1259A4a1eAf8461aA8CeC8",
128
+ upgradedAt: "2026-07-03T19:54:36.519Z",
129
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
130
+ reason: "Shared upgrade script: UCDToken implementation update"
131
+ },
132
+ PositionManagerCoreModule: {
133
+ previousImplementation: "0xA52580D61Bc451dEe897F64cf51187Ad594B048c",
134
+ newImplementation: "0x0E721048c066C5589C41f97785f7E5737ac2BEB3",
135
+ upgradedAt: "2026-07-03T19:56:24.960Z",
136
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
137
+ reason: "Shared upgrade script: PositionManagerCoreModule implementation update"
138
+ },
139
+ CollateralManagerModule: {
140
+ previousImplementation: "0xCf5d2b210C8e30bE8e05bFC79593b9439b8b9670",
141
+ newImplementation: "0xF57BBbb4818371605e308228A04F8Ec4Dcc5E7Ba",
142
+ upgradedAt: "2026-07-07T16:59:13.883Z",
143
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
144
+ reason: "Shared upgrade script: CollateralManagerModule implementation update"
145
+ },
146
+ LiquidationManagerModule: {
147
+ previousImplementation: "0x31CD6191d80F484b72925Aa1834c80F5f739252A",
148
+ newImplementation: "0xCe7587C47094BBb3dCa13D7a2299Ec9beA6cd759",
149
+ upgradedAt: "2026-07-03T20:02:00.579Z",
150
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
151
+ reason: "Shared upgrade script: LiquidationManagerModule implementation update"
152
+ },
153
+ BTCSpendAuthorizer: {
154
+ previousImplementation: "0x8775a520cAA18c03Cc3f51ee254cAB830960f80E",
155
+ newImplementation: "0xdd3DFaEc50d6214d57eA64e8b76ff318b501607b",
156
+ upgradedAt: "2026-07-03T20:09:36.466Z",
157
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
158
+ reason: "Shared upgrade script: BTCSpendAuthorizer implementation update"
159
+ },
160
+ SimplePSMV2: {
161
+ previousImplementation: "0xd2488cb7d9ba211e7437FcE9dcfBC3c2D4CBe419",
162
+ newImplementation: "0xE38010BE47B389922A1cd4b533470F0af7d20101",
163
+ upgradedAt: "2026-07-03T20:21:49.843Z",
164
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
165
+ reason: "Shared upgrade script: SimplePSMV2 implementation update"
166
+ },
167
+ UpgradeValidator: {
168
+ previousImplementation: "0x2Dd375041Be067E7d12bAB2106911Ce209EbD12f",
169
+ newImplementation: "0x9E70e1D07AB11ac9dD37B67AA091Efe97d7Ed84b",
170
+ upgradedAt: "2026-07-30T09:32:13.726Z",
171
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
172
+ reason: "Shared upgrade script: UpgradeValidator implementation update"
173
+ },
174
+ LITActionValidator: {
175
+ previousImplementation: "0xE2f99EA35b4DA01A66338427EC9077581d28FDb5",
176
+ newImplementation: "0x8FF30Fab0cC09C67dF6DF0ee017f817d5B101457",
177
+ upgradedAt: "2026-07-30T09:30:13.928Z",
178
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
179
+ reason: "Shared upgrade script: LITActionValidator implementation update"
180
+ },
181
+ ContractVersionRegistry: {
182
+ previousImplementation: "0x327Ced106C2804283994F0C0e2436E4B76AA7dAD",
183
+ newImplementation: "0xF3389De4bCeC735e4F6d35b9f71170D96037D1B7",
184
+ upgradedAt: "2026-07-03T19:50:48.918Z",
185
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
186
+ reason: "Shared upgrade script: ContractVersionRegistry implementation update"
187
+ },
188
+ PositionDelegateRegistry: {
189
+ previousImplementation: "0x301fa9AA527016D033e151b982C64cD8670a39E3",
190
+ newImplementation: "0xc681c48688cdAA966119E265e4a378ef8Fe0eBcA",
191
+ upgradedAt: "2026-07-30T09:02:27.050Z",
192
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
193
+ reason: "Reconciled implementation from chain"
194
+ },
195
+ OperationAuthorizationRegistry: {
196
+ previousImplementation: "0xF56090039c268B90f1867075813B5B36C40092B4",
197
+ newImplementation: "0xe0D981B60351f0f8fFDA2b50C8180Fb37CeF3883",
198
+ upgradedAt: "2026-07-03T20:23:37.669Z",
199
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
200
+ reason: "Shared upgrade script: OperationAuthorizationRegistry implementation update"
201
+ },
202
+ FeeRecipientRegistry: {
203
+ previousImplementation: "0xd08513a7cB2dd354B26cDDf549616F12054c34c9",
204
+ newImplementation: "0x44057f5Ca13B1C3a74E5507c372704F3c8c5834f",
205
+ upgradedAt: "2026-07-30T09:23:25.934Z",
206
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
207
+ reason: "Shared upgrade script: FeeRecipientRegistry implementation update"
208
+ },
209
+ BitcoinProviderRegistry: {
210
+ previousImplementation: "0xc5899d53426aD9354CEdAFe3002cbd3aBfAC46ab",
211
+ newImplementation: "0x37A8D9a57f9dEa7ae7D5B7BC7B1BB61a80960eB7",
212
+ upgradedAt: "2026-07-30T09:26:01.725Z",
213
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
214
+ reason: "Shared upgrade script: BitcoinProviderRegistry implementation update"
215
+ },
216
+ BitcoinWithdrawalAddressRegistry: {
217
+ previousImplementation: "0xFF270BC4470dBA80430Bd1a3a66EB691599354fA",
218
+ newImplementation: "0x76E0a2c9d89562fD7c50b5f554d7fa25957e39Db",
219
+ upgradedAt: "2026-07-07T16:56:49.844Z",
220
+ upgradedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
221
+ reason: "Shared upgrade script: BitcoinWithdrawalAddressRegistry implementation update"
222
+ }
223
+ },
224
+ history: {
225
+ LoanOperationsManagerModule: {
226
+ previous: "0x48D46188e25452148A743f8f6599b0E66C178512",
227
+ new: "0x1f70024444C5E89fFC232d2768C0359F7a13c6e7",
228
+ reason: "Storage layout scrambled \u2014 fresh deploy with F20 admin",
229
+ deployedAt: "2026-03-12T10:28:15.833Z",
230
+ deployedBy: "0x2767441E044aCd9bbC21a759fB0517494875092d"
231
+ },
232
+ freshDeploy: {
233
+ reason: "Full fresh deploy \u2014 F20 as admin, correct AdminModule on PM, no 0x276 dependency",
234
+ deployedAt: "2026-03-12T11:07:45.335Z",
235
+ deployedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
236
+ old: {
237
+ UCDToken: "0x86060fa5b3e01e003b8afd9c1295f1f444a7dc60",
238
+ UCDController: "0x703Ce9a94A8e42EC48499a79ef5c38a37664Fc5a",
239
+ PositionManagerCoreModule: "0x3Ff6F2E40B0d7c0557Da8fd04F699198Bdcb1b4C",
240
+ LiquidationManagerModule: "0xAC3886766Ac20d379b069BdFB97e401aBad6188C",
241
+ LoanOperationsManagerModule: "0x1f70024444C5E89fFC232d2768C0359F7a13c6e7",
242
+ CollateralManagerModule: "0x34E3DcA5d00570f323c62f09f46D8314674de723",
243
+ PositionManagerViews: "0xAC32f1845ace22e012aF30760fe9296b9aEb8a45",
244
+ PositionManager: "0x141D078A82F093F4Ea8345b9Bc9999C9008619Ae"
245
+ },
246
+ new: {
247
+ UCDToken: "0xdd817Ff47C9b8f81335Ac579895D8EA321Fa86Df",
248
+ UCDController: "0x360Bde4e489ee94E26601B206932De09EE60FF04",
249
+ PositionManagerCoreModule: "0xfFAA39a08887FeFB697eBC8691A8630CbCC33391",
250
+ LiquidationManagerModule: "0xC4AB00f39e7ceD812F5C67058C9fa44e15d40e76",
251
+ LoanOperationsManagerModule: "0xD3ADCCe9b46287763f723dC9a3FCfa59ab74b8bB",
252
+ CollateralManagerModule: "0x967E92c976Fc0fa8268D37D4d6B7245d912aA7dB",
253
+ PositionManagerViews: "0x3b970E41a0668508B4B2ACb83653b2A402F745AE",
254
+ PositionManager: "0xc767484Cced727D3fC0c5C2872BA6549967d7517"
255
+ }
256
+ }
257
+ },
258
+ pkpValidationDeployed: {
259
+ address: "0x8a1365A974F91e92D2dF5C51216EFCD408e209A8",
260
+ deployedAt: "2026-07-03T19:48:13.932Z",
261
+ deployedBy: "0xF20986F02420EF443AE9BE5092FB8A4975cF3aA6",
262
+ setPKPValidationRegistryTx: "0xab6b7e610c1ecf68da9a1e1150e61631e1f2a945bec12608c8357e03be25c4a5",
263
+ replacedAddress: "0xC8Ca02238fbCDAEbE6dbF804461D43F46F9406F4"
264
+ },
265
+ latestEnv: {
266
+ UCD_TOKEN: "0xdd817Ff47C9b8f81335Ac579895D8EA321Fa86Df",
267
+ UCD_CONTROLLER: "0x360Bde4e489ee94E26601B206932De09EE60FF04",
268
+ POSITION_MANAGER: "0x68e0507D982AEBF1D1C1Af8FBbd842327e2deeFF",
269
+ PKP_VALIDATION_REGISTRY: "0x8a1365A974F91e92D2dF5C51216EFCD408e209A8",
270
+ PKP_VALIDATION_REGISTRY_IMPL: "0x4f752c8c00b75d925CC9C7e693e1D9E45B6D195d",
271
+ PKP_VALIDATION_CID_V1: "0x1220246b43f71828ed1cfdc455b6bd4fd9e7382251ea634589f8da9b12f61d40cd51",
272
+ PKP_ETH_ADDRESS: "0x9624C46073E1d1F5AB975c67Fc899536d599bb57",
273
+ OPERATION_AUTHORIZATION_REGISTRY: "0x75f36E772df9616d40b02092642744D6fd702Df8",
274
+ UCD_MINT_VALIDATOR_ADDRESS: "0x4D9299055093938d0CD2F26C42A87260CB50adD8",
275
+ UCD_MINT_VALIDATOR_VERSION: 1,
276
+ BTC_WITHDRAWAL_VALIDATOR_ADDRESS: "0x7b9316cAA00B257F7CE30F7F6979bd6867BA9eE2",
277
+ BTC_WITHDRAWAL_VALIDATOR_VERSION: 1,
278
+ UPDATE_BALANCE_VALIDATOR_ADDRESS: "0x8A40C22B03348bc10df9ae0dc54346b4AE8e909c",
279
+ UPDATE_BALANCE_VALIDATOR_VERSION: 1,
280
+ PROCESS_PAYMENT_VALIDATOR_ADDRESS: "0x2800E9e335e51730132f7CB9F4912bCc2ED0636C",
281
+ PROCESS_PAYMENT_VALIDATOR_VERSION: 1,
282
+ EXTEND_POSITION_VALIDATOR_ADDRESS: "0xa8031d1F4515Ef021A13357E8462340cE1b8711b",
283
+ EXTEND_POSITION_VALIDATOR_VERSION: 1,
284
+ LOAN_OPERATIONS_MANAGER_MODULE: "0x3e05e760a87715207b7F4e8fD35EF7559BcA72C0",
285
+ TERM_MANAGER_MODULE: "0x94Adc6F9558368B1482197584f1fc7133Ecf835b",
286
+ COMMUNITY_MANAGER_MODULE: "0x7f8fC386fbD96ed690cdf6B1648d060d93Bf99d5",
287
+ POSITION_MANAGER_VIEWS: "0x3b970E41a0668508B4B2ACb83653b2A402F745AE",
288
+ CIRCUIT_BREAKER_MODULE: "0x3D0B2cAE481821E57BA9CC3807bCC0d0D7F18bd8",
289
+ ADMIN_MODULE: "0xAcd1f07915b17CA3727e7fE89BdF618A1545a1ed",
290
+ UCD_CONTROLLER_IMPL: "0x91204831bBCfcDCEa5fEE09B0d875778E9651690",
291
+ LOAN_OPERATIONS_MANAGER_MODULE_IMPL: "0x6Ad08177F264f441074921C437670D1fA5934676",
292
+ TERM_MANAGER_MODULE_IMPL: "0xA2D6543faFA9d84C16Cd5e5E34F746B6e138F54d",
293
+ CIRCUIT_BREAKER_MODULE_IMPL: "0x4b28F1d4ecBcc13b51a8d0f890e6d5bF4966EEB4",
294
+ ADMIN_MODULE_IMPL: "0x2905964e27BD78595cf8fFa6FFc5A99E54F399c4",
295
+ POSITION_MANAGER_VIEWS_IMPL: "0xA455B542cFb36AF8451fc420dB89e590E5c87cef",
296
+ POSITION_MANAGER_IMPL: "0xfA7413a4547F496BF223ed25DF443c17ef6D4668",
297
+ SIMPLE_PSM_V2: "0x19EcF7BA26e054fd4Ff06009A03070103dbBB058",
298
+ SIMPLE_PSM_V2_IMPL: "0xE38010BE47B389922A1cd4b533470F0af7d20101",
299
+ UCD_TOKEN_IMPL: "0xa6C8C4cfc7DD3dCE5F1259A4a1eAf8461aA8CeC8",
300
+ POSITION_MANAGER_CORE_MODULE: "0xfFAA39a08887FeFB697eBC8691A8630CbCC33391",
301
+ POSITION_MANAGER_CORE_MODULE_IMPL: "0x0E721048c066C5589C41f97785f7E5737ac2BEB3",
302
+ COLLATERAL_MANAGER_MODULE: "0x967E92c976Fc0fa8268D37D4d6B7245d912aA7dB",
303
+ COLLATERAL_MANAGER_MODULE_IMPL: "0xF57BBbb4818371605e308228A04F8Ec4Dcc5E7Ba",
304
+ LIQUIDATION_MANAGER_MODULE: "0xC4AB00f39e7ceD812F5C67058C9fa44e15d40e76",
305
+ LIQUIDATION_MANAGER_MODULE_IMPL: "0xCe7587C47094BBb3dCa13D7a2299Ec9beA6cd759",
306
+ BTC_SPEND_AUTHORIZER: "0xd7E9Eb5eE53f1d9ee55Dc162bBC7486bE437B6bD",
307
+ BTC_SPEND_AUTHORIZER_IMPL: "0xdd3DFaEc50d6214d57eA64e8b76ff318b501607b",
308
+ UPGRADE_VALIDATOR: "0x592e650edD9bA26ecc407989fdd6F9cdcDeC27A6",
309
+ UPGRADE_VALIDATOR_IMPL: "0x9E70e1D07AB11ac9dD37B67AA091Efe97d7Ed84b",
310
+ BITCOIN_PROVIDER_REGISTRY: "0xbfA0c48B070D0a9A9CD27469AeacFD2d4261cEE2",
311
+ BITCOIN_PROVIDER_REGISTRY_IMPL: "0x37A8D9a57f9dEa7ae7D5B7BC7B1BB61a80960eB7",
312
+ LIT_ACTION_VALIDATOR: "0x54eECd7C90F8A8fac27749Ba30BbE8AFBAccc856",
313
+ LIT_ACTION_VALIDATOR_IMPL: "0x8FF30Fab0cC09C67dF6DF0ee017f817d5B101457",
314
+ CONTRACT_VERSION_REGISTRY: "0x97E43AA6aFF2C0cf659d3aE501658D2Ef6777522",
315
+ CONTRACT_VERSION_REGISTRY_IMPL: "0xF3389De4bCeC735e4F6d35b9f71170D96037D1B7",
316
+ MOCK_USDC_TOKEN: "0x96409A98e0D322d6566b7F44a0fAbD1BD4ce2AEc",
317
+ MOCK_USDT_TOKEN: "0xF8b7fB38b17a310960E47805Be9adba0b0e0394D",
318
+ POSITION_DELEGATE_REGISTRY: "0x482369De283622E7b05731875ec137d4E3D208F9",
319
+ POSITION_DELEGATE_REGISTRY_IMPL: "0xc681c48688cdAA966119E265e4a378ef8Fe0eBcA",
320
+ AGENT_MODULE: "0xefb8C29C1e7e92ed7d81a52dbedaed74e37fe380",
321
+ FEE_RECIPIENT_REGISTRY: "0x95795F8403DDb629E8527B2934C4e71f5fC0C374",
322
+ FEE_RECIPIENT_REGISTRY_IMPL: "0x44057f5Ca13B1C3a74E5507c372704F3c8c5834f",
323
+ OPERATION_AUTHORIZATION_REGISTRY_IMPL: "0xe0D981B60351f0f8fFDA2b50C8180Fb37CeF3883",
324
+ BITCOIN_WITHDRAWAL_ADDRESS_REGISTRY: "0x6376D392097F0A81e51BD83960A97EA20eaf1dbe",
325
+ BITCOIN_WITHDRAWAL_ADDRESS_REGISTRY_IMPL: "0x76E0a2c9d89562fD7c50b5f554d7fa25957e39Db",
326
+ CARRY_AGENT_REGISTRY: "0x5595CB538D44E6Cf179D20364fD631D0477e69f7",
327
+ CARRY_AGENT_REGISTRY_IMPL: "0x1b11a3D5e46F3672E643c997f0d569DFf0b64a01",
328
+ AGENT_DELEGATION_REGISTRY: "0x6AE7fc6bE0925126b9D25b1B7Ce5AD5d127ec025",
329
+ AGENT_DELEGATION_REGISTRY_IMPL: "0x80C47350274513688e348D02506477A96B4afCCb",
330
+ DH_AGENT_DELEGATE: "0xa5A14489ae883960df6E1463A41a47aBE9Ecc5AF"
331
+ }
332
+ };
333
+ var MAINNET_DEPLOYMENT = {
334
+ network: "mainnet",
335
+ chainId: 1,
336
+ timestamp: "2026-06-16T16:40:50.629Z",
337
+ deployer: "0xEba7BfAeB35ee18408b424Ee0BB45AdDf776589f",
338
+ contracts: {
339
+ MessageHashBuilder: "0xaDE074023F9e87f6AEaF679e36B5d7B93FA22269",
340
+ LITActionValidator: "0xD2c5d59c2CC5c409AC65ce0A817236aeC6869512",
341
+ UpgradeValidator: "0xC46Ae71F22e3741A6CF46E399aE914C4868fEbed",
342
+ UCDToken: "0xaAaB6B05E5EecB015898483d4e6703d7F218850b",
343
+ UCDController: "0x4b4f8063048bCD59D469219E3f07C6aaDF4f6157",
344
+ PositionManagerCoreModule: "0xd895B685914c1BE4e1c7aab9f89a90c203DE8d22",
345
+ TermManagerModule: "0xDB99CdF883ffa38acD099bC39F8d1f4508c9239E",
346
+ LoanOperationsManagerModule: "0x2561974A40F1AEed1251d0A090A83cF8536FB9E9",
347
+ BTCSpendAuthorizer: "0xfBbF108486fa07F1B06a811C5b66ed68DD9c508a",
348
+ CollateralManagerModule: "0x2Eb74FEc478218f5C260aAc78Bb8eC297F9d7135",
349
+ LiquidationManagerModule: "0x74B28695352E7bf736D6c9F76ccb7B4439477De9",
350
+ CircuitBreakerModule: "0xF7b545d3a4Ee056D06909AB367E2F7bFFE3cB1BC",
351
+ AdminModule: "0x0023B71B586795eE5fa4E83E384345C1EC8Bb946",
352
+ PositionManagerViews: "0x8B57954eA338c6A6bfF1457f71080e25baFF3937",
353
+ PositionManager: "0x12A1836e56139ccaD8722B89519d84233efc224B",
354
+ OperationAuthorizationRegistry: "0xD4505645b724754f5170a2027804a4265e860d44",
355
+ ContractVersionRegistry: "0x5e18f77d01940dA5B1D986D373D9A6ad0767008d",
356
+ FeeRecipientRegistry: "0x8fbCAAdA198E1C246ecEb2fB021C5A3d8050c6B3",
357
+ PositionDelegateRegistry: "0xf0aa2678aD4F60f49e8F7725089B5E86B7F8FE4C",
358
+ BitcoinProviderRegistry: "0x4ab3Fb96e02893Ed6FAa61bad1918390c8DbbFFC",
359
+ BitcoinWithdrawalAddressRegistry: "0xf667f77FDba7458345f227eB6Bfe4148243E7270",
360
+ SimplePSMV2: "0xfE0C14B4E614f40Bf58845b4B04CeD17fd116532",
361
+ PKPValidation: "0x29922d3ccb86516f6C24F89f1eb3068655ca7Fa0",
362
+ AgentDelegationRegistry: "0x54853b7E91ce2Be34ce65655D80c4447e67187Fa",
363
+ DHAgentDelegate: "0x70232d0caBe529e29a01A442423d7e03BBd414c8"
364
+ },
365
+ upgraded: {
366
+ SimplePSMV2: {
367
+ previousImplementation: "0x1a555FB8D6EDdF755a4575E541651EdB8B49a15A",
368
+ newImplementation: "0x8717761444b1822c2E6916aB5bD9ac96c91b6DF5",
369
+ upgradedAt: "2026-07-06T10:41:35.000Z",
370
+ upgradedBy: "AdminModule/Safe audit-batch upgradeToAndCall; executed by 0xEba7BfAeB35ee18408b424Ee0BB45AdDf776589f in tx 0x5052d1559d56b8e178699183e56c4fd84a163e987365c5af9c8d669a723c35d6 (block 25472960)",
371
+ reason: "Reconciled from chain \u2014 mainnet audit rollout batch (cross-ref onchain-auth/.safe-batches/mainnet-audit-execute.json)",
372
+ executeTx: "0x5052d1559d56b8e178699183e56c4fd84a163e987365c5af9c8d669a723c35d6",
373
+ block: 25472960
374
+ },
375
+ CollateralManagerModule: {
376
+ previousImplementation: "0x1919860e528Cd2AbbD31a17858c986b8aCc8C185",
377
+ newImplementation: "0x55110B9dd6B2c9f812564e7a1ef42b3c76E1A3Bb",
378
+ upgradedAt: "2026-07-08T20:33:59.000Z",
379
+ 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)",
380
+ 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.",
381
+ executeTx: "0x430c8e450f12d3d9359cde356ac5e2ef39661d7a89884b5674a596c1090f6cff",
382
+ block: 25490267
383
+ },
384
+ BitcoinWithdrawalAddressRegistry: {
385
+ previousImplementation: "0x11731bFEC3068F2cc19D016381dfEA3B93013b1C",
386
+ newImplementation: "0x190c08300Ae650fb88ed8156445BBeb13bE9E8a3",
387
+ upgradedAt: "2026-07-08T20:33:59.000Z",
388
+ 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)",
389
+ 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.",
390
+ executeTx: "0x430c8e450f12d3d9359cde356ac5e2ef39661d7a89884b5674a596c1090f6cff",
391
+ block: 25490267
392
+ },
393
+ UCDController: {
394
+ previousImplementation: "0x16f94AcC78cE87bEeBCfF90552091B3EfC071E48",
395
+ newImplementation: "0x28B8cAB89D89B3F83581FD2290de2Ce84535bd0A",
396
+ upgradedAt: "2026-07-06T10:41:59.000Z",
397
+ upgradedBy: "AdminModule/Safe audit-batch upgradeToAndCall; executed by 0xEba7BfAeB35ee18408b424Ee0BB45AdDf776589f in tx 0xf6609d3fa43b460d953c85d8d7265b59bf177723042db79a6a700571bad777b7 (block 25472962)",
398
+ reason: "Reconciled from chain \u2014 mainnet audit rollout batch (cross-ref onchain-auth/.safe-batches/mainnet-audit-execute.json)",
399
+ executeTx: "0xf6609d3fa43b460d953c85d8d7265b59bf177723042db79a6a700571bad777b7",
400
+ block: 25472962
401
+ },
402
+ PositionManagerCoreModule: {
403
+ previousImplementation: "0x6C8b0FB93F8d0239254aefaC24d4264cA2F8AAeB",
404
+ newImplementation: "0x5067Ea1d40b2Aaf4ad693bD9b6e7463C1A29E849",
405
+ upgradedAt: "2026-07-06T08:02:35.000Z",
406
+ upgradedBy: "AdminModule/Safe audit-batch upgradeToAndCall; executed by 0x2002827d34A781883Ec4c83c36ECC140c3911F2B in tx 0xeb2bfe77d46394b6d0afd46beb0a80cd9beb91f6771ccb59ff9fba27d4af4f3d (block 25472167)",
407
+ reason: "Reconciled from chain \u2014 mainnet audit rollout batch (cross-ref onchain-auth/.safe-batches/mainnet-audit-execute.json)",
408
+ executeTx: "0xeb2bfe77d46394b6d0afd46beb0a80cd9beb91f6771ccb59ff9fba27d4af4f3d",
409
+ block: 25472167
410
+ },
411
+ LiquidationManagerModule: {
412
+ previousImplementation: "0xc2f4517eeD7c4c516939a64c7938a6ab432D99c4",
413
+ newImplementation: "0xe7444C1d9652dAb31BaAdBE4C7c7e7Df3515dA46",
414
+ upgradedAt: "2026-07-06T10:40:47.000Z",
415
+ upgradedBy: "AdminModule/Safe audit-batch upgradeToAndCall; executed by 0xEba7BfAeB35ee18408b424Ee0BB45AdDf776589f in tx 0xc173b97af68cc9172ea0ddc91a2c90bf02eac1505e749d92aa044aa69891f48c (block 25472956)",
416
+ reason: "Reconciled from chain \u2014 mainnet audit rollout batch (cross-ref onchain-auth/.safe-batches/mainnet-audit-execute.json)",
417
+ executeTx: "0xc173b97af68cc9172ea0ddc91a2c90bf02eac1505e749d92aa044aa69891f48c",
418
+ block: 25472956
419
+ },
420
+ BTCSpendAuthorizer: {
421
+ previousImplementation: "0xb003ed89F695E8819a85513fE17260b805B3c478",
422
+ newImplementation: "0x40c9e8C46C65E0A57BB63da5368868A9E8Df81A5",
423
+ upgradedAt: "2026-07-06T10:40:59.000Z",
424
+ upgradedBy: "AdminModule/Safe audit-batch upgradeToAndCall; executed by 0xEba7BfAeB35ee18408b424Ee0BB45AdDf776589f in tx 0xe1b1884a7e76c7fd569522545a04e49d5128d83d27b3892cda59f143b53b5281 (block 25472957)",
425
+ reason: "Reconciled from chain \u2014 mainnet audit rollout batch (cross-ref onchain-auth/.safe-batches/mainnet-audit-execute.json)",
426
+ executeTx: "0xe1b1884a7e76c7fd569522545a04e49d5128d83d27b3892cda59f143b53b5281",
427
+ block: 25472957
428
+ },
429
+ PositionManager: {
430
+ previousImplementation: "0x600Dc0D1C2c0F94882B6Bc09172f8650047Ad5B1",
431
+ newImplementation: "0x2e7170d6Fb15A876dB726732e72e63109bcB916d",
432
+ upgradedAt: "2026-08-03T08:34:23.000Z",
433
+ 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)",
434
+ 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.",
435
+ executeTx: "0xf1f8d5fc13f45d7a3f932bf1a2d6e29381fdd41cd31298ad785bf7688df07fe6",
436
+ block: 25673200
437
+ },
438
+ LoanOperationsManagerModule: {
439
+ previousImplementation: "0x56671D671e492Dae625413d463D47605Cf54edf6",
440
+ newImplementation: "0x7d90aAB4466f59BA9aC9C7a9BF14dC53734336e7",
441
+ upgradedAt: "2026-07-06T10:41:23.000Z",
442
+ upgradedBy: "AdminModule/Safe audit-batch upgradeToAndCall; executed by 0xEba7BfAeB35ee18408b424Ee0BB45AdDf776589f in tx 0x327ae9f7a3917788d22dfe95611e1afcd18583f210b03a119d9f04eca50b9e7a (block 25472959)",
443
+ reason: "Reconciled from chain \u2014 mainnet audit rollout batch (cross-ref onchain-auth/.safe-batches/mainnet-audit-execute.json)",
444
+ executeTx: "0x327ae9f7a3917788d22dfe95611e1afcd18583f210b03a119d9f04eca50b9e7a",
445
+ block: 25472959
446
+ },
447
+ OperationAuthorizationRegistry: {
448
+ previousImplementation: "0x327662917Ac8EEda47851d74AF6A151348636fCe",
449
+ newImplementation: "0x493118746840EDB2D396E71632D2E774CA14070e",
450
+ upgradedAt: "2026-07-06T10:41:47.000Z",
451
+ upgradedBy: "AdminModule/Safe audit-batch upgradeToAndCall; executed by 0xEba7BfAeB35ee18408b424Ee0BB45AdDf776589f in tx 0x9820e259700865a281b8376e248044048ba2fed1d17c811ac66ac54d36711a5b (block 25472961)",
452
+ reason: "Reconciled from chain \u2014 mainnet audit rollout batch (cross-ref onchain-auth/.safe-batches/mainnet-audit-execute.json)",
453
+ executeTx: "0x9820e259700865a281b8376e248044048ba2fed1d17c811ac66ac54d36711a5b",
454
+ block: 25472961
455
+ },
456
+ BitcoinProviderRegistry: {
457
+ newImplementation: "0x7Bc9473E45fb3EA594e8b13992F57D0444902ddB",
458
+ upgradedAt: "2026-06-16T17:51:11.000Z",
459
+ upgradedBy: "AdminModule/Safe audit-batch upgradeToAndCall; executed by 0xEba7BfAeB35ee18408b424Ee0BB45AdDf776589f in tx 0xf97e21ce2bc23876d60414c24ce6f45b2f0dd5e1ce42aca84f245f90f18ea17d (block 25331694)",
460
+ reason: "Reconciled from chain \u2014 mainnet audit rollout batch (cross-ref onchain-auth/.safe-batches/mainnet-audit-execute.json)",
461
+ executeTx: "0xf97e21ce2bc23876d60414c24ce6f45b2f0dd5e1ce42aca84f245f90f18ea17d",
462
+ block: 25331694
463
+ },
464
+ FeeRecipientRegistry: {
465
+ newImplementation: "0xEfAeB37faAdc2D420dC6F99128296B79fDDe74bE",
466
+ upgradedAt: "2026-06-16T17:30:35.000Z",
467
+ upgradedBy: "AdminModule/Safe audit-batch upgradeToAndCall; executed by 0xEba7BfAeB35ee18408b424Ee0BB45AdDf776589f in tx 0xc8f592166923f83b9b0cfc44e67c2ec75f79ca95be4f8ffa01654f702eaac502 (block 25331591)",
468
+ reason: "Reconciled from chain \u2014 mainnet audit rollout batch (cross-ref onchain-auth/.safe-batches/mainnet-audit-execute.json)",
469
+ executeTx: "0xc8f592166923f83b9b0cfc44e67c2ec75f79ca95be4f8ffa01654f702eaac502",
470
+ block: 25331591
471
+ },
472
+ PositionDelegateRegistry: {
473
+ previousImplementation: "0x3c7B975c03F549fe0656D9cbbA218BcF1C7092af",
474
+ newImplementation: "0x560a87251b3D306116F32D6e197FD068577e5349",
475
+ upgradedAt: "2026-08-02T18:34:35.000Z",
476
+ 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)",
477
+ 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.",
478
+ executeTx: "0xf0f237f6c4e958c37de556571908283c59c3fba6ebf9fa3cefb956f37e315a10",
479
+ block: 25669024
480
+ },
481
+ PositionManagerViews: {
482
+ previousImplementation: "0x9225647a30bbACA4Acc0491B786869036914242e",
483
+ newImplementation: "0xE68DC096A65Ecddbc6A9b5c6e5f878e2CE143Bfe",
484
+ proxy: "0x8B57954eA338c6A6bfF1457f71080e25baFF3937",
485
+ upgradedAt: "2026-08-03T08:34:23.000Z",
486
+ 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",
487
+ 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.",
488
+ executeTx: "0xf1f8d5fc13f45d7a3f932bf1a2d6e29381fdd41cd31298ad785bf7688df07fe6",
489
+ block: 25673200
490
+ }
491
+ },
492
+ latestEnv: {
493
+ CONTRACT_VERSION_REGISTRY: "0x5e18f77d01940dA5B1D986D373D9A6ad0767008d",
494
+ CONTRACT_VERSION_REGISTRY_IMPL: "0x1Cf8C10fE37092320CB9E7082e0bB482a6B3acE0",
495
+ FEE_RECIPIENT_REGISTRY: "0x8fbCAAdA198E1C246ecEb2fB021C5A3d8050c6B3",
496
+ FEE_RECIPIENT_REGISTRY_IMPL: "0xEfAeB37faAdc2D420dC6F99128296B79fDDe74bE",
497
+ POSITION_DELEGATE_REGISTRY: "0xf0aa2678aD4F60f49e8F7725089B5E86B7F8FE4C",
498
+ POSITION_DELEGATE_REGISTRY_IMPL: "0x560a87251b3D306116F32D6e197FD068577e5349",
499
+ BITCOIN_PROVIDER_REGISTRY: "0x4ab3Fb96e02893Ed6FAa61bad1918390c8DbbFFC",
500
+ BITCOIN_PROVIDER_REGISTRY_IMPL: "0x7Bc9473E45fb3EA594e8b13992F57D0444902ddB",
501
+ BITCOIN_WITHDRAWAL_ADDRESS_REGISTRY: "0xf667f77FDba7458345f227eB6Bfe4148243E7270",
502
+ BITCOIN_WITHDRAWAL_ADDRESS_REGISTRY_IMPL: "0x190c08300Ae650fb88ed8156445BBeb13bE9E8a3",
503
+ SIMPLE_PSM_V2: "0xfE0C14B4E614f40Bf58845b4B04CeD17fd116532",
504
+ SIMPLE_PSM_V2_IMPL: "0x8717761444b1822c2E6916aB5bD9ac96c91b6DF5",
505
+ UCD_CONTROLLER: "0x4b4f8063048bCD59D469219E3f07C6aaDF4f6157",
506
+ UCD_CONTROLLER_IMPL: "0x28B8cAB89D89B3F83581FD2290de2Ce84535bd0A",
507
+ UCD_TOKEN: "0xaAaB6B05E5EecB015898483d4e6703d7F218850b",
508
+ UCD_TOKEN_IMPL: "0x5f09C660036021D7e916DF47234C24a2536C3A72",
509
+ POSITION_MANAGER_CORE_MODULE: "0xd895B685914c1BE4e1c7aab9f89a90c203DE8d22",
510
+ POSITION_MANAGER_CORE_MODULE_IMPL: "0x5067Ea1d40b2Aaf4ad693bD9b6e7463C1A29E849",
511
+ TERM_MANAGER_MODULE: "0xDB99CdF883ffa38acD099bC39F8d1f4508c9239E",
512
+ TERM_MANAGER_MODULE_IMPL: "0x971f63f92990e59270E971612dd399fF2C63B0c3",
513
+ COLLATERAL_MANAGER_MODULE: "0x2Eb74FEc478218f5C260aAc78Bb8eC297F9d7135",
514
+ COLLATERAL_MANAGER_MODULE_IMPL: "0x55110B9dd6B2c9f812564e7a1ef42b3c76E1A3Bb",
515
+ LIQUIDATION_MANAGER_MODULE: "0x74B28695352E7bf736D6c9F76ccb7B4439477De9",
516
+ LIQUIDATION_MANAGER_MODULE_IMPL: "0xe7444C1d9652dAb31BaAdBE4C7c7e7Df3515dA46",
517
+ CIRCUIT_BREAKER_MODULE: "0xF7b545d3a4Ee056D06909AB367E2F7bFFE3cB1BC",
518
+ CIRCUIT_BREAKER_MODULE_IMPL: "0x40e8328D61342C6ADC51dfdC723296c908f95038",
519
+ ADMIN_MODULE: "0x0023B71B586795eE5fa4E83E384345C1EC8Bb946",
520
+ ADMIN_MODULE_IMPL: "0xb4C5C7E051A1e672F014B25CB5D55B225Aa0D512",
521
+ BTC_SPEND_AUTHORIZER: "0xfBbF108486fa07F1B06a811C5b66ed68DD9c508a",
522
+ BTC_SPEND_AUTHORIZER_IMPL: "0x40c9e8C46C65E0A57BB63da5368868A9E8Df81A5",
523
+ POSITION_MANAGER_VIEWS: "0x8B57954eA338c6A6bfF1457f71080e25baFF3937",
524
+ POSITION_MANAGER_VIEWS_IMPL: "0xE68DC096A65Ecddbc6A9b5c6e5f878e2CE143Bfe",
525
+ POSITION_MANAGER: "0x12A1836e56139ccaD8722B89519d84233efc224B",
526
+ POSITION_MANAGER_IMPL: "0x2e7170d6Fb15A876dB726732e72e63109bcB916d",
527
+ LOAN_OPERATIONS_MANAGER_MODULE: "0x2561974A40F1AEed1251d0A090A83cF8536FB9E9",
528
+ LOAN_OPERATIONS_MANAGER_MODULE_IMPL: "0x7d90aAB4466f59BA9aC9C7a9BF14dC53734336e7",
529
+ UPGRADE_VALIDATOR: "0xC46Ae71F22e3741A6CF46E399aE914C4868fEbed",
530
+ UPGRADE_VALIDATOR_IMPL: "0x4f835e77D1211299a1cbb8Aa2b42d9B390cC95CA",
531
+ OPERATION_AUTHORIZATION_REGISTRY: "0xD4505645b724754f5170a2027804a4265e860d44",
532
+ OPERATION_AUTHORIZATION_REGISTRY_IMPL: "0x493118746840EDB2D396E71632D2E774CA14070e",
533
+ AGENT_DELEGATION_REGISTRY: "0x54853b7E91ce2Be34ce65655D80c4447e67187Fa",
534
+ AGENT_DELEGATION_REGISTRY_IMPL: "0xa9fF405Edd4329fc3159a64F56B37EBD253e4928",
535
+ DH_AGENT_DELEGATE: "0x70232d0caBe529e29a01A442423d7e03BBd414c8"
536
+ }
537
+ };
538
+ var LOCALHOST_DEPLOYMENT = {
539
+ network: "localhost",
540
+ chainId: 1337,
541
+ timestamp: "2026-07-23T17:13:42.777Z",
542
+ deployer: "",
543
+ contracts: {
544
+ MessageHashBuilder: "0xa82fF9aFd8f496c3d6ac40E2a0F282E47488CFc9",
545
+ LITActionValidator: "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853",
546
+ UpgradeValidator: "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318",
547
+ UCDToken: "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512",
548
+ UCDController: "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9",
549
+ PositionManagerCoreModule: "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e",
550
+ TermManagerModule: "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82",
551
+ LoanOperationsManagerModule: "0x68B1D87F95878fE05B998F19b66F4baba5De1aed",
552
+ BTCSpendAuthorizer: "0xc6e7DF5E7b4f2A278906862b61205850344D4e7d",
553
+ CollateralManagerModule: "0x322813Fd9A801c5507c9de605d63CEA4f2CE6c44",
554
+ LiquidationManagerModule: "0x4A679253410272dd5232B3Ff7cF5dbB88f295319",
555
+ CircuitBreakerModule: "0x0B306BF915C4d645ff596e518fAf3F9669b97016",
556
+ AdminModule: "0x09635F643e140090A9A8Dcd712eD6285858ceBef",
557
+ PositionManagerViews: "0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1",
558
+ PositionManager: "0x851356ae760d987E095750cCeb3bC6014560891C",
559
+ OperationAuthorizationRegistry: "0xc96304e3c037f81dA488ed9dEa1D8F2a48278a75",
560
+ PKPValidation: "0xD0141E899a65C95a556fE2B27e5982A6DE7fDD7A"
561
+ },
562
+ latestEnv: {
563
+ UCD_TOKEN: "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512",
564
+ UCD_CONTROLLER: "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9",
565
+ POSITION_MANAGER: "0x851356ae760d987E095750cCeb3bC6014560891C",
566
+ PKP_VALIDATION_REGISTRY: "0xD0141E899a65C95a556fE2B27e5982A6DE7fDD7A",
567
+ PKP_VALIDATION_CID_V1: "0x12203af2054b0ab6e18d898ddfc7985593439fb82d22336133387c1169f98d3702ab",
568
+ PKP_VALIDATION_CID_V3: "0x12203af2054b0ab6e18d898ddfc7985593439fb82d22336133387c1169f98d3702ab",
569
+ PKP_ETH_ADDRESS: "0x406f6a9855de2f5577b1525f0600461f02859bd0",
570
+ OPERATION_AUTHORIZATION_REGISTRY: "0xc96304e3c037f81dA488ed9dEa1D8F2a48278a75",
571
+ UCD_MINT_VALIDATOR_ADDRESS: "0x406f6a9855de2f5577b1525f0600461f02859bd0",
572
+ UCD_MINT_VALIDATOR_VERSION: 1,
573
+ BTC_WITHDRAWAL_VALIDATOR_ADDRESS: "0x406f6a9855de2f5577b1525f0600461f02859bd0",
574
+ BTC_WITHDRAWAL_VALIDATOR_VERSION: 3,
575
+ UPDATE_BALANCE_VALIDATOR_ADDRESS: "0x406f6a9855de2f5577b1525f0600461f02859bd0",
576
+ UPDATE_BALANCE_VALIDATOR_VERSION: 1,
577
+ PROCESS_PAYMENT_VALIDATOR_ADDRESS: "0x406f6a9855de2f5577b1525f0600461f02859bd0",
578
+ PROCESS_PAYMENT_VALIDATOR_VERSION: 1,
579
+ EXTEND_POSITION_VALIDATOR_ADDRESS: "0x406f6a9855de2f5577b1525f0600461f02859bd0",
580
+ EXTEND_POSITION_VALIDATOR_VERSION: 1,
581
+ POSITION_MANAGER_CORE_MODULE: "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e",
582
+ LOAN_OPERATIONS_MANAGER_MODULE: "0x68B1D87F95878fE05B998F19b66F4baba5De1aed",
583
+ TERM_MANAGER_MODULE: "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82",
584
+ COMMUNITY_MANAGER_MODULE: ""
585
+ }
586
+ };
587
+ var ALL_DEPLOYMENTS = {
588
+ sepolia: SEPOLIA_DEPLOYMENT,
589
+ mainnet: MAINNET_DEPLOYMENT,
590
+ localhost: LOCALHOST_DEPLOYMENT
591
+ };
592
+
593
+ // src/utils/safe-agent-delegation.utils.ts
594
+ var SAFE_ABI = [
595
+ "function getModulesPaginated(address start, uint256 pageSize) view returns (address[] modules, address next)"
596
+ ];
597
+ var MODULE_ABI = [
598
+ "function safe() view returns (address)",
599
+ "function agent() view returns (address)",
600
+ "function positionManager() view returns (address)"
601
+ ];
602
+ var FACTORY_ABI = ["function isFromFactory(address) view returns (bool)"];
603
+ var REGISTRY_ABI = [
604
+ "function agentOf(address user) view returns (address agent, uint64 validUntil, uint8 status, uint64 registeredAt, uint64 revokedAt)"
605
+ ];
606
+ var MODULE_LIST_SENTINEL = "0x0000000000000000000000000000000000000001";
607
+ var MODULE_PAGE_SIZE = 50;
608
+ var lower = (v) => v.trim().toLowerCase();
609
+ async function classifyModule(provider, moduleAddress, safeAddress, positionManager, factoryAddress) {
610
+ const module2 = new import_ethers.Contract(moduleAddress, MODULE_ABI, provider);
611
+ let boundSafe;
612
+ try {
613
+ boundSafe = await module2.safe();
614
+ } catch {
615
+ return null;
616
+ }
617
+ if (lower(boundSafe) !== lower(safeAddress))
618
+ return false;
619
+ let modulePm;
620
+ try {
621
+ modulePm = await module2.positionManager();
622
+ } catch {
623
+ return false;
624
+ }
625
+ if (lower(modulePm) !== lower(positionManager))
626
+ return false;
627
+ if (!factoryAddress)
628
+ return null;
629
+ try {
630
+ const factory = new import_ethers.Contract(factoryAddress, FACTORY_ABI, provider);
631
+ return await factory.isFromFactory(moduleAddress) === true;
632
+ } catch {
633
+ return null;
634
+ }
635
+ }
636
+ async function getSafeAgentDelegation(params) {
637
+ const { safeAddress, chainId, provider } = params;
638
+ const normalized = lower(safeAddress);
639
+ const unknown = {
640
+ safeAddress: normalized,
641
+ chainId,
642
+ status: "unknown",
643
+ moduleAddress: null,
644
+ agentAddress: null,
645
+ validUntil: null,
646
+ truncated: false
647
+ };
648
+ const contracts = Object.values(ALL_DEPLOYMENTS).find(
649
+ (deployment) => deployment.chainId === chainId
650
+ )?.contracts;
651
+ const positionManager = contracts?.PositionManager;
652
+ if (!positionManager)
653
+ return unknown;
654
+ const factoryAddress = contracts?.AgentModuleFactory;
655
+ const registryAddress = contracts?.AgentDelegationRegistry;
656
+ let modules;
657
+ let next;
658
+ try {
659
+ const safe = new import_ethers.Contract(safeAddress, SAFE_ABI, provider);
660
+ const page = await safe.getModulesPaginated(
661
+ MODULE_LIST_SENTINEL,
662
+ MODULE_PAGE_SIZE
663
+ );
664
+ modules = [...page[0]];
665
+ next = page[1];
666
+ } catch {
667
+ return unknown;
668
+ }
669
+ const truncated = BigInt(next) > BigInt(MODULE_LIST_SENTINEL);
670
+ let indeterminate = false;
671
+ for (const moduleAddress of modules) {
672
+ const verdict = await classifyModule(
673
+ provider,
674
+ moduleAddress,
675
+ normalized,
676
+ positionManager,
677
+ factoryAddress
678
+ );
679
+ if (verdict === null) {
680
+ indeterminate = true;
681
+ continue;
682
+ }
683
+ if (!verdict)
684
+ continue;
685
+ let agentAddress = null;
686
+ try {
687
+ agentAddress = await new import_ethers.Contract(
688
+ moduleAddress,
689
+ MODULE_ABI,
690
+ provider
691
+ ).agent();
692
+ } catch {
693
+ }
694
+ if (!registryAddress) {
695
+ indeterminate = true;
696
+ continue;
697
+ }
698
+ let validUntil;
699
+ let status;
700
+ try {
701
+ const record = await new import_ethers.Contract(
702
+ registryAddress,
703
+ REGISTRY_ABI,
704
+ provider
705
+ ).agentOf(safeAddress);
706
+ status = Number(record[2]);
707
+ validUntil = Number(record[1]);
708
+ } catch {
709
+ indeterminate = true;
710
+ continue;
711
+ }
712
+ const now = Math.floor(Date.now() / 1e3);
713
+ if (status !== 1 || validUntil <= now) {
714
+ return { ...unknown, status: "not-delegated", truncated };
715
+ }
716
+ return {
717
+ safeAddress: normalized,
718
+ chainId,
719
+ status: "delegated",
720
+ moduleAddress,
721
+ agentAddress: agentAddress ? lower(agentAddress) : null,
722
+ validUntil,
723
+ truncated
724
+ };
725
+ }
726
+ if (truncated || indeterminate)
727
+ return { ...unknown, truncated };
728
+ return { ...unknown, status: "not-delegated" };
729
+ }
730
+ var SAFE_DISABLE_ABI = [
731
+ "function disableModule(address prevModule, address module)"
732
+ ];
733
+ var REGISTRY_REVOKE_ABI = [
734
+ "function revokeAgent(address user, bytes32 reason)"
735
+ ];
736
+ var DEFAULT_DISABLE_REASON = "0x757365722d64697361626c656400000000000000000000000000000000000000";
737
+ var MAX_MODULE_PAGES = 100;
738
+ function isEndOfModuleList(next) {
739
+ const value = lower(next);
740
+ return value === lower(MODULE_LIST_SENTINEL) || value === "0x0000000000000000000000000000000000000000";
741
+ }
742
+ async function buildSafeAgentDelegationDisableCalls(params) {
743
+ const { safeAddress, chainId, provider, reason } = params;
744
+ const normalized = lower(safeAddress);
745
+ const contracts = Object.values(ALL_DEPLOYMENTS).find(
746
+ (deployment) => deployment.chainId === chainId
747
+ )?.contracts;
748
+ const registryAddress = contracts?.AgentDelegationRegistry;
749
+ if (!registryAddress) {
750
+ throw new Error(
751
+ `Safe delegation is not configured for chain ${chainId} \u2014 no AgentDelegationRegistry address, so a delegation cannot be revoked there.`
752
+ );
753
+ }
754
+ let moduleAddress = params.moduleAddress;
755
+ let agentAddress = null;
756
+ if (!moduleAddress) {
757
+ const delegation = await getSafeAgentDelegation({
758
+ safeAddress: normalized,
759
+ chainId,
760
+ provider
761
+ });
762
+ if (delegation.status !== "delegated" || !delegation.moduleAddress) {
763
+ throw new Error(
764
+ `No live delegation found for Safe ${normalized} on chain ${chainId} (status: ${delegation.status}) \u2014 there is nothing to revoke.`
765
+ );
766
+ }
767
+ moduleAddress = delegation.moduleAddress;
768
+ agentAddress = delegation.agentAddress;
769
+ }
770
+ const prevModule = await findPreviousModule(
771
+ provider,
772
+ normalized,
773
+ moduleAddress
774
+ );
775
+ const safeIface = new import_ethers.Interface(SAFE_DISABLE_ABI);
776
+ const registryIface = new import_ethers.Interface(REGISTRY_REVOKE_ABI);
777
+ return {
778
+ calls: [
779
+ {
780
+ to: registryAddress,
781
+ data: registryIface.encodeFunctionData("revokeAgent", [
782
+ normalized,
783
+ reason ?? DEFAULT_DISABLE_REASON
784
+ ]),
785
+ value: "0x0"
786
+ },
787
+ {
788
+ to: normalized,
789
+ data: safeIface.encodeFunctionData("disableModule", [
790
+ prevModule,
791
+ moduleAddress
792
+ ]),
793
+ value: "0x0"
794
+ }
795
+ ],
796
+ moduleAddress,
797
+ agentAddress,
798
+ prevModule
799
+ };
800
+ }
801
+ async function findPreviousModule(provider, safeAddress, moduleAddress) {
802
+ const safe = new import_ethers.Contract(safeAddress, SAFE_ABI, provider);
803
+ const target = lower(moduleAddress);
804
+ let start = MODULE_LIST_SENTINEL;
805
+ let previous = MODULE_LIST_SENTINEL;
806
+ for (let page = 0; page < MAX_MODULE_PAGES; page += 1) {
807
+ let modules;
808
+ let next;
809
+ try {
810
+ const result = await safe.getModulesPaginated(start, MODULE_PAGE_SIZE);
811
+ modules = [...result[0]];
812
+ next = result[1];
813
+ } catch (error) {
814
+ throw new Error(
815
+ `Could not read the enabled modules of Safe ${safeAddress} on chain \u2014 refusing to guess a predecessor for disableModule. ${String(error)}`
816
+ );
817
+ }
818
+ for (const entry of modules) {
819
+ if (lower(entry) === target)
820
+ return previous;
821
+ previous = entry;
822
+ }
823
+ if (modules.length === 0 || isEndOfModuleList(next))
824
+ break;
825
+ const cursor = modules[modules.length - 1];
826
+ if (lower(cursor) === lower(start))
827
+ break;
828
+ start = cursor;
829
+ }
830
+ throw new Error(
831
+ `Module ${moduleAddress} is not enabled on Safe ${safeAddress} \u2014 there is nothing to disable. The delegation status used to build this was stale.`
832
+ );
833
+ }
834
+ // Annotate the CommonJS export names for ESM import in node:
835
+ 0 && (module.exports = {
836
+ buildSafeAgentDelegationDisableCalls,
837
+ getSafeAgentDelegation
838
+ });