Browse Source

state: ExecTx bug fixes for create contract

pull/33/head
Ethan Buchman 10 years ago
parent
commit
6cd46b726d
2 changed files with 5 additions and 3 deletions
  1. +5
    -2
      state/state.go
  2. +0
    -1
      vm/native.go

+ 5
- 2
state/state.go 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


+ 0
- 1
vm/native.go 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"


Loading…
Cancel
Save