* change crossin tx multi sign to single
* opt
}
maxTime := time.Now().Add(req.TTL.Duration)
}
maxTime := time.Now().Add(req.TTL.Duration)
+ ctx = context.WithValue(ctx, "block_height", a.wallet.Chain.BestBlockHeight())
tpl, err := txbuilder.Build(ctx, req.Tx, actions, maxTime, req.TimeRange)
if errors.Root(err) == txbuilder.ErrAction {
// append each of the inner errors contained in the data.
tpl, err := txbuilder.Build(ctx, req.Tx, actions, maxTime, req.TimeRange)
if errors.Root(err) == txbuilder.ErrAction {
// append each of the inner errors contained in the data.
// arguments will be set when materializeWitnesses
txin := types.NewCrossChainInput(nil, c.SourceID, *c.AssetId, c.Amount, c.SourcePos, c.VMVersion, c.RawDefinitionByte, c.IssuanceProgram)
tplIn := &SigningInstruction{}
// arguments will be set when materializeWitnesses
txin := types.NewCrossChainInput(nil, c.SourceID, *c.AssetId, c.Amount, c.SourcePos, c.VMVersion, c.RawDefinitionByte, c.IssuanceProgram)
tplIn := &SigningInstruction{}
+ blockHeight := ctx.Value("block_height").(uint64)
fed := cfg.CommonConfig.Federation
fed := cfg.CommonConfig.Federation
+ if blockHeight > consensus.CrossInForkHeight {
+ fed = cfg.SingleFederationConfig()
+ }
if !common.IsOpenFederationIssueAsset(c.RawDefinitionByte) {
tplIn.AddRawWitnessKeys(fed.Xpubs, cfg.FedAddressPath, fed.Quorum)
if !common.IsOpenFederationIssueAsset(c.RawDefinitionByte) {
tplIn.AddRawWitnessKeys(fed.Xpubs, cfg.FedAddressPath, fed.Quorum)
+// Default configurable federation parameters.
+func SingleFederationConfig() *FederationConfig {
+ return &FederationConfig{
+ Xpubs: []chainkd.XPub{
+ xpub("0f810c52bcd0d44482d63ef6131712b32e08b2a20c5daf134072b870a789623a726eb61e4021caa7158fbc6ca99827485c7f60010913a12a810ef7b71b03dacd"),
+ },
+ Quorum: 1,
+ }
+}
+
// Default configurable crosschain parameters.
func DefaultCrossChainConfig() *CrossChainConfig {
return &CrossChainConfig{}
// Default configurable crosschain parameters.
func DefaultCrossChainConfig() *CrossChainConfig {
return &CrossChainConfig{}
-func FederationWScript(c *Config) []byte {
+func FederationWScript(c *Config, height uint64) []byte {
script := FederationPMultiSigScript(c)
script := FederationPMultiSigScript(c)
+ if height > consensus.CrossInForkHeight {
+ script = FederationPMultiSigScript(&Config{Federation: SingleFederationConfig()})
+ }
+
scriptHash := crypto.Sha256(script)
wscript, err := vmutil.P2WSHProgram(scriptHash)
if err != nil {
scriptHash := crypto.Sha256(script)
wscript, err := vmutil.P2WSHProgram(scriptHash)
if err != nil {
log.Panicf("fail on decode genesis tx output control program")
}
log.Panicf("fail on decode genesis tx output control program")
}
- coinbaseInput := FederationWScript(CommonConfig)
+ coinbaseInput := FederationWScript(CommonConfig, 0)
txData := types.TxData{
Version: 1,
txData := types.TxData{
Version: 1,
PayToWitnessPubKeyHashDataSize = 20
PayToWitnessScriptHashDataSize = 32
PayToWitnessPubKeyHashDataSize = 20
PayToWitnessScriptHashDataSize = 32
+ CrossInForkHeight = 128957600
+
"pubkey": config.PrivateKey().XPub(),
"fed_xpubs": config.Federation.Xpubs,
"fed_quorum": config.Federation.Quorum,
"pubkey": config.PrivateKey().XPub(),
"fed_xpubs": config.Federation.Xpubs,
"fed_quorum": config.Federation.Quorum,
- "fed_controlprogram": hex.EncodeToString(cfg.FederationWScript(config)),
+ "fed_controlprogram": hex.EncodeToString(cfg.FederationWScript(config, 0)),
// find whether config xpubs equal genesis block xpubs
func checkConfig(chain *protocol.Chain, config *cfg.Config) error {
// find whether config xpubs equal genesis block xpubs
func checkConfig(chain *protocol.Chain, config *cfg.Config) error {
- fedpegScript := cfg.FederationWScript(config)
+ fedpegScript := cfg.FederationWScript(config, 0)
genesisBlock, err := chain.GetBlockByHeight(0)
if err != nil {
return err
genesisBlock, err := chain.GetBlockByHeight(0)
if err != nil {
return err
}
if !common.IsOpenFederationIssueAsset(e.RawDefinitionByte) {
}
if !common.IsOpenFederationIssueAsset(e.RawDefinitionByte) {
- prog.Code = config.FederationWScript(config.CommonConfig)
+ prog.Code = config.FederationWScript(config.CommonConfig, vs.block.Height)
}
if _, err := vm.Verify(NewTxVMContext(vs, e, prog, e.WitnessArguments), consensus.ActiveNetParams.DefaultGasCredit); err != nil {
}
if _, err := vm.Verify(NewTxVMContext(vs, e, prog, e.WitnessArguments), consensus.ActiveNetParams.DefaultGasCredit); err != nil {