2014-02-24 13:10:45 +02:00
|
|
|
package ethchain
|
|
|
|
|
|
|
|
import (
|
2014-03-30 18:55:51 +02:00
|
|
|
_ "bytes"
|
2014-03-24 14:20:34 +02:00
|
|
|
"fmt"
|
2014-02-24 13:10:45 +02:00
|
|
|
"github.com/ethereum/eth-go/ethdb"
|
|
|
|
"github.com/ethereum/eth-go/ethutil"
|
|
|
|
"math/big"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
2014-03-24 14:20:34 +02:00
|
|
|
func TestRun4(t *testing.T) {
|
2014-06-27 17:56:45 +03:00
|
|
|
ethutil.ReadConfig(".ethtest", "/tmp/ethtest", "", "ETH")
|
2014-03-24 14:20:34 +02:00
|
|
|
|
|
|
|
db, _ := ethdb.NewMemDatabase()
|
|
|
|
state := NewState(ethutil.NewTrie(db, ""))
|
|
|
|
|
2014-06-30 21:03:31 +03:00
|
|
|
callerScript, err := ethutil.Compile(`
|
2014-05-25 16:13:54 +03:00
|
|
|
this.store[this.origin()] = 10**20
|
|
|
|
hello := "world"
|
2014-04-11 04:03:14 +03:00
|
|
|
|
2014-05-25 16:13:54 +03:00
|
|
|
return lambda {
|
|
|
|
big to = this.data[0]
|
|
|
|
big from = this.origin()
|
|
|
|
big value = this.data[1]
|
2014-04-20 02:31:01 +03:00
|
|
|
|
2014-05-25 16:13:54 +03:00
|
|
|
if this.store[from] >= value {
|
|
|
|
this.store[from] = this.store[from] - value
|
|
|
|
this.store[to] = this.store[to] + value
|
2014-04-20 02:31:01 +03:00
|
|
|
}
|
2014-05-25 16:13:54 +03:00
|
|
|
}
|
2014-06-30 21:03:31 +03:00
|
|
|
`)
|
2014-03-30 12:58:37 +02:00
|
|
|
if err != nil {
|
|
|
|
fmt.Println(err)
|
|
|
|
}
|
2014-05-25 16:13:54 +03:00
|
|
|
fmt.Println(Disassemble(callerScript))
|
2014-03-24 14:20:34 +02:00
|
|
|
|
2014-05-25 16:13:54 +03:00
|
|
|
callerTx := NewContractCreationTx(ethutil.Big("0"), ethutil.Big("1000"), ethutil.Big("100"), callerScript)
|
|
|
|
callerTx.Sign([]byte("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"))
|
2014-03-24 14:20:34 +02:00
|
|
|
|
|
|
|
// Contract addr as test address
|
2014-04-20 02:31:01 +03:00
|
|
|
gas := big.NewInt(1000)
|
|
|
|
gasPrice := big.NewInt(10)
|
2014-03-24 14:20:34 +02:00
|
|
|
account := NewAccount(ContractAddr, big.NewInt(10000000))
|
2014-04-20 02:31:01 +03:00
|
|
|
fmt.Println("account.Amount =", account.Amount)
|
2014-04-09 19:27:54 +03:00
|
|
|
c := MakeContract(callerTx, state)
|
2014-04-20 02:31:01 +03:00
|
|
|
e := account.ConvertGas(gas, gasPrice)
|
|
|
|
if e != nil {
|
|
|
|
fmt.Println(err)
|
|
|
|
}
|
|
|
|
fmt.Println("account.Amount =", account.Amount)
|
2014-05-25 16:13:54 +03:00
|
|
|
callerClosure := NewClosure(account, c, callerScript, state, gas, gasPrice)
|
2014-03-24 14:20:34 +02:00
|
|
|
|
2014-04-26 02:54:45 +03:00
|
|
|
vm := NewVm(state, nil, RuntimeVars{
|
2014-04-11 20:29:57 +03:00
|
|
|
Origin: account.Address(),
|
2014-06-30 21:03:31 +03:00
|
|
|
BlockNumber: big.NewInt(1),
|
2014-04-11 20:29:57 +03:00
|
|
|
PrevHash: ethutil.FromHex("5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"),
|
|
|
|
Coinbase: ethutil.FromHex("2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"),
|
|
|
|
Time: 1,
|
|
|
|
Diff: big.NewInt(256),
|
2014-03-24 14:20:34 +02:00
|
|
|
})
|
2014-05-25 16:13:54 +03:00
|
|
|
var ret []byte
|
2014-05-30 00:54:48 +03:00
|
|
|
ret, _, e = callerClosure.Call(vm, nil, nil)
|
2014-04-18 14:41:07 +03:00
|
|
|
if e != nil {
|
|
|
|
fmt.Println("error", e)
|
|
|
|
}
|
2014-05-25 16:13:54 +03:00
|
|
|
fmt.Println(ret)
|
2014-03-24 14:20:34 +02:00
|
|
|
}
|