本文整理匯總了Golang中github.com/FactomProject/factomd/common/interfaces.IState.FetchEntryByHash方法的典型用法代碼示例。如果您正苦於以下問題:Golang IState.FetchEntryByHash方法的具體用法?Golang IState.FetchEntryByHash怎麽用?Golang IState.FetchEntryByHash使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類github.com/FactomProject/factomd/common/interfaces.IState
的用法示例。
在下文中一共展示了IState.FetchEntryByHash方法的4個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: HandleV2RawData
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
}
示例2: HandleV2Entry
func HandleV2Entry(state interfaces.IState, params interface{}) (interface{}, *primitives.JSONError) {
hashkey := new(HashRequest)
err := MapToObject(params, hashkey)
if err != nil {
return nil, NewInvalidParamsError()
}
e := new(EntryResponse)
h, err := primitives.HexToHash(hashkey.Hash)
if err != nil {
return nil, NewInvalidHashError()
}
entry, err := state.FetchEntryByHash(h)
if err != nil {
return nil, NewInternalError()
}
if entry == nil {
dbase := state.GetAndLockDB()
defer state.UnlockDB()
entry, err = dbase.FetchEntry(h)
if err != nil {
return nil, NewInvalidHashError()
}
if entry == nil {
return nil, NewEntryNotFoundError()
}
}
e.ChainID = entry.GetChainIDHash().String()
e.Content = hex.EncodeToString(entry.GetContent())
for _, v := range entry.ExternalIDs() {
e.ExtIDs = append(e.ExtIDs, hex.EncodeToString(v))
}
return e, nil
}
示例3: HandleV2GetTranasction
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
}
示例4: HandleV2EntryACK
func HandleV2EntryACK(state interfaces.IState, params interface{}) (interface{}, *primitives.JSONError) {
ackReq := new(AckRequest)
err := MapToObject(params, ackReq)
if err != nil {
return nil, NewInvalidParamsError()
}
if ackReq.TxID == "" && ackReq.FullTransaction == "" {
return nil, NewInvalidParamsError()
}
eTxID := ""
ecTxID := ""
if ackReq.TxID == "" {
eTxID, ecTxID = DecodeTransactionToHashes(ackReq.FullTransaction)
if ecTxID == "" && eTxID == "" {
return nil, NewUnableToDecodeTransactionError()
}
}
//TODO: fetch entries, ec TXs from state as well
//We didn't receive a full transaction, but a transaction hash
//We have to figure out which transaction hash we got
if ecTxID == "" && eTxID == "" {
h, err := primitives.NewShaHashFromStr(ackReq.TxID)
if err != nil {
return nil, NewInvalidParamsError()
}
entry, err := state.FetchEntryByHash(h)
if err != nil {
return nil, NewInternalError()
}
if entry != nil {
eTxID = ackReq.TxID
} else {
ec, err := state.FetchECTransactionByHash(h)
if err != nil {
return nil, NewInternalError()
}
//fmt.Printf("ec - %v\n", ec)
if ec != nil {
ecTxID = ackReq.TxID
eTxID = ec.GetEntryHash().String()
}
}
}
answer := new(EntryStatus)
answer.CommitTxID = ecTxID
answer.EntryHash = eTxID
if answer.CommitTxID == "" && answer.EntryHash == "" {
//We know nothing about the transaction, so we return unknown status
answer.CommitData.Status = AckStatusUnknown
answer.EntryData.Status = AckStatusUnknown
return answer, nil
}
//Fetching the second part of the transaction pair
if answer.EntryHash == "" {
h, err := primitives.NewShaHashFromStr(answer.EntryHash)
if err != nil {
return nil, NewInvalidParamsError()
}
ec, err := state.FetchECTransactionByHash(h)
if err != nil {
return nil, NewInternalError()
}
if ec != nil {
answer.EntryHash = ec.GetEntryHash().String()
}
}
if answer.CommitTxID == "" {
h, err := primitives.NewShaHashFromStr(answer.EntryHash)
if err != nil {
return nil, NewInvalidParamsError()
}
ec, err := state.FetchPaidFor(h)
if err != nil {
return nil, NewInternalError()
}
if ec != nil {
answer.CommitTxID = ec.String()
}
}
//Fetching statuses
if answer.CommitTxID == "" {
answer.CommitData.Status = AckStatusUnknown
} else {
h, err := primitives.NewShaHashFromStr(answer.CommitTxID)
if err != nil {
return nil, NewInvalidParamsError()
}
status, txid, txTime, blockTime, err := state.GetACKStatus(h)
//.........這裏部分代碼省略.........