@gvnrdao/dh-sdk 0.0.340 → 0.0.342

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.
package/dist/index.js CHANGED
@@ -2351,7 +2351,7 @@ ${errorReport}`);
2351
2351
  }
2352
2352
  init_debug_logger();
2353
2353
  init_session_signature_cache();
2354
- var import_ethers23 = require("ethers");
2354
+ var import_ethers24 = require("ethers");
2355
2355
  var EXPIRED_LOAN_MIN_LIQUIDATION_THRESHOLD_BPS = 11e3;
2356
2356
  var GRACE_PERIOD_DAYS = 30;
2357
2357
  var SATOSHIS_PER_BITCOIN = 100000000n;
@@ -5279,12 +5279,12 @@ ${auth.clientId}`;
5279
5279
  }
5280
5280
  async function executeVaultSnapshot(params) {
5281
5281
  global.ethers = {
5282
- ...import_ethers23.ethers,
5282
+ ...import_ethers24.ethers,
5283
5283
  providers: {
5284
- StaticJsonRpcProvider: import_ethers23.ethers.JsonRpcProvider
5284
+ StaticJsonRpcProvider: import_ethers24.ethers.JsonRpcProvider
5285
5285
  },
5286
- Contract: import_ethers23.ethers.Contract,
5287
- utils: import_ethers23.ethers
5286
+ Contract: import_ethers24.ethers.Contract,
5287
+ utils: import_ethers24.ethers
5288
5288
  // v6 moved utils to top level
5289
5289
  };
5290
5290
  global.Lit = {
@@ -5866,7 +5866,7 @@ __export(src_exports, {
5866
5866
  module.exports = __toCommonJS(src_exports);
5867
5867
 
5868
5868
  // src/modules/diamond-hands-sdk.ts
5869
- var import_ethers21 = require("ethers");
5869
+ var import_ethers22 = require("ethers");
5870
5870
 
5871
5871
  // src/types/result.ts
5872
5872
  function success(value) {
@@ -6249,15 +6249,55 @@ var SDKError = class _SDKError extends Error {
6249
6249
  };
6250
6250
 
6251
6251
  // src/utils/chunks/eip1559-broadcast.utils.ts
6252
+ var import_ethers2 = require("ethers");
6253
+
6254
+ // src/utils/sign-guard/fee-ceiling.ts
6252
6255
  var import_ethers = require("ethers");
6256
+ var MAX_GAS_LIMIT = 5000000n;
6257
+ var MAX_FEE_PER_GAS_WEI = 2000000000000n;
6258
+ var DEFAULT_MAX_TX_FEE_WEI = 250000000000000000n;
6259
+ var PRIORITY_FEE_FLOOR_WEI = 100000000n;
6260
+ var PRIORITY_FEE_CAP_WEI = 3000000000n;
6261
+ var DEFAULT_FEE_CEILING = {
6262
+ maxGasLimit: MAX_GAS_LIMIT,
6263
+ maxFeePerGasWei: MAX_FEE_PER_GAS_WEI,
6264
+ maxTxFeeWei: DEFAULT_MAX_TX_FEE_WEI
6265
+ };
6266
+ function fmtEth(wei) {
6267
+ return `${import_ethers.ethers.formatEther(wei)} ETH`;
6268
+ }
6269
+ function fmtGwei(wei) {
6270
+ return `${import_ethers.ethers.formatUnits(wei, "gwei")} gwei`;
6271
+ }
6272
+ function worstCaseFeeWei(gasLimit, maxFeePerGas) {
6273
+ if (gasLimit == null || maxFeePerGas == null)
6274
+ return null;
6275
+ return gasLimit * maxFeePerGas;
6276
+ }
6277
+ function assertFeeCeiling(gasLimit, maxFeePerGas, raise, ceiling = DEFAULT_FEE_CEILING) {
6278
+ if (gasLimit != null && gasLimit > ceiling.maxGasLimit) {
6279
+ raise(`gasLimit ${gasLimit} exceeds the signing ceiling of ${ceiling.maxGasLimit}`);
6280
+ }
6281
+ if (maxFeePerGas != null && maxFeePerGas > ceiling.maxFeePerGasWei) {
6282
+ raise(
6283
+ `maxFeePerGas ${fmtGwei(maxFeePerGas)} exceeds the signing ceiling of ${fmtGwei(ceiling.maxFeePerGasWei)}`
6284
+ );
6285
+ }
6286
+ const worst = worstCaseFeeWei(gasLimit, maxFeePerGas);
6287
+ if (worst != null && worst > ceiling.maxTxFeeWei) {
6288
+ raise(
6289
+ `worst-case transaction fee ${fmtEth(worst)} (gasLimit ${gasLimit} \xD7 ${fmtGwei(maxFeePerGas)}) exceeds the signing ceiling of ${fmtEth(ceiling.maxTxFeeWei)}.${ceiling.raiseHint ? ` ${ceiling.raiseHint}` : ""}`
6290
+ );
6291
+ }
6292
+ }
6293
+
6294
+ // src/utils/chunks/eip1559-broadcast.utils.ts
6253
6295
  var MINT_UCD_GAS_CEILING = BigInt(13e5);
6254
6296
  var WITHDRAW_BTC_GAS_CEILING = BigInt(3e6);
6255
6297
  var MAKE_PAYMENT_GAS_CEILING = BigInt(1e6);
6256
6298
  var EXTEND_POSITION_GAS_CEILING = BigInt(1e6);
6257
6299
  var LIQUIDATION_COMMIT_GAS_CEILING = BigInt(1e6);
6258
6300
  var LIQUIDATION_REVEAL_GAS_CEILING = BigInt(2e6);
6259
- var PRIORITY_FEE_FLOOR_WEI = (0, import_ethers.parseUnits)("0.1", "gwei");
6260
- var PRIORITY_FEE_CAP_WEI = (0, import_ethers.parseUnits)("3", "gwei");
6261
6301
  var FEE_HISTORY_BLOCK_COUNT = 20;
6262
6302
  var FEE_HISTORY_REWARD_PERCENTILE = 75;
6263
6303
  function isJsonRpcSendable(provider) {
@@ -6278,12 +6318,12 @@ function parseFeeHistory(raw) {
6278
6318
  `eth_feeHistory returned no reward percentiles \u2014 the RPC ignored the rewardPercentiles argument: ${JSON.stringify(raw)}`
6279
6319
  );
6280
6320
  }
6281
- const nextBaseFee = (0, import_ethers.getBigInt)(baseFeePerGas[baseFeePerGas.length - 1], "baseFeePerGas");
6321
+ const nextBaseFee = (0, import_ethers2.getBigInt)(baseFeePerGas[baseFeePerGas.length - 1], "baseFeePerGas");
6282
6322
  const tips = reward.map((perBlock, i) => {
6283
6323
  if (!Array.isArray(perBlock) || perBlock.length === 0) {
6284
6324
  throw new Error(`eth_feeHistory reward row ${i} is empty: ${JSON.stringify(raw)}`);
6285
6325
  }
6286
- return (0, import_ethers.getBigInt)(perBlock[0], `reward[${i}]`);
6326
+ return (0, import_ethers2.getBigInt)(perBlock[0], `reward[${i}]`);
6287
6327
  });
6288
6328
  return { nextBaseFee, tips };
6289
6329
  }
@@ -6317,7 +6357,7 @@ async function resolveEip1559FeeFields(feeProvider) {
6317
6357
  }
6318
6358
  const history = parseFeeHistory(
6319
6359
  await feeProvider.send("eth_feeHistory", [
6320
- (0, import_ethers.toQuantity)(FEE_HISTORY_BLOCK_COUNT),
6360
+ (0, import_ethers2.toQuantity)(FEE_HISTORY_BLOCK_COUNT),
6321
6361
  "latest",
6322
6362
  [FEE_HISTORY_REWARD_PERCENTILE]
6323
6363
  ])
@@ -6440,7 +6480,7 @@ function validateSDKConfig(config) {
6440
6480
  }
6441
6481
 
6442
6482
  // src/utils/mint-authorization.utils.ts
6443
- var import_ethers3 = require("ethers");
6483
+ var import_ethers4 = require("ethers");
6444
6484
 
6445
6485
  // src/utils/quantum-timing.ts
6446
6486
  var QUANTUM_WINDOW_SECONDS = 60;
@@ -6548,7 +6588,7 @@ async function awaitSafeSubmissionWindowOnChain(signatureQuantum, chainNow, slee
6548
6588
  }
6549
6589
 
6550
6590
  // src/utils/borrower-authorization-712.ts
6551
- var import_ethers2 = require("ethers");
6591
+ var import_ethers3 = require("ethers");
6552
6592
  init_deployment_addresses();
6553
6593
  var BORROWER_AUTHORIZATION_712_DOMAIN_NAME = "DiamondHands.Protocol";
6554
6594
  var BORROWER_AUTHORIZATION_712_DOMAIN_VERSION = "1";
@@ -6754,7 +6794,7 @@ async function getPKPPublicKeyFromTokenId(pkpTokenId, provider, pkpNftContractAd
6754
6794
  `pkpNftContractAddress is required for getPKPPublicKeyFromTokenId`
6755
6795
  );
6756
6796
  }
6757
- const pkpNft = new import_ethers3.Contract(
6797
+ const pkpNft = new import_ethers4.Contract(
6758
6798
  pkpNftContractAddress,
6759
6799
  PKP_NFT_ABI,
6760
6800
  provider
@@ -6791,7 +6831,7 @@ async function generateBalanceConfirmationAuthorization(positionId, chainId, sig
6791
6831
  const timestamp = calculateNextQuantumTimestamp();
6792
6832
  const caller = await signer.getAddress();
6793
6833
  const action = "confirm-balance";
6794
- const actionHash = (0, import_ethers3.keccak256)((0, import_ethers3.toUtf8Bytes)(action));
6834
+ const actionHash = (0, import_ethers4.keccak256)((0, import_ethers4.toUtf8Bytes)(action));
6795
6835
  const types = [
6796
6836
  "bytes32",
6797
6837
  // positionId
@@ -6805,8 +6845,8 @@ async function generateBalanceConfirmationAuthorization(positionId, chainId, sig
6805
6845
  // actionHash
6806
6846
  ];
6807
6847
  const values = [positionId, timestamp, chainId, caller, actionHash];
6808
- const messageHash = (0, import_ethers3.solidityPackedKeccak256)(types, values);
6809
- const messageHashBytes = (0, import_ethers3.getBytes)(messageHash);
6848
+ const messageHash = (0, import_ethers4.solidityPackedKeccak256)(types, values);
6849
+ const messageHashBytes = (0, import_ethers4.getBytes)(messageHash);
6810
6850
  const signature = await signer.signMessage(messageHashBytes);
6811
6851
  return {
6812
6852
  positionId,
@@ -6901,7 +6941,7 @@ function maxPrincipalWithinLoanCap(params) {
6901
6941
  }
6902
6942
 
6903
6943
  // src/utils/eip712-login.ts
6904
- var import_ethers4 = require("ethers");
6944
+ var import_ethers5 = require("ethers");
6905
6945
  function buildLoginDomain(chainId) {
6906
6946
  return {
6907
6947
  name: "Diamond Hands",
@@ -6947,7 +6987,7 @@ async function buildSignedLoginPayload(signer, chainId, audience, reuse, withSta
6947
6987
  ...statement ? { statement } : {},
6948
6988
  address,
6949
6989
  issuedAt: reuse?.issuedAt ?? Math.floor(Date.now() / 1e3),
6950
- nonce: reuse?.nonce ?? (0, import_ethers4.hexlify)((0, import_ethers4.randomBytes)(32)),
6990
+ nonce: reuse?.nonce ?? (0, import_ethers5.hexlify)((0, import_ethers5.randomBytes)(32)),
6951
6991
  ...audience ? { audience } : {}
6952
6992
  };
6953
6993
  const signature = await signer.signTypedData(
@@ -7549,22 +7589,19 @@ var ServerSession = class {
7549
7589
  };
7550
7590
 
7551
7591
  // src/utils/quantum-revert.utils.ts
7552
- var import_ethers5 = require("ethers");
7592
+ var import_ethers6 = require("ethers");
7553
7593
  var DEAD_ZONE_VIOLATION_SELECTOR = "0xbe4b82c1";
7554
7594
  var ERROR_STRING_SELECTOR = "0x08c379a0";
7555
7595
  var PANIC_SELECTOR = "0x4e487b71";
7556
7596
  var QUANTUM_REVERT_NAMES = {
7557
7597
  "0xbe4b82c1": "DeadZoneViolation()",
7558
- "0x137f3b70": "InDeadZone()",
7559
- "0x131d9a21": "QuantumExpired()",
7560
7598
  "0x52ce5d58": "QuantumAlreadyUsed()",
7561
7599
  "0x3e76a3c9": "QuantumOutsideWindow()",
7562
- "0x8baa579f": "InvalidSignature()",
7563
7600
  "0x62278171": "InvalidValidatorSignature()",
7564
- "0x3ee5aeb5": "OperationNotAuthorized()",
7565
- "0x48f5c3ed": "Unauthorized()",
7566
- "0x70f4b32a": "UnauthorizedSigner()",
7567
- "0xd92e233d": "ValidationFailed()",
7601
+ "0x82b42900": "Unauthorized()",
7602
+ "0x3ee5aeb5": "ReentrancyGuardReentrantCall()",
7603
+ "0x0a0b0d79": "ValidationFailed()",
7604
+ "0xd92e233d": "ZeroAddress()",
7568
7605
  "0x36bfdeea": "StateHashMismatch()",
7569
7606
  "0xb9d419a7": "DebtUpdateVerificationFailed()",
7570
7607
  "0xc7e20553": "DebtUpdateVerificationFailedDetailed(bytes32,uint256,uint256,uint256,uint256,uint256)",
@@ -7580,13 +7617,13 @@ function decodeQuantumRevert(e) {
7580
7617
  if (!name && selector && data) {
7581
7618
  try {
7582
7619
  if (selector === ERROR_STRING_SELECTOR) {
7583
- const [message] = import_ethers5.AbiCoder.defaultAbiCoder().decode(
7620
+ const [message] = import_ethers6.AbiCoder.defaultAbiCoder().decode(
7584
7621
  ["string"],
7585
7622
  "0x" + data.slice(10)
7586
7623
  );
7587
7624
  name = `Error("${message}")`;
7588
7625
  } else if (selector === PANIC_SELECTOR) {
7589
- const [code] = import_ethers5.AbiCoder.defaultAbiCoder().decode(
7626
+ const [code] = import_ethers6.AbiCoder.defaultAbiCoder().decode(
7590
7627
  ["uint256"],
7591
7628
  "0x" + data.slice(10)
7592
7629
  );
@@ -7838,17 +7875,17 @@ async function reconcileAuthorizedSpend(spend, esploraBaseUrl, httpGetJson = def
7838
7875
  }
7839
7876
 
7840
7877
  // src/utils/stale-spend-invalidate-message.ts
7841
- var import_ethers6 = require("ethers");
7878
+ var import_ethers7 = require("ethers");
7842
7879
  var RECOVERY_INVALIDATE_ACTION = "btc-utxo-invalidator";
7843
7880
  var QUANTUM_SECONDS = 60;
7844
7881
  var QUANTUM_SAFE_THRESHOLD = 40;
7845
7882
  function buildInvalidateMessageHash(params) {
7846
- const positionIdBytes32 = (0, import_ethers6.zeroPadValue)(
7883
+ const positionIdBytes32 = (0, import_ethers7.zeroPadValue)(
7847
7884
  params.positionId.startsWith("0x") ? params.positionId : `0x${params.positionId}`,
7848
7885
  32
7849
7886
  );
7850
- const actionHash = (0, import_ethers6.keccak256)((0, import_ethers6.toUtf8Bytes)(RECOVERY_INVALIDATE_ACTION));
7851
- return (0, import_ethers6.solidityPackedKeccak256)(
7887
+ const actionHash = (0, import_ethers7.keccak256)((0, import_ethers7.toUtf8Bytes)(RECOVERY_INVALIDATE_ACTION));
7888
+ return (0, import_ethers7.solidityPackedKeccak256)(
7852
7889
  [
7853
7890
  "bytes32",
7854
7891
  // positionId
@@ -7894,7 +7931,7 @@ async function buildInvalidateStaleSpendEnvelope(params) {
7894
7931
  utxoTxid,
7895
7932
  utxoVout
7896
7933
  });
7897
- const signature = await signer.signMessage((0, import_ethers6.getBytes)(messageHash));
7934
+ const signature = await signer.signMessage((0, import_ethers7.getBytes)(messageHash));
7898
7935
  const borrowerAddress = await signer.getAddress();
7899
7936
  return {
7900
7937
  positionId,
@@ -7909,7 +7946,7 @@ async function buildInvalidateStaleSpendEnvelope(params) {
7909
7946
  }
7910
7947
 
7911
7948
  // src/utils/btc-withdrawal-message.ts
7912
- var import_ethers7 = require("ethers");
7949
+ var import_ethers8 = require("ethers");
7913
7950
  var QUANTUM_SECONDS2 = 60;
7914
7951
  var QUANTUM_SAFE_THRESHOLD2 = 40;
7915
7952
  function hashBtcInputSet(utxos) {
@@ -7940,7 +7977,7 @@ function hashBtcInputSet(utxos) {
7940
7977
  seen.add(key);
7941
7978
  }
7942
7979
  const canonical = normalized.sort((a, b) => a.txid < b.txid ? -1 : a.txid > b.txid ? 1 : a.vout - b.vout).map((u) => `${u.txid}:${u.vout}:${u.value}`).join("|");
7943
- return (0, import_ethers7.keccak256)((0, import_ethers7.toUtf8Bytes)(canonical));
7980
+ return (0, import_ethers8.keccak256)((0, import_ethers8.toUtf8Bytes)(canonical));
7944
7981
  }
7945
7982
  async function buildBtcExecuteEnvelope(params) {
7946
7983
  const {
@@ -7985,15 +8022,15 @@ async function buildBtcExecuteEnvelope(params) {
7985
8022
  } else {
7986
8023
  timestamp = currentQuantumStart;
7987
8024
  }
7988
- const actionHash = (0, import_ethers7.keccak256)(
7989
- (0, import_ethers7.toUtf8Bytes)("execute-btc-withdrawal")
8025
+ const actionHash = (0, import_ethers8.keccak256)(
8026
+ (0, import_ethers8.toUtf8Bytes)("execute-btc-withdrawal")
7990
8027
  );
7991
8028
  const utxoIdentifier = `${txid}:${vout}`;
7992
- const positionIdBytes32 = (0, import_ethers7.zeroPadValue)(
8029
+ const positionIdBytes32 = (0, import_ethers8.zeroPadValue)(
7993
8030
  positionId.startsWith("0x") ? positionId : `0x${positionId}`,
7994
8031
  32
7995
8032
  );
7996
- const messageHash = (0, import_ethers7.solidityPackedKeccak256)(
8033
+ const messageHash = (0, import_ethers8.solidityPackedKeccak256)(
7997
8034
  [
7998
8035
  "bytes32",
7999
8036
  // positionId
@@ -8026,7 +8063,7 @@ async function buildBtcExecuteEnvelope(params) {
8026
8063
  actionHash
8027
8064
  ]
8028
8065
  );
8029
- const userSignature = await signer.signMessage((0, import_ethers7.getBytes)(messageHash));
8066
+ const userSignature = await signer.signMessage((0, import_ethers8.getBytes)(messageHash));
8030
8067
  const borrowerAddress = await signer.getAddress();
8031
8068
  return {
8032
8069
  positionId,
@@ -8090,7 +8127,7 @@ function maybeTemperSignature(signature, shouldTemper, operationName) {
8090
8127
  }
8091
8128
 
8092
8129
  // src/utils/address-conversion.utils.ts
8093
- var import_ethers8 = require("ethers");
8130
+ var import_ethers9 = require("ethers");
8094
8131
 
8095
8132
  // src/utils/chunks/bitcoin-utils.ts
8096
8133
  var import_sha256 = require("@noble/hashes/sha256");
@@ -8388,7 +8425,7 @@ function normalizeBitcoinAddress(address) {
8388
8425
  }
8389
8426
 
8390
8427
  // src/protocol/protocol-pause.ts
8391
- var import_ethers9 = require("ethers");
8428
+ var import_ethers10 = require("ethers");
8392
8429
  var GET_PROTOCOL_PAUSE_STATUS_ABI = [
8393
8430
  "function getProtocolPauseStatus() view returns (tuple(bool positionManagerPaused, bool positionManagerLiquidationsPaused, bool positionManagerCorePaused, bool loanOperationsPaused, bool collateralManagerPaused, bool liquidationManagerPaused, bool circuitBreakerPaused, bool ucdControllerPaused, bool ucdTokenPaused, bool simplePsmPaused))"
8394
8431
  ];
@@ -8410,7 +8447,7 @@ function rowToStatus(row) {
8410
8447
  return row;
8411
8448
  }
8412
8449
  async function fetchProtocolPauseStatus(provider, positionManagerAddress) {
8413
- const iface = new import_ethers9.Interface(GET_PROTOCOL_PAUSE_STATUS_ABI);
8450
+ const iface = new import_ethers10.Interface(GET_PROTOCOL_PAUSE_STATUS_ABI);
8414
8451
  const data = iface.encodeFunctionData("getProtocolPauseStatus", []);
8415
8452
  const raw = await provider.call({ to: positionManagerAddress, data });
8416
8453
  const decoded = iface.decodeFunctionResult("getProtocolPauseStatus", raw);
@@ -8543,7 +8580,7 @@ function extractOptionalLitSignature(raw) {
8543
8580
  }
8544
8581
 
8545
8582
  // src/modules/contract/contract-manager.module.ts
8546
- var import_ethers10 = require("ethers");
8583
+ var import_ethers11 = require("ethers");
8547
8584
  init_deployment_addresses();
8548
8585
  var POSITION_MANAGER_ABI = [
8549
8586
  "function createPosition(bytes32 pkpId, bytes calldata validatorSignature, string mainnetVaultAddress, string regtestVaultAddress, uint256 selectedTermMonths, uint256 validatorVersion, bytes calldata pkpPublicKey) external returns (bytes32 positionId)",
@@ -8617,38 +8654,38 @@ var ContractManager = class {
8617
8654
  }
8618
8655
  const contractRunner = runner;
8619
8656
  const contracts = {
8620
- positionManager: new import_ethers10.Contract(
8657
+ positionManager: new import_ethers11.Contract(
8621
8658
  contractAddresses.positionManager,
8622
8659
  POSITION_MANAGER_ABI,
8623
8660
  contractRunner
8624
8661
  ),
8625
- loanOperationsManager: new import_ethers10.Contract(
8626
- contractAddresses.loanOperationsManager || import_ethers10.ZeroAddress,
8662
+ loanOperationsManager: new import_ethers11.Contract(
8663
+ contractAddresses.loanOperationsManager || import_ethers11.ZeroAddress,
8627
8664
  LOAN_OPS_ABI,
8628
8665
  contractRunner
8629
8666
  ),
8630
- ucdController: new import_ethers10.Contract(
8667
+ ucdController: new import_ethers11.Contract(
8631
8668
  contractAddresses.ucdToken,
8632
8669
  UCD_CONTROLLER_ABI,
8633
8670
  contractRunner
8634
8671
  ),
8635
- termManager: new import_ethers10.Contract(
8636
- contractAddresses.termManager || import_ethers10.ZeroAddress,
8672
+ termManager: new import_ethers11.Contract(
8673
+ contractAddresses.termManager || import_ethers11.ZeroAddress,
8637
8674
  TERM_MANAGER_ABI,
8638
8675
  contractRunner
8639
8676
  ),
8640
- circuitBreaker: new import_ethers10.Contract(
8641
- contractAddresses.circuitBreaker || import_ethers10.ZeroAddress,
8677
+ circuitBreaker: new import_ethers11.Contract(
8678
+ contractAddresses.circuitBreaker || import_ethers11.ZeroAddress,
8642
8679
  CIRCUIT_BREAKER_ABI,
8643
8680
  contractRunner
8644
8681
  ),
8645
- liquidationManager: new import_ethers10.Contract(
8646
- contractAddresses.liquidationManager || import_ethers10.ZeroAddress,
8682
+ liquidationManager: new import_ethers11.Contract(
8683
+ contractAddresses.liquidationManager || import_ethers11.ZeroAddress,
8647
8684
  LIQUIDATION_MANAGER_ABI,
8648
8685
  contractRunner
8649
8686
  ),
8650
- bitcoinWithdrawalAddressRegistry: new import_ethers10.Contract(
8651
- contractAddresses.bitcoinWithdrawalAddressRegistry || import_ethers10.ZeroAddress,
8687
+ bitcoinWithdrawalAddressRegistry: new import_ethers11.Contract(
8688
+ contractAddresses.bitcoinWithdrawalAddressRegistry || import_ethers11.ZeroAddress,
8652
8689
  BITCOIN_WITHDRAWAL_ADDRESS_REGISTRY_ABI,
8653
8690
  contractRunner
8654
8691
  )
@@ -8697,13 +8734,13 @@ var ContractManager = class {
8697
8734
  const address = addresses[key];
8698
8735
  if (!address) {
8699
8736
  missing.push(String(key));
8700
- } else if (!(0, import_ethers10.isAddress)(address)) {
8737
+ } else if (!(0, import_ethers11.isAddress)(address)) {
8701
8738
  invalid.push(String(key));
8702
8739
  }
8703
8740
  }
8704
8741
  for (const key of optionalAddresses) {
8705
8742
  const address = addresses[key];
8706
- if (address && !(0, import_ethers10.isAddress)(address)) {
8743
+ if (address && !(0, import_ethers11.isAddress)(address)) {
8707
8744
  invalid.push(String(key));
8708
8745
  }
8709
8746
  }
@@ -9669,7 +9706,7 @@ function createPKPManager(config) {
9669
9706
  }
9670
9707
 
9671
9708
  // src/modules/loan/loan-creator.module.ts
9672
- var import_ethers11 = require("ethers");
9709
+ var import_ethers12 = require("ethers");
9673
9710
  var import_dh_lit_actions = __toESM(require_pkg_src());
9674
9711
 
9675
9712
  // src/utils/contract-wallet.utils.ts
@@ -10028,11 +10065,11 @@ var LoanCreator = class {
10028
10065
  try {
10029
10066
  const mainnetVaultAddress = bitcoinAddresses.mainnet;
10030
10067
  const regtestVaultAddress = bitcoinAddresses.regtest;
10031
- const pkpIdBytes32 = (0, import_ethers11.zeroPadValue)(
10032
- (0, import_ethers11.toBeHex)(BigInt(pkpData.tokenId)),
10068
+ const pkpIdBytes32 = (0, import_ethers12.zeroPadValue)(
10069
+ (0, import_ethers12.toBeHex)(BigInt(pkpData.tokenId)),
10033
10070
  32
10034
10071
  );
10035
- const pkpPublicKeyUncompressed = import_ethers11.SigningKey.computePublicKey(
10072
+ const pkpPublicKeyUncompressed = import_ethers12.SigningKey.computePublicKey(
10036
10073
  pkpData.publicKey,
10037
10074
  false
10038
10075
  );
@@ -10045,7 +10082,7 @@ var LoanCreator = class {
10045
10082
  );
10046
10083
  log.debug(`BigInt conversion: ${BigInt(pkpData.tokenId).toString()}`);
10047
10084
  log.debug(
10048
- `Hex from BigInt: ${(0, import_ethers11.toBeHex)(BigInt(pkpData.tokenId))}`
10085
+ `Hex from BigInt: ${(0, import_ethers12.toBeHex)(BigInt(pkpData.tokenId))}`
10049
10086
  );
10050
10087
  log.debug(`Final bytes32 (zero-padded): ${pkpIdBytes32}`);
10051
10088
  log.debug(
@@ -10217,8 +10254,8 @@ var LoanCreator = class {
10217
10254
  }
10218
10255
  }
10219
10256
  if (this.config.debug) {
10220
- const pkpIdBytes32Check = (0, import_ethers11.zeroPadValue)(
10221
- (0, import_ethers11.toBeHex)(BigInt(pkpData.tokenId)),
10257
+ const pkpIdBytes32Check = (0, import_ethers12.zeroPadValue)(
10258
+ (0, import_ethers12.toBeHex)(BigInt(pkpData.tokenId)),
10222
10259
  32
10223
10260
  );
10224
10261
  log.error("\u274C Loan creation transaction failed", {
@@ -10379,7 +10416,7 @@ var LoanCreator = class {
10379
10416
  const coreAddress = this.config.contractManager.getContractAddresses().positionManagerCore;
10380
10417
  if (coreAddress) {
10381
10418
  try {
10382
- const core = new import_ethers11.Contract(
10419
+ const core = new import_ethers12.Contract(
10383
10420
  coreAddress,
10384
10421
  [
10385
10422
  "function getPositionDetails(bytes32) view returns (tuple(bytes32 positionId, bytes32 pkpId, uint256 ucdDebt, string vaultAddress, address borrower, uint40 createdAt, uint40 lastUpdated, uint16 selectedTerm, uint40 expiryAt, uint8 status))"
@@ -10421,8 +10458,8 @@ var LoanCreator = class {
10421
10458
  const newEventAbi = [
10422
10459
  "event PositionCreated(bytes32 indexed positionId, bytes32 indexed pkpId, address indexed borrower, uint256 requestedCollateralRatio, uint256 selectedTerm, uint256 expiryAt)"
10423
10460
  ];
10424
- const oldIface = new import_ethers11.Interface(oldEventAbi);
10425
- const newIface = new import_ethers11.Interface(newEventAbi);
10461
+ const oldIface = new import_ethers12.Interface(oldEventAbi);
10462
+ const newIface = new import_ethers12.Interface(newEventAbi);
10426
10463
  let positionId;
10427
10464
  if (this.config.debug) {
10428
10465
  log.info("\u{1F50D} Parsing transaction receipt logs", {
@@ -10516,7 +10553,7 @@ var LoanStatus = /* @__PURE__ */ ((LoanStatus2) => {
10516
10553
  })(LoanStatus || {});
10517
10554
 
10518
10555
  // src/modules/loan/loan-query.module.ts
10519
- var import_ethers12 = require("ethers");
10556
+ var import_ethers13 = require("ethers");
10520
10557
 
10521
10558
  // src/constants/chunks/sdk-limits.ts
10522
10559
  var THE_GRAPH_MAX_BATCH_SIZE = 1e3;
@@ -10913,7 +10950,7 @@ var LoanQuery = class {
10913
10950
  const isChipotlePkpId2 = typeof rawId === "string" && isNormalizedChipotlePkpId(rawId);
10914
10951
  if (isChipotlePkpId2) {
10915
10952
  if (this.config.positionManagerCoreAddress && this.config.provider) {
10916
- const pmContract = new import_ethers12.Contract(
10953
+ const pmContract = new import_ethers13.Contract(
10917
10954
  this.config.positionManagerCoreAddress,
10918
10955
  POSITION_CORE_ABI,
10919
10956
  this.config.provider
@@ -11016,7 +11053,7 @@ var LoanQuery = class {
11016
11053
  */
11017
11054
  async getBorrowerUcdDebtSummary(borrower) {
11018
11055
  const trimmed = typeof borrower === "string" ? borrower.trim() : "";
11019
- if (!(0, import_ethers12.isAddress)(trimmed)) {
11056
+ if (!(0, import_ethers13.isAddress)(trimmed)) {
11020
11057
  return failure(
11021
11058
  new SDKError({
11022
11059
  message: `Borrower must be an EVM address for a UCD debt summary, got "${trimmed}"`,
@@ -11273,7 +11310,7 @@ function createLoanQuery(config) {
11273
11310
  }
11274
11311
 
11275
11312
  // src/modules/withdrawal-address/withdrawal-address.module.ts
11276
- var import_ethers13 = require("ethers");
11313
+ var import_ethers14 = require("ethers");
11277
11314
  var STATIC_CALL_DIAGNOSTIC_TIMEOUT_MS = 5e3;
11278
11315
  var WithdrawalAddressModule = class {
11279
11316
  config;
@@ -11291,7 +11328,7 @@ var WithdrawalAddressModule = class {
11291
11328
  if (!res.success)
11292
11329
  return res;
11293
11330
  const target = res.value.target;
11294
- if (!target || target === import_ethers13.ZeroAddress) {
11331
+ if (!target || target === import_ethers14.ZeroAddress) {
11295
11332
  return failure(
11296
11333
  new SDKError({
11297
11334
  code: "SDK_WITHDRAWAL_REGISTRY_NOT_CONFIGURED",
@@ -11309,7 +11346,7 @@ var WithdrawalAddressModule = class {
11309
11346
  }
11310
11347
  /** keccak256 of the canonicalized address — matches the on-chain key. */
11311
11348
  static addressHash(btcAddress) {
11312
- return (0, import_ethers13.keccak256)((0, import_ethers13.toUtf8Bytes)(normalizeBitcoinAddress(btcAddress)));
11349
+ return (0, import_ethers14.keccak256)((0, import_ethers14.toUtf8Bytes)(normalizeBitcoinAddress(btcAddress)));
11313
11350
  }
11314
11351
  /**
11315
11352
  * Add a Bitcoin address to the caller's allowlist. It becomes usable only
@@ -14775,7 +14812,7 @@ var DiamondHandsGraph = class {
14775
14812
  };
14776
14813
 
14777
14814
  // src/contracts/typechain-contracts/factories/src/psm/SimplePSMV2__factory.ts
14778
- var import_ethers14 = require("ethers");
14815
+ var import_ethers15 = require("ethers");
14779
14816
  var _abi = [
14780
14817
  {
14781
14818
  inputs: [],
@@ -17343,7 +17380,7 @@ var _abi = [
17343
17380
  ];
17344
17381
  var _bytecode = "0x60a080604052346100ea57306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c166100d9576002600160401b03196001600160401b03821601610073575b60405161485a90816100f0823960805181818161278e01526128870152f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a13880610054565b63f92ee8a960e01b60005260046000fd5b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c8062f7fce91461384657806301ffc9a7146137d5578063021d28931461377c5780630871b20614613743578063114249d214610f6157806311d954f81461371a57806313da3166146136e15780631d44a904146136385780631f77bf65146135ff578063248a9ca3146135e05780632b83cccd146131205780632f2ff15d146130ee57806334bac370146130b557806334e181251461307c57806336568abe14613037578063373c86b614612ffe5780633f4ba83a14612f375780634373b57214612f0e5780634451e89b14612b3a5780634ebd25a514612b015780634f1ef2861461280c5780635273b6f6146127e357806352d1902d1461277b578063568fafca146126ed57806359d5d02a146124205780635bc26aea146123eb5780635c975abb146123bb5780635ecc27081461229d5780638456cb59146121a257806385c15d9a1461216957806389d3ad00146120a25780638bff608e146120695780639010d07c1461201657806390ad8b4014611ffa57806391d1485414611fa15780639b759bf714611f5e5780639baf58d214611f415780639f1d0f59146118a8578063a217fddf1461188c578063a3246ad3146117cf578063ad3cb1cc14611788578063b492fc691461168e578063b9f637af14611463578063bf7d911914611424578063c4c5f62414611371578063c55f15ea1461134e578063ca15c87314611317578063ca2ce65d146112de578063cc1f8ffa146112ac578063cf46075e146111a2578063d21a74ff14611165578063d2f8253614611142578063d547741f14611107578063d5d3f78b14610f9a578063d66bd52414610f61578063e1f1c4a714610f44578063e1f3962c14610f18578063ec2f96fe14610ef4578063eda5a26a14610af7578063f1a1eb8414610ab4578063f385116d14610a7b578063f77c479114610a54578063f8c8765e14610661578063faaebd2114610628578063facdfb5e14610488578063fc99bd9a14610377578063fe32e7281461033e5763ffa1ad741461030857600080fd5b3461033b578060031936011261033b57610337610323613a68565b604051918291602083526020830190613a17565b0390f35b80fd5b503461033b57602036600319011261033b576020906040906001600160a01b0361036661392e565b168152601283522054604051908152f35b503461033b57604036600319011261033b5761039161392e565b6010546024359291906001600160a01b03163303610479576001600160a01b03168082526002602052604082205490929060ff16156104665780156104575782825260076020526040822054926103e88285613cb0565b848110610448576001600160ff1b0381116104395760008051602061482e833981519152604085968493846104369852600760205280838a205582519182526020820152a23090339061421c565b80f35b630700fcb360e11b8452600484fd5b63446c8cc960e01b8452600484fd5b63162908e360e11b8252600482fd5b506024916374ed46ad60e01b8252600452fd5b6349db3bd360e01b8252600482fd5b503461033b57602036600319011261033b576104a261392e565b6104aa613f12565b6010546001600160a01b03163303610479576001600160a01b03168082526002602052604082205460ff161561061657808252600760205260408220546040516370a0823160e01b8152306004820152602081602481865afa90811561060b5784916105d4575b50818111156105c5576105248282613b6c565b8215908115610570575b505060008051602061482e833981519152916040918486526007602052808387205582519182526020820152a260016000805160206147ce8339815191525580f35b61271081029080820461271014901517156105b157606484029184830460641417156105b157116105a257388061052e565b63a73af74d60e01b8452600484fd5b634e487b7160e01b86526011600452602486fd5b6105cf8183613b6c565b610524565b90506020813d602011610603575b816105ef602093836139c3565b810103126105fe575138610511565b600080fd5b3d91506105e2565b6040513d86823e3d90fd5b6374ed46ad60e01b8252600452602490fd5b503461033b57602036600319011261033b576020906040906001600160a01b0361065061392e565b168152600483522054604051908152f35b503461033b57608036600319011261033b5761067b61392e565b610683613944565b6044356001600160a01b03811690818103610a50576064356001600160a01b0381169390849003610a4c5760008051602061480e83398151915254604081901c60ff161595906001600160401b031680159081610a44575b6001149081610a3a575b159081610a31575b50610a225760008051602061480e83398151915280546001600160401b0319166001179055856109fd575b6001600160a01b03169081156109ee576001600160a01b03169081156109df5783156109d05761074661448a565b61074e61448a565b61075661448a565b61075e61448a565b60016000805160206147ce8339815191525561077861448a565b61078061448a565b86546001600160a01b0319908116919091178755600180549182168317905560405163313ce56760e01b8152909190602081600481855afa88918161099f575b506107d457633a24e95b60e11b8852600488fd5b6001600160a81b03199092161760a091821b60ff60a01b16176001819055901c60ff16601119810161098d575061080b8186614348565b80610965575b156109205761082e816000805160206147ee833981519152614348565b8061092f575b15610920576108519060008051602061470e833981519152614348565b90816108e9575b50156108da57806108af575b5061086c5780f35b60ff60401b1960008051602061480e833981519152541660008051602061480e833981519152556000805160206146ee833981519152602060405160018152a180f35b601080546001600160a01b031916821790558260008051602061474e8339815191528180a338610864565b63cf5a8e3360e01b8352600483fd5b6109199060008051602061470e83398151915286526000805160206146ae833981519152602052604086206144d0565b5038610858565b63cf5a8e3360e01b8552600485fd5b6000805160206147ee83398151915286526000805160206146ae83398151915260205261095f83604088206144d0565b50610834565b8580526000805160206146ae83398151915260205261098783604088206144d0565b50610811565b63167738cf60e21b8652600452602485fd5b6109c291925060203d6020116109c9575b6109ba81836139c3565b810190613ba9565b90386107c0565b503d6109b0565b630b5eba9f60e41b8752600487fd5b63c1ab6dc160e01b8752600487fd5b6336abb4df60e11b8752600487fd5b60008051602061480e833981519152805460ff60401b1916600160401b179055610718565b63f92ee8a960e01b8752600487fd5b905015386106ed565b303b1591506106e5565b8791506106db565b8580fd5b8480fd5b503461033b578060031936011261033b57546040516001600160a01b039091168152602090f35b503461033b57602036600319011261033b576020906040906001600160a01b03610aa361392e565b168152600a83522054604051908152f35b503461033b57604036600319011261033b576020906040906001600160a01b03610adc61392e565b16815260158352818120602435825283522054604051908152f35b503461033b5761016036600319011261033b57610b1261392e565b90606435604435602435610b24613a58565b9160a4359160c43560e43561010435916101243595610144359760018060a01b03601054163303610ee5576001600160a01b038c16808c52600260205260408c2054909a9060ff16610ed1578a15610ec2578615610eb3576127108811610e99576103e88111610e815760ff82169c60128e118e8115610e76575b50610e6257803b15610e4e578915610e3a578a15610e265782610bc191614260565b84151580610e1d575b610e065785151580610dfd575b610de6578b9c602460208d9e9d604051928380926370a0823160e01b82523060048301525afa9c8d15610dda579c610da6575b506001600160ff1b038c11610d97578a8d8f9760408f97838f918f8f8f8f90859f988f99879f9660008051602061476e8339815191529f978b9f988f8d6000805160206146ce8339815191529f988e8e610d4f9b60008051602061468e8339815191529f8f8f8487526002602052878720600160ff198254161790558487526003602052878720558386526004602052868620558285526006602052878686205582855260056020528585209060ff19825416179055818452600c6020528885852055818452600d6020528985852055818452600e6020528a85852055818452600f6020528b8585205581845260076020528484205582526012602052828220558d8152601360205220558a7f991d1ef1b5c0820d213328cba6682059e00a50e49c469a454eb3557e78eaf6668e80518b81528c6020820152a28c5198899889613cbd565b0390a28151908b82526020820152a28151908782526020820152a280610d73578280f35b604060008051602061482e833981519152918151908582526020820152a281808280f35b63556e7a8160e01b8e5260048efd5b909b506020813d602011610dd2575b81610dc2602093836139c3565b810103126105fe57519a38610c0a565b3d9150610db5565b604051903d90823e3d90fd5b60448c858863dd85772b60e01b8352600452602452fd5b50838610610bd7565b60448c8487637449915760e01b8352600452602452fd5b50828510610bca565b636835314760e11b8d52600160045260248dfd5b636835314760e11b8d5260048d905260248dfd5b63377e3f9960e21b8d5260048c905260248dfd5b63ca95039160e01b8d5260048e905260248dfd5b60069150108e610b9f565b631051834f60e11b8c526004526103e860245260448bfd5b63c1e9a14160e01b8c52600488905261271060245260448cfd5b63a2ec3a5560e01b8c5260048cfd5b63df407ac560e01b8c5260048cfd5b6317f4215b60e21b8c5260048b905260248cfd5b6349db3bd360e01b8b5260048bfd5b503461033b578060031936011261033b57602060ff60015460a01c16604051908152f35b503461033b57602036600319011261033b576020610f3c610f3761392e565b613df5565b604051908152f35b503461033b578060031936011261033b5760206040516127108152f35b503461033b57602036600319011261033b576020906040906001600160a01b03610f8961392e565b168152600783522054604051908152f35b503461033b57602036600319011261033b57610fb461392e565b6010546001600160a01b03163303610479576001600160a01b03168082526002602052604082205460ff16156106165780825260076020526040822054806110f1575080825260026020526040822060ff1981541690558082526003602052816040812055808252600460205281604081205580825260056020526040822060ff198154169055808252600c602052816040812055808252600d602052816040812055808252600e602052816040812055808252600f602052816040812055808252600660205281604081205580825260076020526040822054818352600760205282604081205560405190827f3302a1b37f04242bb55603f5449e7ecd690a35eef08ba1353c48c20e2aae9cda8580a2806110ce578380f35b8160409160008051602061482e8339815191529352846020820152a23880808380f35b604492916376bc059760e11b8352600452602452fd5b503461033b57604036600319011261033b5761113e600435611127613944565b9061113961113482613b79565b614088565b61411a565b5080f35b503461033b578060031936011261033b57602060ff600854166040519015158152f35b503461033b57602036600319011261033b5760209060ff906040906001600160a01b0361119061392e565b16815260058452205416604051908152f35b503461033b57602036600319011261033b576111bc61392e565b6111c4613f12565b6010546001600160a01b03163303610479576001600160a01b03168082526002602052604082205460ff161561061657808252600760205260408220546040516370a0823160e01b8152306004820152602081602481865afa90811561060b57849161126c575b5060008051602061482e833981519152916040918486526007602052808387205582519182526020820152a260016000805160206147ce8339815191525580f35b90506020813d6020116112a4575b81611287602093836139c3565b810103126105fe575160008051602061482e83398151915261122b565b3d915061127a565b503461033b57604036600319011261033b5760206112d46112cb61392e565b60243590613cf6565b6040519015158152f35b503461033b57602036600319011261033b576020906040906001600160a01b0361130661392e565b168152601383522054604051908152f35b503461033b57602036600319011261033b57604060209160043581526000805160206146ae83398151915283522054604051908152f35b503461033b578060031936011261033b576020604051670de0b6b3a76400008152f35b503461033b57604036600319011261033b5761138b61392e565b6010546024359291906001600160a01b03163303610479576001600160a01b031680825260076020526040822054929081841061140d578060008051602061482e8339815191526040866113e3866104369899613b6c565b84895260076020528289205583885260076020528188205482519182526020820152a2339061404c565b5091604492633cb8e07360e01b8352600452602452fd5b503461033b57602036600319011261033b5760209060ff906040906001600160a01b0361144f61392e565b168152600284522054166040519015158152f35b503461033b5761012036600319011261033b5761147e61392e565b6064359190604435602435611491613a58565b601054610104359660e4359260c4359260a43592906001600160a01b0316330361167f576001600160a01b038816808a52600260205260408a205490989060ff161561166b57861561165c576127108811611642576103e882116116285760ff83169060128211801561161e575b61160a578361150d91614260565b85151580611601575b6115ea578a1515806115e1575b6115ca579260008051602061468e83398151915297969592828c956115c4979460408e8e80825260036020528c8383205580825260046020528d838320558152600660205220558b8d52600560205260408d209060ff198254161790558a8c52600c6020528260408d20558a8c52600d6020528360408d20558a8c52600e6020528460408d20558a8c52600f6020528560408d205560405198899889613cbd565b0390a280f35b60448a868d63dd85772b60e01b8352600452602452fd5b50848b10611523565b60448a8588637449915760e01b8352600452602452fd5b50838610611516565b63ca95039160e01b8b52600482905260248bfd5b50600682106114ff565b631051834f60e11b8a5260048290526103e860245260448afd5b63c1e9a14160e01b8a52600488905261271060245260448afd5b63a2ec3a5560e01b8a5260048afd5b6374ed46ad60e01b8a52600489905260248afd5b6349db3bd360e01b8952600489fd5b503461033b57604036600319011261033b576116a861392e565b6001600160a01b0316808252600260205260408220546024359060ff16156117745780156117655761271061172a604085670de0b6b3a76400006117196117329688859a52600560205260ff85852054169080916012811061173f575b505088845260036020528484205490613a8b565b049581526004602052205484613a8b565b048092613b6c565b9082519182526020820152f35b61175e925060ff61175261175892613ad4565b16613ae5565b90613a8b565b3880611705565b63162908e360e11b8352600483fd5b6374ed46ad60e01b83526004829052602483fd5b503461033b578060031936011261033b5761033760408051906117ab81836139c3565b60058252640352e302e360dc1b602083015251918291602083526020830190613a17565b503461033b57602036600319011261033b5760043581526000805160206146ae83398151915260205260408120604051908160208254918281520190819285526020852090855b818110611876575050508261182c9103836139c3565b604051928392602084019060208552518091526040840192915b818110611854575050500390f35b82516001600160a01b0316845285945060209384019390920191600101611846565b8254845260209093019260019283019201611816565b503461033b578060031936011261033b57602090604051908152f35b503461033b576118b736613969565b9190926118c2613f12565b6118ca613f4e565b338152600960205260408120544303611f1f57338152600a602052600360408220541015611f1057338152600a602052604081206119088154613b9a565b90555b6001600160a01b0382168082526002602052604082205490929060ff16611e6f575b828252600260205260ff60408320541615610466578415610457578315611e6057828252600c60205260408220548510611e3b57828252600e60205260408220548015611e2c57808611611e155750846119869161415e565b6040516370a0823160e01b8152306004820152602081602481865afa908115611e0a578291611dd8575b506119bd8530338661421c565b6040516370a0823160e01b8152306004820152602081602481875afa908115611cef57908692918491611d9f575b50906119f691613b6c565b10611d905781815260076020526040812054611a128582613cb0565b818110611d81576001600160ff1b038111611d72576040849260008051602061482e833981519152928486526007602052808387205582519182526020820152a2818152600560205260ff604082205416849060128110611d11575b50611a8f670de0b6b3a7640000918484526003602052604084205490613a8b565b04908281526004602052612710611aaa604083205484613a8b565b0491611ab68382613b6c565b94808610611cfa57506001546040516318160ddd60e01b815290602090829060049082906001600160a01b03165afa908115611cef578391611cbd575b5082546001600160a01b0316803b15611ca45783809160846040518094819363ae494fa160e01b83523360048401528c60248401528b60448401528d60648401525af1801561060b57908491611ca8575b505083611c34575b6001546040516318160ddd60e01b81529190602090839060049082906001600160a01b03165afa801561060b578490611c00575b611b8a9250613b6c565b90808203611bea575050507fb3e2773606abfd36b5bd91394b3a54d1398336c65005baf7bf7a05efeffaf75b611bcd602095604051918291339588429285613bdd565b0390a360016000805160206147ce83398151915255604051908152f35b632d8562a360e11b835260045260245260449150fd5b506020823d602011611c2c575b81611c1a602093836139c3565b810103126105fe57611b8a9151611b80565b3d9150611c0d565b82546001600160a01b0316803b15611ca45783809160846040518094819363ae494fa160e01b83523060048401528a60248401528b60448401528160648401525af1801561060b57908491611c8b575b5050611b4c565b81611c95916139c3565b611ca0578238611c84565b8280fd5b8380fd5b81611cb2916139c3565b611ca0578238611b44565b90506020813d602011611ce7575b81611cd8602093836139c3565b810103126105fe575138611af3565b3d9150611ccb565b6040513d85823e3d90fd5b6371c4efed60e01b83526004869052602452604482fd5b611d21915061175260ff91613ad4565b8015611d5e5780600019048511611d4f57611a8f611d48670de0b6b3a76400009287613a8b565b9150611a6e565b63035fc53d60e41b8252600482fd5b634e487b7160e01b82526012600452602482fd5b630700fcb360e11b8352600483fd5b63446c8cc960e01b8352600483fd5b639bfa3c1760e01b8152600490fd5b919250506020813d602011611dd0575b81611dbc602093836139c3565b810103126105fe57518591906119f66119eb565b3d9150611daf565b90506020813d602011611e02575b81611df3602093836139c3565b810103126105fe5751386119b0565b3d9150611de6565b6040513d84823e3d90fd5b631d7f2ac360e01b83526004869052602452604482fd5b633b5db2f360e11b8352600483fd5b50908152600c6020526040812054630d54e9e160e01b82526004849052602452604490fd5b632cd84af360e01b8252600482fd5b60405163313ce56760e01b815291939291602081600481865afa859181611eef575b50611ea55763105482c760e21b8552600485fd5b93919293838352600560205260ff806040852054169116908103611ec9575061192d565b90506044928252600560205260ff604083205416631e43476360e11b8352600452602452fd5b611f0991925060203d6020116109c9576109ba81836139c3565b9038611e91565b63a74c1c5f60e01b8152600490fd5b3381526009602052436040822055338152600a6020526001604082205561190b565b503461033b578060031936011261033b5760206040516103e88152f35b503461033b57604036600319011261033b576020906040906001600160a01b03611f8661392e565b16815260148352818120602435825283522054604051908152f35b503461033b57604036600319011261033b576040611fbd613944565b91600435815260008051602061478e833981519152602052209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b503461033b578060031936011261033b57602060405160648152f35b503461033b57604036600319011261033b5761205060209160043581526000805160206146ae8339815191528352604060243591206144b8565b905460405160039290921b1c6001600160a01b03168152f35b503461033b57602036600319011261033b576020906040906001600160a01b0361209161392e565b168152600983522054604051908152f35b503461033b57604036600319011261033b576120bc61392e565b60105460243591906001600160a01b0316330361215a576001600160a01b031690811561214b57604060008051602061476e8339815191529183855260136020528185205490848652601360205280838720558486526015602052828620438752602052828620548587526019602052838720558486526017602052438387205582519182526020820152a280f35b63df407ac560e01b8352600483fd5b6349db3bd360e01b8352600483fd5b503461033b57602036600319011261033b576020906040906001600160a01b0361219161392e565b168152600383522054604051908152f35b503461033b578060031936011261033b5760008051602061470e833981519152815260008051602061478e83398151915260209081526040808320336000908152925290205460ff1615612278576121f8613f4e565b600160ff196000805160206147ae8339815191525416176000805160206147ae833981519152557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a16040514281527f80170b5fcdd2bf1e0660ef4b8851f86685f64d41b1a19de1471947ece8725aac60203392a280f35b63e2517d3f60e01b81523360045260008051602061470e833981519152602452604490fd5b503461033b57602036600319011261033b576122b761392e565b60008051602061480e8339815191525460ff8160401c169081156123a3575b506123945760008051602061480e83398151915280546001600160481b0319166003600160401b0117905581805260008051602061478e83398151915260209081526040808420336000908152925290205460ff161561237c5761233990613c5e565b60ff60401b1960008051602061480e833981519152541660008051602061480e833981519152556000805160206146ee833981519152602060405160038152a180f35b63e2517d3f60e01b8252336004526024829052604482fd5b63f92ee8a960e01b8252600482fd5b60036001600160401b039190911610159050386122d6565b503461033b578060031936011261033b57602060ff6000805160206147ae83398151915254166040519015158152f35b503461033b57602036600319011261033b5761240561392e565b6010546001600160a01b031633036104795761043690613c5e565b503461033b57606036600319011261033b5761243a61392e565b612442613944565b60105490926044359290916001600160a01b0316330361047957612464613f4e565b6011546001600160a01b03169182156126de5760405163babcc53960e01b81526001600160a01b0386166004820181905293602090829060249082905afa908115611e0a57829161269f575b5015612690578215612681576001546001600160a01b03928316921682036125d1576040516370a0823160e01b8152306004820152602081602481865afa908115611e0a57829161259f575b50935b841561259057600019810361258a5750835b841561257b5780851161256357505061252d836020958361404c565b7f0bf519e4b3821615dbdd874fa1a5fbb4bb651b4e6beabedd4ac318e770233b2c604080518581524287820152a3604051908152f35b630555ed4f60e31b8252600485905260245260449150fd5b632e11316f60e11b8252600482fd5b93612511565b63f09872eb60e01b8252600482fd5b90506020813d6020116125c9575b816125ba602093836139c3565b810103126105fe5751386124fc565b3d91506125ad565b8181526002602052604081205460ff161561266f576040516370a0823160e01b8152306004820152602081602481865afa908115611e0a57829161263d575b5082825260076020526040822054808211156126355761262f91613b6c565b936124ff565b50508061262f565b90506020813d602011612667575b81612658602093836139c3565b810103126105fe575138612610565b3d915061264b565b60249163eef7849760e01b8252600452fd5b634e46966960e11b8152600490fd5b63133307bb60e21b8152600490fd5b90506020813d6020116126d6575b816126ba602093836139c3565b810103126126d2575180151581036126d257386124b0565b5080fd5b3d91506126ad565b630e048e7160e41b8152600490fd5b503461033b57602036600319011261033b5761270761392e565b6010546001600160a01b03163303610479576001600160a01b0316801561276c57601180546001600160a01b0319811683179091556001600160a01b03167f1e9c406f2707909cfd9f61e744f73bcab77e5997d063276f67883c5257d51cf08380a380f35b634e46966960e11b8252600482fd5b503461033b578060031936011261033b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036127d457602060405160008051602061472e8339815191528152f35b63703e46dd60e11b8152600490fd5b503461033b578060031936011261033b576010546040516001600160a01b039091168152602090f35b50604036600319011261033b5761282161392e565b602435906001600160401b038211611ca05736602383011215611ca0578160040135908361284e836139fc565b9361285c60405195866139c3565b83855260208501933660248284010111611ca057806024602093018637850101526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016308114908115612ade575b50612acf576010546001600160a01b03163303612ac0576001600160a01b038116928315612ab157813b15612aa25760008051602061472e83398151915254846128fa613a68565b7f6ea8b34d59b2818d3f37a08dddaa06f5886b9c20c907b36f03ca6528e106e86f61293060405192604084526040840190613a17565b4260208401526001600160a01b038516929081900390a36040516352d1902d60e01b8152602081600481895afa879181612a6a575b5061297e57634c9c8ce360e01b87526004869052602487fd5b908160008051602061472e83398151915288979303612a585750833b15612a44576001600160a01b031916811760008051602061472e833981519152558491907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8380a2805115612a295761113e9382915190845af43d15612a21573d91612a05836139fc565b92612a1360405194856139c3565b83523d85602085013e61460c565b60609161460c565b5050505034612a355780f35b63b398979f60e01b8152600490fd5b634c9c8ce360e01b86526004829052602486fd5b632a87526960e21b8752600452602486fd5b9091506020813d602011612a9a575b81612a86602093836139c3565b81010312612a9657519038612965565b8780fd5b3d9150612a79565b636f7c43f160e01b8552600485fd5b63e6c4247b60e01b8552600485fd5b6349db3bd360e01b8452600484fd5b63703e46dd60e11b8452600484fd5b60008051602061472e833981519152546001600160a01b031614159050386128b2565b503461033b57602036600319011261033b576020906040906001600160a01b03612b2961392e565b168152600e83522054604051908152f35b503461033b57606036600319011261033b57612b5461395a565b6024356001600160401b038111611ca057612b73903690600401613993565b916044356001600160401b038111610a5057612b93903690600401613993565b60008051602061480e8339815191529291925460ff8160401c16908115612ef6575b50612ee75760008051602061480e83398151915280546001600160481b0319166002600160401b011790556000805160206147ee833981519152865260008051602061478e83398151915260209081526040808820336000908152925290205460ff1615612ec257612c2561448a565b612c2d61448a565b60016000805160206147ce83398151915255600b549160ff8316612eb357818603612ea457612c5b86613bf9565b92612c6960405194856139c3565b868452601f19612c7888613bf9565b01366020860137875b878110612daf575060019060ff191617600b5515159460ff196008541660ff871617600855865b818110612d0c578760008051602061466e833981519152602089604051908152a160ff60401b1960008051602061480e833981519152541660008051602061480e833981519152556000805160206146ee833981519152602060405160028152a180f35b808860008051602061482e8339815191526040612d34612d2f600196888d613c10565b613c36565b612d3f85898c613c10565b357f8f955fa878b4aae8b1ac37b1ab715307470f2822ceff87e23d33ef1e044814a783612d6c888d613c4a565b5193898060a01b0316968793848252600660205280838320558482526007602052858383205582519182526020820152a28151908d82526020820152a201612ca8565b612dbd612d2f828a8a613c10565b612dc8828689613c10565b6001600160a01b03909116808b52600260205260408b20549091359060ff1615612e90576103e88111612e785750906020602492604051938480926370a0823160e01b82523060048301525afa8015612e6d578a90612e37575b60019250612e308288613c4a565b5201612c81565b509060203d8111612e66575b612e4d81836139c3565b6020826000928101031261033b57509060019151612e22565b503d612e43565b6040513d8c823e3d90fd5b631051834f60e11b8b526004526103e860245260448afd5b6351104c5960e01b8b52600482905260248bfd5b63512509d360e11b8752600487fd5b6324d0d1fd60e01b8752600487fd5b63e2517d3f60e01b8652336004526000805160206147ee833981519152602452604486fd5b63f92ee8a960e01b8652600486fd5b60026001600160401b03919091161015905038612bb5565b503461033b578060031936011261033b576011546040516001600160a01b039091168152602090f35b503461033b578060031936011261033b576010546001600160a01b03163303612fef576000805160206147ae8339815191525460ff811615612fe05760ff19166000805160206147ae833981519152557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a16040514281527f107553d8191d85b405879cf752997865edd48d94e20bda4dd27223c94b31a7cc60203392a280f35b638dfc202b60e01b8252600482fd5b6349db3bd360e01b8152600490fd5b503461033b57602036600319011261033b576020906040906001600160a01b0361302661392e565b168152601683522054604051908152f35b503461033b57604036600319011261033b57613051613944565b336001600160a01b0382160361306d5761113e9060043561411a565b63334bd91960e11b8252600482fd5b503461033b57602036600319011261033b576020906040906001600160a01b036130a461392e565b168152600c83522054604051908152f35b503461033b57602036600319011261033b576020906040906001600160a01b036130dd61392e565b168152601783522054604051908152f35b503461033b57604036600319011261033b5761113e60043561310e613944565b9061311b61113482613b79565b6140d2565b503461033b5761312f36613969565b91909261313a613f12565b613142613f4e565b3381526009602052604081205443036135be57338152600a602052600360408220541015611f1057338152600a602052604081206131808154613b9a565b90555b6001600160a01b0382168082526002602052604082205490929060ff16613543575b828252600260205260ff604083205416156104665760ff6008541615613534578415610457578315611e6057828252600d602052604082205480861061351d5750828252600f6020526040822054801561350e578086116134f857508461320b91613f78565b670de0b6b3a76400008402848104670de0b6b3a7640000036134e4578282526003602052604082205461323d91613ab4565b90828152600560205260ff604082205416601281106134c4575b50828152600660205261327c612710613274604084205485613a8b565b048093613b6c565b938085106134ac575082815260076020528360408220541061348857828152600760205260408120548481106134795760008051602061482e8339815191526040826132c9888895613b6c565b8486526007602052808387205582519182526020820152a26001546040516318160ddd60e01b815290602090829060049082906001600160a01b03165afa908115611e0a578291613447575b5081546001600160a01b0316803b15611ca057826040518092633a52b90760e11b82528183816133498d3360048401613bc2565b03925af18015611cef57613432575b506001546040516318160ddd60e01b81529190602090839060049082906001600160a01b03165afa908115611cef5783916133fc575b6133989250613b6c565b8581036133e45750507f8caf04742286d017f9ac3924388e188c73e6e5094311c5e59a61a7ef86dda8bf611bcd6020956133d386338761404c565b604051918291339588429285613bdd565b635ab6e2db60e01b8252600486905260245260449150fd5b90506020823d60201161342a575b81613417602093836139c3565b810103126105fe5761339891519061338e565b3d915061340a565b9161344081600493946139c3565b9190613358565b90506020813d602011613471575b81613462602093836139c3565b810103126126d2575138613315565b3d9150613455565b6308aed4ef60e31b8252600482fd5b82815260076020526040812054635960d22160e01b82526004526024849052604490fd5b6371c4efed60e01b8252600485905260245260449150fd5b916134d760ff6117526134dd9495613ad4565b90613ab4565b9038613257565b634e487b7160e01b82526011600452602482fd5b625502a360e91b83526004869052602452604482fd5b636c6ff70d60e11b8352600483fd5b6361767b8560e01b83526004869052602452604482fd5b630df65d9f60e01b8252600482fd5b60405163313ce56760e01b815291939291602081600481865afa85918161359d575b506135795763105482c760e21b8552600485fd5b93919293838352600560205260ff806040852054169116908103611ec957506131a5565b6135b791925060203d6020116109c9576109ba81836139c3565b9038613565565b3381526009602052436040822055338152600a60205260016040822055613183565b503461033b57602036600319011261033b576020610f3c600435613b79565b503461033b57602036600319011261033b576020906040906001600160a01b0361362761392e565b168152600f83522054604051908152f35b503461033b57604036600319011261033b5761365261392e565b60105460243591906001600160a01b0316330361215a576001600160a01b031690811561214b5760406000805160206146ce8339815191529183855260126020528185205490848652601260205280838720558486526014602052828620438752602052828620548587526018602052838720558486526016602052438387205582519182526020820152a280f35b503461033b57602036600319011261033b576020906040906001600160a01b0361370961392e565b168152600683522054604051908152f35b503461033b578060031936011261033b576001546040516001600160a01b039091168152602090f35b503461033b57602036600319011261033b576020906040906001600160a01b0361376b61392e565b168152600d83522054604051908152f35b503461033b57602036600319011261033b5761379661395a565b6010546001600160a01b0316330361047957602060008051602061466e83398151915291151560ff196008541660ff821617600855604051908152a180f35b503461033b57602036600319011261033b5760043563ffffffff60e01b81168091036126d257602090635a05180f60e01b811490811561381b575b506040519015158152f35b637965db0b60e01b811491508115613835575b5082613810565b6301ffc9a760e01b1490508261382e565b503461033b57604036600319011261033b5761386061392e565b6001600160a01b0316808252600260205260408220546024359060ff161561177457670de0b6b3a7640000810290808204670de0b6b3a7640000149015171561391a57916138bc60409383835260036020528483205490613ab4565b91808252600560205260ff8483205416601281106138f1575b5061172a84836127109361173295526006602052205484613a8b565b846117329361390f61271094966134d760ff61175261172a97613ad4565b9593509350506138d5565b634e487b7160e01b83526011600452602483fd5b600435906001600160a01b03821682036105fe57565b602435906001600160a01b03821682036105fe57565b6004359081151582036105fe57565b60609060031901126105fe576004356001600160a01b03811681036105fe57906024359060443590565b9181601f840112156105fe578235916001600160401b0383116105fe576020808501948460051b0101116105fe57565b601f909101601f19168101906001600160401b038211908210176139e657604052565b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116139e657601f01601f191660200190565b919082519283825260005b848110613a43575050826000602080949584010152601f8019910116010190565b80602080928401015182828601015201613a22565b6084359060ff821682036105fe57565b60405190613a776040836139c3565b6005825264322e332e3360d81b6020830152565b81810292918115918404141715613a9e57565b634e487b7160e01b600052601160045260246000fd5b8115613abe570490565b634e487b7160e01b600052601260045260246000fd5b60ff166012039060ff8211613a9e57565b8015613b665760009060208110600116604e821060011617613b5e57600a916001915b60018111613b35575082600019048211613b2157500290565b634e487b7160e01b81526011600452602490fd5b92806000190481116134e45760018416613b55575b80029260011c613b08565b80920291613b4a565b9050600a0a90565b50600190565b91908203918211613a9e57565b60005260008051602061478e83398151915260205260016040600020015490565b6000198114613a9e5760010190565b908160209103126105fe575160ff811681036105fe5790565b6001600160a01b039091168152602081019190915260400190565b9094939260609260808301968352602083015260408201520152565b6001600160401b0381116139e65760051b60200190565b9190811015613c205760051b0190565b634e487b7160e01b600052603260045260246000fd5b356001600160a01b03811681036105fe5790565b8051821015613c205760209160051b010190565b6001600160a01b03168015613c9f57601080546001600160a01b0319811683179091556001600160a01b031660008051602061474e833981519152600080a3565b63e6c4247b60e01b60005260046000fd5b91908201809211613a9e57565b94919360e0969360ff929a99989561010088019b885260208801526040870152166060850152608084015260a083015260c08201520152565b6001600160a01b03811660008181526002602052604090205490919060ff16158015613de8575b8015613de0575b613dce5781600052600f6020526040600020548015908115613dd6575b50613dce57613d66926040918251948592839262f7fce960e01b845260048401613bc2565b0381305afa918215613dc257600092613d8e575b506000526007602052604060002054101590565b9091506040813d604011613dba575b81613daa604093836139c3565b810103126105fe57519038613d7a565b3d9150613d9d565b6040513d6000823e3d90fd5b505050600090565b9050831138613d41565b508215613d24565b5060ff6008541615613d1d565b6001546001600160a01b0391821691168103613e6a576020602491604051928380926370a0823160e01b82523060048301525afa908115613dc257600091613e3b575090565b90506020813d602011613e62575b81613e56602093836139c3565b810103126105fe575190565b3d9150613e49565b80600052600260205260ff60406000205416613e865750600090565b6040516370a0823160e01b815230600482015290602082602481845afa918215613dc257600092613ede575b506000526007602052604060002054808211600014613ed757613ed491613b6c565b90565b5050600090565b90916020823d602011613f0a575b81613ef9602093836139c3565b8101031261033b5750519038613eb2565b3d9150613eec565b60026000805160206147ce8339815191525414613f3d5760026000805160206147ce83398151915255565b633ee5aeb560e01b60005260046000fd5b60ff6000805160206147ae8339815191525416613f6757565b63d93c066560e01b60005260046000fd5b6001600160a01b0316600081815260136020526040902054801561404757816000526015602052604060002043600052602052613fbb6040600020549384613cb0565b92831061403657808260005260176020524360406000205414614018575b8311613ffc57506000526015602052604060002043600052602052604060002055565b925063029359d560e41b60005260045260245260445260646000fd5b5081600052601960205261403160406000205482613cb0565b613fd9565b63446c8cc960e01b60005260046000fd5b505050565b614081614086939261407360405194859263a9059cbb60e01b602085015260248401613bc2565b03601f1981018452836139c3565b6142ed565b565b600081815260008051602061478e8339815191526020908152604080832033845290915290205460ff16156140ba5750565b63e2517d3f60e01b6000523360045260245260446000fd5b6140dc8282614348565b91826140e757505090565b60009182526000805160206146ae8339815191526020526040909120614116916001600160a01b0316906144d0565b5090565b61412482826143ea565b918261412f57505090565b60009182526000805160206146ae8339815191526020526040909120614116916001600160a01b031690614539565b6001600160a01b03166000818152601260205260409020548015614047578160005260146020526040600020436000526020526141a16040600020549384613cb0565b928310614036578082600052601660205243604060002054146141fe575b83116141e257506000526014602052604060002043600052602052604060002055565b92506319a4e2a760e01b60005260045260245260445260646000fd5b5081600052601860205261421760406000205482613cb0565b6141bf565b6040516323b872dd60e01b60208201526001600160a01b039283166024820152929091166044830152606480830193909352918152614086916140816084836139c3565b60405163313ce56760e01b81529190602090839060049082906001600160a01b03165afa600092816142cc575b506142a357631eecbb6560e01b60005260046000fd5b60ff91821691168082036142b5575050565b631e43476360e11b60005260045260245260446000fd5b6142e691935060203d6020116109c9576109ba81836139c3565b913861428d565b906000602091828151910182855af115613dc2576000513d61433f57506001600160a01b0381163b155b61431e5750565b635274afe760e01b60009081526001600160a01b0391909116600452602490fd5b60011415614317565b600081815260008051602061478e833981519152602090815260408083206001600160a01b038616845290915290205460ff16613ed757600081815260008051602061478e833981519152602090815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b600081815260008051602061478e833981519152602090815260408083206001600160a01b038616845290915290205460ff1615613ed757600081815260008051602061478e833981519152602090815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b60ff60008051602061480e8339815191525460401c16156144a757565b631afcd79f60e31b60005260046000fd5b8054821015613c205760005260206000200190600090565b6001810190826000528160205260406000205415600014613dce578054600160401b8110156139e65761452461450d8260018794018555846144b8565b819391549060031b91821b91600019901b19161790565b90555491600052602052604060002055600190565b9060018201918160005282602052604060002054801515600014614603576000198101818111613a9e578254600019810191908211613a9e578181036145cc575b505050805480156145b657600019019061459482826144b8565b8154906000199060031b1b191690555560005260205260006040812055600190565b634e487b7160e01b600052603160045260246000fd5b6145ec6145dc61450d93866144b8565b90549060031b1c928392866144b8565b90556000528360205260406000205538808061457a565b50505050600090565b90614632575080511561462157602081519101fd5b63d6bda27560e01b60005260046000fd5b81511580614664575b614643575090565b639996b31560e01b60009081526001600160a01b0391909116600452602490fd5b50803b1561463b56fe2c0a5f5ab0ba371221bb3612c2d2f90d36566279309f526000c5b354efd1b0658c67aaac7f77de07240e5a9b36dfdccb2a89c438635abbb27a73142d2aa0f629c1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200048b07fab687f450848f1df8a96db08fef7840f53415f18fdc2ec8e9f810f0930c7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d275027301df982f5215b4963a854cf9c73219df80cb6acd8f098189c9480c7bbc360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc17dc5b1290f7495d7f8cc68476e6941aaf510598fa925d0d2720edc8805a846c4460507c21097c15f6883572ebd157a9ee4b1d989a312314e93afd9d2ecd494002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006d129bd71f2401cbe77f49f546d7d5f58992faecfca6e51ba06b50b261e83331a164736f6c6343000822000a";
17345
17382
  var isSuperArgs = (xs) => xs.length > 1;
17346
- var SimplePSMV2__factory = class extends import_ethers14.ContractFactory {
17383
+ var SimplePSMV2__factory = class extends import_ethers15.ContractFactory {
17347
17384
  constructor(...args) {
17348
17385
  if (isSuperArgs(args)) {
17349
17386
  super(...args);
@@ -17363,15 +17400,15 @@ var SimplePSMV2__factory = class extends import_ethers14.ContractFactory {
17363
17400
  static bytecode = _bytecode;
17364
17401
  static abi = _abi;
17365
17402
  static createInterface() {
17366
- return new import_ethers14.Interface(_abi);
17403
+ return new import_ethers15.Interface(_abi);
17367
17404
  }
17368
17405
  static connect(address, runner) {
17369
- return new import_ethers14.Contract(address, _abi, runner);
17406
+ return new import_ethers15.Contract(address, _abi, runner);
17370
17407
  }
17371
17408
  };
17372
17409
 
17373
17410
  // src/contracts/typechain-contracts/factories/src/agent/AgentDelegationRegistry__factory.ts
17374
- var import_ethers15 = require("ethers");
17411
+ var import_ethers16 = require("ethers");
17375
17412
  var _abi2 = [
17376
17413
  {
17377
17414
  inputs: [],
@@ -19064,7 +19101,7 @@ var _abi2 = [
19064
19101
  ];
19065
19102
  var _bytecode2 = "0x60a080604052346100ea57306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c166100d9576002600160401b03196001600160401b03821601610073575b60405161304c90816100f0823960805181818161114401526113290152f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a13880610054565b63f92ee8a960e01b60005260046000fd5b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a714611ff7575080630d33f3c214611fd35780630f3f4a9414611f885780631459457a14611be257806318c38b8914611ad15780631d44454114611a005780632106764c146119d9578063248a9ca3146119b35780632ec22d4c146118f25780632f0647ce146118775780632f2ff15d14611846578063324207441461177257806336568abe1461172c578063392f1087146116f65780633f4ba83a146115fe5780633f5aadc91461158f5780634f1ef286146112ad57806352340363146111c45780635273b6f61461119b57806352d1902d14611131578063554c4f4b146110a1578063561b7f8a14610f755780635bc26aea14610ee85780635c975abb14610eb85780636289d18c14610e375780636711cc0b14610e1b5780636e852a7814610d1a5780637e35bf6e14610ce65780638343f67414610cb95780638456cb5914610bc35780638f33527f14610b895780639010d07c14610b3557806391d1485414610adb5780639b9d30c114610ab2578063a19af3f614610a01578063a217fddf146109e5578063a3246ad314610923578063a878086414610907578063ac3c0e30146107fa578063ad3cb1cc146107b3578063b3fad6381461070e578063c34e9c26146106f2578063c86deb31146106d6578063ca15c8731461069d578063d547741f14610665578063dd71d99a14610623578063e0922fa114610576578063efa9b4ae14610507578063f2f4eb26146104de578063f68e9553146104b5578063f94f67ab146103de578063fd437d391461029f5763ffa1ad741461026657600080fd5b3461029a57600036600319011261029a576102966102826121ed565b6040519182916020835260208301906121c8565b0390f35b600080fd5b3461029a57606036600319011261029a576102b861207a565b6102c0612064565b906102c961218f565b906102d2612795565b6001600160a01b0316338190036103ce5780600052600160205260406000209283549360ff8560e01c1660038110156103b8576001036103a75781600160209261033e877fc5d5c5bbf10444998e0ea6d4725e79027b574e1c14ec929279e8a9a95c6c6e919688612c43565b818060a01b038316828060a01b031982541617815561035d878261239f565b0180546001600160401b031916426001600160401b03908116919091179091556001600160a01b0391821660008181526002855260409081902087905551969091168652951693a4005b632437e77160e11b60005260046000fd5b634e487b7160e01b600052602160045260246000fd5b62fca64560e31b60005260046000fd5b3461029a57604036600319011261029a576004356103fa6120c9565b90610403612795565b63ffffffff600554169163ffffffff8116928084109081156104ac575b5061049b5760207f6b7727cc9c3df4a29acf0afe01594c1b7e845d20f40f4a14e4c292164a9ed8e191610452846127e0565b9161046a600863ffffffff845460a01c1617836122e3565b81546001600160e01b031660e09190911b6001600160e01b0319161790556040519485526001600160a01b031693a3005b634346c13160e01b60005260046000fd5b90501584610420565b3461029a57600036600319011261029a576020604051600080516020612fe08339815191528152f35b3461029a57600036600319011261029a576003546040516001600160a01b039091168152602090f35b3461029a57602036600319011261029a57600435610523612795565b61054561052f826127e0565b9190600163ffffffff825460a01c1617906122e3565b6001600160a01b0316907f812690e0a9dff5bf3add998111b8af5c8299608d859025bfe35662060ab4267d600080a3005b3461029a57602036600319011261029a576004356001600160401b0381169081810361029a576000546001600160a01b038116330361061257600160a01b600160e01b0319811660a092831b600160a01b600160e01b031617600055604080519190921c6001600160401b0316815260208101929092527f9c195448332abd01f716db873b329752ea02f19d33f7e311fb0daf082c4edd0391a1005b6349db3bd360e01b60005260046000fd5b3461029a57602036600319011261029a576001600160a01b0361064461207a565b166000526002602052602060018060a01b0360406000205416604051908152f35b3461029a57604036600319011261029a5761069b600435610684612064565b90610696610691826122c2565b6126bf565b612751565b005b3461029a57602036600319011261029a57600435600052600080516020612ee08339815191526020526020604060002054604051908152f35b3461029a57600036600319011261029a57602060405160088152f35b3461029a57600036600319011261029a57602060405160028152f35b3461029a57602036600319011261029a576000606060405161072f81612136565b828152826020820152826040820152015260043560005260046020526080604060002063ffffffff6040519161076483612136565b548160018060a01b038216938481528160208201818560a01c16815260606040840193838760c01c168552019460e01c8552604051968752511660208601525116604084015251166060820152f35b3461029a57600036600319011261029a5761029660408051906107d68183612151565b60058252640352e302e360dc1b6020830152519182916020835260208301906121c8565b3461029a57602036600319011261029a5761081361207a565b6000608060405161082381612105565b828152826020820152826040820152826060820152015260018060a01b03166000526001602052604060002060405161085b81612105565b81546001600160a01b038116825260a081901c6001600160401b03166020830190815292604083019160e01c60ff169060038210156103b857908252600101546001600160401b0380821660608501908152604092831c821660808601908152925194516001600160a01b03168552945116602084015290519260038410156103b857604083019390935291516001600160401b0390811660608301529151909116608082015260a090f35b3461029a57600036600319011261029a57602060405160018152f35b3461029a57602036600319011261029a57600435600052600080516020612ee083398151915260205260406000206040518060208354918281520190819360005260206000209060005b8181106109cf5750505081610983910382612151565b6040519182916020830190602084525180915260408301919060005b8181106109ad575050500390f35b82516001600160a01b031684528594506020938401939092019160010161099f565b825484526020909301926001928301920161096d565b3461029a57600036600319011261029a57602060405160008152f35b3461029a57604036600319011261029a57600435610a1d6120c9565b90610a26612795565b63ffffffff600554169163ffffffff811692808410908115610aa9575b5061049b5760207f1da95b87b4c773f68c1447ffc5644e41a8a8887d55065beb64852014cf7140be91610a96610a78856127e0565b9290610a91600463ffffffff835460a01c1617826122e3565b612210565b6040519485526001600160a01b031693a3005b90501584610a43565b3461029a57600036600319011261029a576020604051600080516020612f208339815191528152f35b3461029a57604036600319011261029a57610af4612064565b600435600052600080516020612fc083398151915260205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b3461029a57604036600319011261029a57600435600052600080516020612ee08339815191526020526020610b706024356040600020612d0c565b905460405160039290921b1c6001600160a01b03168152f35b3461029a57602036600319011261029a576001600160a01b03610baa61207a565b1660005260026020526020604060002054604051908152f35b3461029a57600036600319011261029a573360009081527f0ac8cc3d209806126662940717264973110c39045b305f6ba49613325a615e09602052604090205460ff1615610c9257610c13612795565b600160ff19600080516020613000833981519152541617600080516020613000833981519152557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a16040514281527f80170b5fcdd2bf1e0660ef4b8851f86685f64d41b1a19de1471947ece8725aac60203392a2005b63e2517d3f60e01b60005233600452600080516020612f2083398151915260245260446000fd5b3461029a57600036600319011261029a5760005460405160a09190911c6001600160401b03168152602090f35b3461029a57604036600319011261029a57610d0a610d02612064565b60043561236c565b906102966040519283928361209a565b3461029a57604036600319011261029a57610d3361207a565b336000908152600080516020612f60833981519152602052604090205460ff161580610e08575b6103ce576001600160a01b03166000818152600160205260409020805460e01c60ff1660038110156103b8576001036103a757805460ff60e01b198116600160e11b1782556001919091018054600160401b600160801b03191642604090811b600160401b600160801b0316919091179091555160243581526001600160a01b0390911691907fc0499cc07ed9d734deec6857802d3f0fa8d5afaf79a7008beb8ba7bef62a271b90602090a3005b50336001600160a01b0382161415610d5a565b3461029a57600036600319011261029a57602060405160048152f35b3461029a57602036600319011261029a57610e506120b6565b6000546001600160a01b031633036106125763ffffffff8116908115610ea757600080516020612fa083398151915291610ea263ffffffff926005549284198416176005556040519384931683612233565b0390a1005b6338f3377360e21b60005260046000fd5b3461029a57600036600319011261029a57602060ff60008051602061300083398151915254166040519015158152f35b3461029a57602036600319011261029a57610f0161207a565b6000546001600160a01b0381169033829003610612576001600160a01b038316928315610f64573b15610f53576001600160a01b03191682176000908155600080516020612f808339815191529080a3005b636f7c43f160e01b60005260046000fd5b63e6c4247b60e01b60005260046000fd5b3461029a57606036600319011261029a57610f8e61207a565b610f96612064565b610f9e61218f565b91610fa7612795565b6001600160a01b031690338290036103ce57816000526001602052604060002060ff815460e01c1660038110156103b857600114611090578160209161100f867ff223dc085722c94c84dcf67427e225799be616382a2a484d378f8921c69a20339587612c43565b80546001600160a01b0319166001600160a01b038316178155611032868261239f565b6001810180546001600160801b031916426001600160401b0390811691909117909155815460ff60e01b1916600160e01b179091556001600160a01b03919091166000818152600284526040908190208690555195909116855293a3005b639d2c8fdf60e01b60005260046000fd5b3461029a57602036600319011261029a576001600160a01b036110c261207a565b166000526001602052604060002060ff60008051602061300083398151915254161580611115575b602091816110fe575b506040519015158152f35b5460a01c6001600160401b031642109050826110f3565b5060ff815460e01c169060038210156103b857906001146110ea565b3461029a57600036600319011261029a577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316300361118a576020604051600080516020612f408339815191528152f35b63703e46dd60e11b60005260046000fd5b3461029a57600036600319011261029a576000546040516001600160a01b039091168152602090f35b3461029a57602036600319011261029a57600435604060008281526004602052209081549160018060a01b03831692831590811561129e575b5061128d57336000908152600080516020612f60833981519152602052604090205460ff161580611283575b611272578061124563fffffffe61124b935460a01c16826122e3565b8261269b565b7fa5ffbdba01b15df97334e34ad816b9986b6057a5ddc97aba93b7e8ccd21759ed600080a3005b630a606ec360e11b60005260046000fd5b5082331415611229565b6360eb6c2360e01b60005260046000fd5b6001915060a01c1615846111fd565b604036600319011261029a576112c161207a565b602435906001600160401b03821161029a573660238301121561029a578160040135906112ed82612174565b916112fb6040519384612151565b8083526020830193366024838301011161029a57816000926024602093018737840101526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630811490811561156c575b5061118a576000546001600160a01b03163303610612576001600160a01b038116928315610f6457813b1561155b5730841461154c57600080516020612f4083398151915254846113a36121ed565b7f6ea8b34d59b2818d3f37a08dddaa06f5886b9c20c907b36f03ca6528e106e86f6113d9604051926040845260408401906121c8565b4260208401526001600160a01b038516929081900390a36040516352d1902d60e01b8152602081600481895afa60009181611518575b506114295785634c9c8ce360e01b60005260045260246000fd5b9081600080516020612f408339815191528793036115045750833b156114ef576001600160a01b0319168117600080516020612f40833981519152557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28251156114d4576000809161069b945190845af43d156114cc573d916114af83612174565b926114bd6040519485612151565b83523d6000602085013e612e7e565b606091612e7e565b505050346114de57005b63b398979f60e01b60005260046000fd5b50634c9c8ce360e01b60005260045260246000fd5b632a87526960e21b60005260045260246000fd5b9091506020813d602011611544575b8161153460209383612151565b8101031261029a5751908761140f565b3d9150611527565b614e8d60eb1b60005260046000fd5b632e07c4bd60e11b60005260046000fd5b600080516020612f40833981519152546001600160a01b03161415905084611354565b3461029a57602036600319011261029a576004356115ab612795565b6115cd6115b7826127e0565b9190600263ffffffff825460a01c1617906122e3565b6001600160a01b0316907fc2713e691344add4705edc62a0ee5aede95ba66ad68f97316efef9cb50644edd600080a3005b3461029a57600036600319011261029a57336000908152600080516020612f60833981519152602052604090205460ff1615806116e1575b6116d0576000805160206130008339815191525460ff8116156116bf5760ff1916600080516020613000833981519152557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a16040514281527f107553d8191d85b405879cf752997865edd48d94e20bda4dd27223c94b31a7cc60203392a2005b638dfc202b60e01b60005260046000fd5b63659a07b360e11b60005260046000fd5b506000546001600160a01b0316331415611636565b3461029a57604036600319011261029a5761029661171d611715612064565b600435612306565b604093919351938493846120dc565b3461029a57604036600319011261029a57611745612064565b336001600160a01b038216036117615761069b90600435612751565b63334bd91960e11b60005260046000fd5b3461029a57602036600319011261029a57600435604060008281526004602052209081549160018060a01b038316928315908115611837575b5061128d57336000908152600080516020612f60833981519152602052604090205460ff16158061182d575b61127257806117f363fffffff7611806935460a01c16826122e3565b80546001600160e01b031681558261269b565b7f054490ec6650e07db9b97a06ea31d44cebd44b390c9975a380055e1b4d3cac21600080a3005b50823314156117d7565b6008915060a01c1615846117ab565b3461029a57604036600319011261029a5761069b600435611865612064565b90611872610691826122c2565b612709565b3461029a57602036600319011261029a576004356118c161189782612629565b91906118ad63fffffffb825460a01c16826122e3565b805463ffffffff60c01b191681558361269b565b6001600160a01b0316907f09cb4ec44cdef8489412844b9682f87f7900758fa2bd7e039113e9125e538e0f600080a3005b3461029a57602036600319011261029a57600435604060008281526004602052209081549160018060a01b0383169283159081156119a4575b5061128d57336000908152600080516020612f60833981519152602052604090205460ff16158061199a575b611272578061124563fffffffd611973935460a01c16826122e3565b7fb390ab029eab314bd18190ebe73d7e5c1c336beaa5c83ac22578378dc9ccc405600080a3005b5082331415611957565b6002915060a01c16158461192b565b3461029a57602036600319011261029a5760206119d16004356122c2565b604051908152f35b3461029a57604036600319011261029a5761029661171d6119f8612064565b60043561224a565b3461029a57604036600319011261029a57600435611a1c6120c9565b63ffffffff600554169063ffffffff811691808310908115611ac8575b5061049b57611a4783612629565b909263ffffffff845460c01c16809260018060a01b03163314159182611abd575b5050611aac57611a98827e8a218591d4362499c38c38eb1c12e7a7cc97a9068818d1fe6046a42ba4a5ba94612210565b611aa760405192839283612233565b0390a2005b634e80a40760e11b60005260046000fd5b111590508186611a68565b90501584611a39565b3461029a57602036600319011261029a57611aea6120b6565b6000805160206130208339815191525460ff8160401c16908115611bca575b50611bb957600080516020613020833981519152805460026001600160401b0319821681179092556000546001600160481b031990911690911791906001600160a01b031633036106125763ffffffff168015610ea757604081600080516020612fa08339815191529263ffffffff196005541617600555815190600082526020820152a160008051602061302083398151915255600080516020612f00833981519152602060405160028152a1005b63f92ee8a960e01b60005260046000fd5b60026001600160401b03919091161015905082611b09565b3461029a5760a036600319011261029a57611bfb61207a565b611c03612064565b906044356001600160a01b03811680820361029a576064356001600160a01b0381169182820361029a576084356001600160a01b038116949085900361029a5760008051602061302083398151915254604081901c60ff161596906001600160401b031680159081611f80575b6001149081611f76575b159081611f6d575b50611bb95760008051602061302083398151915280546001600160401b031916600117905586611f48575b611cb5612acc565b611cbd612acc565b611cc5612acc565b611ccd612acc565b6001600160a01b038116908115610f64578315610f64578515610f64576001600160a01b038916988915610f64573b15610f5357858414611f375762aa36a746148015611f2c575b8015611f21575b1580611f0f575b610f5357611d32906000612afa565b9081611ec8575b5015611e0d57611d5790600080516020612fe0833981519152612afa565b9081611e73575b5015611e0d57611d7c90600080516020612f20833981519152612afa565b9081611e1e575b5015611e0d57600080546001600160a01b031916841781556040519390600080516020612f808339815191528180a38015610f6457803b15610f5357600380546001600160a01b031916919091179055611dd957005b600080516020613020833981519152805460ff60401b1916905560018152600080516020612f0083398151915290602090a1005b63cf5a8e3360e01b60005260046000fd5b600080516020612f20833981519152600052600080516020612ee0833981519152602052611e6c907ffff5b43478fa6840382eb63777e0da6941d320b940e3f70f0ea4780feff95827612d3a565b5084611d83565b600080516020612fe0833981519152600052600080516020612ee0833981519152602052611ec1907f32d31393d541a265984ec379cddd8b1fcbe5f2b0eb8ad81dddfead454f135eaa612d3a565b5086611d5e565b60008052600080516020612ee0833981519152602052611f08907f615f0f9e84155bea8cc509fe18befeb1baf65611e38a6ba60964480fb29dfd44612d3a565b5088611d39565b50823b1580611d235750843b15611d23565b50617a694614611d1c565b506105394614611d15565b638135316560e01b60005260046000fd5b600080516020613020833981519152805460ff60401b1916600160401b179055611cad565b90501589611c82565b303b159150611c7a565b889150611c70565b3461029a57604036600319011261029a57610296611fbc611fa7612064565b600435600052600460205260406000206123c8565b611fc581612090565b60405191818392158361209a565b3461029a57600036600319011261029a57602063ffffffff60055416604051908152f35b3461029a57602036600319011261029a576004359063ffffffff60e01b821680920361029a57602091635a05180f60e01b8114908115612039575b5015158152f35b637965db0b60e01b811491508115612053575b5083612032565b6301ffc9a760e01b1490508361204c565b602435906001600160a01b038216820361029a57565b600435906001600160a01b038216820361029a57565b600811156103b857565b9015158152604081019291906020906120b283612090565b0152565b6004359063ffffffff8216820361029a57565b6024359063ffffffff8216820361029a57565b91604091949363ffffffff916060850196151585526120fa81612090565b602085015216910152565b60a081019081106001600160401b0382111761212057604052565b634e487b7160e01b600052604160045260246000fd5b608081019081106001600160401b0382111761212057604052565b601f909101601f19168101906001600160401b0382119082101761212057604052565b6001600160401b03811161212057601f01601f191660200190565b604435906001600160401b038216820361029a57565b60005b8381106121b85750506000910152565b81810151838201526020016121a8565b906020916121e1815180928185528580860191016121a5565b601f01601f1916010190565b604051906121fc604083612151565b60058252640322e312e360dc1b6020830152565b805463ffffffff60c01b191660c09290921b63ffffffff60c01b16919091179055565b63ffffffff91821681529116602082015260400190565b600052600460205261226160406000209182612485565b61226a81612090565b806122b857505460e01c63ffffffff60055416811580156122b0575b6122a35780821061229c57505b60019160009190565b9050612293565b5050600090600390600090565b508015612286565b6000929091508290565b600052600080516020612fc083398151915260205260016040600020015490565b805463ffffffff60a01b191660a09290921b63ffffffff60a01b16919091179055565b919091600052600460205261232060406000209283612511565b9161232a83612090565b826123625763ffffffff9192505460c01c1663ffffffff60055416811580156122b0576122a35780821061229c575060019160009190565b5060009190600090565b90612383916000526004602052604060002061259d565b61238c81612090565b8061239a5750600190600090565b600091565b8054600160a01b600160e01b03191660a09290921b600160a01b600160e01b0316919091179055565b60ff600080516020613000833981519152541661247e57546001600160a01b0381169081156124765760a01c6002161561246f5760005260016020526040600020549060ff8260e01c1660038110156103b857801561246757600214612460574260a083901c6001600160401b03161115612459576001600160a01b0390811691160361245457600090565b600790565b5050600690565b5050600590565b505050600490565b5050600390565b505050600290565b5050600190565b60ff600080516020613000833981519152541661247e57546001600160a01b0381169081156124765760a01c6008161561246f5760005260016020526040600020549060ff8260e01c1660038110156103b857801561246757600214612460574260a083901c6001600160401b03161115612459576001600160a01b0390811691160361245457600090565b60ff600080516020613000833981519152541661247e57546001600160a01b0381169081156124765760a01c6004161561246f5760005260016020526040600020549060ff8260e01c1660038110156103b857801561246757600214612460574260a083901c6001600160401b03161115612459576001600160a01b0390811691160361245457600090565b60ff600080516020613000833981519152541661247e57546001600160a01b0381169081156124765760a01c6001161561246f5760005260016020526040600020549060ff8260e01c1660038110156103b857801561246757600214612460574260a083901c6001600160401b03161115612459576001600160a01b0390811691160361245457600090565b6000908152600460205260409020805490916001600160a01b03821691821590811561268c575b5061128d57336000908152600080516020612f60833981519152602052604090205460ff161580612682575b61127257565b508133141561267c565b6004915060a01c161538612650565b905460a01c63ffffffff16156126ae5750565b600052600460205260006040812055565b6000818152600080516020612fc08339815191526020908152604080832033845290915290205460ff16156126f15750565b63e2517d3f60e01b6000523360045260245260446000fd5b6127138282612afa565b918261271e57505090565b6000918252600080516020612ee0833981519152602052604090912061274d916001600160a01b031690612d3a565b5090565b61275b8282612ba3565b918261276657505090565b6000918252600080516020612ee0833981519152602052604090912061274d916001600160a01b031690612dab565b60ff60008051602061300083398151915254166127ae57565b63d93c066560e01b60005260046000fd5b519064ffffffffff8216820361029a57565b519061ffff8216820361029a57565b8015612abb57600354604051638d34875560e01b8152600481018390529190600090839060249082906001600160a01b03165afa918215612aaf57600092612904575b5060808201516001600160a01b0316913383900361127257610120015161284981612090565b61285281612090565b600381149081156128ef575b81156128db575b506128ca5781600052600160205260ff60406000205460e01c1660038110156103b8576001036128b957600090815260046020526040902080546001600160a01b0319166001600160a01b03831617815591565b632e68d1d360e21b60005260046000fd5b63e9f6db8560e01b60005260046000fd5b600791506128e881612090565b1438612865565b90506128fa81612090565b600581149061285e565b90913d8082843e6129158184612151565b820191602081840312612a8f578051906001600160401b038211612a975701906101a082840312612a8c57604051926101a084016001600160401b03811185821017612a9b5760409081528351855260208085015190860152838101519085015260608301516001600160401b038111612a9757830181601f82011215612a97578051906129a282612174565b926129b06040519485612151565b82845260208383010111612a9357906129cf91602080850191016121a5565b606084015260808201516001600160a01b0381168103612a8f5760808401526129fa60a083016127bf565b60a0840152612a0b60c083016127bf565b60c0840152612a1c60e083016127d1565b60e0840152612a2e61010083016127bf565b610100840152610120820151906008821015612a8c5750612a7f9161018091610120850152612a6061014082016127bf565b610140850152612a7361016082016127d1565b610160850152016127bf565b6101808201529038612823565b80fd5b5080fd5b8380fd5b8280fd5b634e487b7160e01b83526041600452602483fd5b6040513d6000823e3d90fd5b637bb0b62160e01b60005260046000fd5b60ff6000805160206130208339815191525460401c1615612ae957565b631afcd79f60e31b60005260046000fd5b6000818152600080516020612fc0833981519152602090815260408083206001600160a01b038616845290915290205460ff16612b9c576000818152600080516020612fc0833981519152602090815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b5050600090565b6000818152600080516020612fc0833981519152602090815260408083206001600160a01b038616845290915290205460ff1615612b9c576000818152600080516020612fc0833981519152602090815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b158015612cfb575b610f64576001600160a01b0316600090815260026020526040902054612cea576001600160401b031642811115612cd95760005460a01c6001600160401b03168015159182612cae575b5050612c9d57565b63e774e7b560e01b60005260046000fd5b909150428103908111612cc357113880612c95565b634e487b7160e01b600052601160045260246000fd5b63efa7aefd60e01b60005260046000fd5b633b53f64f60e21b60005260046000fd5b506001600160a01b03811615612c4b565b8054821015612d245760005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b6001810190826000528160205260406000205415600014612da3578054600160401b81101561212057612d8e612d77826001879401855584612d0c565b819391549060031b91821b91600019901b19161790565b90555491600052602052604060002055600190565b505050600090565b9060018201918160005282602052604060002054801515600014612e75576000198101818111612cc3578254600019810191908211612cc357818103612e3e575b50505080548015612e28576000190190612e068282612d0c565b8154906000199060031b1b191690555560005260205260006040812055600190565b634e487b7160e01b600052603160045260246000fd5b612e5e612e4e612d779386612d0c565b90549060031b1c92839286612d0c565b905560005283602052604060002055388080612dec565b50505050600090565b90612ea45750805115612e9357602081519101fd5b63d6bda27560e01b60005260046000fd5b81511580612ed6575b612eb5575090565b639996b31560e01b60009081526001600160a01b0391909116600452602490fd5b50803b15612ead56fec1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000c7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d275027301df982f5215b4963a854cf9c73219df80cb6acd8f098189c9480c7bbc360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc07966f2ab141347034724e9b2a472c2f77f5cd745aeba27cacba797b8fcb708617dc5b1290f7495d7f8cc68476e6941aaf510598fa925d0d2720edc8805a846cd37bc77615afefc793aa17d75d4249a9b517ba91b0e54a49c9c4a44b3d7e228302dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800edcc084d3dcd65a1f7f23c65c46722faca6953d28e43150a467cf43e5c309238cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a164736f6c6343000822000a";
19066
19103
  var isSuperArgs2 = (xs) => xs.length > 1;
19067
- var AgentDelegationRegistry__factory = class extends import_ethers15.ContractFactory {
19104
+ var AgentDelegationRegistry__factory = class extends import_ethers16.ContractFactory {
19068
19105
  constructor(...args) {
19069
19106
  if (isSuperArgs2(args)) {
19070
19107
  super(...args);
@@ -19084,10 +19121,10 @@ var AgentDelegationRegistry__factory = class extends import_ethers15.ContractFac
19084
19121
  static bytecode = _bytecode2;
19085
19122
  static abi = _abi2;
19086
19123
  static createInterface() {
19087
- return new import_ethers15.Interface(_abi2);
19124
+ return new import_ethers16.Interface(_abi2);
19088
19125
  }
19089
19126
  static connect(address, runner) {
19090
- return new import_ethers15.Contract(
19127
+ return new import_ethers16.Contract(
19091
19128
  address,
19092
19129
  _abi2,
19093
19130
  runner
@@ -19096,7 +19133,7 @@ var AgentDelegationRegistry__factory = class extends import_ethers15.ContractFac
19096
19133
  };
19097
19134
 
19098
19135
  // src/utils/position-delegate.utils.ts
19099
- var import_ethers16 = require("ethers");
19136
+ var import_ethers17 = require("ethers");
19100
19137
  var POSITION_DELEGATE_REGISTRY_ABI = [
19101
19138
  "function positionDelegate(bytes32 positionId) view returns (address)",
19102
19139
  "function isDelegate(bytes32 positionId, address delegate) view returns (bool)",
@@ -19115,7 +19152,7 @@ var DELEGATE_STATUS_ABI = [
19115
19152
  "function delegateStatus(bytes32 positionId, address delegate) view returns (bool ok, uint8 reason)"
19116
19153
  ];
19117
19154
  async function setPositionDelegate(positionId, delegate, signer, registryAddress) {
19118
- const registry = new import_ethers16.Contract(
19155
+ const registry = new import_ethers17.Contract(
19119
19156
  registryAddress,
19120
19157
  POSITION_DELEGATE_REGISTRY_ABI,
19121
19158
  signer
@@ -19123,7 +19160,7 @@ async function setPositionDelegate(positionId, delegate, signer, registryAddress
19123
19160
  return registry["setPositionDelegate"](positionId, delegate);
19124
19161
  }
19125
19162
  async function getPositionDelegate(positionId, provider, registryAddress) {
19126
- const registry = new import_ethers16.Contract(
19163
+ const registry = new import_ethers17.Contract(
19127
19164
  registryAddress,
19128
19165
  POSITION_DELEGATE_REGISTRY_ABI,
19129
19166
  provider
@@ -19131,7 +19168,7 @@ async function getPositionDelegate(positionId, provider, registryAddress) {
19131
19168
  return registry["positionDelegate"](positionId);
19132
19169
  }
19133
19170
  async function isPositionDelegate(positionId, delegate, provider, registryAddress) {
19134
- const registry = new import_ethers16.Contract(
19171
+ const registry = new import_ethers17.Contract(
19135
19172
  registryAddress,
19136
19173
  POSITION_DELEGATE_REGISTRY_ABI,
19137
19174
  provider
@@ -19139,7 +19176,7 @@ async function isPositionDelegate(positionId, delegate, provider, registryAddres
19139
19176
  return registry["isDelegate"](positionId, delegate);
19140
19177
  }
19141
19178
  async function getDelegateStatus(positionId, delegate, provider, registryAddress) {
19142
- const registry = new import_ethers16.Contract(
19179
+ const registry = new import_ethers17.Contract(
19143
19180
  registryAddress,
19144
19181
  DELEGATE_STATUS_ABI,
19145
19182
  provider
@@ -19235,7 +19272,7 @@ var TxValidationError = class extends Error {
19235
19272
  };
19236
19273
 
19237
19274
  // src/utils/sign-guard/signable-functions.ts
19238
- var import_ethers17 = require("ethers");
19275
+ var import_ethers18 = require("ethers");
19239
19276
  var SIGNABLE_FUNCTIONS = [
19240
19277
  "function mintUCD(bytes32 positionId, uint256 mintAmount, uint256 mintFee, uint256 newDebt, uint256 newCollateral, uint256 btcPrice, bytes32 authorizedSpendsHash, bytes32 ucdDebtHash, bytes32 contractHash, uint256 quantumTimestamp, bytes calldata mintValidatorSignature) external returns (bool)",
19241
19278
  // `makePayment` is the ONLY repayment entry point. A `repayPosition` entry
@@ -19272,7 +19309,7 @@ var SIGNABLE_FUNCTIONS = [
19272
19309
  // this too is client-only and never module-whitelisted.
19273
19310
  "function addAddress(string btcAddress) external"
19274
19311
  ];
19275
- var IFACE = new import_ethers17.ethers.Interface(SIGNABLE_FUNCTIONS);
19312
+ var IFACE = new import_ethers18.ethers.Interface(SIGNABLE_FUNCTIONS);
19276
19313
  function encodeSignable(fn, args) {
19277
19314
  return IFACE.encodeFunctionData(fn, args);
19278
19315
  }
@@ -19296,46 +19333,6 @@ function decodeSignable(data) {
19296
19333
 
19297
19334
  // src/utils/sign-guard/tx-validator.ts
19298
19335
  var import_ethers19 = require("ethers");
19299
-
19300
- // src/utils/sign-guard/fee-ceiling.ts
19301
- var import_ethers18 = require("ethers");
19302
- var MAX_GAS_LIMIT = 5000000n;
19303
- var MAX_FEE_PER_GAS_WEI = 2000000000000n;
19304
- var DEFAULT_MAX_TX_FEE_WEI = 250000000000000000n;
19305
- var DEFAULT_FEE_CEILING = {
19306
- maxGasLimit: MAX_GAS_LIMIT,
19307
- maxFeePerGasWei: MAX_FEE_PER_GAS_WEI,
19308
- maxTxFeeWei: DEFAULT_MAX_TX_FEE_WEI
19309
- };
19310
- function fmtEth(wei) {
19311
- return `${import_ethers18.ethers.formatEther(wei)} ETH`;
19312
- }
19313
- function fmtGwei(wei) {
19314
- return `${import_ethers18.ethers.formatUnits(wei, "gwei")} gwei`;
19315
- }
19316
- function worstCaseFeeWei(gasLimit, maxFeePerGas) {
19317
- if (gasLimit == null || maxFeePerGas == null)
19318
- return null;
19319
- return gasLimit * maxFeePerGas;
19320
- }
19321
- function assertFeeCeiling(gasLimit, maxFeePerGas, raise, ceiling = DEFAULT_FEE_CEILING) {
19322
- if (gasLimit != null && gasLimit > ceiling.maxGasLimit) {
19323
- raise(`gasLimit ${gasLimit} exceeds the signing ceiling of ${ceiling.maxGasLimit}`);
19324
- }
19325
- if (maxFeePerGas != null && maxFeePerGas > ceiling.maxFeePerGasWei) {
19326
- raise(
19327
- `maxFeePerGas ${fmtGwei(maxFeePerGas)} exceeds the signing ceiling of ${fmtGwei(ceiling.maxFeePerGasWei)}`
19328
- );
19329
- }
19330
- const worst = worstCaseFeeWei(gasLimit, maxFeePerGas);
19331
- if (worst != null && worst > ceiling.maxTxFeeWei) {
19332
- raise(
19333
- `worst-case transaction fee ${fmtEth(worst)} (gasLimit ${gasLimit} \xD7 ${fmtGwei(maxFeePerGas)}) exceeds the signing ceiling of ${fmtEth(ceiling.maxTxFeeWei)}.${ceiling.raiseHint ? ` ${ceiling.raiseHint}` : ""}`
19334
- );
19335
- }
19336
- }
19337
-
19338
- // src/utils/sign-guard/tx-validator.ts
19339
19336
  function eqAddr(a, b) {
19340
19337
  if (!a || !b)
19341
19338
  return false;
@@ -20038,6 +20035,391 @@ function formatLiquidationFailureMessage(loanId, errorMessage, btcVault, btcVaul
20038
20035
  return `\u274C DH SDK: Loan Id ${loanId} liquidation FAILED: ${errorMessage}; BTC vault ${btcVault} balance is ${formattedBalance}, UCD Debt of ${ucdDebt} and BTC Price of ${formattedPrice}`;
20039
20036
  }
20040
20037
 
20038
+ // src/utils/contract-error-decoder.ts
20039
+ var import_ethers21 = require("ethers");
20040
+
20041
+ // src/constants/chunks/contract-errors.generated.ts
20042
+ var CONTRACT_ERROR_FRAGMENTS = [
20043
+ { fragment: "error AboveMaxRedeem(uint256 amount, uint256 maximum)", contracts: ["SimplePSMV2"] },
20044
+ { fragment: "error AboveMaxSwap(uint256 amount, uint256 maximum)", contracts: ["SimplePSMV2"] },
20045
+ { fragment: "error AccessControlBadConfirmation()", contracts: ["PositionManager", "LoanOperationsManagerModule", "CollateralManagerModule", "BTCSpendAuthorizer", "UCDController", "SimplePSMV2"] },
20046
+ { fragment: "error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)", contracts: ["PositionManager", "LoanOperationsManagerModule", "CollateralManagerModule", "BTCSpendAuthorizer", "UCDController", "SimplePSMV2"] },
20047
+ { fragment: "error AddressEmptyCode(address target)", contracts: ["PositionManager", "LoanOperationsManagerModule", "OperationAuthorizationRegistry", "CollateralManagerModule", "BTCSpendAuthorizer", "UCDController", "SimplePSMV2"] },
20048
+ { fragment: "error AlreadyActive()", contracts: ["PositionManagerErrors"] },
20049
+ { fragment: "error AlreadySigned()", contracts: ["PositionManagerErrors", "OperationAuthorizationRegistry"] },
20050
+ { fragment: "error AmountMustBePositive()", contracts: ["LoanOperationsManagerModule", "SimplePSMV2"] },
20051
+ { fragment: "error ArrayLengthMismatch()", contracts: ["BTCSpendAuthorizer", "SimplePSMV2"] },
20052
+ { fragment: "error BTCSpendAuthorizerNotSet()", contracts: ["LoanOperationsManagerModule"] },
20053
+ { fragment: "error BalanceMismatch()", contracts: ["UCDController"] },
20054
+ { fragment: "error BatchSizeTooLarge()", contracts: ["BTCSpendAuthorizer"] },
20055
+ { fragment: "error BelowMinRedeem(uint256 amount, uint256 minimum)", contracts: ["SimplePSMV2"] },
20056
+ { fragment: "error BelowMinSwap(uint256 amount, uint256 minimum)", contracts: ["SimplePSMV2"] },
20057
+ { fragment: "error BorrowerBTCSpendMutationDisabled()", contracts: ["LoanOperationsManagerModule"] },
20058
+ { fragment: "error BtcAmountTooLarge()", contracts: ["PositionManager", "LoanOperationsManagerModule", "CollateralManagerModule"] },
20059
+ { fragment: "error BtcPriceBoundOutOfRange()", contracts: ["LoanOperationsManagerModule"] },
20060
+ { fragment: "error BtcPriceDeviationExceeded(uint256 signedPrice, uint256 chainlinkPrice, uint16 deviationBps)", contracts: ["LoanOperationsManagerModule"] },
20061
+ { fragment: "error BtcPriceFeedStale(uint256 updatedAt, uint256 maxAge)", contracts: ["LoanOperationsManagerModule"] },
20062
+ { fragment: "error BtcPriceTooHigh()", contracts: ["PositionManager", "LoanOperationsManagerModule", "CollateralManagerModule"] },
20063
+ { fragment: "error BurnCallFailed()", contracts: ["UCDController"] },
20064
+ { fragment: "error BurnGuardFailed(uint8 code)", contracts: ["UCDController"] },
20065
+ { fragment: "error BurnVerificationFailed()", contracts: ["PositionManager", "PositionManagerErrors"] },
20066
+ { fragment: "error CannotRemoveLastTerm()", contracts: ["PositionManagerErrors"] },
20067
+ { fragment: "error CannotUpgradeToSelf()", contracts: ["PositionManagerErrors", "LoanOperationsManagerModule", "CollateralManagerModule", "BTCSpendAuthorizer"] },
20068
+ { fragment: "error CircuitBreakerNotActive()", contracts: ["PositionManagerErrors"] },
20069
+ { fragment: "error CircuitBreakerTriggered()", contracts: ["PositionManagerErrors"] },
20070
+ { fragment: "error CollateralOverflow()", contracts: ["PositionManager", "LoanOperationsManagerModule", "CollateralManagerModule"] },
20071
+ { fragment: "error CollateralRatioTooLargeForStorage()", contracts: ["PositionManagerErrors"] },
20072
+ { fragment: "error CollateralRatioTooLow()", contracts: ["PositionManager", "PositionManagerErrors", "LoanOperationsManagerModule"] },
20073
+ { fragment: "error ContractNotDeployed(address addr)", contracts: ["PositionManager"] },
20074
+ { fragment: "error DailyLimitExceeded()", contracts: ["UCDController"] },
20075
+ { fragment: "error DeadZoneViolation()", contracts: ["OperationAuthorizationRegistry"] },
20076
+ { fragment: "error DebtCalculationMismatch()", contracts: ["LoanOperationsManagerModule"] },
20077
+ { fragment: "error DebtNotZero()", contracts: ["PositionManager", "PositionManagerErrors"] },
20078
+ { fragment: "error DebtOverflow()", contracts: ["LoanOperationsManagerModule"] },
20079
+ { fragment: "error DebtUpdateVerificationFailed()", contracts: ["LoanOperationsValidation", "LoanOperationsManagerModule"] },
20080
+ { fragment: "error DebtUpdateVerificationFailedDetailed(bytes32 positionId, uint256 currentDebt, uint256 newDebt, uint256 quantumTimestamp, uint256 supplyAfterMint, uint256 expectedIncrease)", contracts: ["LoanOperationsManagerModule"] },
20081
+ { fragment: "error DecimalsMismatch(uint8 provided, uint8 actual)", contracts: ["SimplePSMV2"] },
20082
+ { fragment: "error DecimalsQueryFailed()", contracts: ["SimplePSMV2"] },
20083
+ { fragment: "error DivisionByZero()", contracts: ["PositionManager", "CollateralManagerModule"] },
20084
+ { fragment: "error ECDSAInvalidSignature()", contracts: ["BTCSpendAuthorizer"] },
20085
+ { fragment: "error ECDSAInvalidSignatureLength(uint256 length)", contracts: ["BTCSpendAuthorizer"] },
20086
+ { fragment: "error ECDSAInvalidSignatureS(bytes32 s)", contracts: ["BTCSpendAuthorizer"] },
20087
+ { fragment: "error ERC1967InvalidImplementation(address implementation)", contracts: ["PositionManager", "LoanOperationsManagerModule", "OperationAuthorizationRegistry", "CollateralManagerModule", "BTCSpendAuthorizer", "UCDController", "SimplePSMV2"] },
20088
+ { fragment: "error ERC1967NonPayable()", contracts: ["PositionManager", "LoanOperationsManagerModule", "OperationAuthorizationRegistry", "CollateralManagerModule", "BTCSpendAuthorizer", "UCDController", "SimplePSMV2"] },
20089
+ { fragment: "error EnforcedPause()", contracts: ["PositionManager", "LoanOperationsManagerModule", "CollateralManagerModule", "BTCSpendAuthorizer", "UCDController", "SimplePSMV2"] },
20090
+ { fragment: "error EntryFeeTooHigh(uint256 fee, uint256 max)", contracts: ["SimplePSMV2"] },
20091
+ { fragment: "error ExceedsFeeBalance(uint256 requested, uint256 max)", contracts: ["SimplePSMV2"] },
20092
+ { fragment: "error ExceedsMaxLoan()", contracts: ["PositionManagerErrors"] },
20093
+ { fragment: "error ExitFeeTooHigh(uint256 fee, uint256 max)", contracts: ["SimplePSMV2"] },
20094
+ { fragment: "error ExpectedPause()", contracts: ["PositionManager", "LoanOperationsManagerModule", "CollateralManagerModule", "BTCSpendAuthorizer", "UCDController", "SimplePSMV2"] },
20095
+ { fragment: "error ExtensionFeeMintingFailed()", contracts: ["PositionManager", "PositionManagerErrors"] },
20096
+ { fragment: "error ExtensionNotAllowed()", contracts: ["PositionManagerErrors"] },
20097
+ { fragment: "error FailedCall()", contracts: ["PositionManager", "LoanOperationsManagerModule", "OperationAuthorizationRegistry", "CollateralManagerModule", "BTCSpendAuthorizer", "UCDController", "SimplePSMV2"] },
20098
+ { fragment: "error FailedToGetStablecoinDecimals()", contracts: ["SimplePSMV2"] },
20099
+ { fragment: "error FailedToGetUCDDecimals()", contracts: ["SimplePSMV2"] },
20100
+ { fragment: "error FeeOnTransferNotSupported()", contracts: ["SimplePSMV2"] },
20101
+ { fragment: "error FeeTooHigh(uint256 fee, uint256 max)", contracts: ["PositionManagerErrors"] },
20102
+ { fragment: "error FeeTooLow(uint256 fee, uint256 min)", contracts: ["PositionManagerErrors"] },
20103
+ { fragment: "error ImplNotDeployed()", contracts: ["LoanOperationsManagerModule", "BTCSpendAuthorizer"] },
20104
+ { fragment: "error ImplementationNotDeployed()", contracts: ["UCDController"] },
20105
+ { fragment: "error InitialBalanceTooLarge()", contracts: ["SimplePSMV2"] },
20106
+ { fragment: "error InsufficientBalance()", contracts: ["PositionManagerErrors"] },
20107
+ { fragment: "error InsufficientCollateralForAmount()", contracts: ["PositionManagerErrors"] },
20108
+ { fragment: "error InsufficientCollateralRatio()", contracts: ["CollateralManagerModule"] },
20109
+ { fragment: "error InsufficientFeeBal()", contracts: ["LoanOperationsManagerModule"] },
20110
+ { fragment: "error InsufficientReserves(uint256 available, uint256 required)", contracts: ["SimplePSMV2"] },
20111
+ { fragment: "error InsufficientSignatures()", contracts: ["OperationAuthorizationRegistry"] },
20112
+ { fragment: "error IntegrityCheckFailed()", contracts: ["PositionManagerErrors"] },
20113
+ { fragment: "error InvalidActionHash()", contracts: ["CollateralManagerModule"] },
20114
+ { fragment: "error InvalidAddress()", contracts: ["PositionManager", "PositionManagerErrors", "OperationAuthorizationRegistry", "CollateralManagerModule", "SimplePSMV2"] },
20115
+ { fragment: "error InvalidAdmin()", contracts: ["LoanOperationsManagerModule", "BTCSpendAuthorizer", "SimplePSMV2"] },
20116
+ { fragment: "error InvalidAmount()", contracts: ["PositionManagerErrors", "SimplePSMV2"] },
20117
+ { fragment: "error InvalidBTCPrice()", contracts: ["PositionManager", "PositionManagerErrors"] },
20118
+ { fragment: "error InvalidBytes32()", contracts: ["PositionManager"] },
20119
+ { fragment: "error InvalidCollateralAmount()", contracts: ["PositionManager", "PositionManagerErrors"] },
20120
+ { fragment: "error InvalidController()", contracts: ["SimplePSMV2"] },
20121
+ { fragment: "error InvalidDecimals(uint8 decimals)", contracts: ["SimplePSMV2"] },
20122
+ { fragment: "error InvalidExchangeRate()", contracts: ["SimplePSMV2"] },
20123
+ { fragment: "error InvalidImpl()", contracts: ["LoanOperationsManagerModule", "BTCSpendAuthorizer"] },
20124
+ { fragment: "error InvalidImplementation()", contracts: ["UCDController"] },
20125
+ { fragment: "error InvalidInitialization()", contracts: ["PositionManager", "LoanOperationsManagerModule", "OperationAuthorizationRegistry", "CollateralManagerModule", "BTCSpendAuthorizer", "UCDController", "SimplePSMV2"] },
20126
+ { fragment: "error InvalidLitSignature()", contracts: ["BTCSpendAuthorizer"] },
20127
+ { fragment: "error InvalidLoanOps()", contracts: ["BTCSpendAuthorizer"] },
20128
+ { fragment: "error InvalidModuleAddress()", contracts: ["UCDController"] },
20129
+ { fragment: "error InvalidNetwork()", contracts: ["PositionManager", "PositionManagerErrors"] },
20130
+ { fragment: "error InvalidNetworkMode()", contracts: ["PositionManagerErrors"] },
20131
+ { fragment: "error InvalidOracleConfig()", contracts: ["LoanOperationsManagerModule"] },
20132
+ { fragment: "error InvalidPKPId()", contracts: ["PositionManagerErrors"] },
20133
+ { fragment: "error InvalidParameter()", contracts: ["UCDController"] },
20134
+ { fragment: "error InvalidPkpPublicKey()", contracts: ["PositionManager", "PositionManagerErrors"] },
20135
+ { fragment: "error InvalidPosMgr()", contracts: ["LoanOperationsManagerModule"] },
20136
+ { fragment: "error InvalidPositionId()", contracts: ["PositionManager", "PositionManagerErrors", "LoanOperationsValidation", "LoanOperationsManagerModule", "CollateralManagerModule"] },
20137
+ { fragment: "error InvalidPositionState()", contracts: ["LoanOperationsManagerModule"] },
20138
+ { fragment: "error InvalidPriceFeed()", contracts: ["LoanOperationsManagerModule"] },
20139
+ { fragment: "error InvalidRecipient()", contracts: ["LoanOperationsManagerModule", "SimplePSMV2"] },
20140
+ { fragment: "error InvalidRegistry()", contracts: ["LoanOperationsManagerModule"] },
20141
+ { fragment: "error InvalidRequestedExpiryDate()", contracts: ["PositionManagerErrors"] },
20142
+ { fragment: "error InvalidSignature(string reason)", contracts: ["PositionManager"] },
20143
+ { fragment: "error InvalidSignatureLength()", contracts: ["PositionManagerErrors"] },
20144
+ { fragment: "error InvalidStablecoinAddress()", contracts: ["SimplePSMV2"] },
20145
+ { fragment: "error InvalidStaleSpendAttestation()", contracts: ["BTCSpendAuthorizer"] },
20146
+ { fragment: "error InvalidString(string value)", contracts: ["PositionManager"] },
20147
+ { fragment: "error InvalidTerm()", contracts: ["PositionManager", "PositionManagerErrors"] },
20148
+ { fragment: "error InvalidTerm(uint256 term, uint256 min, uint256 max)", contracts: ["PositionManager"] },
20149
+ { fragment: "error InvalidTermMgr()", contracts: ["LoanOperationsManagerModule"] },
20150
+ { fragment: "error InvalidTermStartTime()", contracts: ["PositionManagerErrors"] },
20151
+ { fragment: "error InvalidToken()", contracts: ["SimplePSMV2"] },
20152
+ { fragment: "error InvalidUCDCtrl()", contracts: ["LoanOperationsManagerModule"] },
20153
+ { fragment: "error InvalidUCDDecimals(uint8 decimals)", contracts: ["SimplePSMV2"] },
20154
+ { fragment: "error InvalidUCDToken()", contracts: ["LoanOperationsManagerModule"] },
20155
+ { fragment: "error InvalidValidatorAddress()", contracts: ["BTCSpendAuthorizer"] },
20156
+ { fragment: "error InvalidValidatorSignature()", contracts: ["PositionManagerErrors"] },
20157
+ { fragment: "error InvalidVaultAddress()", contracts: ["PositionManagerErrors"] },
20158
+ { fragment: "error InvalidVolumeCap(bool isRedeem)", contracts: ["SimplePSMV2"] },
20159
+ { fragment: "error InvalidWithdrawalAddress()", contracts: ["CollateralManagerModule"] },
20160
+ { fragment: "error InvalidWithdrawalLoanStatusType()", contracts: ["CollateralManagerModule"] },
20161
+ { fragment: "error LiquidationsPaused()", contracts: ["PositionManager", "PositionManagerErrors"] },
20162
+ { fragment: "error LoanAmountTooHigh()", contracts: ["PositionManagerErrors"] },
20163
+ { fragment: "error LoanAmountTooLow()", contracts: ["PositionManagerErrors"] },
20164
+ { fragment: "error MaxAuthorizedSpendsReached()", contracts: ["BTCSpendAuthorizer"] },
20165
+ { fragment: "error MaxLoanOutOfBounds()", contracts: ["LoanOperationsManagerModule"] },
20166
+ { fragment: "error MaxRedeemBelowMin(uint256 maximum, uint256 minimum)", contracts: ["SimplePSMV2"] },
20167
+ { fragment: "error MaxRedeemCapDisabled()", contracts: ["SimplePSMV2"] },
20168
+ { fragment: "error MaxSupplyExceeded()", contracts: ["UCDController"] },
20169
+ { fragment: "error MaxSwapBelowMin(uint256 maximum, uint256 minimum)", contracts: ["SimplePSMV2"] },
20170
+ { fragment: "error MaxSwapCapDisabled()", contracts: ["SimplePSMV2"] },
20171
+ { fragment: "error MinLoanOutOfBounds()", contracts: ["LoanOperationsManagerModule"] },
20172
+ { fragment: "error MintBorrowerMismatch()", contracts: ["LoanOperationsManagerModule"] },
20173
+ { fragment: "error MintCallFailed()", contracts: ["UCDController"] },
20174
+ { fragment: "error MintFailed()", contracts: ["LoanOperationsManagerModule"] },
20175
+ { fragment: "error MintGuardFailed(uint8 code)", contracts: ["UCDController"] },
20176
+ { fragment: "error MintVerificationFailed()", contracts: ["PositionManager", "PositionManagerErrors"] },
20177
+ { fragment: "error MintVerificationMismatch(uint256 expectedSupply, uint256 currentSupply)", contracts: ["PositionManager", "PositionManagerErrors"] },
20178
+ { fragment: "error MissingVERSION()", contracts: ["LoanOperationsManagerModule", "BTCSpendAuthorizer", "UCDController"] },
20179
+ { fragment: "error MissingVersion()", contracts: ["PositionManagerErrors", "CollateralManagerModule"] },
20180
+ { fragment: "error ModuleCallFailed()", contracts: ["PositionManager", "PositionManagerErrors"] },
20181
+ { fragment: "error NoFeesToTransfer()", contracts: ["SimplePSMV2"] },
20182
+ { fragment: "error NoRegistry()", contracts: ["PositionManager", "PositionManagerErrors"] },
20183
+ { fragment: "error NoVersion()", contracts: ["LoanOperationsManagerModule", "BTCSpendAuthorizer", "UCDController"] },
20184
+ { fragment: "error NonZeroReserves(address stablecoin, uint256 reserves)", contracts: ["SimplePSMV2"] },
20185
+ { fragment: "error NormalizationOverflow()", contracts: ["SimplePSMV2"] },
20186
+ { fragment: "error NotAdminModule()", contracts: ["PositionManager", "PositionManagerErrors", "LoanOperationsManagerModule", "OperationAuthorizationRegistry", "CollateralManagerModule", "BTCSpendAuthorizer", "UCDController", "SimplePSMV2"] },
20187
+ { fragment: "error NotAuthorized()", contracts: ["PositionManager", "PositionManagerErrors"] },
20188
+ { fragment: "error NotAuthorizedConsumer()", contracts: ["OperationAuthorizationRegistry"] },
20189
+ { fragment: "error NotAuthorizedSigner()", contracts: ["OperationAuthorizationRegistry"] },
20190
+ { fragment: "error NotBorrower()", contracts: ["PositionManager", "PositionManagerErrors", "LoanOperationsManagerModule"] },
20191
+ { fragment: "error NotContract()", contracts: ["PositionManagerErrors", "LoanOperationsManagerModule", "OperationAuthorizationRegistry", "CollateralManagerModule", "BTCSpendAuthorizer", "SimplePSMV2"] },
20192
+ { fragment: "error NotInitializing()", contracts: ["PositionManager", "LoanOperationsManagerModule", "OperationAuthorizationRegistry", "CollateralManagerModule", "BTCSpendAuthorizer", "UCDController", "SimplePSMV2"] },
20193
+ { fragment: "error NotLiquidationPkpOwner()", contracts: ["PositionManager", "PositionManagerErrors"] },
20194
+ { fragment: "error NotLiquidator()", contracts: ["PositionManager", "PositionManagerErrors"] },
20195
+ { fragment: "error NotOwner()", contracts: ["OperationAuthorizationRegistry"] },
20196
+ { fragment: "error NotPendingOwner()", contracts: ["OperationAuthorizationRegistry"] },
20197
+ { fragment: "error NotProductionAuthorizer()", contracts: ["PositionManagerErrors", "LoanOperationsManagerModule"] },
20198
+ { fragment: "error NotProductionRegistry()", contracts: ["PositionManager", "PositionManagerErrors", "LoanOperationsManagerModule"] },
20199
+ { fragment: "error OnlyCore()", contracts: ["CollateralManagerModule"] },
20200
+ { fragment: "error OnlyLoanOps()", contracts: ["BTCSpendAuthorizer"] },
20201
+ { fragment: "error OnlyPosMgr()", contracts: ["LoanOperationsManagerModule"] },
20202
+ { fragment: "error OnlyPositionManager()", contracts: ["LoanOperationsManagerModule"] },
20203
+ { fragment: "error OperationInProgress()", contracts: ["PositionManager", "PositionManagerErrors"] },
20204
+ { fragment: "error OracleDecimalMismatch()", contracts: ["LoanOperationsManagerModule"] },
20205
+ { fragment: "error PKPAlreadyUsed()", contracts: ["PositionManagerErrors"] },
20206
+ { fragment: "error PaymentAmountTooLarge()", contracts: ["PositionManager", "PositionManagerErrors"] },
20207
+ { fragment: "error PaymentAmountZero()", contracts: ["PositionManager", "PositionManagerErrors"] },
20208
+ { fragment: "error PaymentMustBeLessThanDebt()", contracts: ["LoanOperationsManagerModule"] },
20209
+ { fragment: "error PaymentMustBePositive()", contracts: ["LoanOperationsManagerModule"] },
20210
+ { fragment: "error PositionAlreadyExists()", contracts: ["PositionManager", "PositionManagerErrors"] },
20211
+ { fragment: "error PositionDoesNotExist()", contracts: ["CollateralManagerModule"] },
20212
+ { fragment: "error PositionLiquidatable()", contracts: ["PositionManagerErrors"] },
20213
+ { fragment: "error PositionManagerNotContract()", contracts: ["LoanOperationsValidation"] },
20214
+ { fragment: "error PositionManagerNotSet()", contracts: ["LoanOperationsValidation"] },
20215
+ { fragment: "error PositionNotActive()", contracts: ["PositionManager", "PositionManagerErrors"] },
20216
+ { fragment: "error PositionNotEligible()", contracts: ["LoanOperationsManagerModule"] },
20217
+ { fragment: "error PositionNotEligibleForOperation()", contracts: ["PositionManager", "PositionManagerErrors"] },
20218
+ { fragment: "error PositionNotFound()", contracts: ["PositionManager", "PositionManagerErrors", "LoanOperationsManagerModule"] },
20219
+ { fragment: "error PositionNotInCore()", contracts: ["LoanOperationsValidation"] },
20220
+ { fragment: "error PositionStatusInvalid()", contracts: ["PositionManager", "PositionManagerErrors", "LoanOperationsManagerModule"] },
20221
+ { fragment: "error PositionWouldBecomeLiquidatable()", contracts: ["PositionManagerErrors"] },
20222
+ { fragment: "error ProposalAlreadyExecuted()", contracts: ["OperationAuthorizationRegistry"] },
20223
+ { fragment: "error ProposalAlreadyExists()", contracts: ["OperationAuthorizationRegistry"] },
20224
+ { fragment: "error ProposalCancelled()", contracts: ["OperationAuthorizationRegistry"] },
20225
+ { fragment: "error ProposalNotFound()", contracts: ["OperationAuthorizationRegistry"] },
20226
+ { fragment: "error PsmBurnSupplyMismatch(uint256 expected, uint256 actual)", contracts: ["SimplePSMV2"] },
20227
+ { fragment: "error PsmMintSupplyMismatch(uint256 expected, uint256 actual)", contracts: ["SimplePSMV2"] },
20228
+ { fragment: "error QuantumAlreadyUsed()", contracts: ["OperationAuthorizationRegistry"] },
20229
+ { fragment: "error QuantumOutsideWindow()", contracts: ["OperationAuthorizationRegistry"] },
20230
+ { fragment: "error RateLimitExceeded()", contracts: ["SimplePSMV2"] },
20231
+ { fragment: "error RatioOverflow()", contracts: ["PositionManager", "LoanOperationsManagerModule", "CollateralManagerModule"] },
20232
+ { fragment: "error RecipientNotAllowed()", contracts: ["LoanOperationsManagerModule", "SimplePSMV2"] },
20233
+ { fragment: "error RedeemVolumeExceededThisBlock(address stablecoin, uint256 attempted, uint256 cap)", contracts: ["SimplePSMV2"] },
20234
+ { fragment: "error RedemptionsPaused()", contracts: ["SimplePSMV2"] },
20235
+ { fragment: "error ReentrancyGuardReentrantCall()", contracts: ["PositionManager", "LoanOperationsManagerModule", "CollateralManagerModule", "BTCSpendAuthorizer", "UCDController", "SimplePSMV2"] },
20236
+ { fragment: "error RegistryNotSet()", contracts: ["LoanOperationsManagerModule", "SimplePSMV2"] },
20237
+ { fragment: "error ReserveOverflow()", contracts: ["SimplePSMV2"] },
20238
+ { fragment: "error ReserveTooLarge()", contracts: ["SimplePSMV2"] },
20239
+ { fragment: "error ReserveUnderflow()", contracts: ["SimplePSMV2"] },
20240
+ { fragment: "error SafeERC20FailedOperation(address token)", contracts: ["PositionManager", "LoanOperationsManagerModule", "SimplePSMV2"] },
20241
+ { fragment: "error SameBlockInteraction()", contracts: ["PositionManager", "PositionManagerErrors"] },
20242
+ { fragment: "error SameImpl()", contracts: ["LoanOperationsManagerModule", "BTCSpendAuthorizer"] },
20243
+ { fragment: "error SameImplementation()", contracts: ["PositionManagerErrors", "CollateralManagerModule"] },
20244
+ { fragment: "error SignatureVerificationFailed(bytes4 selector, address recovered, address expected, bytes32 messageHash, uint8 errorCode)", contracts: ["OperationAuthorizationRegistry"] },
20245
+ { fragment: "error SlippageExceeded(uint256 got, uint256 minimum)", contracts: ["SimplePSMV2"] },
20246
+ { fragment: "error SlippageProtectionRequired()", contracts: ["SimplePSMV2"] },
20247
+ { fragment: "error StablecoinAlreadySupported(address stablecoin)", contracts: ["SimplePSMV2"] },
20248
+ { fragment: "error StablecoinNotContract(address stablecoin)", contracts: ["SimplePSMV2"] },
20249
+ { fragment: "error StablecoinNotSupported(address stablecoin)", contracts: ["SimplePSMV2"] },
20250
+ { fragment: "error StablecoinNotSupportedInV1(address stablecoin)", contracts: ["SimplePSMV2"] },
20251
+ { fragment: "error StaleAttestationMismatch()", contracts: ["BTCSpendAuthorizer"] },
20252
+ { fragment: "error StaleAttestationTooOld()", contracts: ["BTCSpendAuthorizer"] },
20253
+ { fragment: "error StaleSpendValidatorNotSet()", contracts: ["BTCSpendAuthorizer"] },
20254
+ { fragment: "error StateHashMismatch()", contracts: ["LoanOperationsValidation", "LoanOperationsManagerModule", "CollateralManagerModule"] },
20255
+ { fragment: "error SwapVolumeExceededThisBlock(address stablecoin, uint256 attempted, uint256 cap)", contracts: ["SimplePSMV2"] },
20256
+ { fragment: "error SyncDriftTooLarge()", contracts: ["SimplePSMV2"] },
20257
+ { fragment: "error TargetAddrRequired()", contracts: ["BTCSpendAuthorizer"] },
20258
+ { fragment: "error TargetExceedsInputValue()", contracts: ["BTCSpendAuthorizer"] },
20259
+ { fragment: "error TargetMustBePositive()", contracts: ["BTCSpendAuthorizer"] },
20260
+ { fragment: "error TermAlreadyExists()", contracts: ["PositionManagerErrors"] },
20261
+ { fragment: "error TermExceedsMaximum()", contracts: ["PositionManager", "PositionManagerErrors"] },
20262
+ { fragment: "error TermNotFound()", contracts: ["PositionManagerErrors"] },
20263
+ { fragment: "error ThresholdTooHigh()", contracts: ["LoanOperationsManagerModule"] },
20264
+ { fragment: "error TimelockNotMet()", contracts: ["OperationAuthorizationRegistry"] },
20265
+ { fragment: "error TimelockRequiredOnThisChain()", contracts: ["OperationAuthorizationRegistry"] },
20266
+ { fragment: "error TimestampOverflow()", contracts: ["LoanOperationsManagerModule"] },
20267
+ { fragment: "error TooManySigners()", contracts: ["OperationAuthorizationRegistry"] },
20268
+ { fragment: "error UTXOAlreadyAuthorized()", contracts: ["BTCSpendAuthorizer"] },
20269
+ { fragment: "error UTXONotAuthorized()", contracts: ["BTCSpendAuthorizer"] },
20270
+ { fragment: "error UUPSUnauthorizedCallContext()", contracts: ["PositionManager", "LoanOperationsManagerModule", "OperationAuthorizationRegistry", "CollateralManagerModule", "BTCSpendAuthorizer", "UCDController", "SimplePSMV2"] },
20271
+ { fragment: "error UUPSUnsupportedProxiableUUID(bytes32 slot)", contracts: ["PositionManager", "LoanOperationsManagerModule", "OperationAuthorizationRegistry", "CollateralManagerModule", "BTCSpendAuthorizer", "UCDController", "SimplePSMV2"] },
20272
+ { fragment: "error UcdAmountTooLarge()", contracts: ["PositionManager", "LoanOperationsManagerModule", "CollateralManagerModule"] },
20273
+ { fragment: "error Unauthorized()", contracts: ["UCDController"] },
20274
+ { fragment: "error UnexpectedRoleGrantFailure()", contracts: ["PositionManager", "PositionManagerErrors", "LoanOperationsManagerModule", "CollateralManagerModule", "BTCSpendAuthorizer", "UCDController", "SimplePSMV2"] },
20275
+ { fragment: "error UnsupportedFeeToken(address token)", contracts: ["SimplePSMV2"] },
20276
+ { fragment: "error UserDailyMintLimitExceeded()", contracts: ["LoanOperationsManagerModule"] },
20277
+ { fragment: "error V2AlreadyInitialized()", contracts: ["SimplePSMV2"] },
20278
+ { fragment: "error ValidationFailed()", contracts: ["PositionManager", "PositionManagerErrors"] },
20279
+ { fragment: "error ValidatorNotActive()", contracts: ["OperationAuthorizationRegistry"] },
20280
+ { fragment: "error WithdrawalAddressNotApproved()", contracts: ["CollateralManagerModule"] },
20281
+ { fragment: "error WithdrawalExceedsReserves(uint256 amount, uint256 reserves)", contracts: ["SimplePSMV2"] },
20282
+ { fragment: "error ZeroAddress()", contracts: ["PositionManager", "UCDController"] },
20283
+ { fragment: "error ZeroAmount()", contracts: ["UCDController"] }
20284
+ ];
20285
+
20286
+ // src/utils/contract-error-decoder.ts
20287
+ var TABLE = null;
20288
+ function contractErrorTable() {
20289
+ if (TABLE)
20290
+ return TABLE;
20291
+ const table = /* @__PURE__ */ new Map();
20292
+ const iface = new import_ethers21.Interface(CONTRACT_ERROR_FRAGMENTS.map((e) => e.fragment));
20293
+ const contractsByName = new Map(
20294
+ CONTRACT_ERROR_FRAGMENTS.map((e) => [e.fragment.slice("error ".length, e.fragment.indexOf("(")), e.contracts])
20295
+ );
20296
+ iface.forEachError((fragment) => {
20297
+ const existing = table.get(fragment.selector);
20298
+ const contracts = contractsByName.get(fragment.name) ?? [];
20299
+ if (existing) {
20300
+ for (const c of contracts)
20301
+ if (!existing.contracts.includes(c))
20302
+ existing.contracts.push(c);
20303
+ return;
20304
+ }
20305
+ table.set(fragment.selector, {
20306
+ signature: fragment.format("sighash"),
20307
+ fragment,
20308
+ contracts: [...contracts]
20309
+ });
20310
+ });
20311
+ TABLE = table;
20312
+ return table;
20313
+ }
20314
+ function lookupContractError(selector) {
20315
+ return contractErrorTable().get(selector.toLowerCase()) ?? null;
20316
+ }
20317
+ function extractErrorData(error) {
20318
+ const viaQuantum = decodeQuantumRevert(error).data;
20319
+ if (viaQuantum && viaQuantum.length >= 10)
20320
+ return viaQuantum;
20321
+ const candidates = [
20322
+ error?.error?.error?.error?.data,
20323
+ error?.error?.error?.data,
20324
+ error?.data?.data,
20325
+ error?.transaction?.data
20326
+ ];
20327
+ for (const data of candidates) {
20328
+ if (typeof data === "string" && data.startsWith("0x") && data.length >= 10)
20329
+ return data;
20330
+ }
20331
+ const body = typeof error?.body === "string" ? error.body : null;
20332
+ if (body) {
20333
+ try {
20334
+ const parsed = JSON.parse(body);
20335
+ const data = parsed?.error?.data;
20336
+ if (typeof data === "string" && data.startsWith("0x") && data.length >= 10)
20337
+ return data;
20338
+ } catch {
20339
+ }
20340
+ }
20341
+ return null;
20342
+ }
20343
+ function extractRevertString(error) {
20344
+ if (typeof error?.reason === "string" && error.reason.length > 0)
20345
+ return error.reason;
20346
+ const message = typeof error?.message === "string" ? error.message : null;
20347
+ if (!message)
20348
+ return null;
20349
+ const withReasonString = message.match(/reverted with reason string ['"](.+?)['"]/);
20350
+ if (withReasonString)
20351
+ return withReasonString[1];
20352
+ const withReason = message.match(/reason: ['"](.+?)['"]/);
20353
+ return withReason ? withReason[1] : null;
20354
+ }
20355
+ function renderArgs(args) {
20356
+ return args.map((arg) => typeof arg === "object" && arg !== null ? JSON.stringify(arg) : String(arg)).join(", ");
20357
+ }
20358
+ function decodeContractError(error) {
20359
+ const errorData = extractErrorData(error);
20360
+ if (!errorData) {
20361
+ const revertString2 = extractRevertString(error);
20362
+ if (revertString2 && !revertString2.includes("cannot estimate gas")) {
20363
+ return {
20364
+ name: "RevertString",
20365
+ selector: "0x00000000",
20366
+ args: [revertString2],
20367
+ contract: "Unknown",
20368
+ message: `Revert: ${revertString2}`
20369
+ };
20370
+ }
20371
+ return null;
20372
+ }
20373
+ const selector = errorData.slice(0, 10).toLowerCase();
20374
+ if (selector === ERROR_STRING_SELECTOR || selector === PANIC_SELECTOR) {
20375
+ const { name } = decodeQuantumRevert(error);
20376
+ if (name) {
20377
+ return { name, selector, args: [], contract: "Solidity", message: name };
20378
+ }
20379
+ }
20380
+ const entry = lookupContractError(selector);
20381
+ if (entry) {
20382
+ const contract = entry.contracts.join(" | ");
20383
+ let args = [];
20384
+ try {
20385
+ const decoded = new import_ethers21.Interface([entry.fragment]).decodeErrorResult(entry.fragment, errorData);
20386
+ args = Array.from(decoded);
20387
+ } catch {
20388
+ args = [];
20389
+ }
20390
+ return {
20391
+ name: entry.fragment.name,
20392
+ selector,
20393
+ args,
20394
+ contract,
20395
+ message: `${contract}.${entry.fragment.name}(${renderArgs(args)})`
20396
+ };
20397
+ }
20398
+ const revertString = extractRevertString(error);
20399
+ if (revertString && !revertString.includes("cannot estimate gas")) {
20400
+ return {
20401
+ name: "RevertString",
20402
+ selector,
20403
+ args: [revertString],
20404
+ contract: "Unknown",
20405
+ message: `Revert: ${revertString}`
20406
+ };
20407
+ }
20408
+ return {
20409
+ name: "UnknownError",
20410
+ selector,
20411
+ args: [],
20412
+ contract: "Unknown",
20413
+ message: `Unknown error (selector: ${selector})`
20414
+ };
20415
+ }
20416
+ function formatDecodedError(decoded) {
20417
+ if (decoded.args && decoded.args.length > 0) {
20418
+ return `${decoded.contract}.${decoded.name}(${renderArgs(decoded.args)})`;
20419
+ }
20420
+ return `${decoded.contract}.${decoded.name}()`;
20421
+ }
20422
+
20041
20423
  // src/utils/ethers-interop.utils.ts
20042
20424
  function normalizeBigNumberish(value) {
20043
20425
  if (value === null || value === void 0) {
@@ -20563,7 +20945,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
20563
20945
  */
20564
20946
  constructor(config) {
20565
20947
  if (!config.provider && config.ethRpcUrl) {
20566
- config.provider = new import_ethers21.JsonRpcProvider(config.ethRpcUrl);
20948
+ config.provider = new import_ethers22.JsonRpcProvider(config.ethRpcUrl);
20567
20949
  }
20568
20950
  this.config = config;
20569
20951
  if (config.debug) {
@@ -20855,7 +21237,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
20855
21237
  const network = await config.provider.getNetwork();
20856
21238
  chainId = Number(network.chainId);
20857
21239
  } else if (config.ethRpcUrl) {
20858
- const tempProvider = new import_ethers21.JsonRpcProvider(
21240
+ const tempProvider = new import_ethers22.JsonRpcProvider(
20859
21241
  config.ethRpcUrl
20860
21242
  );
20861
21243
  const network = await tempProvider.getNetwork();
@@ -21391,7 +21773,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
21391
21773
  }
21392
21774
  const loanOps = this.loanOps();
21393
21775
  const protocolConfig = await loanOps.getProtocolConfig();
21394
- const requestAmountWei = (0, import_ethers21.parseEther)(
21776
+ const requestAmountWei = (0, import_ethers22.parseEther)(
21395
21777
  request.amount.toString()
21396
21778
  );
21397
21779
  const minLoanValueWei = BigInt(protocolConfig.minimumLoanValueWei);
@@ -21484,12 +21866,12 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
21484
21866
  );
21485
21867
  return {
21486
21868
  success: false,
21487
- error: `Amount ${request.amount} UCD plus the ${positionTerm.originationFeeBps / 100}% origination fee (${(0, import_ethers21.formatEther)(baseFeeWei)} UCD) would take this loan's debt to ${(0, import_ethers21.formatEther)(debtAfterWei)} UCD, above the protocol maximum of ${(0, import_ethers21.formatEther)(maxLoanValueWei)} UCD. The largest amount you can mint now is ${maxPrincipalUcd} UCD.`
21869
+ error: `Amount ${request.amount} UCD plus the ${positionTerm.originationFeeBps / 100}% origination fee (${(0, import_ethers22.formatEther)(baseFeeWei)} UCD) would take this loan's debt to ${(0, import_ethers22.formatEther)(debtAfterWei)} UCD, above the protocol maximum of ${(0, import_ethers22.formatEther)(maxLoanValueWei)} UCD. The largest amount you can mint now is ${maxPrincipalUcd} UCD.`
21488
21870
  };
21489
21871
  }
21490
21872
  if (this.config.debug) {
21491
21873
  log.info(
21492
- `\u2705 Fee-inclusive loan cap check passed: ${(0, import_ethers21.formatEther)(currentDebtWei + requestAmountWei + baseFeeWei)} UCD <= ${(0, import_ethers21.formatEther)(maxLoanValueWei)} UCD`,
21874
+ `\u2705 Fee-inclusive loan cap check passed: ${(0, import_ethers22.formatEther)(currentDebtWei + requestAmountWei + baseFeeWei)} UCD <= ${(0, import_ethers22.formatEther)(maxLoanValueWei)} UCD`,
21493
21875
  {}
21494
21876
  );
21495
21877
  }
@@ -21520,7 +21902,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
21520
21902
  pkpNftAddress,
21521
21903
  this.getChipotlePublicKeyFallback()
21522
21904
  );
21523
- pkpEthAddress = (0, import_ethers21.computeAddress)(pkpPublicKey);
21905
+ pkpEthAddress = (0, import_ethers22.computeAddress)(pkpPublicKey);
21524
21906
  pkpCache.set(request.positionId, {
21525
21907
  publicKey: pkpPublicKey,
21526
21908
  ethAddress: pkpEthAddress,
@@ -21863,8 +22245,8 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
21863
22245
  throw new Error(`Position not found: ${request.positionId}`);
21864
22246
  }
21865
22247
  const currentDebt = position.ucdDebt.toString();
21866
- const ucdDebtHash = (0, import_ethers21.keccak256)(import_ethers21.AbiCoder.defaultAbiCoder().encode(["uint256"], [currentDebt]));
21867
- const contractHash = (0, import_ethers21.keccak256)(import_ethers21.AbiCoder.defaultAbiCoder().encode(
22248
+ const ucdDebtHash = (0, import_ethers22.keccak256)(import_ethers22.AbiCoder.defaultAbiCoder().encode(["uint256"], [currentDebt]));
22249
+ const contractHash = (0, import_ethers22.keccak256)(import_ethers22.AbiCoder.defaultAbiCoder().encode(
21868
22250
  ["address", "address", "address", "address"],
21869
22251
  [
21870
22252
  positionManagerAddress,
@@ -21933,7 +22315,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
21933
22315
  const coreAbi = [
21934
22316
  "function getPositionDetails(bytes32) view returns (tuple(bytes32 positionId, bytes32 pkpId, uint256 ucdDebt, string vaultAddress, address borrower, uint40 createdAt, uint40 lastUpdated, uint16 selectedTerm, uint40 expiryAt, uint8 status, uint40 previousExpiryAt, uint16 totalTerm))"
21935
22317
  ];
21936
- const positionCore = new import_ethers21.Contract(
22318
+ const positionCore = new import_ethers22.Contract(
21937
22319
  coreAddress,
21938
22320
  coreAbi,
21939
22321
  this.getSignerOrThrow().provider
@@ -21941,8 +22323,8 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
21941
22323
  const currentPosition = await positionCore["getPositionDetails"](
21942
22324
  positionIdBytes32
21943
22325
  );
21944
- const currentDebtHash = (0, import_ethers21.keccak256)(
21945
- import_ethers21.AbiCoder.defaultAbiCoder().encode(
22326
+ const currentDebtHash = (0, import_ethers22.keccak256)(
22327
+ import_ethers22.AbiCoder.defaultAbiCoder().encode(
21946
22328
  ["uint256"],
21947
22329
  [currentPosition.ucdDebt]
21948
22330
  )
@@ -21989,7 +22371,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
21989
22371
  "function getCurrentQuantum() view returns (uint256)",
21990
22372
  "function isQuantumValid(bytes32,uint256) view returns (bool)"
21991
22373
  ];
21992
- const registry = new import_ethers21.Contract(
22374
+ const registry = new import_ethers22.Contract(
21993
22375
  registryAddress,
21994
22376
  registryAbi,
21995
22377
  this.getSignerOrThrow().provider
@@ -22105,7 +22487,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
22105
22487
  });
22106
22488
  }
22107
22489
  const signatureHexMint = finalSignature.startsWith("0x") ? finalSignature : "0x" + finalSignature;
22108
- const mintIface = new import_ethers21.Interface(positionManagerAbi);
22490
+ const mintIface = new import_ethers22.Interface(positionManagerAbi);
22109
22491
  const mintCalldata = mintIface.encodeFunctionData("mintUCD", [
22110
22492
  positionIdBytes32,
22111
22493
  validationResponse.mintAmount,
@@ -22141,7 +22523,7 @@ var DiamondHandsSDK = class _DiamondHandsSDK {
22141
22523
  if (viewsAddress) {
22142
22524
  let diagnosis = null;
22143
22525
  try {
22144
- const views = new import_ethers21.Contract(
22526
+ const views = new import_ethers22.Contract(
22145
22527
  viewsAddress,
22146
22528
  [
22147
22529
  "function diagnoseMintUCD(bytes32,uint256,uint256,uint256,uint256,uint256,bytes32,bytes32,bytes32,uint256,bytes) view returns (string)"
@@ -22199,7 +22581,7 @@ MintGuardFailed(${guardCode}): ${guardMeaning}
22199
22581
  Lit mintAmount: ${validationResponse.mintAmount}
22200
22582
  Lit mintFee: ${validationResponse.mintFee}
22201
22583
  Lit newDebt: ${validationResponse.newDebt}
22202
- Protocol maximum: ${(0, import_ethers21.formatEther)(maxLoanValueWei)} UCD (fee-inclusive)`;
22584
+ Protocol maximum: ${(0, import_ethers22.formatEther)(maxLoanValueWei)} UCD (fee-inclusive)`;
22203
22585
  }
22204
22586
  const mintDebtDiagnostics = selector === "0xb9d419a7" || // DebtUpdateVerificationFailed()
22205
22587
  selector === "0xc7e20553" || // DebtUpdateVerificationFailedDetailed(...)
@@ -22218,7 +22600,6 @@ Mint/debt diagnostics (LoanOperationsManager mint path \u2192 increaseDebtFromMi
22218
22600
  let quantumContext = "";
22219
22601
  if (selector === "0x131d9a21" || // QuantumExpired()
22220
22602
  selector === "0x52ce5d58" || // QuantumAlreadyUsed()
22221
- selector === "0x137f3b70" || // InDeadZone()
22222
22603
  selector === "0xbe4b82c1" || // DeadZoneViolation()
22223
22604
  selector === "0x3e76a3c9") {
22224
22605
  const nowSecs = Math.floor(Date.now() / 1e3);
@@ -22271,7 +22652,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
22271
22652
  if (receipt.logs && receipt.logs.length > 0) {
22272
22653
  for (const receiptLog of receipt.logs) {
22273
22654
  if (receiptLog.topics && receiptLog.topics[0] === "0x08c379a0") {
22274
- const iface = new import_ethers21.Interface([
22655
+ const iface = new import_ethers22.Interface([
22275
22656
  "error Error(string)"
22276
22657
  ]);
22277
22658
  const decoded = iface.decodeErrorResult("Error", receiptLog.data);
@@ -22288,7 +22669,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
22288
22669
  const minimalAbi = [
22289
22670
  "event UCDMintedWithAuthorization(bytes32 indexed positionId, address indexed borrower, uint256 mintAmount, uint256 mintFee, uint256 newDebt, uint256 newCollateral, uint256 btcPrice, uint256 quantumTimestamp, bytes32 authorizedSpendsHash)"
22290
22671
  ];
22291
- const iface = new import_ethers21.Interface(minimalAbi);
22672
+ const iface = new import_ethers22.Interface(minimalAbi);
22292
22673
  for (const receiptLog of receipt.logs) {
22293
22674
  const parsed = (() => {
22294
22675
  const logIface = iface;
@@ -22341,33 +22722,14 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
22341
22722
  return result;
22342
22723
  } catch (error) {
22343
22724
  let customErrorDetails = "";
22344
- const errorData = error?.data || error?.error?.data?.data || error?.error?.data;
22345
- if (errorData && typeof errorData === "string" && errorData.startsWith("0x") && errorData.length > 10) {
22346
- const selector = errorData.slice(0, 10);
22347
- const knownErrors = {
22348
- "0x8baa579f": "InvalidSignature()",
22349
- "0xd92e233d": "ValidationFailed()",
22350
- "0x3ee5aeb5": "OperationNotAuthorized()",
22351
- "0x70f4b32a": "UnauthorizedSigner()",
22352
- "0x48f5c3ed": "Unauthorized()",
22353
- "0x36bfdeea": "StateHashMismatch()",
22354
- "0xb9d419a7": "DebtUpdateVerificationFailed()",
22355
- "0xc7e20553": "DebtUpdateVerificationFailedDetailed(bytes32,uint256,uint256,uint256,uint256,uint256)",
22356
- "0x0cfd2a97": "MintVerificationMismatch(uint256,uint256)",
22357
- "0x07637bd8": "MintFailed()",
22358
- "0x131d9a21": "QuantumExpired() - Signature quantum window has closed",
22359
- "0x52ce5d58": "QuantumAlreadyUsed() - This quantum was already used for this position",
22360
- "0x137f3b70": "InDeadZone() - Timestamp in dead zone (near quantum boundary)",
22361
- "0xbe4b82c1": "DeadZoneViolation() - Non-current-quantum signature mined in the last 8s of the current quantum",
22362
- "0x3e76a3c9": "QuantumOutsideWindow() - Timestamp not in past/current/next quantum window"
22363
- };
22364
- const errorName = knownErrors[selector] || `Unknown error ${selector}`;
22365
- customErrorDetails = ` [${errorName}]`;
22725
+ const decoded = decodeContractError(error);
22726
+ if (decoded) {
22727
+ customErrorDetails = ` [${formatDecodedError(decoded)}]`;
22366
22728
  if (this.config.debug) {
22367
22729
  log.error("Custom error decoded from transaction receipt", {
22368
- selector,
22369
- errorName,
22370
- errorData
22730
+ selector: decoded.selector,
22731
+ errorName: decoded.name,
22732
+ contract: decoded.contract
22371
22733
  });
22372
22734
  }
22373
22735
  }
@@ -22475,7 +22837,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
22475
22837
  pkpNftAddress,
22476
22838
  this.getChipotlePublicKeyFallback()
22477
22839
  );
22478
- const pkpEthAddress = (0, import_ethers21.computeAddress)(pkpPublicKey);
22840
+ const pkpEthAddress = (0, import_ethers22.computeAddress)(pkpPublicKey);
22479
22841
  pkpData = {
22480
22842
  publicKey: pkpPublicKey,
22481
22843
  ethAddress: pkpEthAddress,
@@ -22877,7 +23239,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
22877
23239
  }
22878
23240
  const loanOpsForUcd = loanOpsForUcdResult.value;
22879
23241
  const ucdTokenAddress = await loanOpsForUcd.ucdToken();
22880
- const ucdToken = new import_ethers21.Contract(
23242
+ const ucdToken = new import_ethers22.Contract(
22881
23243
  ucdTokenAddress,
22882
23244
  [
22883
23245
  "function balanceOf(address) view returns (uint256)",
@@ -22893,9 +23255,9 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
22893
23255
  if (ucdBalance < debtWei) {
22894
23256
  return {
22895
23257
  success: false,
22896
- error: `Insufficient UCD balance for liquidation: ${(0, import_ethers21.formatEther)(
23258
+ error: `Insufficient UCD balance for liquidation: ${(0, import_ethers22.formatEther)(
22897
23259
  ucdBalance
22898
- )} UCD (need ${(0, import_ethers21.formatEther)(debtWei)} UCD)`,
23260
+ )} UCD (need ${(0, import_ethers22.formatEther)(debtWei)} UCD)`,
22899
23261
  positionId: request.positionId,
22900
23262
  wasLiquidated: false
22901
23263
  };
@@ -22904,7 +23266,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
22904
23266
  if (request.skipUcdApproval) {
22905
23267
  return {
22906
23268
  success: false,
22907
- error: `Insufficient UCD allowance for UCDController: need at least ${(0, import_ethers21.formatEther)(
23269
+ error: `Insufficient UCD allowance for UCDController: need at least ${(0, import_ethers22.formatEther)(
22908
23270
  debtWei
22909
23271
  )} UCD, or omit skipUcdApproval to let the SDK submit approve`,
22910
23272
  positionId: request.positionId,
@@ -23428,7 +23790,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
23428
23790
  if (typeof signatureBytes === "string" && signatureBytes.startsWith("{")) {
23429
23791
  try {
23430
23792
  const parsed = JSON.parse(signatureBytes);
23431
- signatureBytes = parsed.signature ?? (parsed.r && parsed.s && parsed.v ? import_ethers21.Signature.from({
23793
+ signatureBytes = parsed.signature ?? (parsed.r && parsed.s && parsed.v ? import_ethers22.Signature.from({
23432
23794
  r: parsed.r,
23433
23795
  s: parsed.s,
23434
23796
  v: parsed.v
@@ -23439,7 +23801,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
23439
23801
  if (!signatureBytes.startsWith("0x")) {
23440
23802
  signatureBytes = "0x" + signatureBytes;
23441
23803
  }
23442
- const extendIface = new import_ethers21.Interface([
23804
+ const extendIface = new import_ethers22.Interface([
23443
23805
  "function extendPosition(bytes32 positionId, uint256 selectedTerm, uint256 quantumTimestamp, uint256 btcPrice, uint256 availableBTCBalance, uint256 proRataRenewalFee, bytes calldata extensionValidatorSignature) external returns (bool)"
23444
23806
  ]);
23445
23807
  const extendCalldata = extendIface.encodeFunctionData("extendPosition", [
@@ -23988,7 +24350,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
23988
24350
  ` Converting payment amount: ${request.paymentAmount} (type: ${typeof request.paymentAmount})`
23989
24351
  );
23990
24352
  }
23991
- const paymentAmountWei = (0, import_ethers21.parseEther)(
24353
+ const paymentAmountWei = (0, import_ethers22.parseEther)(
23992
24354
  request.paymentAmount.toString()
23993
24355
  );
23994
24356
  if (this.config.debug) {
@@ -24055,7 +24417,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
24055
24417
  };
24056
24418
  }
24057
24419
  const ucdTokenAddress = await loanOps.ucdToken();
24058
- const ucdToken = new import_ethers21.Contract(
24420
+ const ucdToken = new import_ethers22.Contract(
24059
24421
  ucdTokenAddress,
24060
24422
  [
24061
24423
  "function balanceOf(address) view returns (uint256)",
@@ -24079,14 +24441,14 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
24079
24441
  ]);
24080
24442
  if (this.config.debug) {
24081
24443
  log.info(` UCD funds source: ${fundsSource}${isSelfRepay ? " (self)" : " (borrower; agent submitting)"}`);
24082
- log.info(` UCD Balance: ${(0, import_ethers21.formatEther)(balance)} UCD`);
24083
- log.info(` UCD Allowance: ${(0, import_ethers21.formatEther)(allowance)} UCD`);
24444
+ log.info(` UCD Balance: ${(0, import_ethers22.formatEther)(balance)} UCD`);
24445
+ log.info(` UCD Allowance: ${(0, import_ethers22.formatEther)(allowance)} UCD`);
24084
24446
  log.info(` Required: ${request.paymentAmount} UCD`);
24085
24447
  }
24086
24448
  if (balance < paymentAmountWei) {
24087
24449
  return {
24088
24450
  success: false,
24089
- error: `Insufficient UCD balance: ${(0, import_ethers21.formatEther)(
24451
+ error: `Insufficient UCD balance: ${(0, import_ethers22.formatEther)(
24090
24452
  balance
24091
24453
  )} UCD (need ${request.paymentAmount} UCD)${isSelfRepay ? "" : ` \u2014 borrower ${fundsSource} lacks funds`}`
24092
24454
  };
@@ -24095,7 +24457,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
24095
24457
  if (!isSelfRepay) {
24096
24458
  return {
24097
24459
  success: false,
24098
- error: `Borrower ${fundsSource} has insufficient UCD allowance to PositionManager (${(0, import_ethers21.formatEther)(allowance)} UCD, need ${request.paymentAmount}). The borrower must approve PositionManager before a delegated agent can repay.`
24460
+ error: `Borrower ${fundsSource} has insufficient UCD allowance to PositionManager (${(0, import_ethers22.formatEther)(allowance)} UCD, need ${request.paymentAmount}). The borrower must approve PositionManager before a delegated agent can repay.`
24099
24461
  };
24100
24462
  }
24101
24463
  if (this.config.debug) {
@@ -24364,7 +24726,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
24364
24726
  const paymentSigner = this.getSignerOrThrow();
24365
24727
  const paymentFrom = await paymentSigner.getAddress();
24366
24728
  const paymentProvider = contractManager.getProvider();
24367
- const paymentIface = new import_ethers21.Interface([
24729
+ const paymentIface = new import_ethers22.Interface([
24368
24730
  "function makePayment(bytes32 positionId, uint256 paymentAmount, uint256 quantumTimestamp, uint256 btcPrice, bytes calldata paymentValidatorSignature) external returns (bool)"
24369
24731
  ]);
24370
24732
  const paymentCalldata = paymentIface.encodeFunctionData("makePayment", [
@@ -24713,7 +25075,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
24713
25075
  const pkpId = position.pkpId;
24714
25076
  if (litValidatorAddr && pkpId) {
24715
25077
  try {
24716
- const litValidator = new import_ethers21.Contract(
25078
+ const litValidator = new import_ethers22.Contract(
24717
25079
  litValidatorAddr,
24718
25080
  ["function pkpOwners(bytes32) view returns (address)"],
24719
25081
  this.getProviderOrThrow()
@@ -24721,7 +25083,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
24721
25083
  const owner = await litValidator.pkpOwners(
24722
25084
  pkpId
24723
25085
  );
24724
- if (owner && owner !== import_ethers21.ZeroAddress) {
25086
+ if (owner && owner !== import_ethers22.ZeroAddress) {
24725
25087
  controller = owner;
24726
25088
  }
24727
25089
  } catch {
@@ -24773,7 +25135,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
24773
25135
  pkpNftAddress,
24774
25136
  this.getChipotlePublicKeyFallback()
24775
25137
  );
24776
- pkpEthAddress = (0, import_ethers21.computeAddress)(pkpPublicKey);
25138
+ pkpEthAddress = (0, import_ethers22.computeAddress)(pkpPublicKey);
24777
25139
  pkpCache.set(positionId, {
24778
25140
  publicKey: pkpPublicKey,
24779
25141
  ethAddress: pkpEthAddress,
@@ -25146,7 +25508,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
25146
25508
  utxoVout: withdrawalParams.utxoVout
25147
25509
  });
25148
25510
  }
25149
- const withdrawIface = new import_ethers21.Interface([
25511
+ const withdrawIface = new import_ethers22.Interface([
25150
25512
  "function withdrawBTC((bytes32 positionId, bytes32 actionHash, bytes32 authorizedSpendsHash, bytes32 ucdDebtHash, bytes32 contractBundleHash, string withdrawalAddress, uint256 totalDeduction, uint256 newCollateral, uint256 quantumTimestamp, uint256 btcPrice, string utxoTxid, uint32 utxoVout) params, bytes withdrawalValidatorSignature, bytes btcSpendAuthSignature) external returns (bool)"
25151
25513
  ]);
25152
25514
  const withdrawCalldata = withdrawIface.encodeFunctionData("withdrawBTC", [
@@ -25377,7 +25739,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
25377
25739
  }
25378
25740
  const pkpId = positionDetails.pkpId;
25379
25741
  const vaultAddress = positionDetails.vaultAddress;
25380
- if (!pkpId || pkpId === import_ethers21.ZeroHash) {
25742
+ if (!pkpId || pkpId === import_ethers22.ZeroHash) {
25381
25743
  return { success: false, error: "Position has no PKP" };
25382
25744
  }
25383
25745
  if (!vaultAddress) {
@@ -25397,7 +25759,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
25397
25759
  if (!publicKey) {
25398
25760
  return { success: false, error: "Failed to resolve PKP public key" };
25399
25761
  }
25400
- const chipotlePkpAddress = (0, import_ethers21.computeAddress)(publicKey);
25762
+ const chipotlePkpAddress = (0, import_ethers22.computeAddress)(publicKey);
25401
25763
  const chainName = LIT_ACTION_CHAIN_NAMES[chainId];
25402
25764
  if (!chainName) {
25403
25765
  return {
@@ -25770,7 +26132,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
25770
26132
  const btcSpendAuthorizerAbi = [
25771
26133
  "function getAuthorizedSpends(bytes32) view returns (tuple(string txid, uint32 vout, uint256 satoshis, string targetAddress, uint256 targetAmount, uint256 authorizedAt)[])"
25772
26134
  ];
25773
- const btcSpendAuthorizer = new import_ethers21.Contract(
26135
+ const btcSpendAuthorizer = new import_ethers22.Contract(
25774
26136
  btcSpendAuthorizerAddress,
25775
26137
  btcSpendAuthorizerAbi,
25776
26138
  this.getProviderOrThrow()
@@ -25856,7 +26218,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
25856
26218
  const abi = [
25857
26219
  "function getAuthorizedSpends(bytes32) view returns (tuple(string txid, uint32 vout, uint256 satoshis, string targetAddress, uint256 targetAmount, uint256 authorizedAt)[])"
25858
26220
  ];
25859
- const contract = new import_ethers21.Contract(
26221
+ const contract = new import_ethers22.Contract(
25860
26222
  btcSpendAuthorizerAddress,
25861
26223
  abi,
25862
26224
  this.getProviderOrThrow()
@@ -25870,7 +26232,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
25870
26232
  targetAddress: spend.targetAddress,
25871
26233
  targetAmount: Number(spend.targetAmount),
25872
26234
  authorizedAt: Number(spend.authorizedAt),
25873
- utxoKey: (0, import_ethers21.solidityPackedKeccak256)(
26235
+ utxoKey: (0, import_ethers22.solidityPackedKeccak256)(
25874
26236
  ["string", "uint32"],
25875
26237
  [spend.txid, Number(spend.vout)]
25876
26238
  )
@@ -26076,7 +26438,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
26076
26438
  error: attRes.error ?? attRes.reason ?? `LIT recovery attestation rejected${attRes.failedStep ? ` at step ${attRes.failedStep}` : ""}`
26077
26439
  };
26078
26440
  }
26079
- const btcSpendAuthorizer = new import_ethers21.Contract(
26441
+ const btcSpendAuthorizer = new import_ethers22.Contract(
26080
26442
  btcSpendAuthorizerAddress,
26081
26443
  [
26082
26444
  "function cancelStaleSpendWithProof(bytes32 positionId, bytes32 utxoKey, uint256 authorizedAt, string calldata invalidatorTxid, uint256 attestationTimestamp, bytes calldata litSignature) external"
@@ -26173,7 +26535,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
26173
26535
  const positionDetails = await this.getPositionDetailsView(
26174
26536
  params.positionId
26175
26537
  );
26176
- if (!positionDetails?.pkpId || positionDetails.pkpId === import_ethers21.ZeroHash) {
26538
+ if (!positionDetails?.pkpId || positionDetails.pkpId === import_ethers22.ZeroHash) {
26177
26539
  return { success: false, error: "Position has no PKP" };
26178
26540
  }
26179
26541
  const pkpCache = this.cacheManager.getCache("pkp-data", {
@@ -26190,7 +26552,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
26190
26552
  if (!publicKey) {
26191
26553
  return { success: false, error: "Failed to resolve PKP public key" };
26192
26554
  }
26193
- const chipotlePkpAddress = (0, import_ethers21.computeAddress)(publicKey);
26555
+ const chipotlePkpAddress = (0, import_ethers22.computeAddress)(publicKey);
26194
26556
  const dc = this.config.contractAddresses || {};
26195
26557
  const chainName = chainId === 1 ? "ethereum" : chainId === 11155111 ? "sepolia" : chainId === 1337 || chainId === 31337 ? "hardhat" : void 0;
26196
26558
  if (!chainName) {
@@ -26889,7 +27251,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
26889
27251
  *
26890
27252
  * Deliberately omits `minWithdrawRatioBps` — see {@link readLoanGrant}.
26891
27253
  */
26892
- static LOAN_GRANT_PREFIX_IFACE = new import_ethers21.Interface([
27254
+ static LOAN_GRANT_PREFIX_IFACE = new import_ethers22.Interface([
26893
27255
  "function getLoanGrant(bytes32 positionId) view returns (address borrower, uint32 scopeBits, uint32 minCollateralRatioBps)"
26894
27256
  ]);
26895
27257
  /**
@@ -26910,9 +27272,9 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
26910
27272
  to: registryAddress,
26911
27273
  data: iface.encodeFunctionData("getLoanGrant", [pid])
26912
27274
  });
26913
- if ((0, import_ethers21.getBytes)(data).length < 96) {
27275
+ if ((0, import_ethers22.getBytes)(data).length < 96) {
26914
27276
  throw new SDKError({
26915
- message: `AgentDelegationRegistry at ${registryAddress} returned ${(0, import_ethers21.getBytes)(data).length} bytes for getLoanGrant(bytes32) \u2014 expected at least 96. Wrong address, or a registry version this SDK does not support.`,
27277
+ message: `AgentDelegationRegistry at ${registryAddress} returned ${(0, import_ethers22.getBytes)(data).length} bytes for getLoanGrant(bytes32) \u2014 expected at least 96. Wrong address, or a registry version this SDK does not support.`,
26916
27278
  category: "CONTRACT" /* CONTRACT */,
26917
27279
  severity: "HIGH" /* HIGH */
26918
27280
  });
@@ -26921,10 +27283,10 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
26921
27283
  "getLoanGrant",
26922
27284
  data
26923
27285
  );
26924
- const raw = (0, import_ethers21.getBytes)(data);
27286
+ const raw = (0, import_ethers22.getBytes)(data);
26925
27287
  const withdrawScopeSupported = raw.length >= 128;
26926
27288
  const minWithdrawRatioBps = withdrawScopeSupported ? Number(
26927
- import_ethers21.AbiCoder.defaultAbiCoder().decode(["uint32"], raw.slice(96, 128))[0]
27289
+ import_ethers22.AbiCoder.defaultAbiCoder().decode(["uint32"], raw.slice(96, 128))[0]
26928
27290
  ) : 0;
26929
27291
  return {
26930
27292
  borrower,
@@ -27085,7 +27447,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
27085
27447
  getPositionDelegate(pid, signer, pdrAddr),
27086
27448
  registry.agentOf(user).then((a) => a.agent)
27087
27449
  ]);
27088
- if (currentDelegate !== import_ethers21.ZeroAddress && currentDelegate.toLowerCase() === userAgent.toLowerCase()) {
27450
+ if (currentDelegate !== import_ethers22.ZeroAddress && currentDelegate.toLowerCase() === userAgent.toLowerCase()) {
27089
27451
  const clearTx = await setPositionDelegate(
27090
27452
  pid,
27091
27453
  "0x0000000000000000000000000000000000000000",
@@ -27477,7 +27839,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
27477
27839
  const maxUcdWhole = BigInt(result[3].toString());
27478
27840
  return success({
27479
27841
  liquidationThreshold: result[0].toString(),
27480
- minimumLoanValueUcd: (0, import_ethers21.formatUnits)(result[2], 18),
27842
+ minimumLoanValueUcd: (0, import_ethers22.formatUnits)(result[2], 18),
27481
27843
  minimumLoanValueWei: result[2].toString(),
27482
27844
  maxSingleLoanValueUcd: maxUcdWhole.toString(),
27483
27845
  maxSingleLoanValueWei: (maxUcdWhole * 10n ** 18n).toString()
@@ -27514,7 +27876,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
27514
27876
  const balanceWei = await provider.getBalance(address);
27515
27877
  return success({
27516
27878
  balanceWei: balanceWei.toString(),
27517
- balanceEth: (0, import_ethers21.formatEther)(balanceWei)
27879
+ balanceEth: (0, import_ethers22.formatEther)(balanceWei)
27518
27880
  });
27519
27881
  } catch (error) {
27520
27882
  return failure(new SDKError({
@@ -27923,7 +28285,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
27923
28285
  * Convert decimal position ID to bytes32 format
27924
28286
  */
27925
28287
  toBytes32(value) {
27926
- return (0, import_ethers21.zeroPadValue)((0, import_ethers21.toBeHex)(BigInt(value)), 32);
28288
+ return (0, import_ethers22.zeroPadValue)((0, import_ethers22.toBeHex)(BigInt(value)), 32);
27927
28289
  }
27928
28290
  /**
27929
28291
  * Check if an error indicates a technical failure vs business logic rejection
@@ -27964,7 +28326,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
27964
28326
  const coreModuleAbi = [
27965
28327
  "function getPositionDetails(bytes32) view returns (tuple(bytes32 positionId, bytes32 pkpId, uint256 ucdDebt, string vaultAddress, address borrower, uint40 createdAt, uint40 lastUpdated, uint16 selectedTerm, uint40 expiryAt, uint8 status, uint40 previousExpiryAt, uint16 totalTerm))"
27966
28328
  ];
27967
- const coreModule = new import_ethers21.Contract(
28329
+ const coreModule = new import_ethers22.Contract(
27968
28330
  coreModuleAddress,
27969
28331
  coreModuleAbi,
27970
28332
  provider
@@ -28031,7 +28393,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
28031
28393
  const corePositionAbi = [
28032
28394
  "function getPositionDetails(bytes32) view returns (tuple(bytes32 positionId, bytes32 pkpId, uint256 ucdDebt, string vaultAddress, address borrower, uint40 createdAt, uint40 lastUpdated, uint16 selectedTerm, uint40 expiryAt, uint8 status, uint40 previousExpiryAt, uint16 totalTerm))"
28033
28395
  ];
28034
- const corePositionContract = new import_ethers21.Contract(
28396
+ const corePositionContract = new import_ethers22.Contract(
28035
28397
  coreAddress,
28036
28398
  corePositionAbi,
28037
28399
  provider
@@ -28042,7 +28404,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
28042
28404
  positionIdBytes32
28043
28405
  );
28044
28406
  const positionIdFromCore = corePosition?.positionId || corePosition?.[0] || null;
28045
- if (positionIdFromCore && positionIdFromCore !== import_ethers21.ZeroHash && positionIdFromCore !== "0x0000000000000000000000000000000000000000000000000000000000000000") {
28407
+ if (positionIdFromCore && positionIdFromCore !== import_ethers22.ZeroHash && positionIdFromCore !== "0x0000000000000000000000000000000000000000000000000000000000000000") {
28046
28408
  if (this.config.debug) {
28047
28409
  log.info("Position exists in core contract", {
28048
28410
  positionId,
@@ -28110,7 +28472,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
28110
28472
  throw new Error("loanOperationsManager address not configured");
28111
28473
  }
28112
28474
  const runner = this.config.contractSigner || this.getProviderOrThrow();
28113
- const contract = new import_ethers21.Contract(
28475
+ const contract = new import_ethers22.Contract(
28114
28476
  addr.loanOperationsManager,
28115
28477
  [
28116
28478
  "function getProtocolConfig() external view returns (uint256 liquidationThreshold, uint256 minimumLoanValueUcd, uint256 minimumLoanValueWei, uint256 maxSingleLoanValueUcd)"
@@ -28123,7 +28485,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
28123
28485
  const maxUcdWhole = BigInt(result[3].toString());
28124
28486
  return {
28125
28487
  liquidationThreshold: result[0].toString(),
28126
- minimumLoanValueUcd: (0, import_ethers21.formatUnits)(result[2], 18),
28488
+ minimumLoanValueUcd: (0, import_ethers22.formatUnits)(result[2], 18),
28127
28489
  minimumLoanValueWei: result[2].toString(),
28128
28490
  maxSingleLoanValueUcd: maxUcdWhole.toString(),
28129
28491
  maxSingleLoanValueWei: (maxUcdWhole * 10n ** 18n).toString()
@@ -28141,8 +28503,8 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
28141
28503
  const MIN_REVEAL_DELAY = 60;
28142
28504
  const MAX_RANDOM_DELAY = 240;
28143
28505
  const entropyInput = positionId + quantumTimestamp.toString();
28144
- const hash = (0, import_ethers21.keccak256)(
28145
- (0, import_ethers21.toUtf8Bytes)(entropyInput)
28506
+ const hash = (0, import_ethers22.keccak256)(
28507
+ (0, import_ethers22.toUtf8Bytes)(entropyInput)
28146
28508
  );
28147
28509
  const randomValue = BigInt(hash);
28148
28510
  const randomDelay = Number(randomValue % BigInt(MAX_RANDOM_DELAY));
@@ -28167,12 +28529,12 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
28167
28529
  const rawPositionId = /^0x/i.test(params.positionId.trim()) ? params.positionId.trim().slice(2) : params.positionId.trim();
28168
28530
  const canonicalPositionId = "0x" + rawPositionId.padStart(64, "0").toLowerCase();
28169
28531
  const intentTimestamp = Math.floor(Date.now() / 1e3);
28170
- const intentActionHash = (0, import_ethers21.keccak256)((0, import_ethers21.toUtf8Bytes)("liquidate-position"));
28171
- const intentHash = (0, import_ethers21.solidityPackedKeccak256)(
28532
+ const intentActionHash = (0, import_ethers22.keccak256)((0, import_ethers22.toUtf8Bytes)("liquidate-position"));
28533
+ const intentHash = (0, import_ethers22.solidityPackedKeccak256)(
28172
28534
  ["bytes32", "uint256", "uint256", "address", "bytes32"],
28173
28535
  [canonicalPositionId, intentTimestamp, chainId, intentSigner, intentActionHash]
28174
28536
  );
28175
- const intentSignature = await signer.signMessage((0, import_ethers21.getBytes)(intentHash));
28537
+ const intentSignature = await signer.signMessage((0, import_ethers22.getBytes)(intentHash));
28176
28538
  const response = await fetch(endpoint, {
28177
28539
  method: "POST",
28178
28540
  headers: { "Content-Type": "application/json" },
@@ -28224,7 +28586,7 @@ Message: ${causeMessage}${quantumContext}${loanCapDiagnostics}${mintDebtDiagnost
28224
28586
  const vrfSeedRaw = await lmResult.value["vrfSeeds"](positionId);
28225
28587
  const vrfSeed = BigInt(vrfSeedRaw.toString());
28226
28588
  if (vrfSeed !== 0n) {
28227
- const finalEntropy = (0, import_ethers21.solidityPackedKeccak256)(
28589
+ const finalEntropy = (0, import_ethers22.solidityPackedKeccak256)(
28228
28590
  ["uint256", "uint256", "bytes32"],
28229
28591
  [vrfSeed, BigInt(quantumTimestamp.toString()), positionId]
28230
28592
  );
@@ -28502,7 +28864,7 @@ var EventHelpers = {
28502
28864
  };
28503
28865
 
28504
28866
  // src/utils/safe-agent-delegation.utils.ts
28505
- var import_ethers22 = require("ethers");
28867
+ var import_ethers23 = require("ethers");
28506
28868
  init_deployment_addresses();
28507
28869
  var SAFE_ABI = [
28508
28870
  "function getModulesPaginated(address start, uint256 pageSize) view returns (address[] modules, address next)"
@@ -28520,7 +28882,7 @@ var MODULE_LIST_SENTINEL = "0x0000000000000000000000000000000000000001";
28520
28882
  var MODULE_PAGE_SIZE = 50;
28521
28883
  var lower = (v) => v.trim().toLowerCase();
28522
28884
  async function classifyModule(provider, moduleAddress, safeAddress, positionManager, factoryAddress) {
28523
- const module2 = new import_ethers22.Contract(moduleAddress, MODULE_ABI, provider);
28885
+ const module2 = new import_ethers23.Contract(moduleAddress, MODULE_ABI, provider);
28524
28886
  let boundSafe;
28525
28887
  try {
28526
28888
  boundSafe = await module2.safe();
@@ -28540,7 +28902,7 @@ async function classifyModule(provider, moduleAddress, safeAddress, positionMana
28540
28902
  if (!factoryAddress)
28541
28903
  return null;
28542
28904
  try {
28543
- const factory = new import_ethers22.Contract(factoryAddress, FACTORY_ABI, provider);
28905
+ const factory = new import_ethers23.Contract(factoryAddress, FACTORY_ABI, provider);
28544
28906
  return await factory.isFromFactory(moduleAddress) === true;
28545
28907
  } catch {
28546
28908
  return null;
@@ -28569,7 +28931,7 @@ async function getSafeAgentDelegation(params) {
28569
28931
  let modules;
28570
28932
  let next;
28571
28933
  try {
28572
- const safe = new import_ethers22.Contract(safeAddress, SAFE_ABI, provider);
28934
+ const safe = new import_ethers23.Contract(safeAddress, SAFE_ABI, provider);
28573
28935
  const page = await safe.getModulesPaginated(
28574
28936
  MODULE_LIST_SENTINEL,
28575
28937
  MODULE_PAGE_SIZE
@@ -28597,7 +28959,7 @@ async function getSafeAgentDelegation(params) {
28597
28959
  continue;
28598
28960
  let agentAddress = null;
28599
28961
  try {
28600
- agentAddress = await new import_ethers22.Contract(
28962
+ agentAddress = await new import_ethers23.Contract(
28601
28963
  moduleAddress,
28602
28964
  MODULE_ABI,
28603
28965
  provider
@@ -28611,7 +28973,7 @@ async function getSafeAgentDelegation(params) {
28611
28973
  let validUntil;
28612
28974
  let status;
28613
28975
  try {
28614
- const record = await new import_ethers22.Contract(
28976
+ const record = await new import_ethers23.Contract(
28615
28977
  registryAddress,
28616
28978
  REGISTRY_ABI,
28617
28979
  provider