aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaran <maran.hidskes@gmail.com>2014-05-02 19:35:03 +0800
committerMaran <maran.hidskes@gmail.com>2014-05-02 19:35:03 +0800
commit3424bf17ca791b97ea512bef5290d1a52c1758af (patch)
tree247dafa437609d9e2c53376adb2afa6cbbcbacc4
parent1b597b8ca9ee9564f29b93e1ba5877e012a8d989 (diff)
downloaddexon-3424bf17ca791b97ea512bef5290d1a52c1758af.tar.gz
dexon-3424bf17ca791b97ea512bef5290d1a52c1758af.tar.zst
dexon-3424bf17ca791b97ea512bef5290d1a52c1758af.zip
Moved RPC Server and implemented it as a package
-rw-r--r--ethereal/config.go2
-rw-r--r--ethereum/config.go2
-rw-r--r--ethereum/ethereum.go5
-rw-r--r--etherpc/packages.go185
-rw-r--r--etherpc/server.go82
5 files changed, 9 insertions, 267 deletions
diff --git a/ethereal/config.go b/ethereal/config.go
index ac4484d0b..94f896c5f 100644
--- a/ethereal/config.go
+++ b/ethereal/config.go
@@ -6,6 +6,7 @@ import (
var StartConsole bool
var StartMining bool
+var StartRpc bool
var UseUPnP bool
var OutboundPort string
var ShowGenesis bool
@@ -21,6 +22,7 @@ var AssetPath string
func Init() {
flag.BoolVar(&StartConsole, "c", false, "debug and testing console")
flag.BoolVar(&StartMining, "m", false, "start dagger mining")
+ flag.BoolVar(&StartRpc, "r", false, "start rpc server")
flag.BoolVar(&ShowGenesis, "g", false, "prints genesis header and exits")
flag.BoolVar(&UseUPnP, "upnp", false, "enable UPnP support")
flag.BoolVar(&UseSeed, "seed", true, "seed peers")
diff --git a/ethereum/config.go b/ethereum/config.go
index b796af5cd..234e79f12 100644
--- a/ethereum/config.go
+++ b/ethereum/config.go
@@ -6,6 +6,7 @@ import (
var StartConsole bool
var StartMining bool
+var StartRpc bool
var UseUPnP bool
var OutboundPort string
var ShowGenesis bool
@@ -24,6 +25,7 @@ func Init() {
flag.BoolVar(&StartMining, "m", false, "start dagger mining")
flag.BoolVar(&ShowGenesis, "g", false, "prints genesis header and exits")
//flag.BoolVar(&UseGui, "gui", true, "use the gui")
+ flag.BoolVar(&StartRpc, "r", false, "start rpc server")
flag.BoolVar(&NonInteractive, "y", false, "non-interactive mode (say yes to confirmations)")
flag.BoolVar(&UseUPnP, "upnp", false, "enable UPnP support")
flag.BoolVar(&UseSeed, "seed", true, "seed peers")
diff --git a/ethereum/ethereum.go b/ethereum/ethereum.go
index 04851d2bd..0b56855e0 100644
--- a/ethereum/ethereum.go
+++ b/ethereum/ethereum.go
@@ -4,6 +4,7 @@ import (
"fmt"
"github.com/ethereum/eth-go"
"github.com/ethereum/eth-go/ethchain"
+ "github.com/ethereum/eth-go/etherpc"
"github.com/ethereum/eth-go/ethminer"
"github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/go-ethereum/utils"
@@ -131,6 +132,10 @@ func main() {
console := NewConsole(ethereum)
go console.Start()
}
+ if StartRpc {
+ ethereum.RpcServer = etherpc.NewJsonRpcServer()
+ go ethereum.RpcServer.Start()
+ }
RegisterInterrupts(ethereum)
ethereum.Start()
diff --git a/etherpc/packages.go b/etherpc/packages.go
deleted file mode 100644
index 283da1a18..000000000
--- a/etherpc/packages.go
+++ /dev/null
@@ -1,185 +0,0 @@
-package main
-
-import (
- "encoding/json"
- "errors"
- "math/big"
-)
-
-type MainPackage struct{}
-
-type JsonResponse interface {
- requirements() error
-}
-
-type BlockResponse struct {
- Name string
- Id int
-}
-type GetBlockArgs struct {
- JsonResponse
- BlockNumber int
- Hash string
-}
-
-type ErrorResponse struct {
- Error bool
- ErrorText string
-}
-
-type SuccessRes struct {
- Error bool
- Message string
-}
-
-func NewSuccessRes(msg string) string {
- e := SuccessRes{Error: true, Message: msg}
- res, err := json.Marshal(e)
- if err != nil {
- // This should never happen
- panic("Creating json error response failed, help")
- }
- return string(res)
-}
-
-func NewErrorResponse(msg string) error {
- e := ErrorResponse{Error: true, ErrorText: msg}
- res, err := json.Marshal(e)
- if err != nil {
- // This should never happen
- panic("Creating json error response failed, help")
- }
- newErr := errors.New(string(res))
- return newErr
-}
-
-func (b *GetBlockArgs) requirements() error {
- if b.BlockNumber == 0 && b.Hash == "" {
- return NewErrorResponse("This call requires either a block 'number' or a block 'hash' as argument")
- }
- return nil
-}
-
-func (p *MainPackage) GetBlock(args *GetBlockArgs, reply *BlockResponse) error {
- err := args.requirements()
- if err != nil {
- return err
- }
- // Do something
-
- return nil
-}
-
-type NewTxArgs struct {
- Sec string
- Recipient string
- Value *big.Int
- Gas *big.Int
- GasPrice *big.Int
- Init string
- Body string
-}
-type TxResponse struct {
-}
-
-func (a *NewTxArgs) requirements() error {
- if a.Recipient == "" {
- return NewErrorResponse("Transact requires a 'recipient' address as argument")
- }
- if a.Value == nil {
- return NewErrorResponse("Transact requires a 'value' as argument")
- }
- if a.Gas == nil {
- return NewErrorResponse("Transact requires a 'gas' value as argument")
- }
- if a.GasPrice == nil {
- return NewErrorResponse("Transact requires a 'gasprice' value as argument")
- }
- return nil
-}
-
-func (a *NewTxArgs) requirementsContract() error {
- if a.Value == nil {
- return NewErrorResponse("Create requires a 'value' as argument")
- }
- if a.Gas == nil {
- return NewErrorResponse("Create requires a 'gas' value as argument")
- }
- if a.GasPrice == nil {
- return NewErrorResponse("Create requires a 'gasprice' value as argument")
- }
- if a.Init == "" {
- return NewErrorResponse("Create requires a 'init' value as argument")
- }
- if a.Body == "" {
- return NewErrorResponse("Create requires a 'body' value as argument")
- }
- return nil
-}
-
-func (p *MainPackage) Transact(args *NewTxArgs, reply *TxResponse) error {
- err := args.requirements()
- if err != nil {
- return err
- }
- return nil
-}
-
-func (p *MainPackage) Create(args *NewTxArgs, reply *string) error {
- err := args.requirementsContract()
- if err != nil {
- return err
- }
- return nil
-}
-
-func (p *MainPackage) getKey(args interface{}, reply *string) error {
- return nil
-}
-
-type GetStorageArgs struct {
- Address string
- Key string
-}
-
-func (a *GetStorageArgs) requirements() error {
- if a.Address == "" {
- return NewErrorResponse("GetStorageAt requires an 'address' value as argument")
- }
- if a.Key == "" {
- return NewErrorResponse("GetStorageAt requires an 'key' value as argument")
- }
- return nil
-}
-
-func (p *MainPackage) getStorageAt(args *GetStorageArgs, reply *string) error {
- err := args.requirements()
- if err != nil {
- return err
- }
- return nil
-}
-
-type GetBalanceArgs struct {
- Address string
-}
-
-func (a *GetBalanceArgs) requirements() error {
- if a.Address == "" {
- return NewErrorResponse("GetBalanceAt requires an 'address' value as argument")
- }
- return nil
-}
-
-func (p *MainPackage) GetBalanceAt(args *GetBalanceArgs, reply *string) error {
- err := args.requirements()
- if err != nil {
- return err
- }
- return nil
-}
-
-func (p *MainPackage) Test(args *GetBlockArgs, reply *int) error {
- *reply = 15
- return nil
-}
diff --git a/etherpc/server.go b/etherpc/server.go
deleted file mode 100644
index 291ca2d95..000000000
--- a/etherpc/server.go
+++ /dev/null
@@ -1,82 +0,0 @@
-package main
-
-import (
- "log"
- "net"
- "net/rpc"
- "net/rpc/jsonrpc"
-)
-
-type JsonRpcServer struct {
- quit chan bool
- listener net.Listener
-}
-
-func (s *JsonRpcServer) exitHandler() {
-out:
- for {
- select {
- case <-s.quit:
- s.listener.Close()
- break out
- }
- }
-
- // ethutil.Config.Log.Infoln("[JSON] Shutdown JSON-RPC server")
- log.Println("[JSON] Shutdown JSON-RPC server")
-}
-
-func (s *JsonRpcServer) Stop() {
- close(s.quit)
-}
-
-func (s *JsonRpcServer) Start() {
- // ethutil.Config.Log.Infoln("[JSON] Starting JSON-RPC server")
- log.Println("[JSON] Starting JSON-RPC server")
- go s.exitHandler()
- rpc.Register(new(MainPackage))
- rpc.HandleHTTP()
-
- for {
- conn, err := s.listener.Accept()
- if err != nil {
- // ethutil.Config.Log.Infoln("[JSON] Error starting JSON-RPC:", err)
- log.Println("[JSON] Error starting JSON-RPC:", err)
- continue
- }
- log.Println("Incoming request")
- go jsonrpc.ServeConn(conn)
- }
-}
-
-func NewJsonRpcServer() *JsonRpcServer {
- l, err := net.Listen("tcp", ":30304")
- if err != nil {
- // ethutil.Config.Log.Infoln("Error starting JSON-RPC")
- log.Println("Error starting JSON-RPC")
- }
-
- return &JsonRpcServer{
- listener: l,
- quit: make(chan bool),
- }
-}
-
-func main() {
- s := NewJsonRpcServer()
- s.Start()
- /*
-
- conn, err := net.Dial("tcp", "localhost:30304")
-
- if err != nil {
- panic(err)
- }
- defer conn.Close()
- c := jsonrpc.NewClient(conn)
- var reply int
- err = c.Call("MainPackage.Test", nil, &reply)
- log.Println("ERR:", err)
- log.Println("result:", reply)
- */
-}