@@ -13,6 +13,7 @@ import (
1313 "github.com/Gearbox-protocol/sdk-go/artifacts/creditAccountCompressor"
1414 dcv2 "github.com/Gearbox-protocol/sdk-go/artifacts/dataCompressor/dataCompressorv2"
1515 "github.com/Gearbox-protocol/sdk-go/artifacts/dataCompressor/mainnet"
16+ "github.com/Gearbox-protocol/sdk-go/artifacts/dataCompressorv3"
1617 dcv3 "github.com/Gearbox-protocol/sdk-go/artifacts/dataCompressorv3"
1718 "github.com/Gearbox-protocol/sdk-go/artifacts/multicall"
1819 "github.com/Gearbox-protocol/sdk-go/artifacts/poolCompressor"
@@ -264,6 +265,49 @@ func (dcw *DataCompressorWrapper) GetLatestv3DC() (common.Address, bool) {
264265 return dcs [len (dcs )- 1 ].address , true
265266}
266267
268+ func (dcw * DataCompressorWrapper ) Retry (blockNum int64 , account common.Address , v3Pods []dataCompressorv3.PriceOnDemand , v3PodCalls []multicall.Multicall2Call ) (dc.CreditAccountCallData , error ) {
269+ key , dcAddr := dcw .GetKeyAndAddress (core .NewVersion (300 ), blockNum , CREDIT_ACCOUNT_COMPRESSOR )
270+ opts := & bind.CallOpts {BlockNumber : big .NewInt (blockNum )}
271+ var newaccountData interface {}
272+ switch key {
273+ case NODC :
274+ return dc.CreditAccountCallData {}, NO_DC_FOUND_ERR
275+ case DCV3 :
276+ con , err := dataCompressorv3 .NewDataCompressorv3 (dcAddr , dcw .client )
277+ log .CheckFatal (err )
278+ data , err := con .GetCreditAccountData (opts , account , v3Pods )
279+ if err != nil || ! data .IsSuccessful {
280+ log .Warn ("after retry, getCreditAccoutn data is still not successful" , blockNum , account )
281+ return dc.CreditAccountCallData {}, err
282+ }
283+ case DCV310 :
284+ callData , err := core .GetAbi ("CreditAccountCompressor" ).Pack ("getCreditAccountData" , account )
285+ log .CheckFatal (err )
286+ v3PodCalls = append (v3PodCalls , multicall.Multicall2Call {
287+ Target : dcAddr ,
288+ CallData : callData ,
289+ })
290+ ans := core .MakeMultiCall (dcw .client , blockNum , false , v3PodCalls )
291+ data := ans [len (ans )- 1 ]
292+ if ! data .Success {
293+ log .Warn ("after retry, getCreditAccoutn data is still not successful" , blockNum , account )
294+ return dc.CreditAccountCallData {}, err
295+ }
296+ out , err := core .GetAbi ("CreditAccountCompressor" ).Unpack ("getCreditAccountData" , data .ReturnData )
297+ if err != nil {
298+ return dc.CreditAccountCallData {}, err
299+ }
300+ accountData := * abi .ConvertType (out [0 ], new (creditAccountCompressor.CreditAccountData )).(* creditAccountCompressor.CreditAccountData )
301+ newaccountData = accountData
302+ log .Info (utils .ToJson (newaccountData ))
303+ if ! accountData .Success {
304+ log .Warn ("after retry, getCreditAccoutn data is still not successful" , blockNum , account )
305+ return dc.CreditAccountCallData {}, err
306+ }
307+ }
308+ return dc .GetAccountDataFromDCCall (dcw .client , core .NULL_ADDR , blockNum , newaccountData )
309+ }
310+
267311// blockNum can't be zero
268312
269313func (dcw * DataCompressorWrapper ) GetCreditAccountData (version core.VersionType , blockNum int64 , creditManager common.Address , borrower common.Address , account common.Address ) (
0 commit comments