fix: avoid racy memstores when estimating gas

This commit is contained in:
Aayush 2022-03-20 16:25:38 -04:00
parent a94e47c6be
commit 4af8b8ecf3

View File

@ -9,8 +9,6 @@ import (
"github.com/filecoin-project/lotus/chain/state" "github.com/filecoin-project/lotus/chain/state"
"github.com/filecoin-project/lotus/blockstore"
"github.com/filecoin-project/lotus/chain/rand" "github.com/filecoin-project/lotus/chain/rand"
"github.com/filecoin-project/go-address" "github.com/filecoin-project/go-address"
@ -223,12 +221,11 @@ func (sm *StateManager) CallWithGas(ctx context.Context, msg *types.Message, pri
return nil, err return nil, err
} }
buffStore := blockstore.NewBuffered(sm.cs.StateBlockstore())
vmopt := &vm.VMOpts{ vmopt := &vm.VMOpts{
StateBase: stateCid, StateBase: stateCid,
Epoch: vmHeight, Epoch: vmHeight,
Rand: r, Rand: r,
Bstore: buffStore, Bstore: sm.cs.StateBlockstore(),
Actors: sm.tsExec.NewActorRegistry(), Actors: sm.tsExec.NewActorRegistry(),
Syscalls: sm.Syscalls, Syscalls: sm.Syscalls,
CircSupplyCalc: sm.GetVMCirculatingSupply, CircSupplyCalc: sm.GetVMCirculatingSupply,
@ -255,7 +252,7 @@ func (sm *StateManager) CallWithGas(ctx context.Context, msg *types.Message, pri
return nil, xerrors.Errorf("flushing vm: %w", err) return nil, xerrors.Errorf("flushing vm: %w", err)
} }
stTree, err := state.LoadStateTree(cbor.NewCborStore(buffStore), stateCid) stTree, err := state.LoadStateTree(cbor.NewCborStore(sm.cs.StateBlockstore()), stateCid)
if err != nil { if err != nil {
return nil, xerrors.Errorf("loading state tree: %w", err) return nil, xerrors.Errorf("loading state tree: %w", err)
} }