OSDN Git Service

feat: cheack asset definition mismatch
authorHAOYUatHZ <haoyu@protonmail.com>
Tue, 21 May 2019 08:10:51 +0000 (16:10 +0800)
committerHAOYUatHZ <haoyu@protonmail.com>
Tue, 21 May 2019 08:10:51 +0000 (16:10 +0800)
account/builder.go

index 3586b05..f5f309f 100644 (file)
@@ -39,6 +39,7 @@ type crossInAction struct {
        SourceID        string                 `json:"source_id"` // AnnotatedUTXO
        SourcePos       uint64                 `json:"source_pos"`
        AssetDefinition map[string]interface{} `json:"asset_definition"`
+       UpdateAssetDef  bool                   `json:"update_asset_definition"`
 }
 
 // type AnnotatedInput struct {
@@ -78,18 +79,21 @@ func (a *crossInAction) Build(ctx context.Context, b *txbuilder.TemplateBuilder)
        if !chainjson.IsValidJSON(rawDefinition) {
                return errors.New("asset definition is not in valid json format")
        }
-       // TODO: check duplicate
        if preAsset, _ := a.accounts.assetReg.GetAsset(a.AssetId.String()); preAsset != nil {
-               preRawDefinition, _ := asset.SerializeAssetDef(a.AssetDefinition)
+               // GetAsset() doesn't unmashall for RawDefinitionBytes
+               preRawDefinition, err := asset.SerializeAssetDef(preAsset.DefinitionMap)
                if err != nil {
                        return asset.ErrSerializing
                }
 
-               if !testutil.DeepEqual(preRawDefinition, rawDefinition) {
+               if !testutil.DeepEqual(preRawDefinition, rawDefinition) && !UpdateAssetDef {
                        return errors.New("asset definition mismatch with previous definition")
                }
+               // TODO: update asset def here?
        }
 
+       // TODO: save AssetDefinition
+
        // txin := types.NewIssuanceInput(nonce[:], a.Amount, asset.IssuanceProgram, nil, asset.RawDefinitionByte)
        // tplIn := &txbuilder.SigningInstruction{}
        // if asset.Signer != nil {