1- import type { Abi , Address } from "viem" ;
1+ import { type Abi , type Address , stringToHex } from "viem" ;
22
33import { BaseContract } from "../../base" ;
4+ import type { BaseContractOptions } from "../../base/BaseContract" ;
45import { NO_VERSION } from "../../constants" ;
6+ import type { GearboxSDK } from "../../GearboxSDK" ;
57import type { AddressProviderV3StateHuman } from "../../types" ;
8+ import type { AddressProviderState } from "./types" ;
69
710export default abstract class AbstractAddressProviderContract <
811 abi extends Abi | readonly unknown [ ] ,
912> extends BaseContract < abi > {
1013 #addresses: Record < string , Record < number , Address > > = { } ;
11- #versions: Record < string , Set < number > > = { } ;
1214 #latest: Record < string , number > = { } ;
1315
16+ constructor (
17+ sdk : GearboxSDK ,
18+ args : BaseContractOptions < abi > ,
19+ addresses : Record < string , Record < number , Address > > = { } ,
20+ ) {
21+ super ( sdk , args ) ;
22+ this . #addresses = addresses ;
23+ }
24+
1425 protected setInternalAddress ( key : string , address : Address , version : number ) {
1526 if ( ! this . #addresses[ key ] ) {
1627 this . #addresses[ key ] = { } ;
@@ -20,12 +31,6 @@ export default abstract class AbstractAddressProviderContract<
2031 if ( ! this . #latest[ key ] || version > this . #latest[ key ] ) {
2132 this . #latest[ key ] = version ;
2233 }
23-
24- if ( ! this . #versions[ key ] ) {
25- this . #versions[ key ] = new Set ( ) ;
26- }
27-
28- this . #versions[ key ] . add ( version ) ;
2934 }
3035
3136 public getAddress ( contract : string , version = NO_VERSION ) : Address {
@@ -53,6 +58,18 @@ export default abstract class AbstractAddressProviderContract<
5358 return this . getAddress ( contract , this . #latest[ contract ] ) ;
5459 }
5560
61+ public get state ( ) : AddressProviderState {
62+ return {
63+ baseParams : {
64+ addr : this . address ,
65+ version : BigInt ( this . version ) ,
66+ contractType : stringToHex ( this . contractType , { size : 32 } ) ,
67+ serializedParams : "0x0" ,
68+ } ,
69+ addresses : this . #addresses,
70+ } ;
71+ }
72+
5673 public override stateHuman ( raw = true ) : AddressProviderV3StateHuman {
5774 return {
5875 ...super . stateHuman ( raw ) ,
0 commit comments