From 0b66462c11d381c20f21ac2e6d9d542042ad64b6 Mon Sep 17 00:00:00 2001 From: nolash Date: Thu, 4 Nov 2021 09:42:35 +0100 Subject: [PATCH] Update openapi spec, enable queries with no ranges --- .../cic_cache/runnable/daemons/query.py | 25 +- apps/cic-cache/doc/openapi/server.yml | 532 +++++++++++++++++- 2 files changed, 529 insertions(+), 28 deletions(-) diff --git a/apps/cic-cache/cic_cache/runnable/daemons/query.py b/apps/cic-cache/cic_cache/runnable/daemons/query.py index c86e0ab9..2c586a79 100644 --- a/apps/cic-cache/cic_cache/runnable/daemons/query.py +++ b/apps/cic-cache/cic_cache/runnable/daemons/query.py @@ -19,9 +19,9 @@ from cic_cache.cache import ( logg = logging.getLogger(__name__) #logg = logging.getLogger() -re_transactions_all_bloom = r'/tx/(\d+)?/?(\d+)/?(\d+)?/?(\d+)?/?' +re_transactions_all_bloom = r'/tx/?(\d+)?/?(\d+)?/?(\d+)?/?(\d+)?/?' re_transactions_account_bloom = r'/tx/user/((0x)?[a-fA-F0-9]+)(/(\d+)(/(\d+))?)?/?' -re_transactions_all_data = r'/txa/(\d+)/?(\d+)?/?(\d+)?/?(\d+)?/?' +re_transactions_all_data = r'/txa/?(\d+)?/?(\d+)?/?(\d+)?/?(\d+)?/?' re_transactions_account_data = r'/txa/user/((0x)?[a-fA-F0-9]+)(/(\d+)(/(\d+))?)?/?' re_default_limit = r'/defaultlimit/?' @@ -46,19 +46,20 @@ def parse_query_account(r): # r is an re.Match def parse_query_any(r): limit = DEFAULT_LIMIT - if r.lastindex > 0: - limit = int(r[1]) offset = 0 - if r.lastindex > 1: - offset = int(r[2]) block_offset = None - if r.lastindex > 2: - block_offset = int(r[3]) block_end = None - if r.lastindex > 3: - block_end = int(r[4]) - if block_end < block_offset: - raise ValueError('cart before the horse, dude') + if r.lastindex != None: + if r.lastindex > 0: + limit = int(r[1]) + if r.lastindex > 1: + offset = int(r[2]) + if r.lastindex > 2: + block_offset = int(r[3]) + if r.lastindex > 3: + block_end = int(r[4]) + if block_end < block_offset: + raise ValueError('cart before the horse, dude') logg.debug('data query is offset {} limit {} block_offset {} block_end {}'.format(offset, limit, block_offset, block_end)) diff --git a/apps/cic-cache/doc/openapi/server.yml b/apps/cic-cache/doc/openapi/server.yml index 1b8ce889..14f162af 100644 --- a/apps/cic-cache/doc/openapi/server.yml +++ b/apps/cic-cache/doc/openapi/server.yml @@ -9,7 +9,7 @@ info: email: will@grassecon.org license: name: GPLv3 - version: 0.1.0 + version: 0.2.0 paths: /defaultlimit: @@ -28,16 +28,15 @@ paths: schema: $ref: "#/components/schemas/Limit" - - /tx/{offset}/{limit}/{block_offset}/{block_end}: + /tx: summary: Bloom filter for batch of latest transactions - description: Generates a bloom filter of the specified transactions in the database. Any path query part having a value of zero will be discarded. + description: Generate a bloom filter of the latest transactions in the cache. The number of maximum number of transactions returned is returned by the `/defaultlimit` API call. get: tags: - transactions description: Retrieve transactions - operationId: tx.get + operationId: tx.get.latest responses: 200: description: Transaction query successful. @@ -47,19 +46,130 @@ paths: $ref: "#/components/schemas/BlocksBloom" + /tx/{limit}: + summary: Bloom filter for batch of latest transactions + description: Generate a bloom filter of the latest transactions in the cache. If `limit` is 0, the number of maximum number of transactions returned is returned by the `/defaultlimit` API call. + get: + tags: + - transactions + description: + Retrieve transactions + operationId: tx.get.latest.limit + responses: + 200: + description: Transaction query successful. Results are ordered from newest to oldest. + content: + application/json: + schema: + $ref: "#/components/schemas/BlocksBloom" parameters: + - name: limit + in: path + required: true + schema: + type: integer + format: int32 + + + /tx/{limit}/{offset}: + summary: Bloom filter for batch of latest transactions + description: Generate a bloom filter of the latest transactions in the cache. If `limit` is 0, the number of maximum number of transactions returned is returned by the `/defaultlimit` API call. + get: + tags: + - transactions + description: + Retrieve transactions + operationId: tx.get.latest.range + responses: + 200: + description: Transaction query successful. Results are ordered from newest to oldest. + content: + application/json: + schema: + $ref: "#/components/schemas/BlocksBloom" + parameters: + - name: limit + in: path + required: true + schema: + type: integer + format: int32 - name: offset in: path required: true schema: type: integer format: int32 + + + /tx/{limit}/{offset}/{block_offset}: + summary: Bloom filter for batch of transactions since a particular block. + description: Generate a bloom filter of the latest transactions since a particular block in the cache. The block parameter is inclusive. If `limit` is 0, the number of maximum number of transactions returned is returned by the `/defaultlimit` API call. + get: + tags: + - transactions + description: + Retrieve transactions + operationId: tx.get.latest.range.block.offset + responses: + 200: + description: Transaction query successful. Results are ordered from oldest to newest. + content: + application/json: + schema: + $ref: "#/components/schemas/BlocksBloom" + + parameters: - name: limit in: path required: true schema: type: integer format: int32 + - name: offset + in: path + required: true + schema: + type: integer + format: int32 + - name: block_offset + in: path + required: true + schema: + type: integer + format: int32 + + + /tx/{limit}/{offset}/{block_offset}/{block_end}: + summary: Bloom filter for batch of transactions within a particular block range. + description: Generate a bloom filter of the latest transactions within a particular block range in the cache. The block parameters are inclusive. If `limit` is 0, the number of maximum number of transactions returned is returned by the `/defaultlimit` API call. + get: + tags: + - transactions + description: + Retrieve transactions + operationId: tx.get.latest.range.block.range + responses: + 200: + description: Transaction query successful. + content: + application/json: + schema: + $ref: "#/components/schemas/BlocksBloom" + + parameters: + - name: limit + in: path + required: true + schema: + type: integer + format: int32 + - name: offset + in: path + required: true + schema: + type: integer + format: int32 - name: block_offset in: path required: true @@ -73,8 +183,10 @@ paths: type: integer format: int32 - /tx/{address}/{offset}/{limit}: - description: Bloom filter for batch of latest transactions by account + + /tx/{address}: + summary: Bloom filter for batch of latest transactions by account. + description: Generate a bloom filter of the latest transactions where a specific account is the spender or beneficiary. get: tags: - transactions @@ -89,6 +201,30 @@ paths: schema: $ref: "#/components/schemas/BlocksBloom" + parameters: + - name: address + in: path + required: true + schema: + type: string + + + /tx/{address}/{limit}: + summary: Bloom filter for batch of latest transactions by account. + description: Generate a bloom filter of the latest transactions where a specific account is the spender or beneficiary. If `limit` is 0, the number of maximum number of transactions returned is returned by the `/defaultlimit` API call. + get: + tags: + - transactions + description: + Retrieve transactions + operationId: tx.get.user.limit + responses: + 200: + description: Transaction query successful. + content: + application/json: + schema: + $ref: "#/components/schemas/BlocksBloom" parameters: - name: address @@ -96,12 +232,6 @@ paths: required: true schema: type: string - - name: offset - in: path - required: true - schema: - type: integer - format: int32 - name: limit in: path required: true @@ -109,6 +239,294 @@ paths: type: integer format: int32 + + /tx/{address}/{limit}/{offset}: + summary: Bloom filter for batch of latest transactions by account + description: Generate a bloom filter of the latest transactions where a specific account is the spender or beneficiary. If `limit` is 0, the number of maximum number of transactions returned is returned by the `/defaultlimit` API call. + get: + tags: + - transactions + description: + Retrieve transactions + operationId: tx.get.user.range + responses: + 200: + description: Transaction query successful. + content: + application/json: + schema: + $ref: "#/components/schemas/BlocksBloom" + + parameters: + - name: address + in: path + required: true + schema: + type: string + - name: limit + in: path + required: true + schema: + type: integer + format: int32 + - name: offset + in: path + required: true + schema: + type: integer + format: int32 + + + /txa: + summary: Cached data for latest transactions. + description: Return data entries of the latest transactions in the cache. The number of maximum number of transactions returned is returned by the `/defaultlimit` API call. + get: + tags: + - transactions + description: + Retrieve transactions + operationId: txa.get.latest + responses: + 200: + description: Transaction query successful. + content: + application/json: + schema: + $ref: "#/components/schemas/TransactionList" + + + /txa/{limit}: + summary: Cached data for latest transactions. + description: Return data entries of the latest transactions in the cache. If `limit` is 0, the number of maximum number of transactions returned is returned by the `/defaultlimit` API call. + get: + tags: + - transactions + description: + Retrieve transactions + operationId: txa.get.latest.limit + responses: + 200: + description: Transaction query successful. + content: + application/json: + schema: + $ref: "#/components/schemas/TransactionList" + + parameters: + - name: limit + in: path + required: true + schema: + type: integer + format: int32 + + + /txa/{limit}/{offset}: + summary: Cached data for latest transactions. + description: Return data entries of the latest transactions in the cache. If `limit` is 0, the number of maximum number of transactions returned is returned by the `/defaultlimit` API call. + get: + tags: + - transactions + description: + Retrieve transactions + operationId: txa.get.latest.range + responses: + 200: + description: Transaction query successful. + content: + application/json: + schema: + $ref: "#/components/schemas/TransactionList" + + parameters: + - name: limit + in: path + required: true + schema: + type: integer + format: int32 + - name: offset + in: path + required: true + schema: + type: integer + format: int32 + + + /txa/{limit}/{offset}/{block_offset}: + summary: Cached data for transactions since a particular block. + description: Return cached data entries of transactions since a particular block. The block parameter is inclusive. If `limit` is 0, the number of maximum number of transactions returned is returned by the `/defaultlimit` API call. + get: + tags: + - transactions + description: + Retrieve transactions + operationId: txa.get.latest.range.block.offset + responses: + 200: + description: Transaction query successful. + content: + application/json: + schema: + $ref: "#/components/schemas/TransactionList" + + parameters: + - name: limit + in: path + required: true + schema: + type: integer + format: int32 + - name: offset + in: path + required: true + schema: + type: integer + format: int32 + - name: block_offset + in: path + required: true + schema: + type: integer + format: int32 + + /txa/{limit}/{offset}/{block_offset}/{block_end}: + summary: Cached data for transactions within a particular block range. + description: Return cached data entries of transactions within a particular block range in the cache. The block parameters are inclusive. If `limit` is 0, the number of maximum number of transactions returned is returned by the `/defaultlimit` API call. + get: + tags: + - transactions + description: + Retrieve transactions + operationId: txa.get.latest.range.block.range + responses: + 200: + description: Transaction query successful. + content: + application/json: + schema: + $ref: "#/components/schemas/TransactionList" + + parameters: + - name: limit + in: path + required: true + schema: + type: integer + format: int32 + - name: offset + in: path + required: true + schema: + type: integer + format: int32 + - name: block_offset + in: path + required: true + schema: + type: integer + format: int32 + - name: block_end + in: path + required: true + schema: + type: integer + format: int32 + + + /txa/{address}: + summary: Cached data for batch of latest transactions by account. + description: Return cached data of the latest transactions where a specific account is the spender or beneficiary. + get: + tags: + - transactions + description: + Retrieve transactions + operationId: txa.get.user + responses: + 200: + description: Transaction query successful. + content: + application/json: + schema: + $ref: "#/components/schemas/TransactionList" + + parameters: + - name: address + in: path + required: true + schema: + type: string + + + /txa/{address}/{limit}: + summary: Cached data for batch of latest transactions by account. + description: Return cached data of the latest transactions where a specific account is the spender or beneficiary. If `limit` is 0, the number of maximum number of transactions returned is returned by the `/defaultlimit` API call. + get: + tags: + - transactions + description: + Retrieve transactions + operationId: txa.get.user.limit + responses: + 200: + description: Transaction query successful. + content: + application/json: + schema: + $ref: "#/components/schemas/TransactionList" + + parameters: + - name: address + in: path + required: true + schema: + type: string + - name: limit + in: path + required: true + schema: + type: integer + format: int32 + + + /txa/{address}/{limit}/{offset}: + summary: Cached data for batch of latest transactions by account. + description: Return cached data of the latest transactions where a specific account is the spender or beneficiary. If `limit` is 0, the number of maximum number of transactions returned is returned by the `/defaultlimit` API call. + get: + tags: + - transactions + description: + Retrieve transactions + operationId: txa.get.user.range + responses: + 200: + description: Transaction query successful. + content: + application/json: + schema: + $ref: "#/components/schemas/TransactionList" + + parameters: + - name: address + in: path + required: true + schema: + type: string + - name: limit + in: path + required: true + schema: + type: integer + format: int32 + - name: offset + in: path + required: true + schema: + type: integer + format: int32 + + components: schemas: Limit: @@ -121,6 +539,10 @@ components: type: integer format: int32 description: The lowest block number included in the filter + high: + type: integer + format: int32 + description: The highest block number included in the filter block_filter: type: string format: byte @@ -136,9 +558,87 @@ components: type: integer format: int32 description: Number of hash rounds used to create the filter + TransactionList: + type: object + properties: + low: + type: integer + format: int32 + description: The lowest block number included in the result set + high: + type: integer + format: int32 + description: The highest block number included in the filter + data: + type: array + description: Cached transaction data + items: + $ref: "#/components/schemas/Transaction" + + Transaction: + type: object + properties: + block_number: + type: integer + format: int64 + description: Block number transaction was included in. + tx_hash: + type: string + description: Transaction hash, in hex. + date_block: + type: integer + format: int32 + description: Block timestamp. + sender: + type: string + description: Spender address, in hex. + recipient: + type: string + description: Beneficiary address, in hex. + from_value: + type: integer + format: int64 + description: Value deducted from spender's balance. + to_value: + type: integer + format: int64 + description: Value added to beneficiary's balance. + source_token: + type: string + description: Network address of token in which `from_value` is denominated. + destination_token: + type: string + description: Network address of token in which `to_value` is denominated. + success: + type: boolean + description: Network consensus state on whether the transaction was successful or not. + tx_type: + type: string + enum: + - erc20.faucet + - faucet.give_to examples: data_last: - summary: Get the latest cached transactions. - description: "Get the latest cached transactions. The maximum number of transactions returned is the value returned by the `/defaultlimit` query" - value: "/tx" + summary: Get the latest cached transactions, using the server's default limit. + value: "/txa" + + data_limit: + summary: Get the last 42 cached transactions. + value: "/txa/42" + + data_range: + summary: Get the next 42 cached transactions, starting from the 13th (zero-indexed). + value: "/txa/42/13" + + data_range_block_offset: + summary: Get the next 42 cached transactions, starting from block 1337 (inclusive). + value: "/txa/42/0/1337" + + data_range_block_offset: + summary: Get the next 42 cached transactions within blocks 1337 and 1453 (inclusive). + value: "/txa/42/0/1337/1453" + + data_range_block_range: + summary: Get the next 42 cached transactions after the 13th, within blocks 1337 and 1453 (inclusive). + value: "/txa/42/13/1337/1453"