OSDN Git Service

what can i sat
authorHAOYUatHZ <haoyu@protonmail.com>
Tue, 18 Jun 2019 02:33:51 +0000 (10:33 +0800)
committerHAOYUatHZ <haoyu@protonmail.com>
Tue, 18 Jun 2019 02:33:51 +0000 (10:33 +0800)
federation/service/asset_keeper.go
federation/warder.go

index e35403d..f3f817e 100644 (file)
@@ -21,6 +21,15 @@ func NewAssetKeeper(db *gorm.DB) *AssetKeeper {
        }
 }
 
+func (a *AssetKeeper) GetByOrmID(id uint64) (*orm.Asset, error) {
+       asset := &orm.Asset{ID: id}
+       if err := a.db.Where(asset).First(asset).Error; err != nil {
+               return nil, errors.Wrap(err, "asset not found by orm id")
+       }
+
+       return asset, nil
+}
+
 func (a *AssetKeeper) Get(assetID string) (*orm.Asset, error) {
        if asset := a.assetCache.Get(assetID); asset != nil {
                return asset, nil
index 9120e05..1fd6cfa 100644 (file)
@@ -189,9 +189,12 @@ func (w *warder) buildSidechainTx(ormTx *orm.CrossTransaction) (*vaporTypes.Tx,
        }
 
        for _, req := range ormTx.Reqs {
-               // TODO:
                // getAsset from assetKeeper instead of preload asset, in order to save db query overload
-               asset := &orm.Asset{}
+               asset, err := w.assetKeeper.GetByOrmID(req.AssetID)
+               if err != nil {
+                       return nil, "", errors.Wrap(err, "get asset by ormAsset ID")
+               }
+
                assetID := &vaporBc.AssetID{}
                if err := assetID.UnmarshalText([]byte(asset.AssetID)); err != nil {
                        return nil, "", errors.Wrap(err, "Unmarshal muxID")