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)
}
"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)
}