func HandleV2RawData(state interfaces.IState, params interface{}) (interface{}, *primitives.JSONError) { hashkey := new(HashRequest) err := MapToObject(params, hashkey) if err != nil { panic(reflect.TypeOf(params)) return nil, NewInvalidParamsError() } h, err := primitives.HexToHash(hashkey.Hash) if err != nil { return nil, NewInvalidHashError() } var block interfaces.BinaryMarshallable var b []byte if block, _ = state.FetchECTransactionByHash(h); block != nil { b, _ = block.MarshalBinary() } else if block, _ = state.FetchFactoidTransactionByHash(h); block != nil { b, _ = block.MarshalBinary() } else if block, _ = state.FetchEntryByHash(h); block != nil { b, _ = block.MarshalBinary() } if b == nil { dbase := state.GetAndLockDB() defer state.UnlockDB() // try to find the block data in db and return the first one found if block, _ = dbase.FetchFBlock(h); block != nil { b, _ = block.MarshalBinary() } else if block, _ = dbase.FetchDBlock(h); block != nil { b, _ = block.MarshalBinary() } else if block, _ = dbase.FetchABlock(h); block != nil { b, _ = block.MarshalBinary() } else if block, _ = dbase.FetchEBlock(h); block != nil { b, _ = block.MarshalBinary() } else if block, _ = dbase.FetchECBlock(h); block != nil { b, _ = block.MarshalBinary() } else if block, _ = dbase.FetchFBlock(h); block != nil { b, _ = block.MarshalBinary() } else if block, _ = dbase.FetchEntry(h); block != nil { b, _ = block.MarshalBinary() } else { return nil, NewEntryNotFoundError() } } d := new(RawDataResponse) d.Data = hex.EncodeToString(b) return d, nil }
func HandleV2GetTranasction(state interfaces.IState, params interface{}) (interface{}, *primitives.JSONError) { hashkey := new(HashRequest) err := MapToObject(params, hashkey) if err != nil { return nil, NewInvalidParamsError() } h, err := primitives.HexToHash(hashkey.Hash) if err != nil { return nil, NewInvalidHashError() } fTx, err := state.FetchFactoidTransactionByHash(h) if err != nil { if err.Error() != "Block not found, should not happen" { return nil, NewInternalError() } } ecTx, err := state.FetchECTransactionByHash(h) if err != nil { if err.Error() != "Block not found, should not happen" { return nil, NewInternalError() } } e, err := state.FetchEntryByHash(h) if err != nil { return nil, NewInternalError() } dbase := state.GetAndLockDB() defer state.UnlockDB() if fTx == nil { fTx, err = dbase.FetchFactoidTransaction(h) if err != nil { if err.Error() != "Block not found, should not happen" { return nil, NewInternalError() } } } if ecTx == nil { ecTx, err = dbase.FetchECTransaction(h) if err != nil { if err.Error() != "Block not found, should not happen" { return nil, NewInternalError() } } } if e == nil { e, err = dbase.FetchEntry(h) if err != nil { return nil, NewInternalError() } } blockHash, err := dbase.FetchIncludedIn(h) if err != nil { return nil, NewInternalError() } answer := new(TransactionResponse) answer.ECTranasction = ecTx answer.FactoidTransaction = fTx answer.Entry = e answer.IncludedInTransactionBlock = blockHash.String() blockHash, err = dbase.FetchIncludedIn(blockHash) if err != nil { return nil, NewInternalError() } answer.IncludedInDirectoryBlock = blockHash.String() dBlock, err := dbase.FetchDBlock(blockHash) if err != nil { return nil, NewInternalError() } answer.IncludedInDirectoryBlockHeight = int64(dBlock.GetDatabaseHeight()) return answer, nil }