@@ -30,6 +30,7 @@ const (
3030 Record TransactionType = 0x81
3131 DeployCode TransactionType = 0xd0
3232 DataFile TransactionType = 0x12
33+ DestroyUTXO TransactionType = 0x18
3334)
3435
3536//Payload define the func for loading the payload data
@@ -200,6 +201,8 @@ func (tx *Transaction) DeserializeUnsignedWithoutType(r io.Reader) error {
200201 tx .Payload = new (payload.PrivacyPayload )
201202 case DataFile :
202203 tx .Payload = new (payload.DataFile )
204+ case DestroyUTXO :
205+ tx .Payload = new (payload.DestroyUTXO )
203206 default :
204207 return errors .New ("[Transaction],invalide transaction type." )
205208 }
@@ -293,9 +296,6 @@ func (tx *Transaction) GetProgramHashes() ([]Uint160, error) {
293296 hashs = append (hashs , astHash )
294297 case IssueAsset :
295298 result := tx .GetMergedAssetIDValueFromOutputs ()
296- if err != nil {
297- return nil , NewDetailErr (err , ErrNoCode , "[Transaction], GetTransactionResults failed." )
298- }
299299 for k := range result {
300300 tx , err := TxStore .GetTransaction (k )
301301 if err != nil {
@@ -339,6 +339,27 @@ func (tx *Transaction) GetProgramHashes() ([]Uint160, error) {
339339 return nil , NewDetailErr (err , ErrNoCode , "[Transaction], GetProgramHashes ToCodeHash failed." )
340340 }
341341 hashs = append (hashs , astHash )
342+ case DestroyUTXO :
343+ inputs ,err := tx .GetMergedAssetIDValueFromReference ()
344+ if err != nil {
345+ return nil , NewDetailErr (err , ErrNoCode , "[Transaction], GetTransactionInputs failed." )
346+ }
347+ for k := range inputs {
348+ tx , err := TxStore .GetTransaction (k )
349+ if err != nil {
350+ return nil , NewDetailErr (err , ErrNoCode , fmt .Sprintf ("[Transaction], GetTransaction failed With AssetID:=%x" , k ))
351+ }
352+ if tx .TxType != RegisterAsset {
353+ return nil , NewDetailErr (errors .New ("[Transaction] error" ), ErrNoCode , fmt .Sprintf ("[Transaction], Transaction Type ileage With AssetID:=%x" , k ))
354+ }
355+
356+ switch v1 := tx .Payload .(type ) {
357+ case * payload.RegisterAsset :
358+ hashs = append (hashs , v1 .Controller )
359+ default :
360+ return nil , NewDetailErr (errors .New ("[Transaction] error" ), ErrNoCode , fmt .Sprintf ("[Transaction], payload is illegal" , k ))
361+ }
362+ }
342363 default :
343364 }
344365 //remove dupilicated hashes
0 commit comments