"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 {
node: service.NewNode(cfg.Mainchain.Upstream),
chainName: cfg.Mainchain.Name,
assetStore: assetStore,
- fedProg: util.SegWitWrap(util.ParseFedProg(cfg.Warders, cfg.Quorum)),
+ fedProg: util.ParseFedProg(cfg.Warders, cfg.Quorum),
}
}
}
func (m *mainchainKeeper) isDepositTx(tx *types.Tx) bool {
+ for _, input := range tx.Inputs {
+ if bytes.Equal(input.ControlProgram(), m.fedProg) {
+ return false
+ }
+ }
+
for _, output := range tx.Outputs {
if bytes.Equal(output.OutputCommitment.ControlProgram, m.fedProg) {
return true
}
}
+
return false
}
}
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)
}
}
m.assetStore.Add(&orm.Asset{
- AssetID: assetID.String(),
- IssuanceProgram: hex.EncodeToString(inp.IssuanceProgram),
- VMVersion: inp.VMVersion,
- RawDefinitionByte: hex.EncodeToString(inp.AssetDefinition),
+ AssetID: assetID.String(),
+ IssuanceProgram: hex.EncodeToString(inp.IssuanceProgram),
+ VMVersion: inp.VMVersion,
+ Definition: string(inp.AssetDefinition),
})
}
}