Skip to content

Commit 754d634

Browse files
committed
feat: ini complete migration
1 parent 604c0b7 commit 754d634

File tree

4 files changed

+671
-190
lines changed

4 files changed

+671
-190
lines changed

estimator.go

Lines changed: 101 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"github.com/0xsequence/go-sequence/core"
2222
v1 "github.com/0xsequence/go-sequence/core/v1"
2323
v2 "github.com/0xsequence/go-sequence/core/v2"
24+
v3 "github.com/0xsequence/go-sequence/core/v3"
2425
"github.com/goware/cachestore"
2526
"github.com/goware/cachestore/memlru"
2627
)
@@ -75,6 +76,7 @@ var defaultEstimator = &Estimator{
7576
var gasEstimatorCode = hexutil.Encode(contracts.GasEstimator.DeployedBin)
7677
var walletGasEstimatorCode = hexutil.Encode(contracts.WalletGasEstimator.DeployedBin)
7778
var walletGasEstimatorCodeV2 = hexutil.Encode(contracts.V2.WalletGasEstimator.DeployedBin)
79+
var walletGasEstimatorCodeV3 = hexutil.Encode(contracts.V3.WalletGasEstimator.DeployedBin)
7880

7981
func NewEstimator() *Estimator {
8082
defaultCache, _ := memlru.NewWithSize[[]byte](defaultEstimatorCacheSize)
@@ -397,6 +399,26 @@ func (e *Estimator) BuildStubSignature(walletConfig core.WalletConfig, willSign,
397399
},
398400
map[common.Address]bool{address1: false, address2: true, address3: true},
399401
map[common.Address]bool{address1: true, address2: true, address3: true})
402+
} else if _, ok := walletConfig.(*v3.WalletConfig); ok {
403+
sig = e.BuildStubSignature(&v3.WalletConfig{
404+
Threshold_: 2,
405+
Tree: v3.WalletConfigTreeNodes(
406+
&v3.WalletConfigTreeAddressLeaf{
407+
Address: address1,
408+
Weight: 1,
409+
},
410+
&v3.WalletConfigTreeAddressLeaf{
411+
Address: address2,
412+
Weight: 1,
413+
},
414+
&v3.WalletConfigTreeAddressLeaf{
415+
Address: address3,
416+
Weight: 1,
417+
},
418+
),
419+
},
420+
map[common.Address]bool{address1: false, address2: true, address3: true},
421+
map[common.Address]bool{address1: true, address2: true, address3: true})
400422
}
401423

402424
return core.SignerSignatureTypeEIP1271, sig, nil
@@ -428,6 +450,17 @@ func (e *Estimator) BuildStubSignature(walletConfig core.WalletConfig, willSign,
428450
return nil
429451
}
430452
return encoded
453+
} else if confV3, ok := walletConfig.(*v3.WalletConfig); ok {
454+
sigV3, err := confV3.BuildRegularSignature(context.Background(), stubSigner, false)
455+
if err != nil {
456+
return nil
457+
}
458+
459+
encoded, err := sigV3.Data()
460+
if err != nil {
461+
return nil
462+
}
463+
return encoded
431464
} else {
432465
return nil
433466
}
@@ -457,6 +490,11 @@ func (e *Estimator) Estimate(ctx context.Context, provider *ethrpc.Provider, add
457490
walletContext.MainModuleAddress: {Code: walletGasEstimatorCodeV2},
458491
walletContext.MainModuleUpgradableAddress: {Code: walletGasEstimatorCodeV2},
459492
}
493+
} else if _, ok := walletConfig.(*v3.WalletConfig); ok {
494+
overrides = map[common.Address]*CallOverride{
495+
walletContext.MainModuleAddress: {Code: walletGasEstimatorCodeV3},
496+
walletContext.MainModuleUpgradableAddress: {Code: walletGasEstimatorCodeV3},
497+
}
460498
} else {
461499
return 0, fmt.Errorf("unknown wallet config type")
462500
}
@@ -500,6 +538,11 @@ func (e *Estimator) Estimate(ctx context.Context, provider *ethrpc.Provider, add
500538
if err != nil {
501539
return 0, err
502540
}
541+
} else if _, ok := walletConfig.(*v3.WalletConfig); ok {
542+
execData, err = contracts.V3.WalletMainModule.Encode("execute", encTxs, nonce, signature)
543+
if err != nil {
544+
return 0, err
545+
}
503546
}
504547

505548
estimated, err := e.EstimateCall(ctx, provider, &EstimateTransaction{
@@ -635,6 +678,63 @@ func V2Simulate(provider *ethrpc.Provider, wallet common.Address, transactions T
635678
return results, nil
636679
}
637680

681+
func V3Simulate(provider *ethrpc.Provider, wallet common.Address, transactions Transactions, block string, overrides map[common.Address]*CallOverride) ([]SimulateResult, error) {
682+
if block == "" {
683+
block = "latest"
684+
}
685+
686+
encoded, err := transactions.EncodedTransactions()
687+
if err != nil {
688+
return nil, err
689+
}
690+
691+
callData, err := contracts.V3.WalletGasEstimator.Encode("simulateExecute", encoded)
692+
if err != nil {
693+
return nil, err
694+
}
695+
696+
type ethCallParams struct {
697+
To common.Address `json:"to"`
698+
Data string `json:"data"`
699+
}
700+
701+
params := ethCallParams{
702+
To: wallet,
703+
Data: hexutil.Encode(callData),
704+
}
705+
706+
allOverrides := map[common.Address]*CallOverride{
707+
wallet: {Code: walletGasEstimatorCodeV3},
708+
}
709+
for address, override := range overrides {
710+
if address == wallet {
711+
return nil, fmt.Errorf("cannot override wallet address %v", wallet.Hex())
712+
}
713+
714+
allOverrides[address] = override
715+
}
716+
717+
var response string
718+
rpcCall := ethrpc.NewCallBuilder[string]("eth_call", nil, params, block, allOverrides)
719+
_, err = provider.Do(context.Background(), rpcCall.Into(&response))
720+
if err != nil {
721+
return nil, err
722+
}
723+
724+
resultsData, err := hexutil.Decode(response)
725+
if err != nil {
726+
return nil, err
727+
}
728+
729+
var results []SimulateResult
730+
err = contracts.V3.WalletGasEstimator.Decode(&results, "simulateExecute", resultsData)
731+
if err != nil {
732+
return nil, err
733+
}
734+
735+
return results, nil
736+
}
737+
638738
func Simulate(provider *ethrpc.Provider, wallet common.Address, transactions Transactions, block string, overrides map[common.Address]*CallOverride) ([]SimulateResult, error) {
639-
return V2Simulate(provider, wallet, transactions, block, overrides)
739+
return V3Simulate(provider, wallet, transactions, block, overrides)
640740
}

0 commit comments

Comments
 (0)