diff options
author | obscuren <geffobscura@gmail.com> | 2014-03-21 00:26:07 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-03-21 00:26:07 +0800 |
commit | 38ea6a6d5dffb7573b29541c2a6687145bdcc495 (patch) | |
tree | f3365ae19bd2c02b0e09c7bbd2201ec370d28bf6 /ethchain/vm_test.go | |
parent | 82d0f65dab253e215349ea685382bca9672378d8 (diff) | |
download | dexon-38ea6a6d5dffb7573b29541c2a6687145bdcc495.tar dexon-38ea6a6d5dffb7573b29541c2a6687145bdcc495.tar.gz dexon-38ea6a6d5dffb7573b29541c2a6687145bdcc495.tar.bz2 dexon-38ea6a6d5dffb7573b29541c2a6687145bdcc495.tar.lz dexon-38ea6a6d5dffb7573b29541c2a6687145bdcc495.tar.xz dexon-38ea6a6d5dffb7573b29541c2a6687145bdcc495.tar.zst dexon-38ea6a6d5dffb7573b29541c2a6687145bdcc495.zip |
Closures and vm based on closures
Status: Work in progress
Diffstat (limited to 'ethchain/vm_test.go')
-rw-r--r-- | ethchain/vm_test.go | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/ethchain/vm_test.go b/ethchain/vm_test.go index 6ceb0ff15..4e72c9249 100644 --- a/ethchain/vm_test.go +++ b/ethchain/vm_test.go @@ -8,6 +8,8 @@ import ( "testing" ) +/* + func TestRun(t *testing.T) { InitFees() @@ -104,3 +106,57 @@ func TestRun2(t *testing.T) { txData: tx.Data, }) } +*/ + +// XXX Full stack test +func TestRun3(t *testing.T) { + ethutil.ReadConfig("") + + db, _ := ethdb.NewMemDatabase() + state := NewState(ethutil.NewTrie(db, "")) + + script := Compile([]string{ + "PUSH", "300", + "MSTORE", + "PUSH", "300", + "MSTORE", + "PUSH", "62", + "PUSH", "0", + "RETURN", + }) + tx := NewTransaction(ContractAddr, ethutil.Big("100000000000000000000000000000000000000000000000000"), script) + addr := tx.Hash()[12:] + fmt.Printf("addr contract %x\n", addr) + contract := MakeContract(tx, state) + state.UpdateContract(addr, contract) + + callerScript := Compile([]string{ + "PUSH", "62", // REND + "PUSH", "0", // RSTART + "PUSH", "22", // MEND + "PUSH", "15", // MSTART + "PUSH", "1000", /// Gas + "PUSH", "0", /// value + "PUSH", string(addr), // Sender + "CALL", + }) + callerTx := NewTransaction(ContractAddr, ethutil.Big("100000000000000000000000000000000000000000000000000"), callerScript) + callerAddr := callerTx.Hash()[12:] + executer := NewTransaction(ContractAddr, ethutil.Big("10000"), nil) + + executer.Sign([]byte("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")) + callerClosure := NewClosure(executer, MakeContract(callerTx, state), state, big.NewInt(1000000000), new(big.Int)) + + vm := &Vm{} + vm.RunClosure(callerClosure, state, RuntimeVars{ + address: callerAddr, + blockNumber: 1, + sender: ethutil.FromHex("cd1722f3947def4cf144679da39c4c32bdc35681"), + prevHash: ethutil.FromHex("5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"), + coinbase: ethutil.FromHex("2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"), + time: 1, + diff: big.NewInt(256), + txValue: big.NewInt(10000), + txData: nil, + }) +} |