From 97711d5aa71f762ea2e3d5f3103cad4a43f02e25 Mon Sep 17 00:00:00 2001 From: HAOYUatHZ Date: Fri, 28 Jun 2019 21:50:26 +0800 Subject: [PATCH] fix --- .gitignore | 14 +++++++------- blockchain/txbuilder/actions.go | 5 +++-- blockchain/txbuilder/signing_instruction.go | 5 +++++ config/genesis.go | 20 ++++++++++++++++---- node/node.go | 4 ++-- protocol/validation/tx.go | 2 +- 6 files changed, 34 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index c6146a2a..3d50b94b 100644 --- a/.gitignore +++ b/.gitignore @@ -21,11 +21,11 @@ _cgo_export.* _testmain.go cmd/fedd/fedd -cmd/bytomd/bytomd -cmd/bytomd/.bytomd -cmd/bytomcli/bytomcli -cmd/bytom/.bytom -.bytomd +cmd/vapord/vapord +cmd/vapord/.vapord +cmd/vaporcli/vaporcli +cmd/vapor/.vapor +.vapord target @@ -45,8 +45,8 @@ profile.cov profile.tmp .DS_Store -cmd/bytomd/bytomd_error/config.toml -cmd/bytomd/bytomd_error/genesis.json +cmd/vapord/vapord_error/config.toml +cmd/vapord/vapord_error/genesis.json blockchain/pseudohsm/testdata/pseudo/UTC--2017-11-01T09-24-31.848287391Z--931de33f-e62e-4de7-8036-f82ad5efa77e blockchain/pseudohsm/testdata/pseudo/UTC--2017-11-01T09-24-31.953012475Z--36b63ec7-b585-4a0e-95ff-e3f71b4ccb8b blockchain/pseudohsm/UTC--2017-11-01T09-24-30.596579759Z--2178d885-aca6-4436-a865-e7e439e4bd9c diff --git a/blockchain/txbuilder/actions.go b/blockchain/txbuilder/actions.go index e7320f5c..c13f16b2 100644 --- a/blockchain/txbuilder/actions.go +++ b/blockchain/txbuilder/actions.go @@ -8,7 +8,7 @@ import ( "golang.org/x/crypto/sha3" "github.com/vapor/common" - "github.com/vapor/config" + cfg "github.com/vapor/config" "github.com/vapor/consensus" "github.com/vapor/encoding/json" "github.com/vapor/protocol/bc" @@ -292,8 +292,9 @@ func (a *crossInAction) Build(ctx context.Context, builder *TemplateBuilder) err // arguments will be set when materializeWitnesses txin := types.NewCrossChainInput(nil, a.SourceID, *a.AssetId, a.Amount, a.SourcePos, a.VMVersion, a.RawDefinitionByte, a.IssuanceProgram) tplIn := &SigningInstruction{} - fed := config.CommonConfig.Federation + fed := cfg.CommonConfig.Federation tplIn.AddRawWitnessKeys(fed.Xpubs, nil, fed.Quorum) + tplIn.AddDataWitness(cfg.FederationP2SPMultiSigProgram(cfg.CommonConfig)) return builder.AddInput(txin, tplIn) } diff --git a/blockchain/txbuilder/signing_instruction.go b/blockchain/txbuilder/signing_instruction.go index e8786e2f..bf04773a 100644 --- a/blockchain/txbuilder/signing_instruction.go +++ b/blockchain/txbuilder/signing_instruction.go @@ -8,6 +8,11 @@ import ( "github.com/vapor/errors" ) +func (si *SigningInstruction) AddDataWitness(data chainjson.HexBytes) { + dw := DataWitness(data) + si.WitnessComponents = append(si.WitnessComponents, &dw) +} + // AddWitnessKeys adds a SignatureWitness with the given quorum and // list of keys derived by applying the derivation path to each of the // xpubs. diff --git a/config/genesis.go b/config/genesis.go index 431cf8eb..3b94cf11 100644 --- a/config/genesis.go +++ b/config/genesis.go @@ -6,20 +6,32 @@ import ( log "github.com/sirupsen/logrus" "github.com/vapor/consensus" + "github.com/vapor/crypto" "github.com/vapor/crypto/ed25519/chainkd" "github.com/vapor/protocol/bc" "github.com/vapor/protocol/bc/types" "github.com/vapor/protocol/vm/vmutil" ) -func FederationProgrom(c *Config) []byte { +func FederationP2SPMultiSigProgram(c *Config) []byte { xpubs := c.Federation.Xpubs - fedpegScript, err := vmutil.P2SPMultiSigProgram(chainkd.XPubKeys(xpubs), c.Federation.Quorum) + program, err := vmutil.P2SPMultiSigProgram(chainkd.XPubKeys(xpubs), c.Federation.Quorum) if err != nil { log.Panicf("fail to generate federation scirpt for federation: %v", err) } - return fedpegScript + return program +} + +func FederationP2WSHProgram(c *Config) []byte { + program := FederationP2SPMultiSigProgram(c) + scriptHash := crypto.Sha256(program) + WSHProgram, err := vmutil.P2WSHProgram(scriptHash) + if err != nil { + log.Panicf("Fail converts scriptHash to witness: %v", err) + } + + return WSHProgram } func GenesisTx() *types.Tx { @@ -28,7 +40,7 @@ func GenesisTx() *types.Tx { log.Panicf("fail on decode genesis tx output control program") } - coinbaseInput := FederationProgrom(CommonConfig) + coinbaseInput := FederationP2WSHProgram(CommonConfig) txData := types.TxData{ Version: 1, diff --git a/node/node.go b/node/node.go index 8469de7f..d737d22f 100644 --- a/node/node.go +++ b/node/node.go @@ -71,7 +71,7 @@ func NewNode(config *cfg.Config) *Node { "pubkey": config.PrivateKey().XPub(), "fed_xpubs": config.Federation.Xpubs, "fed_quorum": config.Federation.Quorum, - "fed_controlprogram": hex.EncodeToString(cfg.FederationProgrom(config)), + "fed_controlprogram": hex.EncodeToString(cfg.FederationP2WSHProgram(config)), }).Info() initLogFile(config) @@ -161,7 +161,7 @@ func NewNode(config *cfg.Config) *Node { // find whether config xpubs equal genesis block xpubs func checkConfig(chain *protocol.Chain, config *cfg.Config) error { - fedpegScript := cfg.FederationProgrom(config) + fedpegScript := cfg.FederationP2WSHProgram(config) genesisBlock, err := chain.GetBlockByHeight(0) if err != nil { return err diff --git a/protocol/validation/tx.go b/protocol/validation/tx.go index 1baf6c86..f6fbb68b 100644 --- a/protocol/validation/tx.go +++ b/protocol/validation/tx.go @@ -257,7 +257,7 @@ func checkValid(vs *validationState, e bc.Entry) (err error) { return errors.New("incorrect asset_id while checking CrossChainInput") } - code := config.FederationProgrom(config.CommonConfig) + code := config.FederationP2WSHProgram(config.CommonConfig) prog := &bc.Program{ VmVersion: e.ControlProgram.VmVersion, Code: code, -- 2.11.0