Closures and vm based on closures
Status: Work in progress
This commit is contained in:
@ -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,
|
||||
})
|
||||
}
|
||||
|
Reference in New Issue
Block a user