Changed opcode numbers and added missing opcodes

This commit is contained in:
obscuren 2014-06-12 11:19:32 +02:00
parent 6593c69424
commit b855e5f7df
4 changed files with 43 additions and 19 deletions

View File

@ -166,13 +166,9 @@ func (self *StateManager) ProcessTransaction(tx *Transaction, coinbase *StateObj
// Subtract the amount from the senders account
sender.SubAmount(totAmount)
fmt.Printf("state root after sender update %x\n", state.Root())
// Add the amount to receivers account which should conclude this transaction
receiver.AddAmount(tx.Value)
state.UpdateStateObject(receiver)
fmt.Printf("state root after receiver update %x\n", state.Root())
}
state.UpdateStateObject(sender)
@ -215,6 +211,8 @@ func (sm *StateManager) ApplyTransactions(coinbase []byte, state *State, block *
validTxs = append(validTxs, tx)
}
fmt.Println("################# MADE\n", receipts, "\n############################")
// Update the total gas used for the block (to be mined)
block.GasUsed = totalUsedGas
@ -250,6 +248,7 @@ func (sm *StateManager) ApplyTransaction(coinbase []byte, state *State, block *B
// as it's data provider.
contract := sm.MakeStateObject(state, tx)
if contract != nil {
fmt.Println(Disassemble(contract.Init()))
// Evaluate the initialization script
// and use the return value as the
// script section for the state object.
@ -323,6 +322,7 @@ func (sm *StateManager) ProcessBlock(state *State, parent, block *Block, dontRea
if !sm.bc.HasBlock(block.PrevHash) && sm.bc.CurrentBlock != nil {
return ParentError(block.PrevHash)
}
fmt.Println(block.Receipts())
// Process the transactions on to current block
sm.ApplyTransactions(block.Coinbase, state, parent, block.Transactions())

View File

@ -1,6 +1,7 @@
package ethchain
import (
"bytes"
"fmt"
"github.com/ethereum/eth-go/ethutil"
"github.com/obscuren/secp256k1-go"
@ -144,7 +145,8 @@ func (tx *Transaction) RlpValueDecode(decoder *ethutil.Value) {
tx.v = byte(decoder.Get(6).Uint())
tx.r = decoder.Get(7).Bytes()
tx.s = decoder.Get(8).Bytes()
if len(tx.Recipient) == 0 {
if bytes.Compare(tx.Recipient, ContractAddr) == 0 {
tx.contractCreation = true
}
}

View File

@ -1,5 +1,9 @@
package ethchain
import (
"fmt"
)
type OpCode int
// Op codes
@ -37,7 +41,10 @@ const (
CALLVALUE = 0x34
CALLDATALOAD = 0x35
CALLDATASIZE = 0x36
GASPRICE = 0x37
CALLDATACOPY = 0x37
CODESIZE = 0x38
CODECOPY = 0x39
GASPRICE = 0x3a
// 0x40 range - block operations
PREVHASH = 0x40
@ -48,18 +55,19 @@ const (
GASLIMIT = 0x45
// 0x50 range - 'storage' and execution
POP = 0x51
DUP = 0x52
SWAP = 0x53
MLOAD = 0x54
MSTORE = 0x55
MSTORE8 = 0x56
SLOAD = 0x57
SSTORE = 0x58
JUMP = 0x59
JUMPI = 0x5a
PC = 0x5b
MSIZE = 0x5c
POP = 0x50
DUP = 0x51
SWAP = 0x52
MLOAD = 0x53
MSTORE = 0x54
MSTORE8 = 0x55
SLOAD = 0x56
SSTORE = 0x57
JUMP = 0x58
JUMPI = 0x59
PC = 0x5a
MSIZE = 0x5b
GAS = 0x5c
// 0x60 range
PUSH1 = 0x60
@ -140,6 +148,9 @@ var opCodeToString = map[OpCode]string{
CALLVALUE: "CALLVALUE",
CALLDATALOAD: "CALLDATALOAD",
CALLDATASIZE: "CALLDATASIZE",
CALLDATACOPY: "CALLDATACOPY",
CODESIZE: "CODESIZE",
CODECOPY: "CODECOPY",
GASPRICE: "TXGASPRICE",
// 0x40 range - block operations
@ -162,6 +173,7 @@ var opCodeToString = map[OpCode]string{
JUMPI: "JUMPI",
PC: "PC",
MSIZE: "MSIZE",
GAS: "GAS",
// 0x60 range - push
PUSH1: "PUSH1",
@ -208,7 +220,12 @@ var opCodeToString = map[OpCode]string{
}
func (o OpCode) String() string {
return opCodeToString[o]
str := opCodeToString[o]
if len(str) == 0 {
return fmt.Sprintf("Missing opcode 0x%x", int(o))
}
return str
}
// Op codes for assembling

View File

@ -337,6 +337,9 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro
stack.Push(ethutil.BigD(data))
case CALLDATASIZE:
stack.Push(big.NewInt(int64(len(closure.Args))))
case CALLDATACOPY:
case CODESIZE:
case CODECOPY:
case GASPRICE:
stack.Push(closure.Price)
@ -423,6 +426,8 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro
stack.Push(pc)
case MSIZE:
stack.Push(big.NewInt(int64(mem.Len())))
case GAS:
stack.Push(closure.Gas)
// 0x60 range
case CREATE:
require(3)