diff --git a/src/common/types/types.go b/src/common/types/types.go index f0dc03b..62a9689 100644 --- a/src/common/types/types.go +++ b/src/common/types/types.go @@ -109,3 +109,9 @@ type BlockchainInfo struct { Headers uint32 `json:"headers"` BestBlockHash string `json:"bestblockhash"` } + +type RPCResponseSendRawTransaction struct { + ID string `json:"id"` + Result string `json:"result,omitempty"` + Error interface{} `json:"error,omitempty"` +} diff --git a/src/core/rpc.go b/src/core/rpc.go index 2cbd62a..05aba66 100644 --- a/src/core/rpc.go +++ b/src/core/rpc.go @@ -200,3 +200,27 @@ func GetBlockchainInfo() (*types.BlockchainInfo, error) { return &rpcResponse.Result, nil } + +func PostRawTransaction(hex string) (*string, error) { + rpcData := types.RPCRequest{ + JSONRPC: "1.0", + ID: "blindbit-silent-payment-backend-v0", + Method: "sendrawtransaction", + Params: []interface{}{hex}, + } + + var rpcResponse types.RPCResponseSendRawTransaction + + err := makeRPCRequest(rpcData, &rpcResponse) + if err != nil { + common.ErrorLogger.Printf("%v\n", err) + return nil, err + } + + if rpcResponse.Error != nil { + common.ErrorLogger.Printf("RPC Error: %v\n", rpcResponse.Error) + return nil, fmt.Errorf("RPC Error: %v", rpcResponse.Error) + } + + return &rpcResponse.Result, nil +} diff --git a/src/server/api.go b/src/server/api.go index 6b87537..8a49bfe 100644 --- a/src/server/api.go +++ b/src/server/api.go @@ -3,6 +3,7 @@ package server import ( "SilentPaymentAppBackend/src/common" "SilentPaymentAppBackend/src/common/types" + "SilentPaymentAppBackend/src/core" "SilentPaymentAppBackend/src/db/dblevel" "bytes" "encoding/hex" @@ -353,13 +354,17 @@ func (h *ApiHandler) ForwardRawTX(c *gin.Context) { c.Status(http.StatusBadRequest) return } - err := forwardTxToMemPool(txRequest.Data) + txid, err := forwardTxToNode(txRequest.Data) if err != nil { common.ErrorLogger.Println(err) c.Status(http.StatusInternalServerError) return } - c.Status(http.StatusOK) + c.JSON(http.StatusOK, txid) +} + +func forwardTxToNode(txHex string) (*string, error) { + return core.PostRawTransaction(txHex) } func forwardTxToMemPool(txHex string) error {