fix sanbox bugs: set mgval to zero (#52)

* set mgval to zero

* readd value check

* fix eip1559's gasprice
This commit is contained in:
Zhang Guyu 2023-01-30 14:33:58 +08:00 committed by GitHub
parent 3f71d17360
commit d62e7c1745
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 4 deletions

View file

@ -195,15 +195,18 @@ func (st *StateTransition) to() common.Address {
func (st *StateTransition) buyGas() error { func (st *StateTransition) buyGas() error {
mgval := new(big.Int).SetUint64(st.msg.Gas()) mgval := new(big.Int).SetUint64(st.msg.Gas())
mgval = mgval.Mul(mgval, st.gasPrice) mgval = mgval.Mul(mgval, st.gasPrice)
if st.evm.Config.PreExec {
mgval = big.NewInt(0)
}
balanceCheck := mgval balanceCheck := mgval
if st.gasFeeCap != nil { if st.gasFeeCap != nil {
balanceCheck = new(big.Int).SetUint64(st.msg.Gas()) balanceCheck = new(big.Int).SetUint64(st.msg.Gas())
balanceCheck = balanceCheck.Mul(balanceCheck, st.gasFeeCap) balanceCheck = balanceCheck.Mul(balanceCheck, st.gasFeeCap)
if st.evm.Config.PreExec {
balanceCheck = big.NewInt(0)
}
balanceCheck.Add(balanceCheck, st.value) balanceCheck.Add(balanceCheck, st.value)
} }
if st.evm.Config.PreExec {
balanceCheck = big.NewInt(0)
}
if have, want := st.state.GetBalance(st.msg.From()), balanceCheck; have.Cmp(want) < 0 { if have, want := st.state.GetBalance(st.msg.From()), balanceCheck; have.Cmp(want) < 0 {
return fmt.Errorf("%w: address %v have %v want %v", ErrInsufficientFunds, st.msg.From().Hex(), have, want) return fmt.Errorf("%w: address %v have %v want %v", ErrInsufficientFunds, st.msg.From().Hex(), have, want)
} }

View file

@ -281,7 +281,7 @@ func (api *PreExecAPI) TraceMany(ctx context.Context, origins []PreArgs) ([]PreR
Input: origin.Input, Input: origin.Input,
} }
// Get a new instance of the EVM. // Get a new instance of the EVM.
msg, err := txArgs.ToMessage(0, nil) msg, err := txArgs.ToMessage(api.e.APIBackend.RPCGasCap(), header.BaseFee)
if err != nil { if err != nil {
preResList = append(preResList, PreResult{ preResList = append(preResList, PreResult{
Error: PreError{ Error: PreError{