forked from mosaicnetworks/evm-lite
/
tendermint.go
92 lines (77 loc) · 2.26 KB
/
tendermint.go
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
package tendermint
import (
"fmt"
"os"
"github.com/bear987978897/evm-lite/src/config"
"github.com/bear987978897/evm-lite/src/service"
"github.com/bear987978897/evm-lite/src/state"
"github.com/sirupsen/logrus"
"github.com/tendermint/tendermint/libs/log"
node "github.com/tendermint/tendermint/node"
p2p "github.com/tendermint/tendermint/p2p"
rpcclient "github.com/tendermint/tendermint/rpc/client"
)
type Tendermint struct {
config *config.TmConfig
node *node.Node
ethService *service.Service
ethState *state.State
logger *logrus.Logger
rpcclient *rpcclient.HTTP
}
func NewTendermint(config *config.TmConfig, logger *logrus.Logger) *Tendermint {
return &Tendermint{
config: config,
logger: logger,
}
}
/*******************************************************************************
IMPLEMENT CONSENSUS INTERFACE
*******************************************************************************/
func (t *Tendermint) Init(state *state.State, service *service.Service) error {
t.logger.Debug("INIT")
realConfig := t.config.ToRealTmConfig()
abciApp := NewABCIProxy(state, t.logger)
logger := log.NewTMLogger(log.NewSyncWriter(os.Stdout))
node, err := DefaultNewNodeWithApp(realConfig, abciApp, logger)
if err != nil {
return err
}
t.ethState = state
t.ethService = service
t.node = node
t.rpcclient = rpcclient.NewHTTP(realConfig.RPC.ListenAddress, "/websocket")
return nil
}
func (t *Tendermint) Run() error {
submitCh := t.ethService.GetSubmitCh()
if err := t.node.Start(); err != nil {
fmt.Println(err)
return fmt.Errorf("Failed to start node: %v", err)
}
t.logger.Info("Started node", "nodeInfo", t.node.Switch().NodeInfo())
for {
select {
case tx := <-submitCh:
_, err := t.rpcclient.BroadcastTxSync(tx)
if err != nil {
fmt.Errorf("Failed to broacast transaction: %v", err)
}
}
}
return nil
}
func (t *Tendermint) Info() (map[string]string, error) {
tmInfo := t.node.NodeInfo().(p2p.DefaultNodeInfo)
info := map[string]string{
"type": "tendermint",
"id": string(tmInfo.ID()),
"laddr": tmInfo.ListenAddr,
"network": tmInfo.Network,
"version": tmInfo.Version,
"moniker": tmInfo.Moniker,
"tx_index": tmInfo.Other.TxIndex,
"rpc_laddr": tmInfo.Other.RPCAddress,
}
return info, nil
}