aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-02-18 19:09:36 +0800
committerobscuren <geffobscura@gmail.com>2014-02-18 19:09:36 +0800
commit6736c03711b3ef35285392c12a79bbf6e4cdf914 (patch)
tree23a75a4ece567ed4f692fe172194d881c594f2aa
parentab7dc924042b4cdb36ec7f2b26ab14c40d34ec9d (diff)
downloaddexon-6736c03711b3ef35285392c12a79bbf6e4cdf914.tar
dexon-6736c03711b3ef35285392c12a79bbf6e4cdf914.tar.gz
dexon-6736c03711b3ef35285392c12a79bbf6e4cdf914.tar.bz2
dexon-6736c03711b3ef35285392c12a79bbf6e4cdf914.tar.lz
dexon-6736c03711b3ef35285392c12a79bbf6e4cdf914.tar.xz
dexon-6736c03711b3ef35285392c12a79bbf6e4cdf914.tar.zst
dexon-6736c03711b3ef35285392c12a79bbf6e4cdf914.zip
Added editor for contracts
-rw-r--r--dev_console.go38
1 files changed, 36 insertions, 2 deletions
diff --git a/dev_console.go b/dev_console.go
index 6670d2a44..2e6b385df 100644
--- a/dev_console.go
+++ b/dev_console.go
@@ -2,6 +2,7 @@ package main
import (
"bufio"
+ "bytes"
"encoding/hex"
"errors"
"fmt"
@@ -78,6 +79,32 @@ func (i *Console) ValidateInput(action string, argumentLength int) error {
}
}
+func (i *Console) Editor() []string {
+ var buff bytes.Buffer
+ for {
+ reader := bufio.NewReader(os.Stdin)
+ str, _, err := reader.ReadLine()
+ if len(str) > 0 {
+ buff.Write(str)
+ buff.WriteString("\n")
+ }
+
+ if err != nil && err.Error() == "EOF" {
+ break
+ }
+ }
+
+ scanner := bufio.NewScanner(strings.NewReader(buff.String()))
+ scanner.Split(bufio.ScanLines)
+
+ var lines []string
+ for scanner.Scan() {
+ lines = append(lines, scanner.Text())
+ }
+
+ return lines
+}
+
func (i *Console) PrintRoot() {
root := ethutil.NewValue(i.trie.Root)
if len(root.Bytes()) != 0 {
@@ -169,10 +196,17 @@ func (i *Console) ParseInput(input string) bool {
fmt.Println("gettx: tx not found")
}
case "contract":
- contract := ethchain.NewTransaction([]byte{}, ethutil.Big(tokens[1]), []string{"PUSH", "1234"})
- fmt.Printf("%x\n", contract.Hash())
+ fmt.Println("Contract editor (Ctrl-D = done)")
+ code := i.Editor()
+
+ contract := ethchain.NewTransaction([]byte{}, ethutil.Big(tokens[1]), code)
+ data, _ := ethutil.Config.Db.Get([]byte("KeyRing"))
+ keyRing := ethutil.NewValueFromBytes(data)
+ contract.Sign(keyRing.Get(0).Bytes())
i.ethereum.TxPool.QueueTransaction(contract)
+
+ fmt.Printf("%x\n", contract.Hash())
case "exit", "quit", "q":
return false
case "help":