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 }