Repository: trustwallet/blockatlas
Pull request #1239 (2020-10-13 21:09:49)

[TokenIndexer] Setup service

codecov[bot]: # [Codecov](https://codecov.io/gh/trustwallet/blockatlas/pull/1239?src=pr&el=h1) Report
> Merging [#1239](https://codecov.io/gh/trustwallet/blockatlas/pull/1239?src=pr&el=desc) into [master](https://codecov.io/gh/trustwallet/blockatlas/commit/10281597a226a81787a067dd312e7921383baf65?el=desc) will **decrease** coverage by `0%`.
> The diff coverage is `0%`.

[![Impacted file tree graph](https://codecov.io/gh/trustwallet/blockatlas/pull/1239/graphs/tree.svg?width=650&height=150&src=pr&token=jnrjoEQAqv)](https://codecov.io/gh/trustwallet/blockatlas/pull/1239?src=pr&el=tree)

```diff
@@          Coverage Diff           @@
##           master   #1239   +/-   ##
======================================
- Coverage      39%     38%   -1%     
======================================
  Files         171     171           
  Lines        5400    5404    +4     
======================================
  Hits         2106    2106           
- Misses       3107    3111    +4     
  Partials      187     187           
```


| [Impacted Files](https://codecov.io/gh/trustwallet/blockatlas/pull/1239?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pkg/blockatlas/tx.go](https://codecov.io/gh/trustwallet/blockatlas/pull/1239/diff?src=pr&el=tree#diff-cGtnL2Jsb2NrYXRsYXMvdHguZ28=) | `64% <0%> (-3%)` | :arrow_down: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/trustwallet/blockatlas/pull/1239?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/trustwallet/blockatlas/pull/1239?src=pr&el=footer). Last update [1028159...7a008ae](https://codecov.io/gh/trustwallet/blockatlas/pull/1239?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).


Patch:
diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml
index 75861de..cb473fa 100644
--- a/.github/workflows/master.yml
+++ b/.github/workflows/master.yml
@@ -106,24 +106,27 @@ jobs:
          run: echo ${{ secrets.REGISTRY_PASSWORD }} | docker login -u ${{ secrets.REGISTRY_USERNAME }} --password-stdin
 
        - name: Docker Build & Push Release Images
-         if: steps.check_for_build.outputs.has-permission
+         if: steps.check.outputs.has-permission
          env:
            API_IMAGE: ${{ secrets.REGISTRY }}:api-${{ steps.hash.outputs.sha7 }}
            PARSER_IMAGE: ${{ secrets.REGISTRY }}:parser-${{ steps.hash.outputs.sha7 }}
            OBSERVER_SUBSCRIBER_IMAGE: ${{ secrets.REGISTRY }}:subscriber-${{ steps.hash.outputs.sha7 }}
            OBSERVER_NOTIFIER_IMAGE: ${{ secrets.REGISTRY }}:notifier-${{ steps.hash.outputs.sha7 }}
            SEARCHER_IMAGE: ${{ secrets.REGISTRY }}:searcher-${{ steps.hash.outputs.sha7 }}
+           INDEXER_IMAGE: ${{ secrets.REGISTRY }}:indexer-${{ steps.hash.outputs.sha7 }}
          run: |
            docker build --build-arg SERVICE=api/api -f Dockerfile.runner -t $API_IMAGE .
            docker build --build-arg SERVICE=parser/parser -f Dockerfile.runner -t $PARSER_IMAGE .
            docker build --build-arg SERVICE=subscriber/subscriber -f Dockerfile.runner -t $OBSERVER_SUBSCRIBER_IMAGE .
            docker build --build-arg SERVICE=notifier/notifier -f Dockerfile.runner -t $OBSERVER_NOTIFIER_IMAGE .
            docker build --build-arg SERVICE=searcher/searcher -f Dockerfile.runner -t $SEARCHER_IMAGE .
+           docker build --build-arg SERVICE=indexer/indexer -f Dockerfile.runner -t $INDEXER_IMAGE .
            docker push $API_IMAGE
            docker push $PARSER_IMAGE
            docker push $OBSERVER_SUBSCRIBER_IMAGE
            docker push $OBSERVER_NOTIFIER_IMAGE
            docker push $SEARCHER_IMAGE
+           docker push $INDEXER_IMAGE
 
   deploy:
     name: CD
diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml
index 1759a51..25e7467 100644
--- a/.github/workflows/pr-build.yml
+++ b/.github/workflows/pr-build.yml
@@ -65,14 +65,17 @@ jobs:
            OBSERVER_SUBSCRIBER_IMAGE: ${{ secrets.REGISTRY }}:subscriber-${{ steps.hash.outputs.sha7 }}
            OBSERVER_NOTIFIER_IMAGE: ${{ secrets.REGISTRY }}:notifier-${{ steps.hash.outputs.sha7 }}
            SEARCHER_IMAGE: ${{ secrets.REGISTRY }}:searcher-${{ steps.hash.outputs.sha7 }}
+           INDEXER_IMAGE: ${{ secrets.REGISTRY }}:indexer-${{ steps.hash.outputs.sha7 }}
          run: |
            docker build --build-arg SERVICE=api/api -f Dockerfile.runner -t $API_IMAGE .
            docker build --build-arg SERVICE=parser/parser -f Dockerfile.runner -t $PARSER_IMAGE .
            docker build --build-arg SERVICE=subscriber/subscriber -f Dockerfile.runner -t $OBSERVER_SUBSCRIBER_IMAGE .
            docker build --build-arg SERVICE=notifier/notifier -f Dockerfile.runner -t $OBSERVER_NOTIFIER_IMAGE .
            docker build --build-arg SERVICE=searcher/searcher -f Dockerfile.runner -t $SEARCHER_IMAGE .
+           docker build --build-arg SERVICE=indexer/indexer -f Dockerfile.runner -t $INDEXER_IMAGE .
            docker push $API_IMAGE
            docker push $PARSER_IMAGE
            docker push $OBSERVER_SUBSCRIBER_IMAGE
            docker push $OBSERVER_NOTIFIER_IMAGE
            docker push $SEARCHER_IMAGE
+           docker push $INDEXER_IMAGE
diff --git a/Makefile b/Makefile
index d630b42..7fae898 100644
--- a/Makefile
+++ b/Makefile
@@ -11,6 +11,7 @@ NOTIFIER := notifier
 PARSER := parser
 SUBSCRIBER := subscriber
 SEARCHER := searcher
+INDEXER := indexer
 COIN_FILE := coin/coins.yml
 COIN_GO_FILE := coin/coins.go
 GEN_COIN_FILE := coin/gen.go
@@ -44,6 +45,7 @@ STDERR := /tmp/.$(PROJECT_NAME)-stderr.txt
 # PID file will keep the process id of the server
 PID_API := /tmp/.$(PROJECT_NAME).$(API).pid
 PID_SEARCHER := /tmp/.$(PROJECT_NAME).$(SEARCHER).pid
+PID_INDEXER := /tmp/.$(PROJECT_NAME).$(INDEXER).pid
 PID_NOTIFIER := /tmp/.$(PROJECT_NAME).$(NOTIFIER).pid
 PID_PARSER := /tmp/.$(PROJECT_NAME).$(PARSER).pid
 PID_SUBSCRIBER := /tmp/.$(PROJECT_NAME).$(SUBSCRIBER).pid
@@ -72,34 +74,41 @@ start-api-mock: stop start-mockserver
 	@cat $(PID_API) | sed "/^/s/^/  \>  Mock PID: /"
 	@echo "  >  Error log: $(STDERR)"
 
-## start-observer-parser: Start observer-parser in development mode.
+## start-parser: Start observer-parser in development mode.
 start-parser: stop
 	@echo "  >  Starting $(PROJECT_NAME)"
 	@-$(GOBIN)/$(PARSER)/parser -c $(CONFIG_FILE) 2>&1 & echo $$! > $(PID_PARSER)
 	@cat $(PID_PARSER) | sed "/^/s/^/  \>  Parser PID: /"
 	@echo "  >  Error log: $(STDERR)"
 
-## start-observer-notifier: Start observer-notifier in development mode.
+## start-notifier: Start observer-notifier in development mode.
 start-notifier: stop
 	@echo "  >  Starting $(PROJECT_NAME)"
 	@-$(GOBIN)/$(NOTIFIER)/notifier -c $(CONFIG_FILE) 2>&1 & echo $$! > $(PID_NOTIFIER)
 	@cat $(PID_NOTIFIER) | sed "/^/s/^/  \>  Notifier PID: /"
 	@echo "  >  Error log: $(STDERR)"
 
-## start-observer-subscriber: Start observer-subscriber in development mode.
+## start-subscriber: Start observer-subscriber in development mode.
 start-subscriber: stop
 	@echo "  >  Starting $(PROJECT_NAME)"
 	@-$(GOBIN)/$(SUBSCRIBER)/subscriber -c $(CONFIG_FILE) 2>&1 & echo $$! > $(PID_SUBSCRIBER)
 	@cat $(PID_SUBSCRIBER) | sed "/^/s/^/  \>  Subscriber PID: /"
 	@echo "  >  Error log: $(STDERR)"
 
-## start-api: Start searcher in development mode.
+## start-searcher: Start searcher in development mode.
 start-searcher: stop
 	@echo "  >  Starting $(PROJECT_NAME)"
 	@-$(GOBIN)/$(SEARCHER)/searcher -c $(CONFIG_FILE) 2>&1 & echo $$! > $(PID_SEARCHER)
 	@cat $(PID_SEARCHER) | sed "/^/s/^/  \>  Searcher PID: /"
 	@echo "  >  Error log: $(STDERR)"
 
+## start-indexer: Start indexer in development mode.
+start-indexer: stop
+	@echo "  >  Starting $(PROJECT_NAME)"
+	@-$(GOBIN)/$(INDEXER)/indexer -c $(CONFIG_FILE) 2>&1 & echo $$! > $(PID_INDEXER)
+	@cat $(PID_INDEXER) | sed "/^/s/^/  \>  Indexer PID: /"
+	@echo "  >  Error log: $(STDERR)"
+
 ## stop: Stop development mode.
 stop:
 	@-touch $(PID_API) $(PID_NOTIFIER) $(PID_PARSER) $(PID_SUBSCRIBER) $(PID_MOCKSERVER) $(PID_SEARCHER)
@@ -109,7 +118,8 @@ stop:
 	@-kill `cat $(PID_SUBSCRIBER)` 2> /dev/null || true
 	@-kill `cat $(PID_MOCKSERVER)` 2> /dev/null || true
 	@-kill `cat $(PID_SEARCHER)` 2> /dev/null || true
-	@-rm $(PID_API) $(PID_NOTIFIER) $(PID_PARSER) $(PID_SUBSCRIBER) $(PID_MOCKSERVER) $(PID_SEARCHER)
+	@-kill `cat $(PID_INDEXER)` 2> /dev/null || true
+	@-rm $(PID_API) $(PID_NOTIFIER) $(PID_PARSER) $(PID_SUBSCRIBER) $(PID_INDEXER) $(PID_MOCKSERVER) $(PID_SEARCHER)
 
 stop-mockserver:
 	@-touch $(PID_MOCKSERVER)
@@ -229,7 +239,7 @@ endif
 
 go-compile: go-get go-build
 
-go-build: go-build-api go-build-notifier go-build-parser go-build-subscriber go-build-searcher
+go-build: go-build-api go-build-notifier go-build-parser go-build-subscriber go-build-searcher go-build-indexer
 
 docker-shutdown:
 	@echo "  >  Shutdown docker containers..."
@@ -261,6 +271,10 @@ go-build-searcher:
 	@echo "  >  Building searcher binary..."
 	GOBIN=$(GOBIN) go build $(LDFLAGS) -o $(GOBIN)/$(SEARCHER)/searcher ./cmd/$(SEARCHER)
 
+go-build-indexer:
+	@echo "  >  Building indexer binary..."
+	GOBIN=$(GOBIN) go build $(LDFLAGS) -o $(GOBIN)/$(INDEXER)/indexer ./cmd/$(INDEXER)
+
 go-generate:
 	@echo "  >  Generating dependency files..."
 	GOBIN=$(GOBIN) go generate $(generate)
diff --git a/api/api.go b/api/api.go
index 01ed507..799f134 100644
--- a/api/api.go
+++ b/api/api.go
@@ -6,6 +6,7 @@ import (
 	"github.com/swaggo/gin-swagger/swaggerFiles"
 	_ "github.com/trustwallet/blockatlas/docs"
 	"github.com/trustwallet/blockatlas/platform"
+	"github.com/trustwallet/blockatlas/services/tokenindexer"
 	"github.com/trustwallet/blockatlas/services/tokensearcher"
 )
 
@@ -24,10 +25,13 @@ func SetupPlatformAPI(router gin.IRouter) {
 	RegisterBasicAPI(router)
 }
 
-func SetupTokensIndexAPI(router gin.IRouter, instance tokensearcher.Instance) {
-	RegisterTokensIndexAPI(router, instance)
+func SetupTokensSearcherAPI(router gin.IRouter, instance tokensearcher.Instance) {
+	RegisterTokensSearcherAPI(router, instance)
 }
 
+func SetupTokensIndexAPI(router gin.IRouter, instance tokenindexer.Instance) {
+	RegisterTokensIndexAPI(router, instance)
+}
 func SetupSwaggerAPI(router gin.IRouter) {
 	router.GET("swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
 }
diff --git a/api/endpoint/token.go b/api/endpoint/token.go
index 6c0c6a1..c2b57f8 100644
--- a/api/endpoint/token.go
+++ b/api/endpoint/token.go
@@ -3,6 +3,7 @@ package endpoint
 import (
 	"github.com/gin-gonic/gin"
 	"github.com/trustwallet/blockatlas/pkg/blockatlas"
+	"github.com/trustwallet/blockatlas/services/tokenindexer"
 	"github.com/trustwallet/blockatlas/services/tokensearcher"
 	"net/http"
 	"strconv"
@@ -138,3 +139,17 @@ func GetTokensByAddressIndexer(c *gin.Context, instance tokensearcher.Instance)
 	}
 	c.JSON(http.StatusOK, result)
 }
+
+func GetNewTokens(c *gin.Context, instance tokenindexer.Instance) {
+	var query tokenindexer.Request
+	if err := c.Bind(&query); err != nil {
+		c.AbortWithStatusJSON(http.StatusBadRequest, errorResponse(err))
+		return
+	}
+	resp, err := instance.HandleNewTokensRequest(query, c.Request.Context())
+	if err != nil {
+		c.AbortWithStatusJSON(http.StatusInternalServerError, errorResponse(err))
+		return
+	}
+	c.JSON(http.StatusOK, resp)
+}
diff --git a/api/registry.go b/api/registry.go
index fdd4eff..50d0cc1 100644
--- a/api/registry.go
+++ b/api/registry.go
@@ -8,6 +8,7 @@ import (
 	"github.com/trustwallet/blockatlas/api/middleware"
 	"github.com/trustwallet/blockatlas/pkg/blockatlas"
 	"github.com/trustwallet/blockatlas/platform"
+	"github.com/trustwallet/blockatlas/services/tokenindexer"
 	"github.com/trustwallet/blockatlas/services/tokensearcher"
 	"time"
 )
@@ -108,8 +109,14 @@ func RegisterBasicAPI(router gin.IRouter) {
 	router.GET("/metrics", ginprom.PromHandler(promhttp.Handler()))
 }
 
-func RegisterTokensIndexAPI(router gin.IRouter, instance tokensearcher.Instance) {
+func RegisterTokensSearcherAPI(router gin.IRouter, instance tokensearcher.Instance) {
 	router.POST("/v3/tokens", func(c *gin.Context) {
 		endpoint.GetTokensByAddressIndexer(c, instance)
 	})
 }
+
+func RegisterTokensIndexAPI(router gin.IRouter, instance tokenindexer.Instance) {
+	router.POST("/v3/tokens/new", func(c *gin.Context) {
+		endpoint.GetNewTokens(c, instance)
+	})
+}
diff --git a/cmd/api/main.go b/cmd/api/main.go
index 3be4ef7..2e92f7f 100644
--- a/cmd/api/main.go
+++ b/cmd/api/main.go
@@ -12,6 +12,7 @@ import (
 	"github.com/trustwallet/blockatlas/pkg/logger"
 	"github.com/trustwallet/blockatlas/platform"
 	"github.com/trustwallet/blockatlas/services/spamfilter"
+	"github.com/trustwallet/blockatlas/services/tokenindexer"
 	"github.com/trustwallet/blockatlas/services/tokensearcher"
 	"time"
 )
@@ -27,7 +28,8 @@ var (
 	port, confPath string
 	engine         *gin.Engine
 	database       *db.Instance
-	t              tokensearcher.Instance
+	ts             tokensearcher.Instance
+	ti             tokenindexer.Instance
 	restAPI        string
 )
 
@@ -61,7 +63,12 @@ func init() {
 		if err := mq.TokensRegistration.Declare(); err != nil {
 			logger.Fatal(err)
 		}
-		t = tokensearcher.Init(database, platform.TokensAPIs, mq.TokensRegistration)
+		if err := mq.RawTransactionsTokenIndexer.Declare(); err != nil {
+			logger.Fatal(err)
+		}
+
+		ts = tokensearcher.Init(database, platform.TokensAPIs, mq.TokensRegistration)
+		ti = tokenindexer.Init(database)
 
 		go mq.FatalWorker(time.Second * 10)
 	}
@@ -74,9 +81,10 @@ func main() {
 	case "platform":
 		api.SetupPlatformAPI(engine)
 	case "tokens":
-		api.SetupTokensIndexAPI(engine, t)
+		api.SetupTokensSearcherAPI(engine, ts)
 	default:
-		api.SetupTokensIndexAPI(engine, t)
+		api.SetupTokensIndexAPI(engine, ti)
+		api.SetupTokensSearcherAPI(engine, ts)
 		api.SetupSwaggerAPI(engine)
 		api.SetupPlatformAPI(engine)
 	}
diff --git a/cmd/indexer/main.go b/cmd/indexer/main.go
new file mode 100644
index 0000000..ca6b8a2
--- /dev/null
+++ b/cmd/indexer/main.go
@@ -0,0 +1,61 @@
+package main
+
+import (
+	"context"
+	"github.com/spf13/viper"
+	"github.com/trustwallet/blockatlas/db"
+	"github.com/trustwallet/blockatlas/internal"
+	"github.com/trustwallet/blockatlas/mq"
+	"github.com/trustwallet/blockatlas/pkg/logger"
+	"github.com/trustwallet/blockatlas/services/tokenindexer"
+	"time"
+)
+
+const (
+	defaultConfigPath = "../../config.yml"
+)
+
+var (
+	ctx      context.Context
+	cancel   context.CancelFunc
+	confPath string
+	database *db.Instance
+)
+
+func init() {
+	ctx, cancel = context.WithCancel(context.Background())
+	_, confPath = internal.ParseArgs("", defaultConfigPath)
+
+	internal.InitConfig(confPath)
+	logger.InitLogger()
+
+	mqHost := viper.GetString("observer.rabbitmq.uri")
+	logMode := viper.GetBool("postgres.log")
+	prefetchCount := viper.GetInt("observer.rabbitmq.consumer.prefetch_count")
+
+	internal.InitRabbitMQ(mqHost, prefetchCount)
+
+	pgUri := viper.GetString("postgres.uri")
+	pgReadUri := viper.GetString("postgres.read_uri")
+	var err error
+	database, err = db.New(pgUri, pgReadUri, logMode)
+	if err != nil {
+		logger.Fatal(err)
+	}
+	go database.RestoreConnectionWorker(ctx, time.Second*10, pgUri)
+
+	time.Sleep(time.Millisecond)
+}
+
+func main() {
+	defer mq.Close()
+
+	if err := mq.RawTransactionsTokenIndexer.Declare(); err != nil {
+		logger.Fatal(err)
+	}
+	go mq.RawTransactionsTokenIndexer.RunConsumerWithCancelAndDbConn(tokenindexer.RunTokenIndexer, database, ctx)
+	go mq.FatalWorker(time.Second * 10)
+
+	internal.SetupGracefulShutdownForObserver()
+	cancel()
+}
diff --git a/cmd/parser/main.go b/cmd/parser/main.go
index 870b886..0f12a0f 100644
--- a/cmd/parser/main.go
+++ b/cmd/parser/main.go
@@ -49,6 +49,10 @@ func init() {
 		logger.Fatal(err)
 	}
 
+	if err := mq.RawTransactionsTokenIndexer.Declare(); err != nil {
+		logger.Fatal(err)
+	}
+
 	if len(platform.BlockAPIs) == 0 {
 		logger.Fatal("No APIs to observe")
 	}
@@ -108,9 +112,13 @@ func main() {
 		coinCancel[coin.Handle] = cancel
 
 		params := parser.Params{
-			Ctx:                   ctx,
-			Api:                   api,
-			Queue:                 []mq.Queue{mq.RawTransactions, mq.RawTransactionsSearcher},
+			Ctx: ctx,
+			Api: api,
+			Queue: []mq.Queue{
+				mq.RawTransactions,
+				mq.RawTransactionsSearcher,
+				mq.RawTransactionsTokenIndexer,
+			},
 			ParsingBlocksInterval: pollInterval,
 			FetchBlocksTimeout:    fetchBlocksInterval,
 			BacklogCount:          backlogCount,
diff --git a/db/addresstoasset.go b/db/addresstoasset.go
index e084d47..b089ca0 100644
--- a/db/addresstoasset.go
+++ b/db/addresstoasset.go
@@ -23,36 +23,36 @@ func (i Instance) GetSubscribedAddressesForAssets(ctx context.Context, addresses
 	return result, nil
 }
 
-func (i Instance) GetAssetsMapByAddresses(addresses []string, ctx context.Context) (map[string][]string, error) {
+func (i Instance) GetAssetsMapByAddresses(addresses []string, ctx context.Context) (map[string][]models.Asset, error) {
 	db := i.Gorm.WithContext(ctx)
 	var associations []models.AddressToAssetAssociation
 	if err := db.Joins("Address").Joins("Asset").Find(&associations, "address in (?)", addresses).Error; err != nil {
 		return nil, err
 	}
 
-	result := make(map[string][]string)
+	result := make(map[string][]models.Asset)
 	for _, a := range associations {
 		assets := result[a.Address.Address]
-		result[a.Address.Address] = append(assets, a.Asset.Asset)
+		result[a.Address.Address] = append(assets, a.Asset)
 	}
 	return result, nil
 }
 
-func (i Instance) GetAssetsMapByAddressesFromTime(addresses []string, from time.Time, ctx context.Context) (map[string][]string, error) {
+func (i Instance) GetAssetsMapByAddressesFromTime(addresses []string, from time.Time, ctx context.Context) (map[string][]models.Asset, error) {
 	if len(addresses) == 0 {
-		return map[string][]string{}, nil
+		return map[string][]models.Asset{}, nil
 	}
 	db := i.Gorm.WithContext(ctx)
 	var associations []models.AddressToAssetAssociation
-	err := db.Joins("Address").Where("address in (?)", addresses).Joins("Asset").Find(&associations, "created_at > ?", from).Error
+	err := db.Joins("Address").Where("address in (?)", addresses).Joins("Asset").Find(&associations, "address_to_asset_associations.created_at > ?", from).Error
 	if err != nil {
 		return nil, err
 	}
 
-	result := make(map[string][]string)
+	result := make(map[string][]models.Asset)
 	for _, a := range associations {
 		assets := result[a.Address.Address]
-		result[a.Address.Address] = append(assets, a.Asset.Asset)
+		result[a.Address.Address] = append(assets, a.Asset)
 	}
 	return result, nil
 }
@@ -76,16 +76,10 @@ func (i *Instance) GetAssociationsByAddressesFromTime(addresses []string, from t
 	return result, nil
 }
 
-func (i *Instance) AddAssociationsForAddress(address string, assets []string, ctx context.Context) error {
+func (i *Instance) AddAssociationsForAddress(address string, assets []models.Asset, ctx context.Context) error {
 	db := i.Gorm.WithContext(ctx)
 	return db.Transaction(func(tx *gorm.DB) error {
-		uniqueAssets := getUniqueStrings(assets)
-		uniqueAssetsModel := make([]models.Asset, 0, len(uniqueAssets))
-		for _, l := range uniqueAssets {
-			uniqueAssetsModel = append(uniqueAssetsModel, models.Asset{
-				Asset: l,
-			})
-		}
+		uniqueAssets := getUniqueAssets(assets)
 
 		var err error
 		dbAddress := models.Address{Address: address}
@@ -94,15 +88,18 @@ func (i *Instance) AddAssociationsForAddress(address string, assets []string, ct
 			return err
 		}
 
-		if len(uniqueAssetsModel) > 0 {
-			if err = tx.Clauses(clause.OnConflict{DoNothing: true}).Create(&uniqueAssetsModel).Error; err != nil {
+		if len(uniqueAssets) > 0 {
+			if err = tx.Clauses(clause.OnConflict{DoNothing: true}).Create(&uniqueAssets).Error; err != nil {
 				return err
 			}
 		}
 
 		var dbAssets []models.Asset
 		if len(uniqueAssets) > 0 {
-			if err = tx.Where("asset in (?)", uniqueAssets).Find(&dbAssets).Error; err != nil {
+			err = tx.
+				Where("asset in (?)", models.AssetIDs(uniqueAssets)).
+				Find(&dbAssets).Error
+			if err != nil {
 				return err
 			}
 		}
@@ -136,10 +133,10 @@ func (i *Instance) AddAssociationsForAddress(address string, assets []string, ct
 	})
 }
 
-func (i *Instance) UpdateAssociationsForExistingAddresses(associations map[string][]string, ctx context.Context) error {
+func (i *Instance) UpdateAssociationsForExistingAddresses(associations map[string][]models.Asset, ctx context.Context) error {
 	db := i.Gorm.WithContext(ctx)
 	return db.Transaction(func(tx *gorm.DB) error {
-		assets := make([]string, 0, len(associations))
+		assets := make([]models.Asset, 0, len(associations))
 		for _, v := range associations {
 			assets = append(assets, v...)
 		}
@@ -148,17 +145,18 @@ func (i *Instance) UpdateAssociationsForExistingAddresses(associations map[strin
 			return nil
 		}
 
-		uniqueAssets := getUniqueStrings(assets)
+		uniqueAssets := getUniqueAssets(assets)
 		uniqueAssetsModel := make([]models.Asset, 0, len(uniqueAssets))
 		for _, l := range uniqueAssets {
-			uniqueAssetsModel = append(uniqueAssetsModel, models.Asset{Asset: l})
+			uniqueAssetsModel = append(uniqueAssetsModel, models.Asset{Asset: l.Asset})
 		}
 		if err := tx.Clauses(clause.OnConflict{DoNothing: true}).Create(&uniqueAssetsModel).Error; err != nil {
 			return err
 		}
 
 		var dbAssets []models.Asset
-		err := tx.Where("asset in (?)", uniqueAssets).
+		err := tx.
+			Where("asset in (?)", models.AssetIDs(uniqueAssets)).
 			Find(&dbAssets).
 			Limit(len(uniqueAssets)).
 			Error
@@ -207,7 +205,7 @@ func (i *Instance) UpdateAssociationsForExistingAddresses(associations map[strin
 				if !ok || addressID == 0 {
 					continue
 				}
-				assetID, ok := assetsMap[asset]
+				assetID, ok := assetsMap[asset.Asset]
 				if !ok || assetID == 0 {
 					continue
 				}
@@ -249,3 +247,15 @@ func getUniqueStrings(values []string) []string {
 	}
 	return list
 }
+
+func getUniqueAssets(values []models.Asset) []models.Asset {
+	keys := make(map[string]struct{})
+	var list []models.Asset
+	for _, entry := range values {
+		if _, value := keys[entry.Asset]; !value {
+			keys[entry.Asset] = struct{}{}
+			list = append(list, entry)
+		}
+	}
+	return list
+}
diff --git a/db/asset.go b/db/asset.go
new file mode 100644
index 0000000..1fa4984
--- /dev/null
+++ b/db/asset.go
@@ -0,0 +1,107 @@
+package db
+
+import (
+	"context"
+	"gorm.io/gorm"
+	"gorm.io/gorm/clause"
+	"time"
+	"unicode/utf8"
+
+	"github.com/trustwallet/blockatlas/db/models"
+)
+
+func (i *Instance) AddNewAssets(assets []models.Asset, ctx context.Context) error {
+	db := i.Gorm.WithContext(ctx)
+	if len(assets) == 0 {
+		return nil
+	}
+	uniqueAssets := getUniqueAssets(assets)
+	uniqueAssets = filterAssets(uniqueAssets)
+	existingAssets, err := i.GetAssetsByIDs(models.AssetIDs(uniqueAssets), ctx)
+	if err != nil {
+		return err
+	}
+	if len(existingAssets) == 0 {
+		return db.Clauses(clause.OnConflict{DoNothing: true}).Create(&uniqueAssets).Error
+	}
+	allAssetsMap := make(map[string]models.Asset)
+	for _, ua := range uniqueAssets {
+		allAssetsMap[ua.Asset] = ua
+	}
+	existingAssetsMap := make(map[string]models.Asset)
+	for _, ea := range existingAssets {
+		existingAssetsMap[ea.Asset] = ea
+	}
+	var newAssets []models.Asset
+	for k, v := range allAssetsMap {
+		_, ok := existingAssetsMap[k]
+		if !ok && v.Asset != "" {
+			newAssets = append(newAssets, v)
+		}
+	}
+	if len(newAssets) == 0 {
+		return nil
+	}
+
+	assetsBatch := assetsBatch(newAssets, batchCount)
+
+	return db.Transaction(func(tx *gorm.DB) error {
+		for _, na := range assetsBatch {
+			err := tx.Clauses(clause.OnConflict{DoNothing: true}).Create(&na).Error
+			if err != nil {
+				return err
+			}
+		}
+		return nil
+	})
+}
+
+func (i *Instance) GetAssetsByIDs(ids []string, ctx context.Context) ([]models.Asset, error) {
+	db := i.Gorm.WithContext(ctx)
+	// todo: look why nil and len 0 make db calls rn
+	if len(ids) == 0 {
+		return nil, nil
+	}
+	var dbAssets []models.Asset
+	if err := db.Where("asset in (?)", ids).Find(&dbAssets).Error; err != nil {
+		return nil, err
+	}
+	return dbAssets, nil
+}
+
+func (i *Instance) GetAssetsFrom(from time.Time, ctx context.Context) ([]models.Asset, error) {
+	db := i.Gorm.WithContext(ctx)
+	var dbAssets []models.Asset
+	if err := db.Find(&dbAssets, "created_at > ?", from).Error; err != nil {
+		return nil, err
+	}
+	return dbAssets, nil
+}
+
+func assetsBatch(values []models.Asset, sizeUint uint) [][]models.Asset {
+	size := int(sizeUint)
+	resultLength := (len(values) + size - 1) / size
+	result := make([][]models.Asset, resultLength)
+	lo, hi := 0, size
+	for i := range result {
+		if hi > len(values) {
+			hi = len(values)
+		}
+		result[i] = values[lo:hi:hi]
+		lo, hi = hi, hi+size
+	}
+	return result
+}
+
+func filterAssets(values []models.Asset) []models.Asset {
+	result := make([]models.Asset, 0, len(values))
+	for _, v := range values {
+		if utf8.ValidString(v.Asset) &&
+			utf8.ValidString(v.Type) &&
+			utf8.ValidString(v.Symbol) &&
+			utf8.ValidString(v.Name) {
+			result = append(result, v)
+		}
+	}
+	return result
+}
diff --git a/db/db.go b/db/db.go
index 4a66aa6..df27d65 100644
--- a/db/db.go
+++ b/db/db.go
@@ -17,6 +17,10 @@ type Instance struct {
 	Gorm *gorm.DB
 }
 
+// By gorm-bulk-insert author:
+// "Depending on the number of variables included, 2000 to 3000 is recommended."
+const batchCount = 3000
+
 func New(uri, readUri string, logMode bool) (*Instance, error) {
 	cfg := &gorm.Config{}
 	if logMode {
@@ -46,10 +50,10 @@ func New(uri, readUri string, logMode bool) (*Instance, error) {
 	err = db.AutoMigrate(
 		&models.NotificationSubscription{},
 		&models.Tracker{},
-		&models.AddressToAssetAssociation{},
 		&models.Asset{},
 		&models.AssetSubscription{},
 		&models.Address{},
+		&models.AddressToAssetAssociation{},
 	)
 	if err != nil {
 		return nil, err
diff --git a/db/models/addresstoasset.go b/db/models/addresstoasset.go
index 6330f90..e86322c 100644
--- a/db/models/addresstoasset.go
+++ b/db/models/addresstoasset.go
@@ -9,8 +9,8 @@ type AddressToAssetAssociation struct {
 	DeletedAt *time.Time `gorm:"index:,; default:NULL"`
 
 	Address   Address `gorm:"ForeignKey:AddressID; not null"`
-	AddressID uint    `gorm:"primary_key; autoIncrement:false; index:,"`
+	AddressID uint    `gorm:"primaryKey; autoIncrement:false; index:,"`
 
 	Asset   Asset `gorm:"ForeignKey:AssetID; not null"`
-	AssetID uint  `gorm:"primary_key; autoIncrement:false; index:,"`
+	AssetID uint  `gorm:"primaryKey; autoIncrement:false; index:,"`
 }
diff --git a/db/models/asset.go b/db/models/asset.go
index d889854..5e323e2 100644
--- a/db/models/asset.go
+++ b/db/models/asset.go
@@ -1,6 +1,22 @@
 package models
 
+import "time"
+
 type Asset struct {
-	ID    uint   `gorm:"primary_key"`
-	Asset string `gorm:"type:varchar(128); uniqueIndex"`
+	CreatedAt time.Time `gorm:"index:,"`
+	ID        uint      `gorm:"primary_key; uniqueIndex"`
+	Asset     string    `gorm:"type:varchar(128); uniqueIndex"`
+
+	Decimals uint   `gorm:"int(4)"`
+	Name     string `gorm:"type:varchar(128)"`
+	Symbol   string `gorm:"type:varchar(128)"`
+	Type     string `gorm:"type:varchar(12)"`
+}
+
+func AssetIDs(assets []Asset) []string {
+	result := make([]string, 0, len(assets))
+	for _, a := range assets {
+		result = append(result, a.Asset)
+	}
+	return result
 }
diff --git a/go.mod b/go.mod
index ab171ff..ab29c17 100644
--- a/go.mod
+++ b/go.mod
@@ -6,9 +6,11 @@ require (
 	github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751
 	github.com/btcsuite/btcutil v1.0.2
 	github.com/chenjiandongx/ginprom v0.0.0-20200410120253-7cfb22707fa6
+	github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f // indirect
 	github.com/deckarep/golang-set v1.7.1
 	github.com/gin-gonic/gin v1.6.3
 	github.com/imroc/req v0.3.0
+	github.com/kr/pty v1.1.8 // indirect
 	github.com/mitchellh/mapstructure v1.3.3
 	github.com/mr-tron/base58 v1.2.0
 	github.com/ory/dockertest v3.3.5+incompatible
@@ -29,6 +31,7 @@ require (
 	go.elastic.co/apm/module/apmhttp v1.8.0
 	go.elastic.co/apm/module/apmlogrus v1.8.0
 	go.uber.org/atomic v1.7.0
+	go.uber.org/multierr v1.5.0 // indirect
 	golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897
 	golang.org/x/net v0.0.0-20200506145744-7e3656a0809f
 	gopkg.in/yaml.v2 v2.3.0
diff --git a/mq/mq.go b/mq/mq.go
index aecb96f..2bd1bac 100644
--- a/mq/mq.go
+++ b/mq/mq.go
@@ -22,11 +22,12 @@ type (
 )
 
 const (
-	TxNotifications         Queue = "txNotifications"
-	Subscriptions           Queue = "subscriptions"
-	RawTransactions         Queue = "rawTransactions"
-	RawTransactionsSearcher Queue = "rawTransactionsSearcher"
-	TokensRegistration      Queue = "tokensRegistration"
+	TxNotifications             Queue = "txNotifications"
+	Subscriptions               Queue = "subscriptions"
+	RawTransactions             Queue = "rawTransactions"
+	RawTransactionsSearcher     Queue = "rawTransactionsSearcher"
+	RawTransactionsTokenIndexer Queue = "rawTransactionsTokenIndexer"
+	TokensRegistration          Queue = "tokensRegistration"
 )
 
 func Init(uri string) (err error) {
diff --git a/pkg/blockatlas/tx.go b/pkg/blockatlas/tx.go
index 3f3f4ca..ea3fb26 100644
--- a/pkg/blockatlas/tx.go
+++ b/pkg/blockatlas/tx.go
@@ -2,9 +2,12 @@ package blockatlas
 
 import (
 	mapset "github.com/deckarep/golang-set"
+	"github.com/trustwallet/blockatlas/db/models"
 	"github.com/trustwallet/blockatlas/pkg/numbers"
 	"github.com/trustwallet/golibs/coin"
+	"github.com/trustwallet/watchmarket/pkg/watchmarket"
 	"sort"
+	"strconv"
 	"strings"
 )
 
@@ -450,3 +453,94 @@ func GetEthereumTokenTypeByIndex(coinIndex uint) TokenType {
 	}
 	return tokenType
 }
+
+func (t Tx) AssetModel() (models.Asset, bool) {
+	var asset models.Asset
+	switch t.Meta.(type) {
+	case TokenTransfer:
+		asset.Asset = watchmarket.BuildID(t.Coin, t.Meta.(TokenTransfer).TokenID)
+		asset.Decimals = t.Meta.(TokenTransfer).Decimals
+		asset.Name = t.Meta.(TokenTransfer).Name
+		asset.Symbol = t.Meta.(TokenTransfer).Symbol
+		tp, ok := GetTokenType(t.Coin, t.Meta.(TokenTransfer).TokenID)
+		if !ok {
+			return models.Asset{}, false
+		}
+		asset.Type = tp
+	case *TokenTransfer:
+		asset.Asset = watchmarket.BuildID(t.Coin, t.Meta.(*TokenTransfer).TokenID)
+		asset.Decimals = t.Meta.(*TokenTransfer).Decimals
+		asset.Name = t.Meta.(*TokenTransfer).Name
+		asset.Symbol = t.Meta.(*TokenTransfer).Symbol
+		tp, ok := GetTokenType(t.Coin, t.Meta.(*TokenTransfer).TokenID)
+		if !ok {
+			return models.Asset{}, false
+		}
+		asset.Type = tp
+	case NativeTokenTransfer:
+		asset.Asset = watchmarket.BuildID(t.Coin, t.Meta.(NativeTokenTransfer).TokenID)
+		asset.Decimals = t.Meta.(NativeTokenTransfer).Decimals
+		asset.Name = t.Meta.(NativeTokenTransfer).Name
+		asset.Symbol = t.Meta.(NativeTokenTransfer).Symbol
+		tp, ok := GetTokenType(t.Coin, t.Meta.(NativeTokenTransfer).TokenID)
+		if !ok {
+			return models.Asset{}, false
+		}
+		asset.Type = tp
+	case *NativeTokenTransfer:
+		asset.Asset = watchmarket.BuildID(t.Coin, t.Meta.(*NativeTokenTransfer).TokenID)
+		asset.Decimals = t.Meta.(*NativeTokenTransfer).Decimals
+		asset.Name = t.Meta.(*NativeTokenTransfer).Name
+		asset.Symbol = t.Meta.(*NativeTokenTransfer).Symbol
+		tp, ok := GetTokenType(t.Coin, t.Meta.(*NativeTokenTransfer).TokenID)
+		if !ok {
+			return models.Asset{}, false
+		}
+		asset.Type = tp
+	case AnyAction:
+		asset.Asset = watchmarket.BuildID(t.Coin, t.Meta.(AnyAction).TokenID)
+		asset.Decimals = t.Meta.(AnyAction).Decimals
+		asset.Name = t.Meta.(AnyAction).Name
+		asset.Symbol = t.Meta.(AnyAction).Symbol
+		tp, ok := GetTokenType(t.Coin, t.Meta.(AnyAction).TokenID)
+		if !ok {
+			return models.Asset{}, false
+		}
+		asset.Type = tp
+	case *AnyAction:
+		asset.Asset = watchmarket.BuildID(t.Coin, t.Meta.(*AnyAction).TokenID)
+		asset.Decimals = t.Meta.(*AnyAction).Decimals
+		asset.Name = t.Meta.(*AnyAction).Name
+		asset.Symbol = t.Meta.(*AnyAction).Symbol
+		tp, ok := GetTokenType(t.Coin, t.Meta.(*AnyAction).TokenID)
+		if !ok {
+			return models.Asset{}, false
+		}
+		asset.Type = tp
+	default:
+		return models.Asset{}, false
+	}
+	if asset.Asset == "" {
+		return models.Asset{}, false
+	}
+	return asset, true
+}
+
+func GetTokenType(c uint, tokenID string) (string, bool) {
+	switch c {
+	case coin.Ethereum().ID:
+		return string(TokenTypeERC20), true
+	case coin.Tron().ID:
+		_, err := strconv.Atoi(tokenID)
+		if err != nil {
+			return string(TokenTypeTRC20), true
+		}
+		return string(TokenTypeTRC10), true
+	case coin.Smartchain().ID:
+		return string(TokenTypeBEP20), true
+	case coin.Binance().ID:
+		return string(TokenTypeBEP2), true
+	default:
+		return "", false
+	}
+}
diff --git a/platform/binance/model.go b/platform/binance/model.go
index a3e0a3a..8ad80ee 100644
--- a/platform/binance/model.go
+++ b/platform/binance/model.go
@@ -148,6 +148,7 @@ func normalizeTransferTransaction(t Tx) blockatlas.Tx {
 			Decimals: coin.Binance().Decimals,
 			From:     t.FromAddr.(string),
 			Symbol:   getTokenSymbolFromID(t.TxAsset),
+			Name:     getTokenSymbolFromID(t.TxAsset),
 			To:       t.ToAddr.(string),
 			TokenID:  t.TxAsset,
 			Value:    normalizeAmount(t.Value),
@@ -183,6 +184,7 @@ func normalizeMultiTransferTransaction(t Tx) []blockatlas.Tx {
 			tx.Type = blockatlas.TxNativeTokenTransfer
 			tx.Meta = blockatlas.NativeTokenTransfer{
 				Decimals: coin.Binance().Decimals,
+				Name:     getTokenSymbolFromID(subTx.TxAsset),
 				From:     subTx.FromAddr,
 				Symbol:   getTokenSymbolFromID(subTx.TxAsset),
 				To:       subTx.ToAddr,
diff --git a/platform/tron/token.go b/platform/tron/token.go
index b99bb24..e6e6406 100644
--- a/platform/tron/token.go
+++ b/platform/tron/token.go
@@ -3,6 +3,7 @@ package tron
 import (
 	"github.com/trustwallet/blockatlas/pkg/blockatlas"
 	"github.com/trustwallet/blockatlas/pkg/logger"
+	"strings"
 	"github.com/trustwallet/golibs/coin"
 	"sync"
 	"time"
@@ -36,7 +37,7 @@ func (p *Platform) GetTokenListByAddress(address string) (blockatlas.TokenPage,
 	for _, t := range trc20Tokens {
 		tokenPage = append(tokenPage, blockatlas.Token{
 			Name:     t.Name,
-			Symbol:   t.Symbol,
+			Symbol:   strings.ToUpper(t.Symbol),
 			Decimals: uint(t.Decimals),
 			TokenID:  t.ContractAddress,
 			Coin:     coin.Tron().ID,
@@ -79,7 +80,7 @@ func (p *Platform) getTokensChannel(id string, tkChan chan blockatlas.Token) err
 func NormalizeToken(info AssetInfo) blockatlas.Token {
 	return blockatlas.Token{
 		Name:     info.Name,
-		Symbol:   info.Symbol,
+		Symbol:   strings.ToUpper(info.Symbol),
 		TokenID:  info.ID,
 		Coin:     coin.TRX,
 		Decimals: info.Decimals,
diff --git a/platform/tron/transaction.go b/platform/tron/transaction.go
index 8fdeaab..cf3a53e 100644
--- a/platform/tron/transaction.go
+++ b/platform/tron/transaction.go
@@ -7,6 +7,7 @@ import (
 	"github.com/trustwallet/blockatlas/pkg/logger"
 	"github.com/trustwallet/golibs/coin"
 	"strconv"
+	"strings"
 )
 
 func (p *Platform) GetTxsByAddress(address string) (blockatlas.TxPage, error) {
@@ -67,7 +68,7 @@ func addTokenMeta(tx *blockatlas.Tx, srcTx Tx, tokenInfo AssetInfo) {
 	transfer := srcTx.Data.Contracts[0].Parameter.Value
 	tx.Meta = blockatlas.TokenTransfer{
 		Name:     tokenInfo.Name,
-		Symbol:   tokenInfo.Symbol,
+		Symbol:   strings.ToUpper(tokenInfo.Symbol),
 		TokenID:  tokenInfo.ID,
 		Decimals: tokenInfo.Decimals,
 		Value:    transfer.Amount,
diff --git a/services/notifier/delivery.go b/services/notifier/delivery.go
index cc5c5c1..6306228 100644
--- a/services/notifier/delivery.go
+++ b/services/notifier/delivery.go
@@ -17,9 +17,14 @@ func GetTransactionsFromDelivery(delivery amqp.Delivery, ctx context.Context) (b
 	span, _ := apm.StartSpan(ctx, "GetTransactionsFromDelivery", "app")
 	defer span.End()
 
+	logger.Info("--------------------------------------------")
+	logger.Info("Unmarshal: ")
+	logger.Info(delivery.Body)
 	if err := json.Unmarshal(delivery.Body, &txs); err != nil {
 		return nil, err
 	}
+	logger.Info("Done")
+	logger.Info("--------------------------------------------")
 
 	logger.Info("Consumed", logger.Params{"txs": len(txs), "coin": txs[0].Coin})
 
diff --git a/services/subscriber/tokens.go b/services/subscriber/tokens.go
index 825d2b3..d5112ef 100644
--- a/services/subscriber/tokens.go
+++ b/services/subscriber/tokens.go
@@ -5,6 +5,7 @@ import (
 	"encoding/json"
 	"github.com/streadway/amqp"
 	"github.com/trustwallet/blockatlas/db"
+	"github.com/trustwallet/blockatlas/db/models"
 	"github.com/trustwallet/blockatlas/pkg/logger"
 	"go.elastic.co/apm"
 	"strconv"
@@ -18,7 +19,7 @@ func RunTokensSubscriber(database *db.Instance, delivery amqp.Delivery) {
 
 	ctx := apm.ContextWithTransaction(context.Background(), tx)
 	logger.Info("body " + string(delivery.Body))
-	event := make(map[string][]string)
+	event := make(map[string][]models.Asset)
 	if err := json.Unmarshal(delivery.Body, &event); err != nil {
 		if err := delivery.Ack(false); err != nil {
 			logger.Fatal(err, err)
diff --git a/services/tokenindexer/api.go b/services/tokenindexer/api.go
new file mode 100644
index 0000000..3a4ba6a
--- /dev/null
+++ b/services/tokenindexer/api.go
@@ -0,0 +1,40 @@
+package tokenindexer
+
+import (
+	"context"
+	"github.com/trustwallet/blockatlas/db"
+	"github.com/trustwallet/blockatlas/db/models"
+	"time"
+)
+
+type Instance struct {
+	database *db.Instance
+}
+
+func Init(database *db.Instance) Instance {
+	return Instance{database: database}
+}
+
+func (i Instance) HandleNewTokensRequest(r Request, ctx context.Context) (Response, error) {
+	from := time.Unix(r.From, 0)
+	result, err := i.database.GetAssetsFrom(from, ctx)
+	if err != nil {
+		return Response{}, err
+	}
+	return normalize(result), nil
+}
+
+func normalize(dbAssets []models.Asset) Response {
+	var result []Asset
+	for _, a := range dbAssets {
+		asset := Asset{
+			Asset:    a.Asset,
+			Name:     a.Name,
+			Symbol:   a.Symbol,
+			Type:     a.Type,
+			Decimals: a.Decimals,
+		}
+		result = append(result, asset)
+	}
+	return Response{Assets: result}
+}
diff --git a/services/tokenindexer/indexer.go b/services/tokenindexer/indexer.go
new file mode 100644
index 0000000..8040d3e
--- /dev/null
+++ b/services/tokenindexer/indexer.go
@@ -0,0 +1,57 @@
+package tokenindexer
+
+import (
+	"context"
+	"github.com/streadway/amqp"
+	"github.com/trustwallet/blockatlas/db"
+	"github.com/trustwallet/blockatlas/db/models"
+	"github.com/trustwallet/blockatlas/pkg/blockatlas"
+	"github.com/trustwallet/blockatlas/pkg/logger"
+	"github.com/trustwallet/blockatlas/services/notifier"
+	"go.elastic.co/apm"
+)
+
+func RunTokenIndexer(database *db.Instance, delivery amqp.Delivery) {
+	tx := apm.DefaultTracer.StartTransaction("RunTokenIndexer", "app")
+	defer tx.End()
+	defer func() {
+		if err := delivery.Ack(false); err != nil {
+			logger.Error(err)
+		}
+	}()
+	ctx := apm.ContextWithTransaction(context.Background(), tx)
+
+	txs, err := notifier.GetTransactionsFromDelivery(delivery, ctx)
+	if err != nil {
+		logger.Error("failed to get transactions", err)
+		if err := delivery.Ack(false); err != nil {
+			logger.Error(err)
+		}
+		return
+	}
+	if len(txs) == 0 {
+		return
+	}
+
+	assets := GetAssetsFromTransactions(txs)
+	err = database.AddNewAssets(assets, ctx)
+	if err != nil {
+		logger.Error("failed to add assets", err)
+		return
+	}
+}
+
+func GetAssetsFromTransactions(txs []blockatlas.Tx) []models.Asset {
+	var result []models.Asset
+	for _, tx := range txs {
+		a, ok := tx.AssetModel()
+		if !ok {
+			continue
+		}
+		if a.Asset == "" {
+			continue
+		}
+		result = append(result, a)
+	}
+	return result
+}
diff --git a/services/tokenindexer/models.go b/services/tokenindexer/models.go
new file mode 100644
index 0000000..c6aeb28
--- /dev/null
+++ b/services/tokenindexer/models.go
@@ -0,0 +1,18 @@
+package tokenindexer
+
+type Request struct {
+	From int64
+}
+
+type Response struct {
+	Assets []Asset `json:"assets"`
+}
+
+type Asset struct {
+	Asset  string `json:"asset"`
+	Name   string `json:"name"`
+	Symbol string `json:"symbol"`
+	Type   string `json:"type"`
+
+	Decimals uint `json:"decimals"`
+}
diff --git a/services/tokensearcher/api.go b/services/tokensearcher/api.go
index 5d60fc2..fe567aa 100644
--- a/services/tokensearcher/api.go
+++ b/services/tokensearcher/api.go
@@ -4,6 +4,7 @@ import (
 	"context"
 	"encoding/json"
 	"github.com/trustwallet/blockatlas/db"
+	"github.com/trustwallet/blockatlas/db/models"
 	"github.com/trustwallet/blockatlas/mq"
 	"github.com/trustwallet/blockatlas/pkg/address"
 	"github.com/trustwallet/blockatlas/pkg/blockatlas"
@@ -15,7 +16,7 @@ import (
 
 type (
 	AddressesByCoin map[uint][]string
-	AssetsByAddress map[string][]string
+	AssetsByAddress map[string][]models.Asset
 	Request         struct {
 		AddressesByCoin map[string][]string `json:"addresses"`
 		From            uint                `json:"from"`
@@ -32,7 +33,7 @@ func Init(database *db.Instance, apis map[uint]blockatlas.TokensAPI, queue mq.Qu
 	return Instance{database: database, apis: apis, queue: queue}
 }
 
-func (i Instance) HandleTokensRequest(request Request, ctx context.Context) (AssetsByAddress, error) {
+func (i Instance) HandleTokensRequest(request Request, ctx context.Context) (map[string][]string, error) {
 	addresses := getAddressesFromRequest(request)
 	if len(addresses) == 0 {
 		return nil, nil
@@ -183,10 +184,10 @@ func getAssetsToResponse(dbAssetsMap, nodesAssetsMap AssetsByAddress, addresses
 			if !ok {
 				continue
 			}
-			result[address] = nodesAssets
+			result[address] = models.AssetIDs(nodesAssets)
 			continue
 		}
-		result[address] = dbAddresses
+		result[address] = models.AssetIDs(dbAddresses)
 	}
 	return result
 }
diff --git a/services/tokensearcher/association.go b/services/tokensearcher/association.go
index 2202709..de61ed3 100644
--- a/services/tokensearcher/association.go
+++ b/services/tokensearcher/association.go
@@ -3,30 +3,28 @@ package tokensearcher
 import (
 	"github.com/trustwallet/blockatlas/db/models"
 	"github.com/trustwallet/blockatlas/pkg/blockatlas"
-	"github.com/trustwallet/watchmarket/pkg/watchmarket"
 	"strings"
 )
 
-func assetsMap(txs blockatlas.Txs, coinID string) map[string][]string {
-	result := make(map[string][]string)
+func assetsMap(txs blockatlas.Txs, coinID string) map[string][]models.Asset {
+	result := make(map[string][]models.Asset)
 	prefix := coinID + "_"
 	for _, tx := range txs {
 		addresses := tx.GetAddresses()
-		tokenID, ok := tx.TokenID()
+		asset, ok := tx.AssetModel()
 		if !ok {
 			continue
 		}
-		assetID := watchmarket.BuildID(tx.Coin, tokenID)
 		for _, a := range addresses {
 			assetIDs := result[prefix+a]
-			result[prefix+a] = append(assetIDs, assetID)
+			result[prefix+a] = append(assetIDs, asset)
 		}
 	}
 	return result
 }
 
-func associationsToAdd(oldAssociations map[string][]string, newAssociations map[string][]string) map[string][]string {
-	result := make(map[string][]string)
+func associationsToAdd(oldAssociations map[string][]models.Asset, newAssociations map[string][]models.Asset) map[string][]models.Asset {
+	result := make(map[string][]models.Asset)
 	for oldAddresses, oldAssets := range oldAssociations {
 		for newAddresses, newAssets := range newAssociations {
 			if strings.EqualFold(oldAddresses, newAddresses) {
@@ -38,25 +36,25 @@ func associationsToAdd(oldAssociations map[string][]string, newAssociations map[
 	return result
 }
 
-func newAssociationsForAddress(oldAssociations []string, newAssociations []string) []string {
-	var result []string
+func newAssociationsForAddress(oldAssociations []models.Asset, newAssociations []models.Asset) []models.Asset {
+	var result []models.Asset
 	oldM := make(map[string]bool)
 	for _, o := range oldAssociations {
-		oldM[o] = true
+		oldM[o.Asset] = true
 	}
 	for _, n := range newAssociations {
-		if ok := oldM[n]; !ok {
+		if ok := oldM[n.Asset]; !ok {
 			result = append(result, n)
 		}
 	}
 	return result
 }
 
-func fromModelToAssociation(associations []models.AddressToAssetAssociation) map[string][]string {
-	result := make(map[string][]string)
+func fromModelToAssociation(associations []models.AddressToAssetAssociation) map[string][]models.Asset {
+	result := make(map[string][]models.Asset)
 	for _, a := range associations {
 		m := result[a.Address.Address]
-		result[a.Address.Address] = append(m, a.Asset.Asset)
+		result[a.Address.Address] = append(m, a.Asset)
 	}
 	return result
 }
diff --git a/services/tokensearcher/models.go b/services/tokensearcher/models.go
index 0897e3b..1f88485 100644
--- a/services/tokensearcher/models.go
+++ b/services/tokensearcher/models.go
@@ -1,6 +1,7 @@
 package tokensearcher
 
 import (
+	"github.com/trustwallet/blockatlas/db/models"
 	"github.com/trustwallet/blockatlas/pkg/address"
 	"github.com/trustwallet/blockatlas/pkg/blockatlas"
 	"github.com/trustwallet/watchmarket/pkg/watchmarket"
@@ -17,7 +18,15 @@ func (nr *NodesResponse) UpdateAssetsByAddress(tokens blockatlas.TokenPage, coin
 	for _, t := range tokens {
 		key := address.PrefixedAddress(uint(coin), a)
 		r := nr.AssetsByAddress[key]
-		nr.AssetsByAddress[key] = append(r, watchmarket.BuildID(t.Coin, t.TokenID))
+		nr.AssetsByAddress[key] = append(r,
+			models.Asset{
+				Asset:    watchmarket.BuildID(t.Coin, t.TokenID),
+				Decimals: t.Decimals,
+				Name:     t.Name,
+				Symbol:   t.Symbol,
+				Type:     string(t.Type),
+			},
+		)
 	}
 	nr.Unlock()
 }


Test patch:
diff --git a/pkg/blockatlas/tx_test.go b/pkg/blockatlas/tx_test.go
index 5f6a25b..0e5ba3f 100644
--- a/pkg/blockatlas/tx_test.go
+++ b/pkg/blockatlas/tx_test.go
@@ -607,6 +607,67 @@ func TestGetEthereumTokenTypeByIndex(t *testing.T) {
 	}
 }
 
+func TestTokenType(t *testing.T) {
+	type testStruct struct {
+		Name       string
+		ID         uint
+		TokenID    string
+		WantedType string
+		WantedOk   bool
+	}
+	tests := []testStruct{
+		{
+			Name:       "Tron TRC20",
+			ID:         coin.Tron().ID,
+			TokenID:    "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
+			WantedType: string(TokenTypeTRC20),
+			WantedOk:   true,
+		},
+		{
+			Name:       "Tron TRC10",
+			ID:         coin.Tron().ID,
+			TokenID:    "1002000",
+			WantedType: string(TokenTypeTRC10),
+			WantedOk:   true,
+		},
+		{
+			Name:       "Ethereum ERC20",
+			ID:         coin.Ethereum().ID,
+			TokenID:    "dai",
+			WantedType: string(TokenTypeERC20),
+			WantedOk:   true,
+		},
+		{
+			Name:       "Binance BEP20",
+			ID:         coin.Smartchain().ID,
+			TokenID:    "busd",
+			WantedType: string(TokenTypeBEP20),
+			WantedOk:   true,
+		},
+		{
+			Name:       "Binance BEP10",
+			ID:         coin.Binance().ID,
+			TokenID:    "busd",
+			WantedType: string(TokenTypeBEP2),
+			WantedOk:   true,
+		},
+		{
+			Name:       "Wrong",
+			ID:         coin.Bitcoin().ID,
+			TokenID:    "busd",
+			WantedType: "",
+			WantedOk:   false,
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.Name, func(t *testing.T) {
+			expectedType, expectedOk := GetTokenType(tt.ID, tt.TokenID)
+			assert.Equal(t, tt.WantedType, expectedType)
+			assert.Equal(t, tt.WantedOk, expectedOk)
+		})
+	}
+}
+
 var (
 	beforeTransactionsToken = `[{"id":"59FE2D56F0E2320023D5D579497FF4E5FD8B226AEF14AADCE089A241BE0051DA","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592484005,"block":95113723,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103643577","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"1089263465","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"DA10ACADF3BF23072CBAAEA02E51C48331DDE588EC16BA6AA0FF79F9F37CD08E","coin":714,"from":"bnb1yjlk7f47qf0z97ph6pxc00s2s0yw048edmtjtw","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","fee":"37500","date":1592442063,"block":95008674,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"incoming","memo":"","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"1998400000","from":"bnb1yjlk7f47qf0z97ph6pxc00s2s0yw048edmtjtw","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp"}},{"id":"1B7696018A0BEB07EB41F1E8D7A20B64AA9DB6AFDC61CD30EFA082D4E8650BD3","coin":714,"from":"bnb1f87wdfjeqx5yju5vgjrz62u32lhrqxztscxrxj","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","fee":"37500","date":1592429461,"block":94977026,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"incoming","memo":"","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"2511060524","from":"bnb1f87wdfjeqx5yju5vgjrz62u32lhrqxztscxrxj","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp"}},{"id":"B98EF6224FD385830CFE88B431FE4F098D1ABAFB349A138DD11235FD02B619B7","coin":714,"from":"bnb1yjlk7f47qf0z97ph6pxc00s2s0yw048edmtjtw","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","fee":"37500","date":1592348463,"block":94777896,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"incoming","memo":"","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"10998400000","from":"bnb1yjlk7f47qf0z97ph6pxc00s2s0yw048edmtjtw","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp"}},{"id":"C6E37E9966BD52EB612B23DAD30BFD68BE05D4670B7FDC64DA2C109305247330","coin":714,"from":"bnb1yjlk7f47qf0z97ph6pxc00s2s0yw048edmtjtw","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","fee":"37500","date":1592253063,"block":94538295,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"incoming","memo":"","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"4146300000","from":"bnb1yjlk7f47qf0z97ph6pxc00s2s0yw048edmtjtw","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp"}},{"id":"A9F58764D7F9555000FD0C1BD0B403953F05AE2DD9E094127315BE8FBF0FA19E","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592250904,"block":94532906,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103335769","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"63266290000","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"91B7F8348917289F08A9C2B5BAF8F6673AB6808C9F2CAD4930BC5BB62AAA469B","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592246708,"block":94522375,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"104150629","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"4512670728","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"62A224A212083CC53142230A0598107305C7659B687F4B17FDBDA1D03008679E","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592245803,"block":94520016,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103335769","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"58689300000","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"5E2D321690FFD6BBCD0247DDCE07A1D41AE659F6C11F0662DDD6C7D8242E3D00","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592244606,"block":94517032,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"108137171","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"1053055990","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"E7A814D1E23F269914FB4CDECF61D6A3D8D900684CFC8280BBB7989A3EF6C071","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592237402,"block":94498680,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103268674","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"8479394653","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"8B71C1AA5C4C636127E8A08D67AB7DF4BC5E4EFA25F99F12A34FFF3B8928BB14","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592223002,"block":94462381,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103268674","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"38451401547","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"4C96992F1D5D971C1C9D787C0D96EE342875147D083E79759BF569CE9E2F63B4","coin":714,"from":"bnb1yjlk7f47qf0z97ph6pxc00s2s0yw048edmtjtw","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","fee":"37500","date":1592220661,"block":94456416,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"incoming","memo":"","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"99998300000","from":"bnb1yjlk7f47qf0z97ph6pxc00s2s0yw048edmtjtw","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp"}},{"id":"2001461D2CCF84864B999235B6A0B08A2A75649367A7F809651E73C2D49E94F3","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592201404,"block":94407633,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103229158","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"1089751117","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"0AE83A51E05BB34C8FE0AA0AC376B9C7AE8960A9A77EB9C687B29994A53D1159","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592194201,"block":94389286,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103268674","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"1098704296","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"68C4BA1864A52EA78FD99610FB9FE64DDB86EDDA2F020D7E250AB8E3E8E5CF32","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592179801,"block":94352682,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103268674","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"2461605848","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"5D6939D3AE2AFDFF6A3ECA5DD48CB5D8D2F0389A35C414806CF284B453DA5133","coin":714,"from":"bnb1yjlk7f47qf0z97ph6pxc00s2s0yw048edmtjtw","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","fee":"37500","date":1592177461,"block":94346701,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"incoming","memo":"","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"2324800000","from":"bnb1yjlk7f47qf0z97ph6pxc00s2s0yw048edmtjtw","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp"}},{"id":"5714D3F5C442E2491EEF8BCA9D3CBDF18005C5B1D67BA1A7E873ADFC46F6F4B8","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592165402,"block":94316303,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103268674","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"156671627595","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"1823E07FBB966050060D127B266F9FB64F30DF1F549C3906BDE234D66A060766","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592163611,"block":94311779,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"106835633","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"2042060818","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"A0A6DA82F4F4610145635FFB1F52CF8EC5F8F51BDF0256B5B0F77D3D5692E2CA","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592158202,"block":94298059,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103268674","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"3101371","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"B380CF3BA7831EBD82240CFCC369572FCC022ECA3A91A7F11743D07C1599F636","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592154601,"block":94288998,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103268674","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"367696585025","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"7ABEF721E2A3D2B70583F4641FE426D0CAE55AD11C7021809289E504917E4569","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592073191,"block":94084342,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103335769","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"2503750000","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"C422B298A2EABD7EA503CC1F525C20BEB606FB83D01FE760A69F0FA57DB65B03","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592066528,"block":94067506,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103335769","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"12959997250","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"FD656B1D90C660F4F6D74E4C0584AC11ED0626F6FBF5E8C33D0E9131F5DB04C2","coin":714,"from":"bnb1f87wdfjeqx5yju5vgjrz62u32lhrqxztscxrxj","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","fee":"37500","date":1592060464,"block":94052345,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"incoming","memo":"","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"2781326500","from":"bnb1f87wdfjeqx5yju5vgjrz62u32lhrqxztscxrxj","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp"}},{"id":"0447FA8D100F715DCE70513AB9ECF5BCF16D38A6C450B33DE0257BB654FBD50E","coin":714,"from":"bnb1xyq7ttkzq4ekmn26kwn2ul2f6ludplnhlqcf6k","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","fee":"37500","date":1592060463,"block":94052341,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"incoming","memo":"","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"39644614000","from":"bnb1xyq7ttkzq4ekmn26kwn2ul2f6ludplnhlqcf6k","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp"}},{"id":"19583E4A440801AA458F06D655D9745FE0A75B76FF776CEA65455A9C9D9F59D9","coin":714,"from":"bnb1yjlk7f47qf0z97ph6pxc00s2s0yw048edmtjtw","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","fee":"37500","date":1592053265,"block":94034212,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"incoming","memo":"","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"40798300000","from":"bnb1yjlk7f47qf0z97ph6pxc00s2s0yw048edmtjtw","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp"}}]`
 	//beforeTransactionsMemo  = `[{"id":"59FE2D56F0E2320023D5D579497FF4E5FD8B226AEF14AADCE089A241BE0051DA","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592484005,"block":95113723,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"trust.com","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"1089263465","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"DA10ACADF3BF23072CBAAEA02E51C48331DDE588EC16BA6AA0FF79F9F37CD08E","coin":714,"from":"bnb1yjlk7f47qf0z97ph6pxc00s2s0yw048edmtjtw","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","fee":"37500","date":1592442063,"block":95008674,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"incoming","memo":"","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"1998400000","from":"bnb1yjlk7f47qf0z97ph6pxc00s2s0yw048edmtjtw","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp"}},{"id":"1B7696018A0BEB07EB41F1E8D7A20B64AA9DB6AFDC61CD30EFA082D4E8650BD3","coin":714,"from":"bnb1f87wdfjeqx5yju5vgjrz62u32lhrqxztscxrxj","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","fee":"37500","date":1592429461,"block":94977026,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"incoming","memo":"","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"2511060524","from":"bnb1f87wdfjeqx5yju5vgjrz62u32lhrqxztscxrxj","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp"}},{"id":"B98EF6224FD385830CFE88B431FE4F098D1ABAFB349A138DD11235FD02B619B7","coin":714,"from":"bnb1yjlk7f47qf0z97ph6pxc00s2s0yw048edmtjtw","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","fee":"37500","date":1592348463,"block":94777896,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"incoming","memo":"","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"10998400000","from":"bnb1yjlk7f47qf0z97ph6pxc00s2s0yw048edmtjtw","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp"}},{"id":"C6E37E9966BD52EB612B23DAD30BFD68BE05D4670B7FDC64DA2C109305247330","coin":714,"from":"bnb1yjlk7f47qf0z97ph6pxc00s2s0yw048edmtjtw","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","fee":"37500","date":1592253063,"block":94538295,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"incoming","memo":"","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"4146300000","from":"bnb1yjlk7f47qf0z97ph6pxc00s2s0yw048edmtjtw","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp"}},{"id":"A9F58764D7F9555000FD0C1BD0B403953F05AE2DD9E094127315BE8FBF0FA19E","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592250904,"block":94532906,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103335769","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"63266290000","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"91B7F8348917289F08A9C2B5BAF8F6673AB6808C9F2CAD4930BC5BB62AAA469B","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592246708,"block":94522375,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"104150629","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"4512670728","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"62A224A212083CC53142230A0598107305C7659B687F4B17FDBDA1D03008679E","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592245803,"block":94520016,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103335769","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"58689300000","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"5E2D321690FFD6BBCD0247DDCE07A1D41AE659F6C11F0662DDD6C7D8242E3D00","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592244606,"block":94517032,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"108137171","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"1053055990","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"E7A814D1E23F269914FB4CDECF61D6A3D8D900684CFC8280BBB7989A3EF6C071","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592237402,"block":94498680,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103268674","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"8479394653","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"8B71C1AA5C4C636127E8A08D67AB7DF4BC5E4EFA25F99F12A34FFF3B8928BB14","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592223002,"block":94462381,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103268674","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"38451401547","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"4C96992F1D5D971C1C9D787C0D96EE342875147D083E79759BF569CE9E2F63B4","coin":714,"from":"bnb1yjlk7f47qf0z97ph6pxc00s2s0yw048edmtjtw","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","fee":"37500","date":1592220661,"block":94456416,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"incoming","memo":"","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"99998300000","from":"bnb1yjlk7f47qf0z97ph6pxc00s2s0yw048edmtjtw","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp"}},{"id":"2001461D2CCF84864B999235B6A0B08A2A75649367A7F809651E73C2D49E94F3","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592201404,"block":94407633,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103229158","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"1089751117","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"0AE83A51E05BB34C8FE0AA0AC376B9C7AE8960A9A77EB9C687B29994A53D1159","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592194201,"block":94389286,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103268674","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"1098704296","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"68C4BA1864A52EA78FD99610FB9FE64DDB86EDDA2F020D7E250AB8E3E8E5CF32","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592179801,"block":94352682,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103268674","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"2461605848","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"5D6939D3AE2AFDFF6A3ECA5DD48CB5D8D2F0389A35C414806CF284B453DA5133","coin":714,"from":"bnb1yjlk7f47qf0z97ph6pxc00s2s0yw048edmtjtw","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","fee":"37500","date":1592177461,"block":94346701,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"incoming","memo":"","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"2324800000","from":"bnb1yjlk7f47qf0z97ph6pxc00s2s0yw048edmtjtw","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp"}},{"id":"5714D3F5C442E2491EEF8BCA9D3CBDF18005C5B1D67BA1A7E873ADFC46F6F4B8","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592165402,"block":94316303,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103268674","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"156671627595","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"1823E07FBB966050060D127B266F9FB64F30DF1F549C3906BDE234D66A060766","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592163611,"block":94311779,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"106835633","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"2042060818","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"A0A6DA82F4F4610145635FFB1F52CF8EC5F8F51BDF0256B5B0F77D3D5692E2CA","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592158202,"block":94298059,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103268674","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"3101371","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"B380CF3BA7831EBD82240CFCC369572FCC022ECA3A91A7F11743D07C1599F636","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592154601,"block":94288998,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103268674","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"367696585025","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"7ABEF721E2A3D2B70583F4641FE426D0CAE55AD11C7021809289E504917E4569","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592073191,"block":94084342,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103335769","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"2503750000","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"C422B298A2EABD7EA503CC1F525C20BEB606FB83D01FE760A69F0FA57DB65B03","coin":714,"from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23","fee":"37500","date":1592066528,"block":94067506,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"outgoing","memo":"103335769","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"12959997250","from":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","to":"bnb136ns6lfw4zs5hg4n85vdthaad7hq5m4gtkgf23"}},{"id":"FD656B1D90C660F4F6D74E4C0584AC11ED0626F6FBF5E8C33D0E9131F5DB04C2","coin":714,"from":"bnb1f87wdfjeqx5yju5vgjrz62u32lhrqxztscxrxj","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","fee":"37500","date":1592060464,"block":94052345,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"incoming","memo":"","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"2781326500","from":"bnb1f87wdfjeqx5yju5vgjrz62u32lhrqxztscxrxj","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp"}},{"id":"0447FA8D100F715DCE70513AB9ECF5BCF16D38A6C450B33DE0257BB654FBD50E","coin":714,"from":"bnb1xyq7ttkzq4ekmn26kwn2ul2f6ludplnhlqcf6k","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","fee":"37500","date":1592060463,"block":94052341,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"incoming","memo":"","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"39644614000","from":"bnb1xyq7ttkzq4ekmn26kwn2ul2f6ludplnhlqcf6k","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp"}},{"id":"19583E4A440801AA458F06D655D9745FE0A75B76FF776CEA65455A9C9D9F59D9","coin":714,"from":"bnb1yjlk7f47qf0z97ph6pxc00s2s0yw048edmtjtw","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp","fee":"37500","date":1592053265,"block":94034212,"status":"completed","sequence":0,"type":"native_token_transfer","direction":"incoming","memo":"","metadata":{"name":"","symbol":"BUSD","token_id":"BUSD-BD1","decimals":8,"value":"40798300000","from":"bnb1yjlk7f47qf0z97ph6pxc00s2s0yw048edmtjtw","to":"bnb1t7hpl286qgvsg08lvx6ac9ul0msy4k2ud8dukp"}}]`
diff --git a/platform/tron/token_test.go b/platform/tron/token_test.go
index c324f09..91c9a6c 100644
--- a/platform/tron/token_test.go
+++ b/platform/tron/token_test.go
@@ -102,7 +102,7 @@ func createMockedAPI() http.Handler {
 }
 
 var (
-	wantedTokensResponse                                  = `[{"name":"FomoThreeD","symbol":"FOM","decimals":0,"token_id":"1000542","coin":195,"type":"TRC10"},{"name":"OtonamiS","symbol":"os","decimals":0,"token_id":"1000567","coin":195,"type":"TRC10"},{"name":"JUST GOV","symbol":"JST","decimals":18,"token_id":"TCFLL5dx5ZJdKnWuesXxi1VPwjLVmWZZy9","coin":195,"type":"TRC20"},{"name":"Enme Token","symbol":"EME","decimals":6,"token_id":"TCRhVHPv6efvXgogNMhiunAMXFKcMmv2pF","coin":195,"type":"TRC20"},{"name":"BeeHive","symbol":"Bee","decimals":8,"token_id":"TG7Z1ptC7nRkaniDVRhHSyLycaroaS5PdK","coin":195,"type":"TRC20"},{"name":"Mono Token","symbol":"MONO","decimals":18,"token_id":"TLKyLt4MXuvvdFvUUc3Zma4rZyj2t87Mak","coin":195,"type":"TRC20"},{"name":"WINK","symbol":"WIN","decimals":6,"token_id":"TLa2f6VPqDgRE67v1736s7bJ8Ray5wYjU7","coin":195,"type":"TRC20"},{"name":"PYRO Network","symbol":"PYRO","decimals":6,"token_id":"TMCMPzmosnQ8UAYW1zcBwjLTxDq8ce4Y5e","coin":195,"type":"TRC20"},{"name":"NoleCoin","symbol":"NOLE","decimals":6,"token_id":"TPt8DTDBZYfJ9fuyRjdWJr4PP68tRfptLG","coin":195,"type":"TRC20"},{"name":"Tether USD","symbol":"USDT","decimals":6,"token_id":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t","coin":195,"type":"TRC20"},{"name":"Wuhan Fried Bats","symbol":"WUHAN","decimals":4,"token_id":"TSzjFRf8bQ46kRndWaHYKSq1P5HzRJfPvr","coin":195,"type":"TRC20"},{"name":"HelGro","symbol":"HGRO","decimals":6,"token_id":"TTvVC9jv5AfDdHuGeCMcQg6QftmNnfQiVm","coin":195,"type":"TRC20"}]`
+	wantedTokensResponse                                  = `[{"name":"FomoThreeD","symbol":"FOM","decimals":0,"token_id":"1000542","coin":195,"type":"TRC10"},{"name":"OtonamiS","symbol":"OS","decimals":0,"token_id":"1000567","coin":195,"type":"TRC10"},{"name":"JUST GOV","symbol":"JST","decimals":18,"token_id":"TCFLL5dx5ZJdKnWuesXxi1VPwjLVmWZZy9","coin":195,"type":"TRC20"},{"name":"Enme Token","symbol":"EME","decimals":6,"token_id":"TCRhVHPv6efvXgogNMhiunAMXFKcMmv2pF","coin":195,"type":"TRC20"},{"name":"BeeHive","symbol":"BEE","decimals":8,"token_id":"TG7Z1ptC7nRkaniDVRhHSyLycaroaS5PdK","coin":195,"type":"TRC20"},{"name":"Mono Token","symbol":"MONO","decimals":18,"token_id":"TLKyLt4MXuvvdFvUUc3Zma4rZyj2t87Mak","coin":195,"type":"TRC20"},{"name":"WINK","symbol":"WIN","decimals":6,"token_id":"TLa2f6VPqDgRE67v1736s7bJ8Ray5wYjU7","coin":195,"type":"TRC20"},{"name":"PYRO Network","symbol":"PYRO","decimals":6,"token_id":"TMCMPzmosnQ8UAYW1zcBwjLTxDq8ce4Y5e","coin":195,"type":"TRC20"},{"name":"NoleCoin","symbol":"NOLE","decimals":6,"token_id":"TPt8DTDBZYfJ9fuyRjdWJr4PP68tRfptLG","coin":195,"type":"TRC20"},{"name":"Tether USD","symbol":"USDT","decimals":6,"token_id":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t","coin":195,"type":"TRC20"},{"name":"Wuhan Fried Bats","symbol":"WUHAN","decimals":4,"token_id":"TSzjFRf8bQ46kRndWaHYKSq1P5HzRJfPvr","coin":195,"type":"TRC20"},{"name":"HelGro","symbol":"HGRO","decimals":6,"token_id":"TTvVC9jv5AfDdHuGeCMcQg6QftmNnfQiVm","coin":195,"type":"TRC20"}]`
 	mockedAccountsTransactionsResponse                    = `{"success":true,"meta":{"at":1592755486554,"page_size":25,"fingerprint":"4CwRecxbH99eRRkU2FFkGRCvoQGwphNyRcTTiM1GfUrkoQ1fG9Kcc8ADZo7pSCYXja28JWKUACy2Xt6UG1Fa5tSZh5dqpUEuTi1W","links":{"next":"https://api.trongrid.io:443/v1/accounts/TM1zzNDZD2DPASbKcgdVoTYhfmYgtfwx9R/transactions?limit=25&order_by=block_timestamp%2Cdesc&token_id=&fingerprint=4CwRecxbH99eRRkU2FFkGRCvoQGwphNyRcTTiM1GfUrkoQ1fG9Kcc8ADZo7pSCYXja28JWKUACy2Xt6UG1Fa5tSZh5dqpUEuTi1W"}},"data":[{"blockNumber":20829763,"block_timestamp":1592755239000,"energy_fee":296310,"energy_usage":0,"energy_usage_total":29631,"internal_transactions":[],"net_fee":3460,"net_usage":0,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TriggerSmartContract","value":{"call_value":0,"contract_address":"41a614f803b6fd780986a42c78ec9c7f77e6ded13c","data":"a9059cbb0000000000000000000000413b334848f75cf8c27ec975bcc7cc7e54f140b3c000000000000000000000000000000000000000000000000000000000cd0e33a0","owner_address":"4179309abcff2cf531070ca9222a1f72c4a5136874"}},"type":"TriggerSmartContract"}],"expiration":1592758890000,"fee_limit":1000000000,"ref_block_bytes":"d62e","ref_block_hash":"bbf7d06ee7004d5a","timestamp":1592755233594},"raw_data_hex":"0a02d62e2208bbf7d06ee7004d5a4090dccfbead2e5aae01081f12a9010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412740a154179309abcff2cf531070ca9222a1f72c4a5136874121541a614f803b6fd780986a42c78ec9c7f77e6ded13c2244a9059cbb0000000000000000000000413b334848f75cf8c27ec975bcc7cc7e54f140b3c000000000000000000000000000000000000000000000000000000000cd0e33a070bac6f0bcad2e90018094ebdc03","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":299770}],"signature":["c9a405be8b12f92747cc0f0d979606807a03edcefd154bcf517ce26f8bf681400d6cdacda11c98e7ae61d51905f7113658a786d6022b97e025f5a7e99b53845d01"],"txID":"18f5908a7e208e16bfb892a5b06df75675d3142d03a0d99d270ac46143b78d06"},{"blockNumber":20829760,"block_timestamp":1592755230000,"energy_fee":146310,"energy_usage":0,"energy_usage_total":14631,"internal_transactions":[],"net_fee":3460,"net_usage":0,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TriggerSmartContract","value":{"call_value":0,"contract_address":"41a614f803b6fd780986a42c78ec9c7f77e6ded13c","data":"a9059cbb00000000000000000000004158a82464024027b8e81bd1997cc7ba8f26a01314000000000000000000000000000000000000000000000000000000001dce7a58","owner_address":"4179309abcff2cf531070ca9222a1f72c4a5136874"}},"type":"TriggerSmartContract"}],"expiration":1592758881000,"fee_limit":1000000000,"ref_block_bytes":"d62b","ref_block_hash":"38ebe631e633b827","timestamp":1592755223352},"raw_data_hex":"0a02d62b220838ebe631e633b82740e895cfbead2e5aae01081f12a9010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412740a154179309abcff2cf531070ca9222a1f72c4a5136874121541a614f803b6fd780986a42c78ec9c7f77e6ded13c2244a9059cbb00000000000000000000004158a82464024027b8e81bd1997cc7ba8f26a01314000000000000000000000000000000000000000000000000000000001dce7a5870b8f6efbcad2e90018094ebdc03","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":149770}],"signature":["39ee8b2e7ab589538f3a976644399ba60667ede4d9611229298d52f5aeb01a6624e2346703d8a19edc9f457b89a0dbb800ae87d049ad3a7d72353fde77635f1a00"],"txID":"2a9eda92b9a2a0e56d29000ad24daae7d577c5db44d2b737f6a35584cd81b5e0"},{"blockNumber":20829760,"block_timestamp":1592755230000,"energy_fee":119110,"energy_usage":0,"energy_usage_total":14631,"internal_transactions":[],"net_fee":3460,"net_usage":0,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TriggerSmartContract","value":{"call_value":0,"contract_address":"41a614f803b6fd780986a42c78ec9c7f77e6ded13c","data":"a9059cbb0000000000000000000000413c51c36069e0a1fdf3278907ecd5a05e90a3ac84000000000000000000000000000000000000000000000000000000037e11d600","owner_address":"4179309abcff2cf531070ca9222a1f72c4a5136874"}},"type":"TriggerSmartContract"}],"expiration":1592758881000,"fee_limit":1000000000,"ref_block_bytes":"d62b","ref_block_hash":"38ebe631e633b827","timestamp":1592755223053},"raw_data_hex":"0a02d62b220838ebe631e633b82740e895cfbead2e5aae01081f12a9010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412740a154179309abcff2cf531070ca9222a1f72c4a5136874121541a614f803b6fd780986a42c78ec9c7f77e6ded13c2244a9059cbb0000000000000000000000413c51c36069e0a1fdf3278907ecd5a05e90a3ac84000000000000000000000000000000000000000000000000000000037e11d600708df4efbcad2e90018094ebdc03","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":122570}],"signature":["710a4b8543a9f605acc809ebe5b8a3a3b4681ebf2123fcdda39187bde86c9bc839cf6d882d9d15052b94ed6bba6474f9fdf09e73afefe40f6bad909029cadd2500"],"txID":"c838b8a683d39c6f1a8a173e6fffc5cc9122acc690f5e35fa7c1935cc5eae540"},{"blockNumber":20829742,"block_timestamp":1592755176000,"energy_fee":296310,"energy_usage":0,"energy_usage_total":29631,"internal_transactions":[],"net_fee":3460,"net_usage":0,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TriggerSmartContract","value":{"call_value":0,"contract_address":"41a614f803b6fd780986a42c78ec9c7f77e6ded13c","data":"a9059cbb000000000000000000000041c80ab7aac02a3d4b3d89ee781cddce55286bcf2d000000000000000000000000000000000000000000000000000000000bebc200","owner_address":"4179309abcff2cf531070ca9222a1f72c4a5136874"}},"type":"TriggerSmartContract"}],"expiration":1592758830000,"fee_limit":1000000000,"ref_block_bytes":"d61a","ref_block_hash":"b1015d64daa873a3","timestamp":1592755172703},"raw_data_hex":"0a02d61a2208b1015d64daa873a340b087ccbead2e5aae01081f12a9010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412740a154179309abcff2cf531070ca9222a1f72c4a5136874121541a614f803b6fd780986a42c78ec9c7f77e6ded13c2244a9059cbb000000000000000000000041c80ab7aac02a3d4b3d89ee781cddce55286bcf2d000000000000000000000000000000000000000000000000000000000bebc20070dfeaecbcad2e90018094ebdc03","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":299770}],"signature":["a7583c4e402eff463b083de5cfcbaadc46ed8601e2346f20d01eb0ec7a6824d869be27371f8c0e5a38a708df724be60a818b9647757bdde73ed743ff9324115c01"],"txID":"ad631a0e55bd2bb64747bf388dc92084c32506843c19a0a2b69234b4d4e56a6b"},{"blockNumber":20829732,"block_timestamp":1592755146000,"energy_fee":231500,"energy_usage":0,"energy_usage_total":29631,"internal_transactions":[],"net_fee":3460,"net_usage":0,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TriggerSmartContract","value":{"call_value":0,"contract_address":"41a614f803b6fd780986a42c78ec9c7f77e6ded13c","data":"a9059cbb0000000000000000000000410d4fd52433f30edd0b512f59fa021527bbd7de610000000000000000000000000000000000000000000000000000000001c9c380","owner_address":"4179309abcff2cf531070ca9222a1f72c4a5136874"}},"type":"TriggerSmartContract"}],"expiration":1592758800000,"fee_limit":1000000000,"ref_block_bytes":"d610","ref_block_hash":"2a14293035535e85","timestamp":1592755142312},"raw_data_hex":"0a02d61022082a14293035535e8540809dcabead2e5aae01081f12a9010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412740a154179309abcff2cf531070ca9222a1f72c4a5136874121541a614f803b6fd780986a42c78ec9c7f77e6ded13c2244a9059cbb0000000000000000000000410d4fd52433f30edd0b512f59fa021527bbd7de610000000000000000000000000000000000000000000000000000000001c9c38070a8fdeabcad2e90018094ebdc03","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":234960}],"signature":["3095c2130ee5d4da72246a17098b587c25108e1c1884f9128911e079997dd25c45e0b0acfc99e3ee4367c4670e2117dd24884c32ae0ea15ec9f9368910e4c42801"],"txID":"f1920eefa4de8370bc349fbd6ca73e24d9000d9d8fe5c71260a2902d3b49b02a"},{"blockNumber":20829718,"block_timestamp":1592755104000,"energy_fee":166720,"energy_usage":0,"energy_usage_total":29631,"internal_transactions":[],"net_fee":3460,"net_usage":0,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TriggerSmartContract","value":{"call_value":0,"contract_address":"41a614f803b6fd780986a42c78ec9c7f77e6ded13c","data":"a9059cbb00000000000000000000004135c4d4a5544d25a2f25a7cda73d57c45a36578bc0000000000000000000000000000000000000000000000000000000010089d40","owner_address":"4179309abcff2cf531070ca9222a1f72c4a5136874"}},"type":"TriggerSmartContract"}],"expiration":1592758761000,"fee_limit":1000000000,"ref_block_bytes":"d603","ref_block_hash":"f84579e34d118430","timestamp":1592755101713},"raw_data_hex":"0a02d6032208f84579e34d11843040a8ecc7bead2e5aae01081f12a9010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412740a154179309abcff2cf531070ca9222a1f72c4a5136874121541a614f803b6fd780986a42c78ec9c7f77e6ded13c2244a9059cbb00000000000000000000004135c4d4a5544d25a2f25a7cda73d57c45a36578bc0000000000000000000000000000000000000000000000000000000010089d407091c0e8bcad2e90018094ebdc03","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":170180}],"signature":["816b2747c6c1f6be139d233118b4b1e3c3942d62f56d1b0c8a496851ea233c5c1b6e0e0a13e22c3a4c1bd106eb6c0e987d5c84f9fcc29ee7b86bd4d1874ade9601"],"txID":"cec1061166e4924123356b8066872b641956691d1b1f11a12f293c54e7178362"},{"blockNumber":20829716,"block_timestamp":1592755098000,"energy_fee":0,"energy_usage":0,"energy_usage_total":0,"internal_transactions":[],"net_fee":2690,"net_usage":0,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TransferContract","value":{"amount":13195916000,"owner_address":"4179309abcff2cf531070ca9222a1f72c4a5136874","to_address":"41d9378a9849912a41ec1f0e4677c074edf0516241"}},"type":"TransferContract"}],"expiration":1592758749000,"fee_limit":0,"ref_block_bytes":"d5ff","ref_block_hash":"c753125289c79c7c","timestamp":1592755089996},"raw_data_hex":"0a02d5ff2208c753125289c79c7c40c88ec7bead2e5a69080112650a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412340a154179309abcff2cf531070ca9222a1f72c4a5136874121541d9378a9849912a41ec1f0e4677c074edf051624118e0e5a6943170cce4e7bcad2e","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":2690}],"signature":["bae63e4214b0ab611079beabca020c82fbcada902f1f0c13106e7c4ba463efb25610d13b00b28cd19b54f648b88a4b05a08583b44b4f4179c2c605b42b22ad4b00"],"txID":"3fca53c08ccb48bb625439a58998713d8ecc3dc1348cc3cfab912e0815b62b1a"},{"blockNumber":20829708,"block_timestamp":1592755074000,"energy_fee":146310,"energy_usage":0,"energy_usage_total":14631,"internal_transactions":[],"net_fee":3460,"net_usage":0,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TriggerSmartContract","value":{"call_value":0,"contract_address":"41a614f803b6fd780986a42c78ec9c7f77e6ded13c","data":"a9059cbb000000000000000000000041dd61209cd00224690ace233bb7257b054a49015a0000000000000000000000000000000000000000000000000000000005fc2678","owner_address":"4179309abcff2cf531070ca9222a1f72c4a5136874"}},"type":"TriggerSmartContract"}],"expiration":1592758719000,"fee_limit":1000000000,"ref_block_bytes":"d5f5","ref_block_hash":"84843b5d1de30802","timestamp":1592755061404},"raw_data_hex":"0a02d5f5220884843b5d1de308024098a4c5bead2e5aae01081f12a9010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412740a154179309abcff2cf531070ca9222a1f72c4a5136874121541a614f803b6fd780986a42c78ec9c7f77e6ded13c2244a9059cbb000000000000000000000041dd61209cd00224690ace233bb7257b054a49015a0000000000000000000000000000000000000000000000000000000005fc2678709c85e6bcad2e90018094ebdc03","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":149770}],"signature":["6dd6709cee109df62c3a7f196f45d3efa16c25738c1c4ea371cce18443016c8911a2d65fd4f2d7b4932aed34634169adc981db081522b094e63d9528882b3de801"],"txID":"8e886732999efe30e0d7c93eee40c41f058f33c82194141317768810a5a84b82"},{"blockNumber":20829681,"block_timestamp":1592754993000,"energy_fee":231500,"energy_usage":0,"energy_usage_total":29631,"internal_transactions":[],"net_fee":3460,"net_usage":0,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TriggerSmartContract","value":{"call_value":0,"contract_address":"41a614f803b6fd780986a42c78ec9c7f77e6ded13c","data":"a9059cbb000000000000000000000041dd61209cd00224690ace233bb7257b054a49015a0000000000000000000000000000000000000000000000000000000005e5eb10","owner_address":"4179309abcff2cf531070ca9222a1f72c4a5136874"}},"type":"TriggerSmartContract"}],"expiration":1592758638000,"fee_limit":1000000000,"ref_block_bytes":"d5da","ref_block_hash":"3234615516f16ee9","timestamp":1592754980996},"raw_data_hex":"0a02d5da22083234615516f16ee940b0abc0bead2e5aae01081f12a9010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412740a154179309abcff2cf531070ca9222a1f72c4a5136874121541a614f803b6fd780986a42c78ec9c7f77e6ded13c2244a9059cbb000000000000000000000041dd61209cd00224690ace233bb7257b054a49015a0000000000000000000000000000000000000000000000000000000005e5eb10708491e1bcad2e90018094ebdc03","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":234960}],"signature":["896243c9d9c8ba595deafb81b7c4fc283271e0f46aa7031f270d91a383ce997a09f4a3aa6fb0478a7dac9b7df295dcf232f8bf4941583848f45bd8e258f9482e01"],"txID":"8b7c9f9f29cbf9ced22761f918d19471b3bb638438e6cc23e8104fed7dda1ef3"},{"blockNumber":20829627,"block_timestamp":1592754831000,"energy_fee":0,"energy_usage":0,"energy_usage_total":0,"internal_transactions":[],"net_fee":2850,"net_usage":0,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TransferAssetContract","value":{"amount":7639170000000,"asset_name":"1002000","owner_address":"4179309abcff2cf531070ca9222a1f72c4a5136874","to_address":"410a60e164aa897ef76779164dff6e36161980c6fb"}},"type":"TransferAssetContract"}],"expiration":1592758479000,"fee_limit":0,"ref_block_bytes":"d5a5","ref_block_hash":"462e1cfdbe99a85b","timestamp":1592754820511},"raw_data_hex":"0a02d5a52208462e1cfdbe99a85b4098d1b6bead2e5a79080212750a32747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e736665724173736574436f6e7472616374123f0a073130303230303012154179309abcff2cf531070ca9222a1f72c4a51368741a15410a60e164aa897ef76779164dff6e36161980c6fb2080c98e90aade01709fabd7bcad2e","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":2850}],"signature":["b49c878a8e85339fc4917e7f20625b38b941871c86572d2c01322ec26575c7024c34b498e464109a03f8e42df24cc0868910a0e7b1f7c174f5005a483a93dac600"],"txID":"79010512f8e58574cbd066d1a1bd1c7f46f65e59e3b7733010047ff8350f15f1"},{"blockNumber":20829617,"block_timestamp":1592754801000,"energy_fee":296310,"energy_usage":0,"energy_usage_total":29631,"internal_transactions":[],"net_fee":3460,"net_usage":0,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TriggerSmartContract","value":{"call_value":0,"contract_address":"41a614f803b6fd780986a42c78ec9c7f77e6ded13c","data":"a9059cbb0000000000000000000000412b764790f38a7373d56dfdf4f866fa027e28c8af0000000000000000000000000000000000000000000000000000000071006010","owner_address":"4179309abcff2cf531070ca9222a1f72c4a5136874"}},"type":"TriggerSmartContract"}],"expiration":1592758449000,"fee_limit":1000000000,"ref_block_bytes":"d59b","ref_block_hash":"beab372f7f7d493b","timestamp":1592754790236},"raw_data_hex":"0a02d59b2208beab372f7f7d493b40e8e6b4bead2e5aae01081f12a9010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412740a154179309abcff2cf531070ca9222a1f72c4a5136874121541a614f803b6fd780986a42c78ec9c7f77e6ded13c2244a9059cbb0000000000000000000000412b764790f38a7373d56dfdf4f866fa027e28c8af000000000000000000000000000000000000000000000000000000007100601070dcbed5bcad2e90018094ebdc03","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":299770}],"signature":["52b662780f176048c4fd9e8db15756d0ef397cb60a8be6ea3421993ec2c6e1636d9aaf8a596f9255c182284e1efbd5410e2a11d10b82b4e4fec5a43ffea357cc01"],"txID":"809ec9beb99cf756bb02155199a35b766f3ec18dd6bea6b3d69dd38f6b51138f"},{"blockNumber":20829617,"block_timestamp":1592754801000,"energy_fee":166700,"energy_usage":0,"energy_usage_total":29631,"internal_transactions":[],"net_fee":3460,"net_usage":0,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TriggerSmartContract","value":{"call_value":0,"contract_address":"41a614f803b6fd780986a42c78ec9c7f77e6ded13c","data":"a9059cbb000000000000000000000041d8692da59c130875e13587a82bc93b917c49526a0000000000000000000000000000000000000000000000000000000054c92b70","owner_address":"4179309abcff2cf531070ca9222a1f72c4a5136874"}},"type":"TriggerSmartContract"}],"expiration":1592758449000,"fee_limit":1000000000,"ref_block_bytes":"d59b","ref_block_hash":"beab372f7f7d493b","timestamp":1592754789857},"raw_data_hex":"0a02d59b2208beab372f7f7d493b40e8e6b4bead2e5aae01081f12a9010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412740a154179309abcff2cf531070ca9222a1f72c4a5136874121541a614f803b6fd780986a42c78ec9c7f77e6ded13c2244a9059cbb000000000000000000000041d8692da59c130875e13587a82bc93b917c49526a0000000000000000000000000000000000000000000000000000000054c92b7070e1bbd5bcad2e90018094ebdc03","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":170160}],"signature":["fe96d2be46a37f89531d10cdca823ec82c603a3bb9f858aa76db20468e8d9d6058de643460e11b50e0982fa6ab6b81439cee6c9286b5d6bb7c18206e2ab066fb01"],"txID":"bc0c429e33d3c668e5e5a55831efb3aba7e917c52cd3892aeb252f1a7b2ddb41"},{"blockNumber":20829596,"block_timestamp":1592754738000,"energy_fee":166700,"energy_usage":0,"energy_usage_total":29631,"internal_transactions":[],"net_fee":3460,"net_usage":0,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TriggerSmartContract","value":{"call_value":0,"contract_address":"41a614f803b6fd780986a42c78ec9c7f77e6ded13c","data":"a9059cbb000000000000000000000041ec853dc8fe0dab78d3234ba356ebae7984da322c00000000000000000000000000000000000000000000000000000004a817c800","owner_address":"4179309abcff2cf531070ca9222a1f72c4a5136874"}},"type":"TriggerSmartContract"}],"expiration":1592758386000,"fee_limit":1000000000,"ref_block_bytes":"d586","ref_block_hash":"4007c65312ba945c","timestamp":1592754729408},"raw_data_hex":"0a02d58622084007c65312ba945c40d0fab0bead2e5aae01081f12a9010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412740a154179309abcff2cf531070ca9222a1f72c4a5136874121541a614f803b6fd780986a42c78ec9c7f77e6ded13c2244a9059cbb000000000000000000000041ec853dc8fe0dab78d3234ba356ebae7984da322c00000000000000000000000000000000000000000000000000000004a817c80070c0e3d1bcad2e90018094ebdc03","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":170160}],"signature":["93119466b23346e095d256537f2bf8c639dd157f896eaaff972f0be83663bca34a21df4e25fa61ba071588a58f98874a58705844a8cc36a321bf30e722028c8201"],"txID":"3bcd581a833abb16529e1f5187615866ba72f2e61c590c993f5b461ba5073d45"},{"blockNumber":20829592,"block_timestamp":1592754726000,"energy_fee":296310,"energy_usage":0,"energy_usage_total":29631,"internal_transactions":[],"net_fee":3460,"net_usage":0,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TriggerSmartContract","value":{"call_value":0,"contract_address":"41a614f803b6fd780986a42c78ec9c7f77e6ded13c","data":"a9059cbb0000000000000000000000413c51c36069e0a1fdf3278907ecd5a05e90a3ac8400000000000000000000000000000000000000000000000000000000001e8480","owner_address":"4179309abcff2cf531070ca9222a1f72c4a5136874"}},"type":"TriggerSmartContract"}],"expiration":1592758377000,"fee_limit":1000000000,"ref_block_bytes":"d583","ref_block_hash":"0bc07e9ae4eb32b0","timestamp":1592754719032},"raw_data_hex":"0a02d58322080bc07e9ae4eb32b040a8b4b0bead2e5aae01081f12a9010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412740a154179309abcff2cf531070ca9222a1f72c4a5136874121541a614f803b6fd780986a42c78ec9c7f77e6ded13c2244a9059cbb0000000000000000000000413c51c36069e0a1fdf3278907ecd5a05e90a3ac8400000000000000000000000000000000000000000000000000000000001e848070b892d1bcad2e90018094ebdc03","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":299770}],"signature":["80fe656c430afb348327f279a2d454d277bf64564111e49118ed85f1021528920ba5be044956084f543a087a61aa14b595a4fc2cc6aff2ad2ac5d7533a6b122f01"],"txID":"3baff897a2b39720727549216ea6f4bc580eed2f239967e158e9e7ea74146822"},{"blockNumber":20829589,"block_timestamp":1592754717000,"energy_fee":0,"energy_usage":0,"energy_usage_total":0,"internal_transactions":[],"net_fee":2690,"net_usage":0,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TransferContract","value":{"amount":8737000000,"owner_address":"4179309abcff2cf531070ca9222a1f72c4a5136874","to_address":"412886fdc89587dbe8a57d0b9589581bd084384d5f"}},"type":"TransferContract"}],"expiration":1592758368000,"fee_limit":0,"ref_block_bytes":"d580","ref_block_hash":"ebf8d3b3837d87a8","timestamp":1592754708731},"raw_data_hex":"0a02d5802208ebf8d3b3837d87a84080eeafbead2e5a69080112650a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412340a154179309abcff2cf531070ca9222a1f72c4a51368741215412886fdc89587dbe8a57d0b9589581bd084384d5f18c09490c62070fbc1d0bcad2e","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":2690}],"signature":["b92bdde424aee97b4e7a63716056daa963afce89701bf6d8c8b1b6221f65afb94b8ff3865650aff83d590cad87359ae5f272ed732738093a0a9aa587cc3503aa01"],"txID":"b38fb6328e1fa622b7762eed856778551845c33723491e36baf357f00cc48002"},{"blockNumber":20829585,"block_timestamp":1592754705000,"energy_fee":43900,"energy_usage":0,"energy_usage_total":14631,"internal_transactions":[],"net_fee":3460,"net_usage":0,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TriggerSmartContract","value":{"call_value":0,"contract_address":"41a614f803b6fd780986a42c78ec9c7f77e6ded13c","data":"a9059cbb0000000000000000000000416128e41b6aa8c531b05999c2861f846459fb10e60000000000000000000000000000000000000000000000000000000005f5e100","owner_address":"4179309abcff2cf531070ca9222a1f72c4a5136874"}},"type":"TriggerSmartContract"}],"expiration":1592758356000,"fee_limit":1000000000,"ref_block_bytes":"d57c","ref_block_hash":"c7c6e5795625dc5b","timestamp":1592754698724},"raw_data_hex":"0a02d57c2208c7c6e5795625dc5b40a090afbead2e5aae01081f12a9010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412740a154179309abcff2cf531070ca9222a1f72c4a5136874121541a614f803b6fd780986a42c78ec9c7f77e6ded13c2244a9059cbb0000000000000000000000416128e41b6aa8c531b05999c2861f846459fb10e60000000000000000000000000000000000000000000000000000000005f5e10070e4f3cfbcad2e90018094ebdc03","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":47360}],"signature":["b90e38665957e47ba8f7731e3b8c943471cd6ef9a95efcd25ad880323f2e397b56927e943c7e605a1996900fe269db6edbc7d7ff094f23393c6546ef0927bae300"],"txID":"d8d53a627fa9f885ad77dcc2f3d3a5eceece36d1ef0f54990dff900484550304"},{"blockNumber":20829577,"block_timestamp":1592754681000,"energy_fee":296310,"energy_usage":0,"energy_usage_total":29631,"internal_transactions":[],"net_fee":3460,"net_usage":0,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TriggerSmartContract","value":{"call_value":0,"contract_address":"41a614f803b6fd780986a42c78ec9c7f77e6ded13c","data":"a9059cbb000000000000000000000041dd81641cca9a855b7a657153fdda9b3f469693660000000000000000000000000000000000000000000000000000000217a31ba0","owner_address":"4179309abcff2cf531070ca9222a1f72c4a5136874"}},"type":"TriggerSmartContract"}],"expiration":1592758335000,"fee_limit":1000000000,"ref_block_bytes":"d575","ref_block_hash":"003bba00242a2488","timestamp":1592754678392},"raw_data_hex":"0a02d5752208003bba00242a24884098ecadbead2e5aae01081f12a9010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412740a154179309abcff2cf531070ca9222a1f72c4a5136874121541a614f803b6fd780986a42c78ec9c7f77e6ded13c2244a9059cbb000000000000000000000041dd81641cca9a855b7a657153fdda9b3f469693660000000000000000000000000000000000000000000000000000000217a31ba070f8d4cebcad2e90018094ebdc03","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":299770}],"signature":["0abe6787b18631ae746b4a9c9669e3e878b88c3628a3656e3709b4036b14414525bdb9cdb3c97fce48c9d21f2afab9492a436861e2e85ec1f68bab078859eb1d01"],"txID":"b419c05c877e0176619ec3659470c71822a7840a91a940169eaaf1abb9c38fea"},{"blockNumber":20829564,"block_timestamp":1592754642000,"energy_fee":43900,"energy_usage":0,"energy_usage_total":14631,"internal_transactions":[],"net_fee":3460,"net_usage":0,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TriggerSmartContract","value":{"call_value":0,"contract_address":"41a614f803b6fd780986a42c78ec9c7f77e6ded13c","data":"a9059cbb000000000000000000000041a3af64559a63856c625b02e9def8a4dc0f63f38b0000000000000000000000000000000000000000000000000000000010c18918","owner_address":"4179309abcff2cf531070ca9222a1f72c4a5136874"}},"type":"TriggerSmartContract"}],"expiration":1592758287000,"fee_limit":1000000000,"ref_block_bytes":"d565","ref_block_hash":"afd9deb62b6fa5e0","timestamp":1592754628020},"raw_data_hex":"0a02d5652208afd9deb62b6fa5e04098f5aabead2e5aae01081f12a9010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412740a154179309abcff2cf531070ca9222a1f72c4a5136874121541a614f803b6fd780986a42c78ec9c7f77e6ded13c2244a9059cbb000000000000000000000041a3af64559a63856c625b02e9def8a4dc0f63f38b0000000000000000000000000000000000000000000000000000000010c1891870b4cbcbbcad2e90018094ebdc03","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":47360}],"signature":["070c1a53f2fc6b12825b99c9179899e1effbbdf2fad17d273b64bc47f16ee53a0f56096d4ef6ce58aeee65083dcdef8f3c808d6889a990c23a8d45a84cd69bf101"],"txID":"abb6c40f8f8afcc69fb5b549ffb17bd779fa6588dbbbd5e4ee8568839462b37a"},{"blockNumber":20829535,"block_timestamp":1592754555000,"energy_fee":296310,"energy_usage":0,"energy_usage_total":29631,"internal_transactions":[],"net_fee":3460,"net_usage":0,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TriggerSmartContract","value":{"call_value":0,"contract_address":"41a614f803b6fd780986a42c78ec9c7f77e6ded13c","data":"a9059cbb0000000000000000000000410ae0647bbaa1aebafcc9a360d0e22a791a215c930000000000000000000000000000000000000000000000000000000011e1a300","owner_address":"4179309abcff2cf531070ca9222a1f72c4a5136874"}},"type":"TriggerSmartContract"}],"expiration":1592758206000,"fee_limit":1000000000,"ref_block_bytes":"d54a","ref_block_hash":"d27814b2e9763d5d","timestamp":1592754547598},"raw_data_hex":"0a02d54a2208d27814b2e9763d5d40b0fca5bead2e5aae01081f12a9010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412740a154179309abcff2cf531070ca9222a1f72c4a5136874121541a614f803b6fd780986a42c78ec9c7f77e6ded13c2244a9059cbb0000000000000000000000410ae0647bbaa1aebafcc9a360d0e22a791a215c930000000000000000000000000000000000000000000000000000000011e1a300708ed7c6bcad2e90018094ebdc03","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":299770}],"signature":["6a0f4d4d5021c46d522f45552b20218ea16c437e6e87130339c90752f63f7a805763699bad3b22fb3199efdce75f1929ac94482be8551107b051ae4b9ef532bb01"],"txID":"7da3a7819e4de9311464963f829e3ceeff0a045bbd587030deba863a04d250db"},{"blockNumber":20829504,"block_timestamp":1592754462000,"energy_fee":166700,"energy_usage":0,"energy_usage_total":29631,"internal_transactions":[],"net_fee":3460,"net_usage":0,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TriggerSmartContract","value":{"call_value":0,"contract_address":"41a614f803b6fd780986a42c78ec9c7f77e6ded13c","data":"a9059cbb000000000000000000000041042b5bc43cf6aabae0533f4f671eb810615c32be0000000000000000000000000000000000000000000000000000000054c92b70","owner_address":"4179309abcff2cf531070ca9222a1f72c4a5136874"}},"type":"TriggerSmartContract"}],"expiration":1592758116000,"fee_limit":1000000000,"ref_block_bytes":"d52c","ref_block_hash":"9486bdd9554ef09e","timestamp":1592754457197},"raw_data_hex":"0a02d52c22089486bdd9554ef09e40a0bda0bead2e5aae01081f12a9010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412740a154179309abcff2cf531070ca9222a1f72c4a5136874121541a614f803b6fd780986a42c78ec9c7f77e6ded13c2244a9059cbb000000000000000000000041042b5bc43cf6aabae0533f4f671eb810615c32be0000000000000000000000000000000000000000000000000000000054c92b7070ed94c1bcad2e90018094ebdc03","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":170160}],"signature":["2bfe810fa90d3aee965ff990fd68490ce9c8421844c1e792a57faeb556e5c9b004499016ace19afdb49ba65531c2d829890b4c6a14a7e58c6b71bfdacc7709e201"],"txID":"4d5e74b87f782060e0657a48898626a51a1bf2dcccfc2083955fa4f43e4516b0"},{"blockNumber":20829499,"block_timestamp":1592754447000,"energy_fee":0,"energy_usage":0,"energy_usage_total":0,"internal_transactions":[],"net_fee":0,"net_usage":268,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TransferContract","value":{"amount":2538461,"owner_address":"41da03247c21301eaf0538c1b9f79e5c8ea7cbb386","to_address":"4179309abcff2cf531070ca9222a1f72c4a5136874"}},"type":"TransferContract"}],"expiration":1592758089000,"fee_limit":0,"ref_block_bytes":"d523","ref_block_hash":"dc512cab1e07f960","timestamp":1592754430099},"raw_data_hex":"0a02d5232208dc512cab1e07f96040a8ea9ebead2e5a68080112640a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412330a1541da03247c21301eaf0538c1b9f79e5c8ea7cbb38612154179309abcff2cf531070ca9222a1f72c4a513687418ddf79a017093c1bfbcad2e","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":0}],"signature":["0b542abf1657965deeb06123636f6e4ccaea5f4ab0a14f81f3164b286cb6ede37c62d701c796ae86cbd5c908009e5ac6db73d4532a9976ce5b30df47460957d601"],"txID":"82efc8456a3c38a0919af416a53363405ced78db7c13e1b94a79ebcea98f9909"},{"blockNumber":20829498,"block_timestamp":1592754444000,"energy_fee":0,"energy_usage":0,"energy_usage_total":0,"internal_transactions":[],"net_fee":0,"net_usage":268,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TransferContract","value":{"amount":30000000,"owner_address":"41f3eb90cf03d6301e1d10b6095113494bc704992c","to_address":"4179309abcff2cf531070ca9222a1f72c4a5136874"}},"type":"TransferContract"}],"expiration":1592758089000,"fee_limit":0,"ref_block_bytes":"d523","ref_block_hash":"dc512cab1e07f960","timestamp":1592754429791},"raw_data_hex":"0a02d5232208dc512cab1e07f96040a8ea9ebead2e5a68080112640a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412330a1541f3eb90cf03d6301e1d10b6095113494bc704992c12154179309abcff2cf531070ca9222a1f72c4a5136874188087a70e70dfbebfbcad2e","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":0}],"signature":["d44a181a6ff560bbcd8a89f9b14247f3d3c781020404eb6462926f3e60dfe32c38ee17f0e752346229de30db033352240152891a168285581558f80af90f83fd00"],"txID":"a336bd174c127d38bf2325bc9c927059af099e8cfb91159750a1b1be16dd0bd4"},{"blockNumber":20829498,"block_timestamp":1592754444000,"energy_fee":0,"energy_usage":0,"energy_usage_total":0,"internal_transactions":[],"net_fee":0,"net_usage":268,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TransferContract","value":{"amount":111337320,"owner_address":"41b4fd934c73429b27c1e9180e04ccfc44c14f15a9","to_address":"4179309abcff2cf531070ca9222a1f72c4a5136874"}},"type":"TransferContract"}],"expiration":1592758086000,"fee_limit":0,"ref_block_bytes":"d522","ref_block_hash":"9ecd3926187cf28e","timestamp":1592754429463},"raw_data_hex":"0a02d52222089ecd3926187cf28e40f0d29ebead2e5a68080112640a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412330a1541b4fd934c73429b27c1e9180e04ccfc44c14f15a912154179309abcff2cf531070ca9222a1f72c4a513687418e8be8b357097bcbfbcad2e","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":0}],"signature":["a40ce5f8ab4d9283fd9982eb38aa2a8b8ad9aeaa9bfc8acc220673a367fd420c034f89110e74a99745a96e103b883a85036c64e1c992a7a12c594f11954bacca01"],"txID":"007bbcc3855f4bf51bd76e63d7776160c115c803e227f7c44c7d1fd1bd587611"},{"blockNumber":20829498,"block_timestamp":1592754444000,"energy_fee":0,"energy_usage":0,"energy_usage_total":0,"internal_transactions":[],"net_fee":0,"net_usage":268,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TransferContract","value":{"amount":200000000,"owner_address":"413c5d20a6b1747c65903e2874614d6b8a038b818c","to_address":"4179309abcff2cf531070ca9222a1f72c4a5136874"}},"type":"TransferContract"}],"expiration":1592758086000,"fee_limit":0,"ref_block_bytes":"d522","ref_block_hash":"9ecd3926187cf28e","timestamp":1592754429137},"raw_data_hex":"0a02d52222089ecd3926187cf28e40f0d29ebead2e5a68080112640a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412330a15413c5d20a6b1747c65903e2874614d6b8a038b818c12154179309abcff2cf531070ca9222a1f72c4a5136874188084af5f70d1b9bfbcad2e","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":0}],"signature":["9192ee355f2b8c4b21cb68d5b5b2647a4ccb3a00c2bdaeb65cddef4785e7a31e364e21ef3c8b78628c8d342d6f7727ab391b064c1f0b02105e300108ca9cf88800"],"txID":"9351e87b129142844f000a52911daf36fc95677dfe2846abcd28ea0d8fe2e2ea"},{"blockNumber":20829498,"block_timestamp":1592754444000,"energy_fee":0,"energy_usage":0,"energy_usage_total":0,"internal_transactions":[],"net_fee":0,"net_usage":269,"raw_data":{"contract":[{"parameter":{"type_url":"type.googleapis.com/protocol.TransferContract","value":{"amount":511000000,"owner_address":"414a5a0f19fd4b1c85208764a7a8cdcdb88171fc71","to_address":"4179309abcff2cf531070ca9222a1f72c4a5136874"}},"type":"TransferContract"}],"expiration":1592758086000,"fee_limit":0,"ref_block_bytes":"d522","ref_block_hash":"9ecd3926187cf28e","timestamp":1592754428706},"raw_data_hex":"0a02d52222089ecd3926187cf28e40f0d29ebead2e5a69080112650a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412340a15414a5a0f19fd4b1c85208764a7a8cdcdb88171fc7112154179309abcff2cf531070ca9222a1f72c4a513687418c0fbd4f30170a2b6bfbcad2e","ret":[{"code":"SUCESS","contractRet":"SUCCESS","fee":0}],"signature":["fac73d7f6540a63c27717cbe04197d8ae89bd906f6c59eba71cc3a2630e29d9b6e0e4400b5e316289e5b6608d84a1a47673674605e48776f8d97aa3dedcfc60301"],"txID":"008ebda5749c38e26a69717faa66e6f4fd8a0d358c9b947192765cc9843cff5a"}]}`
 	mockedTrc20Response                                   = `{"trc20token_balances":[{"name":"BeeHive","symbol":"Bee","decimals":8,"contract_address":"TG7Z1ptC7nRkaniDVRhHSyLycaroaS5PdK","balance":"100000000000000"},{"name":"NoleCoin","symbol":"NOLE","decimals":6,"contract_address":"TPt8DTDBZYfJ9fuyRjdWJr4PP68tRfptLG","balance":"20000","priceInTrx":20.000000},{"name":"Enme Token","symbol":"EME","decimals":6,"contract_address":"TCRhVHPv6efvXgogNMhiunAMXFKcMmv2pF","balance":"175798"},{"name":"PYRO Network","symbol":"PYRO","decimals":6,"contract_address":"TMCMPzmosnQ8UAYW1zcBwjLTxDq8ce4Y5e","balance":"5000000000","priceInTrx":0.005821},{"name":"Wuhan Fried Bats","symbol":"WUHAN","decimals":4,"contract_address":"TSzjFRf8bQ46kRndWaHYKSq1P5HzRJfPvr","balance":"690000"},{"name":"WINK","symbol":"WIN","decimals":6,"contract_address":"TLa2f6VPqDgRE67v1736s7bJ8Ray5wYjU7","balance":"191543058623486","priceInTrx":0.004665},{"name":"Mono Token","symbol":"MONO","decimals":18,"contract_address":"TLKyLt4MXuvvdFvUUc3Zma4rZyj2t87Mak","balance":"1"},{"name":"HelGro","symbol":"HGRO","decimals":6,"contract_address":"TTvVC9jv5AfDdHuGeCMcQg6QftmNnfQiVm","balance":"20000000"},{"name":"JUST GOV","symbol":"JST","decimals":18,"contract_address":"TCFLL5dx5ZJdKnWuesXxi1VPwjLVmWZZy9","balance":"955973733483987848990056","priceInTrx":0.313300},{"name":"Tether USD","symbol":"USDT","decimals":6,"contract_address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t","balance":"6781725898163","priceInTrx":64.102564}],"allowExchange":[],"address":"TM1zzNDZD2DPASbKcgdVoTYhfmYgtfwx9R","frozen_supply":[],"bandwidth":{"energyRemaining":0,"totalEnergyLimit":90000000000,"totalEnergyWeight":1446707995,"netUsed":0,"storageLimit":0,"storagePercentage":0.0,"assets":{"1000542":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002446":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002721":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001510":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002962":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001479":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002288":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001594":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002683":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000541":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001079":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000145":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002608":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000821":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002845":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001759":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002726":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001230":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001467":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002798":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000894":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000532":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002830":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000017":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000494":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002398":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002552":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002551":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002672":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002037":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002950":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000935":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000938":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002438":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000491":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000096":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002671":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000493":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001064":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001581":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002270":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000322":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002589":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001411":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002467":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002742":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001414":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001535":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000567":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000165":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001011":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002342":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001132":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000562":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000287":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001815":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002907":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002746":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002748":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001090":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000278":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000157":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002578":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002577":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002852":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002459":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000396":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002573":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002454":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000959":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002736":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002858":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1003022":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001038":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000983":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001433":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000743":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001953":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002646":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000985":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002524":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002001":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002881":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002488":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002521":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002762":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002927":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002926":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000745":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000744":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000746":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002000":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000181":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002116":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001301":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001425":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002876":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000176":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000451":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1003049":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002597":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002918":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002636":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002999":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001825":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000856":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002517":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002230":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002071":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1003041":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002072":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000003":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000520":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000884":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002544":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001854":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002822":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000006":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002662":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002669":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002384":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002263":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001203":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002897":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001565":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002775":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002657":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001204":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1001446":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002892":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002939":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002814":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002250":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1002099":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0},"1000190":{"netPercentage":0.0,"netLimit":0,"netRemaining":0,"netUsed":0}},"netPercentage":0.0,"storageUsed":0,"storageRemaining":0,"freeNetLimit":5000,"energyUsed":0,"freeNetRemaining":211,"netLimit":0,"netRemaining":0,"energyLimit":0,"freeNetUsed":4789,"totalNetWeight":26789943446,"freeNetPercentage":0.9578,"energyPercentage":0.0,"totalNetLimit":43200000000},"accountType":0,"exchanges":[],"frozen":{"total":0,"balances":[]},"accountResource":{"frozen_balance_for_energy":{}},"tokenBalances":[{"balance":346976329314696,"name":"_"},{"balance":1273,"name":"1000003"},{"balance":113,"name":"1000006"},{"balance":145,"name":"1000165"},{"balance":416,"name":"1000520"},{"balance":596,"name":"1000491"},{"balance":242,"name":"1000176","owner_address":"THG48yHsR6inxrCJk2hhxZPsFLq1ehP88V"},{"balance":62,"name":"1000542"},{"balance":53,"name":"1000494","owner_address":"TXJnVqqwLSNmdXDLWn1Yfjhe8aZH2oaAuq"},{"balance":56,"name":"1000493"},{"balance":599,"name":"1000744"},{"balance":628,"name":"1000746"},{"balance":234,"name":"1000743"},{"balance":113,"name":"1000396"},{"balance":206,"name":"1000745","owner_address":"TPCEi45wZQ1PPChUg5uqoK1D5kKnjCR8Li"},{"balance":61,"name":"1000821","owner_address":"TBm3Peu51gYwn2iPwNEDxc9vBMc3eRGUGu"},{"balance":25,"name":"1000541"},{"balance":7,"name":"1000278","owner_address":"TRMUimDekf9nDLuVMp6TKzcw4axNnajGJr"},{"balance":1,"name":"1000567","owner_address":"TFXJMhB4ZKBfcQWfCLbSyQGhonHXABaWku"},{"balance":1,"name":"1000856","owner_address":"TXf3X8YMdDho2xwA6QDbFZiTGPnk8ghfLm"},{"balance":30,"name":"1000884"},{"balance":1,"name":"1000894"},{"balance":200,"name":"1000181","owner_address":"TEmTbbvH5ZPJPZ8CbffjqonFRiAAFgfc9o"},{"balance":7,"name":"1000935","owner_address":"TPVkcFYTEi9Dia45AveiTcaYoaU9ux7xC7"},{"balance":1000,"name":"1000938","owner_address":"TNgkWTabK1rMWwgLjmLdsZbzYfGTx5Tpe9"},{"balance":10,"name":"1000017","owner_address":"TV6qcwSp38uESiDczxxb7zbJX1h2LfDs78"},{"balance":10,"name":"1001011","owner_address":"TNUbeTQXPtRXtBX3dJboVkhdhaiws29Aky"},{"balance":2,"name":"1001038","owner_address":"TFujVDp8U578L2AtsorYN3pwdXmH2HxbQv"},{"balance":100,"name":"1000983","owner_address":"TYmiZ7xCeqboiizb2jsjVQuRABXzVSjKFR"},{"balance":1,"name":"1001203","owner_address":"TBmaT8mcrdkrRL2Q6ur7grMYAcaGtfxsz7"},{"balance":1,"name":"1000190","owner_address":"TNXjXURue38Wa641pmqMH4vbJN1WZLKMnr"},{"balance":100,"name":"1001204"},{"balance":1000,"name":"1001230"},{"balance":1300000,"name":"1001301","owner_address":"TVgJEbc9NEYxVr1h6rJQiMqySePsJQDCA7"},{"balance":11,"name":"1000959"},{"balance":10,"name":"1001425"},{"balance":17,"name":"1001433","owner_address":"TWPMz6FPEAV6qP4VRMG3Y69ftEov1R7YWT"},{"balance":100,"name":"1001446"},{"balance":12,"name":"1001411","owner_address":"TPL6zNujtEQ8kp213n58UxAhGRCU3aozkc"},{"balance":12,"name":"1001467"},{"balance":100,"name":"1001414","owner_address":"TT43DgfxgMdR4BVZNua4YCwG34AgfGN6Uu"},{"balance":100,"name":"1001510","owner_address":"TPKq9bVZyM2sZ8XersMmXhy1NbjhdxRwwj"},{"balance":50,"name":"1001565","owner_address":"TKY7Vmq78b2c83fLXrPijkhQkk4EJtfViD"},{"balance":5,"name":"1001535"},{"balance":10,"name":"1000532","owner_address":"TGQwBNht8h3zev4gBtDMoQjWE2WJm1Zr9B"},{"balance":3,"name":"1001479","owner_address":"TC9FtB1EoiV3jfXgZvmqUmfeCmdWNmCxdY"},{"balance":13,"name":"1001090","owner_address":"TU1LUTYDMG6iihimUpAmdnnBthawPKh1cm","priceInTrx":0.004360},{"balance":200,"name":"1001759","owner_address":"TWKWWJAFBYyjvLtfqKCSeMyUW7TjWhkY4e"},{"balance":12,"name":"1000096","owner_address":"TSfjkVSKJGW4aybDQcxi4bpythU7WCXV3v"},{"balance":15,"name":"1001594"},{"balance":10,"name":"1001815","owner_address":"TB3iM1RsKXagV7hdz2QpWnaChptwrU3tCL"},{"balance":10,"name":"1001064","owner_address":"THnWV416C9mfJ1LFwopUjGXZEr1xFtAdrD"},{"balance":5192508733304578,"name":"1002000","owner_address":"TF5Bn4cJCT6GVeUgyCN4rBhDg42KBrpAjg","priceInTrx":0.018900},{"balance":7742069,"name":"1002037","owner_address":"TBekuTCZwPG2o88SmiS58VALkxBemoX4yS"},{"balance":585,"name":"1002001"},{"balance":5441,"name":"1002071","owner_address":"TS79aik831csqUnQgnqrKG6hov2iL8yPbD"},{"balance":80312957663126,"name":"1002072","owner_address":"TP6PtaBSMM6sfWtWWD9k77YHWGmh7K3Lae"},{"balance":520,"name":"1000451","owner_address":"THPXuypwcnWo4wi5KqFfuRjgjeT5khUDKF"},{"balance":10011237,"name":"1001953","owner_address":"TSyG9BdjsGE2GoHG9eeYKMns6zMQFDmbvS"},{"balance":5,"name":"1000562","owner_address":"TWqKTJ5JhyD7rsbbWzEvS5ZZD9Q5QPPvSH"},{"balance":50000000,"name":"1002099","owner_address":"TYWmiPERm9kWUcnduqaE5jxT7eeZxfn5SQ"},{"balance":625100,"name":"1001581","owner_address":"TNkRSKWP7VvdrisTwC8iNzUV6MRoEJh6xx"},{"balance":11000000,"name":"1002342","owner_address":"TUCd8NiBUuxrjz1kSrUbAg2JXu6o27Ukrq"},{"balance":7,"name":"1000322","owner_address":"TDGy2M9qWBepSHDEutWWxWd1JZfmAed3BP","priceInTrx":0.000422},{"balance":12,"name":"1001825","owner_address":"TPcUbNeYwwYqbX23w3sVf1X61cwpAfPK2T"},{"balance":1000,"name":"1002384","owner_address":"TFYuPxyjDTvH1TLm2phpzJFw7AhjCgu8xP"},{"balance":44444,"name":"1001132","owner_address":"TWDUanVdxEShjpbiX57ExztMCDy8vCFcHh"},{"balance":30000000,"name":"1002398","owner_address":"TUXSuMg41nJXm9TuDgF6EZWjEbP2vx1Hd4"},{"balance":10000060,"name":"1002116","owner_address":"TAEvo6MgLgV3A75L3cr3BAsLDJikWcAt3j"},{"balance":50000000,"name":"1002446","owner_address":"TJKf72NjL1cR49SHfDnPTXTFjRwjgr7v8Z"},{"balance":10000000,"name":"1002459","owner_address":"TNWy3mX85JsX2mPLgLc4cKJiWtJahhz3t3"},{"balance":1,"name":"1001079","owner_address":"TLQfc5EwZQqZc6jMNkMpxyJy5wucA6UX24"},{"balance":12345,"name":"1002467","owner_address":"TP429SKrsp4BoTiEFXHj4TNSJwqDFsygnr"},{"balance":1234,"name":"1002230","owner_address":"TWB9Q1JoB3fSLsahNq31gydRxYyWxDhSyk"},{"balance":10000000,"name":"1002288","owner_address":"TPzfpaaKUPgJPZ39YeyvBaTYNXBYpnhxDg"},{"balance":5,"name":"1002488","owner_address":"TMeAzhdgzu1sFMTsP75BffJ2tEzuGsYqR6"},{"balance":666,"name":"1002438","owner_address":"TMqNJwD3qVmuRxzzP3Q4A24fuByVBKQ39E"},{"balance":10000000,"name":"1002517","owner_address":"TP9m11ERHhE1qgDtL83c2AHHNkWvdUfKTz"},{"balance":10000000000,"name":"1002521","owner_address":"TJUwM4qk1et2nNKuESQ7UVHPjAHoRqAz3T"},{"balance":13699,"name":"1000157","owner_address":"TUahmv54ZiDnjQWG2VAeyMphebXQ4m6Hb5"},{"balance":65895,"name":"1002524","owner_address":"TRzZeBPt69utiWx1po5ghLH8uSP8uJGsa5"},{"balance":16,"name":"1000287","owner_address":"TFZCyZ18XNzMfEr6W5kLkGrs4HVmou9H3y"},{"balance":10000000,"name":"1002544","owner_address":"TQHBbjES5DNjDfDHBbpnh9qcDM7mVjSVcL"},{"balance":10000000000,"name":"1002551","owner_address":"TVrGxBCQkWjQ52D7S67UgFsUzcX4E8EsNB"},{"balance":10000000,"name":"1002573","owner_address":"TBfmGqmZtdEQNuYCz8s1izBUDxZbkPmMcj"},{"balance":10000000,"name":"1002552","owner_address":"TCxeAH2ajBqoWzqV9m5YiFTyeQ5FvzVqSH"},{"balance":1000000,"name":"1002578","owner_address":"TUjBG7C1CU7X75UmacnyrRTYLmbSeX7iDa"},{"balance":2555000,"name":"1002270","owner_address":"TMSpdYHCgZuxM7AjqKsjGMM1cpxraFuZGp"},{"balance":10000000,"name":"1002597","owner_address":"TDEBhgsdGTSzrgMsPDUQ1pt59fR6wWR7Rq"},{"balance":10000000,"name":"1002636","owner_address":"TKL54NcGXvBckkGbPjYzAmdwFs3usv8VY9"},{"balance":100000000,"name":"1002250","owner_address":"THUHfNqiYo4KS3GLM8MUU4x3wek9uPD47d"},{"balance":1000000,"name":"1002662","owner_address":"TEV5PJWga6crSeNLHmHaaco8fon6nm74wJ"},{"balance":10000000,"name":"1002672","owner_address":"TBHJCf3nymJPt1hVPjSJfH5ssJLdNMPepe"},{"balance":24120,"name":"1002657","owner_address":"TCKiVea721ycNAWonb2dpwr65AJkMiGSFb"},{"balance":1000000,"name":"1002683","owner_address":"TL6YggMQQ3YFEc41wesBMHZjDxcGpX3y5q"},{"balance":3000000,"name":"1002671","owner_address":"TDQ5q4Hf6UqR43Smp67sndMQfdTcGgP88s"},{"balance":20,"name":"1002577","owner_address":"TGZzci6a9wtcSiNekqYLP84ECRoaJ6pBwY"},{"balance":10000000,"name":"1002721","owner_address":"TUkUgsTTo74B9XG9da4d2NsaZqCKLNFwNS"},{"balance":10000,"name":"1002726","owner_address":"TRXw3Ggt3xs3fHbcoark1aeKwUZFKTYcsS"},{"balance":21092024781,"name":"1002263","owner_address":"TD5AwyiTNbKN9jQqyMzwQ6NLrWGbtAcotK"},{"balance":10000000,"name":"1002736","owner_address":"TBB19fMCf19wuiu5omtA1nAqALPpo4oa32"},{"balance":10000000,"name":"1002646","owner_address":"TRUnzvtzT6o35M4XHUvKr48yCZjw4dQyvp"},{"balance":7392000000,"name":"1002589","owner_address":"TUL9NhGQkRFLTRcHGkdoSniAeVaNPZGgot"},{"balance":10000000,"name":"1002742","owner_address":"TWfrNPVGDh1tyPVM79bfEASb7jw2bLbZPJ"},{"balance":8822711275000000,"name":"1002762","owner_address":"TRChSJM8TjQj7vvJCN9W8WBcfkJq2eBxgv"},{"balance":10000000,"name":"1002775"},{"balance":10000000,"name":"1002798","owner_address":"TBitZMK7YSUb2Q1Cm537D5iAZSJkaPdN9c"},{"balance":95,"name":"1001854","owner_address":"TSMeDkfmX6m1NZmDBrVtGPnACJCUWVkx4p"},{"balance":10000000,"name":"1002746","owner_address":"TQbbAyfcrKERXjUDf8TZfcdtjFQbCSgEfc"},{"balance":2000000,"name":"1002669","owner_address":"THhgpkHBdJDDWBPnZKRgzdvRr3qCtAa2cv"},{"balance":10000000,"name":"1002814","owner_address":"TNvq4y2A2beBENtcGknwhX6XHgk8hqgnVh"},{"balance":10000000,"name":"1002830","owner_address":"THLLMnsEKEci5e5dJHnW28QQU8AujGhSoK"},{"balance":10000000,"name":"1002845","owner_address":"TUzpDkzjWkZasA6Dx7nx5PPskMkCcNxVyQ"},{"balance":10000000,"name":"1002858","owner_address":"TRKJcugHJeffVpCAFGapZMwuH8HaTWjbof"},{"balance":200,"name":"1002454","owner_address":"TDCGkNf3XB3jRGg7bhFkNynkGw7q4kV3z9"},{"balance":10000000,"name":"1002876","owner_address":"TGqiinRV6nn8GbF5LX7zue4fpjstG1gVvu"},{"balance":20000000,"name":"1002881","owner_address":"TWpKN6y3NVXm5mMjGmPEtLpS6boGM4q8T4"},{"balance":350,"name":"1000145","owner_address":"TNFcvwJgvBRg2Dq5Qyx1gxcvqU3dwPyVNc"},{"balance":10000000,"name":"1002892","owner_address":"TECsVV1kTtx48sbdjvptq544h4H3Qqr24c"},{"balance":10000000,"name":"1002897","owner_address":"TPKqse19ALipJ1uBZHGWHzuTrQqZa4HtaM"},{"balance":2055000000,"name":"1002822","owner_address":"TURy9pFLskqTWgkZqUCUdPXkezZfYL76YQ"},{"balance":1000000,"name":"1002852","owner_address":"TUmad3hCqxu78n8GuULrdJMUB4qmTUYgv3"},{"balance":10000000,"name":"1002907","owner_address":"TKC9HMUXx3qLE7d19KWzWVjFxEcWQdSYK9"},{"balance":10000000,"name":"1002927","owner_address":"TAwRvFAqfB4bbzVCVPgGATZV5uMVs9UyVL"},{"balance":10000000,"name":"1002926","owner_address":"TF5jfDiQ3d7T5ihcBxeWS9S8xSR5tS738x"},{"balance":1000000,"name":"1002748","owner_address":"TTUAmhh9k2Yegf3TxZc86vG5E9kT24vgcw"},{"balance":189990000000,"name":"1002950","owner_address":"TNCZCGDPQ69ieJFsY1jZUohXmR46A4kM24"},{"balance":10,"name":"1000985","owner_address":"TRH5jmPx77UnMvfdvfo2m3FCkZVcBiFvqP"},{"balance":10000000,"name":"1002962","owner_address":"TFDwGwod9qopreRiirsFMwPzX4v2r662P4"},{"balance":10000000,"name":"1002918","owner_address":"TKGpTks1myPrJ9ZtEdLgpjvg1RMR2wGAFz"},{"balance":1000,"name":"1002608","owner_address":"TDPsSgBQznKEffdTMq3aspsvrmFfhL7ZcP"},{"balance":10000000,"name":"1002999","owner_address":"TTL52uBzTG7qorL7BQYdjGUY3HWWr9Kvao"},{"balance":100000000000,"name":"1003022","owner_address":"TAAJiJ1NgkEkE3w1PQk4dA8XH9rpfk5eVE"},{"balance":1000000000,"name":"1003041","owner_address":"TQADZoww5HstdsJM1GXwstqsRRnmrkThzY"},{"balance":10000000,"name":"1003049","owner_address":"THFJwSN5Z3zTc5TvkSiVh8m4kQMZaTMaqk"},{"balance":1,"name":"1002939","owner_address":"TAsSw8hUddYi8AN8EkDuAMS9r8pkriyUxs"}],"balances":[{"balance":346976329314696,"name":"_"},{"balance":1273,"name":"1000003"},{"balance":113,"name":"1000006"},{"balance":145,"name":"1000165"},{"balance":416,"name":"1000520"},{"balance":596,"name":"1000491"},{"balance":242,"name":"1000176","owner_address":"THG48yHsR6inxrCJk2hhxZPsFLq1ehP88V"},{"balance":62,"name":"1000542"},{"balance":53,"name":"1000494","owner_address":"TXJnVqqwLSNmdXDLWn1Yfjhe8aZH2oaAuq"},{"balance":56,"name":"1000493"},{"balance":599,"name":"1000744"},{"balance":628,"name":"1000746"},{"balance":234,"name":"1000743"},{"balance":113,"name":"1000396"},{"balance":206,"name":"1000745","owner_address":"TPCEi45wZQ1PPChUg5uqoK1D5kKnjCR8Li"},{"balance":61,"name":"1000821","owner_address":"TBm3Peu51gYwn2iPwNEDxc9vBMc3eRGUGu"},{"balance":25,"name":"1000541"},{"balance":7,"name":"1000278","owner_address":"TRMUimDekf9nDLuVMp6TKzcw4axNnajGJr"},{"balance":1,"name":"1000567","owner_address":"TFXJMhB4ZKBfcQWfCLbSyQGhonHXABaWku"},{"balance":1,"name":"1000856","owner_address":"TXf3X8YMdDho2xwA6QDbFZiTGPnk8ghfLm"},{"balance":30,"name":"1000884"},{"balance":1,"name":"1000894"},{"balance":200,"name":"1000181","owner_address":"TEmTbbvH5ZPJPZ8CbffjqonFRiAAFgfc9o"},{"balance":7,"name":"1000935","owner_address":"TPVkcFYTEi9Dia45AveiTcaYoaU9ux7xC7"},{"balance":1000,"name":"1000938","owner_address":"TNgkWTabK1rMWwgLjmLdsZbzYfGTx5Tpe9"},{"balance":10,"name":"1000017","owner_address":"TV6qcwSp38uESiDczxxb7zbJX1h2LfDs78"},{"balance":10,"name":"1001011","owner_address":"TNUbeTQXPtRXtBX3dJboVkhdhaiws29Aky"},{"balance":2,"name":"1001038","owner_address":"TFujVDp8U578L2AtsorYN3pwdXmH2HxbQv"},{"balance":100,"name":"1000983","owner_address":"TYmiZ7xCeqboiizb2jsjVQuRABXzVSjKFR"},{"balance":1,"name":"1001203","owner_address":"TBmaT8mcrdkrRL2Q6ur7grMYAcaGtfxsz7"},{"balance":1,"name":"1000190","owner_address":"TNXjXURue38Wa641pmqMH4vbJN1WZLKMnr"},{"balance":100,"name":"1001204"},{"balance":1000,"name":"1001230"},{"balance":1300000,"name":"1001301","owner_address":"TVgJEbc9NEYxVr1h6rJQiMqySePsJQDCA7"},{"balance":11,"name":"1000959"},{"balance":10,"name":"1001425"},{"balance":17,"name":"1001433","owner_address":"TWPMz6FPEAV6qP4VRMG3Y69ftEov1R7YWT"},{"balance":100,"name":"1001446"},{"balance":12,"name":"1001411","owner_address":"TPL6zNujtEQ8kp213n58UxAhGRCU3aozkc"},{"balance":12,"name":"1001467"},{"balance":100,"name":"1001414","owner_address":"TT43DgfxgMdR4BVZNua4YCwG34AgfGN6Uu"},{"balance":100,"name":"1001510","owner_address":"TPKq9bVZyM2sZ8XersMmXhy1NbjhdxRwwj"},{"balance":50,"name":"1001565","owner_address":"TKY7Vmq78b2c83fLXrPijkhQkk4EJtfViD"},{"balance":5,"name":"1001535"},{"balance":10,"name":"1000532","owner_address":"TGQwBNht8h3zev4gBtDMoQjWE2WJm1Zr9B"},{"balance":3,"name":"1001479","owner_address":"TC9FtB1EoiV3jfXgZvmqUmfeCmdWNmCxdY"},{"balance":13,"name":"1001090","owner_address":"TU1LUTYDMG6iihimUpAmdnnBthawPKh1cm","priceInTrx":0.004360},{"balance":200,"name":"1001759","owner_address":"TWKWWJAFBYyjvLtfqKCSeMyUW7TjWhkY4e"},{"balance":12,"name":"1000096","owner_address":"TSfjkVSKJGW4aybDQcxi4bpythU7WCXV3v"},{"balance":15,"name":"1001594"},{"balance":10,"name":"1001815","owner_address":"TB3iM1RsKXagV7hdz2QpWnaChptwrU3tCL"},{"balance":10,"name":"1001064","owner_address":"THnWV416C9mfJ1LFwopUjGXZEr1xFtAdrD"},{"balance":5192508733304578,"name":"1002000","owner_address":"TF5Bn4cJCT6GVeUgyCN4rBhDg42KBrpAjg","priceInTrx":0.018900},{"balance":7742069,"name":"1002037","owner_address":"TBekuTCZwPG2o88SmiS58VALkxBemoX4yS"},{"balance":585,"name":"1002001"},{"balance":5441,"name":"1002071","owner_address":"TS79aik831csqUnQgnqrKG6hov2iL8yPbD"},{"balance":80312957663126,"name":"1002072","owner_address":"TP6PtaBSMM6sfWtWWD9k77YHWGmh7K3Lae"},{"balance":520,"name":"1000451","owner_address":"THPXuypwcnWo4wi5KqFfuRjgjeT5khUDKF"},{"balance":10011237,"name":"1001953","owner_address":"TSyG9BdjsGE2GoHG9eeYKMns6zMQFDmbvS"},{"balance":5,"name":"1000562","owner_address":"TWqKTJ5JhyD7rsbbWzEvS5ZZD9Q5QPPvSH"},{"balance":50000000,"name":"1002099","owner_address":"TYWmiPERm9kWUcnduqaE5jxT7eeZxfn5SQ"},{"balance":625100,"name":"1001581","owner_address":"TNkRSKWP7VvdrisTwC8iNzUV6MRoEJh6xx"},{"balance":11000000,"name":"1002342","owner_address":"TUCd8NiBUuxrjz1kSrUbAg2JXu6o27Ukrq"},{"balance":7,"name":"1000322","owner_address":"TDGy2M9qWBepSHDEutWWxWd1JZfmAed3BP","priceInTrx":0.000422},{"balance":12,"name":"1001825","owner_address":"TPcUbNeYwwYqbX23w3sVf1X61cwpAfPK2T"},{"balance":1000,"name":"1002384","owner_address":"TFYuPxyjDTvH1TLm2phpzJFw7AhjCgu8xP"},{"balance":44444,"name":"1001132","owner_address":"TWDUanVdxEShjpbiX57ExztMCDy8vCFcHh"},{"balance":30000000,"name":"1002398","owner_address":"TUXSuMg41nJXm9TuDgF6EZWjEbP2vx1Hd4"},{"balance":10000060,"name":"1002116","owner_address":"TAEvo6MgLgV3A75L3cr3BAsLDJikWcAt3j"},{"balance":50000000,"name":"1002446","owner_address":"TJKf72NjL1cR49SHfDnPTXTFjRwjgr7v8Z"},{"balance":10000000,"name":"1002459","owner_address":"TNWy3mX85JsX2mPLgLc4cKJiWtJahhz3t3"},{"balance":1,"name":"1001079","owner_address":"TLQfc5EwZQqZc6jMNkMpxyJy5wucA6UX24"},{"balance":12345,"name":"1002467","owner_address":"TP429SKrsp4BoTiEFXHj4TNSJwqDFsygnr"},{"balance":1234,"name":"1002230","owner_address":"TWB9Q1JoB3fSLsahNq31gydRxYyWxDhSyk"},{"balance":10000000,"name":"1002288","owner_address":"TPzfpaaKUPgJPZ39YeyvBaTYNXBYpnhxDg"},{"balance":5,"name":"1002488","owner_address":"TMeAzhdgzu1sFMTsP75BffJ2tEzuGsYqR6"},{"balance":666,"name":"1002438","owner_address":"TMqNJwD3qVmuRxzzP3Q4A24fuByVBKQ39E"},{"balance":10000000,"name":"1002517","owner_address":"TP9m11ERHhE1qgDtL83c2AHHNkWvdUfKTz"},{"balance":10000000000,"name":"1002521","owner_address":"TJUwM4qk1et2nNKuESQ7UVHPjAHoRqAz3T"},{"balance":13699,"name":"1000157","owner_address":"TUahmv54ZiDnjQWG2VAeyMphebXQ4m6Hb5"},{"balance":65895,"name":"1002524","owner_address":"TRzZeBPt69utiWx1po5ghLH8uSP8uJGsa5"},{"balance":16,"name":"1000287","owner_address":"TFZCyZ18XNzMfEr6W5kLkGrs4HVmou9H3y"},{"balance":10000000,"name":"1002544","owner_address":"TQHBbjES5DNjDfDHBbpnh9qcDM7mVjSVcL"},{"balance":10000000000,"name":"1002551","owner_address":"TVrGxBCQkWjQ52D7S67UgFsUzcX4E8EsNB"},{"balance":10000000,"name":"1002573","owner_address":"TBfmGqmZtdEQNuYCz8s1izBUDxZbkPmMcj"},{"balance":10000000,"name":"1002552","owner_address":"TCxeAH2ajBqoWzqV9m5YiFTyeQ5FvzVqSH"},{"balance":1000000,"name":"1002578","owner_address":"TUjBG7C1CU7X75UmacnyrRTYLmbSeX7iDa"},{"balance":2555000,"name":"1002270","owner_address":"TMSpdYHCgZuxM7AjqKsjGMM1cpxraFuZGp"},{"balance":10000000,"name":"1002597","owner_address":"TDEBhgsdGTSzrgMsPDUQ1pt59fR6wWR7Rq"},{"balance":10000000,"name":"1002636","owner_address":"TKL54NcGXvBckkGbPjYzAmdwFs3usv8VY9"},{"balance":100000000,"name":"1002250","owner_address":"THUHfNqiYo4KS3GLM8MUU4x3wek9uPD47d"},{"balance":1000000,"name":"1002662","owner_address":"TEV5PJWga6crSeNLHmHaaco8fon6nm74wJ"},{"balance":10000000,"name":"1002672","owner_address":"TBHJCf3nymJPt1hVPjSJfH5ssJLdNMPepe"},{"balance":24120,"name":"1002657","owner_address":"TCKiVea721ycNAWonb2dpwr65AJkMiGSFb"},{"balance":1000000,"name":"1002683","owner_address":"TL6YggMQQ3YFEc41wesBMHZjDxcGpX3y5q"},{"balance":3000000,"name":"1002671","owner_address":"TDQ5q4Hf6UqR43Smp67sndMQfdTcGgP88s"},{"balance":20,"name":"1002577","owner_address":"TGZzci6a9wtcSiNekqYLP84ECRoaJ6pBwY"},{"balance":10000000,"name":"1002721","owner_address":"TUkUgsTTo74B9XG9da4d2NsaZqCKLNFwNS"},{"balance":10000,"name":"1002726","owner_address":"TRXw3Ggt3xs3fHbcoark1aeKwUZFKTYcsS"},{"balance":21092024781,"name":"1002263","owner_address":"TD5AwyiTNbKN9jQqyMzwQ6NLrWGbtAcotK"},{"balance":10000000,"name":"1002736","owner_address":"TBB19fMCf19wuiu5omtA1nAqALPpo4oa32"},{"balance":10000000,"name":"1002646","owner_address":"TRUnzvtzT6o35M4XHUvKr48yCZjw4dQyvp"},{"balance":7392000000,"name":"1002589","owner_address":"TUL9NhGQkRFLTRcHGkdoSniAeVaNPZGgot"},{"balance":10000000,"name":"1002742","owner_address":"TWfrNPVGDh1tyPVM79bfEASb7jw2bLbZPJ"},{"balance":8822711275000000,"name":"1002762","owner_address":"TRChSJM8TjQj7vvJCN9W8WBcfkJq2eBxgv"},{"balance":10000000,"name":"1002775"},{"balance":10000000,"name":"1002798","owner_address":"TBitZMK7YSUb2Q1Cm537D5iAZSJkaPdN9c"},{"balance":95,"name":"1001854","owner_address":"TSMeDkfmX6m1NZmDBrVtGPnACJCUWVkx4p"},{"balance":10000000,"name":"1002746","owner_address":"TQbbAyfcrKERXjUDf8TZfcdtjFQbCSgEfc"},{"balance":2000000,"name":"1002669","owner_address":"THhgpkHBdJDDWBPnZKRgzdvRr3qCtAa2cv"},{"balance":10000000,"name":"1002814","owner_address":"TNvq4y2A2beBENtcGknwhX6XHgk8hqgnVh"},{"balance":10000000,"name":"1002830","owner_address":"THLLMnsEKEci5e5dJHnW28QQU8AujGhSoK"},{"balance":10000000,"name":"1002845","owner_address":"TUzpDkzjWkZasA6Dx7nx5PPskMkCcNxVyQ"},{"balance":10000000,"name":"1002858","owner_address":"TRKJcugHJeffVpCAFGapZMwuH8HaTWjbof"},{"balance":200,"name":"1002454","owner_address":"TDCGkNf3XB3jRGg7bhFkNynkGw7q4kV3z9"},{"balance":10000000,"name":"1002876","owner_address":"TGqiinRV6nn8GbF5LX7zue4fpjstG1gVvu"},{"balance":20000000,"name":"1002881","owner_address":"TWpKN6y3NVXm5mMjGmPEtLpS6boGM4q8T4"},{"balance":350,"name":"1000145","owner_address":"TNFcvwJgvBRg2Dq5Qyx1gxcvqU3dwPyVNc"},{"balance":10000000,"name":"1002892","owner_address":"TECsVV1kTtx48sbdjvptq544h4H3Qqr24c"},{"balance":10000000,"name":"1002897","owner_address":"TPKqse19ALipJ1uBZHGWHzuTrQqZa4HtaM"},{"balance":2055000000,"name":"1002822","owner_address":"TURy9pFLskqTWgkZqUCUdPXkezZfYL76YQ"},{"balance":1000000,"name":"1002852","owner_address":"TUmad3hCqxu78n8GuULrdJMUB4qmTUYgv3"},{"balance":10000000,"name":"1002907","owner_address":"TKC9HMUXx3qLE7d19KWzWVjFxEcWQdSYK9"},{"balance":10000000,"name":"1002927","owner_address":"TAwRvFAqfB4bbzVCVPgGATZV5uMVs9UyVL"},{"balance":10000000,"name":"1002926","owner_address":"TF5jfDiQ3d7T5ihcBxeWS9S8xSR5tS738x"},{"balance":1000000,"name":"1002748","owner_address":"TTUAmhh9k2Yegf3TxZc86vG5E9kT24vgcw"},{"balance":189990000000,"name":"1002950","owner_address":"TNCZCGDPQ69ieJFsY1jZUohXmR46A4kM24"},{"balance":10,"name":"1000985","owner_address":"TRH5jmPx77UnMvfdvfo2m3FCkZVcBiFvqP"},{"balance":10000000,"name":"1002962","owner_address":"TFDwGwod9qopreRiirsFMwPzX4v2r662P4"},{"balance":10000000,"name":"1002918","owner_address":"TKGpTks1myPrJ9ZtEdLgpjvg1RMR2wGAFz"},{"balance":1000,"name":"1002608","owner_address":"TDPsSgBQznKEffdTMq3aspsvrmFfhL7ZcP"},{"balance":10000000,"name":"1002999","owner_address":"TTL52uBzTG7qorL7BQYdjGUY3HWWr9Kvao"},{"balance":100000000000,"name":"1003022","owner_address":"TAAJiJ1NgkEkE3w1PQk4dA8XH9rpfk5eVE"},{"balance":1000000000,"name":"1003041","owner_address":"TQADZoww5HstdsJM1GXwstqsRRnmrkThzY"},{"balance":10000000,"name":"1003049","owner_address":"THFJwSN5Z3zTc5TvkSiVh8m4kQMZaTMaqk"},{"balance":1,"name":"1002939","owner_address":"TAsSw8hUddYi8AN8EkDuAMS9r8pkriyUxs"}],"balance":346976329314696,"voteTotal":0,"name":"","delegated":{"sentDelegatedBandwidth":[],"sentDelegatedResource":[],"receivedDelegatedResource":[],"receivedDelegatedBandwidth":[]},"totalTransactionCount":508552,"representative":{"lastWithDrawTime":0,"allowance":0,"enabled":false,"url":""},"activePermissions":[]}`
 	mockedTransactionsTrc20Response                       = `{"success":true,"meta":{"at":1592757126588,"page_size":20,"fingerprint":"2tmLC90HQEnpnJ02w3n","links":{"next":"https://api.trongrid.io:443/v1/accounts/TM1zzNDZD2DPASbKcgdVoTYhfmYgtfwx9D/transactions/trc20?fingerprint=2tmLC90HQEnpnJ02w3n"}},"data":[{"block_timestamp":1592757117000,"value":"500000000","type":"Transfer","transaction_id":"fb078403adfee637608c3906d9d21dd158611aba149b9993f43d0f292ce543a0","from":"TM1zzNDZD2DPASbKcgdVoTYhfmYgtfwx9D","to":"TGg7zHY9qd36aN3jLVDDRuiFeJjaaAtx8A","token_info":{"address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t","name":"Tether USD","symbol":"USDT","decimals":6},"_unconfirmed":true},{"block_timestamp":1592757066000,"value":"50000000","type":"Transfer","transaction_id":"c4052b526e5cd21e1f023c31cce6b6a13eb9d8aeae3ae80fcefe6038dfbeb022","from":"TM1zzNDZD2DPASbKcgdVoTYhfmYgtfwx9D","to":"TXJTFuXzfoPbWKCnw47AYxMzgVPUyhJGRd","token_info":{"address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t","name":"Tether USD","symbol":"USDT","decimals":6},"_unconfirmed":true},{"from":"TM1zzNDZD2DPASbKcgdVoTYhfmYgtfwx9D","to":"TXJTFuXzfoPbWKCnw47AYxMzgVPUyhJGRd","block_timestamp":1592757066000,"value":"50000000","type":"Transfer","transaction_id":"c4052b526e5cd21e1f023c31cce6b6a13eb9d8aeae3ae80fcefe6038dfbeb022","token_info":{"name":"Tether USD","symbol":"USDT","decimals":6,"address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"}},{"from":"TM1zzNDZD2DPASbKcgdVoTYhfmYgtfwx9D","to":"TFNEJYAKBVgc17X6fPppZ8ayaf9yswmMYV","block_timestamp":1592756784000,"value":"3988000000","type":"Transfer","transaction_id":"0b52a4ef9fb8c13fbfae2b8c3506333ec1d718f307062a15f170562818a01d0a","token_info":{"name":"Tether USD","symbol":"USDT","decimals":6,"address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"}},{"from":"TM1zzNDZD2DPASbKcgdVoTYhfmYgtfwx9D","to":"TGYETHZr2MTkFDe8GqwdVFPfadofTVk4am","block_timestamp":1592756763000,"value":"640990000","type":"Transfer","transaction_id":"19d2ec6174bf64beb1061475f6429cba03b64944a763686cc3551447d0e8d9d5","token_info":{"name":"Tether USD","symbol":"USDT","decimals":6,"address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"}},{"from":"TAxbLztoanFhYu4TuS5RabaJYGnUkfzNKG","to":"TM1zzNDZD2DPASbKcgdVoTYhfmYgtfwx9D","block_timestamp":1592756631000,"value":"1062000000","type":"Transfer","transaction_id":"efb7d44305759cfb189c9fd22720609a2ddeb7fbd7c8afe1dd8851342471da8d","token_info":{"name":"Tether USD","symbol":"USDT","decimals":6,"address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"}},{"from":"TM1zzNDZD2DPASbKcgdVoTYhfmYgtfwx9D","to":"TGg7zHY9qd36aN3jLVDDRuiFeJjaaAtx8A","block_timestamp":1592756610000,"value":"2000000","type":"Transfer","transaction_id":"48bd90dc3f12086178e65b9389caa8b3c74683937b86d4d61cdec77f0095994a","token_info":{"name":"Tether USD","symbol":"USDT","decimals":6,"address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"}},{"from":"TM1zzNDZD2DPASbKcgdVoTYhfmYgtfwx9D","to":"TN6Wy4j37wn3vxynynrKemWhDsUBHYje3R","block_timestamp":1592756589000,"value":"1000000000","type":"Transfer","transaction_id":"afd5ae7e2462c9cc899c7f730b90fd2a5e4c1315e836c92468b504ed85f0b798","token_info":{"name":"Tether USD","symbol":"USDT","decimals":6,"address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"}},{"from":"TM1zzNDZD2DPASbKcgdVoTYhfmYgtfwx9D","to":"TXP7prwMqugLFWZRwcJAWuKZ4UN4wz3ifq","block_timestamp":1592756583000,"value":"21200000","type":"Transfer","transaction_id":"3d613031f4b2a0e19deeea030d1d18599b6d9799d2dd530005ead9712c6d219d","token_info":{"name":"Tether USD","symbol":"USDT","decimals":6,"address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"}},{"from":"TM1zzNDZD2DPASbKcgdVoTYhfmYgtfwx9D","to":"TBStJt5wDtLqeUvGEasqd55uo1CbDTCsf5","block_timestamp":1592756583000,"value":"125000000","type":"Transfer","transaction_id":"cbe359c2574efbdc8fc6a892ffc54812837295067c9816d41734126c82d0c141","token_info":{"name":"Tether USD","symbol":"USDT","decimals":6,"address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"}},{"from":"TM1zzNDZD2DPASbKcgdVoTYhfmYgtfwx9D","to":"TJ2qhZSQ9g5YqEAJgYfPZZxn1djbf5ogkC","block_timestamp":1592756583000,"value":"5277600000","type":"Transfer","transaction_id":"c87248b02a4caaa6f443c1b8c4d4588c8dd281a4687b73e6afecfba6741b50d8","token_info":{"name":"Tether USD","symbol":"USDT","decimals":6,"address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"}},{"from":"TM1zzNDZD2DPASbKcgdVoTYhfmYgtfwx9D","to":"TRqyhrttStrn1o7gS3mmgKrmkVw6qyw23W","block_timestamp":1592756583000,"value":"485342000","type":"Transfer","transaction_id":"8584f1b6a70ead8232fed19bd653ba13e4c2a8befd070f4a9a06eca3a2e3e548","token_info":{"name":"Tether USD","symbol":"USDT","decimals":6,"address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"}},{"from":"TM1zzNDZD2DPASbKcgdVoTYhfmYgtfwx9D","to":"TLdYhJeKCLKxVm33JL8GAyi6i6zrSz8VFr","block_timestamp":1592756583000,"value":"1000000000","type":"Transfer","transaction_id":"2b28b69e6747db68647acc3a62c45da5355b97acd8d2c260ee752aa9bd63a624","token_info":{"name":"Tether USD","symbol":"USDT","decimals":6,"address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"}},{"from":"TM1zzNDZD2DPASbKcgdVoTYhfmYgtfwx9D","to":"TDpRQi5HguNpasa9Cn7AJyrn646nRDAH6x","block_timestamp":1592756583000,"value":"2000000000","type":"Transfer","transaction_id":"1da6576dec0bd303f56cbfb5712f782e0a56a8713cb661f8afd2f2533e5c6209","token_info":{"name":"Tether USD","symbol":"USDT","decimals":6,"address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"}},{"from":"TM1zzNDZD2DPASbKcgdVoTYhfmYgtfwx9D","to":"TGy3K5iDbxm8SM34UTWWniNsS13FtLnHkK","block_timestamp":1592756583000,"value":"24216600000","type":"Transfer","transaction_id":"f9c86cce1873cb816d6cd8718e76df8839172add293bbc8d11a5f98c80f9e322","token_info":{"name":"Tether USD","symbol":"USDT","decimals":6,"address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"}},{"from":"TGMTZMty79L9psKi5b4vwXZPJaiCb9k6mV","to":"TM1zzNDZD2DPASbKcgdVoTYhfmYgtfwx9D","block_timestamp":1592756541000,"value":"8241997837","type":"Transfer","transaction_id":"75eb35734857daa79c38ef923a7e7eb2e3dfb23d2722762fd2b180651021643f","token_info":{"name":"Tether USD","symbol":"USDT","decimals":6,"address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"}},{"from":"TUwgGpDrVBc3uDZg3Tj9BZZN8xkLK29yzH","to":"TM1zzNDZD2DPASbKcgdVoTYhfmYgtfwx9D","block_timestamp":1592756220000,"value":"18000000000","type":"Transfer","transaction_id":"adee73dadce006ff848ff30d8c5c41f033be2e5e1a8b875f6dbbaab524177d08","token_info":{"name":"Tether USD","symbol":"USDT","decimals":6,"address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"}},{"from":"TMaDtMFGJ8BBiNXchGBQmRBWi2mpfi2kdV","to":"TM1zzNDZD2DPASbKcgdVoTYhfmYgtfwx9D","block_timestamp":1592755962000,"value":"863399098","type":"Transfer","transaction_id":"3655a1156c9adcb876c6c9c9e0f5f1f39704ac4c7296fea05fedf5ca8f6b1a19","token_info":{"name":"Tether USD","symbol":"USDT","decimals":6,"address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"}},{"from":"TM1zzNDZD2DPASbKcgdVoTYhfmYgtfwx9D","to":"TH7AaBSjS4NYuF3r8vXQcuwVXmGrv9iwYQ","block_timestamp":1592755740000,"value":"20000000","type":"Transfer","transaction_id":"03574741eb0016050a19f181e4acc4b20b70f41e11e63140c9556c31eae09fba","token_info":{"name":"Tether USD","symbol":"USDT","decimals":6,"address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"}},{"from":"TM1zzNDZD2DPASbKcgdVoTYhfmYgtfwx9D","to":"TA1VFEzYiU8oB9P1xdhMaFJ7BZ6FvUTyug","block_timestamp":1592755722000,"value":"21161340000","type":"Transfer","transaction_id":"f3aa00595996e31dbe9528a3cb21bff987f333bf1f675420ba4fa2ad43c8205f","token_info":{"name":"Tether USD","symbol":"USDT","decimals":6,"address":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"}}]}`
diff --git a/services/tokensearcher/api_test.go b/services/tokensearcher/api_test.go
index 3aa7212..ec80ac3 100644
--- a/services/tokensearcher/api_test.go
+++ b/services/tokensearcher/api_test.go
@@ -3,6 +3,7 @@ package tokensearcher
 import (
 	"errors"
 	"github.com/stretchr/testify/assert"
+	"github.com/trustwallet/blockatlas/db/models"
 	"github.com/trustwallet/blockatlas/pkg/blockatlas"
 	"github.com/trustwallet/golibs/coin"
 	"testing"
@@ -25,9 +26,9 @@ func Test_getUnsubscribedAddresses(t *testing.T) {
 }
 
 func Test_getAddressesToRegisterByCoin(t *testing.T) {
-	addressFromDB := make(map[string][]string)
-	addressFromDB["60_a"] = []string{"1", "2", "3"}
-	addressFromDB["714_b"] = []string{"1", "3"}
+	addressFromDB := make(map[string][]models.Asset)
+	addressFromDB["60_a"] = []models.Asset{{Asset: "1"}, {Asset: "2"}, {Asset: "3"}}
+	addressFromDB["714_b"] = []models.Asset{{Asset: "1"}, {Asset: "3"}}
 
 	addressesFromRequest := []string{"60_a", "714_b", "118_c"}
 	result := getAddressesToRegisterByCoin(addressFromDB, addressesFromRequest)
@@ -38,12 +39,12 @@ func Test_getAddressesToRegisterByCoin(t *testing.T) {
 }
 
 func Test_getAssetsToResponse(t *testing.T) {
-	addressFromDB := make(map[string][]string)
-	addressFromDB["60_a"] = []string{"1", "2", "3"}
-	addressFromDB["714_b"] = []string{"1", "3"}
+	addressFromDB := make(map[string][]models.Asset)
+	addressFromDB["60_a"] = []models.Asset{{Asset: "1"}, {Asset: "2"}, {Asset: "3"}}
+	addressFromDB["714_b"] = []models.Asset{{Asset: "1"}, {Asset: "3"}}
 
-	addressFromNodes := make(map[string][]string)
-	addressFromNodes["118_c"] = []string{"1", "2", "3"}
+	addressFromNodes := make(map[string][]models.Asset)
+	addressFromNodes["118_c"] = []models.Asset{{Asset: "1"}, {Asset: "2"}, {Asset: "3"}}
 
 	addressesFromRequest := []string{"60_a", "714_b", "118_c"}
 
diff --git a/services/tokensearcher/association_test.go b/services/tokensearcher/association_test.go
index 2013d54..7d79f6c 100644
--- a/services/tokensearcher/association_test.go
+++ b/services/tokensearcher/association_test.go
@@ -40,45 +40,45 @@ func Test_assetsMap(t *testing.T) {
 	}
 
 	result := assetsMap(blockatlas.Txs{tx1, tx2, tx3}, "60")
-	assert.Equal(t, result["60_A"], []string{"c60_tABC"})
-	assert.Equal(t, result["60_C"], []string{"c60_tABC"})
-	assert.Equal(t, result["60_D"], []string{"c60_tEFG"})
-	assert.Equal(t, result["60_F"], []string{"c60_tEFG"})
-	assert.Equal(t, result["60_Q"], []string{"c60_tHIJ"})
-	assert.Equal(t, result["60_L"], []string{"c60_tHIJ"})
+	assert.Equal(t, result["60_A"], []models.Asset{{Asset: "c60_tABC", Type: "ERC20"}})
+	assert.Equal(t, result["60_C"], []models.Asset{{Asset: "c60_tABC", Type: "ERC20"}})
+	assert.Equal(t, result["60_D"], []models.Asset{{Asset: "c60_tEFG", Type: "ERC20"}})
+	assert.Equal(t, result["60_F"], []models.Asset{{Asset: "c60_tEFG", Type: "ERC20"}})
+	assert.Equal(t, result["60_Q"], []models.Asset{{Asset: "c60_tHIJ", Type: "ERC20"}})
+	assert.Equal(t, result["60_L"], []models.Asset{{Asset: "c60_tHIJ", Type: "ERC20"}})
 }
 
 func Test_associationsToAdd(t *testing.T) {
-	o := make(map[string][]string)
-	n := make(map[string][]string)
+	o := make(map[string][]models.Asset)
+	n := make(map[string][]models.Asset)
 
-	o["A"] = []string{"1", "2", "3"}
-	o["B"] = []string{"3", "4", "5"}
+	o["A"] = []models.Asset{{Asset: "1"}, {Asset: "2"}, {Asset: "3"}}
+	o["B"] = []models.Asset{{Asset: "3"}, {Asset: "4"}, {Asset: "5"}}
 
-	n["A"] = []string{"1", "2", "5"}
-	n["B"] = []string{"3", "9", "8"}
+	n["A"] = []models.Asset{{Asset: "1"}, {Asset: "2"}, {Asset: "5"}}
+	n["B"] = []models.Asset{{Asset: "3"}, {Asset: "9"}, {Asset: "8"}}
 
 	result := associationsToAdd(o, n)
 
-	assert.Equal(t, result["A"], []string{"5"})
-	assert.Equal(t, result["B"], []string{"9", "8"})
+	assert.Equal(t, result["A"], []models.Asset{{Asset: "5"}})
+	assert.Equal(t, result["B"], []models.Asset{{Asset: "9"}, {Asset: "8"}})
 }
 
 func Test_newAssociationsForAddress(t *testing.T) {
-	o := []string{"1", "2", "3"}
-	n := []string{"1", "2", "3", "4", "5"}
+	o := []models.Asset{{Asset: "1"}, {Asset: "2"}, {Asset: "3"}}
+	n := []models.Asset{{Asset: "1"}, {Asset: "2"}, {Asset: "3"}, {Asset: "4"}, {Asset: "5"}}
 
 	result := newAssociationsForAddress(o, n)
-	assert.Equal(t, result, []string{"4", "5"})
+	assert.Equal(t, result, []models.Asset{{Asset: "4"}, {Asset: "5"}})
 
-	o = []string{"1", "2", "3"}
-	n = []string{"1", "2", "3"}
+	o = []models.Asset{{Asset: "1"}, {Asset: "2"}, {Asset: "3"}}
+	n = []models.Asset{{Asset: "1"}, {Asset: "2"}, {Asset: "3"}}
 
 	result = newAssociationsForAddress(o, n)
 	assert.Equal(t, len(result), len([]string{}))
 
-	o = []string{"1", "2", "3"}
-	n = []string{"1", "2"}
+	o = []models.Asset{{Asset: "1"}, {Asset: "2"}, {Asset: "3"}}
+	n = []models.Asset{{Asset: "1"}, {Asset: "2"}}
 
 	result = newAssociationsForAddress(o, n)
 	assert.Equal(t, len(result), len([]string{}))
@@ -95,6 +95,6 @@ func Test_fromModelToAssociation(t *testing.T) {
 	}
 
 	result := fromModelToAssociation(a)
-	assert.Equal(t, result["A"], []string{"1", "2", "3"})
-	assert.Equal(t, result["B"], []string{"2", "3", "4"})
+	assert.Equal(t, result["A"], []models.Asset{{Asset: "1"}, {Asset: "2"}, {Asset: "3"}})
+	assert.Equal(t, result["B"], []models.Asset{{Asset: "2"}, {Asset: "3"}, {Asset: "4"}})
 }
diff --git a/tests/integration/db_test/tokenassociations_test.go b/tests/integration/db_test/tokenassociations_test.go
index 2547a92..8b297b7 100644
--- a/tests/integration/db_test/tokenassociations_test.go
+++ b/tests/integration/db_test/tokenassociations_test.go
@@ -5,6 +5,7 @@ package db_test
 import (
 	"context"
 	"github.com/stretchr/testify/assert"
+	"github.com/trustwallet/blockatlas/db/models"
 	"github.com/trustwallet/blockatlas/tests/integration/setup"
 	"sort"
 	"testing"
@@ -14,7 +15,7 @@ import (
 func Test_GetAssetsMapByAddresses(t *testing.T) {
 	setup.CleanupPgContainer(database.Gorm)
 
-	assets := []string{"aa", "bbb", "cccc"}
+	assets := []models.Asset{{Asset: "aa"}, {Asset: "bbb"}, {Asset: "cccc"}}
 
 	err := database.AddAssociationsForAddress("a", assets, context.Background())
 	assert.Nil(t, err)
@@ -24,15 +25,20 @@ func Test_GetAssetsMapByAddresses(t *testing.T) {
 
 	m, err := database.GetAssetsMapByAddresses([]string{"a", "b"}, context.Background())
 	assert.Nil(t, err)
-	wantedMap := make(map[string][]string)
+	wantedMap := make(map[string][]models.Asset)
 	wantedMap["a"] = assets
-	assert.Equal(t, wantedMap, m)
+	for i, a := range m {
+		for ii, aa := range a {
+			assert.Equal(t, wantedMap[i][ii].Asset, aa.Asset)
+		}
+	}
+
 }
 
 func Test_GetAssetsMapByAddressesFromTime(t *testing.T) {
 	setup.CleanupPgContainer(database.Gorm)
 
-	assets := []string{"aa", "bbb", "cccc"}
+	assets := []models.Asset{{Asset: "aa"}, {Asset: "bbb"}, {Asset: "cccc"}}
 
 	err := database.AddAssociationsForAddress("a", assets, context.Background())
 	assert.Nil(t, err)
@@ -42,9 +48,14 @@ func Test_GetAssetsMapByAddressesFromTime(t *testing.T) {
 	tm := time.Now().Unix() - 100
 	m, err := database.GetAssetsMapByAddressesFromTime([]string{"a", "b"}, time.Unix(tm, 0), context.Background())
 	assert.Nil(t, err)
-	wantedMap := make(map[string][]string)
+	wantedMap := make(map[string][]models.Asset)
 	wantedMap["a"] = assets
-	assert.Equal(t, wantedMap, m)
+
+	for i, a := range m {
+		for ii, aa := range a {
+			assert.Equal(t, wantedMap[i][ii].Asset, aa.Asset)
+		}
+	}
 
 	m, err = database.GetAssetsMapByAddressesFromTime([]string{"a", "b"}, time.Unix(tm+101, 0), context.Background())
 	assert.Nil(t, err)
@@ -54,7 +65,7 @@ func Test_GetAssetsMapByAddressesFromTime(t *testing.T) {
 func Test_GetSubscribedAddressesForAssets(t *testing.T) {
 	setup.CleanupPgContainer(database.Gorm)
 
-	assets := []string{"aa", "bbb", "cccc"}
+	assets := []models.Asset{{Asset: "aa"}, {Asset: "bbb"}, {Asset: "cccc"}}
 
 	err := database.AddAssociationsForAddress("a", assets, context.Background())
 	assert.Nil(t, err)
@@ -69,7 +80,7 @@ func Test_GetSubscribedAddressesForAssets(t *testing.T) {
 
 func Test_AddNewAssociationForAddress(t *testing.T) {
 	setup.CleanupPgContainer(database.Gorm)
-	assets := []string{"aa", "bbb", "cccc"}
+	assets := []models.Asset{{Asset: "aa"}, {Asset: "bbb"}, {Asset: "cccc"}}
 
 	err := database.AddAssociationsForAddress("a", assets, context.Background())
 	assert.Nil(t, err)
@@ -77,20 +88,22 @@ func Test_AddNewAssociationForAddress(t *testing.T) {
 	associations, err := database.GetAssociationsByAddresses([]string{"a"}, context.Background())
 	assert.Nil(t, err)
 
-	var assetIDsFromDB []string
+	var assetIDsFromDB []models.Asset
 	for _, a := range associations {
-		assetIDsFromDB = append(assetIDsFromDB, a.Asset.Asset)
+		assetIDsFromDB = append(assetIDsFromDB, a.Asset)
 	}
 
 	sort.Slice(assets, func(i, j int) bool {
-		return len(assets[i]) > len(assets[j])
+		return len(assets[i].Asset) > len(assets[j].Asset)
 	})
 
 	sort.Slice(assetIDsFromDB, func(i, j int) bool {
-		return len(assetIDsFromDB[i]) > len(assetIDsFromDB[j])
+		return len(assetIDsFromDB[i].Asset) > len(assetIDsFromDB[j].Asset)
 	})
 
-	assert.Equal(t, assetIDsFromDB, assets)
+	for i, a := range assets {
+		assert.Equal(t, assetIDsFromDB[i].Asset, a.Asset)
+	}
 
 	err = database.AddAssociationsForAddress("b", nil, context.Background())
 	assert.Nil(t, err)
@@ -102,7 +115,7 @@ func Test_AddNewAssociationForAddress(t *testing.T) {
 
 func Test_UpdateAssociationsForExistingAddresses(t *testing.T) {
 	setup.CleanupPgContainer(database.Gorm)
-	assets := []string{"f"}
+	assets := []models.Asset{{Asset: "f"}}
 
 	err := database.AddAssociationsForAddress("A", assets, context.Background())
 	assert.Nil(t, err)
@@ -110,10 +123,10 @@ func Test_UpdateAssociationsForExistingAddresses(t *testing.T) {
 	err = database.AddAssociationsForAddress("B", assets, context.Background())
 	assert.Nil(t, err)
 
-	assetsForA := []string{"aa", "bbb", "cccc"}
-	assetsForB := []string{"bbb", "cccc"}
+	assetsForA := []models.Asset{{Asset: "aa"}, {Asset: "bbb"}, {Asset: "cccc"}}
+	assetsForB := []models.Asset{{Asset: "bbb"}, {Asset: "cccc"}}
 
-	updateMap := make(map[string][]string)
+	updateMap := make(map[string][]models.Asset)
 	updateMap["A"] = assetsForA
 	updateMap["B"] = assetsForB
 
@@ -123,57 +136,63 @@ func Test_UpdateAssociationsForExistingAddresses(t *testing.T) {
 	associationsA, err := database.GetAssociationsByAddresses([]string{"A"}, context.Background())
 	assert.Nil(t, err)
 
-	var assetIDsFromDBA []string
+	var assetIDsFromDBA []models.Asset
 	for _, a := range associationsA {
-		assetIDsFromDBA = append(assetIDsFromDBA, a.Asset.Asset)
+		assetIDsFromDBA = append(assetIDsFromDBA, a.Asset)
 	}
-	assetsA := []string{"aa", "bbb", "cccc", "f"}
+	assetsA := []models.Asset{{Asset: "aa"}, {Asset: "bbb"}, {Asset: "cccc"}, {Asset: "f"}}
 
 	sort.Slice(assetsA, func(i, j int) bool {
-		return len(assetsA[i]) > len(assetsA[j])
+		return len(assetsA[i].Asset) > len(assetsA[j].Asset)
 	})
 
 	sort.Slice(assetIDsFromDBA, func(i, j int) bool {
-		return len(assetIDsFromDBA[i]) > len(assetIDsFromDBA[j])
+		return len(assetIDsFromDBA[i].Asset) > len(assetIDsFromDBA[j].Asset)
 	})
 
-	assert.Equal(t, assetIDsFromDBA, assetsA)
+	for i, a := range assetsA {
+		assert.Equal(t, assetIDsFromDBA[i].Asset, a.Asset)
+	}
 
 	associationsB, err := database.GetAssociationsByAddresses([]string{"B"}, context.Background())
 	assert.Nil(t, err)
 
-	var assetIDsFromDBB []string
+	var assetIDsFromDBB []models.Asset
 	for _, a := range associationsB {
-		assetIDsFromDBB = append(assetIDsFromDBB, a.Asset.Asset)
+		assetIDsFromDBB = append(assetIDsFromDBB, a.Asset)
 	}
-	assetsB := []string{"bbb", "cccc", "f"}
+	assetsB := []models.Asset{{Asset: "bbb"}, {Asset: "cccc"}, {Asset: "f"}}
 
 	sort.Slice(assetsB, func(i, j int) bool {
-		return len(assetsB[i]) > len(assetsB[j])
+		return len(assetsB[i].Asset) > len(assetsB[j].Asset)
 	})
 
 	sort.Slice(assetIDsFromDBB, func(i, j int) bool {
-		return len(assetIDsFromDBB[i]) > len(assetIDsFromDBB[j])
+		return len(assetIDsFromDBB[i].Asset) > len(assetIDsFromDBB[j].Asset)
 	})
 
-	assert.Equal(t, assetIDsFromDBB, assetsB)
+	for i, a := range assetsB {
+		assert.Equal(t, assetIDsFromDBB[i].Asset, a.Asset)
+	}
 
 	associationsAB, err := database.GetAssociationsByAddresses([]string{"A", "B"}, context.Background())
 	assert.Nil(t, err)
 
-	var assetIDsFromDBAB []string
+	var assetIDsFromDBAB []models.Asset
 	for _, a := range associationsAB {
-		assetIDsFromDBAB = append(assetIDsFromDBAB, a.Asset.Asset)
+		assetIDsFromDBAB = append(assetIDsFromDBAB, a.Asset)
 	}
-	assetsAB := []string{"cccc", "cccc", "bbb", "bbb", "aa", "f", "f"}
+	assetsAB := []models.Asset{{Asset: "cccc"}, {Asset: "cccc"}, {Asset: "bbb"}, {Asset: "bbb"}, {Asset: "aa"}, {Asset: "f"}, {Asset: "f"}}
 
 	sort.Slice(assetsAB, func(i, j int) bool {
-		return len(assetsAB[i]) > len(assetsAB[j])
+		return len(assetsAB[i].Asset) > len(assetsAB[j].Asset)
 	})
 
 	sort.Slice(assetIDsFromDBAB, func(i, j int) bool {
-		return len(assetIDsFromDBAB[i]) > len(assetIDsFromDBAB[j])
+		return len(assetIDsFromDBAB[i].Asset) > len(assetIDsFromDBAB[j].Asset)
 	})
 
-	assert.Equal(t, assetIDsFromDBAB, assetsAB)
+	for i, a := range assetsAB {
+		assert.Equal(t, assetIDsFromDBAB[i].Asset, a.Asset)
+	}
 }
diff --git a/tests/integration/db_test/tokenindexer_test.go b/tests/integration/db_test/tokenindexer_test.go
new file mode 100644
index 0000000..fc053b7
--- /dev/null
+++ b/tests/integration/db_test/tokenindexer_test.go
@@ -0,0 +1,133 @@
+// +build integration
+
+package db_test
+
+import (
+	"context"
+	assert "github.com/stretchr/testify/assert"
+	"github.com/trustwallet/blockatlas/db/models"
+	"sort"
+	"testing"
+)
+
+func Test_AddNewAssets(t *testing.T) {
+	type testsStruct struct {
+		Name         string
+		Assets       []models.Asset
+		AssetsIDs    []string
+		WantedErr    error
+		WantedAssets []models.Asset
+	}
+	tests := []testsStruct{
+		{
+			Name: "Normal case",
+			Assets: []models.Asset{
+				{
+					Asset:    "c714_a",
+					Decimals: 18,
+					Name:     "A",
+					Symbol:   "ABC",
+					Type:     "BEP20",
+				},
+				{
+					Asset:    "c714_b",
+					Decimals: 18,
+					Name:     "B",
+					Symbol:   "BCD",
+					Type:     "BEP20",
+				},
+			},
+			AssetsIDs: []string{"c714_a", "c714_b"},
+			WantedErr: nil,
+			WantedAssets: []models.Asset{
+				{
+					Asset:    "c714_a",
+					Decimals: 18,
+					Name:     "A",
+					Symbol:   "ABC",
+					Type:     "BEP20",
+				},
+				{
+					Asset:    "c714_b",
+					Decimals: 18,
+					Name:     "B",
+					Symbol:   "BCD",
+					Type:     "BEP20",
+				},
+			},
+		},
+		{
+			Name: "Case with new tokens and old tokens",
+			Assets: []models.Asset{
+				{
+					Asset:    "c714_c",
+					Decimals: 18,
+					Name:     "C",
+					Symbol:   "FFF",
+					Type:     "ERC20",
+				},
+				{
+					Asset:    "c714_d",
+					Decimals: 18,
+					Name:     "D",
+					Symbol:   "RRR",
+					Type:     "TRC20",
+				},
+			},
+			AssetsIDs: []string{"c714_a", "c714_b", "c714_c", "c714_d"},
+			WantedErr: nil,
+			WantedAssets: []models.Asset{
+				{
+					Asset:    "c714_a",
+					Decimals: 18,
+					Name:     "A",
+					Symbol:   "ABC",
+					Type:     "BEP20",
+				},
+				{
+					Asset:    "c714_b",
+					Decimals: 18,
+					Name:     "B",
+					Symbol:   "BCD",
+					Type:     "BEP20",
+				},
+				{
+					Asset:    "c714_c",
+					Decimals: 18,
+					Name:     "C",
+					Symbol:   "FFF",
+					Type:     "ERC20",
+				},
+				{
+					Asset:    "c714_d",
+					Decimals: 18,
+					Name:     "D",
+					Symbol:   "RRR",
+					Type:     "TRC20",
+				},
+			},
+		},
+	}
+
+	for _, tt := range tests {
+		t.Run(tt.Name, func(t *testing.T) {
+			err := database.AddNewAssets(tt.Assets, context.Background())
+			assert.Equal(t, tt.WantedErr, err)
+			assets, err := database.GetAssetsByIDs(tt.AssetsIDs, context.Background())
+			assert.Nil(t, err)
+			sort.Slice(tt.WantedAssets, func(i, j int) bool {
+				return tt.WantedAssets[i].Asset > tt.WantedAssets[j].Asset
+			})
+			sort.Slice(assets, func(i, j int) bool {
+				return assets[i].Asset > assets[j].Asset
+			})
+			for i, a := range assets {
+				assert.Equal(t, tt.WantedAssets[i].Asset, a.Asset)
+				assert.Equal(t, tt.WantedAssets[i].Name, a.Name)
+				assert.Equal(t, tt.WantedAssets[i].Symbol, a.Symbol)
+				assert.Equal(t, tt.WantedAssets[i].Type, a.Type)
+				assert.Equal(t, tt.WantedAssets[i].Decimals, a.Decimals)
+			}
+		})
+	}
+}