state: ExecTx bug fixes for create contract

This commit is contained in:
Ethan Buchman
2015-03-21 00:34:11 -07:00
parent c594c6ef7c
commit 6cd46b726d
2 changed files with 5 additions and 3 deletions

View File

@ -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

View File

@ -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"