Golang implemented sidechain for Bytom
Révision | 00b377a55c40302dd5fac68748ef71a3d43348c7 (tree) |
---|---|
l'heure | 2019-11-12 12:11:44 |
Auteur | wz <mars@byto...> |
Commiter | wz |
add program for corssout action
@@ -150,7 +150,8 @@ func DecodeCrossOutAction(data []byte) (Action, error) { | ||
150 | 150 | |
151 | 151 | type crossOutAction struct { |
152 | 152 | bc.AssetAmount |
153 | - Address string `json:"address"` | |
153 | + Address string `json:"address"` | |
154 | + Program json.HexBytes `json:"control_program"` | |
154 | 155 | } |
155 | 156 | |
156 | 157 | func (a *crossOutAction) Build(ctx context.Context, b *TemplateBuilder) error { |
@@ -168,23 +169,25 @@ func (a *crossOutAction) Build(ctx context.Context, b *TemplateBuilder) error { | ||
168 | 169 | return MissingFieldsError(missing...) |
169 | 170 | } |
170 | 171 | |
171 | - address, err := common.DecodeAddress(a.Address, consensus.BytomMainNetParams(&consensus.ActiveNetParams)) | |
172 | - if err != nil { | |
173 | - return err | |
174 | - } | |
175 | - | |
176 | - redeemContract := address.ScriptAddress() | |
177 | - program := []byte{} | |
178 | - switch address.(type) { | |
179 | - case *common.AddressWitnessPubKeyHash: | |
180 | - program, err = vmutil.P2WPKHProgram(redeemContract) | |
181 | - case *common.AddressWitnessScriptHash: | |
182 | - program, err = vmutil.P2WSHProgram(redeemContract) | |
183 | - default: | |
184 | - return errors.New("unsupport address type") | |
185 | - } | |
186 | - if err != nil { | |
187 | - return err | |
172 | + program := a.Program | |
173 | + if len(a.Program) == 0 { | |
174 | + address, err := common.DecodeAddress(a.Address, consensus.BytomMainNetParams(&consensus.ActiveNetParams)) | |
175 | + if err != nil { | |
176 | + return err | |
177 | + } | |
178 | + | |
179 | + redeemContract := address.ScriptAddress() | |
180 | + switch address.(type) { | |
181 | + case *common.AddressWitnessPubKeyHash: | |
182 | + program, err = vmutil.P2WPKHProgram(redeemContract) | |
183 | + case *common.AddressWitnessScriptHash: | |
184 | + program, err = vmutil.P2WSHProgram(redeemContract) | |
185 | + default: | |
186 | + return errors.New("unsupport address type") | |
187 | + } | |
188 | + if err != nil { | |
189 | + return err | |
190 | + } | |
188 | 191 | } |
189 | 192 | |
190 | 193 | out := types.NewCrossChainOutput(*a.AssetId, a.Amount, program) |