mirror of
https://github.com/fluencelabs/tendermint
synced 2025-06-10 20:01:20 +00:00
state: ExecTx bug fixes for create contract
This commit is contained in:
@ -326,6 +326,7 @@ func (s *State) ExecTx(tx_ blk.Tx, runCall bool) error {
|
||||
err error = nil
|
||||
caller *vm.Account = toVMAccount(inAcc)
|
||||
callee *vm.Account = nil
|
||||
code []byte = nil
|
||||
appState = NewVMAppState(s) // TODO: confusing.
|
||||
params = vm.Params{
|
||||
BlockHeight: uint64(s.LastBlockHeight),
|
||||
@ -337,21 +338,23 @@ func (s *State) ExecTx(tx_ blk.Tx, runCall bool) error {
|
||||
|
||||
// Maybe create a new callee account if
|
||||
// this transaction is creating a new contract.
|
||||
if outAcc == nil {
|
||||
if outAcc != nil {
|
||||
callee = toVMAccount(outAcc)
|
||||
code = callee.Code
|
||||
} else {
|
||||
callee, err = appState.CreateAccount(caller)
|
||||
if err != nil {
|
||||
log.Debug("Error creating account")
|
||||
return err
|
||||
}
|
||||
code = tx.Data
|
||||
}
|
||||
|
||||
appState.UpdateAccount(caller) // because we adjusted by input above, and bumped nonce maybe.
|
||||
appState.UpdateAccount(callee) // because we adjusted by input above.
|
||||
vmach := vm.NewVM(appState, params, caller.Address)
|
||||
// NOTE: Call() transfers the value from caller to callee iff call succeeds.
|
||||
ret, err := vmach.Call(caller, callee, outAcc.Code, tx.Data, value, &gas)
|
||||
ret, err := vmach.Call(caller, callee, code, tx.Data, value, &gas)
|
||||
if err != nil {
|
||||
// Failure. Charge the gas fee. The 'value' was otherwise not transferred.
|
||||
inAcc.Balance -= tx.Fee
|
||||
|
@ -4,7 +4,6 @@ import (
|
||||
"code.google.com/p/go.crypto/ripemd160"
|
||||
"crypto/sha256"
|
||||
"github.com/tendermint/tendermint/vm/secp256k1"
|
||||
|
||||
"github.com/tendermint/tendermint/vm/sha3"
|
||||
|
||||
. "github.com/tendermint/tendermint/common"
|
||||
|
Reference in New Issue
Block a user