OSDN Git Service

fix https://github.com/Bytom/vapor/pull/488/files#r379226149
authorHAOYUatHZ <haoyu@protonmail.com>
Fri, 14 Feb 2020 14:39:41 +0000 (22:39 +0800)
committerHAOYUatHZ <haoyu@protonmail.com>
Fri, 14 Feb 2020 14:39:41 +0000 (22:39 +0800)
cmd/vapord/commands/run_node.go
config/config.go
config/federation.go
node/node.go
protocol/asset_filter.go [new file with mode: 0644]

index 2cc8bc7..af75e32 100644 (file)
@@ -21,6 +21,7 @@ var runNodeCmd = &cobra.Command{
 func init() {
        runNodeCmd.Flags().String("prof_laddr", config.ProfListenAddress, "Use http to profile vapord programs")
        runNodeCmd.Flags().Bool("mining", config.Mining, "Enable mining")
+       runNodeCmd.Flags().String("cross_chain.asset_whitelist", config.CrossChain.AssetWhitelist, "Cross-chain-allowed asset whitelist")
 
        runNodeCmd.Flags().Bool("auth.disable", config.Auth.Disable, "Disable rpc access authenticate")
 
index e5a0d02..4be5a25 100644 (file)
@@ -11,7 +11,6 @@ import (
        log "github.com/sirupsen/logrus"
 
        "github.com/bytom/vapor/crypto/ed25519/chainkd"
-       "github.com/bytom/vapor/protocol/bc"
 )
 
 var (
@@ -29,6 +28,7 @@ type Config struct {
        Web        *WebConfig        `mapstructure:"web"`
        Websocket  *WebsocketConfig  `mapstructure:"ws"`
        Federation *FederationConfig `mapstructure:"federation"`
+       CrossChain *CrossChainConfig `mapstructure:"cross_chain"`
 }
 
 // Default configurable parameters.
@@ -41,6 +41,7 @@ func DefaultConfig() *Config {
                Web:        DefaultWebConfig(),
                Websocket:  DefaultWebsocketConfig(),
                Federation: DefaultFederationConfig(),
+               CrossChain: DefaultCrossChainConfig(),
        }
 }
 
@@ -211,9 +212,12 @@ type WebsocketConfig struct {
 }
 
 type FederationConfig struct {
-       Xpubs          []chainkd.XPub `json:"xpubs"`
-       Quorum         int            `json:"quorum"`
-       AssetWhitelist []*bc.AssetID  `json:"asset_whitelist"`
+       Xpubs  []chainkd.XPub `json:"xpubs"`
+       Quorum int            `json:"quorum"`
+}
+
+type CrossChainConfig struct {
+       AssetWhitelist string `mapstructure:"asset_whitelist"`
 }
 
 // Default configurable rpc's auth parameters.
@@ -259,6 +263,10 @@ func DefaultFederationConfig() *FederationConfig {
        }
 }
 
+func DefaultCrossChainConfig() *CrossChainConfig {
+       return &CrossChainConfig{}
+}
+
 func xpub(str string) (xpub chainkd.XPub) {
        if err := xpub.UnmarshalText([]byte(str)); err != nil {
                log.Panicf("Fail converts a string to xpub")
index 5bb4ec2..5d5f913 100644 (file)
@@ -5,10 +5,6 @@ import (
        "encoding/json"
        "io/ioutil"
        "os"
-
-       "github.com/bytom/vapor/consensus"
-       "github.com/bytom/vapor/protocol/bc"
-       "github.com/bytom/vapor/protocol/bc/types"
 )
 
 func ExportFederationFile(fedFile string, config *Config) error {
@@ -32,31 +28,3 @@ func LoadFederationFile(fedFile string, config *Config) error {
 
        return json.NewDecoder(file).Decode(config.Federation)
 }
-
-type FederationAssetFilter struct {
-       whitelist map[string]struct{}
-}
-
-func NewFederationAssetFilter(whitelist []*bc.AssetID) *FederationAssetFilter {
-       f := &FederationAssetFilter{whitelist: make(map[string]struct{})}
-       f.whitelist[consensus.BTMAssetID.String()] = struct{}{}
-       for _, asset := range whitelist {
-               f.whitelist[asset.String()] = struct{}{}
-       }
-       return f
-}
-
-func (f *FederationAssetFilter) IsDust(tx *types.Tx) bool {
-       for _, input := range tx.Inputs {
-               if input.TypedInput.(type) != types.CrossChainInput {
-                       continue
-               }
-
-               assetID := input.AssetID()
-               if _, ok := f.whitelist[assetID.String()]; !ok {
-                       return true
-               }
-       }
-
-       return false
-}
index f98ab8e..b352ae2 100644 (file)
@@ -97,7 +97,7 @@ func NewNode(config *cfg.Config) *Node {
 
        dispatcher := event.NewDispatcher()
        movCore := mov.NewMovCore(config.DBBackend, config.DBDir(), consensus.ActiveNetParams.MovStartHeight)
-       assetFilter := cfg.NewFederationAssetFilter(config.Federation.AssetWhitelist)
+       assetFilter := protocol.NewAssetFilter(config.CrossChain.AssetWhitelist)
        txPool := protocol.NewTxPool(store, []protocol.DustFilterer{movCore, assetFilter}, dispatcher)
        chain, err := protocol.NewChain(store, txPool, []protocol.Protocoler{movCore}, dispatcher)
        if err != nil {
diff --git a/protocol/asset_filter.go b/protocol/asset_filter.go
new file mode 100644 (file)
index 0000000..e299f01
--- /dev/null
@@ -0,0 +1,36 @@
+package protocol
+
+import (
+       "strings"
+
+       "github.com/bytom/vapor/consensus"
+       "github.com/bytom/vapor/protocol/bc/types"
+)
+
+type assetFilter struct {
+       whitelist map[string]struct{}
+}
+
+func NewAssetFilter(whitelist string) *assetFilter {
+       af := &assetFilter{whitelist: make(map[string]struct{})}
+       af.whitelist[consensus.BTMAssetID.String()] = struct{}{}
+       for _, asset := range strings.Split(whitelist, ",") {
+               af.whitelist[asset] = struct{}{}
+       }
+       return af
+}
+
+func (af *assetFilter) IsDust(tx *types.Tx) bool {
+       for _, input := range tx.Inputs {
+               if _, ok := input.TypedInput.(*types.CrossChainInput); !ok {
+                       continue
+               }
+
+               assetID := input.AssetID()
+               if _, ok := af.whitelist[assetID.String()]; !ok {
+                       return true
+               }
+       }
+
+       return false
+}