func getFactoidAck(hash string) *wsapi.FactoidTxStatus { ackReq := new(wsapi.AckRequest) ackReq.TxID = hash answers, err := wsapi.HandleV2FactoidACK(StatePointer, ackReq) if answers == nil || err != nil { return nil } return answers.(*wsapi.FactoidTxStatus) }
func getEntryAck(hash string) *wsapi.EntryStatus { ackReq := new(wsapi.AckRequest) ackReq.TxID = hash answers, err := wsapi.HandleV2EntryACK(StatePointer, ackReq) if answers == nil || err != nil { return nil } return (answers.(*wsapi.EntryStatus)) }
func searchDB(searchitem string, st state.State) (bool, string) { if len(searchitem) < 32 { heightInt, err := strconv.Atoi(searchitem) if err != nil { return false, "" } height := uint32(heightInt) if height < DisplayState.CurrentNodeHeight { dbase := StatePointer.GetAndLockDB() dBlock, err := dbase.FetchDBlockByHeight(height) StatePointer.UnlockDB() if err != nil { return false, "" } resp := `{"Type":"dblockHeight","item":"` + dBlock.GetKeyMR().String() + `"}` return true, resp } return false, "" } switch searchitem[:2] { case "EC": hash := base58.Decode(searchitem) if len(hash) < 34 { return false, "" } var fixed [32]byte copy(fixed[:], hash[2:34]) bal := fmt.Sprintf("%d", st.FactoidState.GetECBalance(fixed)) return true, `{"Type":"EC","item":` + bal + "}" case "FA": hash := base58.Decode(searchitem) if len(hash) < 34 { return false, "" } var fixed [32]byte copy(fixed[:], hash[2:34]) bal := fmt.Sprintf("%.8f", float64(st.FactoidState.GetFactoidBalance(fixed))/1e8) return true, `{"Type":"FA","item":` + bal + "}" } if len(searchitem) == 64 { hash, err := primitives.HexToHash(searchitem) if err != nil { return false, "" } // Must unlock manually when returining. Function continues to wsapi, who needs the dbase dbase := st.GetAndLockDB() // Search for Entry if entry, err := dbase.FetchEntry(hash); err == nil && entry != nil { resp := newSearchResponse("entry", entry) if len(resp) > 1 { st.UnlockDB() return true, resp } } // Search for Chain if mr, err := dbase.FetchHeadIndexByChainID(hash); err == nil && mr != nil { resp := newSearchResponse("chainhead", mr) if len(resp) > 1 { st.UnlockDB() return true, resp } } // Search for EBlock if eBlock, err := dbase.FetchEBlockByPrimary(hash); err == nil && eBlock != nil { resp := newSearchResponse("eblock", eBlock) if len(resp) > 1 { st.UnlockDB() return true, resp } } // Search for DBlock if dBlock, err := dbase.FetchDBlockByPrimary(hash); err == nil && dBlock != nil { resp := newSearchResponse("dblock", dBlock) if len(resp) > 1 { st.UnlockDB() return true, resp } } // Search for ABlock if aBlock, err := dbase.FetchABlock(hash); err == nil && aBlock != nil { resp := newSearchResponse("ablock", aBlock) if len(resp) > 1 { st.UnlockDB() return true, resp } } // Search for Factoid Block if fBlock, err := dbase.FetchFBlock(hash); err == nil && fBlock != nil { resp := newSearchResponse("fblock", fBlock) if len(resp) > 1 { st.UnlockDB() return true, resp } } // Search for Entry Credit Block if ecBlock, err := dbase.FetchECBlock(hash); err == nil && ecBlock != nil { resp := newSearchResponse("ecblock", ecBlock) if len(resp) > 1 { st.UnlockDB() return true, resp } } // Search for Factoid Transaction if trans, err := dbase.FetchFactoidTransaction(hash); err == nil && trans != nil { resp := newSearchResponse("facttransaction", trans) if len(resp) > 1 { st.UnlockDB() return true, resp } } // Search for Entry Credit Transaction if trans, err := dbase.FetchECTransaction(hash); err == nil && trans != nil { resp := newSearchResponse("ectransaction", trans) if len(resp) > 1 { st.UnlockDB() return true, resp } } st.UnlockDB() // Search for Entry Transaction ackReq := new(wsapi.AckRequest) ackReq.TxID = hash.String() if entryAck, err := wsapi.HandleV2EntryACK(&st, ackReq); err == nil && entryAck != nil && len(entryAck.(*wsapi.EntryStatus).EntryHash) == 64 { resp := newSearchResponse("entryack", nil) if len(resp) > 1 { return true, resp } } // Search for Factoid Transaction ackReq = new(wsapi.AckRequest) ackReq.TxID = hash.String() if factoidAck, err := wsapi.HandleV2FactoidACK(&st, ackReq); err == nil && factoidAck != nil && factoidAck.(*wsapi.FactoidTxStatus).BlockDate > 0 { resp := newSearchResponse("factoidack", nil) if len(resp) > 1 { return true, resp } } } return false, "" }