"fmt"
"time"
- "github.com/bytom/consensus"
+ btmConsensus "github.com/bytom/consensus"
btmBc "github.com/bytom/protocol/bc"
"github.com/bytom/protocol/bc/types"
"github.com/jinzhu/gorm"
log "github.com/sirupsen/logrus"
+ vaporConsensus "github.com/vapor/consensus"
+ "github.com/vapor/consensus/segwit"
"github.com/vapor/errors"
"github.com/vapor/federation/common"
"github.com/vapor/federation/config"
"github.com/vapor/federation/service"
"github.com/vapor/federation/util"
"github.com/vapor/protocol/bc"
+ "github.com/vapor/wallet"
)
type mainchainKeeper struct {
}
func (m *mainchainKeeper) getCrossChainReqs(crossTransactionID uint64, tx *types.Tx, statusFail bool) ([]*orm.CrossTransactionReq, error) {
+ var fromAddress, toAddress string
// assume inputs are from an identical owner
- script := hex.EncodeToString(tx.Inputs[0].ControlProgram())
+ prog := tx.Inputs[0].ControlProgram()
+ script := hex.EncodeToString(prog)
+ switch {
+ case segwit.IsP2WPKHScript(prog):
+ if pubHash, err := segwit.GetHashFromStandardProg(prog); err == nil {
+ fromAddress = wallet.BuildP2PKHAddress(pubHash, &vaporConsensus.MainNetParams)
+ toAddress = wallet.BuildP2PKHAddress(pubHash, &vaporConsensus.VaporNetParams)
+ }
+ case segwit.IsP2WSHScript(prog):
+ if scriptHash, err := segwit.GetHashFromStandardProg(prog); err == nil {
+ fromAddress = wallet.BuildP2SHAddress(scriptHash, &vaporConsensus.MainNetParams)
+ toAddress = wallet.BuildP2SHAddress(scriptHash, &vaporConsensus.VaporNetParams)
+ }
+ }
+
reqs := []*orm.CrossTransactionReq{}
for i, rawOutput := range tx.Outputs {
// check valid deposit
continue
}
- if statusFail && *rawOutput.OutputCommitment.AssetAmount.AssetId != *consensus.BTMAssetID {
+ if statusFail && *rawOutput.OutputCommitment.AssetAmount.AssetId != *btmConsensus.BTMAssetID {
continue
}
AssetID: asset.ID,
AssetAmount: rawOutput.OutputCommitment.AssetAmount.Amount,
Script: script,
+ FromAddress: fromAddress,
+ ToAddress: toAddress,
}
reqs = append(reqs, req)
}