func HandleV2FactoidACK(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() } txid := ackReq.TxID if txid == "" { b, err := hex.DecodeString(ackReq.FullTransaction) if err != nil { return nil, NewUnableToDecodeTransactionError() } tx := new(factoid.Transaction) err = tx.UnmarshalBinary(b) if err != nil { return nil, NewUnableToDecodeTransactionError() } txid = tx.GetSigHash().String() } txhash, err := primitives.NewShaHashFromStr(txid) if err != nil { return nil, NewInvalidParamsError() } status, h, txTime, blockTime, err := state.GetACKStatus(txhash) if err != nil { return nil, NewInternalError() } answer := new(FactoidTxStatus) answer.TxID = h.String() if txTime != nil { answer.TransactionDate = txTime.GetTimeMilli() if txTime.GetTimeMilli() > 0 { answer.TransactionDateString = txTime.String() } } if blockTime != nil { answer.BlockDate = blockTime.GetTimeMilli() if blockTime.GetTimeMilli() > 0 { answer.BlockDateString = blockTime.String() } } switch status { case constants.AckStatusInvalid: answer.Status = AckStatusInvalid break case constants.AckStatusUnknown: answer.Status = AckStatusUnknown break case constants.AckStatusNotConfirmed: answer.Status = AckStatusNotConfirmed break case constants.AckStatusACK: answer.Status = AckStatusACK break case constants.AckStatus1Minute: answer.Status = AckStatus1Minute break case constants.AckStatusDBlockConfirmed: answer.Status = AckStatusDBlockConfirmed break default: return nil, NewInternalError() break } return answer, nil }