"encoding/hex"
"fmt"
+ btmConsensus "github.com/bytom/consensus"
btmBc "github.com/bytom/protocol/bc"
btmTypes "github.com/bytom/protocol/bc/types"
"github.com/jinzhu/gorm"
vaporCfg "github.com/vapor/config"
+ vaporConsensus "github.com/vapor/consensus"
"github.com/vapor/errors"
"github.com/vapor/federation/common"
"github.com/vapor/federation/config"
return errors.Wrap(err, fmt.Sprintf("create DepositFromMainchain tx %s", tx.ID.String()))
}
- crossChainInputs, err := p.getCrossChainInputs(ormTx.ID, tx)
+ statusFail := p.txStatus.VerifyStatus[txIndex].StatusFail
+ crossChainInputs, err := p.getCrossChainInputs(ormTx.ID, tx, statusFail)
if err != nil {
return err
}
return nil
}
-func (p *attachBlockProcessor) getCrossChainInputs(mainchainTxID uint64, tx *btmTypes.Tx) ([]*orm.CrossTransactionInput, error) {
+func (p *attachBlockProcessor) getCrossChainInputs(mainchainTxID uint64, tx *btmTypes.Tx, statusFail bool) ([]*orm.CrossTransactionInput, error) {
// assume inputs are from an identical owner
script := hex.EncodeToString(tx.Inputs[0].ControlProgram())
inputs := []*orm.CrossTransactionInput{}
continue
}
+ if statusFail && *rawOutput.OutputCommitment.AssetAmount.AssetId != *btmConsensus.BTMAssetID {
+ continue
+ }
+
asset, err := p.getAsset(rawOutput.OutputCommitment.AssetAmount.AssetId.String())
if err != nil {
return nil, err
return errors.Wrap(err, fmt.Sprintf("create WithdrawalFromSidechain tx %s", tx.ID.String()))
}
- crossChainOutputs, err := p.getCrossChainOutputs(ormTx.ID, tx)
+ statusFail := p.txStatus.VerifyStatus[txIndex].StatusFail
+ crossChainOutputs, err := p.getCrossChainOutputs(ormTx.ID, tx, statusFail)
if err != nil {
return err
}
return nil
}
-func (p *attachBlockProcessor) getCrossChainOutputs(sidechainTxID uint64, tx *vaporTypes.Tx) ([]*orm.CrossTransactionOutput, error) {
+func (p *attachBlockProcessor) getCrossChainOutputs(sidechainTxID uint64, tx *vaporTypes.Tx, statusFail bool) ([]*orm.CrossTransactionOutput, error) {
outputs := []*orm.CrossTransactionOutput{}
for i, rawOutput := range tx.Outputs {
if rawOutput.OutputType() != vaporTypes.CrossChainOutputType {
continue
}
+ if statusFail && *rawOutput.AssetAmount().AssetId != *vaporConsensus.BTMAssetID {
+ continue
+ }
+
asset, err := p.getAsset(rawOutput.AssetAmount().AssetId.String())
if err != nil {
return nil, err
return nil
}
+
+// if txDesc.StatusFail && m.asset.Asset != btm.FeeAsset {
+// continue
+// }
+
+// case *btmTypes.TxInput:
+// if m.statusFail && source.AssetID() != *consensus.BTMAssetID {
+// continue
+// }
+
+// if m.statusFail && *source.AssetId != *consensus.BTMAssetID {
+// continue
+// }