func isTransactionNoBtmInput(tx *types.Tx) bool {
for _, input := range tx.TxData.Inputs {
+ switch input.InputType() {
+ case types.CrossChainInputType:
+ return false
+ }
if input.AssetID() == *consensus.BTMAssetID {
return false
}
}
+
return true
}
func isTransactionZeroOutput(tx *types.Tx) bool {
for _, output := range tx.TxData.Outputs {
- value := output.AssetAmount()
- if value.Amount == uint64(0) {
+ if value := output.AssetAmount(); value.Amount == uint64(0) {
return true
}
}
txD.Added = time.Now()
tp.pool[tx.ID] = txD
for _, id := range tx.ResultIds {
- output, err := tx.IntraChainOutput(*id)
+ outputEntry, err := tx.Entry(*id)
if err != nil {
- // error due to it's a retirement, utxo doesn't care this output type so skip it
+ return err
+ }
+
+ var assetID bc.AssetID
+ switch output := outputEntry.(type) {
+ case *bc.IntraChainOutput:
+ assetID = *output.Source.Value.AssetId
+ case *bc.VoteOutput:
+ assetID = *output.Source.Value.AssetId
+ default:
continue
}
- if !txD.StatusFail || *output.Source.Value.AssetId == *consensus.BTMAssetID {
+
+ if !txD.StatusFail || assetID == *consensus.BTMAssetID {
tp.utxo[*id] = tx
}
}