From 0b60020f164f36f8d98e4f011fd52476a2c91970 Mon Sep 17 00:00:00 2001 From: HAOYUatHZ <37070449+HAOYUatHZ@users.noreply.github.com> Date: Mon, 15 Jul 2019 22:16:13 +0800 Subject: [PATCH] refactor: use derived xpubs for federation (#289) * add fed path * refactor: rename FedPath * clean --- blockchain/txbuilder/actions.go | 2 +- config/genesis.go | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/blockchain/txbuilder/actions.go b/blockchain/txbuilder/actions.go index ff83650d..8021f355 100644 --- a/blockchain/txbuilder/actions.go +++ b/blockchain/txbuilder/actions.go @@ -293,7 +293,7 @@ func (a *crossInAction) Build(ctx context.Context, builder *TemplateBuilder) err txin := types.NewCrossChainInput(nil, a.SourceID, *a.AssetId, a.Amount, a.SourcePos, a.VMVersion, a.RawDefinitionByte, a.IssuanceProgram) tplIn := &SigningInstruction{} fed := cfg.CommonConfig.Federation - tplIn.AddRawWitnessKeys(fed.Xpubs, nil, fed.Quorum) + tplIn.AddRawWitnessKeys(fed.Xpubs, cfg.FedAddressPath, fed.Quorum) tplIn.AddDataWitness(cfg.FederationPMultiSigScript(cfg.CommonConfig)) return builder.AddInput(txin, tplIn) } diff --git a/config/genesis.go b/config/genesis.go index aabb430b..4c8e62ed 100644 --- a/config/genesis.go +++ b/config/genesis.go @@ -13,9 +13,18 @@ import ( "github.com/vapor/protocol/vm/vmutil" ) +var FedAddressPath = [][]byte{ + []byte{0x2C, 0x00, 0x00, 0x00}, + []byte{0x99, 0x00, 0x00, 0x00}, + []byte{0x01, 0x00, 0x00, 0x00}, + []byte{0x00, 0x00, 0x00, 0x00}, + []byte{0x01, 0x00, 0x00, 0x00}, +} + func FederationPMultiSigScript(c *Config) []byte { xpubs := c.Federation.Xpubs - program, err := vmutil.P2SPMultiSigProgram(chainkd.XPubKeys(xpubs), c.Federation.Quorum) + derivedXPubs := chainkd.DeriveXPubs(xpubs, FedAddressPath) + program, err := vmutil.P2SPMultiSigProgram(chainkd.XPubKeys(derivedXPubs), c.Federation.Quorum) if err != nil { log.Panicf("fail to generate federation scirpt for federation: %v", err) } -- 2.11.0