@gearbox-protocol/sdk 3.0.0-vfour.40 → 3.0.0-vfour.42

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.
@@ -614,87 +614,6 @@ var iCreditAccountCompressorAbi = [
614
614
  stateMutability: "view"
615
615
  }
616
616
  ];
617
- var iAdapterCompressorAbi = [
618
- {
619
- type: "function",
620
- name: "contractType",
621
- inputs: [],
622
- outputs: [
623
- {
624
- name: "",
625
- type: "bytes32",
626
- internalType: "bytes32"
627
- }
628
- ],
629
- stateMutability: "view"
630
- },
631
- {
632
- type: "function",
633
- name: "getContractAdapters",
634
- inputs: [
635
- {
636
- name: "creditManager",
637
- type: "address",
638
- internalType: "address"
639
- }
640
- ],
641
- outputs: [
642
- {
643
- name: "result",
644
- type: "tuple[]",
645
- internalType: "struct ContractAdapter[]",
646
- components: [
647
- {
648
- name: "baseParams",
649
- type: "tuple",
650
- internalType: "struct BaseParams",
651
- components: [
652
- {
653
- name: "addr",
654
- type: "address",
655
- internalType: "address"
656
- },
657
- {
658
- name: "version",
659
- type: "uint256",
660
- internalType: "uint256"
661
- },
662
- {
663
- name: "contractType",
664
- type: "bytes32",
665
- internalType: "bytes32"
666
- },
667
- {
668
- name: "serializedParams",
669
- type: "bytes",
670
- internalType: "bytes"
671
- }
672
- ]
673
- },
674
- {
675
- name: "targetContract",
676
- type: "address",
677
- internalType: "address"
678
- }
679
- ]
680
- }
681
- ],
682
- stateMutability: "view"
683
- },
684
- {
685
- type: "function",
686
- name: "version",
687
- inputs: [],
688
- outputs: [
689
- {
690
- name: "",
691
- type: "uint256",
692
- internalType: "uint256"
693
- }
694
- ],
695
- stateMutability: "view"
696
- }
697
- ];
698
617
  var iMarketCompressorAbi = [
699
618
  {
700
619
  type: "function",
@@ -1535,6 +1454,45 @@ var iMarketCompressorAbi = [
1535
1454
  }
1536
1455
  ]
1537
1456
  },
1457
+ {
1458
+ name: "adapters",
1459
+ type: "tuple[]",
1460
+ internalType: "struct ContractAdapter[]",
1461
+ components: [
1462
+ {
1463
+ name: "baseParams",
1464
+ type: "tuple",
1465
+ internalType: "struct BaseParams",
1466
+ components: [
1467
+ {
1468
+ name: "addr",
1469
+ type: "address",
1470
+ internalType: "address"
1471
+ },
1472
+ {
1473
+ name: "version",
1474
+ type: "uint256",
1475
+ internalType: "uint256"
1476
+ },
1477
+ {
1478
+ name: "contractType",
1479
+ type: "bytes32",
1480
+ internalType: "bytes32"
1481
+ },
1482
+ {
1483
+ name: "serializedParams",
1484
+ type: "bytes",
1485
+ internalType: "bytes"
1486
+ }
1487
+ ]
1488
+ },
1489
+ {
1490
+ name: "targetContract",
1491
+ type: "address",
1492
+ internalType: "address"
1493
+ }
1494
+ ]
1495
+ },
1538
1496
  {
1539
1497
  name: "totalDebt",
1540
1498
  type: "uint256",
@@ -2459,6 +2417,45 @@ var iMarketCompressorAbi = [
2459
2417
  }
2460
2418
  ]
2461
2419
  },
2420
+ {
2421
+ name: "adapters",
2422
+ type: "tuple[]",
2423
+ internalType: "struct ContractAdapter[]",
2424
+ components: [
2425
+ {
2426
+ name: "baseParams",
2427
+ type: "tuple",
2428
+ internalType: "struct BaseParams",
2429
+ components: [
2430
+ {
2431
+ name: "addr",
2432
+ type: "address",
2433
+ internalType: "address"
2434
+ },
2435
+ {
2436
+ name: "version",
2437
+ type: "uint256",
2438
+ internalType: "uint256"
2439
+ },
2440
+ {
2441
+ name: "contractType",
2442
+ type: "bytes32",
2443
+ internalType: "bytes32"
2444
+ },
2445
+ {
2446
+ name: "serializedParams",
2447
+ type: "bytes",
2448
+ internalType: "bytes"
2449
+ }
2450
+ ]
2451
+ },
2452
+ {
2453
+ name: "targetContract",
2454
+ type: "address",
2455
+ internalType: "address"
2456
+ }
2457
+ ]
2458
+ },
2462
2459
  {
2463
2460
  name: "totalDebt",
2464
2461
  type: "uint256",
@@ -18762,106 +18759,392 @@ var iCreditFacadeV310MulticallAbi = [
18762
18759
  stateMutability: "nonpayable"
18763
18760
  }
18764
18761
  ];
18765
-
18766
- // src/sdk/constants/addresses.ts
18767
- var ADDRESS_0X0 = "0x0000000000000000000000000000000000000000";
18768
- var NOT_DEPLOYED = "0xNOT DEPLOYED";
18769
- var USDC = {
18770
- Mainnet: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
18771
- Arbitrum: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
18772
- Optimism: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
18773
- Base: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
18774
- };
18775
- var TIMELOCK = {
18776
- Mainnet: "0xa133C9A92Fb8dDB962Af1cbae58b2723A0bdf23b",
18777
- Arbitrum: "0x148DD932eCe1155c11006F5650c6Ff428f8D374A",
18778
- Optimism: "0x148DD932eCe1155c11006F5650c6Ff428f8D374A",
18779
- Base: NOT_DEPLOYED
18780
- };
18781
-
18782
- // src/sdk/constants/address-provider.ts
18783
- var NO_VERSION = 0;
18784
- var AP_ACL = "ACL";
18785
- var AP_CONTRACTS_REGISTER = "CONTRACTS_REGISTER";
18786
- var AP_PRICE_ORACLE = "PRICE_ORACLE";
18787
- var AP_ACCOUNT_FACTORY = "ACCOUNT_FACTORY";
18788
- var AP_DATA_COMPRESSOR = "DATA_COMPRESSOR";
18789
- var AP_MARKET_COMPRESSOR = "MARKET_COMPRESSOR";
18790
- var AP_PRICE_FEED_COMPRESSOR = "PRICE_FEED_COMPRESSOR";
18791
- var AP_CREDIT_ACCOUNT_COMPRESSOR = "CREDIT_ACCOUNT_COMPRESSOR";
18792
- var AP_ADAPTER_COMPRESSOR = "ADAPTER_COMPRESSOR";
18793
- var AP_TREASURY = "TREASURY";
18794
- var AP_GEAR_TOKEN = "GEAR_TOKEN";
18795
- var AP_WETH_TOKEN = "WETH_TOKEN";
18796
- var AP_WETH_GATEWAY = "WETH_GATEWAY";
18797
- var AP_ROUTER = "ROUTER";
18798
- var AP_BOT_LIST = "BOT_LIST";
18799
- var AP_GEAR_STAKING = "GEAR_STAKING";
18800
- var AP_ZAPPER_REGISTER = "ZAPPER_REGISTER";
18801
- var AP_CONTROLLER_TIMELOCK = "CONTROLLER_TIMELOCK";
18802
- var AP_DEGEN_NFT = "DEGEN_NFT";
18803
- var AP_ZERO_PRICE_FEED = "ZERO_PRICE_FEED";
18804
- var AP_DEGEN_DISTRIBUTOR = "DEGEN_DISTRIBUTOR";
18805
- var AP_MULTI_PAUSE = "MULTI_PAUSE";
18806
- var AP_INFLATION_ATTACK_BLOCKER = "INFLATION_ATTACK_BLOCKER";
18807
- var AP_INSOLVENCY_CHECKER = "INSOLVENCY_CHECKER";
18808
- var AP_PARTIAL_LIQUIDATION_BOT = "PARTIAL_LIQUIDATION_BOT";
18809
- var AP_DELEVERAGE_BOT_PEGGED = "DELEVERAGE_BOT_PEGGED";
18810
- var AP_DELEVERAGE_BOT_LV = "DELEVERAGE_BOT_LV";
18811
- var AP_DELEVERAGE_BOT_HV = "DELEVERAGE_BOT_HV";
18812
- var ADDRESS_PROVIDER = {
18813
- Mainnet: "0x9ea7b04Da02a5373317D745c1571c84aaD03321D",
18814
- Arbitrum: "0x7d04eCdb892Ae074f03B5D0aBA03796F90F3F2af",
18815
- Optimism: "0x3761ca4BFAcFCFFc1B8034e69F19116dD6756726",
18816
- Base: NOT_DEPLOYED
18817
- };
18818
-
18819
- // src/sdk/constants/bot-permissions.ts
18820
- var BotPermissions = /* @__PURE__ */ ((BotPermissions2) => {
18821
- BotPermissions2[BotPermissions2["ADD_COLLATERAL"] = 1] = "ADD_COLLATERAL";
18822
- BotPermissions2[BotPermissions2["INCREASE_DEBT"] = 2] = "INCREASE_DEBT";
18823
- BotPermissions2[BotPermissions2["DECREASE_DEBT"] = 4] = "DECREASE_DEBT";
18824
- BotPermissions2[BotPermissions2["ENABLE_TOKEN"] = 8] = "ENABLE_TOKEN";
18825
- BotPermissions2[BotPermissions2["DISABLE_TOKEN"] = 16] = "DISABLE_TOKEN";
18826
- BotPermissions2[BotPermissions2["WITHDRAW_COLLATERAL"] = 32] = "WITHDRAW_COLLATERAL";
18827
- BotPermissions2[BotPermissions2["UPDATE_QUOTA"] = 64] = "UPDATE_QUOTA";
18828
- BotPermissions2[BotPermissions2["REVOKE_ALLOWANCES"] = 128] = "REVOKE_ALLOWANCES";
18829
- BotPermissions2[BotPermissions2["EXTERNAL_CALLS"] = 65536] = "EXTERNAL_CALLS";
18830
- BotPermissions2[BotPermissions2["ALL_CREDIT_FACADE_CALLS"] = 255] = "ALL_CREDIT_FACADE_CALLS";
18831
- BotPermissions2[BotPermissions2["ALLS"] = 65791] = "ALLS";
18832
- return BotPermissions2;
18833
- })(BotPermissions || {});
18834
- function botPermissionsToString(value) {
18835
- let result = "";
18836
- for (let i = 0; i < 16; i++) {
18837
- if ((value & 1n << BigInt(i)) !== 0n) {
18838
- if (result.length > 0) {
18839
- result += " | ";
18762
+ var iMarketConfiguratorV310Abi = [
18763
+ {
18764
+ type: "function",
18765
+ name: "adapterFactory",
18766
+ inputs: [],
18767
+ outputs: [
18768
+ {
18769
+ name: "",
18770
+ type: "address",
18771
+ internalType: "address"
18840
18772
  }
18841
- result += BotPermissions[1 << i];
18842
- }
18843
- }
18844
- return result;
18845
- }
18846
-
18847
- // src/sdk/constants/math.ts
18848
- var MIN_INT96 = -39614081257132168796771975168n;
18849
- var MAX_UINT256 = 115792089237316195423570985008687907853269984665640564039457584007913129639935n;
18850
- var RAY_DECIMALS_POW = 27;
18851
- var RAY = 10n ** BigInt(RAY_DECIMALS_POW);
18852
- var halfRAY = RAY / 2n;
18853
- var WAD_DECIMALS_POW = 18;
18854
- var WAD = 10n ** BigInt(WAD_DECIMALS_POW);
18855
- var PRICE_DECIMALS_POW = 8;
18856
- var PRICE_DECIMALS = 10n ** BigInt(PRICE_DECIMALS_POW);
18857
- var PERCENTAGE_DECIMALS = 100n;
18858
- var PERCENTAGE_FACTOR = 10000n;
18859
- var AddressMap = class {
18860
- #map;
18861
- #frozen = false;
18862
- constructor(entries) {
18863
- this.#map = /* @__PURE__ */ new Map();
18864
- if (entries) {
18773
+ ],
18774
+ stateMutability: "view"
18775
+ },
18776
+ {
18777
+ type: "function",
18778
+ name: "addressProvider",
18779
+ inputs: [],
18780
+ outputs: [
18781
+ {
18782
+ name: "",
18783
+ type: "address",
18784
+ internalType: "address"
18785
+ }
18786
+ ],
18787
+ stateMutability: "view"
18788
+ },
18789
+ {
18790
+ type: "function",
18791
+ name: "contractType",
18792
+ inputs: [],
18793
+ outputs: [
18794
+ {
18795
+ name: "",
18796
+ type: "bytes32",
18797
+ internalType: "bytes32"
18798
+ }
18799
+ ],
18800
+ stateMutability: "view"
18801
+ },
18802
+ {
18803
+ type: "function",
18804
+ name: "contractsRegister",
18805
+ inputs: [],
18806
+ outputs: [
18807
+ {
18808
+ name: "",
18809
+ type: "address",
18810
+ internalType: "address"
18811
+ }
18812
+ ],
18813
+ stateMutability: "view"
18814
+ },
18815
+ {
18816
+ type: "function",
18817
+ name: "controller",
18818
+ inputs: [],
18819
+ outputs: [
18820
+ {
18821
+ name: "",
18822
+ type: "address",
18823
+ internalType: "address"
18824
+ }
18825
+ ],
18826
+ stateMutability: "view"
18827
+ },
18828
+ {
18829
+ type: "function",
18830
+ name: "creditFactory",
18831
+ inputs: [],
18832
+ outputs: [
18833
+ {
18834
+ name: "",
18835
+ type: "address",
18836
+ internalType: "address"
18837
+ }
18838
+ ],
18839
+ stateMutability: "view"
18840
+ },
18841
+ {
18842
+ type: "function",
18843
+ name: "interestModelFactory",
18844
+ inputs: [],
18845
+ outputs: [
18846
+ {
18847
+ name: "",
18848
+ type: "address",
18849
+ internalType: "address"
18850
+ }
18851
+ ],
18852
+ stateMutability: "view"
18853
+ },
18854
+ {
18855
+ type: "function",
18856
+ name: "owner",
18857
+ inputs: [],
18858
+ outputs: [
18859
+ {
18860
+ name: "",
18861
+ type: "address",
18862
+ internalType: "address"
18863
+ }
18864
+ ],
18865
+ stateMutability: "view"
18866
+ },
18867
+ {
18868
+ type: "function",
18869
+ name: "poolFactory",
18870
+ inputs: [],
18871
+ outputs: [
18872
+ {
18873
+ name: "",
18874
+ type: "address",
18875
+ internalType: "address"
18876
+ }
18877
+ ],
18878
+ stateMutability: "view"
18879
+ },
18880
+ {
18881
+ type: "function",
18882
+ name: "pools",
18883
+ inputs: [],
18884
+ outputs: [
18885
+ {
18886
+ name: "",
18887
+ type: "address[]",
18888
+ internalType: "address[]"
18889
+ }
18890
+ ],
18891
+ stateMutability: "view"
18892
+ },
18893
+ {
18894
+ type: "function",
18895
+ name: "priceOracleFactory",
18896
+ inputs: [],
18897
+ outputs: [
18898
+ {
18899
+ name: "",
18900
+ type: "address",
18901
+ internalType: "address"
18902
+ }
18903
+ ],
18904
+ stateMutability: "view"
18905
+ },
18906
+ {
18907
+ type: "function",
18908
+ name: "treasury",
18909
+ inputs: [],
18910
+ outputs: [
18911
+ {
18912
+ name: "",
18913
+ type: "address",
18914
+ internalType: "address"
18915
+ }
18916
+ ],
18917
+ stateMutability: "view"
18918
+ },
18919
+ {
18920
+ type: "function",
18921
+ name: "version",
18922
+ inputs: [],
18923
+ outputs: [
18924
+ {
18925
+ name: "",
18926
+ type: "uint256",
18927
+ internalType: "uint256"
18928
+ }
18929
+ ],
18930
+ stateMutability: "view"
18931
+ },
18932
+ {
18933
+ type: "event",
18934
+ name: "CreateMarket",
18935
+ inputs: [
18936
+ {
18937
+ name: "pool",
18938
+ type: "address",
18939
+ indexed: true,
18940
+ internalType: "address"
18941
+ },
18942
+ {
18943
+ name: "underlying",
18944
+ type: "address",
18945
+ indexed: true,
18946
+ internalType: "address"
18947
+ },
18948
+ {
18949
+ name: "_name",
18950
+ type: "string",
18951
+ indexed: false,
18952
+ internalType: "string"
18953
+ },
18954
+ {
18955
+ name: "_symbol",
18956
+ type: "string",
18957
+ indexed: false,
18958
+ internalType: "string"
18959
+ }
18960
+ ],
18961
+ anonymous: false
18962
+ },
18963
+ {
18964
+ type: "event",
18965
+ name: "DeployDegenNFT",
18966
+ inputs: [
18967
+ {
18968
+ name: "",
18969
+ type: "address",
18970
+ indexed: false,
18971
+ internalType: "address"
18972
+ }
18973
+ ],
18974
+ anonymous: false
18975
+ },
18976
+ {
18977
+ type: "event",
18978
+ name: "RemoveMarket",
18979
+ inputs: [
18980
+ {
18981
+ name: "pool",
18982
+ type: "address",
18983
+ indexed: true,
18984
+ internalType: "address"
18985
+ }
18986
+ ],
18987
+ anonymous: false
18988
+ },
18989
+ {
18990
+ type: "event",
18991
+ name: "SetName",
18992
+ inputs: [
18993
+ {
18994
+ name: "name",
18995
+ type: "string",
18996
+ indexed: false,
18997
+ internalType: "string"
18998
+ }
18999
+ ],
19000
+ anonymous: false
19001
+ },
19002
+ {
19003
+ type: "event",
19004
+ name: "SetPriceFeedFromStore",
19005
+ inputs: [
19006
+ {
19007
+ name: "token",
19008
+ type: "address",
19009
+ indexed: true,
19010
+ internalType: "address"
19011
+ },
19012
+ {
19013
+ name: "priceFeed",
19014
+ type: "address",
19015
+ indexed: true,
19016
+ internalType: "address"
19017
+ },
19018
+ {
19019
+ name: "trusted",
19020
+ type: "bool",
19021
+ indexed: false,
19022
+ internalType: "bool"
19023
+ }
19024
+ ],
19025
+ anonymous: false
19026
+ },
19027
+ {
19028
+ type: "event",
19029
+ name: "SetReservePriceFeedFromStore",
19030
+ inputs: [
19031
+ {
19032
+ name: "token",
19033
+ type: "address",
19034
+ indexed: true,
19035
+ internalType: "address"
19036
+ },
19037
+ {
19038
+ name: "priceFeedd",
19039
+ type: "address",
19040
+ indexed: true,
19041
+ internalType: "address"
19042
+ }
19043
+ ],
19044
+ anonymous: false
19045
+ }
19046
+ ];
19047
+
19048
+ // src/sdk/constants/addresses.ts
19049
+ var ADDRESS_0X0 = "0x0000000000000000000000000000000000000000";
19050
+ var NOT_DEPLOYED = "0xNOT DEPLOYED";
19051
+ var USDC = {
19052
+ Mainnet: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
19053
+ Arbitrum: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
19054
+ Optimism: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
19055
+ Base: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
19056
+ };
19057
+ var TIMELOCK = {
19058
+ Mainnet: "0xa133C9A92Fb8dDB962Af1cbae58b2723A0bdf23b",
19059
+ Arbitrum: "0x148DD932eCe1155c11006F5650c6Ff428f8D374A",
19060
+ Optimism: "0x148DD932eCe1155c11006F5650c6Ff428f8D374A",
19061
+ Base: NOT_DEPLOYED
19062
+ };
19063
+
19064
+ // src/sdk/constants/address-provider.ts
19065
+ var NO_VERSION = 0;
19066
+ var AP_ACL = "ACL";
19067
+ var AP_CONTRACTS_REGISTER = "CONTRACTS_REGISTER";
19068
+ var AP_PRICE_ORACLE = "PRICE_ORACLE";
19069
+ var AP_ACCOUNT_FACTORY = "ACCOUNT_FACTORY";
19070
+ var AP_DATA_COMPRESSOR = "DATA_COMPRESSOR";
19071
+ var AP_MARKET_COMPRESSOR = "MARKET_COMPRESSOR";
19072
+ var AP_MARKET_CONFIGURATOR = "MARKET_CONFIGURATOR";
19073
+ var AP_PRICE_FEED_COMPRESSOR = "PRICE_FEED_COMPRESSOR";
19074
+ var AP_CREDIT_ACCOUNT_COMPRESSOR = "CREDIT_ACCOUNT_COMPRESSOR";
19075
+ var AP_ADAPTER_COMPRESSOR = "ADAPTER_COMPRESSOR";
19076
+ var AP_TREASURY = "TREASURY";
19077
+ var AP_GEAR_TOKEN = "GEAR_TOKEN";
19078
+ var AP_WETH_TOKEN = "WETH_TOKEN";
19079
+ var AP_WETH_GATEWAY = "WETH_GATEWAY";
19080
+ var AP_ROUTER = "ROUTER";
19081
+ var AP_BOT_LIST = "BOT_LIST";
19082
+ var AP_GEAR_STAKING = "GEAR_STAKING";
19083
+ var AP_ZAPPER_REGISTER = "ZAPPER_REGISTER";
19084
+ var AP_CONTROLLER_TIMELOCK = "CONTROLLER_TIMELOCK";
19085
+ var AP_DEGEN_NFT = "DEGEN_NFT";
19086
+ var AP_ZERO_PRICE_FEED = "ZERO_PRICE_FEED";
19087
+ var AP_DEGEN_DISTRIBUTOR = "DEGEN_DISTRIBUTOR";
19088
+ var AP_MULTI_PAUSE = "MULTI_PAUSE";
19089
+ var AP_INFLATION_ATTACK_BLOCKER = "INFLATION_ATTACK_BLOCKER";
19090
+ var AP_INSOLVENCY_CHECKER = "INSOLVENCY_CHECKER";
19091
+ var AP_PARTIAL_LIQUIDATION_BOT = "PARTIAL_LIQUIDATION_BOT";
19092
+ var AP_DELEVERAGE_BOT_PEGGED = "DELEVERAGE_BOT_PEGGED";
19093
+ var AP_DELEVERAGE_BOT_LV = "DELEVERAGE_BOT_LV";
19094
+ var AP_DELEVERAGE_BOT_HV = "DELEVERAGE_BOT_HV";
19095
+ var ADDRESS_PROVIDER = {
19096
+ Mainnet: "0x9ea7b04Da02a5373317D745c1571c84aaD03321D",
19097
+ Arbitrum: "0x7d04eCdb892Ae074f03B5D0aBA03796F90F3F2af",
19098
+ Optimism: "0x3761ca4BFAcFCFFc1B8034e69F19116dD6756726",
19099
+ Base: NOT_DEPLOYED
19100
+ };
19101
+
19102
+ // src/sdk/constants/bot-permissions.ts
19103
+ var BotPermissions = /* @__PURE__ */ ((BotPermissions2) => {
19104
+ BotPermissions2[BotPermissions2["ADD_COLLATERAL"] = 1] = "ADD_COLLATERAL";
19105
+ BotPermissions2[BotPermissions2["INCREASE_DEBT"] = 2] = "INCREASE_DEBT";
19106
+ BotPermissions2[BotPermissions2["DECREASE_DEBT"] = 4] = "DECREASE_DEBT";
19107
+ BotPermissions2[BotPermissions2["ENABLE_TOKEN"] = 8] = "ENABLE_TOKEN";
19108
+ BotPermissions2[BotPermissions2["DISABLE_TOKEN"] = 16] = "DISABLE_TOKEN";
19109
+ BotPermissions2[BotPermissions2["WITHDRAW_COLLATERAL"] = 32] = "WITHDRAW_COLLATERAL";
19110
+ BotPermissions2[BotPermissions2["UPDATE_QUOTA"] = 64] = "UPDATE_QUOTA";
19111
+ BotPermissions2[BotPermissions2["REVOKE_ALLOWANCES"] = 128] = "REVOKE_ALLOWANCES";
19112
+ BotPermissions2[BotPermissions2["EXTERNAL_CALLS"] = 65536] = "EXTERNAL_CALLS";
19113
+ BotPermissions2[BotPermissions2["ALL_CREDIT_FACADE_CALLS"] = 255] = "ALL_CREDIT_FACADE_CALLS";
19114
+ BotPermissions2[BotPermissions2["ALLS"] = 65791] = "ALLS";
19115
+ return BotPermissions2;
19116
+ })(BotPermissions || {});
19117
+ function botPermissionsToString(value) {
19118
+ let result = "";
19119
+ for (let i = 0; i < 16; i++) {
19120
+ if ((value & 1n << BigInt(i)) !== 0n) {
19121
+ if (result.length > 0) {
19122
+ result += " | ";
19123
+ }
19124
+ result += BotPermissions[1 << i];
19125
+ }
19126
+ }
19127
+ return result;
19128
+ }
19129
+
19130
+ // src/sdk/constants/math.ts
19131
+ var MIN_INT96 = -39614081257132168796771975168n;
19132
+ var MAX_UINT256 = 115792089237316195423570985008687907853269984665640564039457584007913129639935n;
19133
+ var RAY_DECIMALS_POW = 27;
19134
+ var RAY = 10n ** BigInt(RAY_DECIMALS_POW);
19135
+ var halfRAY = RAY / 2n;
19136
+ var WAD_DECIMALS_POW = 18;
19137
+ var WAD = 10n ** BigInt(WAD_DECIMALS_POW);
19138
+ var PRICE_DECIMALS_POW = 8;
19139
+ var PRICE_DECIMALS = 10n ** BigInt(PRICE_DECIMALS_POW);
19140
+ var PERCENTAGE_DECIMALS = 100n;
19141
+ var PERCENTAGE_FACTOR = 10000n;
19142
+ var AddressMap = class {
19143
+ #map;
19144
+ #frozen = false;
19145
+ constructor(entries) {
19146
+ this.#map = /* @__PURE__ */ new Map();
19147
+ if (entries) {
18865
19148
  for (const [address, value] of entries) {
18866
19149
  const key = address.toLowerCase();
18867
19150
  if (!viem.isAddress(key)) {
@@ -18990,12 +19273,12 @@ var json_parse = (s) => {
18990
19273
  function createRawTx(to, parameters, description) {
18991
19274
  const { args } = parameters;
18992
19275
  const fname = parameters.functionName;
18993
- const { abi: abi19, functionName } = (() => {
19276
+ const { abi: abi20, functionName } = (() => {
18994
19277
  if (parameters.abi.length === 1 && parameters.functionName?.startsWith("0x"))
18995
19278
  return parameters;
18996
19279
  return viem.prepareEncodeFunctionData(parameters);
18997
19280
  })();
18998
- const abiItem = abi19[0];
19281
+ const abiItem = abi20[0];
18999
19282
  const signature = functionName;
19000
19283
  const data = "inputs" in abiItem && abiItem.inputs ? viem.encodeAbiParameters(abiItem.inputs, args ?? []) : void 0;
19001
19284
  const functionEncodedData = viem.concatHex([signature, data ?? "0x"]);
@@ -19171,12 +19454,25 @@ var AddressLabeller = class {
19171
19454
  // src/sdk/base/SDKConstruct.ts
19172
19455
  var SDKConstruct = class {
19173
19456
  sdk;
19457
+ /**
19458
+ * Indicates that contract state needs to be updated
19459
+ */
19460
+ #dirty = false;
19174
19461
  constructor(sdk) {
19175
19462
  this.sdk = sdk;
19176
19463
  }
19177
19464
  get provider() {
19178
19465
  return this.sdk.provider;
19179
19466
  }
19467
+ /**
19468
+ * Indicates that contract state needs to be updated
19469
+ */
19470
+ get dirty() {
19471
+ return this.#dirty;
19472
+ }
19473
+ set dirty(value) {
19474
+ this.#dirty = value;
19475
+ }
19180
19476
  };
19181
19477
 
19182
19478
  // src/sdk/base/BaseContract.ts
@@ -19240,10 +19536,10 @@ var BaseContract = class extends SDKConstruct {
19240
19536
  };
19241
19537
  }
19242
19538
  /**
19243
- * Updates contract's internal state from event
19539
+ * Updates (or not) contract's internal state from event
19244
19540
  * @param _log
19245
19541
  */
19246
- parseLog(_log) {
19542
+ processLog(_log) {
19247
19543
  }
19248
19544
  /**
19249
19545
  * Converts contract calldata to some human-friendly string
@@ -19575,6 +19871,36 @@ var CreditConfiguratorContract = class extends BaseContract {
19575
19871
  });
19576
19872
  this.emergencyLiquidators = [...emergencyLiquidators];
19577
19873
  }
19874
+ processLog(log) {
19875
+ switch (log.eventName) {
19876
+ case "AddCollateralToken":
19877
+ case "AddEmergencyLiquidator":
19878
+ case "AllowAdapter":
19879
+ case "AllowToken":
19880
+ case "CreditConfiguratorUpgraded":
19881
+ case "ForbidAdapter":
19882
+ case "ForbidToken":
19883
+ case "NewController":
19884
+ case "Paused":
19885
+ case "QuoteToken":
19886
+ case "RemoveEmergencyLiquidator":
19887
+ case "ResetCumulativeLoss":
19888
+ case "ScheduleTokenLiquidationThresholdRamp":
19889
+ case "SetBorrowingLimits":
19890
+ case "SetBotList":
19891
+ case "SetCreditFacade":
19892
+ case "SetExpirationDate":
19893
+ case "SetMaxCumulativeLoss":
19894
+ case "SetMaxDebtPerBlockMultiplier":
19895
+ case "SetMaxEnabledTokens":
19896
+ case "SetPriceOracle":
19897
+ case "SetTokenLiquidationThreshold":
19898
+ case "Unpaused":
19899
+ case "UpdateFees":
19900
+ this.dirty = true;
19901
+ break;
19902
+ }
19903
+ }
19578
19904
  get state() {
19579
19905
  return {
19580
19906
  ...this.contractData,
@@ -19631,8 +19957,6 @@ var CreditConfiguratorContract = class extends BaseContract {
19631
19957
  }
19632
19958
  }
19633
19959
  };
19634
-
19635
- // src/sdk/market/CreditFacadeV300Contract.ts
19636
19960
  var CreditFacadeV300Contract = class extends BaseContract {
19637
19961
  state;
19638
19962
  constructor(sdk, { creditFacade, creditManager }) {
@@ -19659,6 +19983,35 @@ var CreditFacadeV300Contract = class extends BaseContract {
19659
19983
  isPaused: creditFacade.isPaused
19660
19984
  };
19661
19985
  }
19986
+ processLog(log) {
19987
+ switch (log.eventName) {
19988
+ case "AddCollateral":
19989
+ case "CloseCreditAccount":
19990
+ case "DecreaseDebt":
19991
+ case "Execute":
19992
+ case "FinishMultiCall":
19993
+ case "IncreaseDebt":
19994
+ case "LiquidateCreditAccount":
19995
+ case "NewController":
19996
+ case "OpenCreditAccount":
19997
+ case "Paused":
19998
+ case "StartMultiCall":
19999
+ case "Unpaused":
20000
+ case "WithdrawCollateral":
20001
+ this.dirty = true;
20002
+ break;
20003
+ }
20004
+ }
20005
+ encodeOnDemandPriceUpdates(updates) {
20006
+ return updates.map((u) => ({
20007
+ target: this.address,
20008
+ callData: viem.encodeFunctionData({
20009
+ abi: iCreditFacadeV3MulticallAbi,
20010
+ functionName: "onDemandPriceUpdate",
20011
+ args: [u.token, u.reserve, u.data]
20012
+ })
20013
+ }));
20014
+ }
19662
20015
  liquidateCreditAccount(ca, to, calls) {
19663
20016
  return this.createRawTx({
19664
20017
  functionName: "liquidateCreditAccount",
@@ -19715,8 +20068,6 @@ var CreditFacadeV300Contract = class extends BaseContract {
19715
20068
  }
19716
20069
  }
19717
20070
  };
19718
-
19719
- // src/sdk/market/CreditFacadeV310Contract.ts
19720
20071
  var CreditFacadeV310Contract = class extends BaseContract {
19721
20072
  state;
19722
20073
  constructor(sdk, { creditFacade, creditManager }) {
@@ -19743,6 +20094,39 @@ var CreditFacadeV310Contract = class extends BaseContract {
19743
20094
  isPaused: creditFacade.isPaused
19744
20095
  };
19745
20096
  }
20097
+ processLog(log) {
20098
+ switch (log.eventName) {
20099
+ case "AddCollateral":
20100
+ case "CloseCreditAccount":
20101
+ case "Execute":
20102
+ case "FinishMultiCall":
20103
+ case "LiquidateCreditAccount":
20104
+ case "OpenCreditAccount":
20105
+ case "PartiallyLiquidateCreditAccount":
20106
+ case "StartMultiCall":
20107
+ case "WithdrawCollateral":
20108
+ case "WithdrawPhantomToken":
20109
+ this.dirty = true;
20110
+ break;
20111
+ }
20112
+ }
20113
+ encodeOnDemandPriceUpdates(updates) {
20114
+ return [
20115
+ {
20116
+ target: this.address,
20117
+ callData: viem.encodeFunctionData({
20118
+ abi: iCreditFacadeV310MulticallAbi,
20119
+ functionName: "onDemandPriceUpdates",
20120
+ args: [
20121
+ updates.map((u) => ({
20122
+ priceFeed: u.priceFeed,
20123
+ data: u.data
20124
+ }))
20125
+ ]
20126
+ })
20127
+ }
20128
+ ];
20129
+ }
19746
20130
  liquidateCreditAccount(ca, to, calls) {
19747
20131
  return this.createRawTx({
19748
20132
  functionName: "liquidateCreditAccount",
@@ -19798,14 +20182,23 @@ var CreditManagerContract = class extends BaseContract {
19798
20182
  /**
19799
20183
  * Mapping targetContract => adapter
19800
20184
  */
19801
- #adapters;
19802
- constructor(sdk, { creditManager, creditFacade }, pool) {
20185
+ adapters = {};
20186
+ constructor(sdk, { creditManager, creditFacade, adapters }, pool) {
19803
20187
  super(sdk, {
19804
20188
  ...creditManager.baseParams,
19805
20189
  name: `CreditManagerV3(${creditManager.name})`,
19806
20190
  abi: creditManagerV3Abi
19807
20191
  });
19808
20192
  const { collateralTokens, liquidationThresholds } = creditManager;
20193
+ for (const adapterData of adapters) {
20194
+ try {
20195
+ const adapter = createAdapter(this.sdk, adapterData);
20196
+ adapter.name = `${adapter.name}(${this.name})`;
20197
+ this.adapters[adapter.targetContract] = adapter;
20198
+ } catch (e) {
20199
+ throw new Error(`cannot attach adapter: ${e}`, { cause: e });
20200
+ }
20201
+ }
19809
20202
  this.state = {
19810
20203
  ...this.contractData,
19811
20204
  accountFactory: creditManager.accountFactory,
@@ -19824,33 +20217,20 @@ var CreditManagerContract = class extends BaseContract {
19824
20217
  feeLiquidationExpired: creditManager.feeLiquidationExpired,
19825
20218
  liquidationDiscountExpired: creditManager.liquidationDiscountExpired,
19826
20219
  quotedTokensMask: 0n,
19827
- contractsToAdapters: {},
20220
+ contractsToAdapters: Object.fromEntries(
20221
+ adapters.map((a) => [a.targetContract, a.baseParams.addr])
20222
+ ),
19828
20223
  creditAccounts: [],
19829
20224
  // [...result[5].result!],
19830
20225
  name: creditManager.name
19831
20226
  };
19832
20227
  }
19833
- attachAdapters(adapters) {
19834
- this.#adapters = {};
19835
- for (const adapterData of adapters) {
19836
- try {
19837
- const adapter = createAdapter(this.sdk, adapterData);
19838
- adapter.name = `${adapter.name}(${this.name})`;
19839
- this.adapters[adapter.targetContract] = adapter;
19840
- } catch (e) {
19841
- this.logger?.warn(`cannot attach adapter: ${e}`);
19842
- }
19843
- }
19844
- this.state.contractsToAdapters = Object.fromEntries(
19845
- adapters.map((a) => [a.targetContract, a.baseParams.addr])
19846
- );
19847
- this.logger?.debug(`attached ${adapters.length} adapters`);
19848
- }
19849
- get adapters() {
19850
- if (!this.#adapters) {
19851
- throw new Error("adapters not loaded");
20228
+ processLog(log) {
20229
+ switch (log.eventName) {
20230
+ case "SetCreditConfigurator":
20231
+ this.dirty = true;
20232
+ break;
19852
20233
  }
19853
- return this.#adapters;
19854
20234
  }
19855
20235
  get collateralTokens() {
19856
20236
  return Object.keys(this.state.collateralTokens);
@@ -19858,7 +20238,7 @@ var CreditManagerContract = class extends BaseContract {
19858
20238
  };
19859
20239
 
19860
20240
  // src/sdk/market/CreditFactory.ts
19861
- var CreditFactory = class {
20241
+ var CreditFactory = class extends SDKConstruct {
19862
20242
  name;
19863
20243
  pool;
19864
20244
  underlying;
@@ -19870,6 +20250,7 @@ var CreditFactory = class {
19870
20250
  creditFacade;
19871
20251
  creditConfigurator;
19872
20252
  constructor(sdk, marketData, index) {
20253
+ super(sdk);
19873
20254
  const { creditManagers, pool, emergencyLiquidators } = marketData;
19874
20255
  const creditManager = creditManagers[index];
19875
20256
  const { name, collateralTokens, liquidationThresholds } = creditManager.creditManager;
@@ -19896,6 +20277,9 @@ var CreditFactory = class {
19896
20277
  const tvlUSD = 0n;
19897
20278
  return { tvl, tvlUSD };
19898
20279
  }
20280
+ get dirty() {
20281
+ return this.creditFacade.dirty || this.creditManager.dirty || this.creditConfigurator.dirty;
20282
+ }
19899
20283
  get state() {
19900
20284
  return {
19901
20285
  creditFacade: this.creditFacade.state,
@@ -19952,6 +20336,21 @@ var GaugeContract = class extends BaseContract {
19952
20336
  quotaParams
19953
20337
  };
19954
20338
  }
20339
+ processLog(log) {
20340
+ switch (log.eventName) {
20341
+ case "AddQuotaToken":
20342
+ case "NewController":
20343
+ case "Paused":
20344
+ case "SetFrozenEpoch":
20345
+ case "SetQuotaTokenParams":
20346
+ case "Unpaused":
20347
+ case "Unvote":
20348
+ case "UpdateEpoch":
20349
+ case "Vote":
20350
+ this.dirty = true;
20351
+ break;
20352
+ }
20353
+ }
19955
20354
  };
19956
20355
  var LinearModelContract = class extends BaseContract {
19957
20356
  state;
@@ -19993,11 +20392,11 @@ var LinearModelContract = class extends BaseContract {
19993
20392
  };
19994
20393
  }
19995
20394
  };
20395
+
20396
+ // src/sdk/market/PoolContract.ts
19996
20397
  var abi18 = poolV3Abi;
19997
20398
  var PoolContract = class extends BaseContract {
19998
20399
  state;
19999
- // Contracts
20000
- hasOperation = false;
20001
20400
  constructor(sdk, data) {
20002
20401
  super(sdk, {
20003
20402
  ...data.baseParams,
@@ -20021,12 +20420,9 @@ var PoolContract = class extends BaseContract {
20021
20420
  withdrawFee: Number(data.withdrawFee)
20022
20421
  };
20023
20422
  }
20024
- parseLog(log) {
20025
- const parsedLog = viem.parseEventLogs({
20026
- abi: this.abi,
20027
- logs: [log]
20028
- })[0];
20029
- switch (parsedLog.eventName) {
20423
+ processLog(log) {
20424
+ switch (log.eventName) {
20425
+ // TODO: do we really mark all events?
20030
20426
  case "SetCreditManagerDebtLimit":
20031
20427
  case "Repay":
20032
20428
  case "Borrow":
@@ -20034,7 +20430,18 @@ var PoolContract = class extends BaseContract {
20034
20430
  case "Withdraw":
20035
20431
  case "SetTotalDebtLimit":
20036
20432
  case "SetWithdrawFee":
20037
- this.hasOperation = true;
20433
+ case "AddCreditManager":
20434
+ case "Approval":
20435
+ case "EIP712DomainChanged":
20436
+ case "IncurUncoveredLoss":
20437
+ case "NewController":
20438
+ case "Paused":
20439
+ case "Refer":
20440
+ case "SetInterestRateModel":
20441
+ case "SetPoolQuotaKeeper":
20442
+ case "Transfer":
20443
+ case "Unpaused":
20444
+ this.dirty = true;
20038
20445
  break;
20039
20446
  }
20040
20447
  }
@@ -20075,24 +20482,41 @@ var PoolQuotaKeeperContract = class extends BaseContract {
20075
20482
  )
20076
20483
  };
20077
20484
  }
20485
+ processLog(log) {
20486
+ switch (log.eventName) {
20487
+ case "AddCreditManager":
20488
+ case "AddQuotaToken":
20489
+ case "NewController":
20490
+ case "Paused":
20491
+ case "SetGauge":
20492
+ case "SetQuotaIncreaseFee":
20493
+ case "SetTokenLimit":
20494
+ case "Unpaused":
20495
+ case "UpdateQuota":
20496
+ case "UpdateTokenQuotaRate":
20497
+ this.dirty = true;
20498
+ break;
20499
+ }
20500
+ }
20078
20501
  };
20079
20502
 
20080
20503
  // src/sdk/market/PoolFactory.ts
20081
- var PoolFactory = class {
20504
+ var PoolFactory = class extends SDKConstruct {
20082
20505
  underlying;
20083
- poolContract;
20084
- pqkContract;
20085
- gaugeContract;
20506
+ pool;
20507
+ pqk;
20508
+ gauge;
20086
20509
  linearModel;
20087
20510
  constructor(sdk, data) {
20511
+ super(sdk);
20088
20512
  this.underlying = data.pool.underlying;
20089
- this.poolContract = new PoolContract(sdk, data.pool);
20090
- this.pqkContract = new PoolQuotaKeeperContract(
20513
+ this.pool = new PoolContract(sdk, data.pool);
20514
+ this.pqk = new PoolQuotaKeeperContract(
20091
20515
  sdk,
20092
20516
  data.pool,
20093
20517
  data.poolQuotaKeeper
20094
20518
  );
20095
- this.gaugeContract = new GaugeContract(sdk, data.pool, data.rateKeeper);
20519
+ this.gauge = new GaugeContract(sdk, data.pool, data.rateKeeper);
20096
20520
  const irModelAddr = data.interestRateModel.baseParams.addr;
20097
20521
  if (sdk.interestRateModels.has(irModelAddr)) {
20098
20522
  this.linearModel = sdk.interestRateModels.mustGet(
@@ -20104,12 +20528,15 @@ var PoolFactory = class {
20104
20528
  this.linearModel = linearModel;
20105
20529
  }
20106
20530
  }
20531
+ get dirty() {
20532
+ return this.pool.dirty || this.gauge.dirty || this.pqk.dirty || this.linearModel.dirty;
20533
+ }
20107
20534
  get state() {
20108
20535
  return {
20109
- pool: this.poolContract.state,
20110
- poolQuotaKeeper: this.pqkContract.state,
20536
+ pool: this.pool.state,
20537
+ poolQuotaKeeper: this.pqk.state,
20111
20538
  linearModel: this.linearModel.state,
20112
- gauge: this.gaugeContract.state
20539
+ gauge: this.gauge.state
20113
20540
  };
20114
20541
  }
20115
20542
  };
@@ -20203,9 +20630,9 @@ async function simulateMulticall(client, parameters) {
20203
20630
  let currentChunk = 0;
20204
20631
  let currentChunkSize = 0;
20205
20632
  for (const contract of contracts) {
20206
- const { abi: abi19, address, args, functionName } = contract;
20633
+ const { abi: abi20, address, args, functionName } = contract;
20207
20634
  try {
20208
- const callData = viem.encodeFunctionData({ abi: abi19, args, functionName });
20635
+ const callData = viem.encodeFunctionData({ abi: abi20, args, functionName });
20209
20636
  currentChunkSize += (callData.length - 2) / 2;
20210
20637
  if (
20211
20638
  // Check if batching is enabled.
@@ -20227,7 +20654,7 @@ async function simulateMulticall(client, parameters) {
20227
20654
  ];
20228
20655
  } catch (err) {
20229
20656
  const error = viem.getContractError(err, {
20230
- abi: abi19,
20657
+ abi: abi20,
20231
20658
  address,
20232
20659
  args,
20233
20660
  docsPath: "/docs/contract/multicall",
@@ -20284,12 +20711,12 @@ async function simulateMulticall(client, parameters) {
20284
20711
  for (let j = 0; j < aggregate3Result.length; j++) {
20285
20712
  const { returnData, success } = aggregate3Result[j];
20286
20713
  const { callData } = chunkedCalls[i][j];
20287
- const { abi: abi19, address, functionName, args } = contracts[results.length];
20714
+ const { abi: abi20, address, functionName, args } = contracts[results.length];
20288
20715
  try {
20289
20716
  if (callData === "0x") throw new viem.AbiDecodingZeroDataError();
20290
20717
  if (!success) throw new viem.RawContractError({ data: returnData });
20291
20718
  const result2 = viem.decodeFunctionResult({
20292
- abi: abi19,
20719
+ abi: abi20,
20293
20720
  args,
20294
20721
  data: returnData,
20295
20722
  functionName
@@ -20297,7 +20724,7 @@ async function simulateMulticall(client, parameters) {
20297
20724
  results.push(allowFailure ? { result: result2, status: "success" } : result2);
20298
20725
  } catch (err) {
20299
20726
  const error = viem.getContractError(err, {
20300
- abi: abi19,
20727
+ abi: abi20,
20301
20728
  address,
20302
20729
  args,
20303
20730
  docsPath: "/docs/contract/multicall",
@@ -21201,6 +21628,18 @@ var PriceOracleContract = class extends BaseContract {
21201
21628
  `Got ${Object.keys(this.mainPriceFeeds).length} main and ${Object.keys(this.reservePriceFeeds).length} reserve price feeds`
21202
21629
  );
21203
21630
  }
21631
+ processLog(log) {
21632
+ switch (log.eventName) {
21633
+ case "NewController":
21634
+ case "Paused":
21635
+ case "SetPriceFeed":
21636
+ case "SetReservePriceFeed":
21637
+ case "SetReservePriceFeedStatus":
21638
+ case "Unpaused":
21639
+ this.dirty = true;
21640
+ break;
21641
+ }
21642
+ }
21204
21643
  /**
21205
21644
  * Returns main and reserve price feeds for given tokens
21206
21645
  * @param tokens
@@ -21252,6 +21691,7 @@ var PriceOracleContract = class extends BaseContract {
21252
21691
  });
21253
21692
  const data = args[0];
21254
21693
  result.push({
21694
+ priceFeed,
21255
21695
  token,
21256
21696
  reserve,
21257
21697
  data
@@ -21391,12 +21831,13 @@ var priceFeedToTicker = {
21391
21831
  };
21392
21832
 
21393
21833
  // src/sdk/market/MarketFactory.ts
21394
- var MarketFactory = class {
21834
+ var MarketFactory = class extends SDKConstruct {
21395
21835
  riskCurator;
21396
21836
  poolFactory;
21397
21837
  priceOracle;
21398
21838
  creditManagers = [];
21399
21839
  constructor(sdk, marketData) {
21840
+ super(sdk);
21400
21841
  this.riskCurator = marketData.owner;
21401
21842
  for (const t of marketData.tokens) {
21402
21843
  sdk.marketRegister.tokensMeta.upsert(t.addr, t);
@@ -21412,6 +21853,9 @@ var MarketFactory = class {
21412
21853
  marketData.pool.underlying
21413
21854
  );
21414
21855
  }
21856
+ get dirty() {
21857
+ return this.poolFactory.dirty || this.priceOracle.dirty || this.creditManagers.some((cm) => cm.dirty);
21858
+ }
21415
21859
  get state() {
21416
21860
  return {
21417
21861
  pool: this.poolFactory.state,
@@ -21421,22 +21865,72 @@ var MarketFactory = class {
21421
21865
  }
21422
21866
  };
21423
21867
 
21868
+ // src/sdk/market/MarketConfiguratorContract.ts
21869
+ var abi19 = iMarketConfiguratorV310Abi;
21870
+ var MarketConfiguratorContract = class extends BaseContract {
21871
+ constructor(sdk, address) {
21872
+ super(sdk, {
21873
+ abi: abi19,
21874
+ addr: address,
21875
+ contractType: AP_MARKET_CONFIGURATOR,
21876
+ version: 0
21877
+ });
21878
+ }
21879
+ processLog(log) {
21880
+ switch (log.eventName) {
21881
+ // case "DeployDegenNFT":
21882
+ // case "SetName":
21883
+ // case "SetPriceFeedFromStore":
21884
+ // case "SetReservePriceFeedFromStore":
21885
+ case "RemoveMarket":
21886
+ case "CreateMarket":
21887
+ this.dirty = true;
21888
+ break;
21889
+ }
21890
+ }
21891
+ };
21892
+
21424
21893
  // src/sdk/market/MarketRegister.ts
21425
21894
  var MarketRegister = class extends SDKConstruct {
21426
21895
  #logger;
21896
+ #curators;
21427
21897
  /**
21428
- * Mapping pool.name -> MarketFactory
21898
+ * Mapping pool.address -> MarketFactory
21429
21899
  */
21430
- #markets = {};
21900
+ #markets = new AddressMap();
21431
21901
  /**
21432
21902
  * Token metadata such as symbol and decimals, common across all markets
21433
21903
  */
21434
21904
  tokensMeta = new AddressMap();
21905
+ // TODO: MarketRegister can be this contract, but v3.0 does not have it
21906
+ marketConfigurator;
21435
21907
  constructor(sdk) {
21436
21908
  super(sdk);
21437
21909
  this.#logger = childLogger("MarketRegister", sdk.logger);
21910
+ try {
21911
+ const mkAddr = this.sdk.addressProvider.getLatestVersion(
21912
+ AP_MARKET_CONFIGURATOR
21913
+ );
21914
+ this.marketConfigurator = new MarketConfiguratorContract(sdk, mkAddr);
21915
+ } catch (e) {
21916
+ this.#logger?.warn(e);
21917
+ }
21438
21918
  }
21439
21919
  async loadMarkets(curators) {
21920
+ this.#curators = curators;
21921
+ await this.#loadMarkets(curators, []);
21922
+ }
21923
+ async syncState() {
21924
+ if (this.marketConfigurator?.dirty) {
21925
+ await this.#loadMarkets(this.curators, []);
21926
+ return;
21927
+ }
21928
+ const pools = this.markets.filter((m) => m.dirty).map((m) => m.poolFactory.pool.address);
21929
+ if (pools.length) {
21930
+ await this.#loadMarkets([], pools);
21931
+ }
21932
+ }
21933
+ async #loadMarkets(curators, pools) {
21440
21934
  this.#logger?.debug("loading markets");
21441
21935
  const marketCompressorAddress = this.sdk.addressProvider.getAddress(
21442
21936
  AP_MARKET_COMPRESSOR,
@@ -21449,7 +21943,7 @@ var MarketRegister = class extends SDKConstruct {
21449
21943
  args: [
21450
21944
  {
21451
21945
  curators,
21452
- pools: [],
21946
+ pools,
21453
21947
  underlying: ADDRESS_0X0
21454
21948
  }
21455
21949
  ],
@@ -21458,44 +21952,17 @@ var MarketRegister = class extends SDKConstruct {
21458
21952
  gas: 500000000n
21459
21953
  });
21460
21954
  for (const data of markets) {
21461
- this.#markets[data.pool.name] = new MarketFactory(this.sdk, data);
21955
+ this.#markets.upsert(
21956
+ data.pool.baseParams.addr,
21957
+ new MarketFactory(this.sdk, data)
21958
+ );
21462
21959
  }
21463
21960
  this.#logger?.info(`loaded ${markets.length} markets`);
21464
21961
  }
21465
- /**
21466
- * Loads adapter state for all attached credit managers
21467
- */
21468
- async loadAdapters() {
21469
- const adaperCompressorAddr = this.sdk.addressProvider.getLatestVersion(
21470
- AP_ADAPTER_COMPRESSOR
21471
- );
21472
- const resp = await simulateMulticall(this.sdk.provider.publicClient, {
21473
- contracts: this.creditManagers.map((cm) => ({
21474
- abi: iAdapterCompressorAbi,
21475
- address: adaperCompressorAddr,
21476
- functionName: "getContractAdapters",
21477
- args: [cm.creditManager.address]
21478
- })),
21479
- allowFailure: false,
21480
- gas: 550000000n
21481
- });
21482
- for (let i = 0; i < this.creditManagers.length; i++) {
21483
- const cm = this.creditManagers[i];
21484
- cm.creditManager.attachAdapters(resp[i]);
21485
- }
21486
- }
21487
21962
  get state() {
21488
- return Object.values(this.#markets).map((market) => market.state);
21489
- }
21490
- get poolState() {
21491
- return Object.values(this.#markets).map((market) => market.poolFactory.state);
21963
+ return this.markets.map((market) => market.state);
21492
21964
  }
21493
- get creditManagerState() {
21494
- return Object.values(this.#markets).flatMap(
21495
- (market) => market.creditManagers.map((cm) => cm.state)
21496
- );
21497
- }
21498
- getPoolFactories() {
21965
+ get pools() {
21499
21966
  return this.markets.map((market) => market.poolFactory);
21500
21967
  }
21501
21968
  get creditManagers() {
@@ -21512,7 +21979,7 @@ var MarketRegister = class extends SDKConstruct {
21512
21979
  throw new Error(`cannot find credit manager ${creditManager}`);
21513
21980
  }
21514
21981
  findByCreditManager(creditManager) {
21515
- const market = Object.values(this.#markets).find(
21982
+ const market = this.markets.find(
21516
21983
  (m) => m.creditManagers.some(
21517
21984
  (cm) => cm.creditManager.address.toLowerCase() === creditManager.toLowerCase()
21518
21985
  )
@@ -21523,7 +21990,7 @@ var MarketRegister = class extends SDKConstruct {
21523
21990
  return market;
21524
21991
  }
21525
21992
  get markets() {
21526
- return Object.values(this.#markets);
21993
+ return Array.from(this.#markets.values());
21527
21994
  }
21528
21995
  async tvl() {
21529
21996
  const creditManagers = this.creditManagers;
@@ -21537,6 +22004,12 @@ var MarketRegister = class extends SDKConstruct {
21537
22004
  { tvl: 0n, tvlUSD: 0n }
21538
22005
  );
21539
22006
  }
22007
+ get curators() {
22008
+ if (!this.#curators) {
22009
+ throw new Error(`market register has no markets loaded`);
22010
+ }
22011
+ return this.#curators;
22012
+ }
21540
22013
  };
21541
22014
 
21542
22015
  // src/sdk/accounts/CreditAccountsService.ts
@@ -21766,14 +22239,7 @@ var CreditAccountsService = class extends SDKConstruct {
21766
22239
  async getPriceUpdatesForFacade(acc) {
21767
22240
  const cm = this.sdk.marketRegister.findCreditManager(acc.creditManager);
21768
22241
  const updates = await this.getOnDemandPriceUpdates(acc);
21769
- return updates.map(({ token, reserve, data }) => ({
21770
- target: cm.creditFacade.address,
21771
- callData: viem.encodeFunctionData({
21772
- abi: iCreditFacadeV3MulticallAbi,
21773
- functionName: "onDemandPriceUpdate",
21774
- args: [token, reserve, data]
21775
- })
21776
- }));
22242
+ return cm.creditFacade.encodeOnDemandPriceUpdates(updates);
21777
22243
  }
21778
22244
  async #prepareCloseCreditAccount(ca, cm, assetsToKeep, to, slippage = 50n) {
21779
22245
  const closePath = await this.sdk.router.findBestClosePath(
@@ -21854,7 +22320,7 @@ var CreditAccountsService = class extends SDKConstruct {
21854
22320
  * Returns addresses of pools of attached markets
21855
22321
  */
21856
22322
  get pools() {
21857
- return this.sdk.marketRegister.poolState.map((p) => p.pool.address);
22323
+ return this.sdk.marketRegister.pools.map((p) => p.pool.address);
21858
22324
  }
21859
22325
  };
21860
22326
  var AddressProviderContractV3_1 = class extends BaseContract {
@@ -21929,7 +22395,7 @@ var AddressProviderContractV3_1 = class extends BaseContract {
21929
22395
  addresses: this.#addresses
21930
22396
  };
21931
22397
  }
21932
- parseLog(log) {
22398
+ processLog(log) {
21933
22399
  const parsedLog = viem.parseEventLogs({
21934
22400
  abi: this.abi,
21935
22401
  logs: [log]
@@ -21985,9 +22451,9 @@ var BotListContract = class extends BaseContract {
21985
22451
  fromBlock: 0n,
21986
22452
  toBlock
21987
22453
  });
21988
- logs.forEach((e) => this.parseLog(e));
22454
+ logs.forEach((e) => this.processLog(e));
21989
22455
  }
21990
- parseLog(log) {
22456
+ processLog(log) {
21991
22457
  const parsedLog = viem.parseEventLogs({
21992
22458
  abi: this.abi,
21993
22459
  logs: [log]
@@ -22376,6 +22842,7 @@ var GearboxSDK = class _GearboxSDK {
22376
22842
  // Block which was use for data query
22377
22843
  #currentBlock;
22378
22844
  #timestamp;
22845
+ #syncing = false;
22379
22846
  #gear;
22380
22847
  // Collection of core singleton contracts
22381
22848
  #addressProvider;
@@ -22471,11 +22938,6 @@ var GearboxSDK = class _GearboxSDK {
22471
22938
  this.logger?.info(`attach time: ${Date.now() - time} ms`);
22472
22939
  return this;
22473
22940
  }
22474
- parseLogs(logs) {
22475
- for (const log of logs) {
22476
- this.contracts.get(log.address)?.parseLog(log);
22477
- }
22478
- }
22479
22941
  /**
22480
22942
  * Converts contract call into some human-friendly string
22481
22943
  * @param address
@@ -22523,21 +22985,33 @@ var GearboxSDK = class _GearboxSDK {
22523
22985
  this.logger?.info(tvl);
22524
22986
  this.logger?.info(`Total TVL: ${formatBN(tvlUSD, 8)}`);
22525
22987
  }
22988
+ // TODO: timestamp is annoying - need to make second request to get block timestamp
22989
+ // TODO: make flag to prevent double syncing
22526
22990
  async syncState(toBlock, timestamp) {
22527
- if (toBlock <= this.currentBlock) {
22991
+ if (toBlock <= this.currentBlock || this.#syncing) {
22528
22992
  return;
22529
22993
  }
22530
- this.logger?.debug(`Syncing state to block ${toBlock}`);
22531
- const events = await this.provider.publicClient.getLogs({
22994
+ this.#syncing = true;
22995
+ this.logger?.debug(`syncing state to block ${toBlock}...`);
22996
+ const logs = await this.provider.publicClient.getLogs({
22532
22997
  fromBlock: BigInt(this.currentBlock),
22533
22998
  toBlock: BigInt(toBlock)
22534
22999
  });
22535
- this.parseLogs(events);
22536
- for (const pf of this.marketRegister.getPoolFactories()) {
22537
- if (pf.poolContract.hasOperation) ;
23000
+ for (const log of logs) {
23001
+ const contract = this.contracts.get(log.address);
23002
+ if (contract) {
23003
+ const event = viem.parseEventLogs({
23004
+ abi: contract.abi,
23005
+ logs: [log]
23006
+ })[0];
23007
+ contract.processLog(event);
23008
+ }
22538
23009
  }
23010
+ await this.marketRegister.syncState();
22539
23011
  this.#currentBlock = toBlock;
22540
23012
  this.#timestamp = timestamp;
23013
+ this.#syncing = false;
23014
+ this.logger?.debug(`synced state to block ${toBlock}`);
22541
23015
  }
22542
23016
  get provider() {
22543
23017
  return this.#provider;
@@ -22980,6 +23454,7 @@ exports.AP_GEAR_TOKEN = AP_GEAR_TOKEN;
22980
23454
  exports.AP_INFLATION_ATTACK_BLOCKER = AP_INFLATION_ATTACK_BLOCKER;
22981
23455
  exports.AP_INSOLVENCY_CHECKER = AP_INSOLVENCY_CHECKER;
22982
23456
  exports.AP_MARKET_COMPRESSOR = AP_MARKET_COMPRESSOR;
23457
+ exports.AP_MARKET_CONFIGURATOR = AP_MARKET_CONFIGURATOR;
22983
23458
  exports.AP_MULTI_PAUSE = AP_MULTI_PAUSE;
22984
23459
  exports.AP_PARTIAL_LIQUIDATION_BOT = AP_PARTIAL_LIQUIDATION_BOT;
22985
23460
  exports.AP_PRICE_FEED_COMPRESSOR = AP_PRICE_FEED_COMPRESSOR;