diff --git a/Makefile b/Makefile index 3b6bd0e10..6dcc7e0ed 100644 --- a/Makefile +++ b/Makefile @@ -20,6 +20,11 @@ build_race: get_deps test: build go test github.com/tendermint/tendermint/... +draw_deps: + # requires brew install graphviz + go get github.com/hirokidaichi/goviz + goviz -i github.com/tendermint/tendermint/cmd/tendermint | dot -Tpng -o hoge.png + list_deps: go list -f '{{join .Deps "\n"}}' github.com/tendermint/tendermint/... | xargs go list -f '{{if not .Standard}}{{.ImportPath}}{{end}}' diff --git a/cmd/barak/main.go b/cmd/barak/main.go index b77496d57..254888eab 100644 --- a/cmd/barak/main.go +++ b/cmd/barak/main.go @@ -19,13 +19,14 @@ import ( "github.com/tendermint/tendermint/binary" . "github.com/tendermint/tendermint/cmd/barak/types" . "github.com/tendermint/tendermint/common" + cfg "github.com/tendermint/tendermint/config" pcm "github.com/tendermint/tendermint/process" - "github.com/tendermint/tendermint/rpc" + "github.com/tendermint/tendermint/rpc/server" ) -var Routes = map[string]*rpc.RPCFunc{ - "status": rpc.NewRPCFunc(Status, []string{}), - "run": rpc.NewRPCFunc(Run, []string{"auth_command"}), +var Routes = map[string]*rpcserver.RPCFunc{ + "status": rpcserver.NewRPCFunc(Status, []string{}), + "run": rpcserver.NewRPCFunc(Run, []string{"auth_command"}), // NOTE: also, two special non-JSONRPC routes called "download" and "upload" } @@ -58,6 +59,9 @@ var barak = struct { func main() { fmt.Printf("New Barak Process (PID: %d)\n", os.Getpid()) + // Apply bare tendermint/* configuration. + cfg.ApplyConfig(cfg.MapConfig(map[string]interface{}{"log_level": "info"})) + // read flags to change options file. var optionsBytes []byte var optionsFile string @@ -97,8 +101,8 @@ func main() { mux.HandleFunc("/download", ServeFile) mux.HandleFunc("/register", Register) // TODO: mux.HandleFunc("/upload", UploadFile) - rpc.RegisterRPCFuncs(mux, Routes) - rpc.StartHTTPServer(options.ListenAddress, mux) + rpcserver.RegisterRPCFuncs(mux, Routes) + rpcserver.StartHTTPServer(options.ListenAddress, mux) // Register this barak with central listener for _, registry := range barak.registries { diff --git a/cmd/debora/commands.go b/cmd/debora/commands.go index af0819eec..7956cb6ef 100644 --- a/cmd/debora/commands.go +++ b/cmd/debora/commands.go @@ -10,7 +10,7 @@ import ( "github.com/tendermint/tendermint/binary" btypes "github.com/tendermint/tendermint/cmd/barak/types" . "github.com/tendermint/tendermint/common" - "github.com/tendermint/tendermint/rpc" + "github.com/tendermint/tendermint/rpc/client" "net/http" ) @@ -89,7 +89,7 @@ func GetNonce(remote string) (uint64, error) { } func GetStatus(remote string) (response btypes.ResponseStatus, err error) { - _, err = rpc.Call(remote, "status", Arr(), &response) + _, err = rpcclient.Call(remote, "status", Arr(), &response) if err != nil { return response, fmt.Errorf("Error fetching nonce from remote %v:\n %v", remote, err) } @@ -113,5 +113,5 @@ func RunAuthCommand(remote string, commandJSONBytes []byte, signatures []acm.Sig CommandJSONStr: string(commandJSONBytes), Signatures: signatures, } - return rpc.Call(remote, "run", Arr(authCommand), dest) + return rpcclient.Call(remote, "run", Arr(authCommand), dest) } diff --git a/cmd/debora/main.go b/cmd/debora/main.go index 0343348a7..26239133a 100644 --- a/cmd/debora/main.go +++ b/cmd/debora/main.go @@ -14,6 +14,7 @@ import ( "github.com/tendermint/tendermint/binary" btypes "github.com/tendermint/tendermint/cmd/barak/types" . "github.com/tendermint/tendermint/common" + cfg "github.com/tendermint/tendermint/config" ) func remoteNick(remote string) string { @@ -33,6 +34,9 @@ var Config = struct { func main() { fmt.Printf("New Debora Process (PID: %d)\n", os.Getpid()) + // Apply bare tendermint/* configuration. + cfg.ApplyConfig(cfg.MapConfig(map[string]interface{}{"log_level": "info"})) + rootDir := os.Getenv("DEBROOT") if rootDir == "" { rootDir = os.Getenv("HOME") + "/.debora" diff --git a/hoge.png b/hoge.png new file mode 100644 index 000000000..3ba04d9be Binary files /dev/null and b/hoge.png differ diff --git a/node/node.go b/node/node.go index f879dacc7..35a165c41 100644 --- a/node/node.go +++ b/node/node.go @@ -17,8 +17,8 @@ import ( "github.com/tendermint/tendermint/events" mempl "github.com/tendermint/tendermint/mempool" "github.com/tendermint/tendermint/p2p" - "github.com/tendermint/tendermint/rpc" "github.com/tendermint/tendermint/rpc/core" + "github.com/tendermint/tendermint/rpc/server" sm "github.com/tendermint/tendermint/state" "github.com/tendermint/tendermint/types" ) @@ -190,9 +190,9 @@ func (n *Node) StartRPC() { listenAddr := config.GetString("rpc_laddr") mux := http.NewServeMux() - rpc.RegisterEventsHandler(mux, n.evsw) - rpc.RegisterRPCFuncs(mux, core.Routes) - rpc.StartHTTPServer(listenAddr, mux) + rpcserver.RegisterEventsHandler(mux, n.evsw) + rpcserver.RegisterRPCFuncs(mux, core.Routes) + rpcserver.StartHTTPServer(listenAddr, mux) } func (n *Node) Switch() *p2p.Switch { @@ -252,7 +252,7 @@ func RunNode() { n.Start() // If seedNode is provided by config, dial out. - if len(config.GetStringSlice("seeds")) != 0 { + if len(config.GetString("seeds")) > 0 { n.DialSeed() } diff --git a/rpc/client.go b/rpc/client/client.go similarity index 94% rename from rpc/client.go rename to rpc/client/client.go index 0ccddf1ac..94b8d1939 100644 --- a/rpc/client.go +++ b/rpc/client/client.go @@ -1,4 +1,4 @@ -package rpc +package rpcclient import ( "bytes" @@ -9,6 +9,7 @@ import ( "github.com/tendermint/tendermint/binary" . "github.com/tendermint/tendermint/common" + . "github.com/tendermint/tendermint/rpc/types" ) func Call(remote string, method string, params []interface{}, dest interface{}) (interface{}, error) { diff --git a/rpc/client/log.go b/rpc/client/log.go new file mode 100644 index 000000000..8b33e2f10 --- /dev/null +++ b/rpc/client/log.go @@ -0,0 +1,7 @@ +package rpcclient + +import ( + "github.com/tendermint/log15" +) + +var log = log15.New("module", "rpcclient") diff --git a/rpc/core/routes.go b/rpc/core/routes.go index 6ba49c49e..e136a0100 100644 --- a/rpc/core/routes.go +++ b/rpc/core/routes.go @@ -1,7 +1,7 @@ package core import ( - "github.com/tendermint/tendermint/rpc" + rpc "github.com/tendermint/tendermint/rpc/server" ) var Routes = map[string]*rpc.RPCFunc{ diff --git a/rpc/core_client/client.go b/rpc/core_client/client.go index dc717dcb7..a5f0f5142 100644 --- a/rpc/core_client/client.go +++ b/rpc/core_client/client.go @@ -4,7 +4,7 @@ import ( "bytes" "fmt" "github.com/tendermint/tendermint/binary" - "github.com/tendermint/tendermint/rpc" + rpctypes "github.com/tendermint/tendermint/rpc/types" // NOTE: do not import rpc/core. // What kind of client imports all of core logic? :P "io/ioutil" @@ -91,7 +91,7 @@ func argsToJson(args ...interface{}) ([]string, error) { return jsons, nil } -func (c *ClientJSON) RequestResponse(s rpc.RPCRequest) (b []byte, err error) { +func (c *ClientJSON) RequestResponse(s rpctypes.RPCRequest) (b []byte, err error) { b = binary.JSONBytes(s) buf := bytes.NewBuffer(b) resp, err := http.Post(c.addr, "text/json", buf) @@ -157,7 +157,7 @@ func argsToURLValues(argNames []string, args ...interface{}) (url.Values, error) /*rpc-gen:imports: github.com/tendermint/tendermint/binary -github.com/tendermint/tendermint/rpc +github.com/tendermint/tendermint/rpc/types net/http io/ioutil fmt @@ -166,7 +166,7 @@ fmt // Template functions to be filled in /*rpc-gen:template:*ClientJSON func (c *ClientJSON) {{name}}({{args.def}}) ({{response}}) { - request := rpc.RPCRequest{ + request := rpctypes.RPCRequest{ JSONRPC: "2.0", Method: reverseFuncMap["{{name}}"], Params: []interface{}{ {{args.ident}} }, diff --git a/rpc/core_client/client_methods.go b/rpc/core_client/client_methods.go index 2427f19d5..fe178fb01 100644 --- a/rpc/core_client/client_methods.go +++ b/rpc/core_client/client_methods.go @@ -6,8 +6,8 @@ import ( "fmt" "github.com/tendermint/tendermint/account" "github.com/tendermint/tendermint/binary" - "github.com/tendermint/tendermint/rpc" ctypes "github.com/tendermint/tendermint/rpc/core/types" + "github.com/tendermint/tendermint/rpc/types" "github.com/tendermint/tendermint/types" "io/ioutil" "net/http" @@ -513,7 +513,7 @@ func (c *ClientHTTP) Status() (*ctypes.ResponseStatus, error) { } func (c *ClientJSON) BlockchainInfo(minHeight uint, maxHeight uint) (*ctypes.ResponseBlockchainInfo, error) { - request := rpc.RPCRequest{ + request := rpctypes.RPCRequest{ JSONRPC: "2.0", Method: reverseFuncMap["BlockchainInfo"], Params: []interface{}{minHeight, maxHeight}, @@ -540,7 +540,7 @@ func (c *ClientJSON) BlockchainInfo(minHeight uint, maxHeight uint) (*ctypes.Res } func (c *ClientJSON) BroadcastTx(tx types.Tx) (*ctypes.ResponseBroadcastTx, error) { - request := rpc.RPCRequest{ + request := rpctypes.RPCRequest{ JSONRPC: "2.0", Method: reverseFuncMap["BroadcastTx"], Params: []interface{}{tx}, @@ -567,7 +567,7 @@ func (c *ClientJSON) BroadcastTx(tx types.Tx) (*ctypes.ResponseBroadcastTx, erro } func (c *ClientJSON) Call(address []byte, data []byte) (*ctypes.ResponseCall, error) { - request := rpc.RPCRequest{ + request := rpctypes.RPCRequest{ JSONRPC: "2.0", Method: reverseFuncMap["Call"], Params: []interface{}{address, data}, @@ -594,7 +594,7 @@ func (c *ClientJSON) Call(address []byte, data []byte) (*ctypes.ResponseCall, er } func (c *ClientJSON) CallCode(code []byte, data []byte) (*ctypes.ResponseCall, error) { - request := rpc.RPCRequest{ + request := rpctypes.RPCRequest{ JSONRPC: "2.0", Method: reverseFuncMap["CallCode"], Params: []interface{}{code, data}, @@ -621,7 +621,7 @@ func (c *ClientJSON) CallCode(code []byte, data []byte) (*ctypes.ResponseCall, e } func (c *ClientJSON) DumpConsensusState() (*ctypes.ResponseDumpConsensusState, error) { - request := rpc.RPCRequest{ + request := rpctypes.RPCRequest{ JSONRPC: "2.0", Method: reverseFuncMap["DumpConsensusState"], Params: []interface{}{}, @@ -648,7 +648,7 @@ func (c *ClientJSON) DumpConsensusState() (*ctypes.ResponseDumpConsensusState, e } func (c *ClientJSON) DumpStorage(address []byte) (*ctypes.ResponseDumpStorage, error) { - request := rpc.RPCRequest{ + request := rpctypes.RPCRequest{ JSONRPC: "2.0", Method: reverseFuncMap["DumpStorage"], Params: []interface{}{address}, @@ -675,7 +675,7 @@ func (c *ClientJSON) DumpStorage(address []byte) (*ctypes.ResponseDumpStorage, e } func (c *ClientJSON) GenPrivAccount() (*ctypes.ResponseGenPrivAccount, error) { - request := rpc.RPCRequest{ + request := rpctypes.RPCRequest{ JSONRPC: "2.0", Method: reverseFuncMap["GenPrivAccount"], Params: []interface{}{}, @@ -702,7 +702,7 @@ func (c *ClientJSON) GenPrivAccount() (*ctypes.ResponseGenPrivAccount, error) { } func (c *ClientJSON) GetAccount(address []byte) (*ctypes.ResponseGetAccount, error) { - request := rpc.RPCRequest{ + request := rpctypes.RPCRequest{ JSONRPC: "2.0", Method: reverseFuncMap["GetAccount"], Params: []interface{}{address}, @@ -729,7 +729,7 @@ func (c *ClientJSON) GetAccount(address []byte) (*ctypes.ResponseGetAccount, err } func (c *ClientJSON) GetBlock(height uint) (*ctypes.ResponseGetBlock, error) { - request := rpc.RPCRequest{ + request := rpctypes.RPCRequest{ JSONRPC: "2.0", Method: reverseFuncMap["GetBlock"], Params: []interface{}{height}, @@ -756,7 +756,7 @@ func (c *ClientJSON) GetBlock(height uint) (*ctypes.ResponseGetBlock, error) { } func (c *ClientJSON) GetStorage(address []byte, key []byte) (*ctypes.ResponseGetStorage, error) { - request := rpc.RPCRequest{ + request := rpctypes.RPCRequest{ JSONRPC: "2.0", Method: reverseFuncMap["GetStorage"], Params: []interface{}{address, key}, @@ -783,7 +783,7 @@ func (c *ClientJSON) GetStorage(address []byte, key []byte) (*ctypes.ResponseGet } func (c *ClientJSON) ListAccounts() (*ctypes.ResponseListAccounts, error) { - request := rpc.RPCRequest{ + request := rpctypes.RPCRequest{ JSONRPC: "2.0", Method: reverseFuncMap["ListAccounts"], Params: []interface{}{}, @@ -810,7 +810,7 @@ func (c *ClientJSON) ListAccounts() (*ctypes.ResponseListAccounts, error) { } func (c *ClientJSON) ListUnconfirmedTxs() (*ctypes.ResponseListUnconfirmedTxs, error) { - request := rpc.RPCRequest{ + request := rpctypes.RPCRequest{ JSONRPC: "2.0", Method: reverseFuncMap["ListUnconfirmedTxs"], Params: []interface{}{}, @@ -837,7 +837,7 @@ func (c *ClientJSON) ListUnconfirmedTxs() (*ctypes.ResponseListUnconfirmedTxs, e } func (c *ClientJSON) ListValidators() (*ctypes.ResponseListValidators, error) { - request := rpc.RPCRequest{ + request := rpctypes.RPCRequest{ JSONRPC: "2.0", Method: reverseFuncMap["ListValidators"], Params: []interface{}{}, @@ -864,7 +864,7 @@ func (c *ClientJSON) ListValidators() (*ctypes.ResponseListValidators, error) { } func (c *ClientJSON) NetInfo() (*ctypes.ResponseNetInfo, error) { - request := rpc.RPCRequest{ + request := rpctypes.RPCRequest{ JSONRPC: "2.0", Method: reverseFuncMap["NetInfo"], Params: []interface{}{}, @@ -891,7 +891,7 @@ func (c *ClientJSON) NetInfo() (*ctypes.ResponseNetInfo, error) { } func (c *ClientJSON) SignTx(tx types.Tx, privAccounts []*account.PrivAccount) (*ctypes.ResponseSignTx, error) { - request := rpc.RPCRequest{ + request := rpctypes.RPCRequest{ JSONRPC: "2.0", Method: reverseFuncMap["SignTx"], Params: []interface{}{tx, privAccounts}, @@ -918,7 +918,7 @@ func (c *ClientJSON) SignTx(tx types.Tx, privAccounts []*account.PrivAccount) (* } func (c *ClientJSON) Status() (*ctypes.ResponseStatus, error) { - request := rpc.RPCRequest{ + request := rpctypes.RPCRequest{ JSONRPC: "2.0", Method: reverseFuncMap["Status"], Params: []interface{}{}, diff --git a/rpc/core_client/ws_client.go b/rpc/core_client/ws_client.go index 71f24bf32..2b6989144 100644 --- a/rpc/core_client/ws_client.go +++ b/rpc/core_client/ws_client.go @@ -2,7 +2,7 @@ package core_client import ( "github.com/gorilla/websocket" - "github.com/tendermint/tendermint/rpc" + rpctypes "github.com/tendermint/tendermint/rpc/types" "net/http" ) @@ -32,7 +32,7 @@ func (wsc *WSClient) Dial() (*http.Response, error) { // subscribe to an event func (wsc *WSClient) Subscribe(eventid string) error { - return wsc.conn.WriteJSON(rpc.WSRequest{ + return wsc.conn.WriteJSON(rpctypes.WSRequest{ Type: "subscribe", Event: eventid, }) @@ -40,7 +40,7 @@ func (wsc *WSClient) Subscribe(eventid string) error { // unsubscribe from an event func (wsc *WSClient) Unsubscribe(eventid string) error { - return wsc.conn.WriteJSON(rpc.WSRequest{ + return wsc.conn.WriteJSON(rpctypes.WSRequest{ Type: "unsubscribe", Event: eventid, }) diff --git a/rpc/log.go b/rpc/log.go deleted file mode 100644 index ceb1b3f22..000000000 --- a/rpc/log.go +++ /dev/null @@ -1,7 +0,0 @@ -package rpc - -import ( - "github.com/tendermint/log15" -) - -var log = log15.New("module", "rpc") diff --git a/rpc/handlers.go b/rpc/server/handlers.go similarity index 97% rename from rpc/handlers.go rename to rpc/server/handlers.go index f477ba4cf..df55e0160 100644 --- a/rpc/handlers.go +++ b/rpc/server/handlers.go @@ -1,4 +1,4 @@ -package rpc +package rpcserver import ( "bytes" @@ -8,6 +8,7 @@ import ( "github.com/gorilla/websocket" "github.com/tendermint/tendermint/binary" "github.com/tendermint/tendermint/events" + . "github.com/tendermint/tendermint/rpc/types" "io/ioutil" "net/http" "reflect" @@ -205,19 +206,6 @@ const ( WriteChanBufferSize = 10 ) -// for requests coming in -type WSRequest struct { - Type string `json:"type"` // subscribe or unsubscribe - Event string `json:"event"` -} - -// for responses going out -type WSResponse struct { - Event string `json:"event"` - Data interface{} `json:"data"` - Error string `json:"error"` -} - // a single websocket connection // contains listener id, underlying ws connection, // and the event switch for subscribing to events diff --git a/rpc/http_params.go b/rpc/server/http_params.go similarity index 97% rename from rpc/http_params.go rename to rpc/server/http_params.go index 2d90e88b3..293edd36a 100644 --- a/rpc/http_params.go +++ b/rpc/server/http_params.go @@ -1,4 +1,4 @@ -package rpc +package rpcserver import ( "encoding/hex" @@ -6,6 +6,8 @@ import ( "net/http" "regexp" "strconv" + + . "github.com/tendermint/tendermint/rpc/types" ) var ( diff --git a/rpc/http_server.go b/rpc/server/http_server.go similarity index 98% rename from rpc/http_server.go rename to rpc/server/http_server.go index 6d3c6ed05..b8043bc35 100644 --- a/rpc/http_server.go +++ b/rpc/server/http_server.go @@ -1,5 +1,5 @@ // Commons for HTTP handling -package rpc +package rpcserver import ( "bufio" @@ -13,6 +13,7 @@ import ( "github.com/tendermint/tendermint/alert" "github.com/tendermint/tendermint/binary" . "github.com/tendermint/tendermint/common" + . "github.com/tendermint/tendermint/rpc/types" ) func StartHTTPServer(listenAddr string, handler http.Handler) { diff --git a/rpc/server/log.go b/rpc/server/log.go new file mode 100644 index 000000000..704e22e30 --- /dev/null +++ b/rpc/server/log.go @@ -0,0 +1,7 @@ +package rpcserver + +import ( + "github.com/tendermint/log15" +) + +var log = log15.New("module", "rpcserver") diff --git a/rpc/test/client_ws_test.go b/rpc/test/client_ws_test.go index c926b6124..23f2efdd9 100644 --- a/rpc/test/client_ws_test.go +++ b/rpc/test/client_ws_test.go @@ -6,7 +6,7 @@ import ( "github.com/gorilla/websocket" "github.com/tendermint/tendermint/account" "github.com/tendermint/tendermint/binary" - "github.com/tendermint/tendermint/rpc" + "github.com/tendermint/tendermint/rpc/types" "github.com/tendermint/tendermint/types" "net/http" "testing" @@ -30,7 +30,7 @@ func newWSCon(t *testing.T) *websocket.Conn { // subscribe to an event func subscribe(t *testing.T, con *websocket.Conn, eventid string) { - err := con.WriteJSON(rpc.WSRequest{ + err := con.WriteJSON(rpctypes.WSRequest{ Type: "subscribe", Event: eventid, }) @@ -41,7 +41,7 @@ func subscribe(t *testing.T, con *websocket.Conn, eventid string) { // unsubscribe from an event func unsubscribe(t *testing.T, con *websocket.Conn, eventid string) { - err := con.WriteJSON(rpc.WSRequest{ + err := con.WriteJSON(rpctypes.WSRequest{ Type: "unsubscribe", Event: eventid, }) diff --git a/rpc/types.go b/rpc/types/types.go similarity index 63% rename from rpc/types.go rename to rpc/types/types.go index b878a05a1..f3c14bbd8 100644 --- a/rpc/types.go +++ b/rpc/types/types.go @@ -1,4 +1,4 @@ -package rpc +package rpctypes type RPCRequest struct { JSONRPC string `json:"jsonrpc"` @@ -25,3 +25,16 @@ func NewRPCResponse(res interface{}, err string) RPCResponse { JSONRPC: "2.0", } } + +// for requests coming in +type WSRequest struct { + Type string `json:"type"` // subscribe or unsubscribe + Event string `json:"event"` +} + +// for responses going out +type WSResponse struct { + Event string `json:"event"` + Data interface{} `json:"data"` + Error string `json:"error"` +}