71 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package ethchain
 | 
						|
 | 
						|
import (
 | 
						|
	_ "bytes"
 | 
						|
	"fmt"
 | 
						|
	"github.com/ethereum/eth-go/ethdb"
 | 
						|
	"github.com/ethereum/eth-go/ethutil"
 | 
						|
	"github.com/obscuren/mutan"
 | 
						|
	"math/big"
 | 
						|
	"strings"
 | 
						|
	"testing"
 | 
						|
)
 | 
						|
 | 
						|
func TestRun4(t *testing.T) {
 | 
						|
	ethutil.ReadConfig("", ethutil.LogStd, "")
 | 
						|
 | 
						|
	db, _ := ethdb.NewMemDatabase()
 | 
						|
	state := NewState(ethutil.NewTrie(db, ""))
 | 
						|
 | 
						|
	callerScript, err := mutan.Compile(strings.NewReader(`
 | 
						|
	this.store[this.origin()] = 10**20
 | 
						|
	hello := "world"
 | 
						|
 | 
						|
	return lambda {
 | 
						|
		big to = this.data[0]
 | 
						|
		big from = this.origin()
 | 
						|
		big value = this.data[1]
 | 
						|
 | 
						|
		if this.store[from] >= value {
 | 
						|
			this.store[from] = this.store[from] - value
 | 
						|
			this.store[to] = this.store[to] + value
 | 
						|
		}
 | 
						|
	}
 | 
						|
	`), false)
 | 
						|
	if err != nil {
 | 
						|
		fmt.Println(err)
 | 
						|
	}
 | 
						|
	fmt.Println(Disassemble(callerScript))
 | 
						|
 | 
						|
	callerTx := NewContractCreationTx(ethutil.Big("0"), ethutil.Big("1000"), ethutil.Big("100"), callerScript)
 | 
						|
	callerTx.Sign([]byte("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"))
 | 
						|
 | 
						|
	// Contract addr as test address
 | 
						|
	gas := big.NewInt(1000)
 | 
						|
	gasPrice := big.NewInt(10)
 | 
						|
	account := NewAccount(ContractAddr, big.NewInt(10000000))
 | 
						|
	fmt.Println("account.Amount =", account.Amount)
 | 
						|
	c := MakeContract(callerTx, state)
 | 
						|
	e := account.ConvertGas(gas, gasPrice)
 | 
						|
	if e != nil {
 | 
						|
		fmt.Println(err)
 | 
						|
	}
 | 
						|
	fmt.Println("account.Amount =", account.Amount)
 | 
						|
	callerClosure := NewClosure(account, c, callerScript, state, gas, gasPrice)
 | 
						|
 | 
						|
	vm := NewVm(state, nil, RuntimeVars{
 | 
						|
		Origin:      account.Address(),
 | 
						|
		BlockNumber: 1,
 | 
						|
		PrevHash:    ethutil.FromHex("5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"),
 | 
						|
		Coinbase:    ethutil.FromHex("2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"),
 | 
						|
		Time:        1,
 | 
						|
		Diff:        big.NewInt(256),
 | 
						|
	})
 | 
						|
	var ret []byte
 | 
						|
	ret, e = callerClosure.Call(vm, nil, nil)
 | 
						|
	if e != nil {
 | 
						|
		fmt.Println("error", e)
 | 
						|
	}
 | 
						|
	fmt.Println(ret)
 | 
						|
}
 |