From 160d3c79a97fe57e5909c5aa9b6e261f591d4e2a Mon Sep 17 00:00:00 2001 From: wz Date: Tue, 12 Nov 2019 22:03:03 +0800 Subject: [PATCH] Modify corssout tx action (#441) * add program for crossout action * fix --- blockchain/txbuilder/actions.go | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/blockchain/txbuilder/actions.go b/blockchain/txbuilder/actions.go index fbefdb90..ae9fcb04 100644 --- a/blockchain/txbuilder/actions.go +++ b/blockchain/txbuilder/actions.go @@ -150,7 +150,8 @@ func DecodeCrossOutAction(data []byte) (Action, error) { type crossOutAction struct { bc.AssetAmount - Address string `json:"address"` + Address string `json:"address"` + Program json.HexBytes `json:"control_program"` } func (a *crossOutAction) Build(ctx context.Context, b *TemplateBuilder) error { @@ -168,23 +169,25 @@ func (a *crossOutAction) Build(ctx context.Context, b *TemplateBuilder) error { return MissingFieldsError(missing...) } - address, err := common.DecodeAddress(a.Address, consensus.BytomMainNetParams(&consensus.ActiveNetParams)) - if err != nil { - return err - } - - redeemContract := address.ScriptAddress() - program := []byte{} - switch address.(type) { - case *common.AddressWitnessPubKeyHash: - program, err = vmutil.P2WPKHProgram(redeemContract) - case *common.AddressWitnessScriptHash: - program, err = vmutil.P2WSHProgram(redeemContract) - default: - return errors.New("unsupport address type") - } - if err != nil { - return err + program := a.Program + if a.Address != "" { + address, err := common.DecodeAddress(a.Address, consensus.BytomMainNetParams(&consensus.ActiveNetParams)) + if err != nil { + return err + } + + redeemContract := address.ScriptAddress() + switch address.(type) { + case *common.AddressWitnessPubKeyHash: + program, err = vmutil.P2WPKHProgram(redeemContract) + case *common.AddressWitnessScriptHash: + program, err = vmutil.P2WSHProgram(redeemContract) + default: + return errors.New("unsupport address type") + } + if err != nil { + return err + } } out := types.NewCrossChainOutput(*a.AssetId, a.Amount, program) -- 2.11.0