X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=blockchain%2Ftxbuilder%2Factions.go;h=ae9fcb047788a20149a0657f96c7797cd0b94e96;hb=160d3c79a97fe57e5909c5aa9b6e261f591d4e2a;hp=fbefdb906f1ea429c76d78465165db82a8f86f0f;hpb=25b303cbf1fed3018e8fab79b79bf8f68a1d40fd;p=bytom%2Fvapor.git 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)