OSDN Git Service

clean
authorHAOYUatHZ <haoyu@protonmail.com>
Wed, 22 May 2019 22:51:29 +0000 (06:51 +0800)
committerHAOYUatHZ <haoyu@protonmail.com>
Wed, 22 May 2019 22:51:29 +0000 (06:51 +0800)
asset/builder.go
consensus/federation/federation.go
node/node.go
protocol/bc/types/map.go

index 4a4ac98..4e76074 100644 (file)
@@ -31,7 +31,6 @@ type crossInAction struct {
        AssetDefinition map[string]interface{} `json:"asset_definition"`
 }
 
-// TODO: also need to hard-code mapTx
 func (a *crossInAction) Build(ctx context.Context, builder *txbuilder.TemplateBuilder) error {
        var missing []string
        if a.SourceID == "" {
@@ -83,7 +82,7 @@ func (a *crossInAction) Build(ctx context.Context, builder *txbuilder.TemplateBu
 
        fed := federation.GetFederation()
        // arguments will be set when materializeWitnesses
-       txin := types.NewCrossChainInput(nil, sourceID, *a.AssetId, a.Amount, a.SourcePos, fed.PegInScript, asset.RawDefinitionByte)
+       txin := types.NewCrossChainInput(nil, sourceID, *a.AssetId, a.Amount, a.SourcePos, fed.ControlProgram, asset.RawDefinitionByte)
        log.Info("cross-chain input action built")
        builder.RestrictMinTime(time.Now())
        tplIn := &txbuilder.SigningInstruction{}
index 526998d..8077e2c 100644 (file)
@@ -27,10 +27,10 @@ const fedCfgJson = `
 `
 
 type federation struct {
-       XPubs       []chainkd.XPub `json:"fed_xpubs"`
-       Quorum      int            `json:"fed_quorum"`
-       Path        [][]byte
-       PegInScript []byte
+       XPubs          []chainkd.XPub `json:"fed_xpubs"`
+       Quorum         int            `json:"fed_quorum"`
+       Path           [][]byte
+       ControlProgram []byte
 }
 
 func parseFedConfig() *federation {
@@ -67,8 +67,8 @@ func GetFederation() *federation {
        fed.Path = signers.GetBip0032Path(assetSigner, signers.AssetKeySpace)
        derivedXPubs := chainkd.DeriveXPubs(assetSigner.XPubs, fed.Path)
        derivedPKs := chainkd.XPubKeys(derivedXPubs)
-       if pegInScript, err := buildPegInScript(derivedPKs, assetSigner.Quorum); err == nil {
-               fed.PegInScript = pegInScript
+       if controlProgram, err := buildPegInControlProgram(derivedPKs, assetSigner.Quorum); err == nil {
+               fed.ControlProgram = controlProgram
        } else {
                log.Fatalf("fail to build peg-in script: %v", err)
        }
@@ -76,7 +76,7 @@ func GetFederation() *federation {
        return fed
 }
 
-func buildPegInScript(pubkeys []ed25519.PublicKey, nrequired int) (program []byte, err error) {
+func buildPegInControlProgram(pubkeys []ed25519.PublicKey, nrequired int) (program []byte, err error) {
        controlProg, err := vmutil.P2SPMultiSigProgram(pubkeys, nrequired)
        if err != nil {
                return nil, err
index 2869d6a..9d072c7 100644 (file)
@@ -64,10 +64,10 @@ func NewNode(config *cfg.Config) *Node {
        if err := federation.CheckFedConfig(); err == nil {
                fed := federation.GetFederation()
                log.WithFields(log.Fields{
-                       "module":          logModule,
-                       "fed_xpubs":       fed.XPubs,
-                       "fed_quorum":      fed.Quorum,
-                       "fed_peginscript": fed.PegInScript,
+                       "module":             logModule,
+                       "fed_xpubs":          fed.XPubs,
+                       "fed_quorum":         fed.Quorum,
+                       "fed_controlprogram": fed.ControlProgram,
                }).Info()
        } else {
                cmn.Exit("Error: " + err.Error())
index 4a795b5..6d90c2e 100644 (file)
@@ -4,6 +4,7 @@ import (
        log "github.com/sirupsen/logrus"
 
        "github.com/vapor/consensus"
+       "github.com/vapor/consensus/federation"
        "github.com/vapor/protocol/bc"
        "github.com/vapor/protocol/vm"
        "github.com/vapor/protocol/vm/vmutil"
@@ -127,7 +128,9 @@ func mapTx(tx *TxData) (headerID bc.Hash, hdr *bc.TxHeader, entryMap map[bc.Hash
                        spends = append(spends, spend)
 
                case *CrossChainInput:
-                       prog := &bc.Program{VmVersion: inp.VMVersion, Code: inp.ControlProgram}
+                       // hard code peg-in control program in consensus level, may need to
+                       // deal with soft fork (federation members change) in the future
+                       prog := &bc.Program{VmVersion: inp.VMVersion, Code: federation.GetFederation().ControlProgram}
                        src := &bc.ValueSource{
                                Ref:      &inp.SourceID,
                                Value:    &inp.AssetAmount,