From: HAOYUatHZ Date: Wed, 22 May 2019 08:53:44 +0000 (+0800) Subject: fk X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=fd6fd2daa852ef55976f7df0d2e6a42819043054;hp=9117679c42fdcf523e03d1c106f33125d2cce18e;p=bytom%2Fvapor.git fk --- diff --git a/asset/asset.go b/asset/asset.go index 12ae60b3..3328ee52 100644 --- a/asset/asset.go +++ b/asset/asset.go @@ -102,6 +102,33 @@ type Asset struct { DefinitionMap map[string]interface{} `json:"definition"` } +// SaveExtAsset store external asset +func (reg *Registry) SaveExtAsset(a *Asset, alias string) error { + reg.assetMu.Lock() + defer reg.assetMu.Unlock() + + aliasKey := aliasKey(alias) + if existed := reg.db.Get(aliasKey); existed != nil { + return ErrDuplicateAlias + } + + assetKey := ExtAssetKey(&a.AssetID) + if existAsset := reg.db.Get(assetKey); existAsset != nil { + return ErrDuplicateAsset + } + + rawAsset, err := json.Marshal(a) + if err != nil { + return ErrMarshalAsset + } + + storeBatch := reg.db.NewBatch() + storeBatch.Set(aliasKey, []byte(a.AssetID.String())) + storeBatch.Set(assetKey, rawAsset) + storeBatch.Write() + return nil +} + // SaveAsset store asset func (reg *Registry) SaveAsset(a *Asset, alias string) error { reg.assetMu.Lock() diff --git a/asset/builder.go b/asset/builder.go index d323edc7..d8a410c3 100644 --- a/asset/builder.go +++ b/asset/builder.go @@ -24,7 +24,7 @@ func (r *Registry) DecodeCrossInAction(data []byte) (txbuilder.Action, error) { type crossInAction struct { reg *Registry bc.AssetAmount - SourceID string `json:"source_id"` // AnnotatedUTXO + SourceID string `json:"source_id"` SourcePos uint64 `json:"source_pos"` Program chainjson.HexBytes `json:"control_program"` AssetDefinition map[string]interface{} `json:"asset_definition"` @@ -32,8 +32,7 @@ type crossInAction struct { } // TODO: also need to hard-code mapTx -// TODO: iter cross-in and save asset, saveExternalAssetDefinition -// TODO: federation can sign? check arguments length? +// TODO: federation can sign? check arguments length? will path be diff? func (a *crossInAction) Build(ctx context.Context, builder *txbuilder.TemplateBuilder) error { var missing []string if len(a.Program) == 0 { @@ -72,7 +71,7 @@ func (a *crossInAction) Build(ctx context.Context, builder *txbuilder.TemplateBu asset.AssetID = *a.AssetId extAlias := a.AssetId.String() asset.Alias = &(extAlias) - a.reg.SaveAsset(asset, extAlias) + a.reg.SaveExtAsset(asset, extAlias) } arguments := [][]byte{}