aboutsummaryrefslogtreecommitdiffstats
path: root/ethereal/bindings.go
blob: e129ea6aff57dbcea3bd59361cec175514216861 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
package main

import (
    "encoding/json"
    "fmt"
    "os"
    "strconv"

    "github.com/ethereum/eth-go/ethchain"
    "github.com/ethereum/eth-go/ethlog"
    "github.com/ethereum/eth-go/ethpipe"
    "github.com/ethereum/eth-go/ethutil"
    "github.com/ethereum/go-ethereum/utils"
)

type plugin struct {
    Name string `json:"name"`
    Path string `json:"path"`
}

func (gui *Gui) Println(v ...interface{}) {
    gui.printLog(fmt.Sprintln(v...))
}

func (gui *Gui) Printf(format string, v ...interface{}) {
    gui.printLog(fmt.Sprintf(format, v...))
}

// Print function that logs directly to the GUI
func (gui *Gui) printLog(s string) {
    /*
        str := strings.TrimRight(s, "\n")
        lines := strings.Split(str, "\n")

        view := gui.getObjectByName("infoView")
        for _, line := range lines {
            view.Call("addLog", line)
        }
    */
}
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 (gui *Gui) SetCustomIdentifier(customIdentifier string) {
    gui.clientIdentity.SetCustomIdentifier(customIdentifier)
    gui.config.Save("id", customIdentifier)
}

func (gui *Gui) GetCustomIdentifier() string {
    return gui.clientIdentity.GetCustomIdentifier()
}

func (gui *Gui) ToggleTurboMining() {
    gui.miner.ToggleTurbo()
}

// functions that allow Gui to implement interface ethlog.LogSystem
func (gui *Gui) SetLogLevel(level ethlog.LogLevel) {
    gui.logLevel = level
    gui.stdLog.SetLogLevel(level)
    gui.config.Save("loglevel", level)
}

func (gui *Gui) GetLogLevel() ethlog.LogLevel {
    return gui.logLevel
}

func (self *Gui) AddPlugin(pluginPath string) {
    self.plugins[pluginPath] = plugin{Name: "SomeName", Path: pluginPath}

    json, _ := json.MarshalIndent(self.plugins, "", "    ")
    ethutil.WriteFile(ethutil.Config.ExecPath+"/plugins.json", json)
}

func (self *Gui) RemovePlugin(pluginPath string) {
    delete(self.plugins, pluginPath)

    json, _ := json.MarshalIndent(self.plugins, "", "    ")
    ethutil.WriteFile(ethutil.Config.ExecPath+"/plugins.json", json)
}

// this extra function needed to give int typecast value to gui widget
// that sets initial loglevel to default
func (gui *Gui) GetLogLevelInt() int {
    return int(gui.logLevel)
}
func (self *Gui) DumpState(hash, path string) {
    var stateDump []byte

    if len(hash) == 0 {
        stateDump = self.eth.StateManager().CurrentState().Dump()
    } else {
        var block *ethchain.Block
        if hash[0] == '#' {
            i, _ := strconv.Atoi(hash[1:])
            block = self.eth.BlockChain().GetBlockByNumber(uint64(i))
        } else {
            block = self.eth.BlockChain().GetBlock(ethutil.Hex2Bytes(hash))
        }

        if block == nil {
            logger.Infof("block err: not found %s\n", hash)
            return
        }

        stateDump = block.State().Dump()
    }

    file, err := os.OpenFile(path[7:], os.O_CREATE|os.O_RDWR, os.ModePerm)
    if err != nil {
        logger.Infoln("dump err: ", err)
        return
    }
    defer file.Close()

    logger.Infof("dumped state (%s) to %s\n", hash, path)

    file.Write(stateDump)
}
func (gui *Gui) ToggleMining() {
    var txt string
    if gui.eth.Mining {
        utils.StopMining(gui.eth)
        txt = "Start mining"

        gui.getObjectByName("miningLabel").Set("visible", false)
    } else {
        utils.StartMining(gui.eth)
        gui.miner = utils.GetMiner()
        txt = "Stop mining"

        gui.getObjectByName("miningLabel").Set("visible", true)
    }

    gui.win.Root().Set("miningButtonText", txt)
}