github.com/deroproject/derosuite@v2.1.6-1.0.20200307070847-0f2e589c7a2b+incompatible/blockchain/rpcserver/submit.go (about)

     1  // Copyright 2017-2018 DERO Project. All rights reserved.
     2  // Use of this source code in any form is governed by RESEARCH license.
     3  // license can be found in the LICENSE file.
     4  // GPG: 0F39 E425 8C65 3947 702A  8234 08B2 0360 A03A 9DE8
     5  //
     6  //
     7  // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
     8  // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     9  // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
    10  // THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    11  // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    12  // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    13  // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    14  // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
    15  // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    16  
    17  package rpcserver
    18  
    19  // get block template handler not implemented
    20  
    21  //import "fmt"
    22  import "context"
    23  
    24  //import	"log"
    25  //import 	"net/http"
    26  
    27  import "encoding/hex"
    28  import "github.com/intel-go/fastjson"
    29  import "github.com/osamingo/jsonrpc"
    30  
    31  import "github.com/deroproject/derosuite/structures"
    32  
    33  type SubmitBlock_Handler struct{}
    34  
    35  func (h SubmitBlock_Handler) ServeJSONRPC(c context.Context, params *fastjson.RawMessage) (interface{}, *jsonrpc.Error) {
    36  	// parameter is an array of blockdata
    37  	var block_data [2]string
    38  
    39  	//logger.Infof("Submitting block results")
    40  
    41  	if err := jsonrpc.Unmarshal(params, &block_data); err != nil {
    42                  logger.Warnf("Submitted block could be json parsed")
    43  		return nil, err
    44  	}
    45  
    46  	block_data_bytes, err := hex.DecodeString(block_data[0])
    47  	if err != nil {
    48  		logger.Infof("Submitting block could not be decoded")
    49  		return structures.SubmitBlock_Result{
    50  			Status: "Could NOT decode block",
    51  		}, nil
    52  	}
    53  
    54  	hashing_blob, err := hex.DecodeString(block_data[1])
    55  	if err != nil || len(block_data[1]) == 0 {
    56  		logger.Infof("Submitting block hashing_blob could not be decoded")
    57  		return structures.SubmitBlock_Result{
    58  			Status: "Could NOT decode block",
    59  		}, nil
    60  	}
    61  
    62  	blid, result, err := chain.Accept_new_block(block_data_bytes, hashing_blob)
    63  
    64  	if result {
    65  		logger.Infof("Submitted block %s accepted",blid)
    66  		return structures.SubmitBlock_Result{
    67                          BLID: blid.String(),
    68  			Status: "OK",
    69  		}, nil
    70  	}
    71  
    72  	if err != nil {
    73  		logger.Infof("Submitting block %s err %s",blid, err)
    74  		return structures.SubmitBlock_Result{
    75  			Status: err.Error(),
    76  		}, nil
    77  	}
    78  
    79  	logger.Infof("Submitting block rejected err %s", err)
    80  	return structures.SubmitBlock_Result{
    81  		Status: "REJECTED",
    82  	}, nil
    83  
    84  }