Repository: trustwallet/blockatlas
Pull request #942 (2020-03-01 01:30:07)

MQ observer: prepare for mq migration with multiple struct changes


Patch:
diff --git a/README.md b/README.md
index 1a1eab1..1d77263 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@ BlockAtlas connects to nodes or explorer APIs of the supported coins and maps tr
 account transaction history into a generic, easy to work with JSON format.
 It is in production use at the [Trust Wallet app](https://trustwallet.com/), 
 the official cryptocurrency wallet of Binance. Also is in production at the [BUTTON Wallet](https://buttonwallet.com), Telegram based non-custodial wallet.
-The observer API watches the chain for new transactions and generates notifications by webhooks.
+The observer API watches the chain for new transactions and generates notifications by guids.
 
 #### Supported Coins
 
@@ -51,12 +51,12 @@ The observer API watches the chain for new transactions and generates notificati
 There are multiple services:
 
 1. Platform API - to get transactions, staking, tokens, domain lookup for supported coins in common format
-2. Observer API - to subscribe several addresses on different supported coins and receive webhook
+2. Observer API - to subscribe several addresses on different supported coins and receive message
 3. Swagger API - swagger for all handlers of 1-3 APIs. You need to route requests to them on you own (nginx)
 
 There are workers that are linked with Observer API and Market API:
 
-5. Platform Observer - fetching latest blocks, parse them to common block specification, check subscribed addresses - send webhook. We use Redis to get information about subscribed addresses per coin with webhooks and caching latest block that was processed by observer
+5. Platform Observer - fetching latest blocks, parse them to common block specification, check subscribed addresses - send message to queue. We use Redis to get information about subscribed addresses per coin with webhooks and caching latest block that was processed by observer
 
 Observer API <-> Redis <-> Platform Observer
 
diff --git a/docs/docs.go b/docs/docs.go
index b3caf16..247a273 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -1,6 +1,6 @@
 // GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
 // This file was generated by swaggo/swag at
-// 2020-02-26 03:37:11.056244 +0300 MSK m=+0.121112696
+// 2020-03-01 04:39:26.356879 +0300 MSK m=+1.896562991
 
 package docs
 
@@ -67,124 +67,6 @@ var doc = `{
                 }
             }
         },
-        "/observer/v1/status": {
-            "get": {
-                "description": "Get coin status",
-                "consumes": [
-                    "application/json"
-                ],
-                "produces": [
-                    "application/json"
-                ],
-                "tags": [
-                    "Observer"
-                ],
-                "summary": "Get coin status",
-                "operationId": "coin_status",
-                "parameters": [
-                    {
-                        "type": "string",
-                        "default": "Bearer test",
-                        "description": "Bearer authorization header",
-                        "name": "Authorization",
-                        "in": "header",
-                        "required": true
-                    }
-                ],
-                "responses": {
-                    "200": {
-                        "description": "OK",
-                        "schema": {
-                            "$ref": "#/definitions/blockatlas.CoinStatus"
-                        }
-                    }
-                }
-            }
-        },
-        "/observer/v1/webhook/register": {
-            "post": {
-                "description": "Create a webhook for addresses transactions",
-                "consumes": [
-                    "application/json"
-                ],
-                "produces": [
-                    "application/json"
-                ],
-                "tags": [
-                    "Observer"
-                ],
-                "summary": "Create a webhook",
-                "operationId": "create_webhook",
-                "parameters": [
-                    {
-                        "description": "Accounts subscriptions",
-                        "name": "subscriptions",
-                        "in": "body",
-                        "required": true,
-                        "schema": {
-                            "$ref": "#/definitions/blockatlas.GUID"
-                        }
-                    },
-                    {
-                        "type": "string",
-                        "default": "Bearer test",
-                        "description": "Bearer authorization header",
-                        "name": "Authorization",
-                        "in": "header",
-                        "required": true
-                    }
-                ],
-                "responses": {
-                    "200": {
-                        "description": "OK",
-                        "schema": {
-                            "$ref": "#/definitions/blockatlas.Observer"
-                        }
-                    }
-                }
-            },
-            "delete": {
-                "description": "Delete a webhook for addresses transactions",
-                "consumes": [
-                    "application/json"
-                ],
-                "produces": [
-                    "application/json"
-                ],
-                "tags": [
-                    "Observer"
-                ],
-                "summary": "Delete a webhook",
-                "operationId": "delete_webhook",
-                "parameters": [
-                    {
-                        "description": "Accounts subscriptions",
-                        "name": "subscriptions",
-                        "in": "body",
-                        "required": true,
-                        "schema": {
-                            "$ref": "#/definitions/blockatlas.GUID"
-                        }
-                    },
-                    {
-                        "type": "string",
-                        "default": "Bearer test",
-                        "description": "Bearer authorization header",
-                        "name": "Authorization",
-                        "in": "header",
-                        "required": true
-                    }
-                ],
-                "responses": {
-                    "200": {
-                        "description": "OK",
-                        "schema": {
-                            "$ref": "#/definitions/blockatlas.Observer"
-                        }
-                    }
-                }
-            }
-        },
         "/v1/market/charts": {
             "get": {
                 "description": "Get the charts data from an market and coin/token",
@@ -240,7 +122,7 @@ var doc = `{
                     "200": {
                         "description": "OK",
                         "schema": {
-                            "$ref": "#/definitions/blockatlas.ChartData"
+                            "$ref": "#/definitions/watchmarket.ChartData"
                         }
                     }
                 }
@@ -294,7 +176,7 @@ var doc = `{
                     "200": {
                         "description": "OK",
                         "schema": {
-                            "$ref": "#/definitions/blockatlas.ChartCoinInfo"
+                            "$ref": "#/definitions/watchmarket.ChartCoinInfo"
                         }
                     }
                 }
@@ -329,7 +211,7 @@ var doc = `{
                     "200": {
                         "description": "OK",
                         "schema": {
-                            "$ref": "#/definitions/blockatlas.Tickers"
+                            "$ref": "#/definitions/api.Tickers"
                         }
                     }
                 }
@@ -1123,113 +1005,68 @@ var doc = `{
                 }
             }
         },
-        "api.TickerRequest": {
+        "api.Ticker": {
             "type": "object",
             "properties": {
-                "assets": {
-                    "type": "array",
-                    "items": {
-                        "$ref": "#/definitions/api.Coin"
-                    }
+                "coin": {
+                    "type": "integer"
                 },
-                "currency": {
+                "coin_name": {
                     "type": "string"
-                }
-            }
-        },
-        "blockatlas.ChartCoinInfo": {
-            "type": "object",
-            "properties": {
-                "circulating_supply": {
-                    "type": "number"
                 },
-                "info": {
-                    "type": "object",
-                    "$ref": "#/definitions/blockatlas.CoinInfo"
+                "error": {
+                    "type": "string"
                 },
-                "market_cap": {
-                    "type": "number"
+                "last_update": {
+                    "type": "string"
                 },
-                "total_supply": {
-                    "type": "number"
+                "price": {
+                    "type": "object",
+                    "$ref": "#/definitions/api.TickerPrice"
                 },
-                "volume_24": {
-                    "type": "number"
-                }
-            }
-        },
-        "blockatlas.ChartData": {
-            "type": "object",
-            "properties": {
-                "error": {
+                "token_id": {
                     "type": "string"
                 },
-                "prices": {
-                    "type": "array",
-                    "items": {
-                        "$ref": "#/definitions/blockatlas.ChartPrice"
-                    }
+                "type": {
+                    "type": "string"
                 }
             }
         },
-        "blockatlas.ChartPrice": {
+        "api.TickerPrice": {
             "type": "object",
             "properties": {
-                "date": {
-                    "type": "integer"
+                "change_24h": {
+                    "type": "number"
                 },
-                "price": {
+                "currency": {
+                    "type": "string"
+                },
+                "provider": {
+                    "type": "string"
+                },
+                "value": {
                     "type": "number"
                 }
             }
         },
-        "blockatlas.CoinInfo": {
+        "api.TickerRequest": {
             "type": "object",
             "properties": {
-                "data_source": {
-                    "type": "string"
-                },
-                "description": {
-                    "type": "string"
-                },
-                "explorers": {
-                    "type": "array",
-                    "items": {
-                        "$ref": "#/definitions/blockatlas.Link"
-                    }
-                },
-                "name": {
-                    "type": "string"
-                },
-                "short_description": {
-                    "type": "string"
-                },
-                "socials": {
+                "assets": {
                     "type": "array",
                     "items": {
-                        "$ref": "#/definitions/blockatlas.SocialLink"
+                        "$ref": "#/definitions/api.Coin"
                     }
                 },
-                "source_code": {
-                    "type": "string"
-                },
-                "website": {
-                    "type": "string"
-                },
-                "white_paper": {
+                "currency": {
                     "type": "string"
                 }
             }
         },
-        "blockatlas.CoinStatus": {
-            "type": "object",
-            "properties": {
-                "error": {
-                    "type": "string"
-                },
-                "height": {
-                    "type": "integer"
-                }
+        "api.Tickers": {
+            "type": "array",
+            "items": {
+                "$ref": "#/definitions/api.Ticker"
             }
         },
         "blockatlas.Collection": {
@@ -1344,28 +1181,6 @@ var doc = `{
                 }
             }
         },
-        "blockatlas.Link": {
-            "type": "object",
-            "properties": {
-                "name": {
-                    "type": "string"
-                },
-                "url": {
-                    "type": "string"
-                }
-            }
-        },
-        "blockatlas.Observer": {
-            "type": "object",
-            "properties": {
-                "message": {
-                    "type": "string"
-                },
-                "status": {
-                    "type": "boolean"
-                }
-            }
-        },
         "blockatlas.Resolved": {
             "type": "object",
             "properties": {
@@ -1377,20 +1192,6 @@ var doc = `{
                 }
             }
         },
-        "blockatlas.SocialLink": {
-            "type": "object",
-            "properties": {
-                "handle": {
-                    "type": "string"
-                },
-                "name": {
-                    "type": "string"
-                },
-                "url": {
-                    "type": "string"
-                }
-            }
-        },
         "blockatlas.StakeValidator": {
             "type": "object",
             "properties": {
@@ -1453,65 +1254,6 @@ var doc = `{
                 }
             }
         },
-        "blockatlas.Subscriptions": {
-            "type": "object",
-            "additionalProperties": {
-                "type": "array",
-                "items": {
-                    "type": "string"
-                }
-            }
-        },
-        "blockatlas.Ticker": {
-            "type": "object",
-            "properties": {
-                "coin": {
-                    "type": "integer"
-                },
-                "coin_name": {
-                    "type": "string"
-                },
-                "error": {
-                    "type": "string"
-                },
-                "last_update": {
-                    "type": "string"
-                },
-                "price": {
-                    "type": "object",
-                    "$ref": "#/definitions/blockatlas.TickerPrice"
-                },
-                "token_id": {
-                    "type": "string"
-                },
-                "type": {
-                    "type": "string"
-                }
-            }
-        },
-        "blockatlas.TickerPrice": {
-            "type": "object",
-            "properties": {
-                "change_24h": {
-                    "type": "number"
-                },
-                "currency": {
-                    "type": "string"
-                },
-                "provider": {
-                    "type": "string"
-                },
-                "value": {
-                    "type": "number"
-                }
-            }
-        },
-        "blockatlas.Tickers": {
-            "type": "array",
-            "items": {
-                "$ref": "#/definitions/blockatlas.Ticker"
-            }
-        },
         "blockatlas.Tx": {
             "type": "object",
             "properties": {
@@ -1603,18 +1345,6 @@ var doc = `{
                 "$ref": "#/definitions/blockatlas.Tx"
             }
         },
-        "blockatlas.GUID": {
-            "type": "object",
-            "properties": {
-                "subscriptions": {
-                    "type": "object",
-                    "$ref": "#/definitions/blockatlas.Subscriptions"
-                },
-                "webhook": {
-                    "type": "string"
-                }
-            }
-        },
         "coin.ExternalCoin": {
             "type": "object",
             "properties": {
@@ -1642,6 +1372,40 @@ var doc = `{
                     "type": "string"
                 }
             }
+        },
+        "watchmarket.ChartCoinInfo": {
+            "type": "object",
+            "properties": {
+                "circulating_supply": {
+                    "type": "number"
+                },
+                "info": {
+                    "type": "CoinInfo"
+                },
+                "market_cap": {
+                    "type": "number"
+                },
+                "total_supply": {
+                    "type": "number"
+                },
+                "volume_24": {
+                    "type": "number"
+                }
+            }
+        },
+        "watchmarket.ChartData": {
+            "type": "object",
+            "properties": {
+                "error": {
+                    "type": "string"
+                },
+                "prices": {
+                    "type": "array",
+                    "items": {
+                        "type": "ChartPrice"
+                    }
+                }
+            }
         }
     }
 }`
diff --git a/docs/swagger.json b/docs/swagger.json
index e348326..dc8104c 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -46,124 +46,6 @@
                 }
             }
         },
-        "/observer/v1/status": {
-            "get": {
-                "description": "Get coin status",
-                "consumes": [
-                    "application/json"
-                ],
-                "produces": [
-                    "application/json"
-                ],
-                "tags": [
-                    "Observer"
-                ],
-                "summary": "Get coin status",
-                "operationId": "coin_status",
-                "parameters": [
-                    {
-                        "type": "string",
-                        "default": "Bearer test",
-                        "description": "Bearer authorization header",
-                        "name": "Authorization",
-                        "in": "header",
-                        "required": true
-                    }
-                ],
-                "responses": {
-                    "200": {
-                        "description": "OK",
-                        "schema": {
-                            "$ref": "#/definitions/blockatlas.CoinStatus"
-                        }
-                    }
-                }
-            }
-        },
-        "/observer/v1/webhook/register": {
-            "post": {
-                "description": "Create a webhook for addresses transactions",
-                "consumes": [
-                    "application/json"
-                ],
-                "produces": [
-                    "application/json"
-                ],
-                "tags": [
-                    "Observer"
-                ],
-                "summary": "Create a webhook",
-                "operationId": "create_webhook",
-                "parameters": [
-                    {
-                        "description": "Accounts subscriptions",
-                        "name": "subscriptions",
-                        "in": "body",
-                        "required": true,
-                        "schema": {
-                            "$ref": "#/definitions/blockatlas.Webhook"
-                        }
-                    },
-                    {
-                        "type": "string",
-                        "default": "Bearer test",
-                        "description": "Bearer authorization header",
-                        "name": "Authorization",
-                        "in": "header",
-                        "required": true
-                    }
-                ],
-                "responses": {
-                    "200": {
-                        "description": "OK",
-                        "schema": {
-                            "$ref": "#/definitions/blockatlas.Observer"
-                        }
-                    }
-                }
-            },
-            "delete": {
-                "description": "Delete a webhook for addresses transactions",
-                "consumes": [
-                    "application/json"
-                ],
-                "produces": [
-                    "application/json"
-                ],
-                "tags": [
-                    "Observer"
-                ],
-                "summary": "Delete a webhook",
-                "operationId": "delete_webhook",
-                "parameters": [
-                    {
-                        "description": "Accounts subscriptions",
-                        "name": "subscriptions",
-                        "in": "body",
-                        "required": true,
-                        "schema": {
-                            "$ref": "#/definitions/blockatlas.Webhook"
-                        }
-                    },
-                    {
-                        "type": "string",
-                        "default": "Bearer test",
-                        "description": "Bearer authorization header",
-                        "name": "Authorization",
-                        "in": "header",
-                        "required": true
-                    }
-                ],
-                "responses": {
-                    "200": {
-                        "description": "OK",
-                        "schema": {
-                            "$ref": "#/definitions/blockatlas.Observer"
-                        }
-                    }
-                }
-            }
-        },
         "/v1/market/charts": {
             "get": {
                 "description": "Get the charts data from an market and coin/token",
@@ -219,7 +101,7 @@
                     "200": {
                         "description": "OK",
                         "schema": {
-                            "$ref": "#/definitions/blockatlas.ChartData"
+                            "$ref": "#/definitions/watchmarket.ChartData"
                         }
                     }
                 }
@@ -273,7 +155,7 @@
                     "200": {
                         "description": "OK",
                         "schema": {
-                            "$ref": "#/definitions/blockatlas.ChartCoinInfo"
+                            "$ref": "#/definitions/watchmarket.ChartCoinInfo"
                         }
                     }
                 }
@@ -308,7 +190,7 @@
                     "200": {
                         "description": "OK",
                         "schema": {
-                            "$ref": "#/definitions/blockatlas.Tickers"
+                            "$ref": "#/definitions/api.Tickers"
                         }
                     }
                 }
@@ -1102,113 +984,68 @@
                 }
             }
         },
-        "api.TickerRequest": {
+        "api.Ticker": {
             "type": "object",
             "properties": {
-                "assets": {
-                    "type": "array",
-                    "items": {
-                        "$ref": "#/definitions/api.Coin"
-                    }
+                "coin": {
+                    "type": "integer"
                 },
-                "currency": {
+                "coin_name": {
                     "type": "string"
-                }
-            }
-        },
-        "blockatlas.ChartCoinInfo": {
-            "type": "object",
-            "properties": {
-                "circulating_supply": {
-                    "type": "number"
                 },
-                "info": {
-                    "type": "object",
-                    "$ref": "#/definitions/blockatlas.CoinInfo"
+                "error": {
+                    "type": "string"
                 },
-                "market_cap": {
-                    "type": "number"
+                "last_update": {
+                    "type": "string"
                 },
-                "total_supply": {
-                    "type": "number"
+                "price": {
+                    "type": "object",
+                    "$ref": "#/definitions/api.TickerPrice"
                 },
-                "volume_24": {
-                    "type": "number"
-                }
-            }
-        },
-        "blockatlas.ChartData": {
-            "type": "object",
-            "properties": {
-                "error": {
+                "token_id": {
                     "type": "string"
                 },
-                "prices": {
-                    "type": "array",
-                    "items": {
-                        "$ref": "#/definitions/blockatlas.ChartPrice"
-                    }
+                "type": {
+                    "type": "string"
                 }
             }
         },
-        "blockatlas.ChartPrice": {
+        "api.TickerPrice": {
             "type": "object",
             "properties": {
-                "date": {
-                    "type": "integer"
+                "change_24h": {
+                    "type": "number"
                 },
-                "price": {
+                "currency": {
+                    "type": "string"
+                },
+                "provider": {
+                    "type": "string"
+                },
+                "value": {
                     "type": "number"
                 }
             }
         },
-        "blockatlas.CoinInfo": {
+        "api.TickerRequest": {
             "type": "object",
             "properties": {
-                "data_source": {
-                    "type": "string"
-                },
-                "description": {
-                    "type": "string"
-                },
-                "explorers": {
-                    "type": "array",
-                    "items": {
-                        "$ref": "#/definitions/blockatlas.Link"
-                    }
-                },
-                "name": {
-                    "type": "string"
-                },
-                "short_description": {
-                    "type": "string"
-                },
-                "socials": {
+                "assets": {
                     "type": "array",
                     "items": {
-                        "$ref": "#/definitions/blockatlas.SocialLink"
+                        "$ref": "#/definitions/api.Coin"
                     }
                 },
-                "source_code": {
-                    "type": "string"
-                },
-                "website": {
-                    "type": "string"
-                },
-                "white_paper": {
+                "currency": {
                     "type": "string"
                 }
             }
         },
-        "blockatlas.CoinStatus": {
-            "type": "object",
-            "properties": {
-                "error": {
-                    "type": "string"
-                },
-                "height": {
-                    "type": "integer"
-                }
+        "api.Tickers": {
+            "type": "array",
+            "items": {
+                "$ref": "#/definitions/api.Ticker"
             }
         },
         "blockatlas.Collection": {
@@ -1323,28 +1160,6 @@
                 }
             }
         },
-        "blockatlas.Link": {
-            "type": "object",
-            "properties": {
-                "name": {
-                    "type": "string"
-                },
-                "url": {
-                    "type": "string"
-                }
-            }
-        },
-        "blockatlas.Observer": {
-            "type": "object",
-            "properties": {
-                "message": {
-                    "type": "string"
-                },
-                "status": {
-                    "type": "boolean"
-                }
-            }
-        },
         "blockatlas.Resolved": {
             "type": "object",
             "properties": {
@@ -1356,20 +1171,6 @@
                 }
             }
         },
-        "blockatlas.SocialLink": {
-            "type": "object",
-            "properties": {
-                "handle": {
-                    "type": "string"
-                },
-                "name": {
-                    "type": "string"
-                },
-                "url": {
-                    "type": "string"
-                }
-            }
-        },
         "blockatlas.StakeValidator": {
             "type": "object",
             "properties": {
@@ -1432,65 +1233,6 @@
                 }
             }
         },
-        "blockatlas.Subscriptions": {
-            "type": "object",
-            "additionalProperties": {
-                "type": "array",
-                "items": {
-                    "type": "string"
-                }
-            }
-        },
-        "blockatlas.Ticker": {
-            "type": "object",
-            "properties": {
-                "coin": {
-                    "type": "integer"
-                },
-                "coin_name": {
-                    "type": "string"
-                },
-                "error": {
-                    "type": "string"
-                },
-                "last_update": {
-                    "type": "string"
-                },
-                "price": {
-                    "type": "object",
-                    "$ref": "#/definitions/blockatlas.TickerPrice"
-                },
-                "token_id": {
-                    "type": "string"
-                },
-                "type": {
-                    "type": "string"
-                }
-            }
-        },
-        "blockatlas.TickerPrice": {
-            "type": "object",
-            "properties": {
-                "change_24h": {
-                    "type": "number"
-                },
-                "currency": {
-                    "type": "string"
-                },
-                "provider": {
-                    "type": "string"
-                },
-                "value": {
-                    "type": "number"
-                }
-            }
-        },
-        "blockatlas.Tickers": {
-            "type": "array",
-            "items": {
-                "$ref": "#/definitions/blockatlas.Ticker"
-            }
-        },
         "blockatlas.Tx": {
             "type": "object",
             "properties": {
@@ -1582,18 +1324,6 @@
                 "$ref": "#/definitions/blockatlas.Tx"
             }
         },
-        "blockatlas.Webhook": {
-            "type": "object",
-            "properties": {
-                "subscriptions": {
-                    "type": "object",
-                    "$ref": "#/definitions/blockatlas.Subscriptions"
-                },
-                "webhook": {
-                    "type": "string"
-                }
-            }
-        },
         "coin.ExternalCoin": {
             "type": "object",
             "properties": {
@@ -1621,6 +1351,40 @@
                     "type": "string"
                 }
             }
+        },
+        "watchmarket.ChartCoinInfo": {
+            "type": "object",
+            "properties": {
+                "circulating_supply": {
+                    "type": "number"
+                },
+                "info": {
+                    "type": "CoinInfo"
+                },
+                "market_cap": {
+                    "type": "number"
+                },
+                "total_supply": {
+                    "type": "number"
+                },
+                "volume_24": {
+                    "type": "number"
+                }
+            }
+        },
+        "watchmarket.ChartData": {
+            "type": "object",
+            "properties": {
+                "error": {
+                    "type": "string"
+                },
+                "prices": {
+                    "type": "array",
+                    "items": {
+                        "type": "ChartPrice"
+                    }
+                }
+            }
         }
     }
 }
\ No newline at end of file
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 428a6fa..4ddb42c 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -19,77 +19,48 @@ definitions:
       type:
         type: string
     type: object
-  api.TickerRequest:
-    properties:
-      assets:
-        items:
-          $ref: '#/definitions/api.Coin'
-        type: array
-      currency:
-        type: string
-    type: object
-  blockatlas.ChartCoinInfo:
+  api.Ticker:
     properties:
-      circulating_supply:
-        type: number
-      info:
-        $ref: '#/definitions/blockatlas.CoinInfo'
-        type: object
-      market_cap:
-        type: number
-      total_supply:
-        type: number
-      volume_24:
-        type: number
-    type: object
-  blockatlas.ChartData:
-    properties:
-      error:
-        type: string
-      prices:
-        items:
-          $ref: '#/definitions/blockatlas.ChartPrice'
-        type: array
-    type: object
-  blockatlas.ChartPrice:
-    properties:
-      date:
+      coin:
         type: integer
-      price:
-        type: number
-    type: object
-  blockatlas.CoinInfo:
-    properties:
-      data_source:
+      coin_name:
         type: string
-      description:
+      error:
         type: string
-      explorers:
-        items:
-          $ref: '#/definitions/blockatlas.Link'
-        type: array
-      name:
+      last_update:
         type: string
-      short_description:
+      price:
+        $ref: '#/definitions/api.TickerPrice'
+        type: object
+      token_id:
         type: string
-      socials:
-        items:
-          $ref: '#/definitions/blockatlas.SocialLink'
-        type: array
-      source_code:
+      type:
         type: string
-      website:
+    type: object
+  api.TickerPrice:
+    properties:
+      change_24h:
+        type: number
+      currency:
         type: string
-      white_paper:
+      provider:
         type: string
+      value:
+        type: number
     type: object
-  blockatlas.CoinStatus:
+  api.TickerRequest:
     properties:
-      error:
+      assets:
+        items:
+          $ref: '#/definitions/api.Coin'
+        type: array
+      currency:
         type: string
-      height:
-        type: integer
     type: object
+  api.Tickers:
+    items:
+      $ref: '#/definitions/api.Ticker'
+    type: array
   blockatlas.Collection:
     properties:
       address:
@@ -165,20 +136,6 @@ definitions:
       docs:
         type: object
     type: object
-  blockatlas.Link:
-    properties:
-      name:
-        type: string
-      url:
-        type: string
-    type: object
-  blockatlas.Observer:
-    properties:
-      message:
-        type: string
-      status:
-        type: boolean
-    type: object
   blockatlas.Resolved:
     properties:
       coin:
@@ -186,15 +143,6 @@ definitions:
       result:
         type: string
     type: object
-  blockatlas.SocialLink:
-    properties:
-      handle:
-        type: string
-      name:
-        type: string
-      url:
-        type: string
-    type: object
   blockatlas.StakeValidator:
     properties:
       details:
@@ -236,45 +184,6 @@ definitions:
       annual:
         type: number
     type: object
-  blockatlas.Subscriptions:
-    additionalProperties:
-      items:
-        type: string
-      type: array
-    type: object
-  blockatlas.Ticker:
-    properties:
-      coin:
-        type: integer
-      coin_name:
-        type: string
-      error:
-        type: string
-      last_update:
-        type: string
-      price:
-        $ref: '#/definitions/blockatlas.TickerPrice'
-        type: object
-      token_id:
-        type: string
-      type:
-        type: string
-    type: object
-  blockatlas.TickerPrice:
-    properties:
-      change_24h:
-        type: number
-      currency:
-        type: string
-      provider:
-        type: string
-      value:
-        type: number
-    type: object
-  blockatlas.Tickers:
-    items:
-      $ref: '#/definitions/blockatlas.Ticker'
-    type: array
   blockatlas.Tx:
     properties:
       block:
@@ -342,14 +251,6 @@ definitions:
     items:
       $ref: '#/definitions/blockatlas.Tx'
     type: array
-  blockatlas.Webhook:
-    properties:
-      subscriptions:
-        $ref: '#/definitions/blockatlas.Subscriptions'
-        type: object
-      webhook:
-        type: string
-    type: object
   coin.ExternalCoin:
     properties:
       coin:
@@ -368,6 +269,28 @@ definitions:
       status_message:
         type: string
     type: object
+  watchmarket.ChartCoinInfo:
+    properties:
+      circulating_supply:
+        type: number
+      info:
+        type: CoinInfo
+      market_cap:
+        type: number
+      total_supply:
+        type: number
+      volume_24:
+        type: number
+    type: object
+  watchmarket.ChartData:
+    properties:
+      error:
+        type: string
+      prices:
+        items:
+          type: ChartPrice
+        type: array
+    type: object
 info:
   contact: {}
   license: {}
@@ -399,86 +322,6 @@ paths:
       summary: Lookup .eth / .zil addresses
       tags:
       - Naming
-  /observer/v1/status:
-    get:
-      consumes:
-      - application/json
-      description: Get coin status
-      operationId: coin_status
-      parameters:
-      - default: Bearer test
-        description: Bearer authorization header
-        in: header
-        name: Authorization
-        required: true
-        type: string
-      produces:
-      - application/json
-      responses:
-        "200":
-          description: OK
-          schema:
-            $ref: '#/definitions/blockatlas.CoinStatus'
-      summary: Get coin status
-      tags:
-      - Observer
-  /observer/v1/webhook/register:
-    delete:
-      consumes:
-      - application/json
-      description: Delete a webhook for addresses transactions
-      operationId: delete_webhook
-      parameters:
-      - description: Accounts subscriptions
-        in: body
-        name: subscriptions
-        required: true
-        schema:
-          $ref: '#/definitions/blockatlas.Webhook'
-      - default: Bearer test
-        description: Bearer authorization header
-        in: header
-        name: Authorization
-        required: true
-        type: string
-      produces:
-      - application/json
-      responses:
-        "200":
-          description: OK
-          schema:
-            $ref: '#/definitions/blockatlas.Observer'
-      summary: Delete a webhook
-      tags:
-      - Observer
-    post:
-      consumes:
-      - application/json
-      description: Create a webhook for addresses transactions
-      operationId: create_webhook
-      parameters:
-      - description: Accounts subscriptions
-        in: body
-        name: subscriptions
-        required: true
-        schema:
-          $ref: '#/definitions/blockatlas.Webhook'
-      - default: Bearer test
-        description: Bearer authorization header
-        in: header
-        name: Authorization
-        required: true
-        type: string
-      produces:
-      - application/json
-      responses:
-        "200":
-          description: OK
-          schema:
-            $ref: '#/definitions/blockatlas.Observer'
-      summary: Create a webhook
-      tags:
-      - Observer
   /v1/{coin}/{address}:
     get:
       consumes:
@@ -575,7 +418,7 @@ paths:
         "200":
           description: OK
           schema:
-            $ref: '#/definitions/blockatlas.ChartData'
+            $ref: '#/definitions/watchmarket.ChartData'
       summary: Get charts data for a specific coin
       tags:
       - Market
@@ -612,7 +455,7 @@ paths:
         "200":
           description: OK
           schema:
-            $ref: '#/definitions/blockatlas.ChartCoinInfo'
+            $ref: '#/definitions/watchmarket.ChartCoinInfo'
       summary: Get charts coin info data for a specific coin
       tags:
       - Market
@@ -635,7 +478,7 @@ paths:
         "200":
           description: OK
           schema:
-            $ref: '#/definitions/blockatlas.Tickers'
+            $ref: '#/definitions/api.Tickers'
       summary: Get ticker values for a specific market
       tags:
       - Market
diff --git a/observer/dispatcher.go b/observer/dispatcher.go
index e68c40a..1e11e67 100644
--- a/observer/dispatcher.go
+++ b/observer/dispatcher.go
@@ -14,9 +14,9 @@ type Dispatcher struct {
 }
 
 type DispatchEvent struct {
-	Action  blockatlas.TransactionType `json:"action"`
-	Result  *blockatlas.Tx             `json:"result"`
-	Webhook string                     `json:"webhook"`
+	Action blockatlas.TransactionType `json:"action"`
+	Result *blockatlas.Tx             `json:"result"`
+	GUID   string                     `json:"guid"`
 }
 
 func (d *Dispatcher) Run(events <-chan Event) {
@@ -26,12 +26,12 @@ func (d *Dispatcher) Run(events <-chan Event) {
 }
 
 func (d *Dispatcher) dispatch(event Event) {
-	webhook := event.Subscription.Webhook
+	guid := event.Subscription.GUID
 
 	action := DispatchEvent{
-		Action:  event.Tx.Type,
-		Result:  event.Tx,
-		Webhook: webhook,
+		Action: event.Tx.Type,
+		Result: event.Tx,
+		GUID:   guid,
 	}
 
 	txJson, err := json.Marshal(action)
@@ -40,12 +40,12 @@ func (d *Dispatcher) dispatch(event Event) {
 	}
 
 	logParams := logger.Params{
-		"webhook": webhook,
-		"coin":    event.Subscription.Coin,
-		"txID":    event.Tx.ID,
+		"guid": guid,
+		"coin": event.Subscription.Coin,
+		"txID": event.Tx.ID,
 	}
 
-	go d.postMessageToQueue(webhook, txJson, logParams)
+	go d.postMessageToQueue(guid, txJson, logParams)
 
 	logger.Info("Dispatching messages...", logParams)
 }
diff --git a/pkg/blockatlas/block.go b/pkg/blockatlas/block.go
index e11e8e2..14e54f0 100644
--- a/pkg/blockatlas/block.go
+++ b/pkg/blockatlas/block.go
@@ -9,5 +9,5 @@ type Block struct {
 type Subscription struct {
 	Coin    uint   `json:"coin"`
 	Address string `json:"address"`
-	Webhook string `json:"webhook"`
+	GUID    string `json:"guid"`
 }
diff --git a/pkg/blockatlas/observer.go b/pkg/blockatlas/observer.go
index abb1f1f..dc5909c 100644
--- a/pkg/blockatlas/observer.go
+++ b/pkg/blockatlas/observer.go
@@ -33,7 +33,7 @@ func (e *SubscriptionEvent) ParseSubscriptions() []Subscription {
 			subs = append(subs, Subscription{
 				Coin:    uint(coin),
 				Address: addr,
-				Webhook: e.GUID,
+				GUID:    e.GUID,
 			})
 		}
 	}
diff --git a/platform/cosmos/model.go b/platform/cosmos/model.go
index 9280c75..c9b1e6e 100644
--- a/platform/cosmos/model.go
+++ b/platform/cosmos/model.go
@@ -48,8 +48,8 @@ type Tx struct {
 }
 
 type TxPage struct {
-	PageTotal  string `json:"page_total"`
-	Txs        []Tx   `json:"txs"`
+	PageTotal string `json:"page_total"`
+	Txs       []Tx   `json:"txs"`
 }
 
 // Events
diff --git a/platform/cosmos/transaction.go b/platform/cosmos/transaction.go
index 3fac2e2..3051e7c 100644
--- a/platform/cosmos/transaction.go
+++ b/platform/cosmos/transaction.go
@@ -17,7 +17,7 @@ func (p *Platform) GetTxsByAddress(address string) (blockatlas.TxPage, error) {
 	for _, t := range tagsList {
 		go func(tag, addr string, wg *sync.WaitGroup) {
 			defer wg.Done()
-			page :=  1
+			page := 1
 			txs, err := p.client.GetAddrTxs(addr, tag, page)
 			if err != nil {
 				logger.Error("GetAddrTxs", err, logger.Params{"address": tag, "tag": tag})
diff --git a/services/subscription/subscribtion.go b/services/subscription/subscribtion.go
index 6f79d6c..37ac3b3 100644
--- a/services/subscription/subscribtion.go
+++ b/services/subscription/subscribtion.go
@@ -19,18 +19,20 @@ func Consume(delivery amqp.Delivery, storage storage.Addresses) {
 	if err != nil {
 		logger.Fatal(err)
 	}
-	subscription := event.ParseSubscriptions()
+	subscriptions := event.ParseSubscriptions()
 
 	switch event.Operation {
 	case addSubscription:
-		err := storage.AddSubscriptions(subscription)
+		err := storage.AddSubscriptions(subscriptions)
 		if err != nil {
 			logger.Fatal(err, logger.Params{"operation": event.Operation, "guid": event.GUID})
 		}
+		logger.Info("Success", logger.Params{"operation": event.Operation, "guid": event.GUID, "subscriptions_len": len(subscriptions)})
 	case deleteSubscription:
 		err := storage.DeleteSubscriptions(nil)
 		if err != nil {
-			logger.Fatal(logger.Params{"operation": event.Operation, "guid": event.GUID})
+			logger.Fatal(err, logger.Params{"operation": event.Operation, "guid": event.GUID})
 		}
+		logger.Info("Success", logger.Params{"operation": event.Operation, "guid": event.GUID, "subscriptions_len": len(subscriptions)})
 	}
 }
diff --git a/storage/addresses.go b/storage/addresses.go
index cc7e54f..c4b6238 100644
--- a/storage/addresses.go
+++ b/storage/addresses.go
@@ -17,13 +17,13 @@ func (s *Storage) Lookup(coin uint, addresses []string) ([]blockatlas.Subscripti
 	observers := make([]blockatlas.Subscription, 0)
 	for _, address := range addresses {
 		key := getSubscriptionKey(coin, address)
-		var webhooks []string
-		err := s.GetHMValue(ATLAS_OBSERVER, key, &webhooks)
+		var guids []string
+		err := s.GetHMValue(ATLAS_OBSERVER, key, &guids)
 		if err != nil {
 			continue
 		}
-		for _, webhook := range webhooks {
-			observers = append(observers, blockatlas.Subscription{Coin: coin, Address: address, Webhook: webhook})
+		for _, guid := range guids {
+			observers = append(observers, blockatlas.Subscription{Coin: coin, Address: address, GUID: guid})
 		}
 	}
 	return observers, nil
@@ -32,16 +32,16 @@ func (s *Storage) Lookup(coin uint, addresses []string) ([]blockatlas.Subscripti
 func (s *Storage) AddSubscriptions(subscriptions []blockatlas.Subscription) error {
 	for _, sub := range subscriptions {
 		key := getSubscriptionKey(sub.Coin, sub.Address)
-		var webhooks []string
-		s.GetHMValue(ATLAS_OBSERVER, key, &webhooks)
-		if webhooks == nil {
-			webhooks = make([]string, 0)
+		var guids []string
+		s.GetHMValue(ATLAS_OBSERVER, key, &guids)
+		if guids == nil {
+			guids = make([]string, 0)
 		}
-		if hasObject(webhooks, sub.Webhook) {
+		if hasObject(guids, sub.GUID) {
 			continue
 		}
-		webhooks = append(webhooks, sub.Webhook)
-		err := s.AddHM(ATLAS_OBSERVER, key, webhooks)
+		guids = append(guids, sub.GUID)
+		err := s.AddHM(ATLAS_OBSERVER, key, guids)
 		if err != nil {
 			return err
 		}
@@ -52,17 +52,17 @@ func (s *Storage) AddSubscriptions(subscriptions []blockatlas.Subscription) erro
 func (s *Storage) DeleteSubscriptions(subscriptions []blockatlas.Subscription) error {
 	for _, sub := range subscriptions {
 		key := getSubscriptionKey(sub.Coin, sub.Address)
-		var webhooks []string
-		err := s.GetHMValue(ATLAS_OBSERVER, key, &webhooks)
+		var guids []string
+		err := s.GetHMValue(ATLAS_OBSERVER, key, &guids)
 		if err != nil {
 			continue
 		}
 		newHooks := make([]string, 0)
-		for _, webhook := range webhooks {
-			if webhook == sub.Webhook {
+		for _, guid := range guids {
+			if guid == sub.GUID {
 				continue
 			}
-			newHooks = append(newHooks, webhook)
+			newHooks = append(newHooks, guid)
 		}
 		if len(newHooks) == 0 {
 			_ = s.DeleteHM(ATLAS_OBSERVER, key)


Test patch:
diff --git a/pkg/blockatlas/observer_test.go b/pkg/blockatlas/observer_test.go
index 7d488c1..bd56ef6 100644
--- a/pkg/blockatlas/observer_test.go
+++ b/pkg/blockatlas/observer_test.go
@@ -13,7 +13,7 @@ func Test_parseSubscriptions(t *testing.T) {
 		wantSubs      []Subscription
 	}{
 		{
-			name: "webhook with 1 coin",
+			name: "guid with 1 coin",
 			subscriptions: SubscriptionEvent{
 				GUID: "http://127.0.0.1:8080",
 				Subscriptions: Subscriptions{
@@ -22,17 +22,17 @@ func Test_parseSubscriptions(t *testing.T) {
 			},
 			wantSubs: []Subscription{
 				{
-					Coin: 0, Webhook: "http://127.0.0.1:8080",
+					Coin: 0, GUID: "http://127.0.0.1:8080",
 					Address: "xpub6BpYi6J1GZzfY3yY7DbhLLccF3efQa18nQngM3jaehgtNSoEgk6UtPULpC3oK5oA3trczY8Ld34LFw1USMPfGHwTEizdD5QyGcMyuh2UoBA",
 				},
 				{
-					Coin: 0, Webhook: "http://127.0.0.1:8080",
+					Coin: 0, GUID: "http://127.0.0.1:8080",
 					Address: "xpub6CYwPfnPJLPquufPkb98coSb3mdy1CgaZrWUtYWGJTJ4VWZUbzH9HLGy7nHpP7DG4UdTkYYpirkTWQSP7pWHsrk24Nos5oYNHpfr4BgPVTL",
 				},
 			},
 		},
 		{
-			name: "webhook with 2 coins",
+			name: "guid with 2 coins",
 			subscriptions: SubscriptionEvent{
 				GUID: "http://127.0.0.1:8080",
 				Subscriptions: Subscriptions{
@@ -42,15 +42,15 @@ func Test_parseSubscriptions(t *testing.T) {
 			},
 			wantSubs: []Subscription{
 				{
-					Coin: 2, Webhook: "http://127.0.0.1:8080",
+					Coin: 2, GUID: "http://127.0.0.1:8080",
 					Address: "zpub6rH4MwgyTmuexAX6HAraks5cKv5BbtmwdLirvnU5845ovUJb4abgjt9DtXK4ZEaToRrNj8dQznuLC6Nka4eMviGMinCVMUxKLpuyddcG9Vc",
 				},
 				{
-					Coin: 0, Webhook: "http://127.0.0.1:8080",
+					Coin: 0, GUID: "http://127.0.0.1:8080",
 					Address: "xpub6BpYi6J1GZzfY3yY7DbhLLccF3efQa18nQngM3jaehgtNSoEgk6UtPULpC3oK5oA3trczY8Ld34LFw1USMPfGHwTEizdD5QyGcMyuh2UoBA",
 				},
 				{
-					Coin: 0, Webhook: "http://127.0.0.1:8080",
+					Coin: 0, GUID: "http://127.0.0.1:8080",
 					Address: "xpub6CYwPfnPJLPquufPkb98coSb3mdy1CgaZrWUtYWGJTJ4VWZUbzH9HLGy7nHpP7DG4UdTkYYpirkTWQSP7pWHsrk24Nos5oYNHpfr4BgPVTL",
 				},
 			},
diff --git a/tests/postman/Blockatlas.postman_collection.json b/tests/postman/Blockatlas.postman_collection.json
index 383850d..a0b5f81 100644
--- a/tests/postman/Blockatlas.postman_collection.json
+++ b/tests/postman/Blockatlas.postman_collection.json
@@ -1,6 +1,6 @@
 {
 	"info": {
-		"_postman_id": "63af4255-85a1-4505-87cb-13f8de0453af",
+		"_postman_id": "60e7e382-2f40-487f-a291-3e62daadadd8",
 		"name": "Blockatlas",
 		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
 	},
@@ -2380,214 +2380,6 @@
 			],
 			"protocolProfileBehavior": {}
 		},
-		{
-			"name": "observer",
-			"item": [
-				{
-					"name": "add",
-					"event": [
-						{
-							"listen": "prerequest",
-							"script": {
-								"id": "7312c9e7-5330-421a-9ca8-171101050e38",
-								"exec": [
-									"",
-									"var body = {\"subscriptions\": {}, \"webhook\": \"\"}",
-									"",
-									"let subscriptions = pm.variables.get(\"subscriptions\");",
-									"let webhook = pm.variables.get(\"webhook\");",
-									"",
-									"body[\"subscriptions\"] = subscriptions",
-									"body[\"webhook\"] = webhook",
-									"",
-									"pm.environment.set(\"request_body\", JSON.stringify(body));",
-									""
-								],
-								"type": "text/javascript"
-							}
-						},
-						{
-							"listen": "test",
-							"script": {
-								"id": "acec8baa-0ef0-4703-ab83-c555260deffa",
-								"exec": [
-									"let result = {",
-									"    \"status\": true,",
-									"    \"message\": \"Added\"",
-									"};",
-									"var jsonData = pm.response.json();",
-									"",
-									"pm.test(\"response must be valid and have a body\", function () {",
-									"    pm.response.to.have.status(200);",
-									"    pm.response.to.be.ok;",
-									"    pm.response.to.not.be.error;",
-									"    pm.response.to.be.withBody;",
-									"    pm.response.to.be.json;",
-									"});",
-									"",
-									"pm.test(\"response is valid\", function() {",
-									"    pm.expect(jsonData).to.eql(result);",
-									"});",
-									""
-								],
-								"type": "text/javascript"
-							}
-						}
-					],
-					"request": {
-						"method": "POST",
-						"header": [
-							{
-								"key": "Authorization",
-								"type": "text",
-								"value": "Bearer {{observer_auth}}"
-							},
-							{
-								"key": "Content-Type",
-								"name": "Content-Type",
-								"value": "application/json",
-								"type": "text"
-							}
-						],
-						"body": {
-							"mode": "raw",
-							"raw": "{{request_body}}",
-							"options": {
-								"raw": {
-									"language": "json"
-								}
-							}
-						},
-						"url": {
-							"raw": "{{host}}/observer/v1/webhook/register",
-							"host": [
-								"{{host}}"
-							],
-							"path": [
-								"observer",
-								"v1",
-								"webhook",
-								"register"
-							]
-						}
-					},
-					"response": []
-				},
-				{
-					"name": "delete",
-					"event": [
-						{
-							"listen": "prerequest",
-							"script": {
-								"id": "7312c9e7-5330-421a-9ca8-171101050e38",
-								"exec": [
-									"",
-									"var body = {\"subscriptions\": {}, \"webhook\": \"\"}",
-									"",
-									"let subscriptions = pm.variables.get(\"subscriptions\");",
-									"let webhook = pm.variables.get(\"webhook\");",
-									"",
-									"body[\"subscriptions\"] = subscriptions",
-									"body[\"webhook\"] = webhook",
-									"",
-									"pm.environment.set(\"request_body\", JSON.stringify(body));",
-									""
-								],
-								"type": "text/javascript"
-							}
-						},
-						{
-							"listen": "test",
-							"script": {
-								"id": "acec8baa-0ef0-4703-ab83-c555260deffa",
-								"exec": [
-									"let result = {",
-									"    \"status\": true,",
-									"    \"message\": \"Deleted\"",
-									"};",
-									"var jsonData = pm.response.json();",
-									"",
-									"pm.test(\"response must be valid and have a body\", function () {",
-									"    pm.response.to.have.status(200);",
-									"    pm.response.to.be.ok;",
-									"    pm.response.to.not.be.error;",
-									"    pm.response.to.be.withBody;",
-									"    pm.response.to.be.json;",
-									"});",
-									"",
-									"pm.test(\"response is valid\", function() {",
-									"    pm.expect(jsonData).to.eql(result);",
-									"});",
-									""
-								],
-								"type": "text/javascript"
-							}
-						}
-					],
-					"request": {
-						"method": "DELETE",
-						"header": [
-							{
-								"key": "Authorization",
-								"type": "text",
-								"value": "Bearer {{observer_auth}}"
-							},
-							{
-								"key": "Content-Type",
-								"name": "Content-Type",
-								"type": "text",
-								"value": "application/json"
-							}
-						],
-						"body": {
-							"mode": "raw",
-							"raw": "{{request_body}}",
-							"options": {
-								"raw": {
-									"language": "json"
-								}
-							}
-						},
-						"url": {
-							"raw": "{{host}}/observer/v1/webhook/register",
-							"host": [
-								"{{host}}"
-							],
-							"path": [
-								"observer",
-								"v1",
-								"webhook",
-								"register"
-							]
-						}
-					},
-					"response": []
-				}
-			],
-			"event": [
-				{
-					"listen": "prerequest",
-					"script": {
-						"id": "50b8bc65-9acc-4652-8ac7-722f45767478",
-						"type": "text/javascript",
-						"exec": [
-							""
-						]
-					}
-				},
-				{
-					"listen": "test",
-					"script": {
-						"id": "88a2b78a-643e-449b-9ec0-f7c7a62ad50a",
-						"type": "text/javascript",
-						"exec": [
-							""
-						]
-					}
-				}
-			],
-			"protocolProfileBehavior": {}
-		},
 		{
 			"name": "healthcheck",
 			"item": [
diff --git a/tests/postman/observer_data.json b/tests/postman/observer_data.json
deleted file mode 100644
index 9c5394e..0000000
--- a/tests/postman/observer_data.json
+++ /dev/null
@@ -1,72 +0,0 @@
-[
-    {
-        "subscriptions": {
-            "0": [
-                "bc1qrfr44n2j4czd5c9txwlnw0yj2h82x9566fglqj"
-            ],
-            "2": [
-                "ltc1qpm594ntjq6ayqjngf6t9td2dxtey9d7985eept"
-            ],
-            "60": [
-                "0x0875BCab22dE3d02402bc38aEe4104e1239374a7"
-            ],
-            "459": [
-                "kava1l8va9zyl50cpzv447c694k3jndelc9ygtfll2m"
-            ],
-            "714": [
-                "bnb1jxfh2g85q3v0tdq56fnevx6xcxtcnhtsmcu64m"
-            ]
-        },
-        "webhook": "http://localhost"
-    },
-    {
-        "subscriptions": {
-            "0": [
-                "bc1qrfr44n2j4czd5c9txwlnw0yj2h82x9566fglqj"
-            ],
-            "2": [
-                "ltc1qpm594ntjq6ayqjngf6t9td2dxtey9d7985eept"
-            ],
-            "60": [
-                "0x0875BCab22dE3d02402bc38aEe4104e1239374a7"
-            ],
-            "459": [
-                "kava1l8va9zyl50cpzv447c694k3jndelc9ygtfll2m"
-            ]
-        },
-        "webhook": "http://localhost"
-    },
-    {
-        "subscriptions": {
-            "0": [
-                "bc1qrfr44n2j4czd5c9txwlnw0yj2h82x9566fglqj"
-            ],
-            "2": [
-                "ltc1qpm594ntjq6ayqjngf6t9td2dxtey9d7985eept"
-            ],
-            "60": [
-                "0x0875BCab22dE3d02402bc38aEe4104e1239374a7"
-            ]
-        },
-        "webhook": "http://localhost"
-    },
-    {
-        "subscriptions": {
-            "0": [
-                "bc1qrfr44n2j4czd5c9txwlnw0yj2h82x9566fglqj"
-            ],
-            "2": [
-                "ltc1qpm594ntjq6ayqjngf6t9td2dxtey9d7985eept"
-            ]
-        },
-        "webhook": "http://localhost"
-    },
-    {
-        "subscriptions": {
-            "0": [
-                "bc1qrfr44n2j4czd5c9txwlnw0yj2h82x9566fglqj"
-            ]
-        },
-        "webhook": "http://localhost"
-    }
-]
\ No newline at end of file