diff options
author | obscuren <geffobscura@gmail.com> | 2014-07-03 16:04:38 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-07-03 16:04:38 +0800 |
commit | 5b8dde96026b123147733bb5cdf88b7774725015 (patch) | |
tree | e4dee8139e908646a522abb317c8d27ec3c42808 /ethchain | |
parent | 81bc721c5cd0330547e18bfb710d68d60da4dd46 (diff) | |
download | dexon-5b8dde96026b123147733bb5cdf88b7774725015.tar.gz dexon-5b8dde96026b123147733bb5cdf88b7774725015.tar.zst dexon-5b8dde96026b123147733bb5cdf88b7774725015.zip |
Fixed CREATE op. Fixes #87
Diffstat (limited to 'ethchain')
-rw-r--r-- | ethchain/vm.go | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/ethchain/vm.go b/ethchain/vm.go index fa839b260..35443a6ba 100644 --- a/ethchain/vm.go +++ b/ethchain/vm.go @@ -35,7 +35,6 @@ func CalculateTxGas(initSize *big.Int) *big.Int { } type Vm struct { - txPool *TxPool // Stack for processing contracts stack *Stack // non-persistent key/value memory storage @@ -628,11 +627,11 @@ func (vm *Vm) RunClosure(closure *Closure) (ret []byte, err error) { ) // Generate a new address - addr := ethcrypto.CreateAddress(closure.caller.Address(), closure.caller.N()) - for i := int64(0); vm.state.GetStateObject(addr) != nil; i++ { - t := new(big.Int).Set(closure.caller.N()) - addr = ethcrypto.CreateAddress(closure.caller.Address(), t.Add(t, big.NewInt(i))) + addr := ethcrypto.CreateAddress(closure.object.Address(), closure.object.Nonce) + for i := uint64(0); vm.state.GetStateObject(addr) != nil; i++ { + ethcrypto.CreateAddress(closure.object.Address(), closure.object.Nonce+i) } + closure.object.Nonce++ vm.Printf(" (*) %x", addr).Endl() @@ -643,7 +642,7 @@ func (vm *Vm) RunClosure(closure *Closure) (ret []byte, err error) { contract.AddAmount(value) // Set the init script - contract.initScript = ethutil.BigD(mem.Get(offset.Int64(), size.Int64())).Bytes() + contract.initScript = mem.Get(offset.Int64(), size.Int64()) // Transfer all remaining gas to the new // contract so it may run the init script gas := new(big.Int).Set(closure.Gas) @@ -653,7 +652,7 @@ func (vm *Vm) RunClosure(closure *Closure) (ret []byte, err error) { c := NewClosure(closure, contract, contract.initScript, vm.state, gas, closure.Price) // Call the closure and set the return value as // main script. - c.Script, err, _ = Call(vm, c, nil) + contract.script, err, _ = Call(vm, c, nil) } else { err = fmt.Errorf("Insufficient funds to transfer value. Req %v, has %v", value, closure.object.Amount) } |