func (gui *Gui) Transact(recipient, value, gas, gasPrice, d string) (*ethpipe.JSReceipt, error) { var data string if len(recipient) == 0 { code, err := ethutil.Compile(d, false) if err != nil { return nil, err } data = ethutil.Bytes2Hex(code) } else { data = ethutil.Bytes2Hex(utils.FormatTransactionData(d)) } return gui.pipe.Transact(gui.privateKey(), recipient, value, gas, gasPrice, data) }
func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, dataStr string) { if !self.Db.done { self.Db.Q <- true } defer func() { if r := recover(); r != nil { self.Logf("compile FAULT: %v", r) } }() data := utils.FormatTransactionData(dataStr) var err error script := ethutil.StringToByteFunc(scriptStr, func(s string) (ret []byte) { ret, err = ethutil.Compile(s, false) return }) if err != nil { self.Logln(err) return } var ( gas = ethutil.Big(gasStr) gasPrice = ethutil.Big(gasPriceStr) value = ethutil.Big(valueStr) // Contract addr as test address keyPair = self.lib.eth.KeyManager().KeyPair() ) state := self.lib.eth.StateManager().TransState() account := self.lib.eth.StateManager().TransState().GetAccount(keyPair.Address()) contract := ethstate.NewStateObject([]byte{0}) contract.Balance = value self.SetAsm(script) block := self.lib.eth.BlockChain().CurrentBlock callerClosure := ethvm.NewClosure(ðstate.Message{}, account, contract, script, gas, gasPrice) env := utils.NewEnv(state, block, account.Address(), value) vm := ethvm.New(env) vm.Verbose = true vm.Dbg = self.Db self.vm = vm self.Db.done = false self.Logf("callsize %d", len(script)) go func() { ret, g, err := callerClosure.Call(vm, data) tot := new(big.Int).Mul(g, gasPrice) self.Logf("gas usage %v total price = %v (%v)", g, tot, ethutil.CurrencyToString(tot)) if err != nil { self.Logln("exited with errors:", err) } else { if len(ret) > 0 { self.Logf("exited: % x", ret) } else { self.Logf("exited: nil") } } state.Reset() if !self.Db.interrupt { self.Db.done = true } else { self.Db.interrupt = false } }() }