From a6909402ad7dcb11e1512d19498cfb28e01ca79d Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 5 Apr 2024 12:59:46 +0200 Subject: [PATCH 001/280] introduce 'restapi.py' --- counterparty-core/counterpartycore/server.py | 60 ++-------- counterparty-lib/counterpartylib/lib/api.py | 33 +----- .../counterpartylib/lib/config.py | 6 +- .../counterpartylib/lib/restapi.py | 110 ++++++++++++++++++ counterparty-lib/counterpartylib/lib/util.py | 2 - counterparty-lib/counterpartylib/server.py | 85 ++++++++++++-- .../counterpartywallet/wallet/__init__.py | 2 +- 7 files changed, 198 insertions(+), 100 deletions(-) create mode 100644 counterparty-lib/counterpartylib/lib/restapi.py diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index 09ec0a0891..1f529504b0 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -5,7 +5,7 @@ from urllib.parse import quote_plus as urlencode from counterpartylib import server -from counterpartylib.lib import config, log, setup +from counterpartylib.lib import config, setup from termcolor import cprint logger = logging.getLogger(config.LOGGER_NAME) @@ -227,6 +227,10 @@ "help": "how long to keep a lock on a UTXO being tracked", }, ], + [ + ("--legacy-api",), + {"action": "store_true", "default": False, "help": "Use legacy API (Deprecated)"}, + ], ] @@ -360,57 +364,7 @@ def main(): exit(0) # Configuration - init_args = dict( - database_file=args.database_file, - testnet=args.testnet, - testcoin=args.testcoin, - regtest=args.regtest, - customnet=args.customnet, - api_limit_rows=args.api_limit_rows, - backend_connect=args.backend_connect, - backend_port=args.backend_port, - backend_user=args.backend_user, - backend_password=args.backend_password, - backend_ssl=args.backend_ssl, - backend_ssl_no_verify=args.backend_ssl_no_verify, - backend_poll_interval=args.backend_poll_interval, - indexd_connect=args.indexd_connect, - indexd_port=args.indexd_port, - rpc_host=args.rpc_host, - rpc_port=args.rpc_port, - rpc_user=args.rpc_user, - rpc_password=args.rpc_password, - rpc_no_allow_cors=args.rpc_no_allow_cors, - requests_timeout=args.requests_timeout, - rpc_batch_size=args.rpc_batch_size, - check_asset_conservation=not args.no_check_asset_conservation, - force=args.force, - p2sh_dust_return_pubkey=args.p2sh_dust_return_pubkey, - utxo_locks_max_addresses=args.utxo_locks_max_addresses, - utxo_locks_max_age=args.utxo_locks_max_age, - ) - - server.initialise_log_config( - verbose=args.verbose, - quiet=args.quiet, - log_file=args.log_file, - api_log_file=args.api_log_file, - no_log_files=args.no_log_files, - testnet=args.testnet, - testcoin=args.testcoin, - regtest=args.regtest, - json_log=args.json_log, - ) - - # set up logging - log.set_up( - verbose=config.VERBOSE, - quiet=config.QUIET, - log_file=config.LOG, - log_in_console=args.action == "start", - ) - - server.initialise_config(**init_args) + server.initialise_log_and_config(args) logger.info(f"Running v{APP_VERSION} of {APP_NAME}.") @@ -436,7 +390,7 @@ def main(): ) elif args.action == "start": - server.start_all(catch_up=args.catch_up) + server.start_all(args) elif args.action == "show-params": server.show_params() diff --git a/counterparty-lib/counterpartylib/lib/api.py b/counterparty-lib/counterpartylib/lib/api.py index ec80a02b0a..64237a81af 100644 --- a/counterparty-lib/counterpartylib/lib/api.py +++ b/counterparty-lib/counterpartylib/lib/api.py @@ -184,10 +184,7 @@ "p2sh_pretx_txid", ] -API_MAX_LOG_SIZE = ( - 10 * 1024 * 1024 -) # max log size of 20 MB before rotation (make configurable later) -API_MAX_LOG_COUNT = 10 + JSON_RPC_ERROR_API_COMPOSE = -32001 # code to use for error composing transaction result CURRENT_API_STATUS_CODE = None # is updated by the APIStatusPoller @@ -652,7 +649,7 @@ def init_api_access_log(app): # Log to file, if configured... if config.API_LOG: handler = logging_handlers.RotatingFileHandler( - config.API_LOG, "a", API_MAX_LOG_SIZE, API_MAX_LOG_COUNT + config.API_LOG, "a", config.API_MAX_LOG_SIZE, config.API_MAX_LOG_COUNT ) for l in loggers: # noqa: E741 handler.setLevel(logging.DEBUG) @@ -1214,32 +1211,6 @@ def _set_cors_headers(response): ##### REST ROUTES ##### - @app.route("/addresses/
/balances", methods=["GET"]) - def handle_address_balances(address): - return remove_rowids(ledger.get_address_balances(self.db, address)) - - @app.route("/assets//balances", methods=["GET"]) - def handle_asset_balances(asset): - return remove_rowids(ledger.get_asset_balances(self.db, asset)) - - @app.route("/assets//", methods=["GET"]) - def handle_asset_info(asset): - return remove_rowids(get_asset_info(asset=asset)) - - @app.route("/assets//orders", methods=["GET"]) - def handle_asset_orders(asset): - status = request.args.get("status", "open") - return remove_rowids(ledger.get_orders_by_asset(self.db, asset, status)) - - @app.route("/orders/", methods=["GET"]) - def handle_order_info(tx_hash): - return remove_rowids(ledger.get_order(self.db, tx_hash)) - - @app.route("/orders//matches", methods=["GET"]) - def handle_order_matches(tx_hash): - status = request.args.get("status", "pending") - return remove_rowids(ledger.get_order_matches_by_order(self.db, tx_hash, status)) - @app.route("/healthz", methods=["GET"]) def handle_healthz(): msg, code = "Healthy", 200 diff --git a/counterparty-lib/counterpartylib/lib/config.py b/counterparty-lib/counterpartylib/lib/config.py index 9107dbc530..001967825d 100644 --- a/counterparty-lib/counterpartylib/lib/config.py +++ b/counterparty-lib/counterpartylib/lib/config.py @@ -154,5 +154,7 @@ BOOTSTRAP_URL_MAINNET = "https://bootstrap.counterparty.io/counterparty.latest.tar.gz" BOOTSTRAP_URL_TESTNET = "https://bootstrap.counterparty.io/counterparty-testnet.latest.tar.gz" - -# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 +API_MAX_LOG_SIZE = ( + 10 * 1024 * 1024 +) # max log size of 20 MB before rotation (make configurable later) +API_MAX_LOG_COUNT = 10 diff --git a/counterparty-lib/counterpartylib/lib/restapi.py b/counterparty-lib/counterpartylib/lib/restapi.py new file mode 100644 index 0000000000..1597e7124f --- /dev/null +++ b/counterparty-lib/counterpartylib/lib/restapi.py @@ -0,0 +1,110 @@ +import argparse +import logging +import multiprocessing +from logging import handlers as logging_handlers +from multiprocessing import Process + +import flask +from flask import Flask, request + +from counterpartylib import server +from counterpartylib.lib import ( + config, + database, + ledger, +) + +multiprocessing.set_start_method("spawn", force=True) + +logger = logging.getLogger(config.LOGGER_NAME) +app = Flask(__name__) +db = None +api_process = None + + +def init_api_access_log(app): + """Initialize API logger.""" + werkzeug_loggers = (logging.getLogger("werkzeug"), app.logger) + + # Disable console logging... + for werkzeug_logger in werkzeug_loggers: # noqa: E741 + werkzeug_logger.setLevel(logging.CRITICAL) + werkzeug_logger.propagate = False + + # Log to file, if configured... + if config.API_LOG: + handler = logging_handlers.RotatingFileHandler( + config.API_LOG, "a", config.API_MAX_LOG_SIZE, config.API_MAX_LOG_COUNT + ) + for werkzeug_logger in werkzeug_loggers: # noqa: E741 + handler.setLevel(logging.DEBUG) + werkzeug_logger.addHandler(handler) + + flask.cli.show_server_banner = lambda *args: None + + +def remove_rowids(query_result): + """Remove the rowid field from the query result.""" + filtered_results = [] + for row in list(query_result): + if "rowid" in row: + del row["rowid"] + if "MAX(rowid)" in row: + del row["MAX(rowid)"] + filtered_results.append(row) + return filtered_results + + +@app.route("/addresses/
/balances", methods=["GET"]) +def handle_address_balances(address): + return remove_rowids(ledger.get_address_balances(db, address)) + + +@app.route("/assets//balances", methods=["GET"]) +def handle_asset_balances(asset): + return remove_rowids(ledger.get_asset_balances(db, asset)) + + +# @app.route("/assets//", methods=["GET"]) +# def handle_asset_info(asset): +# return remove_rowids(get_asset_info(asset=asset)) + + +@app.route("/assets//orders", methods=["GET"]) +def handle_asset_orders(asset): + status = request.args.get("status", "open") + return remove_rowids(ledger.get_orders_by_asset(db, asset, status)) + + +@app.route("/orders/", methods=["GET"]) +def handle_order_info(tx_hash): + return remove_rowids(ledger.get_order(db, tx_hash)) + + +@app.route("/orders//matches", methods=["GET"]) +def handle_order_matches(tx_hash): + status = request.args.get("status", "pending") + return remove_rowids(ledger.get_order_matches_by_order(db, tx_hash, status)) + + +def run_api_server(args): + global db # noqa: PLW0603 + # Initialise log and config + server.initialise_log_and_config(argparse.Namespace(**args)) + init_api_access_log(app) + # Connect to the database + db = database.get_connection(read_only=True) + # Start the API server + app.run(host=config.RPC_HOST, port=config.RPC_PORT, debug=False) + print(f"REST API started at {config.RPC_HOST}:{config.RPC_PORT}") + + +def start(args): + api_process = Process(target=run_api_server, args=(vars(args),)) + api_process.start() + + +def stop(): + if api_process and api_process.is_alive(): + api_process.terminate() + print(f"REST API stopped at {config.RPC_HOST}:{config.RPC_PORT}") diff --git a/counterparty-lib/counterpartylib/lib/util.py b/counterparty-lib/counterpartylib/lib/util.py index 1700f03693..db3ba41511 100644 --- a/counterparty-lib/counterpartylib/lib/util.py +++ b/counterparty-lib/counterpartylib/lib/util.py @@ -1,12 +1,10 @@ import binascii import collections import decimal -import fractions # noqa: F401 import hashlib import itertools import json import logging -import os # noqa: F401 import random import re import sys diff --git a/counterparty-lib/counterpartylib/server.py b/counterparty-lib/counterpartylib/server.py index 39bb1f6edd..6e5891f865 100755 --- a/counterparty-lib/counterpartylib/server.py +++ b/counterparty-lib/counterpartylib/server.py @@ -28,7 +28,8 @@ config, database, ledger, - log, # noqa: F401 + log, + restapi, transaction, util, ) @@ -57,10 +58,13 @@ def sigterm_handler(_signo, _stack_frame): assert False # noqa: B011 logger.info(f"Received {signal_name}.") + restapi.stop() + if "api_server" in globals(): logger.info("Stopping API server.") api_server.stop() # noqa: F821 api_status_poller.stop() # noqa: F821 + logger.info("Stopping backend.") backend.stop() logger.info("Shutting down.") @@ -544,6 +548,60 @@ def initialise_config( logger.info(f"Running v{config.VERSION_STRING} of counterparty-lib.") +def initialise_log_and_config(args): + config_args = dict( + database_file=args.database_file, + testnet=args.testnet, + testcoin=args.testcoin, + regtest=args.regtest, + customnet=args.customnet, + api_limit_rows=args.api_limit_rows, + backend_connect=args.backend_connect, + backend_port=args.backend_port, + backend_user=args.backend_user, + backend_password=args.backend_password, + backend_ssl=args.backend_ssl, + backend_ssl_no_verify=args.backend_ssl_no_verify, + backend_poll_interval=args.backend_poll_interval, + indexd_connect=args.indexd_connect, + indexd_port=args.indexd_port, + rpc_host=args.rpc_host, + rpc_port=args.rpc_port, + rpc_user=args.rpc_user, + rpc_password=args.rpc_password, + rpc_no_allow_cors=args.rpc_no_allow_cors, + requests_timeout=args.requests_timeout, + rpc_batch_size=args.rpc_batch_size, + check_asset_conservation=not args.no_check_asset_conservation, + force=args.force, + p2sh_dust_return_pubkey=args.p2sh_dust_return_pubkey, + utxo_locks_max_addresses=args.utxo_locks_max_addresses, + utxo_locks_max_age=args.utxo_locks_max_age, + ) + log_args = dict( + verbose=args.verbose, + quiet=args.quiet, + log_file=args.log_file, + api_log_file=args.api_log_file, + no_log_files=args.no_log_files, + testnet=args.testnet, + testcoin=args.testcoin, + regtest=args.regtest, + json_log=args.json_log, + ) + # initialise log config + initialise_log_config(**log_args) + # set up logging + log.set_up( + verbose=config.VERBOSE, + quiet=config.QUIET, + log_file=config.LOG, + log_in_console=args.action == "start", + ) + # initialise other config + initialise_config(**config_args) + + def initialise_db(): if config.FORCE: cprint("THE OPTION `--force` IS NOT FOR USE ON PRODUCTION SYSTEMS.", "yellow") @@ -595,11 +653,11 @@ def connect_to_addrindexrs(): print(f"{OK_GREEN} {step}") -def start_all(catch_up="normal"): +def start_all(args): # Backend. connect_to_backend() - if not os.path.exists(config.DATABASE) and catch_up == "bootstrap": + if not os.path.exists(config.DATABASE) and args.catch_up == "bootstrap": bootstrap(no_confirm=True) db = initialise_db() @@ -608,17 +666,22 @@ def start_all(catch_up="normal"): # initilise_config transaction.initialise() - # API Status Poller. - api_status_poller = api.APIStatusPoller() - api_status_poller.daemon = True - api_status_poller.start() + if args.legacy_api: + # API Status Poller. + api_status_poller = api.APIStatusPoller() + api_status_poller.daemon = True + api_status_poller.start() - # API Server. - api_server = api.APIServer() - api_server.daemon = True - api_server.start() + # API Server. + api_server = api.APIServer() + api_server.daemon = True + api_server.start() + else: + # REST API Server. + restapi.start(args) # Server + blocks.follow(db) diff --git a/counterparty-wallet/counterpartywallet/wallet/__init__.py b/counterparty-wallet/counterpartywallet/wallet/__init__.py index b1d0438e77..108a1db3e3 100644 --- a/counterparty-wallet/counterpartywallet/wallet/__init__.py +++ b/counterparty-wallet/counterpartywallet/wallet/__init__.py @@ -20,7 +20,7 @@ class LockedWalletError(WalletError): def wallet(): - return sys.modules[f"counterpartycli.wallet.{config.WALLET_NAME}"] + return sys.modules[f"counterpartywallet.wallet.{config.WALLET_NAME}"] def get_wallet_addresses(): From 00181f9d92b259f7c7a1a71b7ae9e165c3007efe Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 5 Apr 2024 13:49:48 +0200 Subject: [PATCH 002/280] DRY routes --- .../counterpartylib/lib/restapi.py | 58 ++++++++++--------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/restapi.py b/counterparty-lib/counterpartylib/lib/restapi.py index 1597e7124f..e460a40718 100644 --- a/counterparty-lib/counterpartylib/lib/restapi.py +++ b/counterparty-lib/counterpartylib/lib/restapi.py @@ -21,6 +21,26 @@ db = None api_process = None +ROUTES = { + "/addresses/
/balances": { + "function": ledger.get_address_balances, + }, + "/assets//balances": { + "function": ledger.get_asset_balances, + }, + "/assets//orders": { + "function": ledger.get_orders_by_asset, + "args": [("status", "open")], + }, + "/orders/": { + "function": ledger.get_order, + }, + "/orders//matches": { + "function": ledger.get_order_matches_by_order, + "args": [("status", "pending")], + }, +} + def init_api_access_log(app): """Initialize API logger.""" @@ -55,36 +75,19 @@ def remove_rowids(query_result): return filtered_results -@app.route("/addresses/
/balances", methods=["GET"]) -def handle_address_balances(address): - return remove_rowids(ledger.get_address_balances(db, address)) - - -@app.route("/assets//balances", methods=["GET"]) -def handle_asset_balances(asset): - return remove_rowids(ledger.get_asset_balances(db, asset)) - - # @app.route("/assets//", methods=["GET"]) # def handle_asset_info(asset): # return remove_rowids(get_asset_info(asset=asset)) -@app.route("/assets//orders", methods=["GET"]) -def handle_asset_orders(asset): - status = request.args.get("status", "open") - return remove_rowids(ledger.get_orders_by_asset(db, asset, status)) - - -@app.route("/orders/", methods=["GET"]) -def handle_order_info(tx_hash): - return remove_rowids(ledger.get_order(db, tx_hash)) - - -@app.route("/orders//matches", methods=["GET"]) -def handle_order_matches(tx_hash): - status = request.args.get("status", "pending") - return remove_rowids(ledger.get_order_matches_by_order(db, tx_hash, status)) +def handle_route(**kwargs): + route = ROUTES.get(str(request.url_rule.rule)) + function_args = dict(kwargs) + if "args" in route: + for arg in route["args"]: + function_args[arg[0]] = request.args.get(arg[0], arg[1]) + result = route["function"](db, **function_args) + return remove_rowids(result) def run_api_server(args): @@ -94,9 +97,11 @@ def run_api_server(args): init_api_access_log(app) # Connect to the database db = database.get_connection(read_only=True) + # Add routes + for path in ROUTES.keys(): + app.add_url_rule(path, view_func=handle_route) # Start the API server app.run(host=config.RPC_HOST, port=config.RPC_PORT, debug=False) - print(f"REST API started at {config.RPC_HOST}:{config.RPC_PORT}") def start(args): @@ -107,4 +112,3 @@ def start(args): def stop(): if api_process and api_process.is_alive(): api_process.terminate() - print(f"REST API stopped at {config.RPC_HOST}:{config.RPC_PORT}") From 110e5c8f433f432c32478b8284af6e7c2e92615f Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 5 Apr 2024 14:13:10 +0200 Subject: [PATCH 003/280] refactor 'get_asset_info()' --- .../counterpartylib/lib/ledger.py | 44 ++++++++++++++++--- .../counterpartylib/lib/restapi.py | 12 +++-- 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/ledger.py b/counterparty-lib/counterpartylib/lib/ledger.py index 43bcaf22f6..82c0ea3979 100644 --- a/counterparty-lib/counterpartylib/lib/ledger.py +++ b/counterparty-lib/counterpartylib/lib/ledger.py @@ -6,7 +6,7 @@ import time from decimal import Decimal as D -from counterpartylib.lib import config, exceptions, log, util +from counterpartylib.lib import backend, config, exceptions, log, util logger = logging.getLogger(config.LOGGER_NAME) @@ -609,18 +609,50 @@ def get_asset_issuances_quantity(db, asset): def get_asset_info(db, asset): - if asset == config.BTC or asset == config.XCP: - return {"divisible": True} + asset_name = resolve_subasset_longname(db, asset) + + # Defaults. + asset_info = { + "asset": asset_name, + "asset_longname": None, + "owner": None, + "divisible": True, + "locked": False, + "supply": 0, + "description": "", + "issuer": None, + } + + if asset_name == config.BTC: + asset_info["supply"] = backend.get_btc_supply(normalize=False) + return asset_info + elif asset_name == config.XCP: + asset_info["supply"] = xcp_supply(db) + return asset_info + else: + asset_info["supply"] = asset_supply(db, asset_name) + cursor = db.cursor() query = """ SELECT * FROM issuances WHERE (status = ? AND asset = ?) - ORDER BY tx_index DESC + ORDER BY rowid DESC + LIMIT 1 """ bindings = ("valid", asset) cursor.execute(query, bindings) - issuances = cursor.fetchall() - return issuances[0] + issuance = cursor.fetchone() + + asset_info = asset_info | { + "asset_longname": issuance["asset_longname"], + "owner": issuance["issuer"], + "divisible": bool(issuance["divisible"]), + "locked": bool(issuance["locked"]), + "description": issuance["description"], + "issuer": issuance["issuer"], + } + + return asset_info def get_issuances(db, asset=None, status=None, locked=None, first=False, last=False): diff --git a/counterparty-lib/counterpartylib/lib/restapi.py b/counterparty-lib/counterpartylib/lib/restapi.py index e460a40718..84307b904b 100644 --- a/counterparty-lib/counterpartylib/lib/restapi.py +++ b/counterparty-lib/counterpartylib/lib/restapi.py @@ -25,6 +25,9 @@ "/addresses/
/balances": { "function": ledger.get_address_balances, }, + "/assets//": { + "function": ledger.get_asset_info, + }, "/assets//balances": { "function": ledger.get_asset_balances, }, @@ -42,7 +45,7 @@ } -def init_api_access_log(app): +def init_api_access_log(): """Initialize API logger.""" werkzeug_loggers = (logging.getLogger("werkzeug"), app.logger) @@ -75,11 +78,6 @@ def remove_rowids(query_result): return filtered_results -# @app.route("/assets//", methods=["GET"]) -# def handle_asset_info(asset): -# return remove_rowids(get_asset_info(asset=asset)) - - def handle_route(**kwargs): route = ROUTES.get(str(request.url_rule.rule)) function_args = dict(kwargs) @@ -94,7 +92,7 @@ def run_api_server(args): global db # noqa: PLW0603 # Initialise log and config server.initialise_log_and_config(argparse.Namespace(**args)) - init_api_access_log(app) + init_api_access_log() # Connect to the database db = database.get_connection(read_only=True) # Add routes From ba618772ca12ea94b0a95376062e4251e3f1510f Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 5 Apr 2024 15:02:46 +0200 Subject: [PATCH 004/280] Add API authentification --- counterparty-lib/counterpartylib/lib/restapi.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/counterparty-lib/counterpartylib/lib/restapi.py b/counterparty-lib/counterpartylib/lib/restapi.py index 84307b904b..1bde190b92 100644 --- a/counterparty-lib/counterpartylib/lib/restapi.py +++ b/counterparty-lib/counterpartylib/lib/restapi.py @@ -6,6 +6,7 @@ import flask from flask import Flask, request +from flask_httpauth import HTTPBasicAuth from counterpartylib import server from counterpartylib.lib import ( @@ -18,9 +19,11 @@ logger = logging.getLogger(config.LOGGER_NAME) app = Flask(__name__) +auth = HTTPBasicAuth() db = None api_process = None + ROUTES = { "/addresses/
/balances": { "function": ledger.get_address_balances, @@ -45,6 +48,11 @@ } +@auth.verify_password +def verify_password(username, password): + return username == config.RPC_USER and password == config.RPC_PASSWORD + + def init_api_access_log(): """Initialize API logger.""" werkzeug_loggers = (logging.getLogger("werkzeug"), app.logger) @@ -78,6 +86,7 @@ def remove_rowids(query_result): return filtered_results +@auth.login_required def handle_route(**kwargs): route = ROUTES.get(str(request.url_rule.rule)) function_args = dict(kwargs) From 893c86ee5caeef6d4812d176ad9b7db9376daec4 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 5 Apr 2024 17:22:24 +0200 Subject: [PATCH 005/280] move old api in v1/; rename restapi.py to api.py --- counterparty-lib/counterpartylib/lib/api.py | 1490 +---------------- .../counterpartylib/lib/restapi.py | 121 -- .../counterpartylib/lib/v1/api.py | 1449 ++++++++++++++++ counterparty-lib/counterpartylib/server.py | 10 +- .../test/bytespersigop_test.py | 11 +- .../counterpartylib/test/complex_unit_test.py | 7 +- .../counterpartylib/test/conftest.py | 3 +- .../test/estimate_fee_per_kb_test.py | 3 +- .../test/p2sh_encoding_test.py | 24 +- .../counterpartylib/test/util_test.py | 5 +- 10 files changed, 1563 insertions(+), 1560 deletions(-) delete mode 100644 counterparty-lib/counterpartylib/lib/restapi.py create mode 100644 counterparty-lib/counterpartylib/lib/v1/api.py diff --git a/counterparty-lib/counterpartylib/lib/api.py b/counterparty-lib/counterpartylib/lib/api.py index 64237a81af..1bde190b92 100644 --- a/counterparty-lib/counterpartylib/lib/api.py +++ b/counterparty-lib/counterpartylib/lib/api.py @@ -1,439 +1,77 @@ -#! /usr/bin/python3 - -""" -The database connections are read‐only, so SQL injection attacks can’t be a -problem. -""" - -import collections -import decimal -import json +import argparse import logging -import os # noqa: F401 -import re -import sys -import threading -import time -import traceback +import multiprocessing from logging import handlers as logging_handlers +from multiprocessing import Process -import requests # noqa: F401 - -D = decimal.Decimal -import binascii # noqa: E402 -import inspect # noqa: E402 -import math # noqa: E402 -import struct # noqa: E402, F401 - -import apsw # noqa: E402, F401 -import flask # noqa: E402 -import jsonrpc # noqa: E402 -from flask import request # noqa: E402 -from flask_httpauth import HTTPBasicAuth # noqa: E402 -from jsonrpc import dispatcher # noqa: E402 -from jsonrpc.exceptions import JSONRPCDispatchException # noqa: E402 -from xmltodict import unparse as serialize_to_xml # noqa: E402 +import flask +from flask import Flask, request +from flask_httpauth import HTTPBasicAuth -from counterpartylib.lib import ( # noqa: E402 - backend, - blocks, # noqa: F401 +from counterpartylib import server +from counterpartylib.lib import ( config, database, - exceptions, - gettxinfo, ledger, - message_type, - script, - transaction, - util, ) -from counterpartylib.lib.kickstart.blocks_parser import BlockchainParser # noqa: E402 -from counterpartylib.lib.messages import ( # noqa: E402 - bet, # noqa: F401 - broadcast, # noqa: F401 - btcpay, # noqa: F401 - burn, # noqa: F401 - cancel, # noqa: F401 - destroy, # noqa: F401 - dispenser, # noqa: F401 - dividend, # noqa: F401 - issuance, # noqa: F401 - order, # noqa: F401 - rps, # noqa: F401 - rpsresolve, # noqa: F401 - send, - sweep, # noqa: F401 -) -from counterpartylib.lib.messages.versions import enhanced_send # noqa: E402 - -logger = logging.getLogger(config.LOGGER_NAME) -API_TABLES = [ - "assets", - "balances", - "credits", - "debits", - "bets", - "bet_matches", - "broadcasts", - "btcpays", - "burns", - "cancels", - "destructions", - "dividends", - "issuances", - "orders", - "order_matches", - "sends", - "bet_expirations", - "order_expirations", - "bet_match_expirations", - "order_match_expirations", - "bet_match_resolutions", - "rps", - "rpsresolves", - "rps_matches", - "rps_expirations", - "rps_match_expirations", - "mempool", - "sweeps", - "dispensers", - "dispenses", - "transactions", -] +multiprocessing.set_start_method("spawn", force=True) -VIEW_QUERIES = { - "balances": """ - SELECT *, MAX(rowid) AS rowid - FROM balances - GROUP BY address, asset - """, - "orders": """ - SELECT *, MAX(rowid) AS rowid - FROM orders - GROUP BY tx_hash - """, - "order_matches": """ - SELECT *, MAX(rowid) AS rowid - FROM order_matches - GROUP BY id - """, - "bets": """ - SELECT *, MAX(rowid) AS rowid - FROM bets - GROUP BY tx_hash - """, - "bets_matches": """ - SELECT *, MAX(rowid) AS rowid - FROM bet_matches - GROUP BY id - """, - "rps": """ - SELECT *, MAX(rowid) AS rowid - FROM rps - GROUP BY tx_hash - """, - "rps_matches": """ - SELECT *, MAX(rowid) AS rowid - FROM rps_matches - GROUP BY id - """, - "dispensers": """ - SELECT *, MAX(rowid) AS rowid - FROM dispensers - GROUP BY tx_hash - """, +logger = logging.getLogger(config.LOGGER_NAME) +app = Flask(__name__) +auth = HTTPBasicAuth() +db = None +api_process = None + + +ROUTES = { + "/addresses/
/balances": { + "function": ledger.get_address_balances, + }, + "/assets//": { + "function": ledger.get_asset_info, + }, + "/assets//balances": { + "function": ledger.get_asset_balances, + }, + "/assets//orders": { + "function": ledger.get_orders_by_asset, + "args": [("status", "open")], + }, + "/orders/": { + "function": ledger.get_order, + }, + "/orders//matches": { + "function": ledger.get_order_matches_by_order, + "args": [("status", "pending")], + }, } -API_TRANSACTIONS = [ - "bet", - "broadcast", - "btcpay", - "burn", - "cancel", - "destroy", - "dividend", - "issuance", - "order", - "send", - "rps", - "rpsresolve", - "sweep", - "dispenser", -] - -COMMONS_ARGS = [ - "encoding", - "fee_per_kb", - "regular_dust_size", - "multisig_dust_size", - "op_return_value", - "pubkey", - "allow_unconfirmed_inputs", - "fee", - "fee_provided", - "estimate_fee_per_kb", - "estimate_fee_per_kb_nblocks", - "unspent_tx_hash", - "custom_inputs", - "dust_return_pubkey", - "disable_utxo_locks", - "extended_tx_info", - "p2sh_source_multisig_pubkeys", - "p2sh_source_multisig_pubkeys_required", - "p2sh_pretx_txid", -] - - -JSON_RPC_ERROR_API_COMPOSE = -32001 # code to use for error composing transaction result - -CURRENT_API_STATUS_CODE = None # is updated by the APIStatusPoller -CURRENT_API_STATUS_RESPONSE_JSON = None # is updated by the APIStatusPoller - - -class APIError(Exception): - pass - - -class BackendError(Exception): - pass - - -def check_backend_state(): - f"""Checks blocktime of last block to see if {config.BTC_NAME} Core is running behind.""" # noqa: B021 - block_count = backend.getblockcount() - block_hash = backend.getblockhash(block_count) - cblock = backend.getblock(block_hash) - time_behind = time.time() - cblock.nTime # TODO: Block times are not very reliable. - if time_behind > 60 * 60 * 2: # Two hours. - raise BackendError(f"Bitcoind is running about {round(time_behind / 3600)} hours behind.") - - # check backend index - blocks_behind = backend.getindexblocksbehind() - if blocks_behind > 5: - raise BackendError(f"Indexd is running {blocks_behind} blocks behind.") - - logger.debug("Backend state check passed.") - - -class DatabaseError(Exception): - pass - - -def check_database_state(db, blockcount): - f"""Checks {config.XCP_NAME} database to see if is caught up with backend.""" # noqa: B021 - if ledger.CURRENT_BLOCK_INDEX + 1 < blockcount: - raise DatabaseError(f"{config.XCP_NAME} database is behind backend.") - logger.debug("Database state check passed.") - return - -# TODO: ALL queries EVERYWHERE should be done with these methods -def db_query(db, statement, bindings=(), callback=None, **callback_args): - """Allow direct access to the database in a parametrized manner.""" - cursor = db.cursor() +@auth.verify_password +def verify_password(username, password): + return username == config.RPC_USER and password == config.RPC_PASSWORD - # Sanitize. - forbidden_words = ["pragma", "attach", "database", "begin", "transaction"] - for word in forbidden_words: - # This will find if the forbidden word is in the statement as a whole word. For example, "transactions" will be allowed because the "s" at the end - if re.search(r"\b" + word + "\b", statement.lower()): - raise APIError(f"Forbidden word in query: '{word}'.") - if callable(callback): - cursor.execute(statement, bindings) - for row in cursor: - callback(row, **callback_args) - results = None - else: - results = list(cursor.execute(statement, bindings)) - cursor.close() - return results - - -def get_rows( - db, - table, - filters=None, - filterop="AND", - order_by=None, - order_dir=None, - start_block=None, - end_block=None, - status=None, - limit=1000, - offset=0, - show_expired=True, -): - """SELECT * FROM wrapper. Filters results based on a filter data structure (as used by the API).""" - - if filters == None: # noqa: E711 - filters = [] - - def value_to_marker(value): - # if value is an array place holder is (?,?,?,..) - if isinstance(value, list): - return f"""({','.join(['?' for e in range(0, len(value))])})""" - else: - return """?""" - - # TODO: Document that op can be anything that SQLite3 accepts. - if not table or table.lower() not in API_TABLES: - raise APIError("Unknown table") - if filterop and filterop.upper() not in ["OR", "AND"]: - raise APIError("Invalid filter operator (OR, AND)") - if order_dir and order_dir.upper() not in ["ASC", "DESC"]: - raise APIError("Invalid order direction (ASC, DESC)") - if not isinstance(limit, int): - raise APIError("Invalid limit") - elif config.API_LIMIT_ROWS != 0 and limit > config.API_LIMIT_ROWS: - raise APIError(f"Limit should be lower or equal to {config.API_LIMIT_ROWS}") - elif config.API_LIMIT_ROWS != 0 and limit == 0: - raise APIError("Limit should be greater than 0") - if not isinstance(offset, int): - raise APIError("Invalid offset") - # TODO: accept an object: {'field1':'ASC', 'field2': 'DESC'} - if order_by and not re.compile("^[a-z0-9_]+$").match(order_by): - raise APIError("Invalid order_by, must be a field name") - - if isinstance(filters, dict): # single filter entry, convert to a one entry list - filters = [ - filters, - ] - elif not isinstance(filters, list): - filters = [] - - # TODO: Document this! (Each filter can be an ordered list.) - new_filters = [] - for filter_ in filters: - if type(filter_) in (list, tuple) and len(filter_) in [3, 4]: - new_filter = {"field": filter_[0], "op": filter_[1], "value": filter_[2]} - if len(filter_) == 4: - new_filter["case_sensitive"] = filter_[3] - new_filters.append(new_filter) - elif type(filter_) == dict: # noqa: E721 - new_filters.append(filter_) - else: - raise APIError("Unknown filter type") - filters = new_filters - - # validate filter(s) - for filter_ in filters: - for field in ["field", "op", "value"]: # should have all fields - if field not in filter_: - raise APIError(f"A specified filter is missing the '{field}' field") - if not isinstance(filter_["value"], (str, int, float, list)): - raise APIError(f"Invalid value for the field '{filter_['field']}'") - if isinstance(filter_["value"], list) and filter_["op"].upper() not in ["IN", "NOT IN"]: - raise APIError(f"Invalid value for the field '{filter_['field']}'") - if filter_["op"].upper() not in [ - "=", - "==", - "!=", - ">", - "<", - ">=", - "<=", - "IN", - "LIKE", - "NOT IN", - "NOT LIKE", - ]: - raise APIError(f"Invalid operator for the field '{filter_['field']}'") - if "case_sensitive" in filter_ and not isinstance(filter_["case_sensitive"], bool): - raise APIError("case_sensitive must be a boolean") - - # special case for memo and memo_hex field searches - if table == "sends": - adjust_get_sends_memo_filters(filters) - - # SELECT - source = VIEW_QUERIES[table] if table in VIEW_QUERIES else table - # no sql injection here - statement = f"""SELECT * FROM ({source})""" # nosec B608 # noqa: S608 - # WHERE - bindings = [] - conditions = [] - for filter_ in filters: - case_sensitive = False if "case_sensitive" not in filter_ else filter_["case_sensitive"] - if filter_["op"] == "LIKE" and case_sensitive == False: # noqa: E712 - filter_["field"] = f"""UPPER({filter_['field']})""" - filter_["value"] = filter_["value"].upper() - marker = value_to_marker(filter_["value"]) - conditions.append(f"""{filter_['field']} {filter_['op']} {marker}""") - if isinstance(filter_["value"], list): - bindings += filter_["value"] - else: - bindings.append(filter_["value"]) - # AND filters - more_conditions = [] - if table not in ["balances", "order_matches", "bet_matches"]: - if start_block != None: # noqa: E711 - more_conditions.append("""block_index >= ?""") - bindings.append(start_block) - if end_block != None: # noqa: E711 - more_conditions.append("""block_index <= ?""") - bindings.append(end_block) - elif table in ["order_matches", "bet_matches"]: - if start_block != None: # noqa: E711 - more_conditions.append("""tx0_block_index >= ?""") - bindings.append(start_block) - if end_block != None: # noqa: E711 - more_conditions.append("""tx1_block_index <= ?""") - bindings.append(end_block) - - # status - if isinstance(status, list) and len(status) > 0: - more_conditions.append(f"""status IN {value_to_marker(status)}""") - bindings += status - elif isinstance(status, str) and status != "": - more_conditions.append("""status == ?""") - bindings.append(status) - - # legacy filters - if not show_expired and table == "orders": - # Ignore BTC orders one block early. - expire_index = ledger.CURRENT_BLOCK_INDEX + 1 - more_conditions.append("""((give_asset == ? AND expire_index > ?) OR give_asset != ?)""") - bindings += [config.BTC, expire_index, config.BTC] - - if (len(conditions) + len(more_conditions)) > 0: - statement += """ WHERE""" - all_conditions = [] - if len(conditions) > 0: - all_conditions.append(f"""({f' {filterop.upper()} '.join(conditions)})""") - if len(more_conditions) > 0: - all_conditions.append(f"""({' AND '.join(more_conditions)})""") - statement += f""" {' AND '.join(all_conditions)}""" - - # ORDER BY - if order_by != None: # noqa: E711 - statement += f""" ORDER BY {order_by}""" - if order_dir != None: # noqa: E711 - statement += f""" {order_dir.upper()}""" - # LIMIT - if limit and limit > 0: - statement += f""" LIMIT {limit}""" - if offset: - statement += f""" OFFSET {offset}""" - - query_result = db_query(db, statement, tuple(bindings)) - - if table == "balances": - return adjust_get_balances_results(query_result, db) - - if table == "destructions": - return adjust_get_destructions_results(query_result) +def init_api_access_log(): + """Initialize API logger.""" + werkzeug_loggers = (logging.getLogger("werkzeug"), app.logger) - if table == "sends": - # for sends, handle the memo field properly - return adjust_get_sends_results(query_result) + # Disable console logging... + for werkzeug_logger in werkzeug_loggers: # noqa: E741 + werkzeug_logger.setLevel(logging.CRITICAL) + werkzeug_logger.propagate = False - if table == "transactions": - # for transactions, handle the data field properly - return adjust_get_transactions_results(query_result) + # Log to file, if configured... + if config.API_LOG: + handler = logging_handlers.RotatingFileHandler( + config.API_LOG, "a", config.API_MAX_LOG_SIZE, config.API_MAX_LOG_COUNT + ) + for werkzeug_logger in werkzeug_loggers: # noqa: E741 + handler.setLevel(logging.DEBUG) + werkzeug_logger.addHandler(handler) - return remove_rowids(query_result) + flask.cli.show_server_banner = lambda *args: None def remove_rowids(query_result): @@ -445,1001 +83,39 @@ def remove_rowids(query_result): if "MAX(rowid)" in row: del row["MAX(rowid)"] filtered_results.append(row) - - return filtered_results - - -def adjust_get_balances_results(query_result, db): - filtered_results = [] - assets = {} - for balances_row in list(query_result): - asset = balances_row["asset"] - if asset not in assets: - assets[asset] = ledger.is_divisible(db, asset) - - balances_row["divisible"] = assets[asset] - filtered_results.append(balances_row) - - return filtered_results - - -def adjust_get_destructions_results(query_result): - filtered_results = [] - for destruction_row in list(query_result): - if type(destruction_row["tag"]) == bytes: # noqa: E721 - destruction_row["tag"] = destruction_row["tag"].decode("utf-8", "ignore") - - filtered_results.append(destruction_row) - - return filtered_results - - -def adjust_get_sends_memo_filters(filters): - """Convert memo to a byte string. If memo_hex is supplied, attempt to decode it and use that instead.""" - for filter_ in filters: - if filter_["field"] == "memo": - filter_["value"] = bytes(filter_["value"], "utf-8") - if filter_["field"] == "memo_hex": - # search the indexed memo field with a byte string - filter_["field"] = "memo" - try: - filter_["value"] = bytes.fromhex(filter_["value"]) - except ValueError as e: # noqa: F841 - raise APIError("Invalid memo_hex value") # noqa: B904 - - -def adjust_get_sends_results(query_result): - """Format the memo_hex field. Try and decode the memo from a utf-8 uncoded string. Invalid utf-8 strings return an empty memo.""" - filtered_results = [] - for send_row in list(query_result): - try: - if send_row["memo"] is None: - send_row["memo_hex"] = None - send_row["memo"] = None - else: - if type(send_row["memo"]) == str: # noqa: E721 - send_row["memo"] = bytes(send_row["memo"], "utf-8") - - send_row["memo_hex"] = binascii.hexlify(send_row["memo"]).decode("utf8") - send_row["memo"] = send_row["memo"].decode("utf-8") - except UnicodeDecodeError: - send_row["memo"] = "" - filtered_results.append(send_row) - return filtered_results - - -def adjust_get_transactions_results(query_result): - """Format the data field. Try and decode the data from a utf-8 uncoded string. Invalid utf-8 strings return an empty data.""" - filtered_results = [] - for transaction_row in list(query_result): - transaction_row["data"] = transaction_row["data"].hex() - filtered_results.append(transaction_row) return filtered_results -def compose_transaction( - db, - name, - params, - encoding="auto", - fee_per_kb=None, - estimate_fee_per_kb=None, - regular_dust_size=config.DEFAULT_REGULAR_DUST_SIZE, - multisig_dust_size=config.DEFAULT_MULTISIG_DUST_SIZE, - op_return_value=config.DEFAULT_OP_RETURN_VALUE, - pubkey=None, - allow_unconfirmed_inputs=False, - fee=None, - fee_provided=0, - unspent_tx_hash=None, - custom_inputs=None, - dust_return_pubkey=None, - disable_utxo_locks=False, - extended_tx_info=False, - p2sh_source_multisig_pubkeys=None, - p2sh_source_multisig_pubkeys_required=None, - p2sh_pretx_txid=None, - old_style_api=True, - segwit=False, -): - """Create and return a transaction.""" - - # Get provided pubkeys. - if type(pubkey) == str: # noqa: E721 - provided_pubkeys = [pubkey] - elif type(pubkey) == list: # noqa: E721 - provided_pubkeys = pubkey - elif pubkey == None: # noqa: E711 - provided_pubkeys = [] - else: - assert False # noqa: B011 - - # Get additional pubkeys from `source` and `destination` params. - # Convert `source` and `destination` to pubkeyhash form. - for address_name in ["source", "destination"]: - if address_name in params: - address = params[address_name] - if isinstance(address, list): - # pkhshs = [] - # for addr in address: - # provided_pubkeys += script.extract_pubkeys(addr) - # pkhshs.append(script.make_pubkeyhash(addr)) - # params[address_name] = pkhshs - pass - else: - provided_pubkeys += script.extract_pubkeys(address) - params[address_name] = script.make_pubkeyhash(address) - - # Check validity of collected pubkeys. - for pubkey in provided_pubkeys: - if not script.is_fully_valid(binascii.unhexlify(pubkey)): - raise script.AddressError(f"invalid public key: {pubkey}") - - compose_method = sys.modules[f"counterpartylib.lib.messages.{name}"].compose - compose_params = inspect.getfullargspec(compose_method)[0] - missing_params = [p for p in compose_params if p not in params and p != "db"] - for param in missing_params: - params[param] = None - - # dont override fee_per_kb if specified - if fee_per_kb is not None: - estimate_fee_per_kb = False - else: - fee_per_kb = config.DEFAULT_FEE_PER_KB - - if "extended_tx_info" in params: - extended_tx_info = params["extended_tx_info"] - del params["extended_tx_info"] - - if "old_style_api" in params: - old_style_api = params["old_style_api"] - del params["old_style_api"] - - if "segwit" in params: - segwit = params["segwit"] - del params["segwit"] - - tx_info = compose_method(db, **params) - return transaction.construct( - db, - tx_info, - encoding=encoding, - fee_per_kb=fee_per_kb, - estimate_fee_per_kb=estimate_fee_per_kb, - regular_dust_size=regular_dust_size, - multisig_dust_size=multisig_dust_size, - op_return_value=op_return_value, - provided_pubkeys=provided_pubkeys, - allow_unconfirmed_inputs=allow_unconfirmed_inputs, - exact_fee=fee, - fee_provided=fee_provided, - unspent_tx_hash=unspent_tx_hash, - custom_inputs=custom_inputs, - dust_return_pubkey=dust_return_pubkey, - disable_utxo_locks=disable_utxo_locks, - extended_tx_info=extended_tx_info, - p2sh_source_multisig_pubkeys=p2sh_source_multisig_pubkeys, - p2sh_source_multisig_pubkeys_required=p2sh_source_multisig_pubkeys_required, - p2sh_pretx_txid=p2sh_pretx_txid, - old_style_api=old_style_api, - segwit=segwit, - ) - - -def conditional_decorator(decorator, condition): - """Checks the condition and if True applies specified decorator.""" - - def gen_decorator(f): - if not condition: - return f - return decorator(f) - - return gen_decorator - - -def init_api_access_log(app): - """Initialize API logger.""" - loggers = (logging.getLogger("werkzeug"), app.logger) - - # Disable console logging... - for l in loggers: # noqa: E741 - l.setLevel(logging.CRITICAL) - l.propagate = False - - # Log to file, if configured... - if config.API_LOG: - handler = logging_handlers.RotatingFileHandler( - config.API_LOG, "a", config.API_MAX_LOG_SIZE, config.API_MAX_LOG_COUNT - ) - for l in loggers: # noqa: E741 - handler.setLevel(logging.DEBUG) - l.addHandler(handler) - - flask.cli.show_server_banner = lambda *args: None - - -class APIStatusPoller(threading.Thread): - """Perform regular checks on the state of the backend and the database.""" - - def __init__(self): - self.last_database_check = 0 - threading.Thread.__init__(self) - self.stop_event = threading.Event() - - def stop(self): - self.stop_event.set() - - def run(self): - logger.debug("Starting API Status Poller.") - global CURRENT_API_STATUS_CODE, CURRENT_API_STATUS_RESPONSE_JSON # noqa: PLW0603 - db = database.get_connection(read_only=True) - - while self.stop_event.is_set() != True: # noqa: E712 - try: - # Check that backend is running, communicable, and caught up with the blockchain. - # Check that the database has caught up with bitcoind. - if ( - time.time() - self.last_database_check > 10 * 60 - ): # Ten minutes since last check. - if not config.FORCE: - code = 11 - logger.debug("Checking backend state.") - check_backend_state() - code = 12 - logger.debug("Checking database state.") - check_database_state(db, backend.getblockcount()) - self.last_database_check = time.time() - except (BackendError, DatabaseError) as e: - exception_name = e.__class__.__name__ - exception_text = str(e) - logger.debug("API Status Poller: %s", exception_text) - jsonrpc_response = jsonrpc.exceptions.JSONRPCServerError( - message=exception_name, data=exception_text - ) - CURRENT_API_STATUS_CODE = code - CURRENT_API_STATUS_RESPONSE_JSON = jsonrpc_response.json.encode() - else: - CURRENT_API_STATUS_CODE = None - CURRENT_API_STATUS_RESPONSE_JSON = None - time.sleep(config.BACKEND_POLL_INTERVAL) - - -class APIServer(threading.Thread): - """Handle JSON-RPC API calls.""" - - def __init__(self, db=None): - self.db = db - self.is_ready = False - threading.Thread.__init__(self) - self.stop_event = threading.Event() - - def stop(self): - self.join() - self.stop_event.set() - - def run(self): - logger.info("Starting API Server.") - self.db = self.db or database.get_connection(read_only=True) - app = flask.Flask(__name__) - auth = HTTPBasicAuth() - - @auth.get_password - def get_pw(username): - if username == config.RPC_USER: - return config.RPC_PASSWORD - return None - - ###################### - # READ API - - # Generate dynamically get_{table} methods - def generate_get_method(table): - def get_method(**kwargs): - try: - return get_rows(self.db, table=table, **kwargs) - except TypeError as e: # TODO: generalise for all API methods - raise APIError(str(e)) # noqa: B904 - - return get_method - - for table in API_TABLES: - new_method = generate_get_method(table) - new_method.__name__ = f"get_{table}" - dispatcher.add_method(new_method) - - @dispatcher.add_method - def sql(query, bindings=None): - if bindings == None: # noqa: E711 - bindings = [] - return db_query(self.db, query, tuple(bindings)) - - ###################### - # WRITE/ACTION API - - # Generate dynamically create_{transaction} methods - def generate_create_method(tx): - def split_params(**kwargs): - transaction_args = {} - common_args = {} - private_key_wif = None - for key in kwargs: - if key in COMMONS_ARGS: - common_args[key] = kwargs[key] - elif key == "privkey": - private_key_wif = kwargs[key] - else: - transaction_args[key] = kwargs[key] - return transaction_args, common_args, private_key_wif - - def create_method(**kwargs): - try: - transaction_args, common_args, private_key_wif = split_params(**kwargs) - return compose_transaction( - self.db, name=tx, params=transaction_args, **common_args - ) - except ( - TypeError, - script.AddressError, - exceptions.ComposeError, - exceptions.TransactionError, - exceptions.BalanceError, - ) as error: - # TypeError happens when unexpected keyword arguments are passed in - error_msg = f"Error composing {tx} transaction via API: {str(error)}" - logging.warning(error_msg) - logging.warning(traceback.format_exc()) - raise JSONRPCDispatchException( # noqa: B904 - code=JSON_RPC_ERROR_API_COMPOSE, message=error_msg - ) - - return create_method - - for tx in API_TRANSACTIONS: - create_method = generate_create_method(tx) - create_method.__name__ = f"create_{tx}" - dispatcher.add_method(create_method) - - @dispatcher.add_method - def get_messages(block_index): - if not isinstance(block_index, int): - raise APIError("block_index must be an integer.") - - messages = ledger.get_messages(self.db, block_index=block_index) - return messages - - @dispatcher.add_method - def get_messages_by_index(message_indexes): - """Get specific messages from the feed, based on the message_index. - - @param message_index: A single index, or a list of one or more message indexes to retrieve. - """ - if not isinstance(message_indexes, list): - message_indexes = [ - message_indexes, - ] - for idx in message_indexes: # make sure the data is clean - if not isinstance(idx, int): - raise APIError("All items in message_indexes are not integers") - - messages = ledger.get_messages(self.db, message_index_in=message_indexes) - return messages - - @dispatcher.add_method - def get_supply(asset): - if asset == "BTC": - return backend.get_btc_supply(normalize=False) - elif asset == "XCP": - return ledger.xcp_supply(self.db) - else: - asset = ledger.resolve_subasset_longname(self.db, asset) - return ledger.asset_supply(self.db, asset) - - @dispatcher.add_method - def get_xcp_supply(): - logger.warning("Deprecated method: `get_xcp_supply`") - return ledger.xcp_supply(self.db) - - @dispatcher.add_method - def get_asset_info(assets=None, asset=None): - if asset is not None: - assets = [asset] - - if not isinstance(assets, list): - raise APIError( - "assets must be a list of asset names, even if it just contains one entry" - ) - assets_info = [] - for asset in assets: - asset = ledger.resolve_subasset_longname(self.db, asset) # noqa: PLW2901 - - # BTC and XCP. - if asset in [config.BTC, config.XCP]: - if asset == config.BTC: - supply = backend.get_btc_supply(normalize=False) - else: - supply = ledger.xcp_supply(self.db) - - assets_info.append( - { - "asset": asset, - "asset_longname": None, - "owner": None, - "divisible": True, - "locked": False, - "supply": supply, - "description": "", - "issuer": None, - } - ) - continue - - # User‐created asset. - cursor = self.db.cursor() - issuances = ledger.get_issuances(self.db, asset=asset, status="valid", first=True) - cursor.close() - if not issuances: - continue # asset not found, most likely - else: - last_issuance = issuances[-1] - locked = False - for e in issuances: - if e["locked"]: - locked = True - assets_info.append( - { - "asset": asset, - "asset_longname": last_issuance["asset_longname"], - "owner": last_issuance["issuer"], - "divisible": bool(last_issuance["divisible"]), - "locked": locked, - "supply": ledger.asset_supply(self.db, asset), - "description": last_issuance["description"], - "issuer": last_issuance["issuer"], - } - ) - return assets_info - - @dispatcher.add_method - def get_block_info(block_index): - assert isinstance(block_index, int) - cursor = self.db.cursor() - cursor.execute("""SELECT * FROM blocks WHERE block_index = ?""", (block_index,)) - blocks = list(cursor) # noqa: F811 - if len(blocks) == 1: - block = blocks[0] - elif len(blocks) == 0: - raise exceptions.DatabaseError("No blocks found.") - else: - assert False # noqa: B011 - cursor.close() - return block - - @dispatcher.add_method - def fee_per_kb(conf_target=config.ESTIMATE_FEE_CONF_TARGET, mode=config.ESTIMATE_FEE_MODE): - return backend.fee_per_kb(conf_target, mode) - - @dispatcher.add_method - def get_blocks(block_indexes, min_message_index=None): - """fetches block info and messages for the specified block indexes - @param min_message_index: Retrieve blocks from the message feed on or after this specific message index - (useful since blocks may appear in the message feed more than once, if a reorg occurred). Note that - if this parameter is not specified, the messages for the first block will be returned. - """ - if not isinstance(block_indexes, (list, tuple)): - raise APIError("block_indexes must be a list of integers.") - if len(block_indexes) >= 250: - raise APIError("can only specify up to 250 indexes at a time.") - for block_index in block_indexes: - if not isinstance(block_index, int): - raise APIError("block_indexes must be a list of integers.") - - cursor = self.db.cursor() - - block_indexes_placeholder = f"({','.join(['?'] * len(block_indexes))})" - # no sql injection here - cursor.execute( - f"SELECT * FROM blocks WHERE block_index IN ({block_indexes_placeholder}) ORDER BY block_index ASC", # nosec B608 # noqa: S608 - block_indexes, - ) - blocks = cursor.fetchall() # noqa: F811 - - messages = collections.deque(ledger.get_messages(self.db, block_index_in=block_indexes)) - - # Discard any messages less than min_message_index - if min_message_index: - while len(messages) and messages[0]["message_index"] < min_message_index: - messages.popleft() - - # Packages messages into their appropriate block in the data structure to be returned - for block in blocks: - block["_messages"] = [] - while len(messages) and messages[0]["block_index"] == block["block_index"]: - block["_messages"].append(messages.popleft()) - # NOTE: if len(messages), then we're only returning the messages for the first set of blocks before the reorg - - cursor.close() - return blocks - - @dispatcher.add_method - def get_running_info(): - latest_block_index = backend.getblockcount() - - try: - check_database_state(self.db, latest_block_index) - except DatabaseError: - caught_up = False - else: - caught_up = True - - try: - cursor = self.db.cursor() - blocks = list( - cursor.execute( - """SELECT * FROM blocks WHERE block_index = ?""", - (ledger.CURRENT_BLOCK_INDEX,), - ) - ) - assert len(blocks) == 1 - last_block = blocks[0] - cursor.close() - except: # noqa: E722 - last_block = None - - try: - last_message = ledger.last_message(self.db) - except: # noqa: E722 - last_message = None - - try: - indexd_blocks_behind = backend.getindexblocksbehind() - except: # noqa: E722 - indexd_blocks_behind = latest_block_index if latest_block_index > 0 else 999999 - indexd_caught_up = indexd_blocks_behind <= 1 - - server_ready = caught_up and indexd_caught_up - - return { - "server_ready": server_ready, - "db_caught_up": caught_up, - "bitcoin_block_count": latest_block_index, - "last_block": last_block, - "indexd_caught_up": indexd_caught_up, - "indexd_blocks_behind": indexd_blocks_behind, - "last_message_index": last_message["message_index"] if last_message else -1, - "api_limit_rows": config.API_LIMIT_ROWS, - "running_testnet": config.TESTNET, - "running_regtest": config.REGTEST, - "running_testcoin": config.TESTCOIN, - "version_major": config.VERSION_MAJOR, - "version_minor": config.VERSION_MINOR, - "version_revision": config.VERSION_REVISION, - } - - @dispatcher.add_method - def get_element_counts(): - counts = {} - cursor = self.db.cursor() - for element in [ - "transactions", - "blocks", - "debits", - "credits", - "balances", - "sends", - "orders", - "order_matches", - "btcpays", - "issuances", - "broadcasts", - "bets", - "bet_matches", - "dividends", - "burns", - "cancels", - "order_expirations", - "bet_expirations", - "order_match_expirations", - "bet_match_expirations", - "messages", - "destructions", - ]: - # no sql injection here, element is hardcoded - cursor.execute(f"SELECT COUNT(*) AS count FROM {element}") # nosec B608 # noqa: S608 - count_list = cursor.fetchall() - assert len(count_list) == 1 - counts[element] = count_list[0]["count"] - cursor.close() - return counts - - @dispatcher.add_method - def get_asset_names(longnames=False): - all_assets = ledger.get_valid_assets(self.db) - if longnames: - names = [ - {"asset": row["asset"], "asset_longname": row["asset_longname"]} - for row in all_assets - ] - else: - names = [row["asset"] for row in all_assets] - return names - - @dispatcher.add_method - def get_asset_longnames(): - return get_asset_names(longnames=True) - - @dispatcher.add_method - def get_holder_count(asset): - asset = ledger.resolve_subasset_longname(self.db, asset) - holders = ledger.holders(self.db, asset, True) - addresses = [] - for holder in holders: - addresses.append(holder["address"]) - return {asset: len(set(addresses))} - - @dispatcher.add_method - def get_holders(asset): - asset = ledger.resolve_subasset_longname(self.db, asset) - holders = ledger.holders(self.db, asset, True) - return holders - - @dispatcher.add_method - def search_raw_transactions(address, unconfirmed=True, only_tx_hashes=False): - return backend.search_raw_transactions( - address, unconfirmed=unconfirmed, only_tx_hashes=only_tx_hashes - ) - - @dispatcher.add_method - def get_oldest_tx(address): - return backend.get_oldest_tx(address) - - @dispatcher.add_method - def get_unspent_txouts(address, unconfirmed=False, unspent_tx_hash=None, order_by=None): - results = backend.get_unspent_txouts( - address, unconfirmed=unconfirmed, unspent_tx_hash=unspent_tx_hash - ) - if order_by is None: - return results - else: - order_key = order_by - reverse = False - if order_key.startswith("-"): - order_key = order_key[1:] - reverse = True - return sorted(results, key=lambda x: x[order_key], reverse=reverse) - - @dispatcher.add_method - def getrawtransaction(tx_hash, verbose=False, skip_missing=False): - return backend.getrawtransaction(tx_hash, verbose=verbose, skip_missing=skip_missing) - - @dispatcher.add_method - def getrawtransaction_batch(txhash_list, verbose=False, skip_missing=False): - return backend.getrawtransaction_batch( - txhash_list, verbose=verbose, skip_missing=skip_missing - ) - - @dispatcher.add_method - def get_tx_info(tx_hex, block_index=None): - # block_index mandatory for transactions before block 335000 - source, destination, btc_amount, fee, data, extra = gettxinfo.get_tx_info( - self.db, BlockchainParser().deserialize_tx(tx_hex), block_index=block_index - ) - return source, destination, btc_amount, fee, util.hexlify(data) if data else "" - - @dispatcher.add_method - def unpack(data_hex): - data = binascii.unhexlify(data_hex) - message_type_id, message = message_type.unpack(data) - - # TODO: Enabled only for `send`. - if message_type_id == send.ID: - unpack_method = send.unpack - elif message_type_id == enhanced_send.ID: - unpack_method = enhanced_send.unpack - else: - raise APIError("unsupported message type") - unpacked = unpack_method(self.db, message, ledger.CURRENT_BLOCK_INDEX) - return message_type_id, unpacked - - @dispatcher.add_method - # TODO: Rename this method. - def search_pubkey(pubkeyhash, provided_pubkeys=None): - return backend.pubkeyhash_to_pubkey(pubkeyhash, provided_pubkeys=provided_pubkeys) - - @dispatcher.add_method - def get_dispenser_info(tx_hash=None, tx_index=None): - cursor = self.db.cursor() # noqa: F841 - - if tx_hash is None and tx_index is None: - raise APIError("You must provided a tx hash or a tx index") - - dispensers = [] - if tx_hash is not None: - dispensers = get_dispenser_info(self.db, tx_hash=tx_hash) - else: - dispensers = get_dispenser_info(self.db, tx_index=tx_index) - - if len(dispensers) == 1: - dispenser = dispensers[0] - oracle_price = "" - satoshi_price = "" - fiat_price = "" - oracle_price_last_updated = "" - oracle_fiat_label = "" - - if dispenser["oracle_address"] != None: # noqa: E711 - fiat_price = util.satoshirate_to_fiat(dispenser["satoshirate"]) - oracle_price, oracle_fee, oracle_fiat_label, oracle_price_last_updated = ( - ledger.get_oracle_last_price( - self.db, dispenser["oracle_address"], ledger.CURRENT_BLOCK_INDEX - ) - ) - - if oracle_price > 0: - satoshi_price = math.ceil((fiat_price / oracle_price) * config.UNIT) - else: - raise APIError("Last oracle price is zero") - - return { - "tx_index": dispenser["tx_index"], - "tx_hash": dispenser["tx_hash"], - "block_index": dispenser["block_index"], - "source": dispenser["source"], - "asset": dispenser["asset"], - "give_quantity": dispenser["give_quantity"], - "escrow_quantity": dispenser["escrow_quantity"], - "mainchainrate": dispenser["satoshirate"], - "fiat_price": fiat_price, - "fiat_unit": oracle_fiat_label, - "oracle_price": oracle_price, - "satoshi_price": satoshi_price, - "status": dispenser["status"], - "give_remaining": dispenser["give_remaining"], - "oracle_address": dispenser["oracle_address"], - "oracle_price_last_updated": oracle_price_last_updated, - "asset_longname": dispenser["asset_longname"], - } - - return {} - - def _set_cors_headers(response): - if not config.RPC_NO_ALLOW_CORS: - response.headers["Access-Control-Allow-Origin"] = "*" - response.headers["Access-Control-Allow-Methods"] = "GET, POST, OPTIONS" - response.headers["Access-Control-Allow-Headers"] = ( - "DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization" - ) - - ##### REST ROUTES ##### - - @app.route("/healthz", methods=["GET"]) - def handle_healthz(): - msg, code = "Healthy", 200 - - type_ = request.args.get("type", "heavy") - - try: - if type_ == "light": - logger.debug("Performing light healthz check.") - latest_block_index = backend.getblockcount() - check_database_state(self.db, latest_block_index) - else: - logger.debug("Performing heavy healthz check.") - compose_transaction( - self.db, - name="send", - params={ - "source": config.UNSPENDABLE, - "destination": config.UNSPENDABLE, - "asset": config.XCP, - "quantity": 100000000, - }, - allow_unconfirmed_inputs=True, - fee=1000, - ) - except Exception: - msg, code = "Unhealthy", 503 - - return flask.Response(msg, code, mimetype="application/json") - - @app.route("/", defaults={"args_path": ""}, methods=["GET", "POST", "OPTIONS"]) - @app.route("/", methods=["GET", "POST", "OPTIONS"]) - # Only require authentication if RPC_PASSWORD is set. - @conditional_decorator(auth.login_required, hasattr(config, "RPC_PASSWORD")) - def handle_root(args_path): - """Handle all paths, decide where to forward the query.""" - if ( - args_path == "" - or args_path.startswith("api/") - or args_path.startswith("API/") - or args_path.startswith("rpc/") - or args_path.startswith("RPC/") - ): - if flask.request.method == "POST": - # Need to get those here because it might not be available in this aux function. - request_json = flask.request.get_data().decode("utf-8") - response = handle_rpc_post(request_json) - return response - elif flask.request.method == "OPTIONS": - response = handle_rpc_options() - return response - else: - error = "Invalid method." - return flask.Response(error, 405, mimetype="application/json") - elif args_path.startswith("rest/") or args_path.startswith("REST/"): - if flask.request.method == "GET" or flask.request.method == "POST": - # Pass the URL path without /REST/ part and Flask request object. - rest_path = args_path.split("/", 1)[1] - response = handle_rest(rest_path, flask.request) - return response - else: - error = "Invalid method." - return flask.Response(error, 405, mimetype="application/json") - else: - # Not found - return flask.Response(None, 404, mimetype="application/json") - - ###################### - # JSON-RPC API - ###################### - def handle_rpc_options(): - response = flask.Response("", 204) - _set_cors_headers(response) - return response - - def handle_rpc_post(request_json): - """Handle /API/ POST route. Call relevant get_rows/create_transaction wrapper.""" - # Check for valid request format. - try: - request_data = json.loads(request_json) - assert ( - "id" in request_data - and request_data["jsonrpc"] == "2.0" - and request_data["method"] - ) - # params may be omitted - except: # noqa: E722 - obj_error = jsonrpc.exceptions.JSONRPCInvalidRequest( - data="Invalid JSON-RPC 2.0 request format" - ) - return flask.Response(obj_error.json.encode(), 400, mimetype="application/json") - - # Only arguments passed as a `dict` are supported. - if request_data.get("params", None) and not isinstance(request_data["params"], dict): - obj_error = jsonrpc.exceptions.JSONRPCInvalidRequest( - data="Arguments must be passed as a JSON object (list of unnamed arguments not supported)" - ) - return flask.Response(obj_error.json.encode(), 400, mimetype="application/json") - - # Return an error if the API Status Poller checks fail. - if not config.FORCE and CURRENT_API_STATUS_CODE: - return flask.Response( - CURRENT_API_STATUS_RESPONSE_JSON, 503, mimetype="application/json" - ) - - # Answer request normally. - # NOTE: `UnboundLocalError: local variable 'output' referenced before assignment` means the method doesn’t return anything. - jsonrpc_response = jsonrpc.JSONRPCResponseManager.handle(request_json, dispatcher) - response = flask.Response( - jsonrpc_response.json.encode(), 200, mimetype="application/json" - ) - _set_cors_headers(response) - return response - - ###################### - # HTTP REST API - ###################### - def handle_rest(path_args, flask_request): - """Handle /REST/ route. Query the database using get_rows or create transaction using compose_transaction.""" - url_action = flask_request.path.split("/")[-1] - if url_action == "compose": - compose = True - elif url_action == "get": - compose = False - else: - error = f'Invalid action "{url_action}".' - return flask.Response(error, 400, mimetype="application/json") - - # Get all arguments passed via URL. - url_args = path_args.split("/") - try: - query_type = url_args.pop(0).lower() - except IndexError: - error = "No query_type provided." - return flask.Response(error, 400, mimetype="application/json") - # Check if message type or table name are valid. - if (compose and query_type not in API_TRANSACTIONS) or ( - not compose and query_type not in API_TABLES - ): - error = f'No such query type in supported queries: "{query_type}".' - return flask.Response(error, 400, mimetype="application/json") - - # Parse the additional arguments. - extra_args = flask_request.args.items() - query_data = {} - - if compose: - common_args = {} - transaction_args = {} - for key, value in extra_args: - # Determine value type. - try: - value = int(value) # noqa: PLW2901 - except ValueError: - try: - value = float(value) # noqa: PLW2901 - except ValueError: - pass - # Split keys into common and transaction-specific arguments. Discard the privkey. - if key in COMMONS_ARGS: - common_args[key] = value - elif key == "privkey": - pass - else: - transaction_args[key] = value - - # Must have some additional transaction arguments. - if not len(transaction_args): - error = "No transaction arguments provided." - return flask.Response(error, 400, mimetype="application/json") - - # Compose the transaction. - try: - query_data = compose_transaction( - self.db, name=query_type, params=transaction_args, **common_args - ) - except ( - script.AddressError, - exceptions.ComposeError, - exceptions.TransactionError, - exceptions.BalanceError, - ) as error: - error_msg = logging.warning( - f"{error.__class__.__name__} -- error composing {query_type} transaction via API: {error}" - ) - return flask.Response(error_msg, 400, mimetype="application/json") - else: - # Need to de-generate extra_args to pass it through. - query_args = dict([item for item in extra_args]) - operator = query_args.pop("op", "AND") - # Put the data into specific dictionary format. - data_filter = [ - {"field": key, "op": "==", "value": value} - for (key, value) in query_args.items() - ] - - # Run the query. - try: - query_data = get_rows( - self.db, table=query_type, filters=data_filter, filterop=operator - ) - except APIError as error: # noqa: F841 - return flask.Response("API Error", 400, mimetype="application/json") - - # See which encoding to choose from. - file_format = flask_request.headers["Accept"] - # JSON as default. - if file_format == "application/json" or file_format == "*/*": - response_data = json.dumps(query_data) - elif file_format == "application/xml": - # Add document root for XML. Note when xmltodict encounters a list, it produces separate tags for every item. - # Hence we end up with multiple query_type roots. To combat this we put it in a separate item dict. - response_data = serialize_to_xml({query_type: {"item": query_data}}) - else: - error = f'Invalid file format: "{file_format}".' - return flask.Response(error, 400, mimetype="application/json") +@auth.login_required +def handle_route(**kwargs): + route = ROUTES.get(str(request.url_rule.rule)) + function_args = dict(kwargs) + if "args" in route: + for arg in route["args"]: + function_args[arg[0]] = request.args.get(arg[0], arg[1]) + result = route["function"](db, **function_args) + return remove_rowids(result) - response = flask.Response(response_data, 200, mimetype=file_format) - return response - # Init the HTTP Server. - init_api_access_log(app) +def run_api_server(args): + global db # noqa: PLW0603 + # Initialise log and config + server.initialise_log_and_config(argparse.Namespace(**args)) + init_api_access_log() + # Connect to the database + db = database.get_connection(read_only=True) + # Add routes + for path in ROUTES.keys(): + app.add_url_rule(path, view_func=handle_route) + # Start the API server + app.run(host=config.RPC_HOST, port=config.RPC_PORT, debug=False) - # Run app server (blocking) - self.is_ready = True - app.run(host=config.RPC_HOST, port=config.RPC_PORT, threaded=True) - self.db.close() - return +def start(args): + api_process = Process(target=run_api_server, args=(vars(args),)) + api_process.start() -# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 +def stop(): + if api_process and api_process.is_alive(): + api_process.terminate() diff --git a/counterparty-lib/counterpartylib/lib/restapi.py b/counterparty-lib/counterpartylib/lib/restapi.py deleted file mode 100644 index 1bde190b92..0000000000 --- a/counterparty-lib/counterpartylib/lib/restapi.py +++ /dev/null @@ -1,121 +0,0 @@ -import argparse -import logging -import multiprocessing -from logging import handlers as logging_handlers -from multiprocessing import Process - -import flask -from flask import Flask, request -from flask_httpauth import HTTPBasicAuth - -from counterpartylib import server -from counterpartylib.lib import ( - config, - database, - ledger, -) - -multiprocessing.set_start_method("spawn", force=True) - -logger = logging.getLogger(config.LOGGER_NAME) -app = Flask(__name__) -auth = HTTPBasicAuth() -db = None -api_process = None - - -ROUTES = { - "/addresses/
/balances": { - "function": ledger.get_address_balances, - }, - "/assets//": { - "function": ledger.get_asset_info, - }, - "/assets//balances": { - "function": ledger.get_asset_balances, - }, - "/assets//orders": { - "function": ledger.get_orders_by_asset, - "args": [("status", "open")], - }, - "/orders/": { - "function": ledger.get_order, - }, - "/orders//matches": { - "function": ledger.get_order_matches_by_order, - "args": [("status", "pending")], - }, -} - - -@auth.verify_password -def verify_password(username, password): - return username == config.RPC_USER and password == config.RPC_PASSWORD - - -def init_api_access_log(): - """Initialize API logger.""" - werkzeug_loggers = (logging.getLogger("werkzeug"), app.logger) - - # Disable console logging... - for werkzeug_logger in werkzeug_loggers: # noqa: E741 - werkzeug_logger.setLevel(logging.CRITICAL) - werkzeug_logger.propagate = False - - # Log to file, if configured... - if config.API_LOG: - handler = logging_handlers.RotatingFileHandler( - config.API_LOG, "a", config.API_MAX_LOG_SIZE, config.API_MAX_LOG_COUNT - ) - for werkzeug_logger in werkzeug_loggers: # noqa: E741 - handler.setLevel(logging.DEBUG) - werkzeug_logger.addHandler(handler) - - flask.cli.show_server_banner = lambda *args: None - - -def remove_rowids(query_result): - """Remove the rowid field from the query result.""" - filtered_results = [] - for row in list(query_result): - if "rowid" in row: - del row["rowid"] - if "MAX(rowid)" in row: - del row["MAX(rowid)"] - filtered_results.append(row) - return filtered_results - - -@auth.login_required -def handle_route(**kwargs): - route = ROUTES.get(str(request.url_rule.rule)) - function_args = dict(kwargs) - if "args" in route: - for arg in route["args"]: - function_args[arg[0]] = request.args.get(arg[0], arg[1]) - result = route["function"](db, **function_args) - return remove_rowids(result) - - -def run_api_server(args): - global db # noqa: PLW0603 - # Initialise log and config - server.initialise_log_and_config(argparse.Namespace(**args)) - init_api_access_log() - # Connect to the database - db = database.get_connection(read_only=True) - # Add routes - for path in ROUTES.keys(): - app.add_url_rule(path, view_func=handle_route) - # Start the API server - app.run(host=config.RPC_HOST, port=config.RPC_PORT, debug=False) - - -def start(args): - api_process = Process(target=run_api_server, args=(vars(args),)) - api_process.start() - - -def stop(): - if api_process and api_process.is_alive(): - api_process.terminate() diff --git a/counterparty-lib/counterpartylib/lib/v1/api.py b/counterparty-lib/counterpartylib/lib/v1/api.py new file mode 100644 index 0000000000..a90dbc8e3c --- /dev/null +++ b/counterparty-lib/counterpartylib/lib/v1/api.py @@ -0,0 +1,1449 @@ +#! /usr/bin/python3 + +""" +The database connections are read‐only, so SQL injection attacks can’t be a +problem. +""" + +import collections +import decimal +import json +import logging +import os # noqa: F401 +import re +import sys +import threading +import time +import traceback +from logging import handlers as logging_handlers + +import requests # noqa: F401 + +D = decimal.Decimal +import binascii # noqa: E402 +import inspect # noqa: E402 +import math # noqa: E402 +import struct # noqa: E402, F401 + +import apsw # noqa: E402, F401 +import flask # noqa: E402 +import jsonrpc # noqa: E402 +from counterpartylib.lib import ( # noqa: E402 + backend, + blocks, # noqa: F401 + config, + database, + exceptions, + gettxinfo, + ledger, + message_type, + script, + transaction, + util, +) +from counterpartylib.lib.kickstart.blocks_parser import BlockchainParser # noqa: E402 +from counterpartylib.lib.messages import ( # noqa: E402 + bet, # noqa: F401 + broadcast, # noqa: F401 + btcpay, # noqa: F401 + burn, # noqa: F401 + cancel, # noqa: F401 + destroy, # noqa: F401 + dispenser, # noqa: F401 + dividend, # noqa: F401 + issuance, # noqa: F401 + order, # noqa: F401 + rps, # noqa: F401 + rpsresolve, # noqa: F401 + send, + sweep, # noqa: F401 +) +from counterpartylib.lib.messages.versions import enhanced_send # noqa: E402 +from flask import request # noqa: E402 +from flask_httpauth import HTTPBasicAuth # noqa: E402 +from jsonrpc import dispatcher # noqa: E402 +from jsonrpc.exceptions import JSONRPCDispatchException # noqa: E402 +from xmltodict import unparse as serialize_to_xml # noqa: E402 + +logger = logging.getLogger(config.LOGGER_NAME) + +API_TABLES = [ + "assets", + "balances", + "credits", + "debits", + "bets", + "bet_matches", + "broadcasts", + "btcpays", + "burns", + "cancels", + "destructions", + "dividends", + "issuances", + "orders", + "order_matches", + "sends", + "bet_expirations", + "order_expirations", + "bet_match_expirations", + "order_match_expirations", + "bet_match_resolutions", + "rps", + "rpsresolves", + "rps_matches", + "rps_expirations", + "rps_match_expirations", + "mempool", + "sweeps", + "dispensers", + "dispenses", + "transactions", +] + +VIEW_QUERIES = { + "balances": """ + SELECT *, MAX(rowid) AS rowid + FROM balances + GROUP BY address, asset + """, + "orders": """ + SELECT *, MAX(rowid) AS rowid + FROM orders + GROUP BY tx_hash + """, + "order_matches": """ + SELECT *, MAX(rowid) AS rowid + FROM order_matches + GROUP BY id + """, + "bets": """ + SELECT *, MAX(rowid) AS rowid + FROM bets + GROUP BY tx_hash + """, + "bets_matches": """ + SELECT *, MAX(rowid) AS rowid + FROM bet_matches + GROUP BY id + """, + "rps": """ + SELECT *, MAX(rowid) AS rowid + FROM rps + GROUP BY tx_hash + """, + "rps_matches": """ + SELECT *, MAX(rowid) AS rowid + FROM rps_matches + GROUP BY id + """, + "dispensers": """ + SELECT *, MAX(rowid) AS rowid + FROM dispensers + GROUP BY tx_hash + """, +} + +API_TRANSACTIONS = [ + "bet", + "broadcast", + "btcpay", + "burn", + "cancel", + "destroy", + "dividend", + "issuance", + "order", + "send", + "rps", + "rpsresolve", + "sweep", + "dispenser", +] + +COMMONS_ARGS = [ + "encoding", + "fee_per_kb", + "regular_dust_size", + "multisig_dust_size", + "op_return_value", + "pubkey", + "allow_unconfirmed_inputs", + "fee", + "fee_provided", + "estimate_fee_per_kb", + "estimate_fee_per_kb_nblocks", + "estimate_fee_per_kb_conf_target", + "estimate_fee_per_kb_mode", + "unspent_tx_hash", + "custom_inputs", + "dust_return_pubkey", + "disable_utxo_locks", + "extended_tx_info", + "p2sh_source_multisig_pubkeys", + "p2sh_source_multisig_pubkeys_required", + "p2sh_pretx_txid", +] + + +JSON_RPC_ERROR_API_COMPOSE = -32001 # code to use for error composing transaction result + +CURRENT_API_STATUS_CODE = None # is updated by the APIStatusPoller +CURRENT_API_STATUS_RESPONSE_JSON = None # is updated by the APIStatusPoller + + +class APIError(Exception): + pass + + +class BackendError(Exception): + pass + + +def check_backend_state(): + f"""Checks blocktime of last block to see if {config.BTC_NAME} Core is running behind.""" # noqa: B021 + block_count = backend.getblockcount() + block_hash = backend.getblockhash(block_count) + cblock = backend.getblock(block_hash) + time_behind = time.time() - cblock.nTime # TODO: Block times are not very reliable. + if time_behind > 60 * 60 * 2: # Two hours. + raise BackendError(f"Bitcoind is running about {round(time_behind / 3600)} hours behind.") + + # check backend index + blocks_behind = backend.getindexblocksbehind() + if blocks_behind > 5: + raise BackendError(f"Indexd is running {blocks_behind} blocks behind.") + + logger.debug("Backend state check passed.") + + +class DatabaseError(Exception): + pass + + +def check_database_state(db, blockcount): + f"""Checks {config.XCP_NAME} database to see if is caught up with backend.""" # noqa: B021 + if ledger.CURRENT_BLOCK_INDEX + 1 < blockcount: + raise DatabaseError(f"{config.XCP_NAME} database is behind backend.") + logger.debug("Database state check passed.") + return + + +# TODO: ALL queries EVERYWHERE should be done with these methods +def db_query(db, statement, bindings=(), callback=None, **callback_args): + """Allow direct access to the database in a parametrized manner.""" + cursor = db.cursor() + + # Sanitize. + forbidden_words = ["pragma", "attach", "database", "begin", "transaction"] + for word in forbidden_words: + # This will find if the forbidden word is in the statement as a whole word. For example, "transactions" will be allowed because the "s" at the end + if re.search(r"\b" + word + "\b", statement.lower()): + raise APIError(f"Forbidden word in query: '{word}'.") + + if callable(callback): + cursor.execute(statement, bindings) + for row in cursor: + callback(row, **callback_args) + results = None + else: + results = list(cursor.execute(statement, bindings)) + cursor.close() + return results + + +def get_rows( + db, + table, + filters=None, + filterop="AND", + order_by=None, + order_dir=None, + start_block=None, + end_block=None, + status=None, + limit=1000, + offset=0, + show_expired=True, +): + """SELECT * FROM wrapper. Filters results based on a filter data structure (as used by the API).""" + + if filters == None: # noqa: E711 + filters = [] + + def value_to_marker(value): + # if value is an array place holder is (?,?,?,..) + if isinstance(value, list): + return f"""({','.join(['?' for e in range(0, len(value))])})""" + else: + return """?""" + + # TODO: Document that op can be anything that SQLite3 accepts. + if not table or table.lower() not in API_TABLES: + raise APIError("Unknown table") + if filterop and filterop.upper() not in ["OR", "AND"]: + raise APIError("Invalid filter operator (OR, AND)") + if order_dir and order_dir.upper() not in ["ASC", "DESC"]: + raise APIError("Invalid order direction (ASC, DESC)") + if not isinstance(limit, int): + raise APIError("Invalid limit") + elif config.API_LIMIT_ROWS != 0 and limit > config.API_LIMIT_ROWS: + raise APIError(f"Limit should be lower or equal to {config.API_LIMIT_ROWS}") + elif config.API_LIMIT_ROWS != 0 and limit == 0: + raise APIError("Limit should be greater than 0") + if not isinstance(offset, int): + raise APIError("Invalid offset") + # TODO: accept an object: {'field1':'ASC', 'field2': 'DESC'} + if order_by and not re.compile("^[a-z0-9_]+$").match(order_by): + raise APIError("Invalid order_by, must be a field name") + + if isinstance(filters, dict): # single filter entry, convert to a one entry list + filters = [ + filters, + ] + elif not isinstance(filters, list): + filters = [] + + # TODO: Document this! (Each filter can be an ordered list.) + new_filters = [] + for filter_ in filters: + if type(filter_) in (list, tuple) and len(filter_) in [3, 4]: + new_filter = {"field": filter_[0], "op": filter_[1], "value": filter_[2]} + if len(filter_) == 4: + new_filter["case_sensitive"] = filter_[3] + new_filters.append(new_filter) + elif type(filter_) == dict: # noqa: E721 + new_filters.append(filter_) + else: + raise APIError("Unknown filter type") + filters = new_filters + + # validate filter(s) + for filter_ in filters: + for field in ["field", "op", "value"]: # should have all fields + if field not in filter_: + raise APIError(f"A specified filter is missing the '{field}' field") + if not isinstance(filter_["value"], (str, int, float, list)): + raise APIError(f"Invalid value for the field '{filter_['field']}'") + if isinstance(filter_["value"], list) and filter_["op"].upper() not in ["IN", "NOT IN"]: + raise APIError(f"Invalid value for the field '{filter_['field']}'") + if filter_["op"].upper() not in [ + "=", + "==", + "!=", + ">", + "<", + ">=", + "<=", + "IN", + "LIKE", + "NOT IN", + "NOT LIKE", + ]: + raise APIError(f"Invalid operator for the field '{filter_['field']}'") + if "case_sensitive" in filter_ and not isinstance(filter_["case_sensitive"], bool): + raise APIError("case_sensitive must be a boolean") + + # special case for memo and memo_hex field searches + if table == "sends": + adjust_get_sends_memo_filters(filters) + + # SELECT + source = VIEW_QUERIES[table] if table in VIEW_QUERIES else table + # no sql injection here + statement = f"""SELECT * FROM ({source})""" # nosec B608 # noqa: S608 + # WHERE + bindings = [] + conditions = [] + for filter_ in filters: + case_sensitive = False if "case_sensitive" not in filter_ else filter_["case_sensitive"] + if filter_["op"] == "LIKE" and case_sensitive == False: # noqa: E712 + filter_["field"] = f"""UPPER({filter_['field']})""" + filter_["value"] = filter_["value"].upper() + marker = value_to_marker(filter_["value"]) + conditions.append(f"""{filter_['field']} {filter_['op']} {marker}""") + if isinstance(filter_["value"], list): + bindings += filter_["value"] + else: + bindings.append(filter_["value"]) + # AND filters + more_conditions = [] + if table not in ["balances", "order_matches", "bet_matches"]: + if start_block != None: # noqa: E711 + more_conditions.append("""block_index >= ?""") + bindings.append(start_block) + if end_block != None: # noqa: E711 + more_conditions.append("""block_index <= ?""") + bindings.append(end_block) + elif table in ["order_matches", "bet_matches"]: + if start_block != None: # noqa: E711 + more_conditions.append("""tx0_block_index >= ?""") + bindings.append(start_block) + if end_block != None: # noqa: E711 + more_conditions.append("""tx1_block_index <= ?""") + bindings.append(end_block) + + # status + if isinstance(status, list) and len(status) > 0: + more_conditions.append(f"""status IN {value_to_marker(status)}""") + bindings += status + elif isinstance(status, str) and status != "": + more_conditions.append("""status == ?""") + bindings.append(status) + + # legacy filters + if not show_expired and table == "orders": + # Ignore BTC orders one block early. + expire_index = ledger.CURRENT_BLOCK_INDEX + 1 + more_conditions.append("""((give_asset == ? AND expire_index > ?) OR give_asset != ?)""") + bindings += [config.BTC, expire_index, config.BTC] + + if (len(conditions) + len(more_conditions)) > 0: + statement += """ WHERE""" + all_conditions = [] + if len(conditions) > 0: + all_conditions.append(f"""({f' {filterop.upper()} '.join(conditions)})""") + if len(more_conditions) > 0: + all_conditions.append(f"""({' AND '.join(more_conditions)})""") + statement += f""" {' AND '.join(all_conditions)}""" + + # ORDER BY + if order_by != None: # noqa: E711 + statement += f""" ORDER BY {order_by}""" + if order_dir != None: # noqa: E711 + statement += f""" {order_dir.upper()}""" + # LIMIT + if limit and limit > 0: + statement += f""" LIMIT {limit}""" + if offset: + statement += f""" OFFSET {offset}""" + + query_result = db_query(db, statement, tuple(bindings)) + + if table == "balances": + return adjust_get_balances_results(query_result, db) + + if table == "destructions": + return adjust_get_destructions_results(query_result) + + if table == "sends": + # for sends, handle the memo field properly + return adjust_get_sends_results(query_result) + + if table == "transactions": + # for transactions, handle the data field properly + return adjust_get_transactions_results(query_result) + + return remove_rowids(query_result) + + +def remove_rowids(query_result): + """Remove the rowid field from the query result.""" + filtered_results = [] + for row in list(query_result): + if "rowid" in row: + del row["rowid"] + if "MAX(rowid)" in row: + del row["MAX(rowid)"] + filtered_results.append(row) + + return filtered_results + + +def adjust_get_balances_results(query_result, db): + filtered_results = [] + assets = {} + for balances_row in list(query_result): + asset = balances_row["asset"] + if asset not in assets: + assets[asset] = ledger.is_divisible(db, asset) + + balances_row["divisible"] = assets[asset] + filtered_results.append(balances_row) + + return filtered_results + + +def adjust_get_destructions_results(query_result): + filtered_results = [] + for destruction_row in list(query_result): + if type(destruction_row["tag"]) == bytes: # noqa: E721 + destruction_row["tag"] = destruction_row["tag"].decode("utf-8", "ignore") + + filtered_results.append(destruction_row) + + return filtered_results + + +def adjust_get_sends_memo_filters(filters): + """Convert memo to a byte string. If memo_hex is supplied, attempt to decode it and use that instead.""" + for filter_ in filters: + if filter_["field"] == "memo": + filter_["value"] = bytes(filter_["value"], "utf-8") + if filter_["field"] == "memo_hex": + # search the indexed memo field with a byte string + filter_["field"] = "memo" + try: + filter_["value"] = bytes.fromhex(filter_["value"]) + except ValueError as e: # noqa: F841 + raise APIError("Invalid memo_hex value") # noqa: B904 + + +def adjust_get_sends_results(query_result): + """Format the memo_hex field. Try and decode the memo from a utf-8 uncoded string. Invalid utf-8 strings return an empty memo.""" + filtered_results = [] + for send_row in list(query_result): + try: + if send_row["memo"] is None: + send_row["memo_hex"] = None + send_row["memo"] = None + else: + if type(send_row["memo"]) == str: # noqa: E721 + send_row["memo"] = bytes(send_row["memo"], "utf-8") + + send_row["memo_hex"] = binascii.hexlify(send_row["memo"]).decode("utf8") + send_row["memo"] = send_row["memo"].decode("utf-8") + except UnicodeDecodeError: + send_row["memo"] = "" + filtered_results.append(send_row) + return filtered_results + + +def adjust_get_transactions_results(query_result): + """Format the data field. Try and decode the data from a utf-8 uncoded string. Invalid utf-8 strings return an empty data.""" + filtered_results = [] + for transaction_row in list(query_result): + transaction_row["data"] = transaction_row["data"].hex() + filtered_results.append(transaction_row) + return filtered_results + + +def compose_transaction( + db, + name, + params, + encoding="auto", + fee_per_kb=None, + estimate_fee_per_kb=None, + estimate_fee_per_kb_conf_target=config.ESTIMATE_FEE_CONF_TARGET, + estimate_fee_per_kb_mode=config.ESTIMATE_FEE_MODE, + regular_dust_size=config.DEFAULT_REGULAR_DUST_SIZE, + multisig_dust_size=config.DEFAULT_MULTISIG_DUST_SIZE, + op_return_value=config.DEFAULT_OP_RETURN_VALUE, + pubkey=None, + allow_unconfirmed_inputs=False, + fee=None, + fee_provided=0, + unspent_tx_hash=None, + custom_inputs=None, + dust_return_pubkey=None, + disable_utxo_locks=False, + extended_tx_info=False, + p2sh_source_multisig_pubkeys=None, + p2sh_source_multisig_pubkeys_required=None, + p2sh_pretx_txid=None, + old_style_api=True, + segwit=False, +): + """Create and return a transaction.""" + + # Get provided pubkeys. + if type(pubkey) == str: # noqa: E721 + provided_pubkeys = [pubkey] + elif type(pubkey) == list: # noqa: E721 + provided_pubkeys = pubkey + elif pubkey == None: # noqa: E711 + provided_pubkeys = [] + else: + assert False # noqa: B011 + + # Get additional pubkeys from `source` and `destination` params. + # Convert `source` and `destination` to pubkeyhash form. + for address_name in ["source", "destination"]: + if address_name in params: + address = params[address_name] + if isinstance(address, list): + # pkhshs = [] + # for addr in address: + # provided_pubkeys += script.extract_pubkeys(addr) + # pkhshs.append(script.make_pubkeyhash(addr)) + # params[address_name] = pkhshs + pass + else: + provided_pubkeys += script.extract_pubkeys(address) + params[address_name] = script.make_pubkeyhash(address) + + # Check validity of collected pubkeys. + for pubkey in provided_pubkeys: + if not script.is_fully_valid(binascii.unhexlify(pubkey)): + raise script.AddressError(f"invalid public key: {pubkey}") + + compose_method = sys.modules[f"counterpartylib.lib.messages.{name}"].compose + compose_params = inspect.getfullargspec(compose_method)[0] + missing_params = [p for p in compose_params if p not in params and p != "db"] + for param in missing_params: + params[param] = None + + # dont override fee_per_kb if specified + if fee_per_kb is not None: + estimate_fee_per_kb = False + else: + fee_per_kb = config.DEFAULT_FEE_PER_KB + + if "extended_tx_info" in params: + extended_tx_info = params["extended_tx_info"] + del params["extended_tx_info"] + + if "old_style_api" in params: + old_style_api = params["old_style_api"] + del params["old_style_api"] + + if "segwit" in params: + segwit = params["segwit"] + del params["segwit"] + + tx_info = compose_method(db, **params) + return transaction.construct( + db, + tx_info, + encoding=encoding, + fee_per_kb=fee_per_kb, + estimate_fee_per_kb=estimate_fee_per_kb, + estimate_fee_per_kb_conf_target=estimate_fee_per_kb_conf_target, + regular_dust_size=regular_dust_size, + multisig_dust_size=multisig_dust_size, + op_return_value=op_return_value, + provided_pubkeys=provided_pubkeys, + allow_unconfirmed_inputs=allow_unconfirmed_inputs, + exact_fee=fee, + fee_provided=fee_provided, + unspent_tx_hash=unspent_tx_hash, + custom_inputs=custom_inputs, + dust_return_pubkey=dust_return_pubkey, + disable_utxo_locks=disable_utxo_locks, + extended_tx_info=extended_tx_info, + p2sh_source_multisig_pubkeys=p2sh_source_multisig_pubkeys, + p2sh_source_multisig_pubkeys_required=p2sh_source_multisig_pubkeys_required, + p2sh_pretx_txid=p2sh_pretx_txid, + old_style_api=old_style_api, + segwit=segwit, + ) + + +def conditional_decorator(decorator, condition): + """Checks the condition and if True applies specified decorator.""" + + def gen_decorator(f): + if not condition: + return f + return decorator(f) + + return gen_decorator + + +def init_api_access_log(app): + """Initialize API logger.""" + loggers = (logging.getLogger("werkzeug"), app.logger) + + # Disable console logging... + for l in loggers: # noqa: E741 + l.setLevel(logging.CRITICAL) + l.propagate = False + + # Log to file, if configured... + if config.API_LOG: + handler = logging_handlers.RotatingFileHandler( + config.API_LOG, "a", config.API_MAX_LOG_SIZE, config.API_MAX_LOG_COUNT + ) + for l in loggers: # noqa: E741 + handler.setLevel(logging.DEBUG) + l.addHandler(handler) + + flask.cli.show_server_banner = lambda *args: None + + +class APIStatusPoller(threading.Thread): + """Perform regular checks on the state of the backend and the database.""" + + def __init__(self): + self.last_database_check = 0 + threading.Thread.__init__(self) + self.stop_event = threading.Event() + + def stop(self): + self.stop_event.set() + + def run(self): + logger.debug("Starting API Status Poller.") + global CURRENT_API_STATUS_CODE, CURRENT_API_STATUS_RESPONSE_JSON # noqa: PLW0603 + db = database.get_connection(read_only=True) + + while self.stop_event.is_set() != True: # noqa: E712 + try: + # Check that backend is running, communicable, and caught up with the blockchain. + # Check that the database has caught up with bitcoind. + if ( + time.time() - self.last_database_check > 10 * 60 + ): # Ten minutes since last check. + if not config.FORCE: + code = 11 + logger.debug("Checking backend state.") + check_backend_state() + code = 12 + logger.debug("Checking database state.") + check_database_state(db, backend.getblockcount()) + self.last_database_check = time.time() + except (BackendError, DatabaseError) as e: + exception_name = e.__class__.__name__ + exception_text = str(e) + logger.debug("API Status Poller: %s", exception_text) + jsonrpc_response = jsonrpc.exceptions.JSONRPCServerError( + message=exception_name, data=exception_text + ) + CURRENT_API_STATUS_CODE = code + CURRENT_API_STATUS_RESPONSE_JSON = jsonrpc_response.json.encode() + else: + CURRENT_API_STATUS_CODE = None + CURRENT_API_STATUS_RESPONSE_JSON = None + time.sleep(config.BACKEND_POLL_INTERVAL) + + +class APIServer(threading.Thread): + """Handle JSON-RPC API calls.""" + + def __init__(self, db=None): + self.db = db + self.is_ready = False + threading.Thread.__init__(self) + self.stop_event = threading.Event() + + def stop(self): + self.join() + self.stop_event.set() + + def run(self): + logger.info("Starting API Server.") + self.db = self.db or database.get_connection(read_only=True) + app = flask.Flask(__name__) + auth = HTTPBasicAuth() + + @auth.get_password + def get_pw(username): + if username == config.RPC_USER: + return config.RPC_PASSWORD + return None + + ###################### + # READ API + + # Generate dynamically get_{table} methods + def generate_get_method(table): + def get_method(**kwargs): + try: + return get_rows(self.db, table=table, **kwargs) + except TypeError as e: # TODO: generalise for all API methods + raise APIError(str(e)) # noqa: B904 + + return get_method + + for table in API_TABLES: + new_method = generate_get_method(table) + new_method.__name__ = f"get_{table}" + dispatcher.add_method(new_method) + + @dispatcher.add_method + def sql(query, bindings=None): + if bindings == None: # noqa: E711 + bindings = [] + return db_query(self.db, query, tuple(bindings)) + + ###################### + # WRITE/ACTION API + + # Generate dynamically create_{transaction} methods + def generate_create_method(tx): + def split_params(**kwargs): + transaction_args = {} + common_args = {} + private_key_wif = None + for key in kwargs: + if key in COMMONS_ARGS: + common_args[key] = kwargs[key] + elif key == "privkey": + private_key_wif = kwargs[key] + else: + transaction_args[key] = kwargs[key] + return transaction_args, common_args, private_key_wif + + def create_method(**kwargs): + try: + transaction_args, common_args, private_key_wif = split_params(**kwargs) + return compose_transaction( + self.db, name=tx, params=transaction_args, **common_args + ) + except ( + TypeError, + script.AddressError, + exceptions.ComposeError, + exceptions.TransactionError, + exceptions.BalanceError, + ) as error: + # TypeError happens when unexpected keyword arguments are passed in + error_msg = f"Error composing {tx} transaction via API: {str(error)}" + logging.warning(error_msg) + logging.warning(traceback.format_exc()) + raise JSONRPCDispatchException( # noqa: B904 + code=JSON_RPC_ERROR_API_COMPOSE, message=error_msg + ) + + return create_method + + for tx in API_TRANSACTIONS: + create_method = generate_create_method(tx) + create_method.__name__ = f"create_{tx}" + dispatcher.add_method(create_method) + + @dispatcher.add_method + def get_messages(block_index): + if not isinstance(block_index, int): + raise APIError("block_index must be an integer.") + + messages = ledger.get_messages(self.db, block_index=block_index) + return messages + + @dispatcher.add_method + def get_messages_by_index(message_indexes): + """Get specific messages from the feed, based on the message_index. + + @param message_index: A single index, or a list of one or more message indexes to retrieve. + """ + if not isinstance(message_indexes, list): + message_indexes = [ + message_indexes, + ] + for idx in message_indexes: # make sure the data is clean + if not isinstance(idx, int): + raise APIError("All items in message_indexes are not integers") + + messages = ledger.get_messages(self.db, message_index_in=message_indexes) + return messages + + @dispatcher.add_method + def get_supply(asset): + if asset == "BTC": + return backend.get_btc_supply(normalize=False) + elif asset == "XCP": + return ledger.xcp_supply(self.db) + else: + asset = ledger.resolve_subasset_longname(self.db, asset) + return ledger.asset_supply(self.db, asset) + + @dispatcher.add_method + def get_xcp_supply(): + logger.warning("Deprecated method: `get_xcp_supply`") + return ledger.xcp_supply(self.db) + + @dispatcher.add_method + def get_asset_info(assets=None, asset=None): + if asset is not None: + assets = [asset] + + if not isinstance(assets, list): + raise APIError( + "assets must be a list of asset names, even if it just contains one entry" + ) + assets_info = [] + for asset in assets: + asset = ledger.resolve_subasset_longname(self.db, asset) # noqa: PLW2901 + + # BTC and XCP. + if asset in [config.BTC, config.XCP]: + if asset == config.BTC: + supply = backend.get_btc_supply(normalize=False) + else: + supply = ledger.xcp_supply(self.db) + + assets_info.append( + { + "asset": asset, + "asset_longname": None, + "owner": None, + "divisible": True, + "locked": False, + "supply": supply, + "description": "", + "issuer": None, + } + ) + continue + + # User‐created asset. + cursor = self.db.cursor() + issuances = ledger.get_issuances(self.db, asset=asset, status="valid", first=True) + cursor.close() + if not issuances: + continue # asset not found, most likely + else: + last_issuance = issuances[-1] + locked = False + for e in issuances: + if e["locked"]: + locked = True + assets_info.append( + { + "asset": asset, + "asset_longname": last_issuance["asset_longname"], + "owner": last_issuance["issuer"], + "divisible": bool(last_issuance["divisible"]), + "locked": locked, + "supply": ledger.asset_supply(self.db, asset), + "description": last_issuance["description"], + "issuer": last_issuance["issuer"], + } + ) + return assets_info + + @dispatcher.add_method + def get_block_info(block_index): + assert isinstance(block_index, int) + cursor = self.db.cursor() + cursor.execute("""SELECT * FROM blocks WHERE block_index = ?""", (block_index,)) + blocks = list(cursor) # noqa: F811 + if len(blocks) == 1: + block = blocks[0] + elif len(blocks) == 0: + raise exceptions.DatabaseError("No blocks found.") + else: + assert False # noqa: B011 + cursor.close() + return block + + @dispatcher.add_method + def fee_per_kb(conf_target=config.ESTIMATE_FEE_CONF_TARGET, mode=config.ESTIMATE_FEE_MODE): + return backend.fee_per_kb(conf_target, mode) + + @dispatcher.add_method + def get_blocks(block_indexes, min_message_index=None): + """fetches block info and messages for the specified block indexes + @param min_message_index: Retrieve blocks from the message feed on or after this specific message index + (useful since blocks may appear in the message feed more than once, if a reorg occurred). Note that + if this parameter is not specified, the messages for the first block will be returned. + """ + if not isinstance(block_indexes, (list, tuple)): + raise APIError("block_indexes must be a list of integers.") + if len(block_indexes) >= 250: + raise APIError("can only specify up to 250 indexes at a time.") + for block_index in block_indexes: + if not isinstance(block_index, int): + raise APIError("block_indexes must be a list of integers.") + + cursor = self.db.cursor() + + block_indexes_placeholder = f"({','.join(['?'] * len(block_indexes))})" + # no sql injection here + cursor.execute( + f"SELECT * FROM blocks WHERE block_index IN ({block_indexes_placeholder}) ORDER BY block_index ASC", # nosec B608 # noqa: S608 + block_indexes, + ) + blocks = cursor.fetchall() # noqa: F811 + + messages = collections.deque(ledger.get_messages(self.db, block_index_in=block_indexes)) + + # Discard any messages less than min_message_index + if min_message_index: + while len(messages) and messages[0]["message_index"] < min_message_index: + messages.popleft() + + # Packages messages into their appropriate block in the data structure to be returned + for block in blocks: + block["_messages"] = [] + while len(messages) and messages[0]["block_index"] == block["block_index"]: + block["_messages"].append(messages.popleft()) + # NOTE: if len(messages), then we're only returning the messages for the first set of blocks before the reorg + + cursor.close() + return blocks + + @dispatcher.add_method + def get_running_info(): + latest_block_index = backend.getblockcount() + + try: + check_database_state(self.db, latest_block_index) + except DatabaseError: + caught_up = False + else: + caught_up = True + + try: + cursor = self.db.cursor() + blocks = list( + cursor.execute( + """SELECT * FROM blocks WHERE block_index = ?""", + (ledger.CURRENT_BLOCK_INDEX,), + ) + ) + assert len(blocks) == 1 + last_block = blocks[0] + cursor.close() + except: # noqa: E722 + last_block = None + + try: + last_message = ledger.last_message(self.db) + except: # noqa: E722 + last_message = None + + try: + indexd_blocks_behind = backend.getindexblocksbehind() + except: # noqa: E722 + indexd_blocks_behind = latest_block_index if latest_block_index > 0 else 999999 + indexd_caught_up = indexd_blocks_behind <= 1 + + server_ready = caught_up and indexd_caught_up + + return { + "server_ready": server_ready, + "db_caught_up": caught_up, + "bitcoin_block_count": latest_block_index, + "last_block": last_block, + "indexd_caught_up": indexd_caught_up, + "indexd_blocks_behind": indexd_blocks_behind, + "last_message_index": last_message["message_index"] if last_message else -1, + "api_limit_rows": config.API_LIMIT_ROWS, + "running_testnet": config.TESTNET, + "running_regtest": config.REGTEST, + "running_testcoin": config.TESTCOIN, + "version_major": config.VERSION_MAJOR, + "version_minor": config.VERSION_MINOR, + "version_revision": config.VERSION_REVISION, + } + + @dispatcher.add_method + def get_element_counts(): + counts = {} + cursor = self.db.cursor() + for element in [ + "transactions", + "blocks", + "debits", + "credits", + "balances", + "sends", + "orders", + "order_matches", + "btcpays", + "issuances", + "broadcasts", + "bets", + "bet_matches", + "dividends", + "burns", + "cancels", + "order_expirations", + "bet_expirations", + "order_match_expirations", + "bet_match_expirations", + "messages", + "destructions", + ]: + # no sql injection here, element is hardcoded + cursor.execute(f"SELECT COUNT(*) AS count FROM {element}") # nosec B608 # noqa: S608 + count_list = cursor.fetchall() + assert len(count_list) == 1 + counts[element] = count_list[0]["count"] + cursor.close() + return counts + + @dispatcher.add_method + def get_asset_names(longnames=False): + all_assets = ledger.get_valid_assets(self.db) + if longnames: + names = [ + {"asset": row["asset"], "asset_longname": row["asset_longname"]} + for row in all_assets + ] + else: + names = [row["asset"] for row in all_assets] + return names + + @dispatcher.add_method + def get_asset_longnames(): + return get_asset_names(longnames=True) + + @dispatcher.add_method + def get_holder_count(asset): + asset = ledger.resolve_subasset_longname(self.db, asset) + holders = ledger.holders(self.db, asset, True) + addresses = [] + for holder in holders: + addresses.append(holder["address"]) + return {asset: len(set(addresses))} + + @dispatcher.add_method + def get_holders(asset): + asset = ledger.resolve_subasset_longname(self.db, asset) + holders = ledger.holders(self.db, asset, True) + return holders + + @dispatcher.add_method + def search_raw_transactions(address, unconfirmed=True, only_tx_hashes=False): + return backend.search_raw_transactions( + address, unconfirmed=unconfirmed, only_tx_hashes=only_tx_hashes + ) + + @dispatcher.add_method + def get_oldest_tx(address): + return backend.get_oldest_tx(address) + + @dispatcher.add_method + def get_unspent_txouts(address, unconfirmed=False, unspent_tx_hash=None, order_by=None): + results = backend.get_unspent_txouts( + address, unconfirmed=unconfirmed, unspent_tx_hash=unspent_tx_hash + ) + if order_by is None: + return results + else: + order_key = order_by + reverse = False + if order_key.startswith("-"): + order_key = order_key[1:] + reverse = True + return sorted(results, key=lambda x: x[order_key], reverse=reverse) + + @dispatcher.add_method + def getrawtransaction(tx_hash, verbose=False, skip_missing=False): + return backend.getrawtransaction(tx_hash, verbose=verbose, skip_missing=skip_missing) + + @dispatcher.add_method + def getrawtransaction_batch(txhash_list, verbose=False, skip_missing=False): + return backend.getrawtransaction_batch( + txhash_list, verbose=verbose, skip_missing=skip_missing + ) + + @dispatcher.add_method + def get_tx_info(tx_hex, block_index=None): + # block_index mandatory for transactions before block 335000 + source, destination, btc_amount, fee, data, extra = gettxinfo.get_tx_info( + self.db, BlockchainParser().deserialize_tx(tx_hex), block_index=block_index + ) + return source, destination, btc_amount, fee, util.hexlify(data) if data else "" + + @dispatcher.add_method + def unpack(data_hex): + data = binascii.unhexlify(data_hex) + message_type_id, message = message_type.unpack(data) + + # TODO: Enabled only for `send`. + if message_type_id == send.ID: + unpack_method = send.unpack + elif message_type_id == enhanced_send.ID: + unpack_method = enhanced_send.unpack + else: + raise APIError("unsupported message type") + unpacked = unpack_method(self.db, message, ledger.CURRENT_BLOCK_INDEX) + return message_type_id, unpacked + + @dispatcher.add_method + # TODO: Rename this method. + def search_pubkey(pubkeyhash, provided_pubkeys=None): + return backend.pubkeyhash_to_pubkey(pubkeyhash, provided_pubkeys=provided_pubkeys) + + @dispatcher.add_method + def get_dispenser_info(tx_hash=None, tx_index=None): + cursor = self.db.cursor() # noqa: F841 + + if tx_hash is None and tx_index is None: + raise APIError("You must provided a tx hash or a tx index") + + dispensers = [] + if tx_hash is not None: + dispensers = get_dispenser_info(self.db, tx_hash=tx_hash) + else: + dispensers = get_dispenser_info(self.db, tx_index=tx_index) + + if len(dispensers) == 1: + dispenser = dispensers[0] + oracle_price = "" + satoshi_price = "" + fiat_price = "" + oracle_price_last_updated = "" + oracle_fiat_label = "" + + if dispenser["oracle_address"] != None: # noqa: E711 + fiat_price = util.satoshirate_to_fiat(dispenser["satoshirate"]) + oracle_price, oracle_fee, oracle_fiat_label, oracle_price_last_updated = ( + ledger.get_oracle_last_price( + self.db, dispenser["oracle_address"], ledger.CURRENT_BLOCK_INDEX + ) + ) + + if oracle_price > 0: + satoshi_price = math.ceil((fiat_price / oracle_price) * config.UNIT) + else: + raise APIError("Last oracle price is zero") + + return { + "tx_index": dispenser["tx_index"], + "tx_hash": dispenser["tx_hash"], + "block_index": dispenser["block_index"], + "source": dispenser["source"], + "asset": dispenser["asset"], + "give_quantity": dispenser["give_quantity"], + "escrow_quantity": dispenser["escrow_quantity"], + "mainchainrate": dispenser["satoshirate"], + "fiat_price": fiat_price, + "fiat_unit": oracle_fiat_label, + "oracle_price": oracle_price, + "satoshi_price": satoshi_price, + "status": dispenser["status"], + "give_remaining": dispenser["give_remaining"], + "oracle_address": dispenser["oracle_address"], + "oracle_price_last_updated": oracle_price_last_updated, + "asset_longname": dispenser["asset_longname"], + } + + return {} + + def _set_cors_headers(response): + if not config.RPC_NO_ALLOW_CORS: + response.headers["Access-Control-Allow-Origin"] = "*" + response.headers["Access-Control-Allow-Methods"] = "GET, POST, OPTIONS" + response.headers["Access-Control-Allow-Headers"] = ( + "DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization" + ) + + ##### REST ROUTES ##### + + @app.route("/healthz", methods=["GET"]) + def handle_healthz(): + msg, code = "Healthy", 200 + + type_ = request.args.get("type", "heavy") + + try: + if type_ == "light": + logger.debug("Performing light healthz check.") + latest_block_index = backend.getblockcount() + check_database_state(self.db, latest_block_index) + else: + logger.debug("Performing heavy healthz check.") + compose_transaction( + self.db, + name="send", + params={ + "source": config.UNSPENDABLE, + "destination": config.UNSPENDABLE, + "asset": config.XCP, + "quantity": 100000000, + }, + allow_unconfirmed_inputs=True, + fee=1000, + ) + except Exception: + msg, code = "Unhealthy", 503 + + return flask.Response(msg, code, mimetype="application/json") + + @app.route("/", defaults={"args_path": ""}, methods=["GET", "POST", "OPTIONS"]) + @app.route("/", methods=["GET", "POST", "OPTIONS"]) + # Only require authentication if RPC_PASSWORD is set. + @conditional_decorator(auth.login_required, hasattr(config, "RPC_PASSWORD")) + def handle_root(args_path): + """Handle all paths, decide where to forward the query.""" + if ( + args_path == "" + or args_path.startswith("api/") + or args_path.startswith("API/") + or args_path.startswith("rpc/") + or args_path.startswith("RPC/") + ): + if flask.request.method == "POST": + # Need to get those here because it might not be available in this aux function. + request_json = flask.request.get_data().decode("utf-8") + response = handle_rpc_post(request_json) + return response + elif flask.request.method == "OPTIONS": + response = handle_rpc_options() + return response + else: + error = "Invalid method." + return flask.Response(error, 405, mimetype="application/json") + elif args_path.startswith("rest/") or args_path.startswith("REST/"): + if flask.request.method == "GET" or flask.request.method == "POST": + # Pass the URL path without /REST/ part and Flask request object. + rest_path = args_path.split("/", 1)[1] + response = handle_rest(rest_path, flask.request) + return response + else: + error = "Invalid method." + return flask.Response(error, 405, mimetype="application/json") + else: + # Not found + return flask.Response(None, 404, mimetype="application/json") + + ###################### + # JSON-RPC API + ###################### + def handle_rpc_options(): + response = flask.Response("", 204) + _set_cors_headers(response) + return response + + def handle_rpc_post(request_json): + """Handle /API/ POST route. Call relevant get_rows/create_transaction wrapper.""" + # Check for valid request format. + try: + request_data = json.loads(request_json) + assert ( + "id" in request_data + and request_data["jsonrpc"] == "2.0" + and request_data["method"] + ) + # params may be omitted + except: # noqa: E722 + obj_error = jsonrpc.exceptions.JSONRPCInvalidRequest( + data="Invalid JSON-RPC 2.0 request format" + ) + return flask.Response(obj_error.json.encode(), 400, mimetype="application/json") + + # Only arguments passed as a `dict` are supported. + if request_data.get("params", None) and not isinstance(request_data["params"], dict): + obj_error = jsonrpc.exceptions.JSONRPCInvalidRequest( + data="Arguments must be passed as a JSON object (list of unnamed arguments not supported)" + ) + return flask.Response(obj_error.json.encode(), 400, mimetype="application/json") + + # Return an error if the API Status Poller checks fail. + if not config.FORCE and CURRENT_API_STATUS_CODE: + return flask.Response( + CURRENT_API_STATUS_RESPONSE_JSON, 503, mimetype="application/json" + ) + + # Answer request normally. + # NOTE: `UnboundLocalError: local variable 'output' referenced before assignment` means the method doesn’t return anything. + jsonrpc_response = jsonrpc.JSONRPCResponseManager.handle(request_json, dispatcher) + response = flask.Response( + jsonrpc_response.json.encode(), 200, mimetype="application/json" + ) + _set_cors_headers(response) + return response + + ###################### + # HTTP REST API + ###################### + def handle_rest(path_args, flask_request): + """Handle /REST/ route. Query the database using get_rows or create transaction using compose_transaction.""" + url_action = flask_request.path.split("/")[-1] + if url_action == "compose": + compose = True + elif url_action == "get": + compose = False + else: + error = f'Invalid action "{url_action}".' + return flask.Response(error, 400, mimetype="application/json") + + # Get all arguments passed via URL. + url_args = path_args.split("/") + try: + query_type = url_args.pop(0).lower() + except IndexError: + error = "No query_type provided." + return flask.Response(error, 400, mimetype="application/json") + # Check if message type or table name are valid. + if (compose and query_type not in API_TRANSACTIONS) or ( + not compose and query_type not in API_TABLES + ): + error = f'No such query type in supported queries: "{query_type}".' + return flask.Response(error, 400, mimetype="application/json") + + # Parse the additional arguments. + extra_args = flask_request.args.items() + query_data = {} + + if compose: + common_args = {} + transaction_args = {} + for key, value in extra_args: + # Determine value type. + try: + value = int(value) # noqa: PLW2901 + except ValueError: + try: + value = float(value) # noqa: PLW2901 + except ValueError: + pass + # Split keys into common and transaction-specific arguments. Discard the privkey. + if key in COMMONS_ARGS: + common_args[key] = value + elif key == "privkey": + pass + else: + transaction_args[key] = value + + # Must have some additional transaction arguments. + if not len(transaction_args): + error = "No transaction arguments provided." + return flask.Response(error, 400, mimetype="application/json") + + # Compose the transaction. + try: + query_data = compose_transaction( + self.db, name=query_type, params=transaction_args, **common_args + ) + except ( + script.AddressError, + exceptions.ComposeError, + exceptions.TransactionError, + exceptions.BalanceError, + ) as error: + error_msg = logging.warning( + f"{error.__class__.__name__} -- error composing {query_type} transaction via API: {error}" + ) + return flask.Response(error_msg, 400, mimetype="application/json") + else: + # Need to de-generate extra_args to pass it through. + query_args = dict([item for item in extra_args]) + operator = query_args.pop("op", "AND") + # Put the data into specific dictionary format. + data_filter = [ + {"field": key, "op": "==", "value": value} + for (key, value) in query_args.items() + ] + + # Run the query. + try: + query_data = get_rows( + self.db, table=query_type, filters=data_filter, filterop=operator + ) + except APIError as error: # noqa: F841 + return flask.Response("API Error", 400, mimetype="application/json") + + # See which encoding to choose from. + file_format = flask_request.headers["Accept"] + # JSON as default. + if file_format == "application/json" or file_format == "*/*": + response_data = json.dumps(query_data) + elif file_format == "application/xml": + # Add document root for XML. Note when xmltodict encounters a list, it produces separate tags for every item. + # Hence we end up with multiple query_type roots. To combat this we put it in a separate item dict. + response_data = serialize_to_xml({query_type: {"item": query_data}}) + else: + error = f'Invalid file format: "{file_format}".' + return flask.Response(error, 400, mimetype="application/json") + + response = flask.Response(response_data, 200, mimetype=file_format) + return response + + # Init the HTTP Server. + init_api_access_log(app) + + # Run app server (blocking) + self.is_ready = True + app.run(host=config.RPC_HOST, port=config.RPC_PORT, threaded=True) + + self.db.close() + return + + +# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 diff --git a/counterparty-lib/counterpartylib/server.py b/counterparty-lib/counterpartylib/server.py index 6e5891f865..8c08fb3f3d 100755 --- a/counterparty-lib/counterpartylib/server.py +++ b/counterparty-lib/counterpartylib/server.py @@ -29,11 +29,11 @@ database, ledger, log, - restapi, transaction, util, ) from counterpartylib.lib import kickstart as kickstarter +from counterpartylib.lib.v1 import api as api_v1 logger = logging.getLogger(config.LOGGER_NAME) D = decimal.Decimal @@ -58,7 +58,7 @@ def sigterm_handler(_signo, _stack_frame): assert False # noqa: B011 logger.info(f"Received {signal_name}.") - restapi.stop() + api.stop() if "api_server" in globals(): logger.info("Stopping API server.") @@ -668,17 +668,17 @@ def start_all(args): if args.legacy_api: # API Status Poller. - api_status_poller = api.APIStatusPoller() + api_status_poller = api_v1.APIStatusPoller() api_status_poller.daemon = True api_status_poller.start() # API Server. - api_server = api.APIServer() + api_server = api_v1.APIServer() api_server.daemon = True api_server.start() else: # REST API Server. - restapi.start(args) + api.start(args) # Server diff --git a/counterparty-lib/counterpartylib/test/bytespersigop_test.py b/counterparty-lib/counterpartylib/test/bytespersigop_test.py index 19fd451747..8bc6ffd727 100644 --- a/counterparty-lib/counterpartylib/test/bytespersigop_test.py +++ b/counterparty-lib/counterpartylib/test/bytespersigop_test.py @@ -1,19 +1,14 @@ import binascii -import pprint # noqa: F401 import tempfile import bitcoin as bitcoinlib -import pytest # noqa: F401 -from counterpartylib.lib import api, blocks, exceptions, ledger, transaction, util # noqa: F401 -from counterpartylib.test import ( - conftest, # noqa: F401 - util_test, -) +from counterpartylib.lib import ledger +from counterpartylib.lib.v1 import api +from counterpartylib.test import util_test from counterpartylib.test.fixtures.params import ADDR # this is require near the top to do setup of the test suite -from counterpartylib.test.fixtures.params import DEFAULT_PARAMS as DP # noqa: F401 from counterpartylib.test.util_test import CURR_DIR FIXTURE_SQL_FILE = CURR_DIR + "/fixtures/scenarios/unittest_fixture.sql" diff --git a/counterparty-lib/counterpartylib/test/complex_unit_test.py b/counterparty-lib/counterpartylib/test/complex_unit_test.py index 3f8603dfe6..8ae48a90fa 100644 --- a/counterparty-lib/counterpartylib/test/complex_unit_test.py +++ b/counterparty-lib/counterpartylib/test/complex_unit_test.py @@ -1,12 +1,11 @@ -import json import pprint # noqa: F401 import tempfile import pytest -import requests from apsw import ConstraintError -from counterpartylib.lib import api, blocks, config, ledger, util +from counterpartylib.lib import blocks, ledger, util +from counterpartylib.lib.v1 import api # this is require near the top to do setup of the test suite from counterpartylib.test import ( @@ -331,6 +330,7 @@ def test_updated_tables_endpoints(): } +""" @pytest.mark.usefixtures("api_server") def test_new_get_balances_by_address(): alice = ADDR[0] @@ -570,3 +570,4 @@ def test_messages_table(server_db): for row in result: bindings = json.loads(row["bindings"]) assert isinstance(bindings, dict) + """ diff --git a/counterparty-lib/counterpartylib/test/conftest.py b/counterparty-lib/counterpartylib/test/conftest.py index a0ac913b92..a17fb404e2 100644 --- a/counterparty-lib/counterpartylib/test/conftest.py +++ b/counterparty-lib/counterpartylib/test/conftest.py @@ -18,7 +18,8 @@ from pycoin.coins.bitcoin import Tx # noqa: F401 from counterpartylib import server -from counterpartylib.lib import api, arc4, config, database, ledger, log, script, util +from counterpartylib.lib import arc4, config, database, ledger, log, script, util +from counterpartylib.lib.v1 import api from counterpartylib.test import util_test from counterpartylib.test.fixtures.params import DEFAULT_PARAMS from counterpartylib.test.fixtures.scenarios import INTEGRATION_SCENARIOS diff --git a/counterparty-lib/counterpartylib/test/estimate_fee_per_kb_test.py b/counterparty-lib/counterpartylib/test/estimate_fee_per_kb_test.py index 12d8a1036b..3ec95ca4fb 100644 --- a/counterparty-lib/counterpartylib/test/estimate_fee_per_kb_test.py +++ b/counterparty-lib/counterpartylib/test/estimate_fee_per_kb_test.py @@ -4,7 +4,8 @@ import bitcoin as bitcoinlib -from counterpartylib.lib import api, backend, transaction +from counterpartylib.lib import (backend, transaction) +from counterpartylib.lib.v1 import api from counterpartylib.test import ( util_test, ) diff --git a/counterparty-lib/counterpartylib/test/p2sh_encoding_test.py b/counterparty-lib/counterpartylib/test/p2sh_encoding_test.py index 35ded5283b..6aa9e31eef 100644 --- a/counterparty-lib/counterpartylib/test/p2sh_encoding_test.py +++ b/counterparty-lib/counterpartylib/test/p2sh_encoding_test.py @@ -1,26 +1,13 @@ import binascii import hashlib import logging -import math # noqa: F401 -import pprint # noqa: F401 import tempfile import time import bitcoin as bitcoinlib import pytest -# this is require near the top to do setup of the test suite -from counterpartylib.test import ( - conftest, # noqa: F401 - util_test, -) -from counterpartylib.test.fixtures.params import ADDR, DP, P2SH_ADDR -from counterpartylib.test.util_test import CURR_DIR - -logger = logging.getLogger(__name__) - from counterpartylib.lib import ( # noqa: E402 - api, backend, config, exceptions, @@ -31,6 +18,17 @@ ) from counterpartylib.lib.kickstart.blocks_parser import BlockchainParser # noqa: E402 from counterpartylib.lib.transaction_helper import p2sh_encoding, serializer # noqa: E402, F401 +from counterpartylib.lib.v1 import api + +# this is require near the top to do setup of the test suite +from counterpartylib.test import ( + conftest, # noqa: F401 + util_test, +) +from counterpartylib.test.fixtures.params import ADDR, DP, P2SH_ADDR +from counterpartylib.test.util_test import CURR_DIR + +logger = logging.getLogger(__name__) FIXTURE_SQL_FILE = CURR_DIR + "/fixtures/scenarios/unittest_fixture.sql" FIXTURE_DB = tempfile.gettempdir() + "/fixtures.unittest_fixture.db" diff --git a/counterparty-lib/counterpartylib/test/util_test.py b/counterparty-lib/counterpartylib/test/util_test.py index d0ad1b3fcc..25825a34cd 100644 --- a/counterparty-lib/counterpartylib/test/util_test.py +++ b/counterparty-lib/counterpartylib/test/util_test.py @@ -803,7 +803,10 @@ def check_outputs( try: tested_module = sys.modules[f"counterpartylib.lib.{tx_name}"] except KeyError: # TODO: hack - tested_module = sys.modules[f"counterpartylib.lib.messages.{tx_name}"] + if tx_name == "api": + tested_module = sys.modules["counterpartylib.lib.v1.api"] + else: + tested_module = sys.modules[f"counterpartylib.lib.messages.{tx_name}"] tested_method = getattr(tested_module, method) with MockProtocolChangesContext(**(mock_protocol_changes or {})): From c1bf32bebb0b3b565322a3c6d55349b5f3625ea0 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 5 Apr 2024 17:27:25 +0200 Subject: [PATCH 006/280] --legacy-api -> --enable-v1-api --- counterparty-core/counterpartycore/server.py | 2 +- counterparty-lib/counterpartylib/server.py | 2 +- .../counterpartylib/test/p2sh_encoding_test.py | 7 +++---- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index 1f529504b0..5602c997cb 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -228,7 +228,7 @@ }, ], [ - ("--legacy-api",), + ("--enable-v1-api",), {"action": "store_true", "default": False, "help": "Use legacy API (Deprecated)"}, ], ] diff --git a/counterparty-lib/counterpartylib/server.py b/counterparty-lib/counterpartylib/server.py index 8c08fb3f3d..84e531d7e7 100755 --- a/counterparty-lib/counterpartylib/server.py +++ b/counterparty-lib/counterpartylib/server.py @@ -666,7 +666,7 @@ def start_all(args): # initilise_config transaction.initialise() - if args.legacy_api: + if args.enable_v1_api: # API Status Poller. api_status_poller = api_v1.APIStatusPoller() api_status_poller.daemon = True diff --git a/counterparty-lib/counterpartylib/test/p2sh_encoding_test.py b/counterparty-lib/counterpartylib/test/p2sh_encoding_test.py index 6aa9e31eef..78267f404a 100644 --- a/counterparty-lib/counterpartylib/test/p2sh_encoding_test.py +++ b/counterparty-lib/counterpartylib/test/p2sh_encoding_test.py @@ -7,17 +7,16 @@ import bitcoin as bitcoinlib import pytest -from counterpartylib.lib import ( # noqa: E402 +from counterpartylib.lib import ( backend, config, exceptions, gettxinfo, ledger, script, - util, # noqa: F401 ) -from counterpartylib.lib.kickstart.blocks_parser import BlockchainParser # noqa: E402 -from counterpartylib.lib.transaction_helper import p2sh_encoding, serializer # noqa: E402, F401 +from counterpartylib.lib.kickstart.blocks_parser import BlockchainParser +from counterpartylib.lib.transaction_helper import p2sh_encoding from counterpartylib.lib.v1 import api # this is require near the top to do setup of the test suite From ad47e52ac8ba84a1dedd457f6857edbcd2c6aa8a Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 5 Apr 2024 17:32:46 +0200 Subject: [PATCH 007/280] lint --- .../counterpartylib/lib/ledger.py | 7 +- counterparty-lib/counterpartylib/server.py | 80 +++++++++---------- 2 files changed, 44 insertions(+), 43 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/ledger.py b/counterparty-lib/counterpartylib/lib/ledger.py index 82c0ea3979..e419b3f48e 100644 --- a/counterparty-lib/counterpartylib/lib/ledger.py +++ b/counterparty-lib/counterpartylib/lib/ledger.py @@ -626,11 +626,12 @@ def get_asset_info(db, asset): if asset_name == config.BTC: asset_info["supply"] = backend.get_btc_supply(normalize=False) return asset_info - elif asset_name == config.XCP: + + if asset_name == config.XCP: asset_info["supply"] = xcp_supply(db) return asset_info - else: - asset_info["supply"] = asset_supply(db, asset_name) + + asset_info["supply"] = asset_supply(db, asset_name) cursor = db.cursor() query = """ diff --git a/counterparty-lib/counterpartylib/server.py b/counterparty-lib/counterpartylib/server.py index 84e531d7e7..14ff81e7a3 100755 --- a/counterparty-lib/counterpartylib/server.py +++ b/counterparty-lib/counterpartylib/server.py @@ -549,46 +549,46 @@ def initialise_config( def initialise_log_and_config(args): - config_args = dict( - database_file=args.database_file, - testnet=args.testnet, - testcoin=args.testcoin, - regtest=args.regtest, - customnet=args.customnet, - api_limit_rows=args.api_limit_rows, - backend_connect=args.backend_connect, - backend_port=args.backend_port, - backend_user=args.backend_user, - backend_password=args.backend_password, - backend_ssl=args.backend_ssl, - backend_ssl_no_verify=args.backend_ssl_no_verify, - backend_poll_interval=args.backend_poll_interval, - indexd_connect=args.indexd_connect, - indexd_port=args.indexd_port, - rpc_host=args.rpc_host, - rpc_port=args.rpc_port, - rpc_user=args.rpc_user, - rpc_password=args.rpc_password, - rpc_no_allow_cors=args.rpc_no_allow_cors, - requests_timeout=args.requests_timeout, - rpc_batch_size=args.rpc_batch_size, - check_asset_conservation=not args.no_check_asset_conservation, - force=args.force, - p2sh_dust_return_pubkey=args.p2sh_dust_return_pubkey, - utxo_locks_max_addresses=args.utxo_locks_max_addresses, - utxo_locks_max_age=args.utxo_locks_max_age, - ) - log_args = dict( - verbose=args.verbose, - quiet=args.quiet, - log_file=args.log_file, - api_log_file=args.api_log_file, - no_log_files=args.no_log_files, - testnet=args.testnet, - testcoin=args.testcoin, - regtest=args.regtest, - json_log=args.json_log, - ) + config_args = { + "database_file": args.database_file, + "testnet": args.testnet, + "testcoin": args.testcoin, + "regtest": args.regtest, + "customnet": args.customnet, + "api_limit_rows": args.api_limit_rows, + "backend_connect": args.backend_connect, + "backend_port": args.backend_port, + "backend_user": args.backend_user, + "backend_password": args.backend_password, + "backend_ssl": args.backend_ssl, + "backend_ssl_no_verify": args.backend_ssl_no_verify, + "backend_poll_interval": args.backend_poll_interval, + "indexd_connect": args.indexd_connect, + "indexd_port": args.indexd_port, + "rpc_host": args.rpc_host, + "rpc_port": args.rpc_port, + "rpc_user": args.rpc_user, + "rpc_password": args.rpc_password, + "rpc_no_allow_cors": args.rpc_no_allow_cors, + "requests_timeout": args.requests_timeout, + "rpc_batch_size": args.rpc_batch_size, + "check_asset_conservation": not args.no_check_asset_conservation, + "force": args.force, + "p2sh_dust_return_pubkey": args.p2sh_dust_return_pubkey, + "utxo_locks_max_addresses": args.utxo_locks_max_addresses, + "utxo_locks_max_age": args.utxo_locks_max_age, + } + log_args = { + "verbose": args.verbose, + "quiet": args.quiet, + "log_file": args.log_file, + "api_log_file": args.api_log_file, + "no_log_files": args.no_log_files, + "testnet": args.testnet, + "testcoin": args.testcoin, + "regtest": args.regtest, + "json_log": args.json_log, + } # initialise log config initialise_log_config(**log_args) # set up logging From 3d434cf3a29af30727daf3ea6630bc36df598151 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 5 Apr 2024 18:02:37 +0200 Subject: [PATCH 008/280] Add routes for blocks --- counterparty-lib/counterpartylib/lib/api.py | 13 +++++ .../counterpartylib/lib/ledger.py | 48 +++++++++++++++++-- 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/api.py b/counterparty-lib/counterpartylib/lib/api.py index 1bde190b92..6b6364d29a 100644 --- a/counterparty-lib/counterpartylib/lib/api.py +++ b/counterparty-lib/counterpartylib/lib/api.py @@ -25,6 +25,19 @@ ROUTES = { + "/blocks": { + "function": ledger.get_blocks, + "args": [("last", None), ("limit", 10)], + }, + "/blocks/": { + "function": ledger.get_block, + }, + "/blocks//transactions": { + "function": ledger.get_transactions_by_block, + }, + "/blocks//events": { + "function": ledger.get_messages, + }, "/addresses/
/balances": { "function": ledger.get_address_balances, }, diff --git a/counterparty-lib/counterpartylib/lib/ledger.py b/counterparty-lib/counterpartylib/lib/ledger.py index e419b3f48e..1983c59b31 100644 --- a/counterparty-lib/counterpartylib/lib/ledger.py +++ b/counterparty-lib/counterpartylib/lib/ledger.py @@ -772,9 +772,44 @@ def get_burns(db, status=None, source=None): return cursor.fetchall() -########################### -# TRANSACTIONS # -########################### +###################################### +# BLOCKS AND TRANSACTIONS # +###################################### + + +def get_blocks(db, last=None, limit=10): + cursor = db.cursor() + bindings = [] + query = """ + SELECT * FROM blocks WHERE + ORDER BY block_index DESC + """ + if last is not None: + query += "WHERE BLOCK_INDEX <= ?" + bindings.append(last) + query += "LIMIT ?" + bindings.append(limit) + cursor.execute(query, tuple(bindings)) + return cursor.fetchall() + + +def get_block(db, block_index): + blocks = get_blocks(db, last=block_index, limit=1) + if blocks: + return blocks[0] + return None + + +def get_transactions_by_block(db, block_index): + cursor = db.cursor() + query = """ + SELECT * FROM transactions + WHERE block_index = ? + ORDER BY tx_index ASC + """ + bindings = (block_index,) + cursor.execute(query, bindings) + return cursor.fetchall() def get_vouts(db, tx_hash): @@ -804,6 +839,13 @@ def get_transactions(db, tx_hash=None): return cursor.fetchall() +def get_transaction(db, tx_hash): + transactions = get_transactions(db, tx_hash) + if transactions: + return transactions[0] + return None + + def get_transaction_source(db, tx_hash): cursor = db.cursor() query = """SELECT source FROM transactions WHERE tx_hash = ?""" From a222bb8a285698b70a94387394c78238fe2aeab6 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 5 Apr 2024 18:10:49 +0200 Subject: [PATCH 009/280] fix tests --- counterparty-lib/counterpartylib/test/fixtures/vectors.py | 7 +++---- counterparty-lib/counterpartylib/test/util_test.py | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/counterparty-lib/counterpartylib/test/fixtures/vectors.py b/counterparty-lib/counterpartylib/test/fixtures/vectors.py index 3fbca51dc9..e69720ee46 100644 --- a/counterparty-lib/counterpartylib/test/fixtures/vectors.py +++ b/counterparty-lib/counterpartylib/test/fixtures/vectors.py @@ -9,17 +9,16 @@ """ import binascii -import json # noqa: F401 from fractions import Fraction import bitcoin as bitcoinlib -from counterpartylib.lib import address, config, exceptions, script # noqa: F401 -from counterpartylib.lib.api import APIError +from counterpartylib.lib import config, exceptions, script from counterpartylib.lib.kickstart.blocks_parser import BlockchainParser from counterpartylib.lib.ledger import CreditError, DebitError from counterpartylib.lib.messages import issuance from counterpartylib.lib.util import QuantityError, RPCError +from counterpartylib.lib.v1.api import APIError from .params import ( ADDR, @@ -7696,7 +7695,7 @@ }, ], }, - "api": { + "api_v1": { "get_rows": [ { "in": ("balances", None, "AND", None, None, None, None, None, 1000, 0, True), diff --git a/counterparty-lib/counterpartylib/test/util_test.py b/counterparty-lib/counterpartylib/test/util_test.py index 25825a34cd..2e29881499 100644 --- a/counterparty-lib/counterpartylib/test/util_test.py +++ b/counterparty-lib/counterpartylib/test/util_test.py @@ -803,7 +803,7 @@ def check_outputs( try: tested_module = sys.modules[f"counterpartylib.lib.{tx_name}"] except KeyError: # TODO: hack - if tx_name == "api": + if tx_name == "api_v1": tested_module = sys.modules["counterpartylib.lib.v1.api"] else: tested_module = sys.modules[f"counterpartylib.lib.messages.{tx_name}"] From a0d07f4f753893208c31090823b4521f733318c0 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 5 Apr 2024 19:47:22 +0200 Subject: [PATCH 010/280] Add tests for new API --- counterparty-lib/counterpartylib/lib/api.py | 27 +- .../lib/backend/addrindexrs.py | 2 +- .../counterpartylib/lib/ledger.py | 4 + .../counterpartylib/test/api_v2_test.py | 249 ++++++++++++++++++ .../counterpartylib/test/complex_unit_test.py | 237 +---------------- .../counterpartylib/test/conftest.py | 62 ++++- 6 files changed, 335 insertions(+), 246 deletions(-) create mode 100644 counterparty-lib/counterpartylib/test/api_v2_test.py diff --git a/counterparty-lib/counterpartylib/lib/api.py b/counterparty-lib/counterpartylib/lib/api.py index 6b6364d29a..8b48cfc05d 100644 --- a/counterparty-lib/counterpartylib/lib/api.py +++ b/counterparty-lib/counterpartylib/lib/api.py @@ -10,6 +10,7 @@ from counterpartylib import server from counterpartylib.lib import ( + blocks, config, database, ledger, @@ -41,7 +42,7 @@ "/addresses/
/balances": { "function": ledger.get_address_balances, }, - "/assets//": { + "/assets/": { "function": ledger.get_asset_info, }, "/assets//balances": { @@ -89,13 +90,20 @@ def init_api_access_log(): def remove_rowids(query_result): """Remove the rowid field from the query result.""" - filtered_results = [] - for row in list(query_result): - if "rowid" in row: - del row["rowid"] - if "MAX(rowid)" in row: - del row["MAX(rowid)"] - filtered_results.append(row) + if isinstance(query_result, list): + filtered_results = [] + for row in list(query_result): + if "rowid" in row: + del row["rowid"] + if "MAX(rowid)" in row: + del row["MAX(rowid)"] + filtered_results.append(row) + return filtered_results + filtered_results = query_result + if "rowid" in filtered_results: + del filtered_results["rowid"] + if "MAX(rowid)" in filtered_results: + del filtered_results["MAX(rowid)"] return filtered_results @@ -117,6 +125,8 @@ def run_api_server(args): init_api_access_log() # Connect to the database db = database.get_connection(read_only=True) + # Get the last block index + ledger.CURRENT_BLOCK_INDEX = blocks.last_db_index(db) # Add routes for path in ROUTES.keys(): app.add_url_rule(path, view_func=handle_route) @@ -127,6 +137,7 @@ def run_api_server(args): def start(args): api_process = Process(target=run_api_server, args=(vars(args),)) api_process.start() + return api_process def stop(): diff --git a/counterparty-lib/counterpartylib/lib/backend/addrindexrs.py b/counterparty-lib/counterpartylib/lib/backend/addrindexrs.py index 70bd27a300..98701c4362 100644 --- a/counterparty-lib/counterpartylib/lib/backend/addrindexrs.py +++ b/counterparty-lib/counterpartylib/lib/backend/addrindexrs.py @@ -729,7 +729,7 @@ def init(): def stop(): - if "INDEXER_THREAD" in globals(): + if "INDEXER_THREAD" in globals() and INDEXER_THREAD is not None: INDEXER_THREAD.stop() diff --git a/counterparty-lib/counterpartylib/lib/ledger.py b/counterparty-lib/counterpartylib/lib/ledger.py index 1983c59b31..fc9e528038 100644 --- a/counterparty-lib/counterpartylib/lib/ledger.py +++ b/counterparty-lib/counterpartylib/lib/ledger.py @@ -631,6 +631,8 @@ def get_asset_info(db, asset): asset_info["supply"] = xcp_supply(db) return asset_info + print("ASSET NAME", asset_name) + asset_info["supply"] = asset_supply(db, asset_name) cursor = db.cursor() @@ -644,6 +646,8 @@ def get_asset_info(db, asset): cursor.execute(query, bindings) issuance = cursor.fetchone() + print("ASSET issuance", issuance) + asset_info = asset_info | { "asset_longname": issuance["asset_longname"], "owner": issuance["issuer"], diff --git a/counterparty-lib/counterpartylib/test/api_v2_test.py b/counterparty-lib/counterpartylib/test/api_v2_test.py new file mode 100644 index 0000000000..14e0fdd32f --- /dev/null +++ b/counterparty-lib/counterpartylib/test/api_v2_test.py @@ -0,0 +1,249 @@ +import tempfile + +import pytest +import requests + +from counterpartylib.lib import util + +# this is require near the top to do setup of the test suite +from counterpartylib.test import ( + conftest, # noqa: F401 +) +from counterpartylib.test.fixtures.params import ADDR +from counterpartylib.test.util_test import CURR_DIR + +FIXTURE_SQL_FILE = CURR_DIR + "/fixtures/scenarios/unittest_fixture.sql" +FIXTURE_DB = tempfile.gettempdir() + "/fixtures.unittest_fixture.db" +API_ROOT = "http://rpc:pass@localhost:10009" + + +@pytest.mark.usefixtures("api_server_v2") +def test_new_get_balances_by_address(): + alice = ADDR[0] + url = f"{API_ROOT}/addresses/{alice}/balances" + result = requests.get(url) # noqa: S113 + assert result.json() == [ + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "A95428956661682277", + "quantity": 100000000, + }, + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "CALLABLE", + "quantity": 1000, + }, + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "DIVISIBLE", + "quantity": 98800000000, + }, + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "LOCKED", + "quantity": 1000, + }, + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "MAXI", + "quantity": 9223372036854775807, + }, + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "NODIVISIBLE", + "quantity": 985, + }, + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "PARENT", + "quantity": 100000000, + }, + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 91875000000, + }, + ] + + +@pytest.mark.usefixtures("api_server_v2") +def test_new_get_balances_by_asset(): + asset = "XCP" + url = f"{API_ROOT}/assets/{asset}/balances" + result = requests.get(url) # noqa: S113 + assert result.json() == [ + { + "address": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", + "asset": "XCP", + "quantity": 300000000, + }, + { + "address": "2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy", + "asset": "XCP", + "quantity": 46449548498, + }, + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 91875000000, + }, + { + "address": "mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj", + "asset": "XCP", + "quantity": 92945878046, + }, + { + "address": "mrPk7hTeZWjjSCrMTC2ET4SAUThQt7C4uK", + "asset": "XCP", + "quantity": 14999857, + }, + { + "address": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "asset": "XCP", + "quantity": 99999990, + }, + { + "address": "munimLLHjPhGeSU5rYB2HN79LJa8bRZr5b", + "asset": "XCP", + "quantity": 92999130360, + }, + { + "address": "mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42", + "asset": "XCP", + "quantity": 92949122099, + }, + { + "address": "myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM", + "asset": "XCP", + "quantity": 92999138812, + }, + { + "address": "tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx", + "asset": "XCP", + "quantity": 92999030129, + }, + ] + + +@pytest.mark.usefixtures("api_server") +@pytest.mark.usefixtures("api_server_v2") +def test_new_get_balances_vs_old(): + asset = "XCP" + url = f"{API_ROOT}/assets/{asset}/balances" + new_balances = requests.get(url).json() # noqa: S113 + old_balance = util.api( + "get_balances", + { + "filters": [ + {"field": "asset", "op": "==", "value": asset}, + {"field": "quantity", "op": "!=", "value": 0}, + ], + }, + ) + new_balances = sorted(new_balances, key=lambda x: (x["address"], x["asset"], x["quantity"])) + old_balance = sorted(old_balance, key=lambda x: (x["address"], x["asset"], x["quantity"])) + assert len(new_balances) == len(old_balance) + for new_balance, old_balance in zip(new_balances, old_balance): # noqa: B020 + assert new_balance["address"] == old_balance["address"] + assert new_balance["asset"] == old_balance["asset"] + assert new_balance["quantity"] == old_balance["quantity"] + + +@pytest.mark.usefixtures("api_server_v2") +def test_new_get_asset_info(): + asset = "NODIVISIBLE" + url = f"{API_ROOT}/assets/{asset}" + result = requests.get(url) # noqa: S113 + + print("RESULT", result) + assert result.json() == { + "asset": "NODIVISIBLE", + "asset_longname": None, + "description": "No divisible asset", + "divisible": False, + "issuer": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "locked": False, + "owner": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "supply": 1000, + } + + +@pytest.mark.usefixtures("api_server_v2") +def test_new_get_asset_orders(): + asset = "XCP" + url = f"{API_ROOT}/assets/{asset}/orders" + result = requests.get(url).json() # noqa: S113 + assert len(result) == 6 + assert result[0] == { + "tx_index": 11, + "tx_hash": "1899b2e6ec36ba4bc9d035e6640b0a62b08c3a147c77c89183a77d9ed9081b3a", + "block_index": 310010, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "give_asset": "XCP", + "give_quantity": 100000000, + "give_remaining": 100000000, + "get_asset": "BTC", + "get_quantity": 1000000, + "get_remaining": 1000000, + "expiration": 2000, + "expire_index": 312010, + "fee_required": 900000, + "fee_required_remaining": 900000, + "fee_provided": 6800, + "fee_provided_remaining": 6800, + "status": "open", + } + + +@pytest.mark.usefixtures("api_server_v2") +def test_new_get_order_info(): + tx_hash = "1899b2e6ec36ba4bc9d035e6640b0a62b08c3a147c77c89183a77d9ed9081b3a" + url = f"{API_ROOT}/orders/{tx_hash}" + result = requests.get(url).json() # noqa: S113 + assert result[0] == { + "tx_index": 11, + "tx_hash": "1899b2e6ec36ba4bc9d035e6640b0a62b08c3a147c77c89183a77d9ed9081b3a", + "block_index": 310010, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "give_asset": "XCP", + "give_quantity": 100000000, + "give_remaining": 100000000, + "get_asset": "BTC", + "get_quantity": 1000000, + "get_remaining": 1000000, + "expiration": 2000, + "expire_index": 312010, + "fee_required": 900000, + "fee_required_remaining": 900000, + "fee_provided": 6800, + "fee_provided_remaining": 6800, + "status": "open", + } + + +@pytest.mark.usefixtures("api_server_v2") +def test_new_get_order_matches(): + tx_hash = "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498" + url = f"{API_ROOT}/orders/{tx_hash}/matches" + result = requests.get(url).json() # noqa: S113 + assert result[0] == { + "id": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498_1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81", + "tx0_index": 492, + "tx0_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", + "tx0_address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "tx1_index": 493, + "tx1_hash": "1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81", + "tx1_address": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "forward_asset": "XCP", + "forward_quantity": 100000000, + "backward_asset": "BTC", + "backward_quantity": 800000, + "tx0_block_index": 310491, + "tx1_block_index": 310492, + "block_index": 310492, + "tx0_expiration": 2000, + "tx1_expiration": 2000, + "match_expire_index": 310512, + "fee_paid": 7200, + "status": "pending", + } diff --git a/counterparty-lib/counterpartylib/test/complex_unit_test.py b/counterparty-lib/counterpartylib/test/complex_unit_test.py index 8ae48a90fa..2fed39a6ac 100644 --- a/counterparty-lib/counterpartylib/test/complex_unit_test.py +++ b/counterparty-lib/counterpartylib/test/complex_unit_test.py @@ -1,4 +1,4 @@ -import pprint # noqa: F401 +import json import tempfile import pytest @@ -12,7 +12,7 @@ conftest, # noqa: F401 util_test, ) -from counterpartylib.test.fixtures.params import ADDR, DP # noqa: F401 +from counterpartylib.test.fixtures.params import ADDR from counterpartylib.test.util_test import CURR_DIR FIXTURE_SQL_FILE = CURR_DIR + "/fixtures/scenarios/unittest_fixture.sql" @@ -330,238 +330,6 @@ def test_updated_tables_endpoints(): } -""" -@pytest.mark.usefixtures("api_server") -def test_new_get_balances_by_address(): - alice = ADDR[0] - url = f"{config.API_ROOT}/addresses/{alice}/balances" - result = requests.get(url) # noqa: S113 - assert result.json() == [ - { - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "A95428956661682277", - "quantity": 100000000, - }, - { - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "CALLABLE", - "quantity": 1000, - }, - { - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "DIVISIBLE", - "quantity": 98800000000, - }, - { - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "LOCKED", - "quantity": 1000, - }, - { - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "MAXI", - "quantity": 9223372036854775807, - }, - { - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "NODIVISIBLE", - "quantity": 985, - }, - { - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "PARENT", - "quantity": 100000000, - }, - { - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 91875000000, - }, - ] - - -@pytest.mark.usefixtures("api_server") -def test_new_get_balances_by_asset(): - asset = "XCP" - url = f"{config.API_ROOT}/assets/{asset}/balances" - result = requests.get(url) # noqa: S113 - assert result.json() == [ - { - "address": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", - "asset": "XCP", - "quantity": 300000000, - }, - { - "address": "2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy", - "asset": "XCP", - "quantity": 46449548498, - }, - { - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 91875000000, - }, - { - "address": "mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj", - "asset": "XCP", - "quantity": 92945878046, - }, - { - "address": "mrPk7hTeZWjjSCrMTC2ET4SAUThQt7C4uK", - "asset": "XCP", - "quantity": 14999857, - }, - { - "address": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", - "asset": "XCP", - "quantity": 99999990, - }, - { - "address": "munimLLHjPhGeSU5rYB2HN79LJa8bRZr5b", - "asset": "XCP", - "quantity": 92999130360, - }, - { - "address": "mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42", - "asset": "XCP", - "quantity": 92949122099, - }, - { - "address": "myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM", - "asset": "XCP", - "quantity": 92999138812, - }, - { - "address": "tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx", - "asset": "XCP", - "quantity": 92999030129, - }, - ] - - -@pytest.mark.usefixtures("api_server") -def test_new_get_balances_vs_old(): - asset = "XCP" - url = f"{config.API_ROOT}/assets/{asset}/balances" - new_balances = requests.get(url).json() # noqa: S113 - old_balance = util.api( - "get_balances", - { - "filters": [ - {"field": "asset", "op": "==", "value": asset}, - {"field": "quantity", "op": "!=", "value": 0}, - ], - }, - ) - new_balances = sorted(new_balances, key=lambda x: (x["address"], x["asset"], x["quantity"])) - old_balance = sorted(old_balance, key=lambda x: (x["address"], x["asset"], x["quantity"])) - assert len(new_balances) == len(old_balance) - for new_balance, old_balance in zip(new_balances, old_balance): # noqa: B020 - assert new_balance["address"] == old_balance["address"] - assert new_balance["asset"] == old_balance["asset"] - assert new_balance["quantity"] == old_balance["quantity"] - - -@pytest.mark.usefixtures("api_server") -def test_new_get_asset_info(): - asset = "NODIVISIBLE" - url = f"{config.API_ROOT}/assets/{asset}" - result = requests.get(url) # noqa: S113 - assert result.json() == [ - { - "asset": "NODIVISIBLE", - "asset_longname": None, - "description": "No divisible asset", - "divisible": False, - "issuer": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "locked": False, - "owner": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "supply": 1000, - } - ] - - -@pytest.mark.usefixtures("api_server") -def test_new_get_asset_orders(): - asset = "XCP" - url = f"{config.API_ROOT}/assets/{asset}/orders" - result = requests.get(url).json() # noqa: S113 - assert len(result) == 6 - assert result[0] == { - "tx_index": 11, - "tx_hash": "1899b2e6ec36ba4bc9d035e6640b0a62b08c3a147c77c89183a77d9ed9081b3a", - "block_index": 310010, - "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "give_asset": "XCP", - "give_quantity": 100000000, - "give_remaining": 100000000, - "get_asset": "BTC", - "get_quantity": 1000000, - "get_remaining": 1000000, - "expiration": 2000, - "expire_index": 312010, - "fee_required": 900000, - "fee_required_remaining": 900000, - "fee_provided": 6800, - "fee_provided_remaining": 6800, - "status": "open", - } - - -@pytest.mark.usefixtures("api_server") -def test_new_get_order_info(): - tx_hash = "1899b2e6ec36ba4bc9d035e6640b0a62b08c3a147c77c89183a77d9ed9081b3a" - url = f"{config.API_ROOT}/orders/{tx_hash}" - result = requests.get(url).json() # noqa: S113 - assert result[0] == { - "tx_index": 11, - "tx_hash": "1899b2e6ec36ba4bc9d035e6640b0a62b08c3a147c77c89183a77d9ed9081b3a", - "block_index": 310010, - "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "give_asset": "XCP", - "give_quantity": 100000000, - "give_remaining": 100000000, - "get_asset": "BTC", - "get_quantity": 1000000, - "get_remaining": 1000000, - "expiration": 2000, - "expire_index": 312010, - "fee_required": 900000, - "fee_required_remaining": 900000, - "fee_provided": 6800, - "fee_provided_remaining": 6800, - "status": "open", - } - - -@pytest.mark.usefixtures("api_server") -def test_new_get_order_matches(): - tx_hash = "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498" - url = f"{config.API_ROOT}/orders/{tx_hash}/matches" - result = requests.get(url).json() # noqa: S113 - assert result[0] == { - "id": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498_1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81", - "tx0_index": 492, - "tx0_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", - "tx0_address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "tx1_index": 493, - "tx1_hash": "1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81", - "tx1_address": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", - "forward_asset": "XCP", - "forward_quantity": 100000000, - "backward_asset": "BTC", - "backward_quantity": 800000, - "tx0_block_index": 310491, - "tx1_block_index": 310492, - "block_index": 310492, - "tx0_expiration": 2000, - "tx1_expiration": 2000, - "match_expire_index": 310512, - "fee_paid": 7200, - "status": "pending", - } - - @pytest.mark.usefixtures("server_db") def test_messages_table(server_db): cursor = server_db.cursor() @@ -570,4 +338,3 @@ def test_messages_table(server_db): for row in result: bindings = json.loads(row["bindings"]) assert isinstance(bindings, dict) - """ diff --git a/counterparty-lib/counterpartylib/test/conftest.py b/counterparty-lib/counterpartylib/test/conftest.py index a17fb404e2..e312868606 100644 --- a/counterparty-lib/counterpartylib/test/conftest.py +++ b/counterparty-lib/counterpartylib/test/conftest.py @@ -2,11 +2,10 @@ Test suite configuration """ +import argparse import binascii import json import logging -import os # noqa: F401 -import pprint # noqa: F401 import time from datetime import datetime @@ -18,6 +17,7 @@ from pycoin.coins.bitcoin import Tx # noqa: F401 from counterpartylib import server +from counterpartylib.lib import api as api_v2 from counterpartylib.lib import arc4, config, database, ledger, log, script, util from counterpartylib.lib.v1 import api from counterpartylib.test import util_test @@ -235,12 +235,70 @@ def api_server(request, cp_server): return api_server +@pytest.fixture(scope="module") +def api_server_v2(request, cp_server): + default_config = { + "testnet": False, + "testcoin": False, + "regtest": False, + "api_limit_rows": 1000, + "backend_connect": None, + "backend_port": None, + "backend_user": None, + "backend_password": None, + "indexd_connect": None, + "indexd_port": None, + "backend_ssl": False, + "backend_ssl_no_verify": False, + "backend_poll_interval": None, + "rpc_host": None, + "rpc_user": None, + "rpc_password": None, + "rpc_no_allow_cors": False, + "force": False, + "requests_timeout": config.DEFAULT_REQUESTS_TIMEOUT, + "rpc_batch_size": config.DEFAULT_RPC_BATCH_SIZE, + "check_asset_conservation": config.DEFAULT_CHECK_ASSET_CONSERVATION, + "backend_ssl_verify": None, + "rpc_allow_cors": None, + "p2sh_dust_return_pubkey": None, + "utxo_locks_max_addresses": config.DEFAULT_UTXO_LOCKS_MAX_ADDRESSES, + "utxo_locks_max_age": config.DEFAULT_UTXO_LOCKS_MAX_AGE, + "estimate_fee_per_kb": None, + "customnet": None, + "verbose": False, + "quiet": False, + "log_file": None, + "api_log_file": None, + "no_log_files": False, + "json_log": False, + "no_check_asset_conservation": True, + "action": "", + } + server_config = ( + default_config + | util_test.COUNTERPARTYD_OPTIONS + | { + "database_file": request.module.FIXTURE_DB, + "rpc_port": TEST_RPC_PORT + 10, + } + ) + args = argparse.Namespace(**server_config) + api_process = api_v2.start(args) + time.sleep(1) + + request.addfinalizer(lambda: api_process.terminate()) + + return api_process + + @pytest.fixture(scope="module") def cp_server(request): dbfile = request.module.FIXTURE_DB sqlfile = request.module.FIXTURE_SQL_FILE options = getattr(request.module, "FIXTURE_OPTIONS", {}) + print(f"cp_server: {dbfile} {sqlfile} {options}") db = util_test.init_database(sqlfile, dbfile, options) # noqa: F841 # monkeypatch this here because init_mock_functions can run before cp_server From 4e6cc2d903e1cb69b4fb28753eccee737bfffbfe Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 5 Apr 2024 20:15:18 +0200 Subject: [PATCH 011/280] use app context instead global variables --- counterparty-lib/counterpartylib/lib/api.py | 32 +++++++++++-------- .../counterpartylib/lib/ledger.py | 4 --- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/api.py b/counterparty-lib/counterpartylib/lib/api.py index 8b48cfc05d..58ead7eddd 100644 --- a/counterparty-lib/counterpartylib/lib/api.py +++ b/counterparty-lib/counterpartylib/lib/api.py @@ -6,6 +6,7 @@ import flask from flask import Flask, request +from flask import g as flask_globals from flask_httpauth import HTTPBasicAuth from counterpartylib import server @@ -19,12 +20,9 @@ multiprocessing.set_start_method("spawn", force=True) logger = logging.getLogger(config.LOGGER_NAME) -app = Flask(__name__) auth = HTTPBasicAuth() -db = None api_process = None - ROUTES = { "/blocks": { "function": ledger.get_blocks, @@ -69,7 +67,7 @@ def verify_password(username, password): def init_api_access_log(): """Initialize API logger.""" - werkzeug_loggers = (logging.getLogger("werkzeug"), app.logger) + werkzeug_loggers = (logging.getLogger("werkzeug"), flask.current_app.logger) # Disable console logging... for werkzeug_logger in werkzeug_loggers: # noqa: E741 @@ -114,22 +112,28 @@ def handle_route(**kwargs): if "args" in route: for arg in route["args"]: function_args[arg[0]] = request.args.get(arg[0], arg[1]) - result = route["function"](db, **function_args) + result = route["function"](get_db(), **function_args) return remove_rowids(result) +def get_db(): + """Get the database connection.""" + if not hasattr(flask_globals, "db"): + flask_globals.db = database.get_connection(read_only=True) + return flask_globals.db + + def run_api_server(args): - global db # noqa: PLW0603 + app = Flask(config.APP_NAME) # Initialise log and config server.initialise_log_and_config(argparse.Namespace(**args)) - init_api_access_log() - # Connect to the database - db = database.get_connection(read_only=True) - # Get the last block index - ledger.CURRENT_BLOCK_INDEX = blocks.last_db_index(db) - # Add routes - for path in ROUTES.keys(): - app.add_url_rule(path, view_func=handle_route) + with app.app_context(): + init_api_access_log() + # Get the last block index + ledger.CURRENT_BLOCK_INDEX = blocks.last_db_index(get_db()) + # Add routes + for path in ROUTES.keys(): + app.add_url_rule(path, view_func=handle_route) # Start the API server app.run(host=config.RPC_HOST, port=config.RPC_PORT, debug=False) diff --git a/counterparty-lib/counterpartylib/lib/ledger.py b/counterparty-lib/counterpartylib/lib/ledger.py index fc9e528038..1983c59b31 100644 --- a/counterparty-lib/counterpartylib/lib/ledger.py +++ b/counterparty-lib/counterpartylib/lib/ledger.py @@ -631,8 +631,6 @@ def get_asset_info(db, asset): asset_info["supply"] = xcp_supply(db) return asset_info - print("ASSET NAME", asset_name) - asset_info["supply"] = asset_supply(db, asset_name) cursor = db.cursor() @@ -646,8 +644,6 @@ def get_asset_info(db, asset): cursor.execute(query, bindings) issuance = cursor.fetchone() - print("ASSET issuance", issuance) - asset_info = asset_info | { "asset_longname": issuance["asset_longname"], "owner": issuance["issuer"], From 840633e1c87ecaf3833dfc88615385d29da3a02d Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 5 Apr 2024 21:19:24 +0200 Subject: [PATCH 012/280] tweaks --- counterparty-lib/counterpartylib/lib/api.py | 45 ++++++++++--------- counterparty-lib/counterpartylib/server.py | 7 ++- .../counterpartylib/test/conftest.py | 7 +-- .../counterpartylib/test/utxolocks_test.py | 1 - 4 files changed, 32 insertions(+), 28 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/api.py b/counterparty-lib/counterpartylib/lib/api.py index 58ead7eddd..7c68570865 100644 --- a/counterparty-lib/counterpartylib/lib/api.py +++ b/counterparty-lib/counterpartylib/lib/api.py @@ -21,7 +21,6 @@ logger = logging.getLogger(config.LOGGER_NAME) auth = HTTPBasicAuth() -api_process = None ROUTES = { "/blocks": { @@ -60,11 +59,6 @@ } -@auth.verify_password -def verify_password(username, password): - return username == config.RPC_USER and password == config.RPC_PASSWORD - - def init_api_access_log(): """Initialize API logger.""" werkzeug_loggers = (logging.getLogger("werkzeug"), flask.current_app.logger) @@ -105,6 +99,18 @@ def remove_rowids(query_result): return filtered_results +def get_db(): + """Get the database connection.""" + if not hasattr(flask_globals, "db"): + flask_globals.db = database.get_connection(read_only=True) + return flask_globals.db + + +@auth.verify_password +def verify_password(username, password): + return username == config.RPC_USER and password == config.RPC_PASSWORD + + @auth.login_required def handle_route(**kwargs): route = ROUTES.get(str(request.url_rule.rule)) @@ -116,13 +122,6 @@ def handle_route(**kwargs): return remove_rowids(result) -def get_db(): - """Get the database connection.""" - if not hasattr(flask_globals, "db"): - flask_globals.db = database.get_connection(read_only=True) - return flask_globals.db - - def run_api_server(args): app = Flask(config.APP_NAME) # Initialise log and config @@ -138,12 +137,18 @@ def run_api_server(args): app.run(host=config.RPC_HOST, port=config.RPC_PORT, debug=False) -def start(args): - api_process = Process(target=run_api_server, args=(vars(args),)) - api_process.start() - return api_process +class APIServer(object): + def __init__(self): + self.process = None + def start(self, args): + if self.process is not None: + raise Exception("API server is already running") + self.process = Process(target=run_api_server, args=(vars(args),)) + self.process.start() + return self.process -def stop(): - if api_process and api_process.is_alive(): - api_process.terminate() + def stop(self): + if self.process and self.process.is_alive(): + self.process.terminate() + self.process = None diff --git a/counterparty-lib/counterpartylib/server.py b/counterparty-lib/counterpartylib/server.py index 14ff81e7a3..b34ffa136f 100755 --- a/counterparty-lib/counterpartylib/server.py +++ b/counterparty-lib/counterpartylib/server.py @@ -58,11 +58,10 @@ def sigterm_handler(_signo, _stack_frame): assert False # noqa: B011 logger.info(f"Received {signal_name}.") - api.stop() - if "api_server" in globals(): logger.info("Stopping API server.") api_server.stop() # noqa: F821 + if "api_status_poller" in globals(): api_status_poller.stop() # noqa: F821 logger.info("Stopping backend.") @@ -678,10 +677,10 @@ def start_all(args): api_server.start() else: # REST API Server. - api.start(args) + api_server = api.APIServer() + api_server.start(args) # Server - blocks.follow(db) diff --git a/counterparty-lib/counterpartylib/test/conftest.py b/counterparty-lib/counterpartylib/test/conftest.py index e312868606..091554825f 100644 --- a/counterparty-lib/counterpartylib/test/conftest.py +++ b/counterparty-lib/counterpartylib/test/conftest.py @@ -284,12 +284,13 @@ def api_server_v2(request, cp_server): } ) args = argparse.Namespace(**server_config) - api_process = api_v2.start(args) + api_server = api_v2.APIServer() + api_server.start(args) time.sleep(1) - request.addfinalizer(lambda: api_process.terminate()) + request.addfinalizer(lambda: api_server.stop()) - return api_process + return api_server @pytest.fixture(scope="module") diff --git a/counterparty-lib/counterpartylib/test/utxolocks_test.py b/counterparty-lib/counterpartylib/test/utxolocks_test.py index 91e544b693..e1d5458964 100644 --- a/counterparty-lib/counterpartylib/test/utxolocks_test.py +++ b/counterparty-lib/counterpartylib/test/utxolocks_test.py @@ -4,7 +4,6 @@ from io import BytesIO import bitcoin -import pytest # noqa: F401 from counterpartylib.lib import transaction from counterpartylib.lib.messages import send From 6e752054055f37ba82cbf8183c38ed714bd232bf Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sat, 6 Apr 2024 16:33:25 +0200 Subject: [PATCH 013/280] More routes for blocks, credits and debits --- counterparty-lib/counterpartylib/lib/api.py | 24 +++++++ .../counterpartylib/lib/ledger.py | 64 +++++++++++++++++++ 2 files changed, 88 insertions(+) diff --git a/counterparty-lib/counterpartylib/lib/api.py b/counterparty-lib/counterpartylib/lib/api.py index 7c68570865..08c7683afe 100644 --- a/counterparty-lib/counterpartylib/lib/api.py +++ b/counterparty-lib/counterpartylib/lib/api.py @@ -36,9 +36,27 @@ "/blocks//events": { "function": ledger.get_messages, }, + "/blocks//credits": { + "function": ledger.get_credits, + }, + "/blocks//debits": { + "function": ledger.get_debits, + }, + "/blocks//expirations": { + "function": ledger.get_expirations, + }, + "/transactions/": { + "function": ledger.get_transaction, + }, "/addresses/
/balances": { "function": ledger.get_address_balances, }, + "/addresses/
/credits": { + "function": ledger.get_credits, + }, + "/addresses/
/debits": { + "function": ledger.get_debits, + }, "/assets/": { "function": ledger.get_asset_info, }, @@ -49,6 +67,12 @@ "function": ledger.get_orders_by_asset, "args": [("status", "open")], }, + "/assets//credits": { + "function": ledger.get_credits, + }, + "/assets//debits": { + "function": ledger.get_debits, + }, "/orders/": { "function": ledger.get_order, }, diff --git a/counterparty-lib/counterpartylib/lib/ledger.py b/counterparty-lib/counterpartylib/lib/ledger.py index 1983c59b31..b696c180ce 100644 --- a/counterparty-lib/counterpartylib/lib/ledger.py +++ b/counterparty-lib/counterpartylib/lib/ledger.py @@ -326,6 +326,36 @@ def get_balances_count(db, address): return cursor.fetchall() +def get_credits_or_debits(db, table, address=None, asset=None, block_index=None, tx_index=None): + cursor = db.cursor() + where = [] + bindings = [] + if address is not None: + where.append("address = ?") + bindings.append(address) + if asset is not None: + where.append("asset = ?") + bindings.append(asset) + if block_index is not None: + where.append("block_index = ?") + bindings.append(block_index) + if tx_index is not None: + where.append("tx_index = ?") + bindings.append(tx_index) + # no sql injection here + query = f"""SELECT * FROM {table} WHERE ({" AND ".join(where)})""" # nosec B608 # noqa: S608 + cursor.execute(query, tuple(bindings)) + return cursor.fetchall() + + +def get_credits(db, address=None, asset=None, block_index=None, tx_index=None): + return get_credits_or_debits(db, "credits", address, asset, block_index, tx_index) + + +def get_debits(db, address=None, asset=None, block_index=None, tx_index=None): + return get_credits_or_debits(db, "debits", address, asset, block_index, tx_index) + + ##################### # ISSUANCES # ##################### @@ -867,6 +897,40 @@ def get_addresses(db, address=None): return cursor.fetchall() +def get_expirations(db, block_index): + cursor = db.cursor() + queries = [ + """ + SELECT 'order' AS type, order_hash AS object_id FROM order_expirations + WHERE block_index = ? + """, + """ + SELECT 'order_match' AS type, order_match_id AS object_id FROM order_match_expirations + WHERE block_index = ? + """, + """ + SELECT 'bet' AS type, bet_hash AS object_id FROM bet_expirations + WHERE block_index = ? + """, + """ + SELECT 'bet_match' AS type, bet_match_id AS object_id FROM bet_match_expirations + WHERE block_index = ? + """, + """ + SELECT 'rps' AS type, rps_hash AS object_id FROM rps_expirations + WHERE block_index = ? + """, + """ + SELECT 'rps_match' AS type, rps_match_id AS object_id FROM rps_match_expirations + WHERE block_index = ? + """, + ] + query = " UNION ALL ".join(queries) + bindings = (block_index,) + cursor.execute(query, bindings) + return cursor.fetchall() + + ############################### # UTIL FUNCTIONS # ############################### From b275944945a7e20240498ade41f5e7fb979ea4dc Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sat, 6 Apr 2024 16:42:46 +0200 Subject: [PATCH 014/280] clean imports --- counterparty-lib/counterpartylib/lib/script.py | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/script.py b/counterparty-lib/counterpartylib/lib/script.py index bbd2f6306d..74005a885f 100644 --- a/counterparty-lib/counterpartylib/lib/script.py +++ b/counterparty-lib/counterpartylib/lib/script.py @@ -12,8 +12,12 @@ from bitcoin.core.key import CPubKey from counterparty_rs import b58, utils -# We are using PyCryptodome not PyCrypto -# from Crypto.Hash import RIPEMD160 +# TODO: Use `python-bitcointools` instead. (Get rid of `pycoin` dependency.) +from pycoin.ecdsa.secp256k1 import secp256k1_generator as generator_secp256k1 +from pycoin.encoding.b58 import a2b_hashed_base58 +from pycoin.encoding.bytes32 import from_bytes_32 +from pycoin.encoding.exceptions import EncodingError +from pycoin.encoding.sec import public_pair_to_sec from ripemd import ripemd160 as RIPEMD160 # nosec B413 from counterpartylib.lib import config, exceptions, ledger, opcodes, util @@ -404,14 +408,6 @@ def scriptpubkey_to_address(scriptpubkey): return None -# TODO: Use `python-bitcointools` instead. (Get rid of `pycoin` dependency.) -from pycoin.ecdsa.secp256k1 import secp256k1_generator as generator_secp256k1 # noqa: E402 -from pycoin.encoding.b58 import a2b_hashed_base58 # noqa: E402 -from pycoin.encoding.bytes32 import from_bytes_32 # noqa: E402 -from pycoin.encoding.exceptions import EncodingError # noqa: E402 -from pycoin.encoding.sec import public_pair_to_sec # noqa: E402 - - def wif_to_tuple_of_prefix_secret_exponent_compressed(wif): """ Return a tuple of (prefix, secret_exponent, is_compressed). From 6f4ffeba256334115d847354bfa0018e7393e3e4 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sat, 6 Apr 2024 20:36:47 +0200 Subject: [PATCH 015/280] More routes --- counterparty-lib/counterpartylib/lib/api.py | 43 +++++++++++ .../counterpartylib/lib/ledger.py | 77 ++++++++++++++++--- .../counterpartylib/lib/messages/bet.py | 6 +- .../counterpartylib/lib/messages/broadcast.py | 4 +- .../counterpartylib/lib/messages/burn.py | 4 +- 5 files changed, 117 insertions(+), 17 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/api.py b/counterparty-lib/counterpartylib/lib/api.py index 08c7683afe..6e40d808f3 100644 --- a/counterparty-lib/counterpartylib/lib/api.py +++ b/counterparty-lib/counterpartylib/lib/api.py @@ -23,6 +23,7 @@ auth = HTTPBasicAuth() ROUTES = { + ### /blocks ### "/blocks": { "function": ledger.get_blocks, "args": [("last", None), ("limit", 10)], @@ -45,24 +46,49 @@ "/blocks//expirations": { "function": ledger.get_expirations, }, + "/blocks//cancels": { + "function": ledger.get_cancels, + }, + "/blocks//destructions": { + "function": ledger.get_destructions, + }, + ### /transactions ### "/transactions/": { "function": ledger.get_transaction, }, + ### /addresses ### "/addresses/
/balances": { "function": ledger.get_address_balances, }, + "/addresses/
/balances/": { + "function": ledger.get_balance_object, + }, "/addresses/
/credits": { "function": ledger.get_credits, }, "/addresses/
/debits": { "function": ledger.get_debits, }, + "/addresses/
/bets": { + "function": ledger.get_bet_by_feed, + "args": [("status", "open")], + }, + "/addresses/
/broadcasts": { + "function": ledger.get_broadcasts_by_source, + }, + "/addresses/
/burns": { + "function": ledger.get_burns, + }, + ### /assets ### "/assets/": { "function": ledger.get_asset_info, }, "/assets//balances": { "function": ledger.get_asset_balances, }, + "/assets//balances/
": { + "function": ledger.get_balance_object, + }, "/assets//orders": { "function": ledger.get_orders_by_asset, "args": [("status", "open")], @@ -73,6 +99,7 @@ "/assets//debits": { "function": ledger.get_debits, }, + ### /orders ### "/orders/": { "function": ledger.get_order, }, @@ -80,6 +107,22 @@ "function": ledger.get_order_matches_by_order, "args": [("status", "pending")], }, + "/orders//btcpays": { + "function": ledger.get_btcpays_by_order, + "args": [("status", "pending")], + }, + ### /bets ### + "/bets/": { + "function": ledger.get_bet, + }, + "/bets//matches": { + "function": ledger.get_bet_matches_by_bet, + "args": [("status", "pending")], + }, + ### /burns ### + "/burns": { + "function": ledger.get_burns, + }, } diff --git a/counterparty-lib/counterpartylib/lib/ledger.py b/counterparty-lib/counterpartylib/lib/ledger.py index b696c180ce..acc6620772 100644 --- a/counterparty-lib/counterpartylib/lib/ledger.py +++ b/counterparty-lib/counterpartylib/lib/ledger.py @@ -285,6 +285,14 @@ def get_balance(db, address, asset, raise_error_if_no_balance=False, return_list return balances[0]["quantity"] +def get_balance_object(db, address, asset): + return { + "address": address, + "asset": asset, + "quantity": get_balance(db, address, asset), + } + + def get_address_balances(db, address): cursor = db.cursor() query = """ @@ -769,14 +777,14 @@ def get_oracle_last_price(db, oracle_address, block_index): ) -def get_broadcasts_by_source(db, source, status): +def get_broadcasts_by_source(db, address, status="valid", order_by="DESC"): cursor = db.cursor() - query = """ + query = f""" SELECT * FROM broadcasts WHERE (status = ? AND source = ?) - ORDER BY tx_index ASC - """ - bindings = (status, source) + ORDER BY tx_index {order_by} + """ # nosec B608 # noqa: S608 + bindings = (status, address) cursor.execute(query, bindings) return cursor.fetchall() @@ -786,16 +794,16 @@ def get_broadcasts_by_source(db, source, status): ##################### -def get_burns(db, status=None, source=None): +def get_burns(db, address=None, status="valid"): cursor = db.cursor() where = [] bindings = [] if status is not None: where.append("status = ?") bindings.append(status) - if source is not None: + if address is not None: where.append("source = ?") - bindings.append(source) + bindings.append(address) # no sql injection here query = f"""SELECT * FROM burns WHERE ({" AND ".join(where)})""" # nosec B608 # noqa: S608 cursor.execute(query, tuple(bindings)) @@ -931,6 +939,28 @@ def get_expirations(db, block_index): return cursor.fetchall() +def get_cancels(db, block_index): + cursor = db.cursor() + query = """ + SELECT * FROM cancels + WHERE block_index = ? + """ + bindings = (block_index,) + cursor.execute(query, bindings) + return cursor.fetchall() + + +def get_destructions(db, block_index): + cursor = db.cursor() + query = """ + SELECT * FROM destructions + WHERE block_index = ? + """ + bindings = (block_index,) + cursor.execute(query, bindings) + return cursor.fetchall() + + ############################### # UTIL FUNCTIONS # ############################### @@ -1369,7 +1399,7 @@ def get_matching_bets(db, feed_address, bet_type): return cursor.fetchall() -def get_open_bet_by_feed(db, feed_address): +def get_bet_by_feed(db, address, status="open"): cursor = db.cursor() query = """ SELECT * FROM ( @@ -1380,7 +1410,22 @@ def get_open_bet_by_feed(db, feed_address): ) WHERE status = ? ORDER BY tx_index, tx_hash """ - bindings = (feed_address, "open") + bindings = (address, status) + cursor.execute(query, bindings) + return cursor.fetchall() + + +def get_bet_matches_by_bet(db, tx_hash, status="pending"): + cursor = db.cursor() + query = """ + SELECT * FROM ( + SELECT *, MAX(rowid) + FROM bet_matches + WHERE (tx0_hash = ? OR tx1_hash = ?) + GROUP BY id + ) WHERE status = ? + """ + bindings = (tx_hash, tx_hash, status) cursor.execute(query, bindings) return cursor.fetchall() @@ -1565,6 +1610,18 @@ def get_order_matches_by_order(db, tx_hash, status="pending"): return cursor.fetchall() +def get_btcpays_by_order(db, tx_hash): + cursor = db.cursor() + query = """ + SELECT * + FROM btc_pays + WHERE order_match_id LIKE '%?%' + """ + bindings = (tx_hash,) + cursor.execute(query, bindings) + return cursor.fetchall() + + ### UPDATES ### diff --git a/counterparty-lib/counterpartylib/lib/messages/bet.py b/counterparty-lib/counterpartylib/lib/messages/bet.py index 352afa63e0..c9fd2f0bd9 100644 --- a/counterparty-lib/counterpartylib/lib/messages/bet.py +++ b/counterparty-lib/counterpartylib/lib/messages/bet.py @@ -254,7 +254,7 @@ def cancel_bet_match(db, bet_match, status, block_index, tx_index): def get_fee_fraction(db, feed_address): """Get fee fraction from last broadcast from the feed_address address.""" - broadcasts = ledger.get_broadcasts_by_source(db, feed_address, "valid") + broadcasts = ledger.get_broadcasts_by_source(db, feed_address, "valid", order_by="ASC") if broadcasts: last_broadcast = broadcasts[-1] @@ -297,7 +297,7 @@ def validate( problems.append("integer overflow") # Look at feed to be bet on. - broadcasts = ledger.get_broadcasts_by_source(db, feed_address, "valid") + broadcasts = ledger.get_broadcasts_by_source(db, feed_address, "valid", order_by="ASC") if not broadcasts: problems.append("feed doesn’t exist") elif not broadcasts[-1]["text"]: @@ -661,7 +661,7 @@ def match(db, tx): ledger.update_bet(db, tx1["tx_hash"], set_data) # Get last value of feed. - broadcasts = ledger.get_broadcasts_by_source(db, feed_address, "valid") + broadcasts = ledger.get_broadcasts_by_source(db, feed_address, "valid", order_by="ASC") initial_value = broadcasts[-1]["value"] # Record bet fulfillment. diff --git a/counterparty-lib/counterpartylib/lib/messages/broadcast.py b/counterparty-lib/counterpartylib/lib/messages/broadcast.py index c6d5df638f..ee43c67c3e 100644 --- a/counterparty-lib/counterpartylib/lib/messages/broadcast.py +++ b/counterparty-lib/counterpartylib/lib/messages/broadcast.py @@ -111,7 +111,7 @@ def validate(db, source, timestamp, value, fee_fraction_int, text, block_index): if not source: problems.append("null source address") # Check previous broadcast in this feed. - broadcasts = ledger.get_broadcasts_by_source(db, source, "valid") + broadcasts = ledger.get_broadcasts_by_source(db, source, "valid", order_by="ASC") if broadcasts: last_broadcast = broadcasts[-1] if last_broadcast["locked"]: @@ -256,7 +256,7 @@ def parse(db, tx, message): if value is None or value < 0: # Cancel Open Bets? if value == -2: - for i in ledger.get_open_bet_by_feed(db, tx["source"]): + for i in ledger.get_bet_by_feed(db, tx["source"], status="open"): bet.cancel_bet(db, i, "dropped", tx["block_index"], tx["tx_index"]) # Cancel Pending Bet Matches? if value == -3: diff --git a/counterparty-lib/counterpartylib/lib/messages/burn.py b/counterparty-lib/counterpartylib/lib/messages/burn.py index 235a706264..64a2de73e2 100644 --- a/counterparty-lib/counterpartylib/lib/messages/burn.py +++ b/counterparty-lib/counterpartylib/lib/messages/burn.py @@ -82,7 +82,7 @@ def compose(db, source, quantity, overburn=False): raise exceptions.ComposeError(problems) # Check that a maximum of 1 BTC total is burned per address. - burns = ledger.get_burns(db, status="valid", source=source) + burns = ledger.get_burns(db, source) already_burned = sum([burn["burned"] for burn in burns]) if quantity > (1 * config.UNIT - already_burned) and not overburn: @@ -118,7 +118,7 @@ def parse(db, tx, mainnet_burns, message=None): if status == "valid": # Calculate quantity of XCP earned. (Maximum 1 BTC in total, ever.) - burns = ledger.get_burns(db, status="valid", source=tx["source"]) + burns = ledger.get_burns(db, tx["source"]) already_burned = sum([burn["burned"] for burn in burns]) one = 1 * config.UNIT max_burn = one - already_burned From 3ed4ba7ac9319119c0ea7e31f23a5adc330ddd36 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sun, 7 Apr 2024 13:06:33 +0200 Subject: [PATCH 016/280] More routes: sends, resolutions, .. --- counterparty-lib/counterpartylib/lib/api.py | 31 +++++++++ .../counterpartylib/lib/ledger.py | 69 ++++++++++++++++++- 2 files changed, 99 insertions(+), 1 deletion(-) diff --git a/counterparty-lib/counterpartylib/lib/api.py b/counterparty-lib/counterpartylib/lib/api.py index 6e40d808f3..e8649f6dbc 100644 --- a/counterparty-lib/counterpartylib/lib/api.py +++ b/counterparty-lib/counterpartylib/lib/api.py @@ -52,6 +52,12 @@ "/blocks//destructions": { "function": ledger.get_destructions, }, + "/blocks//issuances": { + "function": ledger.get_issuances, + }, + "/blocks//sends": { + "function": ledger.get_sends_or_receives, + }, ### /transactions ### "/transactions/": { "function": ledger.get_transaction, @@ -79,6 +85,18 @@ "/addresses/
/burns": { "function": ledger.get_burns, }, + "/addresses/
/sends": { + "function": ledger.get_sends, + }, + "/addresses/
/receives": { + "function": ledger.get_receives, + }, + "/addresses/
/sends/": { + "function": ledger.get_sends, + }, + "/addresses/
/receives/": { + "function": ledger.get_receives, + }, ### /assets ### "/assets/": { "function": ledger.get_asset_info, @@ -99,6 +117,15 @@ "/assets//debits": { "function": ledger.get_debits, }, + "/assets//dividends": { + "function": ledger.get_dividends, + }, + "/assets//issuances": { + "function": ledger.get_issuances, + }, + "/assets//sends": { + "function": ledger.get_sends_or_receives, + }, ### /orders ### "/orders/": { "function": ledger.get_order, @@ -119,6 +146,10 @@ "function": ledger.get_bet_matches_by_bet, "args": [("status", "pending")], }, + "/bets//resolutions": { + "function": ledger.get_resolutions_by_bet, + "args": [("status", "pending")], + }, ### /burns ### "/burns": { "function": ledger.get_burns, diff --git a/counterparty-lib/counterpartylib/lib/ledger.py b/counterparty-lib/counterpartylib/lib/ledger.py index acc6620772..8624ee94f1 100644 --- a/counterparty-lib/counterpartylib/lib/ledger.py +++ b/counterparty-lib/counterpartylib/lib/ledger.py @@ -364,6 +364,45 @@ def get_debits(db, address=None, asset=None, block_index=None, tx_index=None): return get_credits_or_debits(db, "debits", address, asset, block_index, tx_index) +def get_sends_or_receives( + db, source=None, destination=None, asset=None, block_index=None, status="valid" +): + cursor = db.cursor() + where = [] + bindings = [] + if source is not None: + where.append("source = ?") + bindings.append(source) + if destination is not None: + where.append("destination = ?") + bindings.append(destination) + if asset is not None: + where.append("asset = ?") + bindings.append(asset) + if block_index is not None: + where.append("block_index = ?") + bindings.append(block_index) + if status is not None: + where.append("status = ?") + bindings.append(status) + # no sql injection here + query = f"""SELECT * FROM sends WHERE ({" AND ".join(where)})""" # nosec B608 # noqa: S608 + cursor.execute(query, tuple(bindings)) + return cursor.fetchall() + + +def get_sends(db, address=None, asset=None, block_index=None, status="valid"): + return get_sends_or_receives( + db, source=address, asset=asset, block_index=block_index, status=status + ) + + +def get_receives(db, address=None, asset=None, block_index=None, status="valid"): + return get_sends_or_receives( + db, destination=address, asset=asset, block_index=block_index, status=status + ) + + ##################### # ISSUANCES # ##################### @@ -694,7 +733,9 @@ def get_asset_info(db, asset): return asset_info -def get_issuances(db, asset=None, status=None, locked=None, first=False, last=False): +def get_issuances( + db, asset=None, status=None, locked=None, block_index=None, first=False, last=False +): cursor = db.cursor() cursor = db.cursor() where = [] @@ -708,6 +749,9 @@ def get_issuances(db, asset=None, status=None, locked=None, first=False, last=Fa if locked is not None: where.append("locked = ?") bindings.append(locked) + if block_index is not None: + where.append("block_index = ?") + bindings.append(block_index) # no sql injection here query = f"""SELECT * FROM issuances WHERE ({" AND ".join(where)})""" # nosec B608 # noqa: S608 if first: @@ -742,6 +786,17 @@ def get_valid_assets(db): return cursor.fetchall() +def get_dividends(db, asset): + cursor = db.cursor() + query = """ + SELECT * FROM dividends + WHERE asset = ? AND status = ? + """ + bindings = (asset, "valid") + cursor.execute(query, bindings) + return cursor.fetchall() + + ##################### # BROADCASTS # ##################### @@ -1430,6 +1485,18 @@ def get_bet_matches_by_bet(db, tx_hash, status="pending"): return cursor.fetchall() +def get_resolutions_by_bet(db, tx_hash): + cursor = db.cursor() + query = """ + SELECT * + FROM bet_match_resolutions + WHERE bet_match_id LIKE '%?%' + """ + bindings = (tx_hash,) + cursor.execute(query, bindings) + return cursor.fetchall() + + ### UPDATES ### From 83bd420d75bc27d54769db4e287fce37b37f100c Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sun, 7 Apr 2024 13:22:53 +0200 Subject: [PATCH 017/280] Add 'event' field in mempool table --- counterparty-lib/counterpartylib/lib/blocks.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/counterparty-lib/counterpartylib/lib/blocks.py b/counterparty-lib/counterpartylib/lib/blocks.py index 9e48c437be..13a068467c 100644 --- a/counterparty-lib/counterpartylib/lib/blocks.py +++ b/counterparty-lib/counterpartylib/lib/blocks.py @@ -605,6 +605,9 @@ def initialise(db): bindings TEXT, timestamp INTEGER) """) + columns = [column["name"] for column in cursor.execute("""PRAGMA table_info(mempool)""")] + if "event" not in columns: + cursor.execute("""ALTER TABLE mempool ADD COLUMN event TEXT""") # Lock UPDATE on all tables for table in TABLES: @@ -1204,7 +1207,7 @@ def follow(db): tx_hash, new_message = message new_message["tx_hash"] = tx_hash cursor.execute( - """INSERT INTO mempool VALUES(:tx_hash, :command, :category, :bindings, :timestamp)""", + """INSERT INTO mempool VALUES(:tx_hash, :command, :category, :bindings, :timestamp, :event)""", new_message, ) From 38fb1617d456482c4365bd80e3d673e3dd806d16 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sun, 7 Apr 2024 17:00:17 +0200 Subject: [PATCH 018/280] More routes: dispensers, sweeps, holders, .. --- counterparty-lib/counterpartylib/lib/api.py | 38 +++++++++++++ .../counterpartylib/lib/ledger.py | 54 +++++++++++++++++-- .../counterpartylib/lib/messages/dispenser.py | 16 +++--- 3 files changed, 97 insertions(+), 11 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/api.py b/counterparty-lib/counterpartylib/lib/api.py index e8649f6dbc..23452abeb7 100644 --- a/counterparty-lib/counterpartylib/lib/api.py +++ b/counterparty-lib/counterpartylib/lib/api.py @@ -58,6 +58,12 @@ "/blocks//sends": { "function": ledger.get_sends_or_receives, }, + "/blocks//dispenses": { + "function": ledger.get_dispenses, + }, + "/blocks//sweeps": { + "function": ledger.get_sweeps, + }, ### /transactions ### "/transactions/": { "function": ledger.get_transaction, @@ -97,7 +103,21 @@ "/addresses/
/receives/": { "function": ledger.get_receives, }, + "/addresses/
/dispensers": { + "function": ledger.get_dispensers, + "args": [("status", 0)], + }, + "/addresses/
/dispensers/": { + "function": ledger.get_dispensers, + "args": [("status", 0)], + }, + "/addresses/
/sweeps": { + "function": ledger.get_sweeps, + }, ### /assets ### + "/assets": { + "function": ledger.get_valid_assets, + }, "/assets/": { "function": ledger.get_asset_info, }, @@ -126,6 +146,17 @@ "/assets//sends": { "function": ledger.get_sends_or_receives, }, + "/assets//dispensers": { + "function": ledger.get_dispensers, + "args": [("status", 0)], + }, + "/asset//dispensers/
": { + "function": ledger.get_dispensers, + "args": [("status", 0)], + }, + "/assets//holders": { + "function": ledger.get_asset_holders, + }, ### /orders ### "/orders/": { "function": ledger.get_order, @@ -154,6 +185,13 @@ "/burns": { "function": ledger.get_burns, }, + ### /dispensers ### + "/dispensers/": { + "function": ledger.get_dispenser_info, + }, + "/dispensers//dispenses": { + "function": ledger.get_dispenses, + }, } diff --git a/counterparty-lib/counterpartylib/lib/ledger.py b/counterparty-lib/counterpartylib/lib/ledger.py index 8624ee94f1..7ac6830e11 100644 --- a/counterparty-lib/counterpartylib/lib/ledger.py +++ b/counterparty-lib/counterpartylib/lib/ledger.py @@ -403,6 +403,25 @@ def get_receives(db, address=None, asset=None, block_index=None, status="valid") ) +def get_sweeps(db, address=None, block_index=None, status="valid"): + cursor = db.cursor() + where = [] + bindings = [] + if address is not None: + where.append("source = ?") + bindings.append(address) + if block_index is not None: + where.append("block_index = ?") + bindings.append(block_index) + if status is not None: + where.append("status = ?") + bindings.append(status) + # no sql injection here + query = f"""SELECT * FROM sweeps WHERE ({" AND ".join(where)})""" # nosec B608 # noqa: S608 + cursor.execute(query, tuple(bindings)) + return cursor.fetchall() + + ##################### # ISSUANCES # ##################### @@ -706,9 +725,11 @@ def get_asset_info(db, asset): if asset_name == config.XCP: asset_info["supply"] = xcp_supply(db) + asset_info["holder_count"] = get_asset_holder_count(db, asset) return asset_info asset_info["supply"] = asset_supply(db, asset_name) + asset_info["holder_count"] = get_asset_holder_count(db, asset) cursor = db.cursor() query = """ @@ -1301,7 +1322,7 @@ def get_dispensers( db, status_in=None, source_in=None, - source=None, + address=None, asset=None, origin=None, status=None, @@ -1313,9 +1334,9 @@ def get_dispensers( bindings = [] # where for immutable fields first_where = [] - if source is not None: + if address is not None: first_where.append("source = ?") - bindings.append(source) + bindings.append(address) if source_in is not None: first_where.append(f"source IN ({','.join(['?' for e in range(0, len(source_in))])})") bindings += source_in @@ -1356,6 +1377,22 @@ def get_dispensers( return cursor.fetchall() +def get_dispenses(db, dispenser_tx_hash=None, block_index=None): + cursor = db.cursor() + where = [] + bindings = [] + if dispenser_tx_hash is not None: + where.append("dispenser_tx_hash = ?") + bindings.append(dispenser_tx_hash) + if block_index is not None: + where.append("block_index = ?") + bindings.append(block_index) + # no sql injection here + query = f"""SELECT * FROM dispenses WHERE ({" AND ".join(where)})""" # nosec B608 # noqa: S608 + cursor.execute(query, tuple(bindings)) + return cursor.fetchall() + + ### UPDATES ### @@ -2117,6 +2154,17 @@ def holders(db, asset, exclude_empty_holders=False): return holders +def get_asset_holders(db, asset): + asset_name = resolve_subasset_longname(db, asset) + return holders(db, asset_name, True) + + +def get_asset_holder_count(db, asset): + holders = get_asset_holders(db, asset) + addresses = [holder["address"] for holder in holders] + return len(set(addresses)) + + def xcp_created(db): """Return number of XCP created thus far.""" cursor = db.cursor() diff --git a/counterparty-lib/counterpartylib/lib/messages/dispenser.py b/counterparty-lib/counterpartylib/lib/messages/dispenser.py index 4f2ea6780c..158fc1516c 100644 --- a/counterparty-lib/counterpartylib/lib/messages/dispenser.py +++ b/counterparty-lib/counterpartylib/lib/messages/dispenser.py @@ -228,12 +228,12 @@ def validate( and open_address != source ): open_dispensers = ledger.get_dispensers( - db, status_in=[0, 11], source=open_address, asset=asset, origin=source + db, status_in=[0, 11], address=open_address, asset=asset, origin=source ) else: query_address = open_address if status == STATUS_OPEN_EMPTY_ADDRESS else source open_dispensers = ledger.get_dispensers( - db, status_in=[0, 11], source=query_address, asset=asset + db, status_in=[0, 11], address=query_address, asset=asset ) if len(open_dispensers) == 0 or open_dispensers[0]["status"] != STATUS_CLOSING: @@ -459,7 +459,7 @@ def parse(db, tx, message): else: if dispenser_status == STATUS_OPEN or dispenser_status == STATUS_OPEN_EMPTY_ADDRESS: existing = ledger.get_dispensers( - db, source=action_address, asset=asset, status=STATUS_OPEN + db, address=action_address, asset=asset, status=STATUS_OPEN ) if len(existing) == 0: @@ -612,7 +612,7 @@ def parse(db, tx, message): ) dispenser_tx_hash = ledger.get_dispensers( - db, source=action_address, asset=asset, status=STATUS_OPEN + db, address=action_address, asset=asset, status=STATUS_OPEN )[0]["tx_hash"] bindings_refill = { "tx_index": tx["tx_index"], @@ -647,14 +647,14 @@ def parse(db, tx, message): if close_from_another_address: existing = ledger.get_dispensers( db, - source=action_address, + address=action_address, asset=asset, status=STATUS_OPEN, origin=tx["source"], ) else: existing = ledger.get_dispensers( - db, source=tx["source"], asset=asset, status=STATUS_OPEN + db, address=tx["source"], asset=asset, status=STATUS_OPEN ) if len(existing) == 1: if close_delay == 0: @@ -692,7 +692,7 @@ def is_dispensable(db, address, amount): if address is None: return False - dispensers = ledger.get_dispensers(db, source=address, status_in=[0, 11]) + dispensers = ledger.get_dispensers(db, address=address, status_in=[0, 11]) for next_dispenser in dispensers: if next_dispenser["oracle_address"] != None: # noqa: E711 @@ -731,7 +731,7 @@ def dispense(db, tx): dispensers = [] if next_out["destination"] is not None: dispensers = ledger.get_dispensers( - db, source=next_out["destination"], status_in=[0, 11], order_by="asset" + db, address=next_out["destination"], status_in=[0, 11], order_by="asset" ) for dispenser in dispensers: From 092b312362eff01e8fbf6f7cb76a4ed62a37bce9 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sun, 7 Apr 2024 19:47:42 +0200 Subject: [PATCH 019/280] Add routes for events --- counterparty-lib/counterpartylib/lib/api.py | 13 ++++++- .../counterpartylib/lib/ledger.py | 37 +++++++++++++++++++ .../counterpartylib/test/api_v2_test.py | 2 +- 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/api.py b/counterparty-lib/counterpartylib/lib/api.py index 23452abeb7..95544d965f 100644 --- a/counterparty-lib/counterpartylib/lib/api.py +++ b/counterparty-lib/counterpartylib/lib/api.py @@ -35,7 +35,10 @@ "function": ledger.get_transactions_by_block, }, "/blocks//events": { - "function": ledger.get_messages, + "function": ledger.get_events, + }, + "/blocks//events/": { + "function": ledger.get_events, }, "/blocks//credits": { "function": ledger.get_credits, @@ -192,6 +195,14 @@ "/dispensers//dispenses": { "function": ledger.get_dispenses, }, + ### /events ### + "/events/": { + "function": ledger.get_events, + }, + "/events/": { + "function": ledger.get_events, + "args": [("last", None), ("limit", 100)], + }, } diff --git a/counterparty-lib/counterpartylib/lib/ledger.py b/counterparty-lib/counterpartylib/lib/ledger.py index 7ac6830e11..a91bf96a84 100644 --- a/counterparty-lib/counterpartylib/lib/ledger.py +++ b/counterparty-lib/counterpartylib/lib/ledger.py @@ -64,6 +64,43 @@ def get_messages(db, block_index=None, block_index_in=None, message_index_in=Non return cursor.fetchall() +def get_events(db, block_index=None, event=None, event_index=None, last=None, limit=None): + cursor = db.cursor() + where = [] + bindings = [] + if block_index is not None: + where.append("block_index = ?") + bindings.append(block_index) + if event is not None: + where.append("event = ?") + bindings.append(event) + if event_index is not None: + where.append("message_index = ?") + bindings.append(event_index) + if last is not None: + where.append("message_index <= ?") + bindings.append(last) + if block_index is None and limit is None: + limit = 100 + if limit is not None: + limit = "LIMIT ?" + bindings.append(limit) + else: + limit = "" + # no sql injection here + query = f""" + SELECT message_index AS event_index, event, bindings, block_index, timestamp + FROM messages + WHERE ({" AND ".join(where)}) + ORDER BY message_index DESC {limit} + """ # nosec B608 # noqa: S608 + cursor.execute(query, tuple(bindings)) + events = cursor.fetchall() + for i, _ in enumerate(events): + events[i]["bindings"] = json.loads(events[i]["bindings"]) + return events + + # we are using a function here for testing purposes def curr_time(): return int(time.time()) diff --git a/counterparty-lib/counterpartylib/test/api_v2_test.py b/counterparty-lib/counterpartylib/test/api_v2_test.py index 14e0fdd32f..c808246d32 100644 --- a/counterparty-lib/counterpartylib/test/api_v2_test.py +++ b/counterparty-lib/counterpartylib/test/api_v2_test.py @@ -155,7 +155,6 @@ def test_new_get_asset_info(): url = f"{API_ROOT}/assets/{asset}" result = requests.get(url) # noqa: S113 - print("RESULT", result) assert result.json() == { "asset": "NODIVISIBLE", "asset_longname": None, @@ -165,6 +164,7 @@ def test_new_get_asset_info(): "locked": False, "owner": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", "supply": 1000, + "holder_count": 3, } From 46ebe887bcb8f7c21f64bd24851c00ef169ff638 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sun, 7 Apr 2024 20:22:42 +0200 Subject: [PATCH 020/280] Add routes for mempool and events count --- counterparty-lib/counterpartylib/lib/api.py | 14 ++++++- .../counterpartylib/lib/ledger.py | 37 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/counterparty-lib/counterpartylib/lib/api.py b/counterparty-lib/counterpartylib/lib/api.py index 95544d965f..15a1346b25 100644 --- a/counterparty-lib/counterpartylib/lib/api.py +++ b/counterparty-lib/counterpartylib/lib/api.py @@ -37,9 +37,18 @@ "/blocks//events": { "function": ledger.get_events, }, + "/blocks//events/counts": { + "function": ledger.get_events_counts, + }, "/blocks//events/": { "function": ledger.get_events, }, + "/blocks/mempool/events": { + "function": ledger.get_mempool_events, + }, + "/blocks/mempool/events/": { + "function": ledger.get_mempool_events, + }, "/blocks//credits": { "function": ledger.get_credits, }, @@ -153,7 +162,7 @@ "function": ledger.get_dispensers, "args": [("status", 0)], }, - "/asset//dispensers/
": { + "/assets//dispensers/
": { "function": ledger.get_dispensers, "args": [("status", 0)], }, @@ -199,6 +208,9 @@ "/events/": { "function": ledger.get_events, }, + "/events/counts": { + "function": ledger.get_events_counts, + }, "/events/": { "function": ledger.get_events, "args": [("last", None), ("limit", 100)], diff --git a/counterparty-lib/counterpartylib/lib/ledger.py b/counterparty-lib/counterpartylib/lib/ledger.py index a91bf96a84..d3a8cffc4f 100644 --- a/counterparty-lib/counterpartylib/lib/ledger.py +++ b/counterparty-lib/counterpartylib/lib/ledger.py @@ -101,6 +101,43 @@ def get_events(db, block_index=None, event=None, event_index=None, last=None, li return events +def get_mempool_events(db, event_name=None): + cursor = db.cursor() + where = [] + bindings = [] + if event_name is not None: + where.append("event = ?") + bindings.append(event_name) + # no sql injection here + query = """ + SELECT tx_hash, event, bindings, timestamp + FROM mempool + """ + if event_name is not None: + query += f"""WHERE ({" AND ".join(where)})""" # nosec B608 # noqa: S608 + query += """ORDER BY timestamp DESC""" + cursor.execute(query, tuple(bindings)) + events = cursor.fetchall() + for i, _ in enumerate(events): + events[i]["bindings"] = json.loads(events[i]["bindings"]) + return events + + +def get_events_counts(db, block_index=None): + cursor = db.cursor() + bindings = [] + query = """ + SELECT event, COUNT(*) AS event_count + FROM messages + """ + if block_index is not None: + query += "WHERE block_index = ?" + bindings.append(block_index) + query += "GROUP BY event" + cursor.execute(query) + return cursor.fetchall() + + # we are using a function here for testing purposes def curr_time(): return int(time.time()) From f8cc62c278d4038c74177ddb0bef97d0d90668d8 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sun, 7 Apr 2024 20:54:24 +0200 Subject: [PATCH 021/280] module in subfolder --- .../counterpartylib/lib/api/api_server.py | 118 +++++++++++++++++ .../lib/{v1/api.py => api/api_v1.py} | 0 .../lib/{api.py => api/routes.py} | 123 +----------------- counterparty-lib/counterpartylib/server.py | 6 +- .../test/bytespersigop_test.py | 2 +- .../counterpartylib/test/complex_unit_test.py | 2 +- .../counterpartylib/test/conftest.py | 8 +- .../test/estimate_fee_per_kb_test.py | 2 +- .../counterpartylib/test/fixtures/vectors.py | 2 +- .../test/p2sh_encoding_test.py | 2 +- .../counterpartylib/test/util_test.py | 2 +- 11 files changed, 137 insertions(+), 130 deletions(-) create mode 100644 counterparty-lib/counterpartylib/lib/api/api_server.py rename counterparty-lib/counterpartylib/lib/{v1/api.py => api/api_v1.py} (100%) rename counterparty-lib/counterpartylib/lib/{api.py => api/routes.py} (61%) diff --git a/counterparty-lib/counterpartylib/lib/api/api_server.py b/counterparty-lib/counterpartylib/lib/api/api_server.py new file mode 100644 index 0000000000..b1c6fca25d --- /dev/null +++ b/counterparty-lib/counterpartylib/lib/api/api_server.py @@ -0,0 +1,118 @@ +import argparse +import logging +import multiprocessing +from logging import handlers as logging_handlers +from multiprocessing import Process + +import flask +from counterpartylib import server +from counterpartylib.lib import ( + blocks, + config, + database, + ledger, +) +from counterpartylib.lib.api.routes import ROUTES +from flask import Flask, request +from flask import g as flask_globals +from flask_httpauth import HTTPBasicAuth + +multiprocessing.set_start_method("spawn", force=True) + +logger = logging.getLogger(config.LOGGER_NAME) +auth = HTTPBasicAuth() + + +def init_api_access_log(): + """Initialize API logger.""" + werkzeug_loggers = (logging.getLogger("werkzeug"), flask.current_app.logger) + + # Disable console logging... + for werkzeug_logger in werkzeug_loggers: # noqa: E741 + werkzeug_logger.setLevel(logging.CRITICAL) + werkzeug_logger.propagate = False + + # Log to file, if configured... + if config.API_LOG: + handler = logging_handlers.RotatingFileHandler( + config.API_LOG, "a", config.API_MAX_LOG_SIZE, config.API_MAX_LOG_COUNT + ) + for werkzeug_logger in werkzeug_loggers: # noqa: E741 + handler.setLevel(logging.DEBUG) + werkzeug_logger.addHandler(handler) + + flask.cli.show_server_banner = lambda *args: None + + +def remove_rowids(query_result): + """Remove the rowid field from the query result.""" + if isinstance(query_result, list): + filtered_results = [] + for row in list(query_result): + if "rowid" in row: + del row["rowid"] + if "MAX(rowid)" in row: + del row["MAX(rowid)"] + filtered_results.append(row) + return filtered_results + filtered_results = query_result + if "rowid" in filtered_results: + del filtered_results["rowid"] + if "MAX(rowid)" in filtered_results: + del filtered_results["MAX(rowid)"] + return filtered_results + + +def get_db(): + """Get the database connection.""" + if not hasattr(flask_globals, "db"): + flask_globals.db = database.get_connection(read_only=True) + return flask_globals.db + + +@auth.verify_password +def verify_password(username, password): + return username == config.RPC_USER and password == config.RPC_PASSWORD + + +@auth.login_required +def handle_route(**kwargs): + route = ROUTES.get(str(request.url_rule.rule)) + function_args = dict(kwargs) + if "args" in route: + for arg in route["args"]: + function_args[arg[0]] = request.args.get(arg[0], arg[1]) + result = route["function"](get_db(), **function_args) + return remove_rowids(result) + + +def run_api_server(args): + app = Flask(config.APP_NAME) + # Initialise log and config + server.initialise_log_and_config(argparse.Namespace(**args)) + with app.app_context(): + init_api_access_log() + # Get the last block index + ledger.CURRENT_BLOCK_INDEX = blocks.last_db_index(get_db()) + # Add routes + for path in ROUTES.keys(): + app.add_url_rule(path, view_func=handle_route) + # Start the API server + app.run(host=config.RPC_HOST, port=config.RPC_PORT, debug=False) + + +class APIServer(object): + def __init__(self): + self.process = None + + def start(self, args): + if self.process is not None: + raise Exception("API server is already running") + self.process = Process(target=run_api_server, args=(vars(args),)) + self.process.start() + return self.process + + def stop(self): + if self.process and self.process.is_alive(): + self.process.terminate() + self.process = None diff --git a/counterparty-lib/counterpartylib/lib/v1/api.py b/counterparty-lib/counterpartylib/lib/api/api_v1.py similarity index 100% rename from counterparty-lib/counterpartylib/lib/v1/api.py rename to counterparty-lib/counterpartylib/lib/api/api_v1.py diff --git a/counterparty-lib/counterpartylib/lib/api.py b/counterparty-lib/counterpartylib/lib/api/routes.py similarity index 61% rename from counterparty-lib/counterpartylib/lib/api.py rename to counterparty-lib/counterpartylib/lib/api/routes.py index 15a1346b25..cc404e4487 100644 --- a/counterparty-lib/counterpartylib/lib/api.py +++ b/counterparty-lib/counterpartylib/lib/api/routes.py @@ -1,26 +1,4 @@ -import argparse -import logging -import multiprocessing -from logging import handlers as logging_handlers -from multiprocessing import Process - -import flask -from flask import Flask, request -from flask import g as flask_globals -from flask_httpauth import HTTPBasicAuth - -from counterpartylib import server -from counterpartylib.lib import ( - blocks, - config, - database, - ledger, -) - -multiprocessing.set_start_method("spawn", force=True) - -logger = logging.getLogger(config.LOGGER_NAME) -auth = HTTPBasicAuth() +from counterpartylib.lib import ledger ROUTES = { ### /blocks ### @@ -205,6 +183,10 @@ "function": ledger.get_dispenses, }, ### /events ### + "/events": { + "function": ledger.get_events, + "args": [("last", None), ("limit", 100)], + }, "/events/": { "function": ledger.get_events, }, @@ -216,98 +198,3 @@ "args": [("last", None), ("limit", 100)], }, } - - -def init_api_access_log(): - """Initialize API logger.""" - werkzeug_loggers = (logging.getLogger("werkzeug"), flask.current_app.logger) - - # Disable console logging... - for werkzeug_logger in werkzeug_loggers: # noqa: E741 - werkzeug_logger.setLevel(logging.CRITICAL) - werkzeug_logger.propagate = False - - # Log to file, if configured... - if config.API_LOG: - handler = logging_handlers.RotatingFileHandler( - config.API_LOG, "a", config.API_MAX_LOG_SIZE, config.API_MAX_LOG_COUNT - ) - for werkzeug_logger in werkzeug_loggers: # noqa: E741 - handler.setLevel(logging.DEBUG) - werkzeug_logger.addHandler(handler) - - flask.cli.show_server_banner = lambda *args: None - - -def remove_rowids(query_result): - """Remove the rowid field from the query result.""" - if isinstance(query_result, list): - filtered_results = [] - for row in list(query_result): - if "rowid" in row: - del row["rowid"] - if "MAX(rowid)" in row: - del row["MAX(rowid)"] - filtered_results.append(row) - return filtered_results - filtered_results = query_result - if "rowid" in filtered_results: - del filtered_results["rowid"] - if "MAX(rowid)" in filtered_results: - del filtered_results["MAX(rowid)"] - return filtered_results - - -def get_db(): - """Get the database connection.""" - if not hasattr(flask_globals, "db"): - flask_globals.db = database.get_connection(read_only=True) - return flask_globals.db - - -@auth.verify_password -def verify_password(username, password): - return username == config.RPC_USER and password == config.RPC_PASSWORD - - -@auth.login_required -def handle_route(**kwargs): - route = ROUTES.get(str(request.url_rule.rule)) - function_args = dict(kwargs) - if "args" in route: - for arg in route["args"]: - function_args[arg[0]] = request.args.get(arg[0], arg[1]) - result = route["function"](get_db(), **function_args) - return remove_rowids(result) - - -def run_api_server(args): - app = Flask(config.APP_NAME) - # Initialise log and config - server.initialise_log_and_config(argparse.Namespace(**args)) - with app.app_context(): - init_api_access_log() - # Get the last block index - ledger.CURRENT_BLOCK_INDEX = blocks.last_db_index(get_db()) - # Add routes - for path in ROUTES.keys(): - app.add_url_rule(path, view_func=handle_route) - # Start the API server - app.run(host=config.RPC_HOST, port=config.RPC_PORT, debug=False) - - -class APIServer(object): - def __init__(self): - self.process = None - - def start(self, args): - if self.process is not None: - raise Exception("API server is already running") - self.process = Process(target=run_api_server, args=(vars(args),)) - self.process.start() - return self.process - - def stop(self): - if self.process and self.process.is_alive(): - self.process.terminate() - self.process = None diff --git a/counterparty-lib/counterpartylib/server.py b/counterparty-lib/counterpartylib/server.py index b34ffa136f..35b61504f3 100755 --- a/counterparty-lib/counterpartylib/server.py +++ b/counterparty-lib/counterpartylib/server.py @@ -21,7 +21,6 @@ from termcolor import colored, cprint from counterpartylib.lib import ( - api, backend, blocks, check, @@ -33,7 +32,8 @@ util, ) from counterpartylib.lib import kickstart as kickstarter -from counterpartylib.lib.v1 import api as api_v1 +from counterpartylib.lib.api import api_server as api_v2 +from counterpartylib.lib.api import api_v1 logger = logging.getLogger(config.LOGGER_NAME) D = decimal.Decimal @@ -677,7 +677,7 @@ def start_all(args): api_server.start() else: # REST API Server. - api_server = api.APIServer() + api_server = api_v2.APIServer() api_server.start(args) # Server diff --git a/counterparty-lib/counterpartylib/test/bytespersigop_test.py b/counterparty-lib/counterpartylib/test/bytespersigop_test.py index 8bc6ffd727..b4b3c7ff36 100644 --- a/counterparty-lib/counterpartylib/test/bytespersigop_test.py +++ b/counterparty-lib/counterpartylib/test/bytespersigop_test.py @@ -4,7 +4,7 @@ import bitcoin as bitcoinlib from counterpartylib.lib import ledger -from counterpartylib.lib.v1 import api +from counterpartylib.lib.api import api_v1 as api from counterpartylib.test import util_test from counterpartylib.test.fixtures.params import ADDR diff --git a/counterparty-lib/counterpartylib/test/complex_unit_test.py b/counterparty-lib/counterpartylib/test/complex_unit_test.py index 2fed39a6ac..19c5e6c332 100644 --- a/counterparty-lib/counterpartylib/test/complex_unit_test.py +++ b/counterparty-lib/counterpartylib/test/complex_unit_test.py @@ -5,7 +5,7 @@ from apsw import ConstraintError from counterpartylib.lib import blocks, ledger, util -from counterpartylib.lib.v1 import api +from counterpartylib.lib.api import api_v1 as api # this is require near the top to do setup of the test suite from counterpartylib.test import ( diff --git a/counterparty-lib/counterpartylib/test/conftest.py b/counterparty-lib/counterpartylib/test/conftest.py index 091554825f..ffca6c8aa3 100644 --- a/counterparty-lib/counterpartylib/test/conftest.py +++ b/counterparty-lib/counterpartylib/test/conftest.py @@ -17,9 +17,9 @@ from pycoin.coins.bitcoin import Tx # noqa: F401 from counterpartylib import server -from counterpartylib.lib import api as api_v2 from counterpartylib.lib import arc4, config, database, ledger, log, script, util -from counterpartylib.lib.v1 import api +from counterpartylib.lib.api import api_server as api_v2 +from counterpartylib.lib.api import api_v1 as api from counterpartylib.test import util_test from counterpartylib.test.fixtures.params import DEFAULT_PARAMS from counterpartylib.test.fixtures.scenarios import INTEGRATION_SCENARIOS @@ -514,7 +514,9 @@ def init_arc4(seed): monkeypatch.setattr("counterpartylib.lib.log.isodt", isodt) monkeypatch.setattr("counterpartylib.lib.ledger.curr_time", curr_time) monkeypatch.setattr("counterpartylib.lib.util.date_passed", date_passed) - monkeypatch.setattr("counterpartylib.lib.api.init_api_access_log", init_api_access_log) + monkeypatch.setattr( + "counterpartylib.lib.api.api_server.init_api_access_log", init_api_access_log + ) if hasattr(config, "PREFIX"): monkeypatch.setattr("counterpartylib.lib.config.PREFIX", b"TESTXXXX") monkeypatch.setattr("counterpartylib.lib.backend.getrawtransaction", mocked_getrawtransaction) diff --git a/counterparty-lib/counterpartylib/test/estimate_fee_per_kb_test.py b/counterparty-lib/counterpartylib/test/estimate_fee_per_kb_test.py index 3ec95ca4fb..6f49d4a930 100644 --- a/counterparty-lib/counterpartylib/test/estimate_fee_per_kb_test.py +++ b/counterparty-lib/counterpartylib/test/estimate_fee_per_kb_test.py @@ -5,7 +5,7 @@ import bitcoin as bitcoinlib from counterpartylib.lib import (backend, transaction) -from counterpartylib.lib.v1 import api +from counterpartylib.lib.api import api_v1 as api from counterpartylib.test import ( util_test, ) diff --git a/counterparty-lib/counterpartylib/test/fixtures/vectors.py b/counterparty-lib/counterpartylib/test/fixtures/vectors.py index e69720ee46..a548d8befd 100644 --- a/counterparty-lib/counterpartylib/test/fixtures/vectors.py +++ b/counterparty-lib/counterpartylib/test/fixtures/vectors.py @@ -14,11 +14,11 @@ import bitcoin as bitcoinlib from counterpartylib.lib import config, exceptions, script +from counterpartylib.lib.api.api_v1 import APIError from counterpartylib.lib.kickstart.blocks_parser import BlockchainParser from counterpartylib.lib.ledger import CreditError, DebitError from counterpartylib.lib.messages import issuance from counterpartylib.lib.util import QuantityError, RPCError -from counterpartylib.lib.v1.api import APIError from .params import ( ADDR, diff --git a/counterparty-lib/counterpartylib/test/p2sh_encoding_test.py b/counterparty-lib/counterpartylib/test/p2sh_encoding_test.py index 78267f404a..5cf51448f7 100644 --- a/counterparty-lib/counterpartylib/test/p2sh_encoding_test.py +++ b/counterparty-lib/counterpartylib/test/p2sh_encoding_test.py @@ -15,9 +15,9 @@ ledger, script, ) +from counterpartylib.lib.api import api_v1 as api from counterpartylib.lib.kickstart.blocks_parser import BlockchainParser from counterpartylib.lib.transaction_helper import p2sh_encoding -from counterpartylib.lib.v1 import api # this is require near the top to do setup of the test suite from counterpartylib.test import ( diff --git a/counterparty-lib/counterpartylib/test/util_test.py b/counterparty-lib/counterpartylib/test/util_test.py index 2e29881499..bedfbf81a6 100644 --- a/counterparty-lib/counterpartylib/test/util_test.py +++ b/counterparty-lib/counterpartylib/test/util_test.py @@ -804,7 +804,7 @@ def check_outputs( tested_module = sys.modules[f"counterpartylib.lib.{tx_name}"] except KeyError: # TODO: hack if tx_name == "api_v1": - tested_module = sys.modules["counterpartylib.lib.v1.api"] + tested_module = sys.modules["counterpartylib.lib.api.api_v1"] else: tested_module = sys.modules[f"counterpartylib.lib.messages.{tx_name}"] tested_method = getattr(tested_module, method) From 313b7471106000b2a0adfd4258de7653d2ca422b Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sun, 7 Apr 2024 21:41:56 +0200 Subject: [PATCH 022/280] Add route to compose transactions --- .../counterpartylib/lib/api/api_server.py | 4 +- .../counterpartylib/lib/api/api_v1.py | 232 ++---------------- .../counterpartylib/lib/api/routes.py | 9 +- .../counterpartylib/lib/transaction.py | 75 +++++- .../test/bytespersigop_test.py | 13 +- .../test/estimate_fee_per_kb_test.py | 3 +- .../test/p2sh_encoding_test.py | 18 +- 7 files changed, 120 insertions(+), 234 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/api/api_server.py b/counterparty-lib/counterpartylib/lib/api/api_server.py index b1c6fca25d..1f05736a70 100644 --- a/counterparty-lib/counterpartylib/lib/api/api_server.py +++ b/counterparty-lib/counterpartylib/lib/api/api_server.py @@ -79,7 +79,9 @@ def verify_password(username, password): def handle_route(**kwargs): route = ROUTES.get(str(request.url_rule.rule)) function_args = dict(kwargs) - if "args" in route: + if "pass_all_args" in route and route["pass_all_args"]: + function_args = request.args | function_args + elif "args" in route: for arg in route["args"]: function_args[arg[0]] = request.args.get(arg[0], arg[1]) result = route["function"](get_db(), **function_args) diff --git a/counterparty-lib/counterpartylib/lib/api/api_v1.py b/counterparty-lib/counterpartylib/lib/api/api_v1.py index a90dbc8e3c..72cd2d6d3a 100644 --- a/counterparty-lib/counterpartylib/lib/api/api_v1.py +++ b/counterparty-lib/counterpartylib/lib/api/api_v1.py @@ -5,32 +5,22 @@ problem. """ +import binascii import collections import decimal import json import logging -import os # noqa: F401 +import math import re -import sys import threading import time import traceback from logging import handlers as logging_handlers -import requests # noqa: F401 - -D = decimal.Decimal -import binascii # noqa: E402 -import inspect # noqa: E402 -import math # noqa: E402 -import struct # noqa: E402, F401 - -import apsw # noqa: E402, F401 -import flask # noqa: E402 -import jsonrpc # noqa: E402 +import flask +import jsonrpc from counterpartylib.lib import ( # noqa: E402 backend, - blocks, # noqa: F401 config, database, exceptions, @@ -59,11 +49,13 @@ sweep, # noqa: F401 ) from counterpartylib.lib.messages.versions import enhanced_send # noqa: E402 -from flask import request # noqa: E402 -from flask_httpauth import HTTPBasicAuth # noqa: E402 -from jsonrpc import dispatcher # noqa: E402 -from jsonrpc.exceptions import JSONRPCDispatchException # noqa: E402 -from xmltodict import unparse as serialize_to_xml # noqa: E402 +from flask import request +from flask_httpauth import HTTPBasicAuth +from jsonrpc import dispatcher +from jsonrpc.exceptions import JSONRPCDispatchException +from xmltodict import unparse as serialize_to_xml + +D = decimal.Decimal logger = logging.getLogger(config.LOGGER_NAME) @@ -144,48 +136,6 @@ """, } -API_TRANSACTIONS = [ - "bet", - "broadcast", - "btcpay", - "burn", - "cancel", - "destroy", - "dividend", - "issuance", - "order", - "send", - "rps", - "rpsresolve", - "sweep", - "dispenser", -] - -COMMONS_ARGS = [ - "encoding", - "fee_per_kb", - "regular_dust_size", - "multisig_dust_size", - "op_return_value", - "pubkey", - "allow_unconfirmed_inputs", - "fee", - "fee_provided", - "estimate_fee_per_kb", - "estimate_fee_per_kb_nblocks", - "estimate_fee_per_kb_conf_target", - "estimate_fee_per_kb_mode", - "unspent_tx_hash", - "custom_inputs", - "dust_return_pubkey", - "disable_utxo_locks", - "extended_tx_info", - "p2sh_source_multisig_pubkeys", - "p2sh_source_multisig_pubkeys_required", - "p2sh_pretx_txid", -] - - JSON_RPC_ERROR_API_COMPOSE = -32001 # code to use for error composing transaction result CURRENT_API_STATUS_CODE = None # is updated by the APIStatusPoller @@ -518,118 +468,6 @@ def adjust_get_transactions_results(query_result): return filtered_results -def compose_transaction( - db, - name, - params, - encoding="auto", - fee_per_kb=None, - estimate_fee_per_kb=None, - estimate_fee_per_kb_conf_target=config.ESTIMATE_FEE_CONF_TARGET, - estimate_fee_per_kb_mode=config.ESTIMATE_FEE_MODE, - regular_dust_size=config.DEFAULT_REGULAR_DUST_SIZE, - multisig_dust_size=config.DEFAULT_MULTISIG_DUST_SIZE, - op_return_value=config.DEFAULT_OP_RETURN_VALUE, - pubkey=None, - allow_unconfirmed_inputs=False, - fee=None, - fee_provided=0, - unspent_tx_hash=None, - custom_inputs=None, - dust_return_pubkey=None, - disable_utxo_locks=False, - extended_tx_info=False, - p2sh_source_multisig_pubkeys=None, - p2sh_source_multisig_pubkeys_required=None, - p2sh_pretx_txid=None, - old_style_api=True, - segwit=False, -): - """Create and return a transaction.""" - - # Get provided pubkeys. - if type(pubkey) == str: # noqa: E721 - provided_pubkeys = [pubkey] - elif type(pubkey) == list: # noqa: E721 - provided_pubkeys = pubkey - elif pubkey == None: # noqa: E711 - provided_pubkeys = [] - else: - assert False # noqa: B011 - - # Get additional pubkeys from `source` and `destination` params. - # Convert `source` and `destination` to pubkeyhash form. - for address_name in ["source", "destination"]: - if address_name in params: - address = params[address_name] - if isinstance(address, list): - # pkhshs = [] - # for addr in address: - # provided_pubkeys += script.extract_pubkeys(addr) - # pkhshs.append(script.make_pubkeyhash(addr)) - # params[address_name] = pkhshs - pass - else: - provided_pubkeys += script.extract_pubkeys(address) - params[address_name] = script.make_pubkeyhash(address) - - # Check validity of collected pubkeys. - for pubkey in provided_pubkeys: - if not script.is_fully_valid(binascii.unhexlify(pubkey)): - raise script.AddressError(f"invalid public key: {pubkey}") - - compose_method = sys.modules[f"counterpartylib.lib.messages.{name}"].compose - compose_params = inspect.getfullargspec(compose_method)[0] - missing_params = [p for p in compose_params if p not in params and p != "db"] - for param in missing_params: - params[param] = None - - # dont override fee_per_kb if specified - if fee_per_kb is not None: - estimate_fee_per_kb = False - else: - fee_per_kb = config.DEFAULT_FEE_PER_KB - - if "extended_tx_info" in params: - extended_tx_info = params["extended_tx_info"] - del params["extended_tx_info"] - - if "old_style_api" in params: - old_style_api = params["old_style_api"] - del params["old_style_api"] - - if "segwit" in params: - segwit = params["segwit"] - del params["segwit"] - - tx_info = compose_method(db, **params) - return transaction.construct( - db, - tx_info, - encoding=encoding, - fee_per_kb=fee_per_kb, - estimate_fee_per_kb=estimate_fee_per_kb, - estimate_fee_per_kb_conf_target=estimate_fee_per_kb_conf_target, - regular_dust_size=regular_dust_size, - multisig_dust_size=multisig_dust_size, - op_return_value=op_return_value, - provided_pubkeys=provided_pubkeys, - allow_unconfirmed_inputs=allow_unconfirmed_inputs, - exact_fee=fee, - fee_provided=fee_provided, - unspent_tx_hash=unspent_tx_hash, - custom_inputs=custom_inputs, - dust_return_pubkey=dust_return_pubkey, - disable_utxo_locks=disable_utxo_locks, - extended_tx_info=extended_tx_info, - p2sh_source_multisig_pubkeys=p2sh_source_multisig_pubkeys, - p2sh_source_multisig_pubkeys_required=p2sh_source_multisig_pubkeys_required, - p2sh_pretx_txid=p2sh_pretx_txid, - old_style_api=old_style_api, - segwit=segwit, - ) - - def conditional_decorator(decorator, condition): """Checks the condition and if True applies specified decorator.""" @@ -762,23 +600,12 @@ def sql(query, bindings=None): # Generate dynamically create_{transaction} methods def generate_create_method(tx): - def split_params(**kwargs): - transaction_args = {} - common_args = {} - private_key_wif = None - for key in kwargs: - if key in COMMONS_ARGS: - common_args[key] = kwargs[key] - elif key == "privkey": - private_key_wif = kwargs[key] - else: - transaction_args[key] = kwargs[key] - return transaction_args, common_args, private_key_wif - def create_method(**kwargs): try: - transaction_args, common_args, private_key_wif = split_params(**kwargs) - return compose_transaction( + transaction_args, common_args, private_key_wif = ( + transaction.split_compose_arams(**kwargs) + ) + return transaction.compose_transaction( self.db, name=tx, params=transaction_args, **common_args ) except ( @@ -798,7 +625,7 @@ def create_method(**kwargs): return create_method - for tx in API_TRANSACTIONS: + for tx in transaction.COMPOSABLE_TRANSACTIONS: create_method = generate_create_method(tx) create_method.__name__ = f"create_{tx}" dispatcher.add_method(create_method) @@ -1228,7 +1055,7 @@ def handle_healthz(): check_database_state(self.db, latest_block_index) else: logger.debug("Performing heavy healthz check.") - compose_transaction( + transaction.compose_transaction( self.db, name="send", params={ @@ -1351,7 +1178,7 @@ def handle_rest(path_args, flask_request): error = "No query_type provided." return flask.Response(error, 400, mimetype="application/json") # Check if message type or table name are valid. - if (compose and query_type not in API_TRANSACTIONS) or ( + if (compose and query_type not in transaction.COMPOSABLE_TRANSACTIONS) or ( not compose and query_type not in API_TABLES ): error = f'No such query type in supported queries: "{query_type}".' @@ -1362,24 +1189,9 @@ def handle_rest(path_args, flask_request): query_data = {} if compose: - common_args = {} - transaction_args = {} - for key, value in extra_args: - # Determine value type. - try: - value = int(value) # noqa: PLW2901 - except ValueError: - try: - value = float(value) # noqa: PLW2901 - except ValueError: - pass - # Split keys into common and transaction-specific arguments. Discard the privkey. - if key in COMMONS_ARGS: - common_args[key] = value - elif key == "privkey": - pass - else: - transaction_args[key] = value + transaction_args, common_args, private_key_wif = transaction.split_compose_arams( + **extra_args + ) # Must have some additional transaction arguments. if not len(transaction_args): @@ -1388,7 +1200,7 @@ def handle_rest(path_args, flask_request): # Compose the transaction. try: - query_data = compose_transaction( + query_data = transaction.compose_transaction( self.db, name=query_type, params=transaction_args, **common_args ) except ( diff --git a/counterparty-lib/counterpartylib/lib/api/routes.py b/counterparty-lib/counterpartylib/lib/api/routes.py index cc404e4487..0af4fd8dcd 100644 --- a/counterparty-lib/counterpartylib/lib/api/routes.py +++ b/counterparty-lib/counterpartylib/lib/api/routes.py @@ -1,4 +1,7 @@ -from counterpartylib.lib import ledger +from counterpartylib.lib import ( + ledger, + transaction, +) ROUTES = { ### /blocks ### @@ -55,6 +58,10 @@ "function": ledger.get_sweeps, }, ### /transactions ### + "/transactions/compose/": { + "function": transaction.compose, + "pass_all_args": True, + }, "/transactions/": { "function": ledger.get_transaction, }, diff --git a/counterparty-lib/counterpartylib/lib/transaction.py b/counterparty-lib/counterpartylib/lib/transaction.py index 644f56fc41..7ae778cf08 100644 --- a/counterparty-lib/counterpartylib/lib/transaction.py +++ b/counterparty-lib/counterpartylib/lib/transaction.py @@ -7,26 +7,27 @@ import binascii import decimal import hashlib +import inspect import io -import json # noqa: F401 import logging +<<<<<<< HEAD import math # noqa: F401 import os # noqa: F401 import re # noqa: F401 import sys # noqa: F401 import threading import time # noqa: F401 +======= +import sys +>>>>>>> 0595b1a1 (Add route to compose transactions) import bitcoin as bitcoinlib import cachetools -import requests # noqa: F401 -from bitcoin.core import CTransaction, b2lx, x # noqa: F401 -from bitcoin.core.script import CScript # noqa: F401 +from bitcoin.core import CTransaction from counterpartylib.lib import ( arc4, # noqa: F401 backend, - blocks, # noqa: F401 config, exceptions, gettxinfo, @@ -957,3 +958,67 @@ def get_dust_return_pubkey(source, provided_pubkeys, encoding): raise script.InputError("Invalid private key.") # noqa: B904 return dust_return_pubkey + + +COMPOSE_COMMONS_ARGS = [ + "encoding", + "fee_per_kb", + "regular_dust_size", + "multisig_dust_size", + "op_return_value", + "pubkey", + "allow_unconfirmed_inputs", + "fee", + "fee_provided", + "estimate_fee_per_kb", + "estimate_fee_per_kb_nblocks", + "estimate_fee_per_kb_conf_target", + "estimate_fee_per_kb_mode", + "unspent_tx_hash", + "custom_inputs", + "dust_return_pubkey", + "disable_utxo_locks", + "extended_tx_info", + "p2sh_source_multisig_pubkeys", + "p2sh_source_multisig_pubkeys_required", + "p2sh_pretx_txid", +] + + +def split_compose_arams(**kwargs): + transaction_args = {} + common_args = {} + private_key_wif = None + for key in kwargs: + if key in COMPOSE_COMMONS_ARGS: + common_args[key] = kwargs[key] + elif key == "privkey": + private_key_wif = kwargs[key] + else: + transaction_args[key] = kwargs[key] + return transaction_args, common_args, private_key_wif + + +COMPOSABLE_TRANSACTIONS = [ + "bet", + "broadcast", + "btcpay", + "burn", + "cancel", + "destroy", + "dividend", + "issuance", + "order", + "send", + "rps", + "rpsresolve", + "sweep", + "dispenser", +] + + +def compose(db, transaction_name, **kwargs): + if transaction_name not in COMPOSABLE_TRANSACTIONS: + raise exceptions.TransactionError("Transaction type not composable.") + transaction_args, common_args, _ = split_compose_arams(**kwargs) + return compose_transaction(db, name=transaction_name, params=transaction_args, **common_args) diff --git a/counterparty-lib/counterpartylib/test/bytespersigop_test.py b/counterparty-lib/counterpartylib/test/bytespersigop_test.py index b4b3c7ff36..79778e2b37 100644 --- a/counterparty-lib/counterpartylib/test/bytespersigop_test.py +++ b/counterparty-lib/counterpartylib/test/bytespersigop_test.py @@ -3,8 +3,7 @@ import bitcoin as bitcoinlib -from counterpartylib.lib import ledger -from counterpartylib.lib.api import api_v1 as api +from counterpartylib.lib import ledger, transaction from counterpartylib.test import util_test from counterpartylib.test.fixtures.params import ADDR @@ -21,7 +20,7 @@ def test_bytespersigop(server_db): transaction.initialise() # ADDR[0], bytespersigop=False, desc 41 bytes, opreturn - txhex = api.compose_transaction( + txhex = transaction.compose_transaction( server_db, "issuance", { @@ -41,7 +40,7 @@ def test_bytespersigop(server_db): assert "OP_RETURN" in repr(tx.vout[0].scriptPubKey) # ADDR[0], bytespersigop=False, desc 42 bytes, multisig - txhex = api.compose_transaction( + txhex = transaction.compose_transaction( server_db, "issuance", { @@ -66,7 +65,7 @@ def test_bytespersigop(server_db): assert ledger.enabled("bytespersigop") == True # noqa: E712 # ADDR[0], bytespersigop=True, desc 41 bytes, opreturn - txhex = api.compose_transaction( + txhex = transaction.compose_transaction( server_db, "issuance", { @@ -86,7 +85,7 @@ def test_bytespersigop(server_db): assert "OP_RETURN" in repr(tx.vout[0].scriptPubKey) # ADDR[1], bytespersigop=True, desc 41 bytes, opreturn encoding - txhex = api.compose_transaction( + txhex = transaction.compose_transaction( server_db, "issuance", { @@ -107,7 +106,7 @@ def test_bytespersigop(server_db): # ADDR[1], bytespersigop=True, desc 20 bytes, FORCED encoding=multisig # will use 2 UTXOs to make the bytes:sigop ratio in our favor - txhex = api.compose_transaction( + txhex = transaction.compose_transaction( server_db, "issuance", { diff --git a/counterparty-lib/counterpartylib/test/estimate_fee_per_kb_test.py b/counterparty-lib/counterpartylib/test/estimate_fee_per_kb_test.py index 6f49d4a930..ef74ba3e64 100644 --- a/counterparty-lib/counterpartylib/test/estimate_fee_per_kb_test.py +++ b/counterparty-lib/counterpartylib/test/estimate_fee_per_kb_test.py @@ -40,9 +40,10 @@ def _fee_per_kb(conf_target, mode): ) with util_test.ConfigContext(ESTIMATE_FEE_PER_KB=True): + transaction.initialise() - txhex = api.compose_transaction( + txhex = transaction.compose_transaction( server_db, "send", {"source": ADDR[0], "destination": ADDR[1], "asset": "XCP", "quantity": 100}, diff --git a/counterparty-lib/counterpartylib/test/p2sh_encoding_test.py b/counterparty-lib/counterpartylib/test/p2sh_encoding_test.py index 5cf51448f7..1f001cd522 100644 --- a/counterparty-lib/counterpartylib/test/p2sh_encoding_test.py +++ b/counterparty-lib/counterpartylib/test/p2sh_encoding_test.py @@ -14,8 +14,8 @@ gettxinfo, ledger, script, + transaction, ) -from counterpartylib.lib.api import api_v1 as api from counterpartylib.lib.kickstart.blocks_parser import BlockchainParser from counterpartylib.lib.transaction_helper import p2sh_encoding @@ -75,7 +75,7 @@ def test_p2sh_encoding(server_db): fee = 20000 fee_per_kb = 50000 - result = api.compose_transaction( + result = transaction.compose_transaction( server_db, "send", {"source": source, "destination": destination, "asset": "XCP", "quantity": 100}, @@ -147,7 +147,7 @@ def test_p2sh_encoding(server_db): logger.debug(f"pretxid {pretxid}") # check that when we do another, unrelated, send that it won't use our UTXO - result = api.compose_transaction( + result = transaction.compose_transaction( server_db, "send", {"source": source, "destination": destination, "asset": "XCP", "quantity": 100}, @@ -161,7 +161,7 @@ def test_p2sh_encoding(server_db): ) # now compose the data transaction - result = api.compose_transaction( + result = transaction.compose_transaction( server_db, "send", {"source": source, "destination": destination, "asset": "XCP", "quantity": 100}, @@ -253,7 +253,7 @@ def test_p2sh_encoding_long_data(server_db): # pprint.pprint(utxos) fee_per_kb = 50000 - result = api.compose_transaction( + result = transaction.compose_transaction( server_db, "broadcast", { @@ -330,7 +330,7 @@ def test_p2sh_encoding_long_data(server_db): logger.debug(f"pretxid {pretxid}") # now compose the data transaction - result = api.compose_transaction( + result = transaction.compose_transaction( server_db, "broadcast", { @@ -435,7 +435,7 @@ def test_p2sh_encoding_p2sh_source_not_supported(server_db): fee_per_kb = 50000 with pytest.raises(exceptions.TransactionError): - result = api.compose_transaction( # noqa: F841 + result = transaction.compose_transaction( # noqa: F841 server_db, "send", {"source": source, "destination": destination, "asset": "XCP", "quantity": 100}, @@ -477,7 +477,7 @@ def test_p2sh_encoding_manual_multisig_transaction(server_db): # setup transaction fee = 20000 fee_per_kb = 50000 - pretxhex = api.compose_transaction( + pretxhex = transaction.compose_transaction( server_db, "send", { @@ -503,7 +503,7 @@ def test_p2sh_encoding_manual_multisig_transaction(server_db): logger.debug(f"pretxid {pretxid}") # now compose the data transaction - result = api.compose_transaction( + result = transaction.compose_transaction( server_db, "send", {"source": source, "destination": destination, "asset": "XCP", "quantity": 100}, From d699408b11e0af007b87782ee9e1a615abe3c180 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 8 Apr 2024 11:40:09 +0200 Subject: [PATCH 023/280] Add route for healthz and get_tx_info --- .../counterpartylib/lib/api/api_v1.py | 45 ++++-------------- .../counterpartylib/lib/api/routes.py | 10 ++++ .../counterpartylib/lib/api/util.py | 46 +++++++++++++++++++ .../counterpartylib/lib/transaction.py | 14 ++++++ 4 files changed, 78 insertions(+), 37 deletions(-) create mode 100644 counterparty-lib/counterpartylib/lib/api/util.py diff --git a/counterparty-lib/counterpartylib/lib/api/api_v1.py b/counterparty-lib/counterpartylib/lib/api/api_v1.py index 72cd2d6d3a..63bdd7f170 100644 --- a/counterparty-lib/counterpartylib/lib/api/api_v1.py +++ b/counterparty-lib/counterpartylib/lib/api/api_v1.py @@ -19,7 +19,7 @@ import flask import jsonrpc -from counterpartylib.lib import ( # noqa: E402 +from counterpartylib.lib import ( backend, config, database, @@ -31,8 +31,9 @@ transaction, util, ) -from counterpartylib.lib.kickstart.blocks_parser import BlockchainParser # noqa: E402 -from counterpartylib.lib.messages import ( # noqa: E402 +from counterpartylib.lib.api import util as api_util +from counterpartylib.lib.kickstart.blocks_parser import BlockchainParser +from counterpartylib.lib.messages import ( bet, # noqa: F401 broadcast, # noqa: F401 btcpay, # noqa: F401 @@ -171,14 +172,6 @@ class DatabaseError(Exception): pass -def check_database_state(db, blockcount): - f"""Checks {config.XCP_NAME} database to see if is caught up with backend.""" # noqa: B021 - if ledger.CURRENT_BLOCK_INDEX + 1 < blockcount: - raise DatabaseError(f"{config.XCP_NAME} database is behind backend.") - logger.debug("Database state check passed.") - return - - # TODO: ALL queries EVERYWHERE should be done with these methods def db_query(db, statement, bindings=(), callback=None, **callback_args): """Allow direct access to the database in a parametrized manner.""" @@ -529,7 +522,7 @@ def run(self): check_backend_state() code = 12 logger.debug("Checking database state.") - check_database_state(db, backend.getblockcount()) + api_util.check_database_state(db, backend.getblockcount()) self.last_database_check = time.time() except (BackendError, DatabaseError) as e: exception_name = e.__class__.__name__ @@ -796,7 +789,7 @@ def get_running_info(): latest_block_index = backend.getblockcount() try: - check_database_state(self.db, latest_block_index) + api_util.check_database_state(self.db, latest_block_index) except DatabaseError: caught_up = False else: @@ -1045,31 +1038,9 @@ def _set_cors_headers(response): @app.route("/healthz", methods=["GET"]) def handle_healthz(): msg, code = "Healthy", 200 - - type_ = request.args.get("type", "heavy") - - try: - if type_ == "light": - logger.debug("Performing light healthz check.") - latest_block_index = backend.getblockcount() - check_database_state(self.db, latest_block_index) - else: - logger.debug("Performing heavy healthz check.") - transaction.compose_transaction( - self.db, - name="send", - params={ - "source": config.UNSPENDABLE, - "destination": config.UNSPENDABLE, - "asset": config.XCP, - "quantity": 100000000, - }, - allow_unconfirmed_inputs=True, - fee=1000, - ) - except Exception: + check_type = request.args.get("type", "heavy") + if not api_util.healthz(self.db, check_type): msg, code = "Unhealthy", 503 - return flask.Response(msg, code, mimetype="application/json") @app.route("/", defaults={"args_path": ""}, methods=["GET", "POST", "OPTIONS"]) diff --git a/counterparty-lib/counterpartylib/lib/api/routes.py b/counterparty-lib/counterpartylib/lib/api/routes.py index 0af4fd8dcd..d22f4b6576 100644 --- a/counterparty-lib/counterpartylib/lib/api/routes.py +++ b/counterparty-lib/counterpartylib/lib/api/routes.py @@ -2,6 +2,7 @@ ledger, transaction, ) +from counterpartylib.lib.api.util import handle_healthz_route ROUTES = { ### /blocks ### @@ -62,6 +63,10 @@ "function": transaction.compose, "pass_all_args": True, }, + "/transactions/info": { + "function": transaction.info, + "args": [("rawtransaction", None), ("block_index", None)], + }, "/transactions/": { "function": ledger.get_transaction, }, @@ -204,4 +209,9 @@ "function": ledger.get_events, "args": [("last", None), ("limit", 100)], }, + ### /healthz ### + "/healthz": { + "function": handle_healthz_route, + "args": [("check", "heavy")], + }, } diff --git a/counterparty-lib/counterpartylib/lib/api/util.py b/counterparty-lib/counterpartylib/lib/api/util.py new file mode 100644 index 0000000000..c7f92c6fe8 --- /dev/null +++ b/counterparty-lib/counterpartylib/lib/api/util.py @@ -0,0 +1,46 @@ +import logging + +import flask +from counterparylib.lib import backend, config, exceptions, ledger, transaction + +logger = logging.getLogger(config.LOGGER_NAME) + + +def check_last_parsed_block(blockcount): + f"""Checks {config.XCP_NAME} database to see if is caught up with backend.""" # noqa: B021 + if ledger.CURRENT_BLOCK_INDEX + 1 < blockcount: + raise exceptions.DatabaseError(f"{config.XCP_NAME} database is behind backend.") + logger.debug("Database state check passed.") + return + + +def healthz(db, check_type="heavy"): + try: + if check_type == "light": + logger.debug("Performing light healthz check.") + latest_block_index = backend.getblockcount() + check_last_parsed_block(latest_block_index) + else: + logger.debug("Performing heavy healthz check.") + transaction.compose_transaction( + db, + name="send", + params={ + "source": config.UNSPENDABLE, + "destination": config.UNSPENDABLE, + "asset": config.XCP, + "quantity": 100000000, + }, + allow_unconfirmed_inputs=True, + fee=1000, + ) + except Exception: + return False + return True + + +def handle_healthz_route(db, check="heavy"): + msg, code = "Healthy", 200 + if not healthz(db, check): + msg, code = "Unhealthy", 503 + return flask.Response(msg, code, mimetype="application/json") diff --git a/counterparty-lib/counterpartylib/lib/transaction.py b/counterparty-lib/counterpartylib/lib/transaction.py index 7ae778cf08..184bf039d4 100644 --- a/counterparty-lib/counterpartylib/lib/transaction.py +++ b/counterparty-lib/counterpartylib/lib/transaction.py @@ -1022,3 +1022,17 @@ def compose(db, transaction_name, **kwargs): raise exceptions.TransactionError("Transaction type not composable.") transaction_args, common_args, _ = split_compose_arams(**kwargs) return compose_transaction(db, name=transaction_name, params=transaction_args, **common_args) + + +def info(db, rawtransaction, block_index=None): + # block_index mandatory for transactions before block 335000 + source, destination, btc_amount, fee, data, extra = gettxinfo.get_tx_info( + db, BlockchainParser().deserialize_tx(rawtransaction), block_index=block_index + ) + return { + "source": source, + "destination": destination, + "btc_amount": btc_amount, + "fee": fee, + "data": util.hexlify(data) if data else "", + } From 7d956f6e46e238e8766a510bd1556d1b9612cac3 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 8 Apr 2024 12:53:33 +0200 Subject: [PATCH 024/280] Add backend proxy routes --- .../counterpartylib/lib/api/api_server.py | 20 +--------- .../counterpartylib/lib/api/routes.py | 37 ++++++++++++++++++- .../counterpartylib/lib/api/util.py | 34 ++++++++++++++++- 3 files changed, 69 insertions(+), 22 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/api/api_server.py b/counterparty-lib/counterpartylib/lib/api/api_server.py index 1f05736a70..f980b49a24 100644 --- a/counterparty-lib/counterpartylib/lib/api/api_server.py +++ b/counterparty-lib/counterpartylib/lib/api/api_server.py @@ -13,6 +13,7 @@ ledger, ) from counterpartylib.lib.api.routes import ROUTES +from counterpartylib.lib.api.util import remove_rowids from flask import Flask, request from flask import g as flask_globals from flask_httpauth import HTTPBasicAuth @@ -44,25 +45,6 @@ def init_api_access_log(): flask.cli.show_server_banner = lambda *args: None -def remove_rowids(query_result): - """Remove the rowid field from the query result.""" - if isinstance(query_result, list): - filtered_results = [] - for row in list(query_result): - if "rowid" in row: - del row["rowid"] - if "MAX(rowid)" in row: - del row["MAX(rowid)"] - filtered_results.append(row) - return filtered_results - filtered_results = query_result - if "rowid" in filtered_results: - del filtered_results["rowid"] - if "MAX(rowid)" in filtered_results: - del filtered_results["MAX(rowid)"] - return filtered_results - - def get_db(): """Get the database connection.""" if not hasattr(flask_globals, "db"): diff --git a/counterparty-lib/counterpartylib/lib/api/routes.py b/counterparty-lib/counterpartylib/lib/api/routes.py index d22f4b6576..7853b89b53 100644 --- a/counterparty-lib/counterpartylib/lib/api/routes.py +++ b/counterparty-lib/counterpartylib/lib/api/routes.py @@ -1,8 +1,10 @@ from counterpartylib.lib import ( + backend, + config, ledger, transaction, ) -from counterpartylib.lib.api.util import handle_healthz_route +from counterpartylib.lib.api import util ROUTES = { ### /blocks ### @@ -211,7 +213,38 @@ }, ### /healthz ### "/healthz": { - "function": handle_healthz_route, + "function": util.handle_healthz_route, "args": [("check", "heavy")], }, + ### /backend ### + "/backend/addresses/
/transactions": { + "function": backend.search_raw_transactions, + "args": [("unconfirmed", True), ("only_tx_hashes", False)], + }, + "/backend/addresses/
/transactions/oldest": { + "function": backend.get_oldest_tx, + }, + "/backend/addresses/
/utxos": { + "function": backend.get_unspent_txouts, + "args": [("unconfirmed", True), ("unspent_tx_hash", None)], + }, + "/backend/addresses/
/pubkey": { + "function": util.pubkeyhash_to_pubkey, + "args": [("provided_pubkeys", "")], + }, + "/backend/transactions": { + "function": util.getrawtransactions, + "args": [("tx_hashes", ""), ("verbose", False), ("skip_missing", False)], + }, + "/backend/transactions/": { + "function": backend.getrawtransaction, + "args": [("verbose", False), ("skip_missing", False)], + }, + "/backend/estimatesmartfee": { + "function": backend.fee_per_kb, + "args": [ + ("conf_target", config.ESTIMATE_FEE_CONF_TARGET), + ("mode", config.ESTIMATE_FEE_MODE), + ], + }, } diff --git a/counterparty-lib/counterpartylib/lib/api/util.py b/counterparty-lib/counterpartylib/lib/api/util.py index c7f92c6fe8..edbe404a89 100644 --- a/counterparty-lib/counterpartylib/lib/api/util.py +++ b/counterparty-lib/counterpartylib/lib/api/util.py @@ -1,7 +1,7 @@ import logging import flask -from counterparylib.lib import backend, config, exceptions, ledger, transaction +from counterpartylib.lib import backend, config, exceptions, ledger, transaction logger = logging.getLogger(config.LOGGER_NAME) @@ -44,3 +44,35 @@ def handle_healthz_route(db, check="heavy"): if not healthz(db, check): msg, code = "Unhealthy", 503 return flask.Response(msg, code, mimetype="application/json") + + +def remove_rowids(query_result): + """Remove the rowid field from the query result.""" + if isinstance(query_result, list): + filtered_results = [] + for row in list(query_result): + if "rowid" in row: + del row["rowid"] + if "MAX(rowid)" in row: + del row["MAX(rowid)"] + filtered_results.append(row) + return filtered_results + filtered_results = query_result + if "rowid" in filtered_results: + del filtered_results["rowid"] + if "MAX(rowid)" in filtered_results: + del filtered_results["MAX(rowid)"] + return filtered_results + + +def getrawtransactions(tx_hashes, verbose=False, skip_missing=False, _retry=0): + txhash_list = tx_hashes.split(",") + return backend.getrawtransaction_batch(txhash_list, verbose, skip_missing, _retry) + + +def pubkeyhash_to_pubkey(address, provided_pubkeys=None): + if provided_pubkeys: + provided_pubkeys_list = provided_pubkeys.split(",") + else: + provided_pubkeys_list = None + return backend.pubkeyhash_to_pubkey(address, provided_pubkeys=provided_pubkeys_list) From d890979d22159375d7239c85158f9ca85f620922 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 8 Apr 2024 16:12:26 +0200 Subject: [PATCH 025/280] Add route for root --- .../counterpartylib/lib/api/api_server.py | 48 ++++++++++++++++++- .../counterpartylib/lib/api/routes.py | 1 + .../counterpartylib/lib/api/util.py | 20 +++++--- 3 files changed, 61 insertions(+), 8 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/api/api_server.py b/counterparty-lib/counterpartylib/lib/api/api_server.py index f980b49a24..ab1cc9f305 100644 --- a/counterparty-lib/counterpartylib/lib/api/api_server.py +++ b/counterparty-lib/counterpartylib/lib/api/api_server.py @@ -3,6 +3,7 @@ import multiprocessing from logging import handlers as logging_handlers from multiprocessing import Process +from threading import Timer import flask from counterpartylib import server @@ -13,7 +14,7 @@ ledger, ) from counterpartylib.lib.api.routes import ROUTES -from counterpartylib.lib.api.util import remove_rowids +from counterpartylib.lib.api.util import get_backend_height, remove_rowids from flask import Flask, request from flask import g as flask_globals from flask_httpauth import HTTPBasicAuth @@ -23,6 +24,10 @@ logger = logging.getLogger(config.LOGGER_NAME) auth = HTTPBasicAuth() +BACKEND_HEIGHT = 0 +REFRESH_BACKEND_HEIGHT_INTERVAL = 10 +BACKEND_HEIGHT_TIMER = None + def init_api_access_log(): """Initialize API logger.""" @@ -57,6 +62,27 @@ def verify_password(username, password): return username == config.RPC_USER and password == config.RPC_PASSWORD +@auth.login_required +def api_root(): + counterparty_height = blocks.last_db_index(get_db()) + routes = list(ROUTES.keys()) + network = "mainnet" + if config.TESTNET: + network = "testnet" + elif config.REGTEST: + network = "regtest" + elif config.TESTCOIN: + network = "testcoin" + return { + "server_ready": counterparty_height >= BACKEND_HEIGHT, + "network": network, + "version": config.VERSION_STRING, + "backend_height": BACKEND_HEIGHT, + "counterparty_height": counterparty_height, + "routes": routes, + } + + @auth.login_required def handle_route(**kwargs): route = ROUTES.get(str(request.url_rule.rule)) @@ -75,14 +101,32 @@ def run_api_server(args): # Initialise log and config server.initialise_log_and_config(argparse.Namespace(**args)) with app.app_context(): + # Initialise the API access log init_api_access_log() # Get the last block index ledger.CURRENT_BLOCK_INDEX = blocks.last_db_index(get_db()) # Add routes + app.route("/")(api_root) for path in ROUTES.keys(): app.add_url_rule(path, view_func=handle_route) + # run the scheduler to refresh the backend height + refresh_backend_height() # Start the API server - app.run(host=config.RPC_HOST, port=config.RPC_PORT, debug=False) + try: + app.run(host=config.RPC_HOST, port=config.RPC_PORT, debug=False) + finally: + # ensure timer is cancelled + if BACKEND_HEIGHT_TIMER: + BACKEND_HEIGHT_TIMER.cancel() + + +def refresh_backend_height(): + global BACKEND_HEIGHT, BACKEND_HEIGHT_TIMER # noqa F811 + BACKEND_HEIGHT = get_backend_height() + if BACKEND_HEIGHT_TIMER: + BACKEND_HEIGHT_TIMER.cancel() + BACKEND_HEIGHT_TIMER = Timer(REFRESH_BACKEND_HEIGHT_INTERVAL, refresh_backend_height) + BACKEND_HEIGHT_TIMER.start() class APIServer(object): diff --git a/counterparty-lib/counterpartylib/lib/api/routes.py b/counterparty-lib/counterpartylib/lib/api/routes.py index 7853b89b53..e99e381278 100644 --- a/counterparty-lib/counterpartylib/lib/api/routes.py +++ b/counterparty-lib/counterpartylib/lib/api/routes.py @@ -6,6 +6,7 @@ ) from counterpartylib.lib.api import util +# Define the API routes except root (`/`) defined in `api_server.py` ROUTES = { ### /blocks ### "/blocks": { diff --git a/counterparty-lib/counterpartylib/lib/api/util.py b/counterparty-lib/counterpartylib/lib/api/util.py index edbe404a89..a717979349 100644 --- a/counterparty-lib/counterpartylib/lib/api/util.py +++ b/counterparty-lib/counterpartylib/lib/api/util.py @@ -57,12 +57,14 @@ def remove_rowids(query_result): del row["MAX(rowid)"] filtered_results.append(row) return filtered_results - filtered_results = query_result - if "rowid" in filtered_results: - del filtered_results["rowid"] - if "MAX(rowid)" in filtered_results: - del filtered_results["MAX(rowid)"] - return filtered_results + if isinstance(query_result, dict): + filtered_results = query_result + if "rowid" in filtered_results: + del filtered_results["rowid"] + if "MAX(rowid)" in filtered_results: + del filtered_results["MAX(rowid)"] + return filtered_results + return query_result def getrawtransactions(tx_hashes, verbose=False, skip_missing=False, _retry=0): @@ -76,3 +78,9 @@ def pubkeyhash_to_pubkey(address, provided_pubkeys=None): else: provided_pubkeys_list = None return backend.pubkeyhash_to_pubkey(address, provided_pubkeys=provided_pubkeys_list) + + +def get_backend_height(): + block_count = backend.getblockcount() + blocks_behind = backend.getindexblocksbehind() + return block_count + blocks_behind From 1e3a226a7e5a492212ecacd5c0fc7e1b8f509b5d Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 8 Apr 2024 18:38:58 +0200 Subject: [PATCH 026/280] fix tests --- counterparty-lib/counterpartylib/lib/api/api_server.py | 7 +++++-- counterparty-lib/counterpartylib/test/conftest.py | 2 ++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/api/api_server.py b/counterparty-lib/counterpartylib/lib/api/api_server.py index ab1cc9f305..d178ea466b 100644 --- a/counterparty-lib/counterpartylib/lib/api/api_server.py +++ b/counterparty-lib/counterpartylib/lib/api/api_server.py @@ -110,11 +110,14 @@ def run_api_server(args): for path in ROUTES.keys(): app.add_url_rule(path, view_func=handle_route) # run the scheduler to refresh the backend height - refresh_backend_height() - # Start the API server + # `no_refresh_backend_height` used only for testing. TODO: find a way to mock it + if "no_refresh_backend_height" not in args or not args["no_refresh_backend_height"]: + refresh_backend_height() try: + # Start the API server app.run(host=config.RPC_HOST, port=config.RPC_PORT, debug=False) finally: + pass # ensure timer is cancelled if BACKEND_HEIGHT_TIMER: BACKEND_HEIGHT_TIMER.cancel() diff --git a/counterparty-lib/counterpartylib/test/conftest.py b/counterparty-lib/counterpartylib/test/conftest.py index ffca6c8aa3..d1086d44b9 100644 --- a/counterparty-lib/counterpartylib/test/conftest.py +++ b/counterparty-lib/counterpartylib/test/conftest.py @@ -274,6 +274,7 @@ def api_server_v2(request, cp_server): "json_log": False, "no_check_asset_conservation": True, "action": "", + "no_refresh_backend_height": True, } server_config = ( default_config @@ -283,6 +284,7 @@ def api_server_v2(request, cp_server): "rpc_port": TEST_RPC_PORT + 10, } ) + args = argparse.Namespace(**server_config) api_server = api_v2.APIServer() api_server.start(args) From c506c0ad9d8436d34c6725eede454844c54e3515 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 8 Apr 2024 19:03:36 +0200 Subject: [PATCH 027/280] inject headers --- .../counterpartylib/lib/api/api_server.py | 42 ++++++++++++++----- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/api/api_server.py b/counterparty-lib/counterpartylib/lib/api/api_server.py index d178ea466b..ff81eb9df8 100644 --- a/counterparty-lib/counterpartylib/lib/api/api_server.py +++ b/counterparty-lib/counterpartylib/lib/api/api_server.py @@ -62,7 +62,6 @@ def verify_password(username, password): return username == config.RPC_USER and password == config.RPC_PASSWORD -@auth.login_required def api_root(): counterparty_height = blocks.last_db_index(get_db()) routes = list(ROUTES.keys()) @@ -83,17 +82,38 @@ def api_root(): } +def inject_headers(db, result): + response = flask.make_response(flask.jsonify(result)) + if not config.RPC_NO_ALLOW_CORS: + response.headers["Access-Control-Allow-Origin"] = "*" + response.headers["Access-Control-Allow-Methods"] = "GET, POST, OPTIONS" + response.headers["Access-Control-Allow-Headers"] = ( + "DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization" + ) + counterparty_height = blocks.last_db_index(db) + response.headers["X-COUNTERPARTY-HEIGHT"] = counterparty_height + response.headers["X-COUNTERPARTY-READY"] = counterparty_height >= BACKEND_HEIGHT + response.headers["X-BACKEND-HEIGHT"] = BACKEND_HEIGHT + return response + + @auth.login_required def handle_route(**kwargs): - route = ROUTES.get(str(request.url_rule.rule)) - function_args = dict(kwargs) - if "pass_all_args" in route and route["pass_all_args"]: - function_args = request.args | function_args - elif "args" in route: - for arg in route["args"]: - function_args[arg[0]] = request.args.get(arg[0], arg[1]) - result = route["function"](get_db(), **function_args) - return remove_rowids(result) + db = get_db() + rule = str(request.url_rule.rule) + if rule == "/": + result = api_root() + else: + route = ROUTES.get(rule) + function_args = dict(kwargs) + if "pass_all_args" in route and route["pass_all_args"]: + function_args = request.args | function_args + elif "args" in route: + for arg in route["args"]: + function_args[arg[0]] = request.args.get(arg[0], arg[1]) + result = route["function"](db, **function_args) + result = remove_rowids(result) + return inject_headers(db, result) def run_api_server(args): @@ -106,7 +126,7 @@ def run_api_server(args): # Get the last block index ledger.CURRENT_BLOCK_INDEX = blocks.last_db_index(get_db()) # Add routes - app.route("/")(api_root) + app.add_url_rule("/", view_func=handle_route) for path in ROUTES.keys(): app.add_url_rule(path, view_func=handle_route) # run the scheduler to refresh the backend height From 7cb5a40b6d0c51489adc0bc5a35e97ed10319163 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 8 Apr 2024 21:31:11 +0200 Subject: [PATCH 028/280] Progress in unpack support --- .../counterpartylib/lib/api/api_v1.py | 5 +- .../counterpartylib/lib/messages/bet.py | 44 ++++++++++++-- .../counterpartylib/lib/messages/broadcast.py | 25 ++++++-- .../counterpartylib/lib/messages/btcpay.py | 21 +++++-- .../counterpartylib/lib/messages/cancel.py | 18 ++++-- .../counterpartylib/lib/messages/destroy.py | 4 +- .../counterpartylib/lib/messages/dispenser.py | 57 +++++++++++++++++-- .../counterpartylib/lib/messages/dividend.py | 35 ++++++++---- .../lib/messages/versions/enhanced_send.py | 4 +- .../counterpartylib/lib/transaction.py | 56 +++++++++++++++++- .../counterpartylib/test/util_test.py | 1 + 11 files changed, 227 insertions(+), 43 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/api/api_v1.py b/counterparty-lib/counterpartylib/lib/api/api_v1.py index 63bdd7f170..d42fe71bbe 100644 --- a/counterparty-lib/counterpartylib/lib/api/api_v1.py +++ b/counterparty-lib/counterpartylib/lib/api/api_v1.py @@ -956,12 +956,11 @@ def unpack(data_hex): # TODO: Enabled only for `send`. if message_type_id == send.ID: - unpack_method = send.unpack + unpacked = send.unpack(self.db, message, ledger.CURRENT_BLOCK_INDEX) elif message_type_id == enhanced_send.ID: - unpack_method = enhanced_send.unpack + unpacked = enhanced_send.unpack(message, ledger.CURRENT_BLOCK_INDEX) else: raise APIError("unsupported message type") - unpacked = unpack_method(self.db, message, ledger.CURRENT_BLOCK_INDEX) return message_type_id, unpacked @dispatcher.add_method diff --git a/counterparty-lib/counterpartylib/lib/messages/bet.py b/counterparty-lib/counterpartylib/lib/messages/bet.py index c9fd2f0bd9..0a8208f9dc 100644 --- a/counterparty-lib/counterpartylib/lib/messages/bet.py +++ b/counterparty-lib/counterpartylib/lib/messages/bet.py @@ -403,9 +403,7 @@ def compose( return (source, [(feed_address, None)], data) -def parse(db, tx, message): - bet_parse_cursor = db.cursor() - +def unpack(message, return_dict=False): # Unpack message. try: if len(message) != LENGTH: @@ -429,9 +427,45 @@ def parse(db, tx, message): target_value, leverage, expiration, - fee_fraction_int, # noqa: F841 - ) = 0, 0, 0, 0, 0, 0, 0, 0 + ) = 0, 0, 0, 0, 0, 0, 0 status = "invalid: could not unpack" + if return_dict: + return { + "bet_type": bet_type, + "deadline": deadline, + "wager_quantity": wager_quantity, + "counterwager_quantity": counterwager_quantity, + "target_value": target_value, + "leverage": leverage, + "expiration": expiration, + "status": status, + } + return ( + bet_type, + deadline, + wager_quantity, + counterwager_quantity, + target_value, + leverage, + expiration, + status, + ) + + +def parse(db, tx, message): + bet_parse_cursor = db.cursor() + + # Unpack message. + ( + bet_type, + deadline, + wager_quantity, + counterwager_quantity, + target_value, + leverage, + expiration, + status, + ) = unpack(message) odds, fee_fraction = 0, 0 feed_address = tx["destination"] diff --git a/counterparty-lib/counterpartylib/lib/messages/broadcast.py b/counterparty-lib/counterpartylib/lib/messages/broadcast.py index ee43c67c3e..37168f9d61 100644 --- a/counterparty-lib/counterpartylib/lib/messages/broadcast.py +++ b/counterparty-lib/counterpartylib/lib/messages/broadcast.py @@ -162,12 +162,9 @@ def compose(db, source, timestamp, value, fee_fraction, text): return (source, [], data) -def parse(db, tx, message): - cursor = db.cursor() - - # Unpack message. +def unpack(message, block_index, return_dict=False): try: - if ledger.enabled("broadcast_pack_text", tx["block_index"]): + if ledger.enabled("broadcast_pack_text", block_index): timestamp, value, fee_fraction_int, rawtext = struct.unpack( FORMAT + f"{len(message) - LENGTH}s", message ) @@ -197,6 +194,24 @@ def parse(db, tx, message): except AssertionError: timestamp, value, fee_fraction_int, text = 0, None, 0, None status = "invalid: could not unpack text" + + if return_dict: + return { + "timestamp": timestamp, + "value": value, + "fee_fraction_int": fee_fraction_int, + "text": text, + "status": status, + } + return timestamp, value, fee_fraction_int, text, status + + +def parse(db, tx, message): + cursor = db.cursor() + + # Unpack message. + timestamp, value, fee_fraction_int, text, status = unpack(message, tx["block_index"]) + if status == "valid": # For SQLite3 timestamp = min(timestamp, config.MAX_INT) diff --git a/counterparty-lib/counterpartylib/lib/messages/btcpay.py b/counterparty-lib/counterpartylib/lib/messages/btcpay.py index ef02ee5b0b..76361656c8 100644 --- a/counterparty-lib/counterpartylib/lib/messages/btcpay.py +++ b/counterparty-lib/counterpartylib/lib/messages/btcpay.py @@ -133,10 +133,7 @@ def compose(db, source, order_match_id): return (source, [(destination, btc_quantity)], data) -def parse(db, tx, message): - cursor = db.cursor() - - # Unpack message. +def unpack(message, return_dict=False): try: if len(message) != LENGTH: raise exceptions.UnpackError @@ -151,6 +148,22 @@ def parse(db, tx, message): tx0_hash, tx1_hash, order_match_id = None, None, None status = "invalid: could not unpack" + if return_dict: + return { + "tx0_hash": tx0_hash, + "tx1_hash": tx1_hash, + "order_match_id": order_match_id, + "status": status, + } + return tx0_hash, tx1_hash, order_match_id, status + + +def parse(db, tx, message): + cursor = db.cursor() + + # Unpack message. + tx0_hash, tx1_hash, order_match_id, status = unpack(message) + if status == "valid": destination, btc_quantity, escrowed_asset, escrowed_quantity, order_match, problems = ( validate(db, tx["source"], order_match_id, tx["block_index"]) diff --git a/counterparty-lib/counterpartylib/lib/messages/cancel.py b/counterparty-lib/counterpartylib/lib/messages/cancel.py index 5b3bbde4ea..e476526ec0 100644 --- a/counterparty-lib/counterpartylib/lib/messages/cancel.py +++ b/counterparty-lib/counterpartylib/lib/messages/cancel.py @@ -94,10 +94,7 @@ def compose(db, source, offer_hash): return (source, [], data) -def parse(db, tx, message): - cursor = db.cursor() - - # Unpack message. +def unpack(message, return_dict=False): try: if len(message) != LENGTH: raise exceptions.UnpackError @@ -107,6 +104,19 @@ def parse(db, tx, message): except (exceptions.UnpackError, struct.error) as e: # noqa: F841 offer_hash = None status = "invalid: could not unpack" + if return_dict: + return { + "offer_hash": offer_hash, + "status": status, + } + return offer_hash, status + + +def parse(db, tx, message): + cursor = db.cursor() + + # Unpack message. + offer_hash, status = unpack(message) if status == "valid": offer, offer_type, problems = validate(db, tx["source"], offer_hash) diff --git a/counterparty-lib/counterpartylib/lib/messages/destroy.py b/counterparty-lib/counterpartylib/lib/messages/destroy.py index bec442735c..cafc97bd83 100644 --- a/counterparty-lib/counterpartylib/lib/messages/destroy.py +++ b/counterparty-lib/counterpartylib/lib/messages/destroy.py @@ -68,7 +68,7 @@ def pack(db, asset, quantity, tag): return data -def unpack(db, message): +def unpack(db, message, return_dict=False): try: asset_id, quantity = struct.unpack(FORMAT, message[0:16]) tag = message[16:] @@ -80,6 +80,8 @@ def unpack(db, message): except AssetIDError: # noqa: F405 raise UnpackError("asset id invalid") # noqa: B904, F405 + if return_dict: + return {"asset": asset, "quantity": quantity, "tag": tag} return asset, quantity, tag diff --git a/counterparty-lib/counterpartylib/lib/messages/dispenser.py b/counterparty-lib/counterpartylib/lib/messages/dispenser.py index 158fc1516c..b12d262f36 100644 --- a/counterparty-lib/counterpartylib/lib/messages/dispenser.py +++ b/counterparty-lib/counterpartylib/lib/messages/dispenser.py @@ -409,12 +409,9 @@ def calculate_oracle_fee( return oracle_fee_btc -def parse(db, tx, message): - cursor = db.cursor() - - # Unpack message. +def unpack(message, return_dict=False): try: - action_address = tx["source"] + action_address = None oracle_address = None assetid, give_quantity, escrow_quantity, mainchainrate, dispenser_status = struct.unpack( FORMAT, message[0:LENGTH] @@ -432,9 +429,57 @@ def parse(db, tx, message): asset = ledger.generate_asset_name(assetid, ledger.CURRENT_BLOCK_INDEX) status = "valid" except (exceptions.UnpackError, struct.error) as e: # noqa: F841 - assetid, give_quantity, mainchainrate, asset = None, None, None, None + ( + give_quantity, + escrow_quantity, + mainchainrate, + dispenser_status, + action_address, + oracle_address, + asset, + ) = None, None, None, None, None, None, None status = "invalid: could not unpack" + if return_dict: + return { + "asset": asset, + "give_quantity": give_quantity, + "escrow_quantity": escrow_quantity, + "mainchainrate": mainchainrate, + "dispenser_status": dispenser_status, + "action_address": action_address, + "oracle_address": oracle_address, + "status": status, + } + return ( + asset, + give_quantity, + escrow_quantity, + mainchainrate, + dispenser_status, + action_address, + oracle_address, + status, + ) + + +def parse(db, tx, message): + cursor = db.cursor() + + # Unpack message. + ( + asset, + give_quantity, + escrow_quantity, + mainchainrate, + dispenser_status, + action_address, + oracle_address, + status, + ) = unpack(message) + if action_address is None: + action_address = tx["source"] + if status == "valid": if ledger.enabled("dispenser_parsing_validation", ledger.CURRENT_BLOCK_INDEX): asset_id, problems = validate( diff --git a/counterparty-lib/counterpartylib/lib/messages/dividend.py b/counterparty-lib/counterpartylib/lib/messages/dividend.py index ec6a868aa2..494b88b29e 100644 --- a/counterparty-lib/counterpartylib/lib/messages/dividend.py +++ b/counterparty-lib/counterpartylib/lib/messages/dividend.py @@ -207,23 +207,16 @@ def compose(db, source, quantity_per_unit, asset, dividend_asset): return (source, [], data) -def parse(db, tx, message): - dividend_parse_cursor = db.cursor() - - fee = 0 - - # Unpack message. +def unpack(db, message, block_index, return_dict=False): try: - if (tx["block_index"] > 288150 or config.TESTNET or config.REGTEST) and len( - message - ) == LENGTH_2: + if (block_index > 288150 or config.TESTNET or config.REGTEST) and len(message) == LENGTH_2: quantity_per_unit, asset_id, dividend_asset_id = struct.unpack(FORMAT_2, message) - asset = ledger.get_asset_name(db, asset_id, tx["block_index"]) - dividend_asset = ledger.get_asset_name(db, dividend_asset_id, tx["block_index"]) + asset = ledger.get_asset_name(db, asset_id, block_index) + dividend_asset = ledger.get_asset_name(db, dividend_asset_id, block_index) status = "valid" elif len(message) == LENGTH_1: quantity_per_unit, asset_id = struct.unpack(FORMAT_1, message) - asset = ledger.get_asset_name(db, asset_id, tx["block_index"]) + asset = ledger.get_asset_name(db, asset_id, block_index) dividend_asset = config.XCP status = "valid" else: @@ -232,6 +225,24 @@ def parse(db, tx, message): dividend_asset, quantity_per_unit, asset = None, None, None status = "invalid: could not unpack" + if return_dict: + return { + "asset": asset, + "quantity_per_unit": quantity_per_unit, + "dividend_asset": dividend_asset, + "status": status, + } + return asset, quantity_per_unit, dividend_asset, status + + +def parse(db, tx, message): + dividend_parse_cursor = db.cursor() + + fee = 0 + + # Unpack message. + asset, quantity_per_unit, dividend_asset, status = unpack(db, message, tx["block_index"]) + if dividend_asset == config.BTC: status = f"invalid: cannot pay {config.BTC} dividends within protocol" diff --git a/counterparty-lib/counterpartylib/lib/messages/versions/enhanced_send.py b/counterparty-lib/counterpartylib/lib/messages/versions/enhanced_send.py index d46e49d835..022d62f46e 100644 --- a/counterparty-lib/counterpartylib/lib/messages/versions/enhanced_send.py +++ b/counterparty-lib/counterpartylib/lib/messages/versions/enhanced_send.py @@ -14,7 +14,7 @@ ID = 2 # 0x02 -def unpack(db, message, block_index): +def unpack(message, block_index): try: # account for memo bytes memo_bytes_length = len(message) - LENGTH @@ -150,7 +150,7 @@ def parse(db, tx, message): # Unpack message. try: - unpacked = unpack(db, message, tx["block_index"]) + unpacked = unpack(message, tx["block_index"]) asset, quantity, destination, memo_bytes = ( unpacked["asset"], unpacked["quantity"], diff --git a/counterparty-lib/counterpartylib/lib/transaction.py b/counterparty-lib/counterpartylib/lib/transaction.py index 184bf039d4..c00e79a415 100644 --- a/counterparty-lib/counterpartylib/lib/transaction.py +++ b/counterparty-lib/counterpartylib/lib/transaction.py @@ -32,6 +32,8 @@ exceptions, gettxinfo, ledger, + message_type, + messages, script, util, ) @@ -1006,6 +1008,7 @@ def split_compose_arams(**kwargs): "burn", "cancel", "destroy", + "dispenser", "dividend", "issuance", "order", @@ -1013,7 +1016,6 @@ def split_compose_arams(**kwargs): "rps", "rpsresolve", "sweep", - "dispenser", ] @@ -1036,3 +1038,55 @@ def info(db, rawtransaction, block_index=None): "fee": fee, "data": util.hexlify(data) if data else "", } + + +def unpack(db, data_hex): + data = binascii.unhexlify(data_hex) + message_type_id, message = message_type.unpack(data) + + # Unknown message type + message_data = {"error": "Unknown message type"} + # Bet + if message_type_id == messages.bet.ID: + message_type = "bet" + message_data = messages.bet.unpack(message, return_dict=True) + # Broadcast + elif message_type_id == messages.broadcast.ID: + message_type = "broadcast" + message_data = messages.broadcast.unpack( + message, ledger.CURRENT_BLOCK_INDEX, return_dict=True + ) + # BTCPay + elif message_type_id == messages.btcpay.ID: + message_type = "btcpay" + message_data = messages.btcpay.unpack(message, return_dict=True) + # Cancel + elif message_type_id == messages.cancel.ID: + message_type = "cancel" + message_data = messages.cancel.unpack(message, return_dict=True) + # Destroy + elif message_type_id == messages.destroy.ID: + message_type = "destroy" + message_data = messages.destroy.unpack(db, message, return_dict=True) + # Dispenser + elif message_type_id == messages.dispenser.ID: + message_type = "dispenser" + message_data = messages.dispenser.unpack(message, return_dict=True) + # Dividend + elif message_type_id == messages.dividend.ID: + message_type = "dividend" + message_data = messages.dividend.unpack(db, message, return_dict=True) + # Send + elif message_type_id == messages.send.ID: + message_type = "send" + message_data = messages.send.unpack(db, message, ledger.CURRENT_BLOCK_INDEX) + # Enhanced send + elif message_type_id == messages.versions.enhanced_send.ID: + message_type = "enhanced_send" + message_data = messages.versions.enhanced_send.unpack(message, ledger.CURRENT_BLOCK_INDEX) + + return { + "message_type": message_type, + "message_type_id": message_type_id, + "message_data": message_data, + } diff --git a/counterparty-lib/counterpartylib/test/util_test.py b/counterparty-lib/counterpartylib/test/util_test.py index bedfbf81a6..986ba3c16b 100644 --- a/counterparty-lib/counterpartylib/test/util_test.py +++ b/counterparty-lib/counterpartylib/test/util_test.py @@ -777,6 +777,7 @@ def exec_tested_method(tx_name, method, tested_method, inputs, server_db): or tx_name == "backend" or tx_name == "message_type" or tx_name == "address" + or (tx_name == "versions.enhanced_send" and method == "unpack") ): return tested_method(*inputs) else: From 71cfb0c48ffe56e25c9bbd70c3064f63ea7e0f90 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 9 Apr 2024 12:33:13 +0200 Subject: [PATCH 029/280] Add route to unpack; supports all type of message --- .../counterpartylib/lib/api/routes.py | 4 + .../counterpartylib/lib/messages/issuance.py | 89 +++++++++++++++---- .../counterpartylib/lib/messages/order.py | 30 +++++-- .../counterpartylib/lib/messages/rps.py | 20 ++++- .../lib/messages/rpsresolve.py | 21 ++++- .../counterpartylib/lib/messages/sweep.py | 4 +- .../lib/messages/versions/mpma.py | 4 +- .../counterpartylib/lib/transaction.py | 46 ++++++++-- .../counterpartylib/test/fixtures/vectors.py | 4 - .../counterpartylib/test/util_test.py | 2 + 10 files changed, 179 insertions(+), 45 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/api/routes.py b/counterparty-lib/counterpartylib/lib/api/routes.py index e99e381278..fb73e6e4fd 100644 --- a/counterparty-lib/counterpartylib/lib/api/routes.py +++ b/counterparty-lib/counterpartylib/lib/api/routes.py @@ -70,6 +70,10 @@ "function": transaction.info, "args": [("rawtransaction", None), ("block_index", None)], }, + "/transactions/unpack": { + "function": transaction.unpack, + "args": [("datahex", None), ("block_index", None)], + }, "/transactions/": { "function": ledger.get_transaction, }, diff --git a/counterparty-lib/counterpartylib/lib/messages/issuance.py b/counterparty-lib/counterpartylib/lib/messages/issuance.py index c0469aa0d2..8c2b7e0280 100644 --- a/counterparty-lib/counterpartylib/lib/messages/issuance.py +++ b/counterparty-lib/counterpartylib/lib/messages/issuance.py @@ -555,27 +555,26 @@ def compose(db, source, transfer_destination, asset, quantity, divisible, lock, return (source, destination_outputs, data) -def parse(db, tx, message, message_type_id): - issuance_parse_cursor = db.cursor() +def unpack(db, message, message_type_id, block_index, return_dict=False): asset_format = ledger.get_value_by_block_index( - "issuance_asset_serialization_format", tx["block_index"] + "issuance_asset_serialization_format", block_index ) asset_format_length = ledger.get_value_by_block_index( - "issuance_asset_serialization_length", tx["block_index"] + "issuance_asset_serialization_length", block_index ) subasset_format = ledger.get_value_by_block_index( - "issuance_subasset_serialization_format", tx["block_index"] + "issuance_subasset_serialization_format", block_index ) subasset_format_length = ledger.get_value_by_block_index( - "issuance_subasset_serialization_length", tx["block_index"] + "issuance_subasset_serialization_length", block_index ) # Unpack message. try: subasset_longname = None if message_type_id == LR_SUBASSET_ID or message_type_id == SUBASSET_ID: - if not ledger.enabled("subassets", block_index=tx["block_index"]): - logger.warning(f"subassets are not enabled at block {tx['block_index']}") + if not ledger.enabled("subassets", block_index=block_index): + logger.warning(f"subassets are not enabled at block {block_index}") raise exceptions.UnpackError # parse a subasset original issuance message @@ -597,9 +596,7 @@ def parse(db, tx, message, message_type_id): description_length = len(message) - subasset_format_length - compacted_subasset_length if description_length < 0: - logger.warning( - f"invalid subasset length: [issuance] tx [{tx['tx_hash']}]: {compacted_subasset_length}" - ) + logger.warning(f"invalid subasset length: {compacted_subasset_length}") raise exceptions.UnpackError messages_format = f">{compacted_subasset_length}s{description_length}s" compacted_subasset_longname, description = struct.unpack( @@ -618,7 +615,7 @@ def parse(db, tx, message, message_type_id): description = None except UnicodeDecodeError: description = "" - elif (tx["block_index"] > 283271 or config.TESTNET or config.REGTEST) and len( + elif (block_index > 283271 or config.TESTNET or config.REGTEST) and len( message ) >= asset_format_length: # Protocol change. if (len(message) - asset_format_length <= 42) and not ledger.enabled( @@ -688,11 +685,11 @@ def parse(db, tx, message, message_type_id): "", ) try: - asset = ledger.generate_asset_name(asset_id, tx["block_index"]) + asset = ledger.generate_asset_name(asset_id, block_index) ##This is for backwards compatibility with assets names longer than 12 characters if asset.startswith("A"): - named_asset = ledger.get_asset_name(db, asset_id, tx["block_index"]) + named_asset = ledger.get_asset_name(db, asset_id, block_index) if named_asset != 0: asset = named_asset @@ -708,7 +705,21 @@ def parse(db, tx, message, message_type_id): asset = None status = "invalid: bad asset name" except exceptions.UnpackError as e: # noqa: F841 - asset, quantity, divisible, lock, reset, callable_, call_date, call_price, description = ( + ( + asset_id, + asset, + subasset_longname, + quantity, + divisible, + lock, + reset, + callable_, + call_date, + call_price, + description, + ) = ( + None, + None, None, None, None, @@ -721,6 +732,52 @@ def parse(db, tx, message, message_type_id): ) status = "invalid: could not unpack" + if return_dict: + return { + "asset_id": asset_id, + "asset": asset, + "subasset_longname": subasset_longname, + "quantity": quantity, + "divisible": divisible, + "lock": lock, + "reset": reset, + "callable": callable_, + "call_date": call_date, + "call_price": call_price, + "description": description, + "status": status, + } + return ( + asset_id, + asset, + subasset_longname, + quantity, + divisible, + lock, + reset, + callable_, + call_date, + call_price, + description, + status, + ) + + +def parse(db, tx, message, message_type_id): + ( + asset_id, + asset, + subasset_longname, + quantity, + divisible, + lock, + reset, + callable_, + call_date, + call_price, + description, + status, + ) = unpack(db, message, message_type_id, tx["block_index"]) # parse and validate the subasset from the message subasset_parent = None if status == "valid" and subasset_longname is not None: # Protocol change. @@ -932,5 +989,3 @@ def parse(db, tx, message, message_type_id): action="issuance", event=tx["tx_hash"], ) - - issuance_parse_cursor.close() diff --git a/counterparty-lib/counterpartylib/lib/messages/order.py b/counterparty-lib/counterpartylib/lib/messages/order.py index adfdfcdf39..d8ead13c94 100644 --- a/counterparty-lib/counterpartylib/lib/messages/order.py +++ b/counterparty-lib/counterpartylib/lib/messages/order.py @@ -470,18 +470,15 @@ def compose( return (source, [], data) -def parse(db, tx, message): - order_parse_cursor = db.cursor() - - # Unpack message. +def unpack(db, message, block_index, return_dict=False): try: if len(message) != LENGTH: raise exceptions.UnpackError give_id, give_quantity, get_id, get_quantity, expiration, fee_required = struct.unpack( FORMAT, message ) - give_asset = ledger.get_asset_name(db, give_id, tx["block_index"]) - get_asset = ledger.get_asset_name(db, get_id, tx["block_index"]) + give_asset = ledger.get_asset_name(db, give_id, block_index) + get_asset = ledger.get_asset_name(db, get_id, block_index) status = "open" except (exceptions.UnpackError, exceptions.AssetNameError, struct.error) as e: # noqa: F841 give_asset, give_quantity, get_asset, get_quantity, expiration, fee_required = ( @@ -494,6 +491,27 @@ def parse(db, tx, message): ) status = "invalid: could not unpack" + if return_dict: + return { + "give_asset": give_asset, + "give_quantity": give_quantity, + "get_asset": get_asset, + "get_quantity": get_quantity, + "expiration": expiration, + "fee_required": fee_required, + "status": status, + } + return give_asset, give_quantity, get_asset, get_quantity, expiration, fee_required, status + + +def parse(db, tx, message): + order_parse_cursor = db.cursor() + + # Unpack message. + (give_asset, give_quantity, get_asset, get_quantity, expiration, fee_required, status) = unpack( + db, message, tx["block_index"] + ) + price = 0 if status == "open": try: diff --git a/counterparty-lib/counterpartylib/lib/messages/rps.py b/counterparty-lib/counterpartylib/lib/messages/rps.py index 0aba236df1..8734186ccc 100644 --- a/counterparty-lib/counterpartylib/lib/messages/rps.py +++ b/counterparty-lib/counterpartylib/lib/messages/rps.py @@ -298,9 +298,7 @@ def compose(db, source, possible_moves, wager, move_random_hash, expiration): return (source, [], data) -def parse(db, tx, message): - rps_parse_cursor = db.cursor() - # Unpack message. +def upack(message, return_dict=False): try: if len(message) != LENGTH: raise exceptions.UnpackError @@ -310,6 +308,22 @@ def parse(db, tx, message): (possible_moves, wager, move_random_hash, expiration) = 0, 0, "", 0 status = "invalid: could not unpack" + if return_dict: + return { + "possible_moves": possible_moves, + "wager": wager, + "move_random_hash": binascii.hexlify(move_random_hash).decode("utf8"), + "expiration": expiration, + "status": status, + } + return possible_moves, wager, move_random_hash, expiration, status + + +def parse(db, tx, message): + rps_parse_cursor = db.cursor() + # Unpack message. + possible_moves, wager, move_random_hash, expiration, status = upack(message) + if status == "open": move_random_hash = binascii.hexlify(move_random_hash).decode("utf8") # Overbet diff --git a/counterparty-lib/counterpartylib/lib/messages/rpsresolve.py b/counterparty-lib/counterpartylib/lib/messages/rpsresolve.py index a10fcc061f..4351f225cf 100644 --- a/counterparty-lib/counterpartylib/lib/messages/rpsresolve.py +++ b/counterparty-lib/counterpartylib/lib/messages/rpsresolve.py @@ -128,10 +128,7 @@ def compose(db, source, move, random, rps_match_id): return (source, [], data) -def parse(db, tx, message): - cursor = db.cursor() - - # Unpack message. +def unpack(message, return_dict=False): try: if len(message) != LENGTH: raise exceptions.UnpackError @@ -147,6 +144,22 @@ def parse(db, tx, message): move, random, tx0_hash, tx1_hash, rps_match_id = None, None, None, None, None status = "invalid: could not unpack" + if return_dict: + return { + "move": move, + "random": random, + "rps_match_id": rps_match_id, + "status": status, + } + return move, random, rps_match_id, status + + +def parse(db, tx, message): + cursor = db.cursor() + + # Unpack message. + move, random, rps_match_id, status = unpack(message) + if status == "valid": txn, rps_match, problems = validate(db, tx["source"], move, random, rps_match_id) if problems: diff --git a/counterparty-lib/counterpartylib/lib/messages/sweep.py b/counterparty-lib/counterpartylib/lib/messages/sweep.py index 51fad57cdf..30da525bd9 100644 --- a/counterparty-lib/counterpartylib/lib/messages/sweep.py +++ b/counterparty-lib/counterpartylib/lib/messages/sweep.py @@ -126,7 +126,7 @@ def compose(db, source, destination, flags, memo): return (source, [], data) -def unpack(db, message, block_index): +def unpack(message): try: memo_bytes_length = len(message) - LENGTH if memo_bytes_length < 0: @@ -162,7 +162,7 @@ def parse(db, tx, message): # Unpack message. try: - unpacked = unpack(db, message, tx["block_index"]) + unpacked = unpack(message) destination, flags, memo_bytes = ( unpacked["destination"], unpacked["flags"], diff --git a/counterparty-lib/counterpartylib/lib/messages/versions/mpma.py b/counterparty-lib/counterpartylib/lib/messages/versions/mpma.py index c6a145ccf4..b4a36a651d 100644 --- a/counterparty-lib/counterpartylib/lib/messages/versions/mpma.py +++ b/counterparty-lib/counterpartylib/lib/messages/versions/mpma.py @@ -21,7 +21,7 @@ ## expected functions for message version -def unpack(db, message, block_index): +def unpack(message, block_index): try: unpacked = _decode_mpma_send_decode(message, block_index) except struct.error as e: # noqa: F841 @@ -132,7 +132,7 @@ def compose(db, source, asset_dest_quant_list, memo, memo_is_hex): def parse(db, tx, message): try: - unpacked = unpack(db, message, tx["block_index"]) + unpacked = unpack(message, tx["block_index"]) status = "valid" except struct.error as e: # noqa: F841 status = "invalid: truncated message" diff --git a/counterparty-lib/counterpartylib/lib/transaction.py b/counterparty-lib/counterpartylib/lib/transaction.py index c00e79a415..ef18e49dec 100644 --- a/counterparty-lib/counterpartylib/lib/transaction.py +++ b/counterparty-lib/counterpartylib/lib/transaction.py @@ -1040,9 +1040,17 @@ def info(db, rawtransaction, block_index=None): } -def unpack(db, data_hex): - data = binascii.unhexlify(data_hex) +def unpack(db, datahex, block_index=None): + data = binascii.unhexlify(datahex) message_type_id, message = message_type.unpack(data) + block_index = block_index or ledger.CURRENT_BLOCK_INDEX + + issuance_ids = [ + messages.issuance.ID, + messages.issuance.LR_ISSUANCE_ID, + messages.issuance.SUBASSET_ID, + messages.issuance.LR_SUBASSET_ID, + ] # Unknown message type message_data = {"error": "Unknown message type"} @@ -1053,9 +1061,7 @@ def unpack(db, data_hex): # Broadcast elif message_type_id == messages.broadcast.ID: message_type = "broadcast" - message_data = messages.broadcast.unpack( - message, ledger.CURRENT_BLOCK_INDEX, return_dict=True - ) + message_data = messages.broadcast.unpack(message, block_index, return_dict=True) # BTCPay elif message_type_id == messages.btcpay.ID: message_type = "btcpay" @@ -1076,14 +1082,40 @@ def unpack(db, data_hex): elif message_type_id == messages.dividend.ID: message_type = "dividend" message_data = messages.dividend.unpack(db, message, return_dict=True) + # Issuance + elif message_type_id in issuance_ids: + message_type = "issuance" + message_data = messages.issuance.unpack( + db, message, message_type_id, block_index, return_dict=True + ) + # Order + elif message_type_id == messages.order.ID: + message_type = "order" + message_data = messages.order.unpack(db, message, block_index, return_dict=True) # Send elif message_type_id == messages.send.ID: message_type = "send" - message_data = messages.send.unpack(db, message, ledger.CURRENT_BLOCK_INDEX) + message_data = messages.send.unpack(db, message, block_index) # Enhanced send elif message_type_id == messages.versions.enhanced_send.ID: message_type = "enhanced_send" - message_data = messages.versions.enhanced_send.unpack(message, ledger.CURRENT_BLOCK_INDEX) + message_data = messages.versions.enhanced_send.unpack(message, block_index) + # MPMA send + elif message_type_id == messages.versions.mpma.ID: + message_type = "mpma_send" + message_data = messages.versions.mpma.unpack(message, block_index) + # RPS + elif message_type_id == messages.rps.ID: + message_type = "rps" + message_data = messages.rps.unpack(message, return_dict=True) + # RPS Resolve + elif message_type_id == messages.rpsresolve.ID: + message_type = "rpsresolve" + message_data = messages.rpsresolve.unpack(message, return_dict=True) + # Sweep + elif message_type_id == messages.sweep.ID: + message_type = "sweep" + message_data = messages.sweep.unpack(message) return { "message_type": message_type, diff --git a/counterparty-lib/counterpartylib/test/fixtures/vectors.py b/counterparty-lib/counterpartylib/test/fixtures/vectors.py index a548d8befd..544aacfbe2 100644 --- a/counterparty-lib/counterpartylib/test/fixtures/vectors.py +++ b/counterparty-lib/counterpartylib/test/fixtures/vectors.py @@ -6478,28 +6478,24 @@ { "in": ( b"o\x9c\x8d\x1fT\x05E\x1d\xe6\x07\x0b\xf1\xdb\x86\xabj\xcc\xb4\x95\xb6%\x01", - DP["default_block_index"], ), "out": {"destination": ADDR[5], "flags": 1, "memo": None}, }, { "in": ( b"o\x9c\x8d\x1fT\x05E\x1d\xe6\x07\x0b\xf1\xdb\x86\xabj\xcc\xb4\x95\xb6%\x02", - DP["default_block_index"], ), "out": {"destination": ADDR[5], "flags": 2, "memo": None}, }, { "in": ( b"o\x9c\x8d\x1fT\x05E\x1d\xe6\x07\x0b\xf1\xdb\x86\xabj\xcc\xb4\x95\xb6%\x03test", - DP["default_block_index"], ), "out": {"destination": ADDR[5], "flags": 3, "memo": "test"}, }, { "in": ( b"o\x9c\x8d\x1fT\x05E\x1d\xe6\x07\x0b\xf1\xdb\x86\xabj\xcc\xb4\x95\xb6%\x07\xca\xfe\xba\xbe", - DP["default_block_index"], ), "out": {"destination": ADDR[5], "flags": 7, "memo": b"\xca\xfe\xba\xbe"}, }, diff --git a/counterparty-lib/counterpartylib/test/util_test.py b/counterparty-lib/counterpartylib/test/util_test.py index 986ba3c16b..ddded47c28 100644 --- a/counterparty-lib/counterpartylib/test/util_test.py +++ b/counterparty-lib/counterpartylib/test/util_test.py @@ -778,6 +778,8 @@ def exec_tested_method(tx_name, method, tested_method, inputs, server_db): or tx_name == "message_type" or tx_name == "address" or (tx_name == "versions.enhanced_send" and method == "unpack") + or (tx_name == "versions.mpma" and method == "unpack") + or (tx_name == "sweep" and method == "unpack") ): return tested_method(*inputs) else: From a2878c60f9bbde98d01ec87e002df895e313131e Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 9 Apr 2024 12:40:04 +0200 Subject: [PATCH 030/280] update ledger.CURRENT_BLOCK_INDEX on each request --- .../counterpartylib/lib/api/api_server.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/api/api_server.py b/counterparty-lib/counterpartylib/lib/api/api_server.py index ff81eb9df8..dadb014c5b 100644 --- a/counterparty-lib/counterpartylib/lib/api/api_server.py +++ b/counterparty-lib/counterpartylib/lib/api/api_server.py @@ -82,7 +82,7 @@ def api_root(): } -def inject_headers(db, result): +def inject_headers(result): response = flask.make_response(flask.jsonify(result)) if not config.RPC_NO_ALLOW_CORS: response.headers["Access-Control-Allow-Origin"] = "*" @@ -90,9 +90,8 @@ def inject_headers(db, result): response.headers["Access-Control-Allow-Headers"] = ( "DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization" ) - counterparty_height = blocks.last_db_index(db) - response.headers["X-COUNTERPARTY-HEIGHT"] = counterparty_height - response.headers["X-COUNTERPARTY-READY"] = counterparty_height >= BACKEND_HEIGHT + response.headers["X-COUNTERPARTY-HEIGHT"] = ledger.CURRENT_BLOCK_INDEX + response.headers["X-COUNTERPARTY-READY"] = ledger.CURRENT_BLOCK_INDEX >= BACKEND_HEIGHT response.headers["X-BACKEND-HEIGHT"] = BACKEND_HEIGHT return response @@ -100,6 +99,8 @@ def inject_headers(db, result): @auth.login_required def handle_route(**kwargs): db = get_db() + # update the current block index + ledger.CURRENT_BLOCK_INDEX = blocks.last_db_index(db) rule = str(request.url_rule.rule) if rule == "/": result = api_root() @@ -113,7 +114,7 @@ def handle_route(**kwargs): function_args[arg[0]] = request.args.get(arg[0], arg[1]) result = route["function"](db, **function_args) result = remove_rowids(result) - return inject_headers(db, result) + return inject_headers(result) def run_api_server(args): From 981d3a5ba7e4a1a0f039c1d79251d622aa84c9e5 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 9 Apr 2024 13:53:34 +0200 Subject: [PATCH 031/280] new flags and config values for the new API --- counterparty-core/counterpartycore/server.py | 33 +++++++ .../counterpartylib/lib/api/api_server.py | 10 ++- .../counterpartylib/lib/config.py | 10 ++- counterparty-lib/counterpartylib/server.py | 90 ++++++++++++++++--- 4 files changed, 125 insertions(+), 18 deletions(-) diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index 5602c997cb..c622461f0a 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -132,6 +132,39 @@ {"default": "localhost", "help": "the hostname or IP of the indexd server"}, ], [("--indexd-port",), {"type": int, "help": "the indexd server port to connect to"}], + [ + ("--api-host",), + { + "default": "localhost", + "help": "the IP of the interface to bind to for providing API access (0.0.0.0 for all interfaces)", + }, + ], + [ + ("--api-port",), + {"type": int, "help": f"port on which to provide the {config.APP_NAME} API"}, + ], + [ + ("--api-user",), + { + "default": "rpc", + "help": f"required username to use the {config.APP_NAME} API (via HTTP basic auth)", + }, + ], + [ + ("--api-password",), + { + "default": "rpc", + "help": f"required password (for --api-user) to use the {config.APP_NAME} API (via HTTP basic auth)", + }, + ], + [ + ("--api-no-allow-cors",), + {"action": "store_true", "default": False, "help": "allow ajax cross domain request"}, + ], + [ + ("--api-not-ready-http-code",), + {"type": int, "default": 202, "help": "http code returned when server is not ready"}, + ], [ ("--rpc-host",), { diff --git a/counterparty-lib/counterpartylib/lib/api/api_server.py b/counterparty-lib/counterpartylib/lib/api/api_server.py index dadb014c5b..0caa62fc16 100644 --- a/counterparty-lib/counterpartylib/lib/api/api_server.py +++ b/counterparty-lib/counterpartylib/lib/api/api_server.py @@ -59,7 +59,7 @@ def get_db(): @auth.verify_password def verify_password(username, password): - return username == config.RPC_USER and password == config.RPC_PASSWORD + return username == config.API_USER and password == config.API_PASSWORD def api_root(): @@ -83,8 +83,10 @@ def api_root(): def inject_headers(result): - response = flask.make_response(flask.jsonify(result)) - if not config.RPC_NO_ALLOW_CORS: + server_ready = ledger.CURRENT_BLOCK_INDEX >= BACKEND_HEIGHT + http_code = 200 if server_ready else config.API_NOT_READY_HTTP_CODE + response = flask.make_response(flask.jsonify(result), http_code) + if not config.API_NO_ALLOW_CORS: response.headers["Access-Control-Allow-Origin"] = "*" response.headers["Access-Control-Allow-Methods"] = "GET, POST, OPTIONS" response.headers["Access-Control-Allow-Headers"] = ( @@ -136,7 +138,7 @@ def run_api_server(args): refresh_backend_height() try: # Start the API server - app.run(host=config.RPC_HOST, port=config.RPC_PORT, debug=False) + app.run(host=config.API_HOST, port=config.API_PORT, debug=False) finally: pass # ensure timer is cancelled diff --git a/counterparty-lib/counterpartylib/lib/config.py b/counterparty-lib/counterpartylib/lib/config.py index 001967825d..8101486e5d 100644 --- a/counterparty-lib/counterpartylib/lib/config.py +++ b/counterparty-lib/counterpartylib/lib/config.py @@ -53,9 +53,13 @@ FULL_APP_NAME = "Counterparty Core" LOGGER_NAME = APP_NAME -DEFAULT_RPC_PORT_REGTEST = 24000 -DEFAULT_RPC_PORT_TESTNET = 14000 -DEFAULT_RPC_PORT = 4000 +DEFAULT_API_PORT_REGTEST = 24000 +DEFAULT_API_PORT_TESTNET = 14000 +DEFAULT_API_PORT = 4000 + +DEFAULT_RPC_PORT_REGTEST = 24100 +DEFAULT_RPC_PORT_TESTNET = 14100 +DEFAULT_RPC_PORT = 4100 DEFAULT_BACKEND_PORT_REGTEST = 28332 DEFAULT_BACKEND_PORT_TESTNET = 18332 diff --git a/counterparty-lib/counterpartylib/server.py b/counterparty-lib/counterpartylib/server.py index 35b61504f3..e32b7fca8a 100755 --- a/counterparty-lib/counterpartylib/server.py +++ b/counterparty-lib/counterpartylib/server.py @@ -58,11 +58,15 @@ def sigterm_handler(_signo, _stack_frame): assert False # noqa: B011 logger.info(f"Received {signal_name}.") - if "api_server" in globals(): + global_vars = globals() + if "api_server_v1" in global_vars: + logger.info("Stopping API server v1.") + global_vars["api_server_v1"].stop() + if "api_server" in global_vars: logger.info("Stopping API server.") - api_server.stop() # noqa: F821 - if "api_status_poller" in globals(): - api_status_poller.stop() # noqa: F821 + global_vars["api_server"].stop() + if "api_status_poller" in global_vars: + global_vars["api_status_poller"].stop() logger.info("Stopping backend.") backend.stop() @@ -182,6 +186,12 @@ def initialise_config( backend_ssl=False, backend_ssl_no_verify=False, backend_poll_interval=None, + api_host=None, + api_port=None, + api_user=None, + api_password=None, + api_no_allow_cors=False, + api_not_ready_http_code=202, rpc_host=None, rpc_port=None, rpc_user=None, @@ -450,6 +460,57 @@ def initialise_config( config.RPC_BATCH_SIZE = rpc_batch_size + # API V2 Settings + + if api_host: + config.API_HOST = api_host + else: + config.API_HOST = "localhost" + + if api_port: + config.API_PORT = rpc_port + else: + if config.TESTNET: + if config.TESTCOIN: + config.API_PORT = config.DEFAULT_API_PORT_TESTNET + 1 + else: + config.API_PORT = config.DEFAULT_API_PORT_TESTNET + elif config.REGTEST: + if config.TESTCOIN: + config.API_PORT = config.DEFAULT_API_PORT_REGTEST + 1 + else: + config.API_PORT = config.DEFAULT_API_PORT_REGTEST + else: + if config.TESTCOIN: + config.API_PORT = config.DEFAULT_API_PORT + 1 + else: + config.API_PORT = config.DEFAULT_API_PORT + try: + config.API_PORT = int(config.API_PORT) + if not (int(config.API_PORT) > 1 and int(config.API_PORT) < 65535): + raise ConfigurationError("invalid server API port number") + except: # noqa: E722 + raise ConfigurationError( # noqa: B904 + "Please specific a valid port number api-port configuration parameter" + ) + + if api_user: + config.API_USER = api_user + else: + config.API_USER = "api" + + if api_password: + config.API_PASSWORD = api_password + else: + config.API_PASSWORD = "api" # noqa: S105 + + if api_no_allow_cors: + config.API_NO_ALLOW_CORS = api_no_allow_cors + else: + config.API_NO_ALLOW_CORS = False + + config.API_NOT_READY_HTTP_CODE = api_not_ready_http_code + ############## # OTHER SETTINGS @@ -564,6 +625,12 @@ def initialise_log_and_config(args): "backend_poll_interval": args.backend_poll_interval, "indexd_connect": args.indexd_connect, "indexd_port": args.indexd_port, + "api_host": args.api_host, + "api_port": args.api_port, + "api_user": args.api_user, + "api_password": args.api_password, + "api_no_allow_cors": args.api_no_allow_cors, + "api_not_ready_http_code": args.api_not_ready_http_code, "rpc_host": args.rpc_host, "rpc_port": args.rpc_port, "rpc_user": args.rpc_user, @@ -653,6 +720,7 @@ def connect_to_addrindexrs(): def start_all(args): + global api_server_v1, api_server, api_status_poller # noqa: PLW0603 # Backend. connect_to_backend() @@ -672,13 +740,13 @@ def start_all(args): api_status_poller.start() # API Server. - api_server = api_v1.APIServer() - api_server.daemon = True - api_server.start() - else: - # REST API Server. - api_server = api_v2.APIServer() - api_server.start(args) + api_server_v1 = api_v1.APIServer() + api_server_v1.daemon = True + api_server_v1.start() + + # REST API Server. + api_server = api_v2.APIServer() + api_server.start(args) # Server blocks.follow(db) From 91e69d14ae0f52929da49f7cc2ec580b7a42fa47 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 9 Apr 2024 14:32:36 +0200 Subject: [PATCH 032/280] fix tests --- counterparty-core/counterpartycore/server.py | 4 ++-- counterparty-lib/counterpartylib/lib/api/api_server.py | 1 + counterparty-lib/counterpartylib/server.py | 2 +- counterparty-lib/counterpartylib/test/api_v2_test.py | 2 +- counterparty-lib/counterpartylib/test/conftest.py | 7 ++++++- counterparty-lib/counterpartylib/test/util_test.py | 1 + 6 files changed, 12 insertions(+), 5 deletions(-) diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index c622461f0a..f0a2129ea5 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -146,14 +146,14 @@ [ ("--api-user",), { - "default": "rpc", + "default": "api", "help": f"required username to use the {config.APP_NAME} API (via HTTP basic auth)", }, ], [ ("--api-password",), { - "default": "rpc", + "default": "api", "help": f"required password (for --api-user) to use the {config.APP_NAME} API (via HTTP basic auth)", }, ], diff --git a/counterparty-lib/counterpartylib/lib/api/api_server.py b/counterparty-lib/counterpartylib/lib/api/api_server.py index 0caa62fc16..d7bcf01bf3 100644 --- a/counterparty-lib/counterpartylib/lib/api/api_server.py +++ b/counterparty-lib/counterpartylib/lib/api/api_server.py @@ -138,6 +138,7 @@ def run_api_server(args): refresh_backend_height() try: # Start the API server + print("API server started", config.API_HOST, config.API_PORT) app.run(host=config.API_HOST, port=config.API_PORT, debug=False) finally: pass diff --git a/counterparty-lib/counterpartylib/server.py b/counterparty-lib/counterpartylib/server.py index e32b7fca8a..2549647d1f 100755 --- a/counterparty-lib/counterpartylib/server.py +++ b/counterparty-lib/counterpartylib/server.py @@ -468,7 +468,7 @@ def initialise_config( config.API_HOST = "localhost" if api_port: - config.API_PORT = rpc_port + config.API_PORT = api_port else: if config.TESTNET: if config.TESTCOIN: diff --git a/counterparty-lib/counterpartylib/test/api_v2_test.py b/counterparty-lib/counterpartylib/test/api_v2_test.py index c808246d32..938c3464a8 100644 --- a/counterparty-lib/counterpartylib/test/api_v2_test.py +++ b/counterparty-lib/counterpartylib/test/api_v2_test.py @@ -14,7 +14,7 @@ FIXTURE_SQL_FILE = CURR_DIR + "/fixtures/scenarios/unittest_fixture.sql" FIXTURE_DB = tempfile.gettempdir() + "/fixtures.unittest_fixture.db" -API_ROOT = "http://rpc:pass@localhost:10009" +API_ROOT = "http://api:api@localhost:10009" @pytest.mark.usefixtures("api_server_v2") diff --git a/counterparty-lib/counterpartylib/test/conftest.py b/counterparty-lib/counterpartylib/test/conftest.py index d1086d44b9..5bc910b40e 100644 --- a/counterparty-lib/counterpartylib/test/conftest.py +++ b/counterparty-lib/counterpartylib/test/conftest.py @@ -255,6 +255,11 @@ def api_server_v2(request, cp_server): "rpc_user": None, "rpc_password": None, "rpc_no_allow_cors": False, + "api_host": "localhost", + "api_user": "api", + "api_password": "api", + "api_no_allow_cors": False, + "api_not_ready_http_code": 202, "force": False, "requests_timeout": config.DEFAULT_REQUESTS_TIMEOUT, "rpc_batch_size": config.DEFAULT_RPC_BATCH_SIZE, @@ -281,7 +286,7 @@ def api_server_v2(request, cp_server): | util_test.COUNTERPARTYD_OPTIONS | { "database_file": request.module.FIXTURE_DB, - "rpc_port": TEST_RPC_PORT + 10, + "api_port": TEST_RPC_PORT + 10, } ) diff --git a/counterparty-lib/counterpartylib/test/util_test.py b/counterparty-lib/counterpartylib/test/util_test.py index ddded47c28..6d2093b965 100644 --- a/counterparty-lib/counterpartylib/test/util_test.py +++ b/counterparty-lib/counterpartylib/test/util_test.py @@ -67,6 +67,7 @@ "testcoin": False, "rpc_port": 9999, "rpc_password": "pass", + "api_password": "api", "backend_port": 18332, "backend_password": "pass", "backend_ssl_no_verify": True, From 9fb4df006d9d35cb0ebfb2cfd63bb74b39714caa Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 9 Apr 2024 14:39:57 +0200 Subject: [PATCH 033/280] lint --- counterparty-lib/counterpartylib/lib/api/api_server.py | 3 +-- counterparty-lib/counterpartylib/lib/api/api_v1.py | 4 ++-- counterparty-lib/counterpartylib/lib/api/util.py | 3 +-- counterparty-lib/counterpartylib/lib/transaction.py | 8 ++++---- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/api/api_server.py b/counterparty-lib/counterpartylib/lib/api/api_server.py index d7bcf01bf3..50b19af606 100644 --- a/counterparty-lib/counterpartylib/lib/api/api_server.py +++ b/counterparty-lib/counterpartylib/lib/api/api_server.py @@ -130,7 +130,7 @@ def run_api_server(args): ledger.CURRENT_BLOCK_INDEX = blocks.last_db_index(get_db()) # Add routes app.add_url_rule("/", view_func=handle_route) - for path in ROUTES.keys(): + for path in ROUTES: app.add_url_rule(path, view_func=handle_route) # run the scheduler to refresh the backend height # `no_refresh_backend_height` used only for testing. TODO: find a way to mock it @@ -141,7 +141,6 @@ def run_api_server(args): print("API server started", config.API_HOST, config.API_PORT) app.run(host=config.API_HOST, port=config.API_PORT, debug=False) finally: - pass # ensure timer is cancelled if BACKEND_HEIGHT_TIMER: BACKEND_HEIGHT_TIMER.cancel() diff --git a/counterparty-lib/counterpartylib/lib/api/api_v1.py b/counterparty-lib/counterpartylib/lib/api/api_v1.py index d42fe71bbe..f1fcb0416a 100644 --- a/counterparty-lib/counterpartylib/lib/api/api_v1.py +++ b/counterparty-lib/counterpartylib/lib/api/api_v1.py @@ -522,7 +522,7 @@ def run(self): check_backend_state() code = 12 logger.debug("Checking database state.") - api_util.check_database_state(db, backend.getblockcount()) + api_util.check_last_parsed_block(db, backend.getblockcount()) self.last_database_check = time.time() except (BackendError, DatabaseError) as e: exception_name = e.__class__.__name__ @@ -789,7 +789,7 @@ def get_running_info(): latest_block_index = backend.getblockcount() try: - api_util.check_database_state(self.db, latest_block_index) + api_util.check_last_parsed_block(self.db, latest_block_index) except DatabaseError: caught_up = False else: diff --git a/counterparty-lib/counterpartylib/lib/api/util.py b/counterparty-lib/counterpartylib/lib/api/util.py index a717979349..b7d03fc23c 100644 --- a/counterparty-lib/counterpartylib/lib/api/util.py +++ b/counterparty-lib/counterpartylib/lib/api/util.py @@ -7,11 +7,10 @@ def check_last_parsed_block(blockcount): - f"""Checks {config.XCP_NAME} database to see if is caught up with backend.""" # noqa: B021 + """Checks database to see if is caught up with backend.""" if ledger.CURRENT_BLOCK_INDEX + 1 < blockcount: raise exceptions.DatabaseError(f"{config.XCP_NAME} database is behind backend.") logger.debug("Database state check passed.") - return def healthz(db, check_type="heavy"): diff --git a/counterparty-lib/counterpartylib/lib/transaction.py b/counterparty-lib/counterpartylib/lib/transaction.py index ef18e49dec..401086caff 100644 --- a/counterparty-lib/counterpartylib/lib/transaction.py +++ b/counterparty-lib/counterpartylib/lib/transaction.py @@ -991,13 +991,13 @@ def split_compose_arams(**kwargs): transaction_args = {} common_args = {} private_key_wif = None - for key in kwargs: + for key, value in kwargs.items(): if key in COMPOSE_COMMONS_ARGS: - common_args[key] = kwargs[key] + common_args[key] = value elif key == "privkey": - private_key_wif = kwargs[key] + private_key_wif = value else: - transaction_args[key] = kwargs[key] + transaction_args[key] = value return transaction_args, common_args, private_key_wif From b1b86ac7f8a359e4345e6b8814e60b7d1b2381ea Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 9 Apr 2024 15:21:13 +0200 Subject: [PATCH 034/280] fix sql query --- counterparty-lib/counterpartylib/lib/ledger.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/ledger.py b/counterparty-lib/counterpartylib/lib/ledger.py index d3a8cffc4f..cc291915da 100644 --- a/counterparty-lib/counterpartylib/lib/ledger.py +++ b/counterparty-lib/counterpartylib/lib/ledger.py @@ -83,8 +83,7 @@ def get_events(db, block_index=None, event=None, event_index=None, last=None, li if block_index is None and limit is None: limit = 100 if limit is not None: - limit = "LIMIT ?" - bindings.append(limit) + limit = f"LIMIT {int(limit)}" else: limit = "" # no sql injection here From 590b965e94ced5a7c2e6aa5bc93b232f600a5750 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 9 Apr 2024 15:45:39 +0200 Subject: [PATCH 035/280] Fix api v1 shutdown; Fix typos --- .../counterpartylib/lib/api/api_server.py | 1 - counterparty-lib/counterpartylib/lib/api/api_v1.py | 14 ++++++++------ counterparty-lib/counterpartylib/server.py | 7 +++++-- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/api/api_server.py b/counterparty-lib/counterpartylib/lib/api/api_server.py index 50b19af606..405f94cea6 100644 --- a/counterparty-lib/counterpartylib/lib/api/api_server.py +++ b/counterparty-lib/counterpartylib/lib/api/api_server.py @@ -138,7 +138,6 @@ def run_api_server(args): refresh_backend_height() try: # Start the API server - print("API server started", config.API_HOST, config.API_PORT) app.run(host=config.API_HOST, port=config.API_PORT, debug=False) finally: # ensure timer is cancelled diff --git a/counterparty-lib/counterpartylib/lib/api/api_v1.py b/counterparty-lib/counterpartylib/lib/api/api_v1.py index f1fcb0416a..6449d11721 100644 --- a/counterparty-lib/counterpartylib/lib/api/api_v1.py +++ b/counterparty-lib/counterpartylib/lib/api/api_v1.py @@ -54,6 +54,7 @@ from flask_httpauth import HTTPBasicAuth from jsonrpc import dispatcher from jsonrpc.exceptions import JSONRPCDispatchException +from werkzeug.serving import make_server from xmltodict import unparse as serialize_to_xml D = decimal.Decimal @@ -507,7 +508,6 @@ def stop(self): def run(self): logger.debug("Starting API Status Poller.") global CURRENT_API_STATUS_CODE, CURRENT_API_STATUS_RESPONSE_JSON # noqa: PLW0603 - db = database.get_connection(read_only=True) while self.stop_event.is_set() != True: # noqa: E712 try: @@ -522,7 +522,7 @@ def run(self): check_backend_state() code = 12 logger.debug("Checking database state.") - api_util.check_last_parsed_block(db, backend.getblockcount()) + api_util.check_last_parsed_block(backend.getblockcount()) self.last_database_check = time.time() except (BackendError, DatabaseError) as e: exception_name = e.__class__.__name__ @@ -546,11 +546,10 @@ def __init__(self, db=None): self.db = db self.is_ready = False threading.Thread.__init__(self) - self.stop_event = threading.Event() def stop(self): + self.server.shutdown() self.join() - self.stop_event.set() def run(self): logger.info("Starting API Server.") @@ -789,7 +788,7 @@ def get_running_info(): latest_block_index = backend.getblockcount() try: - api_util.check_last_parsed_block(self.db, latest_block_index) + api_util.check_last_parsed_block(latest_block_index) except DatabaseError: caught_up = False else: @@ -1222,7 +1221,10 @@ def handle_rest(path_args, flask_request): # Run app server (blocking) self.is_ready = True - app.run(host=config.RPC_HOST, port=config.RPC_PORT, threaded=True) + self.server = make_server(config.RPC_HOST, config.RPC_PORT, app) + self.ctx = app.app_context() + self.ctx.push() + self.server.serve_forever() self.db.close() return diff --git a/counterparty-lib/counterpartylib/server.py b/counterparty-lib/counterpartylib/server.py index 2549647d1f..4e4733c667 100755 --- a/counterparty-lib/counterpartylib/server.py +++ b/counterparty-lib/counterpartylib/server.py @@ -59,14 +59,17 @@ def sigterm_handler(_signo, _stack_frame): logger.info(f"Received {signal_name}.") global_vars = globals() + # API v1 if "api_server_v1" in global_vars: logger.info("Stopping API server v1.") global_vars["api_server_v1"].stop() + if "api_status_poller" in global_vars: + logger.info("Stopping API Status Pooler.") + global_vars["api_status_poller"].stop() + # API v2 if "api_server" in global_vars: logger.info("Stopping API server.") global_vars["api_server"].stop() - if "api_status_poller" in global_vars: - global_vars["api_status_poller"].stop() logger.info("Stopping backend.") backend.stop() From bc30b79be3f2eba2001976ad2219dc64a697e23b Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 9 Apr 2024 15:55:31 +0200 Subject: [PATCH 036/280] Put API v1 behind '/old' --- counterparty-lib/counterpartylib/lib/api/api_v1.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/api/api_v1.py b/counterparty-lib/counterpartylib/lib/api/api_v1.py index 6449d11721..75c93f9b32 100644 --- a/counterparty-lib/counterpartylib/lib/api/api_v1.py +++ b/counterparty-lib/counterpartylib/lib/api/api_v1.py @@ -1047,12 +1047,11 @@ def handle_healthz(): @conditional_decorator(auth.login_required, hasattr(config, "RPC_PASSWORD")) def handle_root(args_path): """Handle all paths, decide where to forward the query.""" + request_path = args_path.lower() if ( - args_path == "" - or args_path.startswith("api/") - or args_path.startswith("API/") - or args_path.startswith("rpc/") - or args_path.startswith("RPC/") + request_path == "old" + or request_path.startswith("old/api/") + or request_path.startswith("old/rpc/") ): if flask.request.method == "POST": # Need to get those here because it might not be available in this aux function. @@ -1065,7 +1064,7 @@ def handle_root(args_path): else: error = "Invalid method." return flask.Response(error, 405, mimetype="application/json") - elif args_path.startswith("rest/") or args_path.startswith("REST/"): + elif request_path.startswith("old/rest/"): if flask.request.method == "GET" or flask.request.method == "POST": # Pass the URL path without /REST/ part and Flask request object. rest_path = args_path.split("/", 1)[1] From 7a403e45fc27986468f09b8dc15a720197fae6e6 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 9 Apr 2024 16:01:09 +0200 Subject: [PATCH 037/280] Add X-API-Warn header --- counterparty-lib/counterpartylib/lib/api/api_v1.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/counterparty-lib/counterpartylib/lib/api/api_v1.py b/counterparty-lib/counterpartylib/lib/api/api_v1.py index 75c93f9b32..17898917a4 100644 --- a/counterparty-lib/counterpartylib/lib/api/api_v1.py +++ b/counterparty-lib/counterpartylib/lib/api/api_v1.py @@ -1083,6 +1083,7 @@ def handle_root(args_path): def handle_rpc_options(): response = flask.Response("", 204) _set_cors_headers(response) + response.headers["X-API-WARN"] = "Deprecated API" return response def handle_rpc_post(request_json): @@ -1122,6 +1123,7 @@ def handle_rpc_post(request_json): jsonrpc_response.json.encode(), 200, mimetype="application/json" ) _set_cors_headers(response) + response.headers["X-API-WARN"] = "Deprecated API" return response ###################### From d8b4b63b3bf18a5d923396431428a14a56507005 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 9 Apr 2024 16:09:07 +0200 Subject: [PATCH 038/280] use 'flask_cors' for cors --- counterparty-lib/counterpartylib/lib/api/api_server.py | 9 +++------ counterparty-lib/requirements.txt | 1 + 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/api/api_server.py b/counterparty-lib/counterpartylib/lib/api/api_server.py index 405f94cea6..c0e029f53e 100644 --- a/counterparty-lib/counterpartylib/lib/api/api_server.py +++ b/counterparty-lib/counterpartylib/lib/api/api_server.py @@ -17,6 +17,7 @@ from counterpartylib.lib.api.util import get_backend_height, remove_rowids from flask import Flask, request from flask import g as flask_globals +from flask_cors import CORS from flask_httpauth import HTTPBasicAuth multiprocessing.set_start_method("spawn", force=True) @@ -86,12 +87,6 @@ def inject_headers(result): server_ready = ledger.CURRENT_BLOCK_INDEX >= BACKEND_HEIGHT http_code = 200 if server_ready else config.API_NOT_READY_HTTP_CODE response = flask.make_response(flask.jsonify(result), http_code) - if not config.API_NO_ALLOW_CORS: - response.headers["Access-Control-Allow-Origin"] = "*" - response.headers["Access-Control-Allow-Methods"] = "GET, POST, OPTIONS" - response.headers["Access-Control-Allow-Headers"] = ( - "DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization" - ) response.headers["X-COUNTERPARTY-HEIGHT"] = ledger.CURRENT_BLOCK_INDEX response.headers["X-COUNTERPARTY-READY"] = ledger.CURRENT_BLOCK_INDEX >= BACKEND_HEIGHT response.headers["X-BACKEND-HEIGHT"] = BACKEND_HEIGHT @@ -124,6 +119,8 @@ def run_api_server(args): # Initialise log and config server.initialise_log_and_config(argparse.Namespace(**args)) with app.app_context(): + if not config.API_NO_ALLOW_CORS: + CORS(app) # Initialise the API access log init_api_access_log() # Get the last block index diff --git a/counterparty-lib/requirements.txt b/counterparty-lib/requirements.txt index 9bf40d969d..d14b3c654a 100644 --- a/counterparty-lib/requirements.txt +++ b/counterparty-lib/requirements.txt @@ -4,6 +4,7 @@ setuptools-markdown==0.4.1 python-dateutil==2.8.2 Flask-HTTPAuth==4.8.0 Flask==3.0.0 +flask-cors==4.0.0 colorlog==6.8.0 json-rpc==1.15.0 pycoin==0.92.20230326 From 861411cf3e2390c27e7a3bb946b333571e565a75 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 9 Apr 2024 16:14:56 +0200 Subject: [PATCH 039/280] fix config.RPC_WEBROOT --- counterparty-lib/counterpartylib/server.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/counterparty-lib/counterpartylib/server.py b/counterparty-lib/counterpartylib/server.py index 4e4733c667..0b1273aa8c 100755 --- a/counterparty-lib/counterpartylib/server.py +++ b/counterparty-lib/counterpartylib/server.py @@ -409,8 +409,8 @@ def initialise_config( else: config.RPC_HOST = "localhost" - # The web root directory for API calls, eg. localhost:14000/rpc/ - config.RPC_WEBROOT = "/rpc/" + # The web root directory for API calls, eg. localhost:14000/old/rpc/ + config.RPC_WEBROOT = "/old/rpc/" # Server API RPC port if rpc_port: From 366a0609baab85a680399d1073b712c3a2d22312 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 9 Apr 2024 19:25:12 +0200 Subject: [PATCH 040/280] new routes for mempool --- counterparty-lib/counterpartylib/lib/api/routes.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/api/routes.py b/counterparty-lib/counterpartylib/lib/api/routes.py index fb73e6e4fd..3c68e92903 100644 --- a/counterparty-lib/counterpartylib/lib/api/routes.py +++ b/counterparty-lib/counterpartylib/lib/api/routes.py @@ -28,12 +28,6 @@ "/blocks//events/": { "function": ledger.get_events, }, - "/blocks/mempool/events": { - "function": ledger.get_mempool_events, - }, - "/blocks/mempool/events/": { - "function": ledger.get_mempool_events, - }, "/blocks//credits": { "function": ledger.get_credits, }, @@ -252,4 +246,11 @@ ("mode", config.ESTIMATE_FEE_MODE), ], }, + ### /mempool ### + "/mempool/events": { + "function": ledger.get_mempool_events, + }, + "/mempool/events/": { + "function": ledger.get_mempool_events, + }, } From 7916b6287c2e3b90c01690f5c4ae1382ce182528 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 9 Apr 2024 19:27:13 +0200 Subject: [PATCH 041/280] API_NOT_READY_HTTP_CODE=503 by default --- counterparty-core/counterpartycore/server.py | 2 +- counterparty-lib/counterpartylib/server.py | 2 +- counterparty-lib/counterpartylib/test/conftest.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index f0a2129ea5..c408d342b3 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -163,7 +163,7 @@ ], [ ("--api-not-ready-http-code",), - {"type": int, "default": 202, "help": "http code returned when server is not ready"}, + {"type": int, "default": 503, "help": "http code returned when server is not ready"}, ], [ ("--rpc-host",), diff --git a/counterparty-lib/counterpartylib/server.py b/counterparty-lib/counterpartylib/server.py index 0b1273aa8c..b0975b7eb2 100755 --- a/counterparty-lib/counterpartylib/server.py +++ b/counterparty-lib/counterpartylib/server.py @@ -194,7 +194,7 @@ def initialise_config( api_user=None, api_password=None, api_no_allow_cors=False, - api_not_ready_http_code=202, + api_not_ready_http_code=503, rpc_host=None, rpc_port=None, rpc_user=None, diff --git a/counterparty-lib/counterpartylib/test/conftest.py b/counterparty-lib/counterpartylib/test/conftest.py index 5bc910b40e..f797b8096f 100644 --- a/counterparty-lib/counterpartylib/test/conftest.py +++ b/counterparty-lib/counterpartylib/test/conftest.py @@ -259,7 +259,7 @@ def api_server_v2(request, cp_server): "api_user": "api", "api_password": "api", "api_no_allow_cors": False, - "api_not_ready_http_code": 202, + "api_not_ready_http_code": 503, "force": False, "requests_timeout": config.DEFAULT_REQUESTS_TIMEOUT, "rpc_batch_size": config.DEFAULT_RPC_BATCH_SIZE, From 9ca45d62f8f79320fc1879fa07eb80a3374962a1 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 9 Apr 2024 19:36:35 +0200 Subject: [PATCH 042/280] check -> check_type --- counterparty-lib/counterpartylib/lib/api/routes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/counterparty-lib/counterpartylib/lib/api/routes.py b/counterparty-lib/counterpartylib/lib/api/routes.py index 3c68e92903..c025935328 100644 --- a/counterparty-lib/counterpartylib/lib/api/routes.py +++ b/counterparty-lib/counterpartylib/lib/api/routes.py @@ -213,7 +213,7 @@ ### /healthz ### "/healthz": { "function": util.handle_healthz_route, - "args": [("check", "heavy")], + "args": [("check_type", "heavy")], }, ### /backend ### "/backend/addresses/
/transactions": { From f27531c48179de225269abea0184babb1d3bcb9e Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 9 Apr 2024 19:47:35 +0200 Subject: [PATCH 043/280] lint --- .../counterpartylib/lib/api/api_v1.py | 2 ++ .../counterpartylib/lib/messages/rps.py | 4 +-- .../counterpartylib/lib/transaction.py | 34 +++++++++---------- counterparty-lib/counterpartylib/server.py | 6 ++-- 4 files changed, 25 insertions(+), 21 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/api/api_v1.py b/counterparty-lib/counterpartylib/lib/api/api_v1.py index 17898917a4..bf1ec4a8ec 100644 --- a/counterparty-lib/counterpartylib/lib/api/api_v1.py +++ b/counterparty-lib/counterpartylib/lib/api/api_v1.py @@ -545,6 +545,8 @@ class APIServer(threading.Thread): def __init__(self, db=None): self.db = db self.is_ready = False + self.server = None + self.ctx = None threading.Thread.__init__(self) def stop(self): diff --git a/counterparty-lib/counterpartylib/lib/messages/rps.py b/counterparty-lib/counterpartylib/lib/messages/rps.py index 8734186ccc..571938c29d 100644 --- a/counterparty-lib/counterpartylib/lib/messages/rps.py +++ b/counterparty-lib/counterpartylib/lib/messages/rps.py @@ -298,7 +298,7 @@ def compose(db, source, possible_moves, wager, move_random_hash, expiration): return (source, [], data) -def upack(message, return_dict=False): +def unpack(message, return_dict=False): try: if len(message) != LENGTH: raise exceptions.UnpackError @@ -322,7 +322,7 @@ def upack(message, return_dict=False): def parse(db, tx, message): rps_parse_cursor = db.cursor() # Unpack message. - possible_moves, wager, move_random_hash, expiration, status = upack(message) + possible_moves, wager, move_random_hash, expiration, status = unpack(message) if status == "open": move_random_hash = binascii.hexlify(move_random_hash).decode("utf8") diff --git a/counterparty-lib/counterpartylib/lib/transaction.py b/counterparty-lib/counterpartylib/lib/transaction.py index 401086caff..e2b177ab77 100644 --- a/counterparty-lib/counterpartylib/lib/transaction.py +++ b/counterparty-lib/counterpartylib/lib/transaction.py @@ -1056,69 +1056,69 @@ def unpack(db, datahex, block_index=None): message_data = {"error": "Unknown message type"} # Bet if message_type_id == messages.bet.ID: - message_type = "bet" + message_type_name = "bet" message_data = messages.bet.unpack(message, return_dict=True) # Broadcast elif message_type_id == messages.broadcast.ID: - message_type = "broadcast" + message_type_name = "broadcast" message_data = messages.broadcast.unpack(message, block_index, return_dict=True) # BTCPay elif message_type_id == messages.btcpay.ID: - message_type = "btcpay" + message_type_name = "btcpay" message_data = messages.btcpay.unpack(message, return_dict=True) # Cancel elif message_type_id == messages.cancel.ID: - message_type = "cancel" + message_type_name = "cancel" message_data = messages.cancel.unpack(message, return_dict=True) # Destroy elif message_type_id == messages.destroy.ID: - message_type = "destroy" + message_type_name = "destroy" message_data = messages.destroy.unpack(db, message, return_dict=True) # Dispenser elif message_type_id == messages.dispenser.ID: - message_type = "dispenser" + message_type_name = "dispenser" message_data = messages.dispenser.unpack(message, return_dict=True) # Dividend elif message_type_id == messages.dividend.ID: - message_type = "dividend" - message_data = messages.dividend.unpack(db, message, return_dict=True) + message_type_name = "dividend" + message_data = messages.dividend.unpack(db, message, block_index, return_dict=True) # Issuance elif message_type_id in issuance_ids: - message_type = "issuance" + message_type_name = "issuance" message_data = messages.issuance.unpack( db, message, message_type_id, block_index, return_dict=True ) # Order elif message_type_id == messages.order.ID: - message_type = "order" + message_type_name = "order" message_data = messages.order.unpack(db, message, block_index, return_dict=True) # Send elif message_type_id == messages.send.ID: - message_type = "send" + message_type_name = "send" message_data = messages.send.unpack(db, message, block_index) # Enhanced send elif message_type_id == messages.versions.enhanced_send.ID: - message_type = "enhanced_send" + message_type_name = "enhanced_send" message_data = messages.versions.enhanced_send.unpack(message, block_index) # MPMA send elif message_type_id == messages.versions.mpma.ID: - message_type = "mpma_send" + message_type_name = "mpma_send" message_data = messages.versions.mpma.unpack(message, block_index) # RPS elif message_type_id == messages.rps.ID: - message_type = "rps" + message_type_name = "rps" message_data = messages.rps.unpack(message, return_dict=True) # RPS Resolve elif message_type_id == messages.rpsresolve.ID: - message_type = "rpsresolve" + message_type_name = "rpsresolve" message_data = messages.rpsresolve.unpack(message, return_dict=True) # Sweep elif message_type_id == messages.sweep.ID: - message_type = "sweep" + message_type_name = "sweep" message_data = messages.sweep.unpack(message) return { - "message_type": message_type, + "message_type": message_type_name, "message_type_id": message_type_id, "message_data": message_data, } diff --git a/counterparty-lib/counterpartylib/server.py b/counterparty-lib/counterpartylib/server.py index b0975b7eb2..08eec4e8bb 100755 --- a/counterparty-lib/counterpartylib/server.py +++ b/counterparty-lib/counterpartylib/server.py @@ -48,6 +48,8 @@ class ConfigurationError(Exception): SIGTERM_CALLBACKS = [] +global api_server_v1, api_server, api_status_poller # noqa: PLW0603 + def sigterm_handler(_signo, _stack_frame): if _signo == 15: @@ -492,10 +494,10 @@ def initialise_config( config.API_PORT = int(config.API_PORT) if not (int(config.API_PORT) > 1 and int(config.API_PORT) < 65535): raise ConfigurationError("invalid server API port number") - except: # noqa: E722 + except ConfigurationError as e: # noqa: E722 raise ConfigurationError( # noqa: B904 "Please specific a valid port number api-port configuration parameter" - ) + ) from e if api_user: config.API_USER = api_user From 4b0a7a6a23449639790f7072e36a593f416c2220 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 10 Apr 2024 11:02:14 +0200 Subject: [PATCH 044/280] fix rebase --- .../counterpartylib/lib/transaction.py | 120 ++++++++++++++++-- 1 file changed, 111 insertions(+), 9 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/transaction.py b/counterparty-lib/counterpartylib/lib/transaction.py index e2b177ab77..2e4d63b835 100644 --- a/counterparty-lib/counterpartylib/lib/transaction.py +++ b/counterparty-lib/counterpartylib/lib/transaction.py @@ -10,16 +10,8 @@ import inspect import io import logging -<<<<<<< HEAD -import math # noqa: F401 -import os # noqa: F401 -import re # noqa: F401 -import sys # noqa: F401 -import threading -import time # noqa: F401 -======= import sys ->>>>>>> 0595b1a1 (Add route to compose transactions) +import threading import bitcoin as bitcoinlib import cachetools @@ -1019,6 +1011,116 @@ def split_compose_arams(**kwargs): ] +def compose_transaction( + db, + name, + params, + encoding="auto", + fee_per_kb=None, + estimate_fee_per_kb=None, + regular_dust_size=config.DEFAULT_REGULAR_DUST_SIZE, + multisig_dust_size=config.DEFAULT_MULTISIG_DUST_SIZE, + op_return_value=config.DEFAULT_OP_RETURN_VALUE, + pubkey=None, + allow_unconfirmed_inputs=False, + fee=None, + fee_provided=0, + unspent_tx_hash=None, + custom_inputs=None, + dust_return_pubkey=None, + disable_utxo_locks=False, + extended_tx_info=False, + p2sh_source_multisig_pubkeys=None, + p2sh_source_multisig_pubkeys_required=None, + p2sh_pretx_txid=None, + old_style_api=True, + segwit=False, +): + """Create and return a transaction.""" + + # Get provided pubkeys. + if isinstance(pubkey, str): + provided_pubkeys = [pubkey] + elif isinstance(pubkey, list): + provided_pubkeys = pubkey + elif pubkey is None: + provided_pubkeys = [] + else: + raise exceptions.TransactionError("Invalid pubkey.") + + # Get additional pubkeys from `source` and `destination` params. + # Convert `source` and `destination` to pubkeyhash form. + for address_name in ["source", "destination"]: + if address_name in params: + address = params[address_name] + if isinstance(address, list): + # pkhshs = [] + # for addr in address: + # provided_pubkeys += script.extract_pubkeys(addr) + # pkhshs.append(script.make_pubkeyhash(addr)) + # params[address_name] = pkhshs + pass + else: + provided_pubkeys += script.extract_pubkeys(address) + params[address_name] = script.make_pubkeyhash(address) + + # Check validity of collected pubkeys. + for pubkey in provided_pubkeys: + if not script.is_fully_valid(binascii.unhexlify(pubkey)): + raise script.AddressError(f"invalid public key: {pubkey}") + + compose_method = sys.modules[f"counterpartylib.lib.messages.{name}"].compose + compose_params = inspect.getfullargspec(compose_method)[0] + missing_params = [p for p in compose_params if p not in params and p != "db"] + for param in missing_params: + params[param] = None + + # dont override fee_per_kb if specified + if fee_per_kb is not None: + estimate_fee_per_kb = False + else: + fee_per_kb = config.DEFAULT_FEE_PER_KB + + if "extended_tx_info" in params: + extended_tx_info = params["extended_tx_info"] + del params["extended_tx_info"] + + if "old_style_api" in params: + old_style_api = params["old_style_api"] + del params["old_style_api"] + + if "segwit" in params: + segwit = params["segwit"] + del params["segwit"] + + tx_info = compose_method(db, **params) + initialise(db) + return construct( + db, + tx_info, + encoding=encoding, + fee_per_kb=fee_per_kb, + estimate_fee_per_kb=estimate_fee_per_kb, + regular_dust_size=regular_dust_size, + multisig_dust_size=multisig_dust_size, + op_return_value=op_return_value, + provided_pubkeys=provided_pubkeys, + allow_unconfirmed_inputs=allow_unconfirmed_inputs, + exact_fee=fee, + fee_provided=fee_provided, + unspent_tx_hash=unspent_tx_hash, + custom_inputs=custom_inputs, + dust_return_pubkey=dust_return_pubkey, + disable_utxo_locks=disable_utxo_locks, + extended_tx_info=extended_tx_info, + p2sh_source_multisig_pubkeys=p2sh_source_multisig_pubkeys, + p2sh_source_multisig_pubkeys_required=p2sh_source_multisig_pubkeys_required, + p2sh_pretx_txid=p2sh_pretx_txid, + old_style_api=old_style_api, + segwit=segwit, + ) + + def compose(db, transaction_name, **kwargs): if transaction_name not in COMPOSABLE_TRANSACTIONS: raise exceptions.TransactionError("Transaction type not composable.") From a4b4fd33461619b467f80b9092a994f29466b8d9 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 10 Apr 2024 11:10:15 +0200 Subject: [PATCH 045/280] fix ruff alert --- counterparty-lib/counterpartylib/lib/address.py | 11 ++++++++--- .../counterpartylib/test/estimate_fee_per_kb_test.py | 4 +--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/address.py b/counterparty-lib/counterpartylib/lib/address.py index 2f9b15abd9..3f8cd8a686 100644 --- a/counterparty-lib/counterpartylib/lib/address.py +++ b/counterparty-lib/counterpartylib/lib/address.py @@ -2,7 +2,8 @@ import struct # noqa: F401 import bitcoin -from counterpartylib.lib import config, ledger, script, exceptions # noqa: F401 + +from counterpartylib.lib import config, exceptions, ledger, script # noqa: F401 logger = logging.getLogger(config.LOGGER_NAME) @@ -58,10 +59,14 @@ def unpack(short_address_bytes): """ from .ledger import enabled # Here to account for test mock changes - if short_address_bytes == b'': + if short_address_bytes == b"": raise exceptions.UnpackError - if enabled('segwit_support') and short_address_bytes[0] >= 0x80 and short_address_bytes[0] <= 0x8F: + if ( + enabled("segwit_support") + and short_address_bytes[0] >= 0x80 + and short_address_bytes[0] <= 0x8F + ): # we have a segwit address here witver = short_address_bytes[0] - 0x80 witprog = short_address_bytes[1:] diff --git a/counterparty-lib/counterpartylib/test/estimate_fee_per_kb_test.py b/counterparty-lib/counterpartylib/test/estimate_fee_per_kb_test.py index ef74ba3e64..9e19996bc2 100644 --- a/counterparty-lib/counterpartylib/test/estimate_fee_per_kb_test.py +++ b/counterparty-lib/counterpartylib/test/estimate_fee_per_kb_test.py @@ -4,8 +4,7 @@ import bitcoin as bitcoinlib -from counterpartylib.lib import (backend, transaction) -from counterpartylib.lib.api import api_v1 as api +from counterpartylib.lib import backend, transaction from counterpartylib.test import ( util_test, ) @@ -40,7 +39,6 @@ def _fee_per_kb(conf_target, mode): ) with util_test.ConfigContext(ESTIMATE_FEE_PER_KB=True): - transaction.initialise() txhex = transaction.compose_transaction( From 45998bdbfe8892f8c49a1fa4027aebb4e0cca3b6 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 10 Apr 2024 20:16:09 +0200 Subject: [PATCH 046/280] Fix log in file --- .../counterpartylib/lib/api/api_server.py | 26 ++----------------- .../counterpartylib/lib/api/api_v1.py | 24 +---------------- .../counterpartylib/lib/api/util.py | 19 ++++++++++++++ .../lib/backend/addrindexrs.py | 2 +- 4 files changed, 23 insertions(+), 48 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/api/api_server.py b/counterparty-lib/counterpartylib/lib/api/api_server.py index c0e029f53e..b5a5d01cdd 100644 --- a/counterparty-lib/counterpartylib/lib/api/api_server.py +++ b/counterparty-lib/counterpartylib/lib/api/api_server.py @@ -1,7 +1,6 @@ import argparse import logging import multiprocessing -from logging import handlers as logging_handlers from multiprocessing import Process from threading import Timer @@ -14,7 +13,7 @@ ledger, ) from counterpartylib.lib.api.routes import ROUTES -from counterpartylib.lib.api.util import get_backend_height, remove_rowids +from counterpartylib.lib.api.util import get_backend_height, init_api_access_log, remove_rowids from flask import Flask, request from flask import g as flask_globals from flask_cors import CORS @@ -30,27 +29,6 @@ BACKEND_HEIGHT_TIMER = None -def init_api_access_log(): - """Initialize API logger.""" - werkzeug_loggers = (logging.getLogger("werkzeug"), flask.current_app.logger) - - # Disable console logging... - for werkzeug_logger in werkzeug_loggers: # noqa: E741 - werkzeug_logger.setLevel(logging.CRITICAL) - werkzeug_logger.propagate = False - - # Log to file, if configured... - if config.API_LOG: - handler = logging_handlers.RotatingFileHandler( - config.API_LOG, "a", config.API_MAX_LOG_SIZE, config.API_MAX_LOG_COUNT - ) - for werkzeug_logger in werkzeug_loggers: # noqa: E741 - handler.setLevel(logging.DEBUG) - werkzeug_logger.addHandler(handler) - - flask.cli.show_server_banner = lambda *args: None - - def get_db(): """Get the database connection.""" if not hasattr(flask_globals, "db"): @@ -122,7 +100,7 @@ def run_api_server(args): if not config.API_NO_ALLOW_CORS: CORS(app) # Initialise the API access log - init_api_access_log() + init_api_access_log(app) # Get the last block index ledger.CURRENT_BLOCK_INDEX = blocks.last_db_index(get_db()) # Add routes diff --git a/counterparty-lib/counterpartylib/lib/api/api_v1.py b/counterparty-lib/counterpartylib/lib/api/api_v1.py index bf1ec4a8ec..b93d4155d0 100644 --- a/counterparty-lib/counterpartylib/lib/api/api_v1.py +++ b/counterparty-lib/counterpartylib/lib/api/api_v1.py @@ -15,7 +15,6 @@ import threading import time import traceback -from logging import handlers as logging_handlers import flask import jsonrpc @@ -473,27 +472,6 @@ def gen_decorator(f): return gen_decorator -def init_api_access_log(app): - """Initialize API logger.""" - loggers = (logging.getLogger("werkzeug"), app.logger) - - # Disable console logging... - for l in loggers: # noqa: E741 - l.setLevel(logging.CRITICAL) - l.propagate = False - - # Log to file, if configured... - if config.API_LOG: - handler = logging_handlers.RotatingFileHandler( - config.API_LOG, "a", config.API_MAX_LOG_SIZE, config.API_MAX_LOG_COUNT - ) - for l in loggers: # noqa: E741 - handler.setLevel(logging.DEBUG) - l.addHandler(handler) - - flask.cli.show_server_banner = lambda *args: None - - class APIStatusPoller(threading.Thread): """Perform regular checks on the state of the backend and the database.""" @@ -1220,7 +1198,7 @@ def handle_rest(path_args, flask_request): return response # Init the HTTP Server. - init_api_access_log(app) + api_util.init_api_access_log(app) # Run app server (blocking) self.is_ready = True diff --git a/counterparty-lib/counterpartylib/lib/api/util.py b/counterparty-lib/counterpartylib/lib/api/util.py index b7d03fc23c..ea8d5c6a6e 100644 --- a/counterparty-lib/counterpartylib/lib/api/util.py +++ b/counterparty-lib/counterpartylib/lib/api/util.py @@ -1,4 +1,5 @@ import logging +from logging import handlers as logging_handlers import flask from counterpartylib.lib import backend, config, exceptions, ledger, transaction @@ -83,3 +84,21 @@ def get_backend_height(): block_count = backend.getblockcount() blocks_behind = backend.getindexblocksbehind() return block_count + blocks_behind + + +def init_api_access_log(flask_app): + """Initialize API logger.""" + flask_app.logger.removeHandler(flask.logging.default_handler) + flask_app.logger.setLevel(logging.DEBUG) + werkzeug_logger = logging.getLogger("werkzeug") + + # Log to file, if configured... + if config.API_LOG: + handler = logging_handlers.RotatingFileHandler( + config.API_LOG, "a", config.API_MAX_LOG_SIZE, config.API_MAX_LOG_COUNT + ) + handler.setLevel(logging.DEBUG) + flask_app.logger.addHandler(handler) + werkzeug_logger.addHandler(handler) + + flask.cli.show_server_banner = lambda *args: None diff --git a/counterparty-lib/counterpartylib/lib/backend/addrindexrs.py b/counterparty-lib/counterpartylib/lib/backend/addrindexrs.py index 98701c4362..033e064a81 100644 --- a/counterparty-lib/counterpartylib/lib/backend/addrindexrs.py +++ b/counterparty-lib/counterpartylib/lib/backend/addrindexrs.py @@ -528,7 +528,7 @@ def send(self, msg): def _run(self): while self.is_running: try: - logger.debug("AddrIndexRsClient.thread -- waiting for message") + # logger.debug("AddrIndexRsClient.thread -- waiting for message") # if there is no messager after 1 sec, it will raise queue.Empty msg = self.req_queue.get(timeout=1) self.socket_manager.send(msg) From d60760234e0f183ff8ed0b34d6fd34edc640baab Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 10 Apr 2024 20:37:25 +0200 Subject: [PATCH 047/280] Add warning when using API v1 --- counterparty-lib/counterpartylib/lib/api/api_v1.py | 14 ++++++-------- counterparty-lib/counterpartylib/lib/api/util.py | 2 ++ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/counterparty-lib/counterpartylib/lib/api/api_v1.py b/counterparty-lib/counterpartylib/lib/api/api_v1.py index b93d4155d0..02f11647d1 100644 --- a/counterparty-lib/counterpartylib/lib/api/api_v1.py +++ b/counterparty-lib/counterpartylib/lib/api/api_v1.py @@ -532,7 +532,7 @@ def stop(self): self.join() def run(self): - logger.info("Starting API Server.") + logger.info("Starting API Server v1.") self.db = self.db or database.get_connection(read_only=True) app = flask.Flask(__name__) auth = HTTPBasicAuth() @@ -1104,6 +1104,9 @@ def handle_rpc_post(request_json): ) _set_cors_headers(response) response.headers["X-API-WARN"] = "Deprecated API" + logger.warning( + "API v1 is deprecated and should be removed soon. Please migrate to REST API." + ) return response ###################### @@ -1198,17 +1201,12 @@ def handle_rest(path_args, flask_request): return response # Init the HTTP Server. - api_util.init_api_access_log(app) - - # Run app server (blocking) self.is_ready = True self.server = make_server(config.RPC_HOST, config.RPC_PORT, app) + api_util.init_api_access_log(app) self.ctx = app.app_context() self.ctx.push() + # Run app server (blocking) self.server.serve_forever() self.db.close() - return - - -# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 diff --git a/counterparty-lib/counterpartylib/lib/api/util.py b/counterparty-lib/counterpartylib/lib/api/util.py index ea8d5c6a6e..be0e1cfa56 100644 --- a/counterparty-lib/counterpartylib/lib/api/util.py +++ b/counterparty-lib/counterpartylib/lib/api/util.py @@ -91,6 +91,8 @@ def init_api_access_log(flask_app): flask_app.logger.removeHandler(flask.logging.default_handler) flask_app.logger.setLevel(logging.DEBUG) werkzeug_logger = logging.getLogger("werkzeug") + while werkzeug_logger.hasHandlers(): + werkzeug_logger.removeHandler(werkzeug_logger.handlers[0]) # Log to file, if configured... if config.API_LOG: From 2945b0754bae4b7ad2c4d1390093f408ba559c46 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 10 Apr 2024 21:03:41 +0200 Subject: [PATCH 048/280] fix duplicate sigterm catch --- counterparty-lib/counterpartylib/lib/api/api_server.py | 5 +++++ counterparty-lib/counterpartylib/lib/api/util.py | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/counterparty-lib/counterpartylib/lib/api/api_server.py b/counterparty-lib/counterpartylib/lib/api/api_server.py index b5a5d01cdd..f97b215fec 100644 --- a/counterparty-lib/counterpartylib/lib/api/api_server.py +++ b/counterparty-lib/counterpartylib/lib/api/api_server.py @@ -1,6 +1,7 @@ import argparse import logging import multiprocessing +import signal from multiprocessing import Process from threading import Timer @@ -93,6 +94,10 @@ def handle_route(**kwargs): def run_api_server(args): + # default signal handlers + signal.signal(signal.SIGTERM, signal.SIG_DFL) + signal.signal(signal.SIGINT, signal.default_int_handler) + app = Flask(config.APP_NAME) # Initialise log and config server.initialise_log_and_config(argparse.Namespace(**args)) diff --git a/counterparty-lib/counterpartylib/lib/api/util.py b/counterparty-lib/counterpartylib/lib/api/util.py index be0e1cfa56..3585234367 100644 --- a/counterparty-lib/counterpartylib/lib/api/util.py +++ b/counterparty-lib/counterpartylib/lib/api/util.py @@ -91,7 +91,7 @@ def init_api_access_log(flask_app): flask_app.logger.removeHandler(flask.logging.default_handler) flask_app.logger.setLevel(logging.DEBUG) werkzeug_logger = logging.getLogger("werkzeug") - while werkzeug_logger.hasHandlers(): + while len(werkzeug_logger.handlers) > 0: werkzeug_logger.removeHandler(werkzeug_logger.handlers[0]) # Log to file, if configured... @@ -99,6 +99,7 @@ def init_api_access_log(flask_app): handler = logging_handlers.RotatingFileHandler( config.API_LOG, "a", config.API_MAX_LOG_SIZE, config.API_MAX_LOG_COUNT ) + handler.propagate = False handler.setLevel(logging.DEBUG) flask_app.logger.addHandler(handler) werkzeug_logger.addHandler(handler) From 69c522d42837e29085e57d65c75002c4c893ec39 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 17 Apr 2024 12:56:26 +0200 Subject: [PATCH 049/280] fix merge --- counterparty-core/counterpartycore/lib/api/routes.py | 4 ++-- counterparty-core/counterpartycore/lib/api/util.py | 2 +- counterparty-core/counterpartycore/lib/transaction.py | 2 +- counterparty-core/requirements.txt | 1 + 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index c025935328..b66613af7e 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -1,10 +1,10 @@ -from counterpartylib.lib import ( +from counterpartycore.lib import ( backend, config, ledger, transaction, ) -from counterpartylib.lib.api import util +from counterpartycore.lib.api import util # Define the API routes except root (`/`) defined in `api_server.py` ROUTES = { diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index 3585234367..7d6e58b22a 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -2,7 +2,7 @@ from logging import handlers as logging_handlers import flask -from counterpartylib.lib import backend, config, exceptions, ledger, transaction +from counterpartycore.lib import backend, config, exceptions, ledger, transaction logger = logging.getLogger(config.LOGGER_NAME) diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index 22514d6928..df8ef8d255 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -1071,7 +1071,7 @@ def compose_transaction( if not script.is_fully_valid(binascii.unhexlify(pubkey)): raise script.AddressError(f"invalid public key: {pubkey}") - compose_method = sys.modules[f"counterpartylib.lib.messages.{name}"].compose + compose_method = sys.modules[f"counterpartycore.lib.messages.{name}"].compose compose_params = inspect.getfullargspec(compose_method)[0] missing_params = [p for p in compose_params if p not in params and p != "db"] for param in missing_params: diff --git a/counterparty-core/requirements.txt b/counterparty-core/requirements.txt index 8bc89d009a..01267b95de 100644 --- a/counterparty-core/requirements.txt +++ b/counterparty-core/requirements.txt @@ -26,4 +26,5 @@ arc4==0.4.0 halo==0.0.31 termcolor==2.4.0 sentry-sdk==1.45.0 +Flask-Cors==4.0.0 counterparty-rs==10.1.0 From d3d62ac6a37a41d9aca4e64cce37ab23ca37398d Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 17 Apr 2024 15:40:14 +0200 Subject: [PATCH 050/280] fix merge --- counterparty-core/counterpartycore/cli.py | 93 ++++------ .../counterpartycore/lib/api/api_server.py | 1 + .../counterpartycore/lib/api/api_v1.py | 10 -- counterparty-core/counterpartycore/lib/log.py | 3 +- .../counterpartycore/lib/transaction.py | 18 +- counterparty-core/counterpartycore/server.py | 169 ++++++++++++++++-- .../test/complex_unit_test.py | 5 +- .../counterpartycore/test/conftest.py | 7 +- .../counterpartycore/test/fixtures/vectors.py | 2 +- 9 files changed, 216 insertions(+), 92 deletions(-) diff --git a/counterparty-core/counterpartycore/cli.py b/counterparty-core/counterpartycore/cli.py index a3fd2e3816..a5ebd04b49 100755 --- a/counterparty-core/counterpartycore/cli.py +++ b/counterparty-core/counterpartycore/cli.py @@ -7,7 +7,7 @@ from termcolor import cprint from counterpartycore import server -from counterpartycore.lib import config, log, setup +from counterpartycore.lib import config, setup logger = logging.getLogger(config.LOGGER_NAME) @@ -170,6 +170,35 @@ "help": f"number of RPC queries by batch (default: {config.DEFAULT_RPC_BATCH_SIZE})", }, ], + [ + ("--api-host",), + { + "default": "localhost", + "help": "the IP of the interface to bind to for providing API access (0.0.0.0 for all interfaces)", + }, + ], + [ + ("--api-port",), + {"type": int, "help": f"port on which to provide the {config.APP_NAME} API"}, + ], + [ + ("--api-user",), + { + "default": "api", + "help": f"required username to use the {config.APP_NAME} API (via HTTP basic auth)", + }, + ], + [ + ("--api-password",), + { + "default": "api", + "help": f"required password (for rpc-user) to use the {config.APP_NAME} API (via HTTP basic auth)", + }, + ], + [ + ("--api-no-allow-cors",), + {"action": "store_true", "default": False, "help": "allow ajax cross domain request"}, + ], [ ("--requests-timeout",), { @@ -204,6 +233,10 @@ "help": "log API requests to the specified file", }, ], + [ + ("--enable-api-v1",), + {"action": "store_true", "default": False, "help": "Enable the API v1"}, + ], [ ("--no-log-files",), {"action": "store_true", "default": False, "help": "Don't write log files"}, @@ -368,60 +401,8 @@ def main(): parser.print_help() exit(0) - # Configuration - init_args = dict( - database_file=args.database_file, - testnet=args.testnet, - testcoin=args.testcoin, - regtest=args.regtest, - customnet=args.customnet, - api_limit_rows=args.api_limit_rows, - backend_connect=args.backend_connect, - backend_port=args.backend_port, - backend_user=args.backend_user, - backend_password=args.backend_password, - backend_ssl=args.backend_ssl, - backend_ssl_no_verify=args.backend_ssl_no_verify, - backend_poll_interval=args.backend_poll_interval, - indexd_connect=args.indexd_connect, - indexd_port=args.indexd_port, - rpc_host=args.rpc_host, - rpc_port=args.rpc_port, - rpc_user=args.rpc_user, - rpc_password=args.rpc_password, - rpc_no_allow_cors=args.rpc_no_allow_cors, - requests_timeout=args.requests_timeout, - rpc_batch_size=args.rpc_batch_size, - check_asset_conservation=args.check_asset_conservation, - force=args.force, - p2sh_dust_return_pubkey=args.p2sh_dust_return_pubkey, - utxo_locks_max_addresses=args.utxo_locks_max_addresses, - utxo_locks_max_age=args.utxo_locks_max_age, - no_mempool=args.no_mempool, - skip_db_check=args.skip_db_check, - ) - - server.initialise_log_config( - verbose=args.verbose, - quiet=args.quiet, - log_file=args.log_file, - api_log_file=args.api_log_file, - no_log_files=args.no_log_files, - testnet=args.testnet, - testcoin=args.testcoin, - regtest=args.regtest, - json_log=args.json_log, - ) - - # set up logging - log.set_up( - verbose=config.VERBOSE, - quiet=config.QUIET, - log_file=config.LOG, - log_in_console=args.action == "start", - ) - - server.initialise_config(**init_args) + # Configuration and logging + server.initialise_log_and_config(args) logger.info(f"Running v{APP_VERSION} of {APP_NAME}.") @@ -447,7 +428,7 @@ def main(): ) elif args.action == "start": - server.start_all(catch_up=args.catch_up) + server.start_all(args) elif args.action == "show-params": server.show_params() diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 3cccf3cdc5..063f6b94fd 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -146,6 +146,7 @@ def start(self, args): return self.process def stop(self): + logger.info("Stopping API server v2...") if self.process and self.process.is_alive(): self.process.terminate() self.process = None diff --git a/counterparty-core/counterpartycore/lib/api/api_v1.py b/counterparty-core/counterpartycore/lib/api/api_v1.py index 18f65d558d..ddccf65fd5 100644 --- a/counterparty-core/counterpartycore/lib/api/api_v1.py +++ b/counterparty-core/counterpartycore/lib/api/api_v1.py @@ -8,7 +8,6 @@ import binascii import collections import decimal -import inspect import json import logging import math @@ -483,15 +482,6 @@ def adjust_get_transactions_results(query_result): return filtered_results -def get_default_args(func): - signature = inspect.signature(func) - return { - k: v.default - for k, v in signature.parameters.items() - if v.default is not inspect.Parameter.empty - } - - def conditional_decorator(decorator, condition): """Checks the condition and if True applies specified decorator.""" diff --git a/counterparty-core/counterpartycore/lib/log.py b/counterparty-core/counterpartycore/lib/log.py index 1df6153e37..4ff3cea510 100644 --- a/counterparty-core/counterpartycore/lib/log.py +++ b/counterparty-core/counterpartycore/lib/log.py @@ -3,6 +3,7 @@ import sys import traceback from datetime import datetime +from logging.handlers import RotatingFileHandler from colorlog import ColoredFormatter from dateutil.tz import tzlocal @@ -34,7 +35,7 @@ def set_up(verbose=False, quiet=True, log_file=None, log_in_console=False): # File Logging if log_file: max_log_size = 20 * 1024 * 1024 # 20 MB - fileh = logging.handlers.RotatingFileHandler(log_file, maxBytes=max_log_size, backupCount=5) + fileh = RotatingFileHandler(log_file, maxBytes=max_log_size, backupCount=5) fileh.setLevel(log_level) log_format = "%(asctime)s [%(levelname)s] %(message)s" formatter = logging.Formatter(log_format, "%Y-%m-%d-T%H:%M:%S%z") diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index df8ef8d255..93cfc04200 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -1013,6 +1013,15 @@ def split_compose_arams(**kwargs): ] +def get_default_args(func): + signature = inspect.signature(func) + return { + k: v.default + for k, v in signature.parameters.items() + if v.default is not inspect.Parameter.empty + } + + def compose_transaction( db, name, @@ -1074,8 +1083,13 @@ def compose_transaction( compose_method = sys.modules[f"counterpartycore.lib.messages.{name}"].compose compose_params = inspect.getfullargspec(compose_method)[0] missing_params = [p for p in compose_params if p not in params and p != "db"] - for param in missing_params: - params[param] = None + if len(missing_params) > 0: + default_values = get_default_args(compose_method) + for param in missing_params: + if param in default_values: + params[param] = default_values[param] + else: + raise exceptions.ComposeError(f"missing parameters: {', '.join(missing_params)}") # dont override fee_per_kb if specified if fee_per_kb is not None: diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index 6fb375d715..ce0cd9e020 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -19,17 +19,19 @@ from termcolor import colored, cprint from counterpartycore.lib import ( - api, backend, blocks, check, config, database, ledger, + log, transaction, util, ) from counterpartycore.lib import kickstart as kickstarter +from counterpartycore.lib.api import api_server as api_v2 +from counterpartycore.lib.api import api_v1 logger = logging.getLogger(config.LOGGER_NAME) D = decimal.Decimal @@ -152,6 +154,12 @@ def initialise_config( rpc_user=None, rpc_password=None, rpc_no_allow_cors=False, + api_host=None, + api_port=None, + api_user=None, + api_password=None, + api_no_allow_cors=False, + api_not_ready_http_code=503, force=False, requests_timeout=config.DEFAULT_REQUESTS_TIMEOUT, rpc_batch_size=config.DEFAULT_RPC_BATCH_SIZE, @@ -364,7 +372,7 @@ def initialise_config( config.RPC_HOST = "localhost" # The web root directory for API calls, eg. localhost:14000/rpc/ - config.RPC_WEBROOT = "/rpc/" + config.RPC_WEBROOT = "/old/rpc/" # Server API RPC port if rpc_port: @@ -417,6 +425,58 @@ def initialise_config( config.RPC_BATCH_SIZE = rpc_batch_size + # Server API RPC host + if api_host: + config.API_HOST = api_host + else: + config.API_HOST = "localhost" + + # Server API port + if api_port: + config.API_PORT = api_port + else: + if config.TESTNET: + if config.TESTCOIN: + config.API_PORT = config.DEFAULT_API_PORT_TESTNET + 1 + else: + config.API_PORT = config.DEFAULT_API_PORT_TESTNET + elif config.REGTEST: + if config.TESTCOIN: + config.API_PORT = config.DEFAULT_API_PORT_REGTEST + 1 + else: + config.API_PORT = config.DEFAULT_API_PORT_REGTEST + else: + if config.TESTCOIN: + config.API_PORT = config.DEFAULT_API_PORT + 1 + else: + config.API_PORT = config.DEFAULT_API_PORT + try: + config.API_PORT = int(config.API_PORT) + if not (int(config.API_PORT) > 1 and int(config.API_PORT) < 65535): + raise ConfigurationError("invalid server API port number") + except: # noqa: E722 + raise ConfigurationError( # noqa: B904 + "Please specific a valid port number rpc-port configuration parameter" + ) + + # Server API user + if api_user: + config.API_USER = api_user + else: + config.API_USER = "api" + + if api_password: + config.API_PASSWORD = api_password + else: + config.API_PASSWORD = "api" # noqa: S105 + + config.API_NOT_READY_HTTP_CODE = api_not_ready_http_code + + if api_no_allow_cors: + config.API_NO_ALLOW_CORS = api_no_allow_cors + else: + config.API_NO_ALLOW_CORS = False + ############## # OTHER SETTINGS @@ -517,6 +577,67 @@ def initialise_config( logger.info(f"Running v{config.VERSION_STRING} of counterparty-core.") +def initialise_log_and_config(args): + # Configuration + init_args = { + "database_file": args.database_file, + "testnet": args.testnet, + "testcoin": args.testcoin, + "regtest": args.regtest, + "customnet": args.customnet, + "api_limit_rows": args.api_limit_rows, + "backend_connect": args.backend_connect, + "backend_port": args.backend_port, + "backend_user": args.backend_user, + "backend_password": args.backend_password, + "backend_ssl": args.backend_ssl, + "backend_ssl_no_verify": args.backend_ssl_no_verify, + "backend_poll_interval": args.backend_poll_interval, + "indexd_connect": args.indexd_connect, + "indexd_port": args.indexd_port, + "rpc_host": args.rpc_host, + "rpc_port": args.rpc_port, + "rpc_user": args.rpc_user, + "rpc_password": args.rpc_password, + "rpc_no_allow_cors": args.rpc_no_allow_cors, + "api_host": args.api_host, + "api_port": args.api_port, + "api_user": args.api_user, + "api_password": args.api_password, + "api_no_allow_cors": args.api_no_allow_cors, + "requests_timeout": args.requests_timeout, + "rpc_batch_size": args.rpc_batch_size, + "check_asset_conservation": args.check_asset_conservation, + "force": args.force, + "p2sh_dust_return_pubkey": args.p2sh_dust_return_pubkey, + "utxo_locks_max_addresses": args.utxo_locks_max_addresses, + "utxo_locks_max_age": args.utxo_locks_max_age, + "no_mempool": args.no_mempool, + "skip_db_check": args.skip_db_check, + } + + initialise_log_config( + verbose=args.verbose, + quiet=args.quiet, + log_file=args.log_file, + api_log_file=args.api_log_file, + no_log_files=args.no_log_files, + testnet=args.testnet, + testcoin=args.testcoin, + regtest=args.regtest, + json_log=args.json_log, + ) + + # set up logging + log.set_up( + verbose=config.VERBOSE, + quiet=config.QUIET, + log_file=config.LOG, + log_in_console=args.action == "start", + ) + initialise_config(**init_args) + + def initialise_db(): if config.FORCE: cprint("THE OPTION `--force` IS NOT FOR USE ON PRODUCTION SYSTEMS.", "yellow") @@ -566,12 +687,16 @@ def connect_to_addrindexrs(): print(f"{OK_GREEN} {step}") -def start_all(catch_up="normal"): - try: - # Backend. - connect_to_backend() +def start_all(args): + api_status_poller = None + api_server_v1 = None + api_server_v2 = None + + # Backend. + connect_to_backend() - if not os.path.exists(config.DATABASE) and catch_up == "bootstrap": + try: + if not os.path.exists(config.DATABASE) and args.catch_up == "bootstrap": bootstrap(no_confirm=True) db = initialise_db() @@ -580,23 +705,33 @@ def start_all(catch_up="normal"): # initilise_config transaction.initialise() - # API Status Poller. - api_status_poller = api.APIStatusPoller() - api_status_poller.daemon = True - api_status_poller.start() + if args.enable_api_v1: + # API Status Poller. + api_status_poller = api_v1.APIStatusPoller() + api_status_poller.daemon = True + api_status_poller.start() + + # API Server v1. + api_server_v1 = api_v1.APIServer() + api_server_v1.daemon = True + api_server_v1.start() - # API Server. - api_server = api.APIServer() - api_server.daemon = True - api_server.start() + # API Server v2. + api_server_v2 = api_v2.APIServer() + api_server_v2.start(args) # Server blocks.follow(db) except KeyboardInterrupt: pass finally: - api_status_poller.stop() - api_server.stop() + if args.enable_api_v1: + if api_status_poller: + api_status_poller.stop() + if api_server_v1: + api_server_v1.stop() + if api_server_v2: + api_server_v2.stop() backend.stop() database.optimize(db) logger.info("Closing database...") diff --git a/counterparty-core/counterpartycore/test/complex_unit_test.py b/counterparty-core/counterpartycore/test/complex_unit_test.py index f2b23073e2..7373d7ce3f 100644 --- a/counterparty-core/counterpartycore/test/complex_unit_test.py +++ b/counterparty-core/counterpartycore/test/complex_unit_test.py @@ -4,7 +4,8 @@ import pytest from apsw import ConstraintError -from counterpartycore.lib import api, blocks, ledger, util +from counterpartycore.lib import blocks, ledger, util +from counterpartycore.lib.api import api_v1 # this is require near the top to do setup of the test suite from counterpartycore.test import ( @@ -216,7 +217,7 @@ def test_update_lock(server_db): @pytest.mark.usefixtures("api_server") def test_updated_tables_endpoints(): - for table in api.API_TABLES: + for table in api_v1.API_TABLES: if table in ["mempool"]: continue result = util.api("get_" + table, {}) diff --git a/counterparty-core/counterpartycore/test/conftest.py b/counterparty-core/counterpartycore/test/conftest.py index ec542525c7..613db5ca3f 100644 --- a/counterparty-core/counterpartycore/test/conftest.py +++ b/counterparty-core/counterpartycore/test/conftest.py @@ -263,7 +263,7 @@ def api_server_v2(request, cp_server): "force": False, "requests_timeout": config.DEFAULT_REQUESTS_TIMEOUT, "rpc_batch_size": config.DEFAULT_RPC_BATCH_SIZE, - "check_asset_conservation": config.DEFAULT_CHECK_ASSET_CONSERVATION, + "check_asset_conservation": False, "backend_ssl_verify": None, "rpc_allow_cors": None, "p2sh_dust_return_pubkey": None, @@ -280,6 +280,8 @@ def api_server_v2(request, cp_server): "no_check_asset_conservation": True, "action": "", "no_refresh_backend_height": True, + "no_mempool": False, + "skip_db_check": False, } server_config = ( default_config @@ -289,7 +291,6 @@ def api_server_v2(request, cp_server): "api_port": TEST_RPC_PORT + 10, } ) - args = argparse.Namespace(**server_config) api_server = api_v2.APIServer() api_server.start(args) @@ -521,7 +522,7 @@ def init_arc4(seed): monkeypatch.setattr("counterpartycore.lib.log.isodt", isodt) monkeypatch.setattr("counterpartycore.lib.ledger.curr_time", curr_time) monkeypatch.setattr("counterpartycore.lib.util.date_passed", date_passed) - monkeypatch.setattr("counterpartycore.lib.api.init_api_access_log", init_api_access_log) + monkeypatch.setattr("counterpartycore.lib.api.util.init_api_access_log", init_api_access_log) if hasattr(config, "PREFIX"): monkeypatch.setattr("counterpartycore.lib.config.PREFIX", b"TESTXXXX") monkeypatch.setattr("counterpartycore.lib.backend.getrawtransaction", mocked_getrawtransaction) diff --git a/counterparty-core/counterpartycore/test/fixtures/vectors.py b/counterparty-core/counterpartycore/test/fixtures/vectors.py index 28b90eb97b..43717b875b 100644 --- a/counterparty-core/counterpartycore/test/fixtures/vectors.py +++ b/counterparty-core/counterpartycore/test/fixtures/vectors.py @@ -14,7 +14,7 @@ import bitcoin as bitcoinlib from counterpartycore.lib import address, config, exceptions, script # noqa: F401 -from counterpartycore.lib.api import APIError +from counterpartycore.lib.api.api_v1 import APIError from counterpartycore.lib.kickstart.blocks_parser import BlockchainParser from counterpartycore.lib.ledger import CreditError, DebitError from counterpartycore.lib.messages import issuance From 9cc97c1ef7a890928c33e5fb2ac095465f5a7fdf Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 17 Apr 2024 16:31:47 +0200 Subject: [PATCH 051/280] Fix /healthz endpoint after merging --- .../counterpartycore/lib/api/api_server.py | 5 +- .../counterpartycore/lib/api/api_v1.py | 41 +--------------- .../counterpartycore/lib/api/util.py | 48 +++++++++++-------- 3 files changed, 35 insertions(+), 59 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 063f6b94fd..a2cd5c3cc3 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -65,7 +65,10 @@ def api_root(): def inject_headers(result): server_ready = ledger.CURRENT_BLOCK_INDEX >= BACKEND_HEIGHT http_code = 200 if server_ready else config.API_NOT_READY_HTTP_CODE - response = flask.make_response(flask.jsonify(result), http_code) + if isinstance(result, flask.Response): + response = result + else: + response = flask.make_response(flask.jsonify(result), http_code) response.headers["X-COUNTERPARTY-HEIGHT"] = ledger.CURRENT_BLOCK_INDEX response.headers["X-COUNTERPARTY-READY"] = ledger.CURRENT_BLOCK_INDEX >= BACKEND_HEIGHT response.headers["X-BACKEND-HEIGHT"] = BACKEND_HEIGHT diff --git a/counterparty-core/counterpartycore/lib/api/api_v1.py b/counterparty-core/counterpartycore/lib/api/api_v1.py index ddccf65fd5..fcf03d6bde 100644 --- a/counterparty-core/counterpartycore/lib/api/api_v1.py +++ b/counterparty-core/counterpartycore/lib/api/api_v1.py @@ -1063,45 +1063,8 @@ def _set_cors_headers(response): @app.route("/healthz", methods=["GET"]) def handle_healthz(): - msg, code = "Healthy", 200 - - type_ = request.args.get("type", "light") - - def light_check(): - latest_block_index = backend.getblockcount() - api_util.check_last_parsed_block(self.db, latest_block_index) - - def heavy_check(): - transaction.compose_transaction( - self.db, - name="send", - params={ - "source": config.UNSPENDABLE, - "destination": config.UNSPENDABLE, - "asset": config.XCP, - "quantity": 100000000, - }, - allow_unconfirmed_inputs=True, - fee=1000, - ) - - try: - if type_ == "heavy": - # Perform a heavy healthz check. - # Do everything in light but also compose a - # send tx - - logger.debug("Performing heavy healthz check.") - - light_check() - heavy_check() - else: - logger.debug("Performing light healthz check.") - light_check() - - except Exception: - msg, code = "Unhealthy", 503 - return flask.Response(msg, code, mimetype="application/json") + check_type = request.args.get("type", "light") + return api_util.handle_healthz_route(self.db, check_type) @app.route("/", defaults={"args_path": ""}, methods=["GET", "POST", "OPTIONS"]) @app.route("/", methods=["GET", "POST", "OPTIONS"]) diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index 7d6e58b22a..71e5059105 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -14,34 +14,44 @@ def check_last_parsed_block(blockcount): logger.debug("Database state check passed.") +def healthz_light(db): + logger.debug("Performing light healthz check.") + latest_block_index = backend.getblockcount() + check_last_parsed_block(latest_block_index) + + +def healthz_heavy(db): + logger.debug("Performing heavy healthz check.") + transaction.compose_transaction( + db, + name="send", + params={ + "source": config.UNSPENDABLE, + "destination": config.UNSPENDABLE, + "asset": config.XCP, + "quantity": 100000000, + }, + allow_unconfirmed_inputs=True, + fee=1000, + ) + + def healthz(db, check_type="heavy"): try: if check_type == "light": - logger.debug("Performing light healthz check.") - latest_block_index = backend.getblockcount() - check_last_parsed_block(latest_block_index) + healthz_light(db) else: - logger.debug("Performing heavy healthz check.") - transaction.compose_transaction( - db, - name="send", - params={ - "source": config.UNSPENDABLE, - "destination": config.UNSPENDABLE, - "asset": config.XCP, - "quantity": 100000000, - }, - allow_unconfirmed_inputs=True, - fee=1000, - ) - except Exception: + healthz_light(db) + healthz_heavy(db) + except Exception as e: + logger.error(f"Health check failed: {e}") return False return True -def handle_healthz_route(db, check="heavy"): +def handle_healthz_route(db, check_type="heavy"): msg, code = "Healthy", 200 - if not healthz(db, check): + if not healthz(db, check_type): msg, code = "Unhealthy", 503 return flask.Response(msg, code, mimetype="application/json") From 68e7f1e9db8423459ab86a81e36988fa77bc2bef Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 17 Apr 2024 20:58:00 +0200 Subject: [PATCH 052/280] new route for compose: /address//compose/ --- .../counterpartycore/lib/api/routes.py | 10 +-- .../counterpartycore/lib/transaction.py | 71 ++++++++++++++----- .../counterpartywallet/messages.py | 3 - 3 files changed, 58 insertions(+), 26 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index b66613af7e..817fe56676 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -56,10 +56,6 @@ "function": ledger.get_sweeps, }, ### /transactions ### - "/transactions/compose/": { - "function": transaction.compose, - "pass_all_args": True, - }, "/transactions/info": { "function": transaction.info, "args": [("rawtransaction", None), ("block_index", None)], @@ -254,3 +250,9 @@ "function": ledger.get_mempool_events, }, } +### /address//compose/ ### +for transaction_name, compose_function in transaction.COMPOSE_FUNCTIONS.items(): + ROUTES[f"/address//compose/{transaction_name}"] = { + "function": compose_function, + "pass_all_args": True, + } diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index 93cfc04200..0165fdbee7 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -6,6 +6,7 @@ import binascii import decimal +import functools import hashlib import inspect import io @@ -995,24 +996,6 @@ def split_compose_arams(**kwargs): return transaction_args, common_args, private_key_wif -COMPOSABLE_TRANSACTIONS = [ - "bet", - "broadcast", - "btcpay", - "burn", - "cancel", - "destroy", - "dispenser", - "dividend", - "issuance", - "order", - "send", - "rps", - "rpsresolve", - "sweep", -] - - def get_default_args(func): signature = inspect.signature(func) return { @@ -1022,6 +1005,30 @@ def get_default_args(func): } +COMPOSE_COMMONS_ARGS = [ + "encoding", + "fee_per_kb", + "estimate_fee_per_kb", + "regular_dust_size", + "multisig_dust_size", + "op_return_value", + "pubkey", + "allow_unconfirmed_inputs", + "fee", + "fee_provided", + "unspent_tx_hash", + "custom_inputs", + "dust_return_pubkey", + "disable_utxo_locks", + "extended_tx_info", + "p2sh_source_multisig_pubkeys", + "p2sh_source_multisig_pubkeys_required", + "p2sh_pretx_txid", + "old_style_api", + "segwit", +] + + def compose_transaction( db, name, @@ -1137,13 +1144,39 @@ def compose_transaction( ) -def compose(db, transaction_name, **kwargs): +COMPOSABLE_TRANSACTIONS = [ + "bet", + "broadcast", + "btcpay", + "burn", + "cancel", + "destroy", + "dispenser", + "dividend", + "issuance", + "order", + "send", + "rps", + "rpsresolve", + "sweep", +] + + +def compose(db, source, transaction_name, **kwargs): if transaction_name not in COMPOSABLE_TRANSACTIONS: raise exceptions.TransactionError("Transaction type not composable.") transaction_args, common_args, _ = split_compose_arams(**kwargs) + transaction_args["source"] = source return compose_transaction(db, name=transaction_name, params=transaction_args, **common_args) +COMPOSE_FUNCTIONS = {} +for transaction_name in COMPOSABLE_TRANSACTIONS: + COMPOSE_FUNCTIONS[transaction_name] = functools.partial( + compose, transaction_name=transaction_name + ) + + def info(db, rawtransaction, block_index=None): # block_index mandatory for transactions before block 335000 source, destination, btc_amount, fee, data, extra = gettxinfo.get_tx_info( diff --git a/counterparty-wallet/counterpartywallet/messages.py b/counterparty-wallet/counterpartywallet/messages.py index f044a41771..84c2cd0291 100755 --- a/counterparty-wallet/counterpartywallet/messages.py +++ b/counterparty-wallet/counterpartywallet/messages.py @@ -350,6 +350,3 @@ def compose(message, args): return compose_transaction(args, message, param_names) else: raise ArgumentError("Invalid message name") - - -# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 From 07f933cff617f2c21a5c3124de8c4476fa4b294f Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 17 Apr 2024 21:27:14 +0200 Subject: [PATCH 053/280] Add type to routes args --- .../counterpartycore/lib/api/api_server.py | 36 +++++++++++---- .../counterpartycore/lib/api/routes.py | 46 +++++++++---------- 2 files changed, 51 insertions(+), 31 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index a2cd5c3cc3..f26969e54f 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -62,9 +62,13 @@ def api_root(): } -def inject_headers(result): +def inject_headers(result, return_code=None): server_ready = ledger.CURRENT_BLOCK_INDEX >= BACKEND_HEIGHT - http_code = 200 if server_ready else config.API_NOT_READY_HTTP_CODE + http_code = 200 + if return_code: + http_code = return_code + elif not server_ready: + http_code = config.API_NOT_READY_HTTP_CODE if isinstance(result, flask.Response): response = result else: @@ -75,6 +79,24 @@ def inject_headers(result): return response +def prepare_args(route, **kwargs): + function_args = dict(kwargs) + if "pass_all_args" in route and route["pass_all_args"]: + function_args = request.args | function_args + elif "args" in route: + for arg in route["args"]: + str_arg = request.args.get(arg[0]) + if str_arg is None: + function_args[arg[0]] = arg[2] + elif arg[1] == bool: + function_args[arg[0]] = str_arg.lower() in ["true", "1"] + elif arg[1] == int: + function_args[arg[0]] = int(str_arg) + else: + function_args[arg[0]] = str_arg + return function_args + + @auth.login_required def handle_route(**kwargs): db = get_db() @@ -85,12 +107,10 @@ def handle_route(**kwargs): result = api_root() else: route = ROUTES.get(rule) - function_args = dict(kwargs) - if "pass_all_args" in route and route["pass_all_args"]: - function_args = request.args | function_args - elif "args" in route: - for arg in route["args"]: - function_args[arg[0]] = request.args.get(arg[0], arg[1]) + try: + function_args = prepare_args(route, **kwargs) + except ValueError as e: + return inject_headers({"error": f"Invalid parameter: {e}"}, return_code=400) result = route["function"](db, **function_args) result = remove_rowids(result) return inject_headers(result) diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index 817fe56676..b52b2376c7 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -11,7 +11,7 @@ ### /blocks ### "/blocks": { "function": ledger.get_blocks, - "args": [("last", None), ("limit", 10)], + "args": [("last", int, None), ("limit", int, 10)], }, "/blocks/": { "function": ledger.get_block, @@ -58,11 +58,11 @@ ### /transactions ### "/transactions/info": { "function": transaction.info, - "args": [("rawtransaction", None), ("block_index", None)], + "args": [("rawtransaction", str, None), ("block_index", int, None)], }, "/transactions/unpack": { "function": transaction.unpack, - "args": [("datahex", None), ("block_index", None)], + "args": [("datahex", str, None), ("block_index", int, None)], }, "/transactions/": { "function": ledger.get_transaction, @@ -82,7 +82,7 @@ }, "/addresses/
/bets": { "function": ledger.get_bet_by_feed, - "args": [("status", "open")], + "args": [("status", str, "open")], }, "/addresses/
/broadcasts": { "function": ledger.get_broadcasts_by_source, @@ -104,11 +104,11 @@ }, "/addresses/
/dispensers": { "function": ledger.get_dispensers, - "args": [("status", 0)], + "args": [("status", int, 0)], }, "/addresses/
/dispensers/": { "function": ledger.get_dispensers, - "args": [("status", 0)], + "args": [("status", int, 0)], }, "/addresses/
/sweeps": { "function": ledger.get_sweeps, @@ -128,7 +128,7 @@ }, "/assets//orders": { "function": ledger.get_orders_by_asset, - "args": [("status", "open")], + "args": [("status", str, "open")], }, "/assets//credits": { "function": ledger.get_credits, @@ -147,11 +147,11 @@ }, "/assets//dispensers": { "function": ledger.get_dispensers, - "args": [("status", 0)], + "args": [("status", int, 0)], }, "/assets//dispensers/
": { "function": ledger.get_dispensers, - "args": [("status", 0)], + "args": [("status", int, 0)], }, "/assets//holders": { "function": ledger.get_asset_holders, @@ -162,11 +162,11 @@ }, "/orders//matches": { "function": ledger.get_order_matches_by_order, - "args": [("status", "pending")], + "args": [("status", str, "pending")], }, "/orders//btcpays": { "function": ledger.get_btcpays_by_order, - "args": [("status", "pending")], + "args": [("status", str, "pending")], }, ### /bets ### "/bets/": { @@ -174,11 +174,11 @@ }, "/bets//matches": { "function": ledger.get_bet_matches_by_bet, - "args": [("status", "pending")], + "args": [("status", str, "pending")], }, "/bets//resolutions": { "function": ledger.get_resolutions_by_bet, - "args": [("status", "pending")], + "args": [("status", str, "pending")], }, ### /burns ### "/burns": { @@ -194,7 +194,7 @@ ### /events ### "/events": { "function": ledger.get_events, - "args": [("last", None), ("limit", 100)], + "args": [("last", int, None), ("limit", int, 100)], }, "/events/": { "function": ledger.get_events, @@ -204,42 +204,42 @@ }, "/events/": { "function": ledger.get_events, - "args": [("last", None), ("limit", 100)], + "args": [("last", int, None), ("limit", int, 100)], }, ### /healthz ### "/healthz": { "function": util.handle_healthz_route, - "args": [("check_type", "heavy")], + "args": [("check_type", str, "heavy")], }, ### /backend ### "/backend/addresses/
/transactions": { "function": backend.search_raw_transactions, - "args": [("unconfirmed", True), ("only_tx_hashes", False)], + "args": [("unconfirmed", bool, True), ("only_tx_hashes", bool, False)], }, "/backend/addresses/
/transactions/oldest": { "function": backend.get_oldest_tx, }, "/backend/addresses/
/utxos": { "function": backend.get_unspent_txouts, - "args": [("unconfirmed", True), ("unspent_tx_hash", None)], + "args": [("unconfirmed", bool, True), ("unspent_tx_hash", str, None)], }, "/backend/addresses/
/pubkey": { "function": util.pubkeyhash_to_pubkey, - "args": [("provided_pubkeys", "")], + "args": [("provided_pubkeys", str, "")], }, "/backend/transactions": { "function": util.getrawtransactions, - "args": [("tx_hashes", ""), ("verbose", False), ("skip_missing", False)], + "args": [("tx_hashes", str, ""), ("verbose", bool, False), ("skip_missing", bool, False)], }, "/backend/transactions/": { "function": backend.getrawtransaction, - "args": [("verbose", False), ("skip_missing", False)], + "args": [("verbose", bool, False), ("skip_missing", bool, False)], }, "/backend/estimatesmartfee": { "function": backend.fee_per_kb, "args": [ - ("conf_target", config.ESTIMATE_FEE_CONF_TARGET), - ("mode", config.ESTIMATE_FEE_MODE), + ("conf_target", int, config.ESTIMATE_FEE_CONF_TARGET), + ("mode", str, config.ESTIMATE_FEE_MODE), ], }, ### /mempool ### From 3cc540631f01201c2f039bd178bca0e4f5b71e19 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 17 Apr 2024 22:12:36 +0200 Subject: [PATCH 054/280] Add type hints to all compose functions --- .../counterpartycore/lib/messages/bet.py | 18 ++--- .../lib/messages/broadcast.py | 2 +- .../counterpartycore/lib/messages/btcpay.py | 2 +- .../counterpartycore/lib/messages/burn.py | 2 +- .../counterpartycore/lib/messages/cancel.py | 2 +- .../counterpartycore/lib/messages/destroy.py | 2 +- .../lib/messages/dispenser.py | 16 ++--- .../counterpartycore/lib/messages/dividend.py | 2 +- .../counterpartycore/lib/messages/issuance.py | 16 ++--- .../counterpartycore/lib/messages/order.py | 9 ++- .../counterpartycore/lib/messages/rps.py | 4 +- .../lib/messages/rpsresolve.py | 2 +- .../counterpartycore/lib/messages/send.py | 9 ++- .../counterpartycore/lib/messages/sweep.py | 2 +- .../lib/messages/versions/enhanced_send.py | 4 +- .../lib/messages/versions/mpma.py | 2 +- .../lib/messages/versions/send1.py | 2 +- .../counterpartycore/lib/transaction.py | 70 ++++++------------- 18 files changed, 80 insertions(+), 86 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/messages/bet.py b/counterparty-core/counterpartycore/lib/messages/bet.py index 3ad54029ba..2af526b8b4 100644 --- a/counterparty-core/counterpartycore/lib/messages/bet.py +++ b/counterparty-core/counterpartycore/lib/messages/bet.py @@ -358,15 +358,15 @@ def validate( def compose( db, - source, - feed_address, - bet_type, - deadline, - wager_quantity, - counterwager_quantity, - target_value, - leverage, - expiration, + source: str, + feed_address: str, + bet_type: int, + deadline: int, + wager_quantity: int, + counterwager_quantity: int, + target_value: int, + leverage: int, + expiration: int, ): if ledger.get_balance(db, source, config.XCP) < wager_quantity: raise exceptions.ComposeError("insufficient funds") diff --git a/counterparty-core/counterpartycore/lib/messages/broadcast.py b/counterparty-core/counterpartycore/lib/messages/broadcast.py index bc8cf9ca59..482cc0a6c2 100644 --- a/counterparty-core/counterpartycore/lib/messages/broadcast.py +++ b/counterparty-core/counterpartycore/lib/messages/broadcast.py @@ -135,7 +135,7 @@ def validate(db, source, timestamp, value, fee_fraction_int, text, block_index): return problems -def compose(db, source, timestamp, value, fee_fraction, text): +def compose(db, source: str, timestamp: int, value: int, fee_fraction: float, text: str): # Store the fee fraction as an integer. fee_fraction_int = int(fee_fraction * 1e8) diff --git a/counterparty-core/counterpartycore/lib/messages/btcpay.py b/counterparty-core/counterpartycore/lib/messages/btcpay.py index feb79ec832..49308b5e14 100644 --- a/counterparty-core/counterpartycore/lib/messages/btcpay.py +++ b/counterparty-core/counterpartycore/lib/messages/btcpay.py @@ -106,7 +106,7 @@ def validate(db, source, order_match_id, block_index): return destination, btc_quantity, escrowed_asset, escrowed_quantity, order_match, problems -def compose(db, source, order_match_id): +def compose(db, source: str, order_match_id: str): tx0_hash, tx1_hash = util.parse_id(order_match_id) destination, btc_quantity, escrowed_asset, escrowed_quantity, order_match, problems = validate( diff --git a/counterparty-core/counterpartycore/lib/messages/burn.py b/counterparty-core/counterpartycore/lib/messages/burn.py index d571480ccd..f7cc8f2a8d 100644 --- a/counterparty-core/counterpartycore/lib/messages/burn.py +++ b/counterparty-core/counterpartycore/lib/messages/burn.py @@ -72,7 +72,7 @@ def validate(db, source, destination, quantity, block_index, overburn=False): return problems -def compose(db, source, quantity, overburn=False): +def compose(db, source: str, quantity: int, overburn: bool = False): cursor = db.cursor() destination = config.UNSPENDABLE problems = validate( diff --git a/counterparty-core/counterpartycore/lib/messages/cancel.py b/counterparty-core/counterpartycore/lib/messages/cancel.py index 869d572c49..bc51437e9f 100644 --- a/counterparty-core/counterpartycore/lib/messages/cancel.py +++ b/counterparty-core/counterpartycore/lib/messages/cancel.py @@ -82,7 +82,7 @@ def validate(db, source, offer_hash): return offer, offer_type, problems -def compose(db, source, offer_hash): +def compose(db, source: str, offer_hash: str): # Check that offer exists. offer, offer_type, problems = validate(db, source, offer_hash) if problems: diff --git a/counterparty-core/counterpartycore/lib/messages/destroy.py b/counterparty-core/counterpartycore/lib/messages/destroy.py index b41b3db1b8..1e556b58d6 100644 --- a/counterparty-core/counterpartycore/lib/messages/destroy.py +++ b/counterparty-core/counterpartycore/lib/messages/destroy.py @@ -115,7 +115,7 @@ def validate(db, source, destination, asset, quantity): raise BalanceError("balance insufficient") # noqa: F405 -def compose(db, source, asset, quantity, tag): +def compose(db, source: str, asset: str, quantity: int, tag: str): # resolve subassets asset = ledger.resolve_subasset_longname(db, asset) diff --git a/counterparty-core/counterpartycore/lib/messages/dispenser.py b/counterparty-core/counterpartycore/lib/messages/dispenser.py index 961683f52e..9dbf07af54 100644 --- a/counterparty-core/counterpartycore/lib/messages/dispenser.py +++ b/counterparty-core/counterpartycore/lib/messages/dispenser.py @@ -338,14 +338,14 @@ def validate( def compose( db, - source, - asset, - give_quantity, - escrow_quantity, - mainchainrate, - status, - open_address=None, - oracle_address=None, + source: str, + asset: str, + give_quantity: int, + escrow_quantity: int, + mainchainrate: int, + status: int, + open_address: str = None, + oracle_address: str = None, ): assetid, problems = validate( db, diff --git a/counterparty-core/counterpartycore/lib/messages/dividend.py b/counterparty-core/counterpartycore/lib/messages/dividend.py index 6b3d0f1c48..d7f5afe433 100644 --- a/counterparty-core/counterpartycore/lib/messages/dividend.py +++ b/counterparty-core/counterpartycore/lib/messages/dividend.py @@ -179,7 +179,7 @@ def validate(db, source, quantity_per_unit, asset, dividend_asset, block_index): return dividend_total, outputs, problems, fee -def compose(db, source, quantity_per_unit, asset, dividend_asset): +def compose(db, source: str, quantity_per_unit: int, asset: str, dividend_asset: str): # resolve subassets asset = ledger.resolve_subasset_longname(db, asset) dividend_asset = ledger.resolve_subasset_longname(db, dividend_asset) diff --git a/counterparty-core/counterpartycore/lib/messages/issuance.py b/counterparty-core/counterpartycore/lib/messages/issuance.py index c09812c151..0f07948950 100644 --- a/counterparty-core/counterpartycore/lib/messages/issuance.py +++ b/counterparty-core/counterpartycore/lib/messages/issuance.py @@ -347,14 +347,14 @@ def validate( def compose( db, - source, - asset, - quantity, - transfer_destination=None, - divisible=None, - lock=None, - reset=None, - description=None, + source: str, + asset: str, + quantity: int, + transfer_destination: str | None = None, + divisible: bool | None = None, + lock: bool | None = None, + reset: bool | None = None, + description: str | None = None, ): # Callability is deprecated, so for re‐issuances set relevant parameters # to old values; for first issuances, make uncallable. diff --git a/counterparty-core/counterpartycore/lib/messages/order.py b/counterparty-core/counterpartycore/lib/messages/order.py index 687a40a910..3038483614 100644 --- a/counterparty-core/counterpartycore/lib/messages/order.py +++ b/counterparty-core/counterpartycore/lib/messages/order.py @@ -432,7 +432,14 @@ def validate( def compose( - db, source, give_asset, give_quantity, get_asset, get_quantity, expiration, fee_required + db, + source: str, + give_asset: str, + give_quantity: int, + get_asset: str, + get_quantity: int, + expiration: int, + fee_required: int, ): cursor = db.cursor() diff --git a/counterparty-core/counterpartycore/lib/messages/rps.py b/counterparty-core/counterpartycore/lib/messages/rps.py index 92bb1e5b39..134dd89f38 100644 --- a/counterparty-core/counterpartycore/lib/messages/rps.py +++ b/counterparty-core/counterpartycore/lib/messages/rps.py @@ -282,7 +282,9 @@ def validate(db, source, possible_moves, wager, move_random_hash, expiration, bl return problems -def compose(db, source, possible_moves, wager, move_random_hash, expiration): +def compose( + db, source: str, possible_moves: int, wager: int, move_random_hash: str, expiration: int +): problems = validate( db, source, possible_moves, wager, move_random_hash, expiration, ledger.CURRENT_BLOCK_INDEX ) diff --git a/counterparty-core/counterpartycore/lib/messages/rpsresolve.py b/counterparty-core/counterpartycore/lib/messages/rpsresolve.py index 231e815570..77c8bf4ca0 100644 --- a/counterparty-core/counterpartycore/lib/messages/rpsresolve.py +++ b/counterparty-core/counterpartycore/lib/messages/rpsresolve.py @@ -106,7 +106,7 @@ def validate(db, source, move, random, rps_match_id): return txn, rps_match, problems -def compose(db, source, move, random, rps_match_id): +def compose(db, source: str, move: int, random: str, rps_match_id: str): tx0_hash, tx1_hash = util.parse_id(rps_match_id) txn, rps_match, problems = validate(db, source, move, random, rps_match_id) diff --git a/counterparty-core/counterpartycore/lib/messages/send.py b/counterparty-core/counterpartycore/lib/messages/send.py index fbe0a3a96e..69aacd2883 100644 --- a/counterparty-core/counterpartycore/lib/messages/send.py +++ b/counterparty-core/counterpartycore/lib/messages/send.py @@ -112,7 +112,14 @@ def validate(db, source, destination, asset, quantity, block_index): def compose( - db, source, destination, asset, quantity, memo=None, memo_is_hex=False, use_enhanced_send=None + db, + source: str, + destination: str, + asset: str, + quantity: int, + memo: str | None = None, + memo_is_hex: bool = False, + use_enhanced_send: bool | None = None, ): # special case - enhanced_send replaces send by default when it is enabled # but it can be explicitly disabled with an API parameter diff --git a/counterparty-core/counterpartycore/lib/messages/sweep.py b/counterparty-core/counterpartycore/lib/messages/sweep.py index 3a95fd8c06..9ed916cb8f 100644 --- a/counterparty-core/counterpartycore/lib/messages/sweep.py +++ b/counterparty-core/counterpartycore/lib/messages/sweep.py @@ -103,7 +103,7 @@ def validate(db, source, destination, flags, memo, block_index): return problems, total_fee -def compose(db, source, destination, flags, memo): +def compose(db, source: str, destination: str, flags: int, memo: str): if memo is None: memo = b"" elif flags & FLAG_BINARY_MEMO: diff --git a/counterparty-core/counterpartycore/lib/messages/versions/enhanced_send.py b/counterparty-core/counterpartycore/lib/messages/versions/enhanced_send.py index 612bd35fae..b423af2f9f 100644 --- a/counterparty-core/counterpartycore/lib/messages/versions/enhanced_send.py +++ b/counterparty-core/counterpartycore/lib/messages/versions/enhanced_send.py @@ -98,7 +98,9 @@ def validate(db, source, destination, asset, quantity, memo_bytes, block_index): return problems -def compose(db, source, destination, asset, quantity, memo, memo_is_hex): +def compose( + db, source: str, destination: str, asset: str, quantity: int, memo: str, memo_is_hex: bool +): cursor = db.cursor() # Just send BTC? diff --git a/counterparty-core/counterpartycore/lib/messages/versions/mpma.py b/counterparty-core/counterpartycore/lib/messages/versions/mpma.py index a6cea2639e..2d6a2c5c48 100644 --- a/counterparty-core/counterpartycore/lib/messages/versions/mpma.py +++ b/counterparty-core/counterpartycore/lib/messages/versions/mpma.py @@ -98,7 +98,7 @@ def validate(db, source, asset_dest_quant_list, block_index): return problems -def compose(db, source, asset_dest_quant_list, memo, memo_is_hex): +def compose(db, source: str, asset_dest_quant_list: list, memo: str, memo_is_hex: bool): cursor = db.cursor() out_balances = util.accumulate([(t[0], t[2]) for t in asset_dest_quant_list]) diff --git a/counterparty-core/counterpartycore/lib/messages/versions/send1.py b/counterparty-core/counterpartycore/lib/messages/versions/send1.py index 95e6642376..459c166d48 100644 --- a/counterparty-core/counterpartycore/lib/messages/versions/send1.py +++ b/counterparty-core/counterpartycore/lib/messages/versions/send1.py @@ -68,7 +68,7 @@ def validate(db, source, destination, asset, quantity, block_index): return problems -def compose(db, source, destination, asset, quantity): +def compose(db, source: str, destination: str, asset: str, quantity: int): cursor = db.cursor() # Just send BTC? diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index 0165fdbee7..0254b83200 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -957,31 +957,6 @@ def get_dust_return_pubkey(source, provided_pubkeys, encoding): return dust_return_pubkey -COMPOSE_COMMONS_ARGS = [ - "encoding", - "fee_per_kb", - "regular_dust_size", - "multisig_dust_size", - "op_return_value", - "pubkey", - "allow_unconfirmed_inputs", - "fee", - "fee_provided", - "estimate_fee_per_kb", - "estimate_fee_per_kb_nblocks", - "estimate_fee_per_kb_conf_target", - "estimate_fee_per_kb_mode", - "unspent_tx_hash", - "custom_inputs", - "dust_return_pubkey", - "disable_utxo_locks", - "extended_tx_info", - "p2sh_source_multisig_pubkeys", - "p2sh_source_multisig_pubkeys_required", - "p2sh_pretx_txid", -] - - def split_compose_arams(**kwargs): transaction_args = {} common_args = {} @@ -1005,28 +980,25 @@ def get_default_args(func): } -COMPOSE_COMMONS_ARGS = [ - "encoding", - "fee_per_kb", - "estimate_fee_per_kb", - "regular_dust_size", - "multisig_dust_size", - "op_return_value", - "pubkey", - "allow_unconfirmed_inputs", - "fee", - "fee_provided", - "unspent_tx_hash", - "custom_inputs", - "dust_return_pubkey", - "disable_utxo_locks", - "extended_tx_info", - "p2sh_source_multisig_pubkeys", - "p2sh_source_multisig_pubkeys_required", - "p2sh_pretx_txid", - "old_style_api", - "segwit", -] +COMPOSE_COMMONS_ARGS = { + "encoding": (str, "auto"), + "fee_per_kb": (int, None), + "estimate_fee_per_kb": (int, None), + "regular_dust_size": (int, config.DEFAULT_REGULAR_DUST_SIZE), + "multisig_dust_size": (int, config.DEFAULT_MULTISIG_DUST_SIZE), + "op_return_value": (int, config.DEFAULT_OP_RETURN_VALUE), + "pubkey": (str, None), + "allow_unconfirmed_inputs": (bool, False), + "fee": (int, None), + "fee_provided": (int, 0), + "unspent_tx_hash": (str, None), + "dust_return_pubkey": (str, None), + "disable_utxo_locks": (bool, False), + "extended_tx_info": (bool, False), + "p2sh_pretx_txid": (str, None), + "old_style_api": (bool, True), + "segwit": (bool, False), +} def compose_transaction( @@ -1177,6 +1149,10 @@ def compose(db, source, transaction_name, **kwargs): ) +def get_compose_common_args(): + return [(name, value[0], value[1]) for name, value in COMPOSE_COMMONS_ARGS.items()] + + def info(db, rawtransaction, block_index=None): # block_index mandatory for transactions before block 335000 source, destination, btc_amount, fee, data, extra = gettxinfo.get_tx_info( From 7474f5babffa36ca9ff3b213a85d6639cfd9e175 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 18 Apr 2024 15:01:37 +0200 Subject: [PATCH 055/280] Routes args from function signature; Routes doc from function docstring --- .../counterpartycore/lib/api/api_server.py | 35 +++++++++++++----- .../counterpartycore/lib/api/routes.py | 10 ++++- .../counterpartycore/lib/api/util.py | 37 +++++++++++++++++++ .../counterpartycore/lib/ledger.py | 9 ++++- counterparty-core/requirements.txt | 1 + 5 files changed, 80 insertions(+), 12 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index f26969e54f..9a258fd665 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -44,7 +44,16 @@ def verify_password(username, password): def api_root(): counterparty_height = blocks.last_db_index(get_db()) - routes = list(ROUTES.keys()) + routes = [] + for path in ROUTES: + route = ROUTES[path] + routes.append( + { + "path": path, + "args": route.get("args", []), + "description": route.get("description", ""), + } + ) network = "mainnet" if config.TESTNET: network = "testnet" @@ -85,15 +94,23 @@ def prepare_args(route, **kwargs): function_args = request.args | function_args elif "args" in route: for arg in route["args"]: - str_arg = request.args.get(arg[0]) + arg_name = arg["name"] + if arg_name in function_args: + continue + str_arg = request.args.get(arg_name) + if str_arg is None and arg["required"]: + raise ValueError(f"Missing required parameter: {arg_name}") if str_arg is None: - function_args[arg[0]] = arg[2] - elif arg[1] == bool: - function_args[arg[0]] = str_arg.lower() in ["true", "1"] - elif arg[1] == int: - function_args[arg[0]] = int(str_arg) + function_args[arg_name] = arg["default"] + elif arg["type"] == "bool": + function_args[arg_name] = str_arg.lower() in ["true", "1"] + elif arg["type"] == "int": + try: + function_args[arg_name] = int(str_arg) + except ValueError as e: + raise ValueError(f"Invalid integer: {arg_name}") from e else: - function_args[arg[0]] = str_arg + function_args[arg_name] = str_arg return function_args @@ -110,7 +127,7 @@ def handle_route(**kwargs): try: function_args = prepare_args(route, **kwargs) except ValueError as e: - return inject_headers({"error": f"Invalid parameter: {e}"}, return_code=400) + return inject_headers({"error": str(e)}, return_code=400) result = route["function"](db, **function_args) result = remove_rowids(result) return inject_headers(result) diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index b52b2376c7..a997307d18 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -11,7 +11,6 @@ ### /blocks ### "/blocks": { "function": ledger.get_blocks, - "args": [("last", int, None), ("limit", int, 10)], }, "/blocks/": { "function": ledger.get_block, @@ -250,9 +249,18 @@ "function": ledger.get_mempool_events, }, } + +# Add compose routes for each transaction type ### /address//compose/ ### for transaction_name, compose_function in transaction.COMPOSE_FUNCTIONS.items(): ROUTES[f"/address//compose/{transaction_name}"] = { "function": compose_function, "pass_all_args": True, } + +# Add description and args to each route +for path, route in ROUTES.items(): + if "/compose/" in path: + continue + ROUTES[path]["description"] = util.get_function_description(route["function"]) + ROUTES[path]["args"] = util.prepare_route_args(route["function"]) diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index 71e5059105..32a183e928 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -1,8 +1,10 @@ +import inspect import logging from logging import handlers as logging_handlers import flask from counterpartycore.lib import backend, config, exceptions, ledger, transaction +from docstring_parser import parse as parse_docstring logger = logging.getLogger(config.LOGGER_NAME) @@ -115,3 +117,38 @@ def init_api_access_log(flask_app): werkzeug_logger.addHandler(handler) flask.cli.show_server_banner = lambda *args: None + + +def get_args_description(function): + docstring = parse_docstring(function.__doc__) + args = {} + for param in docstring.params: + args[param.arg_name] = param.description + return args + + +def prepare_route_args(function): + args = [] + function_args = inspect.signature(function).parameters + args_description = get_args_description(function) + for arg_name, arg in function_args.items(): + annotation = arg.annotation + if annotation is inspect.Parameter.empty: + continue + route_arg = {"name": arg_name} + default = arg.default + if default is not inspect.Parameter.empty: + route_arg["default"] = default + route_arg["required"] = False + else: + route_arg["required"] = True + route_arg["type"] = arg.annotation.__name__ + if arg_name in args_description: + route_arg["description"] = args_description[arg_name] + args.append(route_arg) + return args + + +def get_function_description(function): + docstring = parse_docstring(function.__doc__) + return docstring.description diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index b9256be7d1..592c477076 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -964,7 +964,12 @@ def get_burns(db, address=None, status="valid"): ###################################### -def get_blocks(db, last=None, limit=10): +def get_blocks(db, last: int = None, limit: int = 10): + """ + Returns the list of the last ten blocks + :param int last: The index of the most recent block to return + :param int limit: The number of blocks to return + """ cursor = db.cursor() bindings = [] query = """ @@ -980,7 +985,7 @@ def get_blocks(db, last=None, limit=10): return cursor.fetchall() -def get_block(db, block_index): +def get_block(db, block_index: int): blocks = get_blocks(db, last=block_index, limit=1) if blocks: return blocks[0] diff --git a/counterparty-core/requirements.txt b/counterparty-core/requirements.txt index 01267b95de..65e8050011 100644 --- a/counterparty-core/requirements.txt +++ b/counterparty-core/requirements.txt @@ -27,4 +27,5 @@ halo==0.0.31 termcolor==2.4.0 sentry-sdk==1.45.0 Flask-Cors==4.0.0 +docstring_parser==0.16 counterparty-rs==10.1.0 From c2dea422d717b0e65a2f766bab2f947a4bb4218c Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 18 Apr 2024 20:32:23 +0200 Subject: [PATCH 056/280] Progress in routes documentation --- .../counterpartycore/lib/api/routes.py | 144 +++-------- .../counterpartycore/lib/blocks.py | 3 - .../counterpartycore/lib/exceptions.py | 4 + .../counterpartycore/lib/ledger.py | 227 +++++++++++++++++- .../counterpartycore/lib/transaction.py | 15 +- counterparty-core/counterpartycore/server.py | 2 + 6 files changed, 274 insertions(+), 121 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index a997307d18..b528b8eb10 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -9,109 +9,40 @@ # Define the API routes except root (`/`) defined in `api_server.py` ROUTES = { ### /blocks ### - "/blocks": { - "function": ledger.get_blocks, - }, - "/blocks/": { - "function": ledger.get_block, - }, - "/blocks//transactions": { - "function": ledger.get_transactions_by_block, - }, - "/blocks//events": { - "function": ledger.get_events, - }, - "/blocks//events/counts": { - "function": ledger.get_events_counts, - }, - "/blocks//events/": { - "function": ledger.get_events, - }, - "/blocks//credits": { - "function": ledger.get_credits, - }, - "/blocks//debits": { - "function": ledger.get_debits, - }, - "/blocks//expirations": { - "function": ledger.get_expirations, - }, - "/blocks//cancels": { - "function": ledger.get_cancels, - }, - "/blocks//destructions": { - "function": ledger.get_destructions, - }, - "/blocks//issuances": { - "function": ledger.get_issuances, - }, - "/blocks//sends": { - "function": ledger.get_sends_or_receives, - }, - "/blocks//dispenses": { - "function": ledger.get_dispenses, - }, - "/blocks//sweeps": { - "function": ledger.get_sweeps, - }, + "/blocks": ledger.get_blocks, + "/blocks/": ledger.get_block, + "/blocks//transactions": ledger.get_transactions_by_block, + "/blocks//events": ledger.get_events_by_block, + "/blocks//events/counts": ledger.get_events_counts_by_block, + "/blocks//events/": ledger.get_events_by_block_and_event, + "/blocks//credits": ledger.get_credits_by_block, + "/blocks//debits": ledger.get_debits_by_block, + "/blocks//expirations": ledger.get_expirations, + "/blocks//cancels": ledger.get_cancels, + "/blocks//destructions": ledger.get_destructions, + "/blocks//issuances": ledger.get_issuances_by_block, + "/blocks//sends": ledger.get_sends_or_receives_by_block, + "/blocks//dispenses": ledger.get_dispenses_by_block, + "/blocks//sweeps": ledger.get_sweeps_by_block, ### /transactions ### - "/transactions/info": { - "function": transaction.info, - "args": [("rawtransaction", str, None), ("block_index", int, None)], - }, - "/transactions/unpack": { - "function": transaction.unpack, - "args": [("datahex", str, None), ("block_index", int, None)], - }, - "/transactions/": { - "function": ledger.get_transaction, - }, + "/transactions/info": transaction.info, + "/transactions/unpack": transaction.unpack, + "/transactions/": ledger.get_transaction, ### /addresses ### - "/addresses/
/balances": { - "function": ledger.get_address_balances, - }, - "/addresses/
/balances/": { - "function": ledger.get_balance_object, - }, - "/addresses/
/credits": { - "function": ledger.get_credits, - }, - "/addresses/
/debits": { - "function": ledger.get_debits, - }, - "/addresses/
/bets": { - "function": ledger.get_bet_by_feed, - "args": [("status", str, "open")], - }, - "/addresses/
/broadcasts": { - "function": ledger.get_broadcasts_by_source, - }, - "/addresses/
/burns": { - "function": ledger.get_burns, - }, - "/addresses/
/sends": { - "function": ledger.get_sends, - }, - "/addresses/
/receives": { - "function": ledger.get_receives, - }, - "/addresses/
/sends/": { - "function": ledger.get_sends, - }, - "/addresses/
/receives/": { - "function": ledger.get_receives, - }, - "/addresses/
/dispensers": { - "function": ledger.get_dispensers, - "args": [("status", int, 0)], - }, - "/addresses/
/dispensers/": { - "function": ledger.get_dispensers, - "args": [("status", int, 0)], - }, - "/addresses/
/sweeps": { - "function": ledger.get_sweeps, - }, + "/addresses/
/balances": ledger.get_address_balances, + "/addresses/
/balances/": ledger.get_balance_object, + "/addresses/
/credits": ledger.get_credits_by_address, + "/addresses/
/debits": ledger.get_debits_by_address, + "/addresses/
/bets": ledger.get_bet_by_feed, + "/addresses/
/broadcasts": ledger.get_broadcasts_by_source, + "/addresses/
/burns": ledger.get_burns, + "/addresses/
/sends": ledger.get_send_by_address, + "/addresses/
/receives": ledger.get_receive_by_address, + "/addresses/
/sends/": ledger.get_send_by_address_and_asset, + "/addresses/
/receives/": ledger.get_receive_by_address_and_asset, + "/addresses/
/dispensers": ledger.get_dispensers_by_address, + "/addresses/
/dispensers/": ledger.get_dispensers_by_address_and_asset, + "/addresses/
/sweeps": ledger.get_sweeps_by_address, ### /assets ### "/assets": { "function": ledger.get_valid_assets, @@ -144,10 +75,7 @@ "/assets//sends": { "function": ledger.get_sends_or_receives, }, - "/assets//dispensers": { - "function": ledger.get_dispensers, - "args": [("status", int, 0)], - }, + "/assets//dispensers": ledger.get_dispensers_by_asset, "/assets//dispensers/
": { "function": ledger.get_dispensers, "args": [("status", int, 0)], @@ -250,6 +178,12 @@ }, } +for path, route in ROUTES.items(): + if not isinstance(route, dict): + ROUTES[path] = { + "function": route, + } + # Add compose routes for each transaction type ### /address//compose/ ### for transaction_name, compose_function in transaction.COMPOSE_FUNCTIONS.items(): diff --git a/counterparty-core/counterpartycore/lib/blocks.py b/counterparty-core/counterpartycore/lib/blocks.py index 6f46452532..8bfbda920f 100644 --- a/counterparty-core/counterpartycore/lib/blocks.py +++ b/counterparty-core/counterpartycore/lib/blocks.py @@ -901,9 +901,6 @@ def follow(db): check.software_version() last_software_check = time.time() - # Initialise. - initialise(db) - # Get index of last block. if ledger.CURRENT_BLOCK_INDEX == 0: logger.warning("New database.") diff --git a/counterparty-core/counterpartycore/lib/exceptions.py b/counterparty-core/counterpartycore/lib/exceptions.py index 07f846c577..cbe5260481 100644 --- a/counterparty-core/counterpartycore/lib/exceptions.py +++ b/counterparty-core/counterpartycore/lib/exceptions.py @@ -83,4 +83,8 @@ class ComposeTransactionError(Exception): pass +class InvalidArgument(Exception): + pass + + # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index 592c477076..750c158d70 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -100,6 +100,23 @@ def get_events(db, block_index=None, event=None, event_index=None, last=None, li return events +def get_events_by_block(db, block_index: int): + """ + Returns the events of a block + :param int block_index: The index of the block to return + """ + return get_events(db, block_index=block_index) + + +def get_events_by_block_and_event(db, block_index: int, event: str): + """ + Returns the events of a block filtered by event + :param int block_index: The index of the block to return + :param str event: The event to filter by + """ + return get_events(db, block_index=block_index, event=event) + + def get_mempool_events(db, event_name=None): cursor = db.cursor() where = [] @@ -137,6 +154,14 @@ def get_events_counts(db, block_index=None): return cursor.fetchall() +def get_events_counts_by_block(db, block_index: int): + """ + Returns the event counts of a block + :param int block_index: The index of the block to return + """ + return get_events_counts(db, block_index=block_index) + + # we are using a function here for testing purposes def curr_time(): return int(time.time()) @@ -358,7 +383,12 @@ def get_balance(db, address, asset, raise_error_if_no_balance=False, return_list return balances[0]["quantity"] -def get_balance_object(db, address, asset): +def get_balance_object(db, address: str, asset: str): + """ + Returns the balance of an address and asset + :param str address: The address to return + :param str asset: The asset to return + """ return { "address": address, "asset": asset, @@ -366,7 +396,11 @@ def get_balance_object(db, address, asset): } -def get_address_balances(db, address): +def get_address_balances(db, address: str): + """ + Returns the balances of an address + :param str address: The address to return + """ cursor = db.cursor() query = """ SELECT address, asset, quantity, MAX(rowid) @@ -433,10 +467,42 @@ def get_credits(db, address=None, asset=None, block_index=None, tx_index=None): return get_credits_or_debits(db, "credits", address, asset, block_index, tx_index) +def get_credits_by_block(db, block_index: int): + """ + Returns the credits of a block + :param int block_index: The index of the block to return + """ + return get_credits(db, block_index=block_index) + + +def get_credits_by_address(db, address: str): + """ + Returns the credits of an address + :param str address: The address to return + """ + return get_credits(db, address=address) + + def get_debits(db, address=None, asset=None, block_index=None, tx_index=None): return get_credits_or_debits(db, "debits", address, asset, block_index, tx_index) +def get_debits_by_block(db, block_index: int): + """ + Returns the debits of a block + :param int block_index: The index of the block to return + """ + return get_debits(db, block_index=block_index) + + +def get_debits_by_address(db, address: str): + """ + Returns the debits of an address + :param str address: The address to return + """ + return get_debits(db, address=address) + + def get_sends_or_receives( db, source=None, destination=None, asset=None, block_index=None, status="valid" ): @@ -464,18 +530,60 @@ def get_sends_or_receives( return cursor.fetchall() +def get_sends_or_receives_by_block(db, block_index: int): + """ + Returns the sends of a block + :param int block_index: The index of the block to return + """ + return get_sends_or_receives(db, block_index=block_index) + + def get_sends(db, address=None, asset=None, block_index=None, status="valid"): return get_sends_or_receives( db, source=address, asset=asset, block_index=block_index, status=status ) +def get_send_by_address(db, address: str): + """ + Returns the sends of an address + :param str address: The address to return + """ + return get_sends(db, address=address) + + +def get_send_by_address_and_asset(db, address: str, asset: str): + """ + Returns the sends of an address and asset + :param str address: The address to return + :param str asset: The asset to return + """ + return get_sends(db, address=address, asset=asset) + + def get_receives(db, address=None, asset=None, block_index=None, status="valid"): return get_sends_or_receives( db, destination=address, asset=asset, block_index=block_index, status=status ) +def get_receive_by_address(db, address: str): + """ + Returns the receives of an address + :param str address: The address to return + """ + return get_receives(db, address=address) + + +def get_receive_by_address_and_asset(db, address: str, asset: str): + """ + Returns the receives of an address and asset + :param str address: The address to return + :param str asset: The asset to return + """ + return get_receives(db, address=address, asset=asset) + + def get_sweeps(db, address=None, block_index=None, status="valid"): cursor = db.cursor() where = [] @@ -495,6 +603,22 @@ def get_sweeps(db, address=None, block_index=None, status="valid"): return cursor.fetchall() +def get_sweeps_by_block(db, block_index: int): + """ + Returns the sweeps of a block + :param int block_index: The index of the block to return + """ + return get_sweeps(db, block_index=block_index) + + +def get_sweeps_by_address(db, address: str): + """ + Returns the sweeps of an address + :param str address: The address to return + """ + return get_sweeps(db, address=address) + + ##################### # ISSUANCES # ##################### @@ -856,6 +980,14 @@ def get_issuances( return cursor.fetchall() +def get_issuances_by_block(db, block_index: int): + """ + Returns the issuances of a block + :param int block_index: The index of the block to return + """ + return get_issuances(db, block_index=block_index) + + def get_assets_by_longname(db, asset_longname): cursor = db.cursor() query = """ @@ -926,7 +1058,15 @@ def get_oracle_last_price(db, oracle_address, block_index): ) -def get_broadcasts_by_source(db, address, status="valid", order_by="DESC"): +def get_broadcasts_by_source(db, address: str, status: str = "valid", order_by: str = "DESC"): + """ + Returns the broadcasts of a source + :param str address: The address to return + :param str status: The status of the broadcasts to return + :param str order_by: The order of the broadcasts to return + """ + if order_by not in ["ASC", "DESC"]: + raise exceptions.InvalidArgument("Invalid order_by parameter") cursor = db.cursor() query = f""" SELECT * FROM broadcasts @@ -943,7 +1083,12 @@ def get_broadcasts_by_source(db, address, status="valid", order_by="DESC"): ##################### -def get_burns(db, address=None, status="valid"): +def get_burns(db, address: str = None, status: str = "valid"): + """ + Returns the burns of an address + :param str address: The address to return + :param str status: The status of the burns to return + """ cursor = db.cursor() where = [] bindings = [] @@ -986,13 +1131,21 @@ def get_blocks(db, last: int = None, limit: int = 10): def get_block(db, block_index: int): + """ + Return the information of a block + :param int block_index: The index of the block to return + """ blocks = get_blocks(db, last=block_index, limit=1) if blocks: return blocks[0] return None -def get_transactions_by_block(db, block_index): +def get_transactions_by_block(db, block_index: int): + """ + Returns the transactions of a block + :param int block_index: The index of the block to return + """ cursor = db.cursor() query = """ SELECT * FROM transactions @@ -1031,7 +1184,11 @@ def get_transactions(db, tx_hash=None): return cursor.fetchall() -def get_transaction(db, tx_hash): +def get_transaction(db, tx_hash: str): + """ + Returns the information of a transaction + :param str tx_hash: The hash of the transaction to return + """ transactions = get_transactions(db, tx_hash) if transactions: return transactions[0] @@ -1059,7 +1216,11 @@ def get_addresses(db, address=None): return cursor.fetchall() -def get_expirations(db, block_index): +def get_expirations(db, block_index: int): + """ + Returns the expirations of a block + :param int block_index: The index of the block to return + """ cursor = db.cursor() queries = [ """ @@ -1093,7 +1254,11 @@ def get_expirations(db, block_index): return cursor.fetchall() -def get_cancels(db, block_index): +def get_cancels(db, block_index: int): + """ + Returns the cancels of a block + :param int block_index: The index of the block to return + """ cursor = db.cursor() query = """ SELECT * FROM cancels @@ -1104,7 +1269,11 @@ def get_cancels(db, block_index): return cursor.fetchall() -def get_destructions(db, block_index): +def get_destructions(db, block_index: int): + """ + Returns the destructions of a block + :param int block_index: The index of the block to return + """ cursor = db.cursor() query = """ SELECT * FROM destructions @@ -1455,6 +1624,31 @@ def get_dispensers( return cursor.fetchall() +def get_dispensers_by_address(db, address: str, status: int = 0): + """ + Returns the dispensers of an address + :param str address: The address to return + """ + return get_dispensers(db, address=address, status=status) + + +def get_dispensers_by_asset(db, asset: str, status: int = 0): + """ + Returns the dispensers of an asset + :param str asset: The asset to return + """ + return get_dispensers(db, asset=asset, status=status) + + +def get_dispensers_by_address_and_asset(db, address: str, asset: str, status: int = 0): + """ + Returns the dispensers of an address and an asset + :param str address: The address to return + :param str asset: The asset to return + """ + return get_dispensers(db, address=address, asset=asset, status=status) + + def get_dispenses(db, dispenser_tx_hash=None, block_index=None): cursor = db.cursor() where = [] @@ -1471,6 +1665,14 @@ def get_dispenses(db, dispenser_tx_hash=None, block_index=None): return cursor.fetchall() +def get_dispenses_by_block(db, block_index: int): + """ + Returns the dispenses of a block + :param int block_index: The index of the block to return + """ + return get_dispenses(db, block_index=block_index) + + ### UPDATES ### @@ -1569,7 +1771,12 @@ def get_matching_bets(db, feed_address, bet_type): return cursor.fetchall() -def get_bet_by_feed(db, address, status="open"): +def get_bet_by_feed(db, address: str, status: str = "open"): + """ + Returns the bets of a feed + :param str address: The address of the feed + :param str status: The status of the bet + """ cursor = db.cursor() query = """ SELECT * FROM ( diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index 0254b83200..62a07fa449 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -1153,8 +1153,12 @@ def get_compose_common_args(): return [(name, value[0], value[1]) for name, value in COMPOSE_COMMONS_ARGS.items()] -def info(db, rawtransaction, block_index=None): - # block_index mandatory for transactions before block 335000 +def info(db, rawtransaction: str, block_index: int = None): + """ + Returns Counterparty information from a raw transaction in hex format. + :param rawtransaction: Raw transaction in hex format + :param block_index: Block index mandatory for transactions before block 335000 + """ source, destination, btc_amount, fee, data, extra = gettxinfo.get_tx_info( db, BlockchainParser().deserialize_tx(rawtransaction), block_index=block_index ) @@ -1167,7 +1171,12 @@ def info(db, rawtransaction, block_index=None): } -def unpack(db, datahex, block_index=None): +def unpack(db, datahex: str, block_index: int = None): + """ + Unpacks Counterparty data in hex format and returns the message type and data. + :param datahex: Data in hex format + :param block_index: Block index of the transaction containing this data + """ data = binascii.unhexlify(datahex) message_type_id, message = message_type.unpack(data) block_index = block_index or ledger.CURRENT_BLOCK_INDEX diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index ce0cd9e020..e0e4ff2986 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -700,6 +700,8 @@ def start_all(args): bootstrap(no_confirm=True) db = initialise_db() + # Initialise. + blocks.initialise(db) # Reset UTXO_LOCKS. This previously was done in # initilise_config From c22ee5f2b53a9df8e8145bf7dac4ec6ba0f86416 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 18 Apr 2024 21:55:53 +0200 Subject: [PATCH 057/280] All routes documented except compose --- .../counterpartycore/lib/api/routes.py | 160 +++---------- .../counterpartycore/lib/api/util.py | 22 +- .../counterpartycore/lib/backend/__init__.py | 41 +++- .../lib/backend/addrindexrs.py | 4 +- .../counterpartycore/lib/ledger.py | 211 +++++++++++++++++- 5 files changed, 285 insertions(+), 153 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index b528b8eb10..2b0b2d3dff 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -1,6 +1,5 @@ from counterpartycore.lib import ( backend, - config, ledger, transaction, ) @@ -35,7 +34,7 @@ "/addresses/
/debits": ledger.get_debits_by_address, "/addresses/
/bets": ledger.get_bet_by_feed, "/addresses/
/broadcasts": ledger.get_broadcasts_by_source, - "/addresses/
/burns": ledger.get_burns, + "/addresses/
/burns": ledger.get_burns_by_address, "/addresses/
/sends": ledger.get_send_by_address, "/addresses/
/receives": ledger.get_receive_by_address, "/addresses/
/sends/": ledger.get_send_by_address_and_asset, @@ -44,138 +43,49 @@ "/addresses/
/dispensers/": ledger.get_dispensers_by_address_and_asset, "/addresses/
/sweeps": ledger.get_sweeps_by_address, ### /assets ### - "/assets": { - "function": ledger.get_valid_assets, - }, - "/assets/": { - "function": ledger.get_asset_info, - }, - "/assets//balances": { - "function": ledger.get_asset_balances, - }, - "/assets//balances/
": { - "function": ledger.get_balance_object, - }, - "/assets//orders": { - "function": ledger.get_orders_by_asset, - "args": [("status", str, "open")], - }, - "/assets//credits": { - "function": ledger.get_credits, - }, - "/assets//debits": { - "function": ledger.get_debits, - }, - "/assets//dividends": { - "function": ledger.get_dividends, - }, - "/assets//issuances": { - "function": ledger.get_issuances, - }, - "/assets//sends": { - "function": ledger.get_sends_or_receives, - }, + "/assets": ledger.get_valid_assets, + "/assets/": ledger.get_asset_info, + "/assets//balances": ledger.get_asset_balances, + "/assets//balances/
": ledger.get_balance_object, + "/assets//orders": ledger.get_orders_by_asset, + "/assets//credits": ledger.get_credits_by_asset, + "/assets//debits": ledger.get_debits_by_asset, + "/assets//dividends": ledger.get_dividends, + "/assets//issuances": ledger.get_issuances_by_asset, + "/assets//sends": ledger.get_sends_or_receives_by_asset, "/assets//dispensers": ledger.get_dispensers_by_asset, - "/assets//dispensers/
": { - "function": ledger.get_dispensers, - "args": [("status", int, 0)], - }, - "/assets//holders": { - "function": ledger.get_asset_holders, - }, + "/assets//dispensers/
": ledger.get_dispensers_by_address_and_asset, + "/assets//holders": ledger.get_asset_holders, ### /orders ### - "/orders/": { - "function": ledger.get_order, - }, - "/orders//matches": { - "function": ledger.get_order_matches_by_order, - "args": [("status", str, "pending")], - }, - "/orders//btcpays": { - "function": ledger.get_btcpays_by_order, - "args": [("status", str, "pending")], - }, + "/orders/": ledger.get_order, + "/orders//matches": ledger.get_order_matches_by_order, + "/orders//btcpays": ledger.get_btcpays_by_order, ### /bets ### - "/bets/": { - "function": ledger.get_bet, - }, - "/bets//matches": { - "function": ledger.get_bet_matches_by_bet, - "args": [("status", str, "pending")], - }, - "/bets//resolutions": { - "function": ledger.get_resolutions_by_bet, - "args": [("status", str, "pending")], - }, + "/bets/": ledger.get_bet, + "/bets//matches": ledger.get_bet_matches_by_bet, + "/bets//resolutions": ledger.get_resolutions_by_bet, ### /burns ### - "/burns": { - "function": ledger.get_burns, - }, + "/burns": ledger.get_all_burns, ### /dispensers ### - "/dispensers/": { - "function": ledger.get_dispenser_info, - }, - "/dispensers//dispenses": { - "function": ledger.get_dispenses, - }, + "/dispensers/": ledger.get_dispenser_info_by_tx_hash, + "/dispensers//dispenses": ledger.get_dispenses_by_dispenser, ### /events ### - "/events": { - "function": ledger.get_events, - "args": [("last", int, None), ("limit", int, 100)], - }, - "/events/": { - "function": ledger.get_events, - }, - "/events/counts": { - "function": ledger.get_events_counts, - }, - "/events/": { - "function": ledger.get_events, - "args": [("last", int, None), ("limit", int, 100)], - }, + "/events": ledger.get_all_events, + "/events/": ledger.get_event_by_index, + "/events/counts": ledger.get_all_events_counts, + "/events/": ledger.get_events_by_event, ### /healthz ### - "/healthz": { - "function": util.handle_healthz_route, - "args": [("check_type", str, "heavy")], - }, + "/healthz": util.handle_healthz_route, ### /backend ### - "/backend/addresses/
/transactions": { - "function": backend.search_raw_transactions, - "args": [("unconfirmed", bool, True), ("only_tx_hashes", bool, False)], - }, - "/backend/addresses/
/transactions/oldest": { - "function": backend.get_oldest_tx, - }, - "/backend/addresses/
/utxos": { - "function": backend.get_unspent_txouts, - "args": [("unconfirmed", bool, True), ("unspent_tx_hash", str, None)], - }, - "/backend/addresses/
/pubkey": { - "function": util.pubkeyhash_to_pubkey, - "args": [("provided_pubkeys", str, "")], - }, - "/backend/transactions": { - "function": util.getrawtransactions, - "args": [("tx_hashes", str, ""), ("verbose", bool, False), ("skip_missing", bool, False)], - }, - "/backend/transactions/": { - "function": backend.getrawtransaction, - "args": [("verbose", bool, False), ("skip_missing", bool, False)], - }, - "/backend/estimatesmartfee": { - "function": backend.fee_per_kb, - "args": [ - ("conf_target", int, config.ESTIMATE_FEE_CONF_TARGET), - ("mode", str, config.ESTIMATE_FEE_MODE), - ], - }, + "/backend/addresses/
/transactions": backend.search_raw_transactions, + "/backend/addresses/
/transactions/oldest": backend.get_oldest_tx, + "/backend/addresses/
/utxos": backend.get_unspent_txouts, + "/backend/addresses/
/pubkey": util.pubkeyhash_to_pubkey, + "/backend/transactions/": util.get_raw_transaction, + "/backend/estimatesmartfee": backend.fee_per_kb, ### /mempool ### - "/mempool/events": { - "function": ledger.get_mempool_events, - }, - "/mempool/events/": { - "function": ledger.get_mempool_events, - }, + "/mempool/events": ledger.get_all_mempool_events, + "/mempool/events/": ledger.get_mempool_events_by_event, } for path, route in ROUTES.items(): diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index 32a183e928..8e82357c07 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -51,7 +51,11 @@ def healthz(db, check_type="heavy"): return True -def handle_healthz_route(db, check_type="heavy"): +def handle_healthz_route(db, check_type: str = "heavy"): + """ + Health check route. + :param check_type: Type of health check to perform. Options are 'light' and 'heavy'. + """ msg, code = "Healthy", 200 if not healthz(db, check_type): msg, code = "Unhealthy", 503 @@ -84,7 +88,12 @@ def getrawtransactions(tx_hashes, verbose=False, skip_missing=False, _retry=0): return backend.getrawtransaction_batch(txhash_list, verbose, skip_missing, _retry) -def pubkeyhash_to_pubkey(address, provided_pubkeys=None): +def pubkeyhash_to_pubkey(address: str, provided_pubkeys: str = None): + """ + Get pubkey for an address. + :param address: Address to get pubkey for. + :param provided_pubkeys: Comma separated list of provided pubkeys. + """ if provided_pubkeys: provided_pubkeys_list = provided_pubkeys.split(",") else: @@ -92,6 +101,15 @@ def pubkeyhash_to_pubkey(address, provided_pubkeys=None): return backend.pubkeyhash_to_pubkey(address, provided_pubkeys=provided_pubkeys_list) +def get_raw_transaction(tx_hash: str, verbose: bool = False): + """ + Get a raw transaction from the blockchain + :param tx_hash: The transaction hash + :param verbose: Whether to return JSON output or raw hex + """ + return backend.getrawtransaction(tx_hash, verbose=verbose) + + def get_backend_height(): block_count = backend.getblockcount() blocks_behind = backend.getindexblocksbehind() diff --git a/counterparty-core/counterpartycore/lib/backend/__init__.py b/counterparty-core/counterpartycore/lib/backend/__init__.py index bf476b658e..4ed53f602a 100644 --- a/counterparty-core/counterpartycore/lib/backend/__init__.py +++ b/counterparty-core/counterpartycore/lib/backend/__init__.py @@ -72,7 +72,9 @@ def clear_pretx(txid): del PRETX_CACHE[binascii.hexlify(txid).decode("utf8")] -def getrawtransaction(tx_hash, verbose=False, skip_missing=False, block_index=None): +def getrawtransaction( + tx_hash: str, verbose: bool = False, skip_missing: bool = False, block_index: int = None +): if block_index and block_index in prefetcher.BLOCKCHAIN_CACHE: return prefetcher.BLOCKCHAIN_CACHE[block_index]["raw_transactions"][tx_hash] @@ -124,14 +126,15 @@ def ensure_script_pub_key_for_inputs(coins): return coins -def fee_per_kb(conf_target, mode, nblocks=None): +def fee_per_kb( + conf_target: int = config.ESTIMATE_FEE_CONF_TARGET, mode: str = config.ESTIMATE_FEE_MODE +): """ - :param conf_target: - :param mode: - :return: fee_per_kb in satoshis, or None when unable to determine + Get the fee per kilobyte for a transaction to be confirmed in `conf_target` blocks. + :param conf_target: Confirmation target in blocks (1 - 1008) + :param mode: The fee estimate mode. """ - - return backend().fee_per_kb(conf_target, mode, nblocks=nblocks) + return backend().fee_per_kb(conf_target, mode, nblocks=None) def deserialize(tx_hex): @@ -207,9 +210,12 @@ class MempoolError(Exception): pass -def get_unspent_txouts(source, unconfirmed=False, unspent_tx_hash=None): - """returns a list of unspent outputs for a specific address - @return: A list of dicts, with each entry in the dict having the following keys: +def get_unspent_txouts(source: str, unconfirmed: bool = False, unspent_tx_hash: str = None): + """ + Returns a list of unspent outputs for a specific address + :param source: The address to search for + :param unconfirmed: Include unconfirmed transactions + :param unspent_tx_hash: Filter by unspent_tx_hash """ unspent = backend().get_unspent_txouts(source) @@ -232,11 +238,22 @@ def get_unspent_txouts(source, unconfirmed=False, unspent_tx_hash=None): return unspent -def search_raw_transactions(address, unconfirmed=True, only_tx_hashes=False): +def search_raw_transactions(address, unconfirmed: bool = True, only_tx_hashes: bool = False): + """ + Returns all transactions involving a given address + :param address: The address to search for + :param unconfirmed: Include unconfirmed transactions + :param only_tx_hashes: Return only the tx hashes + """ return backend().search_raw_transactions(address, unconfirmed, only_tx_hashes) -def get_oldest_tx(address, block_index=None): +def get_oldest_tx(address: str, block_index: int = None): + """ + Get the oldest transaction for an address. + :param address: The address to search for. + :param block_index: The block index to search from. + """ return backend().get_oldest_tx(address, block_index=block_index) diff --git a/counterparty-core/counterpartycore/lib/backend/addrindexrs.py b/counterparty-core/counterpartycore/lib/backend/addrindexrs.py index 2ea4fd4d9c..4bd492b0d3 100644 --- a/counterparty-core/counterpartycore/lib/backend/addrindexrs.py +++ b/counterparty-core/counterpartycore/lib/backend/addrindexrs.py @@ -667,7 +667,7 @@ def get_unspent_txouts(source): # ] # # } -def search_raw_transactions(address, unconfirmed=True, only_tx_hashes=False): +def search_raw_transactions(address, unconfirmed: bool = True, only_tx_hashes: bool = False): hsh = _address_to_hash(address) txs = INDEXER_THREAD.send({"method": "blockchain.scripthash.get_history", "params": [hsh]})[ "result" @@ -801,7 +801,7 @@ def get_oldest_tx(self, address, timeout=ADDRINDEXRS_CLIENT_TIMEOUT, block_index ADDRINDEXRS_CLIENT = None -def get_oldest_tx(address, block_index=None): +def get_oldest_tx(address: str, block_index: int = None): current_block_index = block_index or ledger.CURRENT_BLOCK_INDEX hardcoded_key = f"{current_block_index}-{address}" if hardcoded_key in GET_OLDEST_TX_HARDCODED: diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index 750c158d70..6700c1a560 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -100,6 +100,15 @@ def get_events(db, block_index=None, event=None, event_index=None, last=None, li return events +def get_all_events(db, last: int = None, limit: int = 100): + """ + Returns all events + :param int last: The last event index to return + :param int limit: The maximum number of events to return + """ + return get_events(db, last=last, limit=limit) + + def get_events_by_block(db, block_index: int): """ Returns the events of a block @@ -117,6 +126,24 @@ def get_events_by_block_and_event(db, block_index: int, event: str): return get_events(db, block_index=block_index, event=event) +def get_event_by_index(db, event_index: int): + """ + Returns the event of an index + :param int event_index: The index of the event to return + """ + return get_events(db, event_index=event_index) + + +def get_events_by_event(db, event: str, last: int = None, limit: int = 100): + """ + Returns the events filtered by event name + :param str event: The event to return + :param int last: The last event index to return + :param int limit: The maximum number of events to return + """ + return get_events(db, event=event, last=last, limit=limit) + + def get_mempool_events(db, event_name=None): cursor = db.cursor() where = [] @@ -139,6 +166,21 @@ def get_mempool_events(db, event_name=None): return events +def get_all_mempool_events(db): + """ + Returns all mempool events + """ + return get_mempool_events(db) + + +def get_mempool_events_by_event(db, event_name: str): + """ + Returns the mempool events filtered by event name + :param str event_name: The event to return + """ + return get_mempool_events(db, event_name=event_name) + + def get_events_counts(db, block_index=None): cursor = db.cursor() bindings = [] @@ -162,6 +204,13 @@ def get_events_counts_by_block(db, block_index: int): return get_events_counts(db, block_index=block_index) +def get_all_events_counts(db): + """ + Returns the event counts of all blocks + """ + return get_events_counts(db) + + # we are using a function here for testing purposes def curr_time(): return int(time.time()) @@ -483,6 +532,14 @@ def get_credits_by_address(db, address: str): return get_credits(db, address=address) +def get_credits_by_asset(db, asset: str): + """ + Returns the credits of an asset + :param str asset: The asset to return + """ + return get_credits(db, asset=asset) + + def get_debits(db, address=None, asset=None, block_index=None, tx_index=None): return get_credits_or_debits(db, "debits", address, asset, block_index, tx_index) @@ -503,6 +560,14 @@ def get_debits_by_address(db, address: str): return get_debits(db, address=address) +def get_debits_by_asset(db, asset: str): + """ + Returns the debits of an asset + :param str asset: The asset to return + """ + return get_debits(db, asset=asset) + + def get_sends_or_receives( db, source=None, destination=None, asset=None, block_index=None, status="valid" ): @@ -538,6 +603,14 @@ def get_sends_or_receives_by_block(db, block_index: int): return get_sends_or_receives(db, block_index=block_index) +def get_sends_or_receives_by_asset(db, asset: str): + """ + Returns the sends of an asset + :param str asset: The asset to return + """ + return get_sends_or_receives(db, asset=asset) + + def get_sends(db, address=None, asset=None, block_index=None, status="valid"): return get_sends_or_receives( db, source=address, asset=asset, block_index=block_index, status=status @@ -867,7 +940,12 @@ def get_asset_issued(db, address): return cursor.fetchall() -def get_asset_balances(db, asset, exclude_zero_balances=True): +def get_asset_balances(db, asset: str, exclude_zero_balances: bool = True): + """ + Returns the asset balances + :param str asset: The asset to return + :param bool exclude_zero_balances: Whether to exclude zero balances + """ cursor = db.cursor() query = """ SELECT address, asset, quantity, MAX(rowid) @@ -901,7 +979,11 @@ def get_asset_issuances_quantity(db, asset): return issuances[0]["issuances_count"] -def get_asset_info(db, asset): +def get_asset_info(db, asset: str): + """ + Returns the asset information + :param str asset: The asset to return + """ asset_name = resolve_subasset_longname(db, asset) # Defaults. @@ -988,6 +1070,14 @@ def get_issuances_by_block(db, block_index: int): return get_issuances(db, block_index=block_index) +def get_issuances_by_asset(db, asset: str): + """ + Returns the issuances of an asset + :param str asset: The asset to return + """ + return get_issuances(db, asset=asset) + + def get_assets_by_longname(db, asset_longname): cursor = db.cursor() query = """ @@ -999,7 +1089,17 @@ def get_assets_by_longname(db, asset_longname): return cursor.fetchall() -def get_valid_assets(db): +def get_valid_assets(db, offset: int = 0, limit: int = 100): + """ + Returns the valid assets + :param int offset: The offset of the assets to return + :param int limit: The limit of the assets to return + """ + try: + int(offset) + int(limit) + except ValueError as e: + raise exceptions.InvalidArgument("Invalid offset or limit parameter") from e cursor = db.cursor() query = """ SELECT asset, asset_longname @@ -1012,7 +1112,11 @@ def get_valid_assets(db): return cursor.fetchall() -def get_dividends(db, asset): +def get_dividends(db, asset: str): + """ + Returns the dividends of an asset + :param str asset: The asset to return + """ cursor = db.cursor() query = """ SELECT * FROM dividends @@ -1104,6 +1208,38 @@ def get_burns(db, address: str = None, status: str = "valid"): return cursor.fetchall() +def get_burns_by_address(db, address: str): + """ + Returns the burns of an address + :param str address: The address to return + """ + return get_burns(db, address=address) + + +def get_all_burns(db, status: str = "valid", offset: int = 0, limit: int = 100): + """ + Returns the burns + :param str status: The status of the burns to return + :param int offset: The offset of the burns to return + :param int limit: The limit of the burns to return + """ + try: + int(offset) + int(limit) + except ValueError as e: + raise exceptions.InvalidArgument("Invalid offset or limit parameter") from e + cursor = db.cursor() + query = """ + SELECT * FROM burns + WHERE status = ? + ORDER BY tx_index ASC + LIMIT ? OFFSET ? + """ + bindings = (status, limit, offset) + cursor.execute(query, bindings) + return cursor.fetchall() + + ###################################### # BLOCKS AND TRANSACTIONS # ###################################### @@ -1455,6 +1591,14 @@ def get_dispenser_info(db, tx_hash=None, tx_index=None): return cursor.fetchall() +def get_dispenser_info_by_tx_hash(db, tx_hash: str): + """ + Returns the dispenser information by tx_hash + :param str tx_hash: The hash of the dispenser to return + """ + return get_dispenser_info(db, tx_hash=tx_hash) + + def get_refilling_count(db, dispenser_tx_hash): cursor = db.cursor() query = """ @@ -1673,6 +1817,14 @@ def get_dispenses_by_block(db, block_index: int): return get_dispenses(db, block_index=block_index) +def get_dispenses_by_dispenser(db, tx_hash: str): + """ + Returns the dispenses of a dispenser + :param str tx_hash: The hash of the dispenser to return + """ + return get_dispenses(db, dispenser_tx_hash=tx_hash) + + ### UPDATES ### @@ -1727,7 +1879,11 @@ def get_bet_matches_to_expire(db, block_time): return cursor.fetchall() -def get_bet(db, tx_hash): +def get_bet(db, tx_hash: str): + """ + Returns the information of a bet + :param str tx_hash: The hash of the bet to return + """ cursor = db.cursor() query = """ SELECT * FROM bets @@ -1792,7 +1948,12 @@ def get_bet_by_feed(db, address: str, status: str = "open"): return cursor.fetchall() -def get_bet_matches_by_bet(db, tx_hash, status="pending"): +def get_bet_matches_by_bet(db, tx_hash: str, status: str = "pending"): + """ + Returns the bet matches of a bet + :param str tx_hash: The hash of the bet + :param str status: The status of the bet matches + """ cursor = db.cursor() query = """ SELECT * FROM ( @@ -1807,7 +1968,11 @@ def get_bet_matches_by_bet(db, tx_hash, status="pending"): return cursor.fetchall() -def get_resolutions_by_bet(db, tx_hash): +def get_resolutions_by_bet(db, tx_hash: str): + """ + Returns the resolutions of a bet + :param str tx_hash: The hash of the bet + """ cursor = db.cursor() query = """ SELECT * @@ -1898,7 +2063,11 @@ def get_order_matches_to_expire(db, block_index): return cursor.fetchall() -def get_order(db, tx_hash): +def get_order(db, tx_hash: str): + """ + Returns the information of an order + :param str tx_hash: The hash of the order to return + """ cursor = db.cursor() query = """ SELECT * FROM orders @@ -1969,7 +2138,12 @@ def get_matching_orders(db, tx_hash, give_asset, get_asset): return cursor.fetchall() -def get_orders_by_asset(db, asset, status="open"): +def get_orders_by_asset(db, asset: str, status: str = "open"): + """ + Returns the orders of an asset + :param str asset: The asset to return + :param str status: The status of the orders to return + """ cursor = db.cursor() query = """ SELECT * FROM ( @@ -1984,7 +2158,12 @@ def get_orders_by_asset(db, asset, status="open"): return cursor.fetchall() -def get_order_matches_by_order(db, tx_hash, status="pending"): +def get_order_matches_by_order(db, tx_hash: str, status: str = "pending"): + """ + Returns the order matches of an order + :param str tx_hash: The hash of the order + :param str status: The status of the order matches to return + """ cursor = db.cursor() query = """ SELECT * FROM ( @@ -1999,7 +2178,11 @@ def get_order_matches_by_order(db, tx_hash, status="pending"): return cursor.fetchall() -def get_btcpays_by_order(db, tx_hash): +def get_btcpays_by_order(db, tx_hash: str): + """ + Returns the BTC pays of an order + :param str tx_hash: The hash of the order + """ cursor = db.cursor() query = """ SELECT * @@ -2439,7 +2622,11 @@ def holders(db, asset, exclude_empty_holders=False): return holders -def get_asset_holders(db, asset): +def get_asset_holders(db, asset: str): + """ + Returns the holders of an asset + :param str asset: The asset to return + """ asset_name = resolve_subasset_longname(db, asset) return holders(db, asset_name, True) From 1c3b049a06dbece814ce8dc61f04f72d050eb869 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 19 Apr 2024 14:38:31 +0200 Subject: [PATCH 058/280] One route, one function. Even for compose functions --- .../counterpartycore/lib/api/routes.py | 198 +++++++++--------- .../counterpartycore/lib/api/util.py | 23 ++ .../counterpartycore/lib/transaction.py | 142 ++++++++++--- 3 files changed, 232 insertions(+), 131 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index 2b0b2d3dff..821a2e24fc 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -6,105 +6,101 @@ from counterpartycore.lib.api import util # Define the API routes except root (`/`) defined in `api_server.py` -ROUTES = { - ### /blocks ### - "/blocks": ledger.get_blocks, - "/blocks/": ledger.get_block, - "/blocks//transactions": ledger.get_transactions_by_block, - "/blocks//events": ledger.get_events_by_block, - "/blocks//events/counts": ledger.get_events_counts_by_block, - "/blocks//events/": ledger.get_events_by_block_and_event, - "/blocks//credits": ledger.get_credits_by_block, - "/blocks//debits": ledger.get_debits_by_block, - "/blocks//expirations": ledger.get_expirations, - "/blocks//cancels": ledger.get_cancels, - "/blocks//destructions": ledger.get_destructions, - "/blocks//issuances": ledger.get_issuances_by_block, - "/blocks//sends": ledger.get_sends_or_receives_by_block, - "/blocks//dispenses": ledger.get_dispenses_by_block, - "/blocks//sweeps": ledger.get_sweeps_by_block, - ### /transactions ### - "/transactions/info": transaction.info, - "/transactions/unpack": transaction.unpack, - "/transactions/": ledger.get_transaction, - ### /addresses ### - "/addresses/
/balances": ledger.get_address_balances, - "/addresses/
/balances/": ledger.get_balance_object, - "/addresses/
/credits": ledger.get_credits_by_address, - "/addresses/
/debits": ledger.get_debits_by_address, - "/addresses/
/bets": ledger.get_bet_by_feed, - "/addresses/
/broadcasts": ledger.get_broadcasts_by_source, - "/addresses/
/burns": ledger.get_burns_by_address, - "/addresses/
/sends": ledger.get_send_by_address, - "/addresses/
/receives": ledger.get_receive_by_address, - "/addresses/
/sends/": ledger.get_send_by_address_and_asset, - "/addresses/
/receives/": ledger.get_receive_by_address_and_asset, - "/addresses/
/dispensers": ledger.get_dispensers_by_address, - "/addresses/
/dispensers/": ledger.get_dispensers_by_address_and_asset, - "/addresses/
/sweeps": ledger.get_sweeps_by_address, - ### /assets ### - "/assets": ledger.get_valid_assets, - "/assets/": ledger.get_asset_info, - "/assets//balances": ledger.get_asset_balances, - "/assets//balances/
": ledger.get_balance_object, - "/assets//orders": ledger.get_orders_by_asset, - "/assets//credits": ledger.get_credits_by_asset, - "/assets//debits": ledger.get_debits_by_asset, - "/assets//dividends": ledger.get_dividends, - "/assets//issuances": ledger.get_issuances_by_asset, - "/assets//sends": ledger.get_sends_or_receives_by_asset, - "/assets//dispensers": ledger.get_dispensers_by_asset, - "/assets//dispensers/
": ledger.get_dispensers_by_address_and_asset, - "/assets//holders": ledger.get_asset_holders, - ### /orders ### - "/orders/": ledger.get_order, - "/orders//matches": ledger.get_order_matches_by_order, - "/orders//btcpays": ledger.get_btcpays_by_order, - ### /bets ### - "/bets/": ledger.get_bet, - "/bets//matches": ledger.get_bet_matches_by_bet, - "/bets//resolutions": ledger.get_resolutions_by_bet, - ### /burns ### - "/burns": ledger.get_all_burns, - ### /dispensers ### - "/dispensers/": ledger.get_dispenser_info_by_tx_hash, - "/dispensers//dispenses": ledger.get_dispenses_by_dispenser, - ### /events ### - "/events": ledger.get_all_events, - "/events/": ledger.get_event_by_index, - "/events/counts": ledger.get_all_events_counts, - "/events/": ledger.get_events_by_event, - ### /healthz ### - "/healthz": util.handle_healthz_route, - ### /backend ### - "/backend/addresses/
/transactions": backend.search_raw_transactions, - "/backend/addresses/
/transactions/oldest": backend.get_oldest_tx, - "/backend/addresses/
/utxos": backend.get_unspent_txouts, - "/backend/addresses/
/pubkey": util.pubkeyhash_to_pubkey, - "/backend/transactions/": util.get_raw_transaction, - "/backend/estimatesmartfee": backend.fee_per_kb, - ### /mempool ### - "/mempool/events": ledger.get_all_mempool_events, - "/mempool/events/": ledger.get_mempool_events_by_event, -} - -for path, route in ROUTES.items(): - if not isinstance(route, dict): - ROUTES[path] = { - "function": route, - } - -# Add compose routes for each transaction type -### /address//compose/ ### -for transaction_name, compose_function in transaction.COMPOSE_FUNCTIONS.items(): - ROUTES[f"/address//compose/{transaction_name}"] = { - "function": compose_function, - "pass_all_args": True, +ROUTES = util.prepare_routes( + { + ### /blocks ### + "/blocks": ledger.get_blocks, + "/blocks/": ledger.get_block, + "/blocks//transactions": ledger.get_transactions_by_block, + "/blocks//events": ledger.get_events_by_block, + "/blocks//events/counts": ledger.get_events_counts_by_block, + "/blocks//events/": ledger.get_events_by_block_and_event, + "/blocks//credits": ledger.get_credits_by_block, + "/blocks//debits": ledger.get_debits_by_block, + "/blocks//expirations": ledger.get_expirations, + "/blocks//cancels": ledger.get_cancels, + "/blocks//destructions": ledger.get_destructions, + "/blocks//issuances": ledger.get_issuances_by_block, + "/blocks//sends": ledger.get_sends_or_receives_by_block, + "/blocks//dispenses": ledger.get_dispenses_by_block, + "/blocks//sweeps": ledger.get_sweeps_by_block, + ### /transactions ### + "/transactions/info": transaction.info, + "/transactions/unpack": transaction.unpack, + "/transactions/": ledger.get_transaction, + ### /addresses ### + "/addresses/
/balances": ledger.get_address_balances, + "/addresses/
/balances/": ledger.get_balance_object, + "/addresses/
/credits": ledger.get_credits_by_address, + "/addresses/
/debits": ledger.get_debits_by_address, + "/addresses/
/bets": ledger.get_bet_by_feed, + "/addresses/
/broadcasts": ledger.get_broadcasts_by_source, + "/addresses/
/burns": ledger.get_burns_by_address, + "/addresses/
/sends": ledger.get_send_by_address, + "/addresses/
/receives": ledger.get_receive_by_address, + "/addresses/
/sends/": ledger.get_send_by_address_and_asset, + "/addresses/
/receives/": ledger.get_receive_by_address_and_asset, + "/addresses/
/dispensers": ledger.get_dispensers_by_address, + "/addresses/
/dispensers/": ledger.get_dispensers_by_address_and_asset, + "/addresses/
/sweeps": ledger.get_sweeps_by_address, + ### /address/
/compose/ ### + "/address/
/compose/bet": transaction.compose_bet, + # "/address/
/compose/broadcast": transaction.compose_broadcast, + # "/address/
/compose/btcpay": transaction.compose_btcpay, + # "/address/
/compose/burn": transaction.compose_burn, + # "/address/
/compose/cancel": transaction.compose_cancel, + # "/address/
/compose/destroy": transaction.compose_destroy, + # "/address/
/compose/dispenser": transaction.compose_dispenser, + # "/address/
/compose/dividend": transaction.compose_dividend, + # "/address/
/compose/issuance": transaction.compose_issuance, + # "/address/
/compose/order": transaction.compose_order, + # "/address/
/compose/send": transaction.compose_send, + # "/address/
/compose/rps": transaction.compose_rps, + # "/address/
/compose/rpsresolve": transaction.compose_rpsresolve, + # "/address/
/compose/sweep": transaction.compose_sweep, + ### /assets ### + "/assets": ledger.get_valid_assets, + "/assets/": ledger.get_asset_info, + "/assets//balances": ledger.get_asset_balances, + "/assets//balances/
": ledger.get_balance_object, + "/assets//orders": ledger.get_orders_by_asset, + "/assets//credits": ledger.get_credits_by_asset, + "/assets//debits": ledger.get_debits_by_asset, + "/assets//dividends": ledger.get_dividends, + "/assets//issuances": ledger.get_issuances_by_asset, + "/assets//sends": ledger.get_sends_or_receives_by_asset, + "/assets//dispensers": ledger.get_dispensers_by_asset, + "/assets//dispensers/
": ledger.get_dispensers_by_address_and_asset, + "/assets//holders": ledger.get_asset_holders, + ### /orders ### + "/orders/": ledger.get_order, + "/orders//matches": ledger.get_order_matches_by_order, + "/orders//btcpays": ledger.get_btcpays_by_order, + ### /bets ### + "/bets/": ledger.get_bet, + "/bets//matches": ledger.get_bet_matches_by_bet, + "/bets//resolutions": ledger.get_resolutions_by_bet, + ### /burns ### + "/burns": ledger.get_all_burns, + ### /dispensers ### + "/dispensers/": ledger.get_dispenser_info_by_tx_hash, + "/dispensers//dispenses": ledger.get_dispenses_by_dispenser, + ### /events ### + "/events": ledger.get_all_events, + "/events/": ledger.get_event_by_index, + "/events/counts": ledger.get_all_events_counts, + "/events/": ledger.get_events_by_event, + ### /healthz ### + "/healthz": util.handle_healthz_route, + ### /backend ### + "/backend/addresses/
/transactions": backend.search_raw_transactions, + "/backend/addresses/
/transactions/oldest": backend.get_oldest_tx, + "/backend/addresses/
/utxos": backend.get_unspent_txouts, + "/backend/addresses/
/pubkey": util.pubkeyhash_to_pubkey, + "/backend/transactions/": util.get_raw_transaction, + "/backend/estimatesmartfee": backend.fee_per_kb, + ### /mempool ### + "/mempool/events": ledger.get_all_mempool_events, + "/mempool/events/": ledger.get_mempool_events_by_event, } - -# Add description and args to each route -for path, route in ROUTES.items(): - if "/compose/" in path: - continue - ROUTES[path]["description"] = util.get_function_description(route["function"]) - ROUTES[path]["args"] = util.prepare_route_args(route["function"]) +) diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index 8e82357c07..06d0fa0713 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -150,6 +150,18 @@ def prepare_route_args(function): function_args = inspect.signature(function).parameters args_description = get_args_description(function) for arg_name, arg in function_args.items(): + if arg_name == "construct_args": + for carg_name, carg_info in transaction.COMPOSE_COMMONS_ARGS.items(): + args.append( + { + "name": carg_name, + "type": carg_info[0].__name__, + "default": carg_info[1], + "description": carg_info[2], + "required": False, + } + ) + continue annotation = arg.annotation if annotation is inspect.Parameter.empty: continue @@ -170,3 +182,14 @@ def prepare_route_args(function): def get_function_description(function): docstring = parse_docstring(function.__doc__) return docstring.description + + +def prepare_routes(routes): + prepared_routes = {} + for route, function in routes.items(): + prepared_routes[route] = { + "function": function, + "description": get_function_description(function), + "args": prepare_route_args(function), + } + return prepared_routes diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index 62a07fa449..c9c52463eb 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -6,7 +6,6 @@ import binascii import decimal -import functools import hashlib import inspect import io @@ -957,6 +956,78 @@ def get_dust_return_pubkey(source, provided_pubkeys, encoding): return dust_return_pubkey +COMPOSE_COMMONS_ARGS = { + "encoding": (str, "auto", "The encoding method to use"), + "fee_per_kb": ( + int, + None, + "The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi)", + ), + "regular_dust_size": ( + int, + config.DEFAULT_REGULAR_DUST_SIZE, + "Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output.", + ), + "multisig_dust_size": ( + int, + config.DEFAULT_MULTISIG_DUST_SIZE, + "Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output", + ), + "op_return_value": ( + int, + config.DEFAULT_OP_RETURN_VALUE, + "The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away", + ), + "pubkey": ( + str, + None, + "The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash.", + ), + "allow_unconfirmed_inputs": ( + bool, + False, + "Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs", + ), + "fee": ( + int, + None, + "If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose", + ), + "fee_provided": ( + int, + 0, + "If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value", + ), + "unspent_tx_hash": ( + str, + None, + "When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs", + ), + "dust_return_pubkey": ( + str, + None, + "The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception", + ), + "disable_utxo_locks": ( + bool, + False, + "By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs", + ), + "extended_tx_info": ( + bool, + False, + "When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee", + ), + "p2sh_pretx_txid": ( + str, + None, + "The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction", + ), + "old_style_api": (bool, True, "Use the old style API"), + "segwit": (bool, False, "Use segwit"), +} + + def split_compose_arams(**kwargs): transaction_args = {} common_args = {} @@ -980,27 +1051,6 @@ def get_default_args(func): } -COMPOSE_COMMONS_ARGS = { - "encoding": (str, "auto"), - "fee_per_kb": (int, None), - "estimate_fee_per_kb": (int, None), - "regular_dust_size": (int, config.DEFAULT_REGULAR_DUST_SIZE), - "multisig_dust_size": (int, config.DEFAULT_MULTISIG_DUST_SIZE), - "op_return_value": (int, config.DEFAULT_OP_RETURN_VALUE), - "pubkey": (str, None), - "allow_unconfirmed_inputs": (bool, False), - "fee": (int, None), - "fee_provided": (int, 0), - "unspent_tx_hash": (str, None), - "dust_return_pubkey": (str, None), - "disable_utxo_locks": (bool, False), - "extended_tx_info": (bool, False), - "p2sh_pretx_txid": (str, None), - "old_style_api": (bool, True), - "segwit": (bool, False), -} - - def compose_transaction( db, name, @@ -1142,17 +1192,49 @@ def compose(db, source, transaction_name, **kwargs): return compose_transaction(db, name=transaction_name, params=transaction_args, **common_args) -COMPOSE_FUNCTIONS = {} -for transaction_name in COMPOSABLE_TRANSACTIONS: - COMPOSE_FUNCTIONS[transaction_name] = functools.partial( - compose, transaction_name=transaction_name +def compose_bet( + db, + address: str, + feed_address: str, + bet_type: int, + deadline: int, + wager_quantity: int, + counterwager_quantity: int, + expiration: int, + leverage: int = 5040, + target_value: float = None, + **construct_args, +): + """ + Composes a transaction to issue a bet against a feed. + :param address: The address that will make the bet + :param feed_address: The address that hosts the feed to be bet on + :param bet_type: Bet 0 for Bullish CFD (deprecated), 1 for Bearish CFD (deprecated), 2 for Equal, 3 for NotEqual + :param deadline: The time at which the bet should be decided/settled, in Unix time (seconds since epoch) + :param wager_quantity: The quantities of XCP to wager (in satoshis, hence integer). + :param counterwager_quantity: The minimum quantities of XCP to be wagered against, for the bets to match + :param target_value: Target value for Equal/NotEqual bet + :param leverage: Leverage, as a fraction of 5040 + :param expiration: The number of blocks after which the bet expires if it remains unmatched + """ + return compose_transaction( + db, + name="bet", + params={ + "source": address, + "feed_address": feed_address, + "bet_type": bet_type, + "deadline": deadline, + "wager_quantity": wager_quantity, + "counterwager_quantity": counterwager_quantity, + "target_value": target_value, + "leverage": leverage, + "expiration": expiration, + }, + **construct_args, ) -def get_compose_common_args(): - return [(name, value[0], value[1]) for name, value in COMPOSE_COMMONS_ARGS.items()] - - def info(db, rawtransaction: str, block_index: int = None): """ Returns Counterparty information from a raw transaction in hex format. From d89d5f3d3c9262cb4e8a6f4cff36e46722b2a65e Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 19 Apr 2024 15:26:58 +0200 Subject: [PATCH 059/280] progress in compose routes --- .../counterpartycore/lib/api/routes.py | 8 +-- .../lib/messages/broadcast.py | 2 +- .../counterpartycore/lib/transaction.py | 68 +++++++++++++++++++ 3 files changed, 73 insertions(+), 5 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index 821a2e24fc..8c02b2384b 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -45,10 +45,10 @@ "/addresses/
/sweeps": ledger.get_sweeps_by_address, ### /address/
/compose/ ### "/address/
/compose/bet": transaction.compose_bet, - # "/address/
/compose/broadcast": transaction.compose_broadcast, - # "/address/
/compose/btcpay": transaction.compose_btcpay, - # "/address/
/compose/burn": transaction.compose_burn, - # "/address/
/compose/cancel": transaction.compose_cancel, + "/address/
/compose/broadcast": transaction.compose_broadcast, + "/address/
/compose/btcpay": transaction.compose_btcpay, + "/address/
/compose/burn": transaction.compose_burn, + "/address/
/compose/cancel": transaction.compose_cancel, # "/address/
/compose/destroy": transaction.compose_destroy, # "/address/
/compose/dispenser": transaction.compose_dispenser, # "/address/
/compose/dividend": transaction.compose_dividend, diff --git a/counterparty-core/counterpartycore/lib/messages/broadcast.py b/counterparty-core/counterpartycore/lib/messages/broadcast.py index 482cc0a6c2..0b55e0eee1 100644 --- a/counterparty-core/counterpartycore/lib/messages/broadcast.py +++ b/counterparty-core/counterpartycore/lib/messages/broadcast.py @@ -135,7 +135,7 @@ def validate(db, source, timestamp, value, fee_fraction_int, text, block_index): return problems -def compose(db, source: str, timestamp: int, value: int, fee_fraction: float, text: str): +def compose(db, source: str, timestamp: int, value: float, fee_fraction: float, text: str): # Store the fee fraction as an integer. fee_fraction_int = int(fee_fraction * 1e8) diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index c9c52463eb..6b245d9029 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -1235,6 +1235,74 @@ def compose_bet( ) +def compose_broadcast( + db, address: str, timestamp: int, value: float, fee_fraction: float, text: str, **construct_args +): + """ + Composes a transaction to broadcast textual and numerical information to the network. + :param address: The address that will be sending (must have the necessary quantity of the specified asset) + :param timestamp: The timestamp of the broadcast, in Unix time + :param value: Numerical value of the broadcast + :param fee_fraction: How much of every bet on this feed should go to its operator; a fraction of 1, (i.e. 0.05 is five percent) + :param text: The textual part of the broadcast + """ + return compose_transaction( + db, + name="broadcast", + params={ + "source": address, + "timestamp": timestamp, + "value": value, + "fee_fraction": fee_fraction, + "text": text, + }, + **construct_args, + ) + + +def compose_btcpay(db, address: str, order_match_id: str, **construct_args): + """ + Composes a transaction to pay for a BTC order match. + :param address: The address that will be sending the payment + :param order_match_id: The ID of the order match to pay for + """ + return compose_transaction( + db, + name="btcpay", + params={"source": address, "order_match_id": order_match_id}, + **construct_args, + ) + + +def compose_burn(db, address: str, quantity: int, overburn: bool = False, **construct_args): + """ + Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, possible between blocks 278310 and 283810; on testnet it is still available). + :param address: The address with the BTC to burn + :param quantity: The quantities of BTC to burn (1 BTC maximum burn per address) + :param overburn: Whether to allow the burn to exceed 1 BTC for the address + """ + return compose_transaction( + db, + name="burn", + params={"source": address, "quantity": quantity, "overburn": overburn}, + **construct_args, + ) + + +def compose_cancel(db, address: str, offer_hash: str, **construct_args): + """ + Composes a transaction to cancel an open order or bet. + :param address: The address that placed the order/bet to be cancelled + :param offer_hash: The hash of the order/bet to be cancelled + """ + return compose_transaction( + db, + name="cancel", + params={"source": address, "offer_hash": offer_hash}, + **construct_args, + ) + + def info(db, rawtransaction: str, block_index: int = None): """ Returns Counterparty information from a raw transaction in hex format. From 666f6cbdecc5996c5f3bb18c2ab3478e108928cf Mon Sep 17 00:00:00 2001 From: matt marcello Date: Fri, 19 Apr 2024 10:33:19 -0400 Subject: [PATCH 060/280] quit txcache miss logging. remove unused vars --- .../counterpartycore/lib/backend/addrindexrs.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/backend/addrindexrs.py b/counterparty-core/counterpartycore/lib/backend/addrindexrs.py index 2ea4fd4d9c..fed8580729 100644 --- a/counterparty-core/counterpartycore/lib/backend/addrindexrs.py +++ b/counterparty-core/counterpartycore/lib/backend/addrindexrs.py @@ -314,12 +314,8 @@ def getrawtransaction_batch(txhash_list, verbose=False, skip_missing=False, _ret if raw_transactions_cache[tx_hash] is not None else None ) - except KeyError as e: # shows up most likely due to finickyness with addrindex not always returning results that we need... - _hash = hashlib.md5( - json.dumps(list(txhash_list)).encode(), usedforsecurity=False - ).hexdigest() - _list = list(txhash_list.difference(noncached_txhashes)) - _logger.exception(f"tx missing in rawtx cache: {e}") + except KeyError: # shows up most likely due to finickyness with addrindex not always returning results that we need... + _logger.debug(f"tx missing in rawtx cache: {tx_hash}") if _retry < GETRAWTRANSACTION_MAX_RETRIES: # try again time.sleep( 0.05 * (_retry + 1) From d989d7fff162c315cf391d88f9ea5d5a334fe88b Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 19 Apr 2024 17:34:43 +0200 Subject: [PATCH 061/280] finish compose functions and routes --- .../counterpartycore/lib/api/routes.py | 17 +- .../counterpartycore/lib/messages/issuance.py | 10 +- .../counterpartycore/lib/messages/send.py | 4 +- .../counterpartycore/lib/transaction.py | 264 +++++++++++++++++- 4 files changed, 277 insertions(+), 18 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index 8c02b2384b..8b32a86a88 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -49,15 +49,14 @@ "/address/
/compose/btcpay": transaction.compose_btcpay, "/address/
/compose/burn": transaction.compose_burn, "/address/
/compose/cancel": transaction.compose_cancel, - # "/address/
/compose/destroy": transaction.compose_destroy, - # "/address/
/compose/dispenser": transaction.compose_dispenser, - # "/address/
/compose/dividend": transaction.compose_dividend, - # "/address/
/compose/issuance": transaction.compose_issuance, - # "/address/
/compose/order": transaction.compose_order, - # "/address/
/compose/send": transaction.compose_send, - # "/address/
/compose/rps": transaction.compose_rps, - # "/address/
/compose/rpsresolve": transaction.compose_rpsresolve, - # "/address/
/compose/sweep": transaction.compose_sweep, + "/address/
/compose/destroy": transaction.compose_destroy, + "/address/
/compose/dispenser": transaction.compose_dispenser, + "/address/
/compose/dividend": transaction.compose_dividend, + "/address/
/compose/issuance": transaction.compose_issuance, + "/address/
/compose/mpma": transaction.compose_mpma, + "/address/
/compose/order": transaction.compose_order, + "/address/
/compose/send": transaction.compose_send, + "/address/
/compose/sweep": transaction.compose_sweep, ### /assets ### "/assets": ledger.get_valid_assets, "/assets/": ledger.get_asset_info, diff --git a/counterparty-core/counterpartycore/lib/messages/issuance.py b/counterparty-core/counterpartycore/lib/messages/issuance.py index 0f07948950..81d1a6ff81 100644 --- a/counterparty-core/counterpartycore/lib/messages/issuance.py +++ b/counterparty-core/counterpartycore/lib/messages/issuance.py @@ -350,11 +350,11 @@ def compose( source: str, asset: str, quantity: int, - transfer_destination: str | None = None, - divisible: bool | None = None, - lock: bool | None = None, - reset: bool | None = None, - description: str | None = None, + transfer_destination: str = None, + divisible: bool = None, + lock: bool = None, + reset: bool = None, + description: str = None, ): # Callability is deprecated, so for re‐issuances set relevant parameters # to old values; for first issuances, make uncallable. diff --git a/counterparty-core/counterpartycore/lib/messages/send.py b/counterparty-core/counterpartycore/lib/messages/send.py index 69aacd2883..decce16caa 100644 --- a/counterparty-core/counterpartycore/lib/messages/send.py +++ b/counterparty-core/counterpartycore/lib/messages/send.py @@ -117,9 +117,9 @@ def compose( destination: str, asset: str, quantity: int, - memo: str | None = None, + memo: str = None, memo_is_hex: bool = False, - use_enhanced_send: bool | None = None, + use_enhanced_send: bool = None, ): # special case - enhanced_send replaces send by default when it is enabled # but it can be explicitly disabled with an API parameter diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index 6b245d9029..0192826379 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -1176,10 +1176,9 @@ def compose_transaction( "dispenser", "dividend", "issuance", + "mpma", "order", "send", - "rps", - "rpsresolve", "sweep", ] @@ -1303,6 +1302,267 @@ def compose_cancel(db, address: str, offer_hash: str, **construct_args): ) +def compose_destroy(db, address: str, asset: str, quantity: int, tag: str, **construct_args): + """ + Composes a transaction to destroy a quantity of an asset. + :param address: The address that will be sending the asset to be destroyed + :param asset: The asset to be destroyed + :param quantity: The quantity of the asset to be destroyed + :param tag: A tag for the destruction + """ + return compose_transaction( + db, + name="destroy", + params={"source": address, "asset": asset, "quantity": quantity, "tag": tag}, + **construct_args, + ) + + +def compose_dispenser( + db, + address: str, + asset: str, + give_quantity: int, + escrow_quantity: int, + mainchainrate: int, + status: int, + open_address: str = None, + oracle_address: str = None, + **construct_args, +): + """ + Opens or closes a dispenser for a given asset at a given rate of main chain asset (BTC). Escrowed quantity on open must be equal or greater than give_quantity. It is suggested that you escrow multiples of give_quantity to ease dispenser operation. + :param address: The address that will be dispensing (must have the necessary escrow_quantity of the specified asset) + :param asset: The asset or subasset to dispense + :param give_quantity: The quantity of the asset to dispense + :param escrow_quantity: The quantity of the asset to reserve for this dispenser + :param mainchainrate: The quantity of the main chain asset (BTC) per dispensed portion + :param status: The state of the dispenser. 0 for open, 1 for open using open_address, 10 for closed + :param open_address: The address that you would like to open the dispenser on + :param oracle_address: The address that you would like to use as a price oracle for this dispenser + """ + return compose_transaction( + db, + name="dispenser", + params={ + "source": address, + "asset": asset, + "give_quantity": give_quantity, + "escrow_quantity": escrow_quantity, + "mainchainrate": mainchainrate, + "status": status, + "open_address": open_address, + "oracle_address": oracle_address, + }, + **construct_args, + ) + + +def compose_dividend( + db, address: str, quantity_per_unit: int, asset: str, dividend_asset: str, **construct_args +): + """ + Composes a transaction to issue a dividend to holders of a given asset. + :param address: The address that will be issuing the dividend (must have the ownership of the asset which the dividend is being issued on) + :param quantity_per_unit: The amount of dividend_asset rewarded + :param asset: The asset or subasset that the dividends are being rewarded on + :param dividend_asset: The asset or subasset that the dividends are paid in + """ + return compose_transaction( + db, + name="dividend", + params={ + "source": address, + "quantity_per_unit": quantity_per_unit, + "asset": asset, + "dividend_asset": dividend_asset, + }, + **construct_args, + ) + + +def compose_issuance( + db, + address: str, + asset: str, + quantity: int, + transfer_destination: str = None, + divisible: bool = True, + lock: bool = False, + reset: bool = False, + description: str = None, + **construct_args, +): + """ + Composes a transaction to Issue a new asset, issue more of an existing asset, lock an asset, reset existing supply, or transfer the ownership of an asset. + :param address: The address that will be issuing or transfering the asset + :param asset: The assets to issue or transfer. This can also be a subasset longname for new subasset issuances + :param quantity: The quantity of the asset to issue (set to 0 if transferring an asset) + :param transfer_destination: The address to receive the asset + :param divisible: Whether this asset is divisible or not (if a transfer, this value must match the value specified when the asset was originally issued) + :param lock: Whether this issuance should lock supply of this asset forever + :param reset: Wether this issuance should reset any existing supply + :param description: A textual description for the asset + """ + return compose_transaction( + db, + name="issuance", + params={ + "source": address, + "asset": asset, + "quantity": quantity, + "transfer_destination": transfer_destination, + "divisible": divisible, + "lock": lock, + "reset": reset, + "description": description, + }, + **construct_args, + ) + + +def compose_mpma( + db, + source: str, + assets: str, + destinations: str, + quantities: str, + memo: str, + memo_is_hex: bool, + **construct_args, +): + """ + Composes a transaction to send multiple payments to multiple addresses. + :param source: The address that will be sending (must have the necessary quantity of the specified asset) + :param assets: comma-separated list of assets to send + :param destinations: comma-separated list of addresses to send to + :param quantities: comma-separated list of quantities to send + :param memo: The Memo associated with this transaction + :param memo_is_hex: Whether the memo field is a hexadecimal string + """ + asset_list = assets.split(",") + destination_list = destinations.split(",") + quantity_list = quantities.split(",") + if len(asset_list) != len(destination_list) or len(asset_list) != len(quantity_list): + raise exceptions.ComposeError( + "The number of assets, destinations, and quantities must be equal" + ) + for quantity in quantity_list: + if not quantity.isdigit(): + raise exceptions.ComposeError("Quantity must be an integer") + asset_dest_quant_list = list(zip(asset_list, destination_list, quantity_list)) + + return compose_transaction( + db, + name="version.mpma", + params={ + "source": source, + "asset_dest_quant_list": asset_dest_quant_list, + "memo": memo, + "memo_is_hex": memo_is_hex, + }, + **construct_args, + ) + + +def compose_order( + db, + address: str, + give_asset: str, + give_quantity: int, + get_asset: str, + get_quantity: int, + expiration: int, + fee_required: int, + **construct_args, +): + """ + Composes a transaction to place an order on the distributed exchange. + :param address: The address that will be issuing the order request (must have the necessary quantity of the specified asset to give) + :param give_asset: The asset that will be given in the trade + :param give_quantity: The quantity of the asset that will be given + :param get_asset: The asset that will be received in the trade + :param get_quantity: The quantity of the asset that will be received + :param expiration: The number of blocks for which the order should be valid + :param fee_required: The miners’ fee required to be paid by orders for them to match this one; in BTC; required only if buying BTC (may be zero, though) + """ + return compose_transaction( + db, + name="order", + params={ + "source": address, + "give_asset": give_asset, + "give_quantity": give_quantity, + "get_asset": get_asset, + "get_quantity": get_quantity, + "expiration": expiration, + "fee_required": fee_required, + }, + **construct_args, + ) + + +def compose_send( + db, + address: str, + destination: str, + asset: str, + quantity: int, + memo: str = None, + memo_is_hex: bool = False, + use_enhanced_send: bool = True, + **construct_args, +): + """ + Composes a transaction to send a quantity of an asset to another address. + :param address: The address that will be sending (must have the necessary quantity of the specified asset) + :param destination: The address that will be receiving the asset + :param asset: The asset or subasset to send + :param quantity: The quantity of the asset to send + :param memo: The Memo associated with this transaction + :param memo_is_hex: Whether the memo field is a hexadecimal string + :param use_enhanced_send: If this is false, the construct a legacy transaction sending bitcoin dust + """ + return compose_transaction( + db, + name="send", + params={ + "source": address, + "destination": destination, + "asset": asset, + "quantity": quantity, + "memo": memo, + "memo_is_hex": memo_is_hex, + "use_enhanced_send": use_enhanced_send, + }, + **construct_args, + ) + + +def compose_sweep(db, address: str, destination: str, flags: int, memo: str, **construct_args): + """ + Composes a transaction to Sends all assets and/or transfer ownerships to a destination address. + :param address: The address that will be sending + :param destination: The address to receive the assets and/or ownerships + :param flags: An OR mask of flags indicating how the sweep should be processed. Possible flags are: + - FLAG_BALANCES: (integer) 1, specifies that all balances should be transferred. + - FLAG_OWNERSHIP: (integer) 2, specifies that all ownerships should be transferred. + - FLAG_BINARY_MEMO: (integer) 4, specifies that the memo is in binary/hex form. + :param memo: The Memo associated with this transaction + """ + return compose_transaction( + db, + name="sweep", + params={ + "source": address, + "destination": destination, + "flags": flags, + "memo": memo, + }, + **construct_args, + ) + + def info(db, rawtransaction: str, block_index: int = None): """ Returns Counterparty information from a raw transaction in hex format. From d5f6d437e84cd7b3f6a17430a8261889c7c8c610 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 19 Apr 2024 19:06:11 +0200 Subject: [PATCH 062/280] fix merge --- counterparty-core/counterpartycore/server.py | 1 - 1 file changed, 1 deletion(-) diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index c1f837913f..eb34ab5e84 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -614,7 +614,6 @@ def initialise_log_and_config(args): "utxo_locks_max_addresses": args.utxo_locks_max_addresses, "utxo_locks_max_age": args.utxo_locks_max_age, "no_mempool": args.no_mempool, - "skip_db_check": args.skip_db_check, } initialise_log_config( From 881505e8a2aa1b3d97926544b429db18e6f5413e Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 19 Apr 2024 19:13:05 +0200 Subject: [PATCH 063/280] disable missing params check for API v1 --- .../counterpartycore/lib/api/api_v1.py | 2 +- .../counterpartycore/lib/transaction.py | 25 +++++++++++++------ 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_v1.py b/counterparty-core/counterpartycore/lib/api/api_v1.py index 2f26926ed6..5c6a105741 100644 --- a/counterparty-core/counterpartycore/lib/api/api_v1.py +++ b/counterparty-core/counterpartycore/lib/api/api_v1.py @@ -599,7 +599,7 @@ def create_method(**kwargs): transaction.split_compose_arams(**kwargs) ) return transaction.compose_transaction( - self.db, name=tx, params=transaction_args, **common_args + self.db, name=tx, params=transaction_args, api_v1=True, **common_args ) except ( TypeError, diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index 0192826379..7828404c9f 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -1075,6 +1075,7 @@ def compose_transaction( p2sh_pretx_txid=None, old_style_api=True, segwit=False, + api_v1=False, ): """Create and return a transaction.""" @@ -1112,13 +1113,19 @@ def compose_transaction( compose_method = sys.modules[f"counterpartycore.lib.messages.{name}"].compose compose_params = inspect.getfullargspec(compose_method)[0] missing_params = [p for p in compose_params if p not in params and p != "db"] - if len(missing_params) > 0: - default_values = get_default_args(compose_method) + if api_v1: for param in missing_params: - if param in default_values: - params[param] = default_values[param] - else: - raise exceptions.ComposeError(f"missing parameters: {', '.join(missing_params)}") + params[param] = None + else: + if len(missing_params) > 0: + default_values = get_default_args(compose_method) + for param in missing_params: + if param in default_values: + params[param] = default_values[param] + else: + raise exceptions.ComposeError( + f"missing parameters: {', '.join(missing_params)}" + ) # dont override fee_per_kb if specified if fee_per_kb is not None: @@ -1183,12 +1190,14 @@ def compose_transaction( ] -def compose(db, source, transaction_name, **kwargs): +def compose(db, source, transaction_name, api_v1=False, **kwargs): if transaction_name not in COMPOSABLE_TRANSACTIONS: raise exceptions.TransactionError("Transaction type not composable.") transaction_args, common_args, _ = split_compose_arams(**kwargs) transaction_args["source"] = source - return compose_transaction(db, name=transaction_name, params=transaction_args, **common_args) + return compose_transaction( + db, name=transaction_name, params=transaction_args, api_v1=api_v1, **common_args + ) def compose_bet( From 7c7c0497848bddcb4ea71d1db1d9baf2492e548c Mon Sep 17 00:00:00 2001 From: Adam Krellenstein Date: Fri, 19 Apr 2024 19:29:56 +0200 Subject: [PATCH 064/280] Start Release Notes for v10.1.2 --- release-notes/release-notes-v10.1.2.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 release-notes/release-notes-v10.1.2.md diff --git a/release-notes/release-notes-v10.1.2.md b/release-notes/release-notes-v10.1.2.md new file mode 100644 index 0000000000..fadded4993 --- /dev/null +++ b/release-notes/release-notes-v10.1.2.md @@ -0,0 +1,21 @@ +# Release Notes - Counterparty Core v10.1.2 (2024-04-??) + + + +# Upgrading + + +# ChangeLog + +## Bugfixes +* Fix logging of some raw tracebacks (#1715) + +## Codebase + +## Command-Line Interface + +# Credits +* Ouziel Slama +* Adam Krellenstein +* Warren Puffett +* Matt Marcello From e91815c4624b8d0e1bbc7edcfcbc9738538dd313 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 19 Apr 2024 20:10:29 +0200 Subject: [PATCH 065/280] fixes --- .../counterpartycore/lib/api/api_server.py | 9 ++++-- .../counterpartycore/lib/api/routes.py | 28 +++++++++---------- .../counterpartycore/lib/api/util.py | 15 ++++++++++ .../counterpartycore/lib/kickstart/utils.py | 9 ------ .../counterpartycore/lib/ledger.py | 15 +++++----- .../counterpartycore/test/api_v2_test.py | 13 +++++++++ 6 files changed, 57 insertions(+), 32 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 9a258fd665..5e9e496c35 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -14,7 +14,12 @@ ledger, ) from counterpartycore.lib.api.routes import ROUTES -from counterpartycore.lib.api.util import get_backend_height, init_api_access_log, remove_rowids +from counterpartycore.lib.api.util import ( + get_backend_height, + init_api_access_log, + remove_rowids, + to_json, +) from flask import Flask, request from flask import g as flask_globals from flask_cors import CORS @@ -81,7 +86,7 @@ def inject_headers(result, return_code=None): if isinstance(result, flask.Response): response = result else: - response = flask.make_response(flask.jsonify(result), http_code) + response = flask.make_response(to_json(result), http_code) response.headers["X-COUNTERPARTY-HEIGHT"] = ledger.CURRENT_BLOCK_INDEX response.headers["X-COUNTERPARTY-READY"] = ledger.CURRENT_BLOCK_INDEX >= BACKEND_HEIGHT response.headers["X-BACKEND-HEIGHT"] = BACKEND_HEIGHT diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index 8b32a86a88..74c53a7584 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -43,20 +43,20 @@ "/addresses/
/dispensers": ledger.get_dispensers_by_address, "/addresses/
/dispensers/": ledger.get_dispensers_by_address_and_asset, "/addresses/
/sweeps": ledger.get_sweeps_by_address, - ### /address/
/compose/ ### - "/address/
/compose/bet": transaction.compose_bet, - "/address/
/compose/broadcast": transaction.compose_broadcast, - "/address/
/compose/btcpay": transaction.compose_btcpay, - "/address/
/compose/burn": transaction.compose_burn, - "/address/
/compose/cancel": transaction.compose_cancel, - "/address/
/compose/destroy": transaction.compose_destroy, - "/address/
/compose/dispenser": transaction.compose_dispenser, - "/address/
/compose/dividend": transaction.compose_dividend, - "/address/
/compose/issuance": transaction.compose_issuance, - "/address/
/compose/mpma": transaction.compose_mpma, - "/address/
/compose/order": transaction.compose_order, - "/address/
/compose/send": transaction.compose_send, - "/address/
/compose/sweep": transaction.compose_sweep, + ### /addresses/
/compose/ ### + "/addresses/
/compose/bet": transaction.compose_bet, + "/addresses/
/compose/broadcast": transaction.compose_broadcast, + "/addresses/
/compose/btcpay": transaction.compose_btcpay, + "/addresses/
/compose/burn": transaction.compose_burn, + "/addresses/
/compose/cancel": transaction.compose_cancel, + "/addresses/
/compose/destroy": transaction.compose_destroy, + "/addresses/
/compose/dispenser": transaction.compose_dispenser, + "/addresses/
/compose/dividend": transaction.compose_dividend, + "/addresses/
/compose/issuance": transaction.compose_issuance, + "/addresses/
/compose/mpma": transaction.compose_mpma, + "/addresses/
/compose/order": transaction.compose_order, + "/addresses/
/compose/send": transaction.compose_send, + "/addresses/
/compose/sweep": transaction.compose_sweep, ### /assets ### "/assets": ledger.get_valid_assets, "/assets/": ledger.get_asset_info, diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index 06d0fa0713..c74db6c13a 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -1,4 +1,6 @@ +import decimal import inspect +import json import logging from logging import handlers as logging_handlers @@ -193,3 +195,16 @@ def prepare_routes(routes): "args": prepare_route_args(function), } return prepared_routes + + +class ApiJsonEncoder(json.JSONEncoder): + def default(self, o): + if isinstance(o, decimal.Decimal): + return str(o) + if isinstance(o, bytes): + return o.hex() + return super().default(o) + + +def to_json(obj): + return json.dumps(obj, cls=ApiJsonEncoder, indent=4) diff --git a/counterparty-core/counterpartycore/lib/kickstart/utils.py b/counterparty-core/counterpartycore/lib/kickstart/utils.py index 71dc0da42a..b5f8d05224 100644 --- a/counterparty-core/counterpartycore/lib/kickstart/utils.py +++ b/counterparty-core/counterpartycore/lib/kickstart/utils.py @@ -1,7 +1,5 @@ import binascii -import decimal import hashlib -import json import math import os from multiprocessing import resource_tracker @@ -31,13 +29,6 @@ def ib2h(b): return inverse_hash(b2h(b)) -class JsonDecimalEncoder(json.JSONEncoder): - def default(self, o): - if isinstance(o, decimal.Decimal): - return str(o) - return super(DecimalEncoder, self).default(o) # noqa: F821 - - def decode_value(key, value): # Repeated key to make both same length adjusted_key = key * int(math.ceil(float(len(value)) / len(key))) diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index 6700c1a560..42bc31e6e2 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -123,6 +123,8 @@ def get_events_by_block_and_event(db, block_index: int, event: str): :param int block_index: The index of the block to return :param str event: The event to filter by """ + if event == "count": + return get_events_counts_by_block(db, block_index=block_index) return get_events(db, block_index=block_index, event=event) @@ -191,8 +193,8 @@ def get_events_counts(db, block_index=None): if block_index is not None: query += "WHERE block_index = ?" bindings.append(block_index) - query += "GROUP BY event" - cursor.execute(query) + query += " GROUP BY event" + cursor.execute(query, bindings) return cursor.fetchall() @@ -1254,13 +1256,12 @@ def get_blocks(db, last: int = None, limit: int = 10): cursor = db.cursor() bindings = [] query = """ - SELECT * FROM blocks WHERE - ORDER BY block_index DESC + SELECT * FROM blocks """ if last is not None: - query += "WHERE BLOCK_INDEX <= ?" + query += "WHERE block_index <= ?" bindings.append(last) - query += "LIMIT ?" + query += " ORDER BY block_index DESC LIMIT ?" bindings.append(limit) cursor.execute(query, tuple(bindings)) return cursor.fetchall() @@ -1385,7 +1386,7 @@ def get_expirations(db, block_index: int): """, ] query = " UNION ALL ".join(queries) - bindings = (block_index,) + bindings = (block_index,) * 6 cursor.execute(query, bindings) return cursor.fetchall() diff --git a/counterparty-core/counterpartycore/test/api_v2_test.py b/counterparty-core/counterpartycore/test/api_v2_test.py index 9e53b6a4b4..4bde22dcea 100644 --- a/counterparty-core/counterpartycore/test/api_v2_test.py +++ b/counterparty-core/counterpartycore/test/api_v2_test.py @@ -4,6 +4,7 @@ import requests from counterpartycore.lib import util +from counterpartycore.lib.api import routes # this is require near the top to do setup of the test suite from counterpartycore.test import ( @@ -17,6 +18,18 @@ API_ROOT = "http://api:api@localhost:10009" +@pytest.mark.usefixtures("api_server_v2") +def test_api_v2(): + block_index = 310491 + for route in routes.ROUTES: + url = f"{API_ROOT}{route}" + if route.startswith("/blocks"): + url = url.replace("", str(block_index)) + # print(url) + result = requests.get(url) # noqa: S113 + assert result.status_code == 200 + + @pytest.mark.usefixtures("api_server_v2") def test_new_get_balances_by_address(): alice = ADDR[0] From 0a7b7acc646c0860b4ec42ae2c34c892d7f663cb Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sat, 20 Apr 2024 17:31:43 +0200 Subject: [PATCH 066/280] Use ledger.CURRENT_BLOCK_INDEX for insert events --- counterparty-core/counterpartycore/lib/ledger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index 4870cbadc5..9795cb90d5 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -806,7 +806,7 @@ def insert_record(db, table_name, record, event): cursor.execute(query, record) cursor.close() # Add event to journal - add_to_journal(db, record["block_index"], "insert", table_name, event, record) + add_to_journal(db, CURRENT_BLOCK_INDEX, "insert", table_name, event, record) # This function allows you to update a record using an INSERT. From 4aa5de5c9e987950ea74aecca508a65a181f856b Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sat, 20 Apr 2024 17:36:52 +0200 Subject: [PATCH 067/280] fix fixtures --- .../fixtures/scenarios/multisig_1_of_2.sql | 212 ++-- .../fixtures/scenarios/multisig_1_of_3.sql | 212 ++-- .../fixtures/scenarios/multisig_2_of_2.sql | 212 ++-- .../fixtures/scenarios/multisig_2_of_3.sql | 212 ++-- .../fixtures/scenarios/multisig_3_of_3.sql | 212 ++-- .../scenarios/parseblock_unittest_fixture.sql | 1008 ++++++++--------- .../test/fixtures/scenarios/simplesig.sql | 212 ++-- .../fixtures/scenarios/unittest_fixture.sql | 1006 ++++++++-------- 8 files changed, 1643 insertions(+), 1643 deletions(-) diff --git a/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_1_of_2.sql b/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_1_of_2.sql index ae7515e24b..8c9287afac 100644 --- a/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_1_of_2.sql +++ b/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_1_of_2.sql @@ -465,26 +465,26 @@ CREATE TABLE messages( bindings TEXT, timestamp INTEGER, event TEXT); -INSERT INTO messages VALUES(0,309999,'insert','blocks','{"block_hash":"8b3bef249cb3b0fa23a4936c1249b6bd41daeadc848c8d2e409ea1cbc10adfe7","block_index":309999,"block_time":309999000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(0,0,'insert','blocks','{"block_hash":"8b3bef249cb3b0fa23a4936c1249b6bd41daeadc848c8d2e409ea1cbc10adfe7","block_index":309999,"block_time":309999000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1,309999,'parse','blocks','{"block_index":309999,"ledger_hash":"63f0fef31d02da85fa779e9a0e1b585b1a6a4e59e14564249e288e074e91c223","messages_hash":"63f0fef31d02da85fa779e9a0e1b585b1a6a4e59e14564249e288e074e91c223","txlist_hash":"63f0fef31d02da85fa779e9a0e1b585b1a6a4e59e14564249e288e074e91c223"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(2,310000,'insert','blocks','{"block_hash":"505d8d82c4ced7daddef7ed0b05ba12ecc664176887b938ef56c6af276f3b30c","block_index":310000,"block_time":310000000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(2,309999,'insert','blocks','{"block_hash":"505d8d82c4ced7daddef7ed0b05ba12ecc664176887b938ef56c6af276f3b30c","block_index":310000,"block_time":310000000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(3,310000,'insert','transactions','{"block_hash":"505d8d82c4ced7daddef7ed0b05ba12ecc664176887b938ef56c6af276f3b30c","block_index":310000,"block_time":310000000,"btc_amount":62000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":5625,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"9b6b1abb696d8d1b70c5beed046d7cddd23cd95b69ef18946cb18c5b56cfde30","tx_index":1}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(4,310000,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310000,"calling_function":"burn","event":"9b6b1abb696d8d1b70c5beed046d7cddd23cd95b69ef18946cb18c5b56cfde30","quantity":93000000000,"tx_index":1}',0,'CREDIT'); INSERT INTO messages VALUES(5,310000,'insert','burns','{"block_index":310000,"burned":62000000,"earned":93000000000,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","tx_hash":"9b6b1abb696d8d1b70c5beed046d7cddd23cd95b69ef18946cb18c5b56cfde30","tx_index":1}',0,'BURN'); INSERT INTO messages VALUES(6,310000,'parse','blocks','{"block_index":310000,"ledger_hash":"98ccdf7cd2fb29a8a01cbed5f133b70b6966c6c56354dad00baacedd0673c87e","messages_hash":"b364e4b262b19375281c08af25e2ce24e68e5ec3fb881f680c318fc258e9b02b","txlist_hash":"faf6476a908c85f6e26ca5d182688d6da3f326296602d5ad3aa5979cb8bc110b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(7,310001,'insert','blocks','{"block_hash":"3c9f6a9c6cac46a9273bd3db39ad775acd5bc546378ec2fb0587e06e112cc78e","block_index":310001,"block_time":310001000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(7,310000,'insert','blocks','{"block_hash":"3c9f6a9c6cac46a9273bd3db39ad775acd5bc546378ec2fb0587e06e112cc78e","block_index":310001,"block_time":310001000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(8,310001,'insert','transactions','{"block_hash":"3c9f6a9c6cac46a9273bd3db39ad775acd5bc546378ec2fb0587e06e112cc78e","block_index":310001,"block_time":310001000,"btc_amount":1000,"data":"0000000000000000000000010000000002faf080","destination":"1_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"58e839ec2b1584d3474014093393ce57e5c22d6e686213ee4a7a0abe7bbac33c","tx_index":2}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(9,310001,'insert','debits','{"action":"send","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310001,"event":"58e839ec2b1584d3474014093393ce57e5c22d6e686213ee4a7a0abe7bbac33c","quantity":50000000,"tx_index":2}',0,'DEBIT'); INSERT INTO messages VALUES(10,310001,'insert','credits','{"address":"1_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310001,"calling_function":"send","event":"58e839ec2b1584d3474014093393ce57e5c22d6e686213ee4a7a0abe7bbac33c","quantity":50000000,"tx_index":2}',0,'CREDIT'); INSERT INTO messages VALUES(11,310001,'insert','sends','{"asset":"XCP","block_index":310001,"destination":"1_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","quantity":50000000,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","tx_hash":"58e839ec2b1584d3474014093393ce57e5c22d6e686213ee4a7a0abe7bbac33c","tx_index":2}',0,'SEND'); INSERT INTO messages VALUES(12,310001,'parse','transactions','{"supported":true,"tx_hash":"58e839ec2b1584d3474014093393ce57e5c22d6e686213ee4a7a0abe7bbac33c","tx_index":2}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(13,310001,'parse','blocks','{"block_index":310001,"ledger_hash":"fd43dc5efe2ee796ef7d24f8d478a67aa58bf85f538ef4b9a49b983a315deb26","messages_hash":"508f3f345fea51bf28a58de66ce187d1de1f66b1aaf1f2752e6bdbb459d253ac","txlist_hash":"544f7958bf7661b78699c708ba1097da0dbb044acee3d1d8aa9a32d6b659a14d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(14,310002,'insert','blocks','{"block_hash":"fbb60f1144e1f7d4dc036a4a158a10ea6dea2ba6283a723342a49b8eb5cc9964","block_index":310002,"block_time":310002000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(14,310001,'insert','blocks','{"block_hash":"fbb60f1144e1f7d4dc036a4a158a10ea6dea2ba6283a723342a49b8eb5cc9964","block_index":310002,"block_time":310002000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(15,310002,'insert','transactions','{"block_hash":"fbb60f1144e1f7d4dc036a4a158a10ea6dea2ba6283a723342a49b8eb5cc9964","block_index":310002,"block_time":310002000,"btc_amount":0,"data":"0000000a00000000000000000000000002faf08000000000000000010000000005f5e100000a0000000000000000","destination":"","fee":1000000,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"332b030da57b9565324df01414778b1eafbee6c52343fea80774ee1725484367","tx_index":3}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(16,310002,'insert','orders','{"block_index":310002,"expiration":10,"expire_index":310012,"fee_provided":1000000,"fee_provided_remaining":1000000,"fee_required":0,"fee_required_remaining":0,"get_asset":"XCP","get_quantity":100000000,"get_remaining":100000000,"give_asset":"BTC","give_quantity":50000000,"give_remaining":50000000,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"open","tx_hash":"332b030da57b9565324df01414778b1eafbee6c52343fea80774ee1725484367","tx_index":3}',0,'OPEN_ORDER'); INSERT INTO messages VALUES(17,310002,'parse','transactions','{"supported":true,"tx_hash":"332b030da57b9565324df01414778b1eafbee6c52343fea80774ee1725484367","tx_index":3}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(18,310002,'parse','blocks','{"block_index":310002,"ledger_hash":"dbae4fff32545b4f3c104fb5a051dcaeacecd27401c84c09f93923b8bc30eab5","messages_hash":"433747661a40185a36239da6ba39d8d3fe35bfb8080a674d6d46e74f7c71fe9a","txlist_hash":"ee37e75a4eba165ed448b7cf96d188d7f738aca4d90a781c7f473974e12564d5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(19,310003,'insert','blocks','{"block_hash":"d50825dcb32bcf6f69994d616eba18de7718d3d859497e80751b2cb67e333e8a","block_index":310003,"block_time":310003000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(19,310002,'insert','blocks','{"block_hash":"d50825dcb32bcf6f69994d616eba18de7718d3d859497e80751b2cb67e333e8a","block_index":310003,"block_time":310003000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(20,310003,'insert','transactions','{"block_hash":"d50825dcb32bcf6f69994d616eba18de7718d3d859497e80751b2cb67e333e8a","block_index":310003,"block_time":310003000,"btc_amount":0,"data":"0000000a00000000000000010000000006422c4000000000000000000000000002faf080000a00000000000dbba0","destination":"","fee":6800,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"f093b6c00e1bbe85106db6874b1ab4e3f4378d0bf0bcffbd8b51835285dfbf3f","tx_index":4}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(21,310003,'insert','debits','{"action":"open order","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310003,"event":"f093b6c00e1bbe85106db6874b1ab4e3f4378d0bf0bcffbd8b51835285dfbf3f","quantity":105000000,"tx_index":4}',0,'DEBIT'); INSERT INTO messages VALUES(22,310003,'insert','orders','{"block_index":310003,"expiration":10,"expire_index":310013,"fee_provided":6800,"fee_provided_remaining":6800,"fee_required":900000,"fee_required_remaining":900000,"get_asset":"BTC","get_quantity":50000000,"get_remaining":50000000,"give_asset":"XCP","give_quantity":105000000,"give_remaining":105000000,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"open","tx_hash":"f093b6c00e1bbe85106db6874b1ab4e3f4378d0bf0bcffbd8b51835285dfbf3f","tx_index":4}',0,'OPEN_ORDER'); @@ -493,14 +493,14 @@ INSERT INTO messages VALUES(24,310003,'update','orders','{"fee_provided_remainin INSERT INTO messages VALUES(25,310003,'insert','order_matches','{"backward_asset":"XCP","backward_quantity":100000000,"block_index":310003,"fee_paid":857142,"forward_asset":"BTC","forward_quantity":50000000,"id":"332b030da57b9565324df01414778b1eafbee6c52343fea80774ee1725484367_f093b6c00e1bbe85106db6874b1ab4e3f4378d0bf0bcffbd8b51835285dfbf3f","match_expire_index":310023,"status":"pending","tx0_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx0_block_index":310002,"tx0_expiration":10,"tx0_hash":"332b030da57b9565324df01414778b1eafbee6c52343fea80774ee1725484367","tx0_index":3,"tx1_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx1_block_index":310003,"tx1_expiration":10,"tx1_hash":"f093b6c00e1bbe85106db6874b1ab4e3f4378d0bf0bcffbd8b51835285dfbf3f","tx1_index":4}',0,'ORDER_MATCH'); INSERT INTO messages VALUES(26,310003,'parse','transactions','{"supported":true,"tx_hash":"f093b6c00e1bbe85106db6874b1ab4e3f4378d0bf0bcffbd8b51835285dfbf3f","tx_index":4}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(27,310003,'parse','blocks','{"block_index":310003,"ledger_hash":"fd0ae9793d9513540246b94ad116fc0531e8e07b2c014752e175a12e2a7a82d4","messages_hash":"01a5158be117031c2249b66ea64def6a7fa907cc99484335d67fadf9b747f3e2","txlist_hash":"107902b17490957ebc0d2cb5dba1f5e667e3a393acfd8b3adde9f6b17aaad5c4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(28,310004,'insert','blocks','{"block_hash":"60cdc0ac0e3121ceaa2c3885f21f5789f49992ffef6e6ff99f7da80e36744615","block_index":310004,"block_time":310004000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(28,310003,'insert','blocks','{"block_hash":"60cdc0ac0e3121ceaa2c3885f21f5789f49992ffef6e6ff99f7da80e36744615","block_index":310004,"block_time":310004000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(29,310004,'insert','transactions','{"block_hash":"60cdc0ac0e3121ceaa2c3885f21f5789f49992ffef6e6ff99f7da80e36744615","block_index":310004,"block_time":310004000,"btc_amount":50000000,"data":"0000000b332b030da57b9565324df01414778b1eafbee6c52343fea80774ee1725484367f093b6c00e1bbe85106db6874b1ab4e3f4378d0bf0bcffbd8b51835285dfbf3f","destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":9675,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"ed17dc38233838e15d319a1786825b9e7cdba815554c9d6f4dd527615bce10b8","tx_index":5}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(30,310004,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310004,"calling_function":"btcpay","event":"ed17dc38233838e15d319a1786825b9e7cdba815554c9d6f4dd527615bce10b8","quantity":100000000,"tx_index":5}',0,'CREDIT'); INSERT INTO messages VALUES(31,310004,'update','order_matches','{"id":"332b030da57b9565324df01414778b1eafbee6c52343fea80774ee1725484367_f093b6c00e1bbe85106db6874b1ab4e3f4378d0bf0bcffbd8b51835285dfbf3f","order_match_id":"332b030da57b9565324df01414778b1eafbee6c52343fea80774ee1725484367_f093b6c00e1bbe85106db6874b1ab4e3f4378d0bf0bcffbd8b51835285dfbf3f","status":"completed"}',0,'ORDER_MATCH_UPDATE'); INSERT INTO messages VALUES(32,310004,'insert','btcpays','{"block_index":310004,"btc_amount":50000000,"destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","order_match_id":"332b030da57b9565324df01414778b1eafbee6c52343fea80774ee1725484367_f093b6c00e1bbe85106db6874b1ab4e3f4378d0bf0bcffbd8b51835285dfbf3f","source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","tx_hash":"ed17dc38233838e15d319a1786825b9e7cdba815554c9d6f4dd527615bce10b8","tx_index":5}',0,'BTC_PAY'); INSERT INTO messages VALUES(33,310004,'parse','transactions','{"supported":true,"tx_hash":"ed17dc38233838e15d319a1786825b9e7cdba815554c9d6f4dd527615bce10b8","tx_index":5}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(34,310004,'parse','blocks','{"block_index":310004,"ledger_hash":"bd894777a85b731155a0d6362766b4220c03db4f3e5fbf030d6c2529cb5f3537","messages_hash":"ffab6b5c0592a131d2ee25f07a31b86d9a35a48ca313bcf129ddeddb84b6b04c","txlist_hash":"65e6a7c64c8439a60fb066d96d5165e6e40974bd1b98812ac6a4172fb1db1511"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(35,310005,'insert','blocks','{"block_hash":"8005c2926b7ecc50376642bc661a49108b6dc62636463a5c492b123e2184cd9a","block_index":310005,"block_time":310005000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(35,310004,'insert','blocks','{"block_hash":"8005c2926b7ecc50376642bc661a49108b6dc62636463a5c492b123e2184cd9a","block_index":310005,"block_time":310005000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(36,310005,'insert','transactions','{"block_hash":"8005c2926b7ecc50376642bc661a49108b6dc62636463a5c492b123e2184cd9a","block_index":310005,"block_time":310005000,"btc_amount":0,"data":"000000140000000000004767000000003b9aca000100000000000000000000","destination":"","fee":6800,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"cd2b44cb56dd5aaae1181c42ab8953ebb9d0fb8e177e960ffe55e3500b3aae25","tx_index":6}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(37,310005,'insert','debits','{"action":"issuance fee","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310005,"event":"cd2b44cb56dd5aaae1181c42ab8953ebb9d0fb8e177e960ffe55e3500b3aae25","quantity":50000000,"tx_index":6}',0,'DEBIT'); INSERT INTO messages VALUES(38,310005,'insert','assets','{"asset_id":"18279","asset_longname":null,"asset_name":"BBBB","block_index":310005}',0,'ASSET_CREATION'); @@ -508,7 +508,7 @@ INSERT INTO messages VALUES(39,310005,'insert','issuances','{"asset":"BBBB","ass INSERT INTO messages VALUES(40,310005,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"BBBB","block_index":310005,"calling_function":"issuance","event":"cd2b44cb56dd5aaae1181c42ab8953ebb9d0fb8e177e960ffe55e3500b3aae25","quantity":1000000000,"tx_index":6}',0,'CREDIT'); INSERT INTO messages VALUES(41,310005,'parse','transactions','{"supported":true,"tx_hash":"cd2b44cb56dd5aaae1181c42ab8953ebb9d0fb8e177e960ffe55e3500b3aae25","tx_index":6}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(42,310005,'parse','blocks','{"block_index":310005,"ledger_hash":"264c98f1d460f78e52def545d25482fd76549a5309d04841bc27b335f06470a2","messages_hash":"92d9412fe93d5ea10d281e838ab44f67f61078ca1df6e621b48d9e50a01e18e7","txlist_hash":"9ede5548f7cb273af825360a6285fe9a51e9625c9084b2dde7bec013dec24f0e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(43,310006,'insert','blocks','{"block_hash":"bdad69d1669eace68b9f246de113161099d4f83322e2acf402c42defef3af2bb","block_index":310006,"block_time":310006000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(43,310005,'insert','blocks','{"block_hash":"bdad69d1669eace68b9f246de113161099d4f83322e2acf402c42defef3af2bb","block_index":310006,"block_time":310006000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(44,310006,'insert','transactions','{"block_hash":"bdad69d1669eace68b9f246de113161099d4f83322e2acf402c42defef3af2bb","block_index":310006,"block_time":310006000,"btc_amount":0,"data":"00000014000000000000476800000000000186a00000000000000000000006666f6f626172","destination":"","fee":6800,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"ddefdf227fd8cd8df1e77f0b531e98a033d2e5b237fa4331b83c003de54877d9","tx_index":7}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(45,310006,'insert','debits','{"action":"issuance fee","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310006,"event":"ddefdf227fd8cd8df1e77f0b531e98a033d2e5b237fa4331b83c003de54877d9","quantity":50000000,"tx_index":7}',0,'DEBIT'); INSERT INTO messages VALUES(46,310006,'insert','assets','{"asset_id":"18280","asset_longname":null,"asset_name":"BBBC","block_index":310006}',0,'ASSET_CREATION'); @@ -516,21 +516,21 @@ INSERT INTO messages VALUES(47,310006,'insert','issuances','{"asset":"BBBC","ass INSERT INTO messages VALUES(48,310006,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"BBBC","block_index":310006,"calling_function":"issuance","event":"ddefdf227fd8cd8df1e77f0b531e98a033d2e5b237fa4331b83c003de54877d9","quantity":100000,"tx_index":7}',0,'CREDIT'); INSERT INTO messages VALUES(49,310006,'parse','transactions','{"supported":true,"tx_hash":"ddefdf227fd8cd8df1e77f0b531e98a033d2e5b237fa4331b83c003de54877d9","tx_index":7}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(50,310006,'parse','blocks','{"block_index":310006,"ledger_hash":"a1f2aa5a0b8d030c2fc4e1243c3173319ecf68d232262ea3dc8bfdd03a3f923a","messages_hash":"5259477ce9e5a469ba99387b432342722700d86f80912613aa648460421d5261","txlist_hash":"afa257be6b0f57581b8f1b932b3c8473ff5c89e4bd6c3d3e3dd6a8c3cd9b09d3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(51,310007,'insert','blocks','{"block_hash":"10a642b96d60091d08234d17dfdecf3025eca41e4fc8e3bbe71a91c5a457cb4b","block_index":310007,"block_time":310007000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(51,310006,'insert','blocks','{"block_hash":"10a642b96d60091d08234d17dfdecf3025eca41e4fc8e3bbe71a91c5a457cb4b","block_index":310007,"block_time":310007000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(52,310007,'insert','transactions','{"block_hash":"10a642b96d60091d08234d17dfdecf3025eca41e4fc8e3bbe71a91c5a457cb4b","block_index":310007,"block_time":310007000,"btc_amount":1000,"data":"00000000000000000000476700000000003d0900","destination":"1_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"f337451a19eac3c2fe66daf7d44d39c41a012d2dfd85de90cc3877bbc2e7d30c","tx_index":8}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(53,310007,'insert','debits','{"action":"send","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"BBBB","block_index":310007,"event":"f337451a19eac3c2fe66daf7d44d39c41a012d2dfd85de90cc3877bbc2e7d30c","quantity":4000000,"tx_index":8}',0,'DEBIT'); INSERT INTO messages VALUES(54,310007,'insert','credits','{"address":"1_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"BBBB","block_index":310007,"calling_function":"send","event":"f337451a19eac3c2fe66daf7d44d39c41a012d2dfd85de90cc3877bbc2e7d30c","quantity":4000000,"tx_index":8}',0,'CREDIT'); INSERT INTO messages VALUES(55,310007,'insert','sends','{"asset":"BBBB","block_index":310007,"destination":"1_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","quantity":4000000,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","tx_hash":"f337451a19eac3c2fe66daf7d44d39c41a012d2dfd85de90cc3877bbc2e7d30c","tx_index":8}',0,'SEND'); INSERT INTO messages VALUES(56,310007,'parse','transactions','{"supported":true,"tx_hash":"f337451a19eac3c2fe66daf7d44d39c41a012d2dfd85de90cc3877bbc2e7d30c","tx_index":8}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(57,310007,'parse','blocks','{"block_index":310007,"ledger_hash":"8709aa2d5064ea2b7ab51a887d21f5fddcb7046753cd883317b533ed121f8504","messages_hash":"0b9ffff66cfe4698c16889013800547e79cdad7d3f84eff57e14828a3dbe8a52","txlist_hash":"40941bb90c086bd2716de8afc1fba5eb75721143a86a606ef99ee3312de95614"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(58,310008,'insert','blocks','{"block_hash":"47d0e3acbdc6916aeae95e987f9cfa16209b3df1e67bb38143b3422b32322c33","block_index":310008,"block_time":310008000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(58,310007,'insert','blocks','{"block_hash":"47d0e3acbdc6916aeae95e987f9cfa16209b3df1e67bb38143b3422b32322c33","block_index":310008,"block_time":310008000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(59,310008,'insert','transactions','{"block_hash":"47d0e3acbdc6916aeae95e987f9cfa16209b3df1e67bb38143b3422b32322c33","block_index":310008,"block_time":310008000,"btc_amount":1000,"data":"000000000000000000004768000000000000020e","destination":"1_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"c639e9482b31b487115b4437dd87cff98338003fabf18066bf051e1164aa4394","tx_index":9}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(60,310008,'insert','debits','{"action":"send","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"BBBC","block_index":310008,"event":"c639e9482b31b487115b4437dd87cff98338003fabf18066bf051e1164aa4394","quantity":526,"tx_index":9}',0,'DEBIT'); INSERT INTO messages VALUES(61,310008,'insert','credits','{"address":"1_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"BBBC","block_index":310008,"calling_function":"send","event":"c639e9482b31b487115b4437dd87cff98338003fabf18066bf051e1164aa4394","quantity":526,"tx_index":9}',0,'CREDIT'); INSERT INTO messages VALUES(62,310008,'insert','sends','{"asset":"BBBC","block_index":310008,"destination":"1_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","quantity":526,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","tx_hash":"c639e9482b31b487115b4437dd87cff98338003fabf18066bf051e1164aa4394","tx_index":9}',0,'SEND'); INSERT INTO messages VALUES(63,310008,'parse','transactions','{"supported":true,"tx_hash":"c639e9482b31b487115b4437dd87cff98338003fabf18066bf051e1164aa4394","tx_index":9}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(64,310008,'parse','blocks','{"block_index":310008,"ledger_hash":"c1c516176fe38b69b31e3668b5ef20805bd90d3112c77f5652f838af8e7f604a","messages_hash":"7fdd558da169a125a365a206d1606ef1594ce7dc3c8102d9de55a0a08f8036a8","txlist_hash":"9b186632fe722ba57daaa01573568c3d3405f7fcb0a729005a6338266a4debfa"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(65,310009,'insert','blocks','{"block_hash":"4d474992b141620bf3753863db7ee5e8af26cadfbba27725911f44fa657bc1c0","block_index":310009,"block_time":310009000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(65,310008,'insert','blocks','{"block_hash":"4d474992b141620bf3753863db7ee5e8af26cadfbba27725911f44fa657bc1c0","block_index":310009,"block_time":310009000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(66,310009,'insert','transactions','{"block_hash":"4d474992b141620bf3753863db7ee5e8af26cadfbba27725911f44fa657bc1c0","block_index":310009,"block_time":310009000,"btc_amount":0,"data":"00000032000000000000025800000000000047670000000000000001","destination":"","fee":6800,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"7881c1fe7881a590d09302dde67cfd888a74154888e0c310bd01575f560b8ac8","tx_index":10}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(67,310009,'insert','debits','{"action":"dividend","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310009,"event":"7881c1fe7881a590d09302dde67cfd888a74154888e0c310bd01575f560b8ac8","quantity":24,"tx_index":10}',0,'DEBIT'); INSERT INTO messages VALUES(68,310009,'insert','debits','{"action":"dividend fee","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310009,"event":"7881c1fe7881a590d09302dde67cfd888a74154888e0c310bd01575f560b8ac8","quantity":20000,"tx_index":10}',0,'DEBIT'); @@ -538,7 +538,7 @@ INSERT INTO messages VALUES(69,310009,'insert','credits','{"address":"1_mnfAHmdd INSERT INTO messages VALUES(70,310009,'insert','dividends','{"asset":"BBBB","block_index":310009,"dividend_asset":"XCP","fee_paid":20000,"quantity_per_unit":600,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","tx_hash":"7881c1fe7881a590d09302dde67cfd888a74154888e0c310bd01575f560b8ac8","tx_index":10}',0,'ASSET_DIVIDEND'); INSERT INTO messages VALUES(71,310009,'parse','transactions','{"supported":true,"tx_hash":"7881c1fe7881a590d09302dde67cfd888a74154888e0c310bd01575f560b8ac8","tx_index":10}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(72,310009,'parse','blocks','{"block_index":310009,"ledger_hash":"ae8ee9e681f0ac96de96babc1c80e5188b3e0cb91074a0dfd8511ee7d0ae64c8","messages_hash":"262ab7169bddff900a7be3663dc902396e4e58f34c0112f1293a2b2040856f03","txlist_hash":"39f4f154cbeae9a65b43ac831b2d5ad0e6f6575b909b979bd4bd97dadbab4cdd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(73,310010,'insert','blocks','{"block_hash":"a58162dff81a32e6a29b075be759dbb9fa9b8b65303e69c78fb4d7b0acc37042","block_index":310010,"block_time":310010000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(73,310009,'insert','blocks','{"block_hash":"a58162dff81a32e6a29b075be759dbb9fa9b8b65303e69c78fb4d7b0acc37042","block_index":310010,"block_time":310010000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(74,310010,'insert','transactions','{"block_hash":"a58162dff81a32e6a29b075be759dbb9fa9b8b65303e69c78fb4d7b0acc37042","block_index":310010,"block_time":310010000,"btc_amount":0,"data":"00000032000000000000032000000000000047680000000000000001","destination":"","fee":6800,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"c41898ad625e2236110101070c09e9f28b6fea1ed436ecb78f231f3f99f123f7","tx_index":11}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(75,310010,'insert','debits','{"action":"dividend","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310010,"event":"c41898ad625e2236110101070c09e9f28b6fea1ed436ecb78f231f3f99f123f7","quantity":420800,"tx_index":11}',0,'DEBIT'); INSERT INTO messages VALUES(76,310010,'insert','debits','{"action":"dividend fee","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310010,"event":"c41898ad625e2236110101070c09e9f28b6fea1ed436ecb78f231f3f99f123f7","quantity":20000,"tx_index":11}',0,'DEBIT'); @@ -546,18 +546,18 @@ INSERT INTO messages VALUES(77,310010,'insert','credits','{"address":"1_mnfAHmdd INSERT INTO messages VALUES(78,310010,'insert','dividends','{"asset":"BBBC","block_index":310010,"dividend_asset":"XCP","fee_paid":20000,"quantity_per_unit":800,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","tx_hash":"c41898ad625e2236110101070c09e9f28b6fea1ed436ecb78f231f3f99f123f7","tx_index":11}',0,'ASSET_DIVIDEND'); INSERT INTO messages VALUES(79,310010,'parse','transactions','{"supported":true,"tx_hash":"c41898ad625e2236110101070c09e9f28b6fea1ed436ecb78f231f3f99f123f7","tx_index":11}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(80,310010,'parse','blocks','{"block_index":310010,"ledger_hash":"0451ffa5d7ffb0e588e58ac7eacf77f6b3e17f1d27c1039f03d7716b16fb234f","messages_hash":"a363f1f103b4d39b9056e391559737a36c56439c6b3a12854f306dca0e1ed067","txlist_hash":"0cea2e2e06c6423d1c5ba19f6128fbe8fe6d6c3688316c9c35dd31cf03d38c97"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(81,310011,'insert','blocks','{"block_hash":"8042cc2ef293fd73d050f283fbd075c79dd4c49fdcca054dc0714fc3a50dc1bb","block_index":310011,"block_time":310011000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(81,310010,'insert','blocks','{"block_hash":"8042cc2ef293fd73d050f283fbd075c79dd4c49fdcca054dc0714fc3a50dc1bb","block_index":310011,"block_time":310011000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(82,310011,'insert','transactions','{"block_hash":"8042cc2ef293fd73d050f283fbd075c79dd4c49fdcca054dc0714fc3a50dc1bb","block_index":310011,"block_time":310011000,"btc_amount":0,"data":"0000001e52bb3300405900000000000005f5e0ff09556e69742054657374","destination":"","fee":6800,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"a21533ad03334823cca2aa8e57c383113a7f93a5810c5df8dd2fa70f6eec416d","tx_index":12}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(83,310011,'insert','broadcasts','{"block_index":310011,"fee_fraction_int":99999999,"locked":false,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","text":"Unit Test","timestamp":1388000000,"tx_hash":"a21533ad03334823cca2aa8e57c383113a7f93a5810c5df8dd2fa70f6eec416d","tx_index":12,"value":100.0}',0,'BROADCAST'); INSERT INTO messages VALUES(84,310011,'parse','transactions','{"supported":true,"tx_hash":"a21533ad03334823cca2aa8e57c383113a7f93a5810c5df8dd2fa70f6eec416d","tx_index":12}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(85,310011,'parse','blocks','{"block_index":310011,"ledger_hash":"dfaae3f28c2f75e4bcc49034ff2a191b5a41b88035c5d266181617c8c65ad5d3","messages_hash":"c6c72bb6b85bbf0d1fa5e18500990cdf69c7b7b1d315d8639f6c6afabcd31a26","txlist_hash":"0134329cfdaf63e5946b9b5a94b73f59b9a870d4569ca07c0cce078bf13714a5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(86,310012,'insert','blocks','{"block_hash":"cdba329019d93a67b31b79d05f76ce1b7791d430ea0d6c1c2168fe78d2f67677","block_index":310012,"block_time":310012000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(86,310011,'insert','blocks','{"block_hash":"cdba329019d93a67b31b79d05f76ce1b7791d430ea0d6c1c2168fe78d2f67677","block_index":310012,"block_time":310012000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(87,310012,'insert','transactions','{"block_hash":"cdba329019d93a67b31b79d05f76ce1b7791d430ea0d6c1c2168fe78d2f67677","block_index":310012,"block_time":310012000,"btc_amount":1000,"data":"00000028000052bb33640000000002faf08000000000017d7840000000000000000000003b100000000a","destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"74062934f0a97c41851735fef2a7df4d9ad9945424f09a54281e145a5e32492f","tx_index":13}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(88,310012,'insert','debits','{"action":"bet","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310012,"event":"74062934f0a97c41851735fef2a7df4d9ad9945424f09a54281e145a5e32492f","quantity":50000000,"tx_index":13}',0,'DEBIT'); INSERT INTO messages VALUES(89,310012,'insert','bets','{"bet_type":0,"block_index":310012,"counterwager_quantity":25000000,"counterwager_remaining":25000000,"deadline":1388000100,"expiration":10,"expire_index":310022,"fee_fraction_int":99999999.0,"feed_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","leverage":15120,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"open","target_value":0.0,"tx_hash":"74062934f0a97c41851735fef2a7df4d9ad9945424f09a54281e145a5e32492f","tx_index":13,"wager_quantity":50000000,"wager_remaining":50000000}',0,'OPEN_BET'); INSERT INTO messages VALUES(90,310012,'parse','transactions','{"supported":true,"tx_hash":"74062934f0a97c41851735fef2a7df4d9ad9945424f09a54281e145a5e32492f","tx_index":13}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(91,310012,'parse','blocks','{"block_index":310012,"ledger_hash":"c711e8cf2d9bbed01724a7b22cbd4900a4fd0a126bb7ecbd7c97ca15a6276553","messages_hash":"7e2be8d32d548626652064d9d37f0942b4a78667630e49c3e8e739d10478fb75","txlist_hash":"9a3fb4fb846c9ffff3a50a0a31f3ac3900ba7048a60dd69c6e14752734358f1c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(92,310013,'insert','blocks','{"block_hash":"0425e5e832e4286757dc0228cd505b8d572081007218abd3a0983a3bcd502a61","block_index":310013,"block_time":310013000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(92,310012,'insert','blocks','{"block_hash":"0425e5e832e4286757dc0228cd505b8d572081007218abd3a0983a3bcd502a61","block_index":310013,"block_time":310013000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(93,310013,'insert','transactions','{"block_hash":"0425e5e832e4286757dc0228cd505b8d572081007218abd3a0983a3bcd502a61","block_index":310013,"block_time":310013000,"btc_amount":1000,"data":"00000028000152bb336400000000017d78400000000002793d60000000000000000000003b100000000a","destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"6a5f30666a5f24b6e0e6f31cf06b22ee74d3e692a550297450bdf1d36b1cc167","tx_index":14}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(94,310013,'update','orders','{"status":"expired","tx_hash":"332b030da57b9565324df01414778b1eafbee6c52343fea80774ee1725484367"}',0,'ORDER_UPDATE'); INSERT INTO messages VALUES(95,310013,'insert','order_expirations','{"block_index":310013,"order_hash":"332b030da57b9565324df01414778b1eafbee6c52343fea80774ee1725484367","source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2"}',0,'ORDER_EXPIRATION'); @@ -566,10 +566,10 @@ INSERT INTO messages VALUES(97,310013,'insert','bets','{"bet_type":1,"block_inde INSERT INTO messages VALUES(98,310013,'update','bets','{"counterwager_remaining":4250000,"status":"open","tx_hash":"74062934f0a97c41851735fef2a7df4d9ad9945424f09a54281e145a5e32492f","wager_remaining":8500000}',0,'BET_UPDATE'); INSERT INTO messages VALUES(99,310013,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310013,"calling_function":"filled","event":"6a5f30666a5f24b6e0e6f31cf06b22ee74d3e692a550297450bdf1d36b1cc167","quantity":4250000,"tx_index":14}',0,'CREDIT'); INSERT INTO messages VALUES(100,310013,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"6a5f30666a5f24b6e0e6f31cf06b22ee74d3e692a550297450bdf1d36b1cc167","wager_remaining":4250000}',0,'BET_UPDATE'); -INSERT INTO messages VALUES(101,310012,'insert','bet_matches','{"backward_quantity":20750000,"block_index":310012,"deadline":1388000100,"fee_fraction_int":99999999,"feed_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","forward_quantity":41500000,"id":"74062934f0a97c41851735fef2a7df4d9ad9945424f09a54281e145a5e32492f_6a5f30666a5f24b6e0e6f31cf06b22ee74d3e692a550297450bdf1d36b1cc167","initial_value":100.0,"leverage":15120,"match_expire_index":310022,"status":"pending","target_value":0.0,"tx0_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx0_bet_type":0,"tx0_block_index":310012,"tx0_expiration":10,"tx0_hash":"74062934f0a97c41851735fef2a7df4d9ad9945424f09a54281e145a5e32492f","tx0_index":13,"tx1_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx1_bet_type":1,"tx1_block_index":310013,"tx1_expiration":10,"tx1_hash":"6a5f30666a5f24b6e0e6f31cf06b22ee74d3e692a550297450bdf1d36b1cc167","tx1_index":14}',0,'BET_MATCH'); +INSERT INTO messages VALUES(101,310013,'insert','bet_matches','{"backward_quantity":20750000,"block_index":310012,"deadline":1388000100,"fee_fraction_int":99999999,"feed_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","forward_quantity":41500000,"id":"74062934f0a97c41851735fef2a7df4d9ad9945424f09a54281e145a5e32492f_6a5f30666a5f24b6e0e6f31cf06b22ee74d3e692a550297450bdf1d36b1cc167","initial_value":100.0,"leverage":15120,"match_expire_index":310022,"status":"pending","target_value":0.0,"tx0_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx0_bet_type":0,"tx0_block_index":310012,"tx0_expiration":10,"tx0_hash":"74062934f0a97c41851735fef2a7df4d9ad9945424f09a54281e145a5e32492f","tx0_index":13,"tx1_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx1_bet_type":1,"tx1_block_index":310013,"tx1_expiration":10,"tx1_hash":"6a5f30666a5f24b6e0e6f31cf06b22ee74d3e692a550297450bdf1d36b1cc167","tx1_index":14}',0,'BET_MATCH'); INSERT INTO messages VALUES(102,310013,'parse','transactions','{"supported":true,"tx_hash":"6a5f30666a5f24b6e0e6f31cf06b22ee74d3e692a550297450bdf1d36b1cc167","tx_index":14}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(103,310013,'parse','blocks','{"block_index":310013,"ledger_hash":"3dfa5822de8a4c674f1517b17e50d2ef63ccbb1fc4ae96fe5e1dc05cd353aa4b","messages_hash":"065ed4ebeb7d71c4d6c81c65e46f8682fc8eabaa8c08b0a8298fa93140a6585f","txlist_hash":"6228a449b24d607b8fe1aea60a0292874cfe515a9440bee2829f6e61efa0b2a6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(104,310014,'insert','blocks','{"block_hash":"85b28d413ebda2968ed82ae53643677338650151b997ed1e4656158005b9f65f","block_index":310014,"block_time":310014000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(104,310013,'insert','blocks','{"block_hash":"85b28d413ebda2968ed82ae53643677338650151b997ed1e4656158005b9f65f","block_index":310014,"block_time":310014000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(105,310014,'insert','transactions','{"block_hash":"85b28d413ebda2968ed82ae53643677338650151b997ed1e4656158005b9f65f","block_index":310014,"block_time":310014000,"btc_amount":1000,"data":"00000028000052bb33640000000008f0d1800000000014dc93800000000000000000000013b00000000a","destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"2066b9a6b8913412384a0401ef57bfc604e7c5a2c141e23111a8ccc6881b0fb3","tx_index":15}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(106,310014,'update','orders','{"status":"expired","tx_hash":"f093b6c00e1bbe85106db6874b1ab4e3f4378d0bf0bcffbd8b51835285dfbf3f"}',0,'ORDER_UPDATE'); INSERT INTO messages VALUES(107,310014,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310014,"calling_function":"cancel order","event":"f093b6c00e1bbe85106db6874b1ab4e3f4378d0bf0bcffbd8b51835285dfbf3f","quantity":5000000,"tx_index":0}',0,'CREDIT'); @@ -578,7 +578,7 @@ INSERT INTO messages VALUES(109,310014,'insert','debits','{"action":"bet","addre INSERT INTO messages VALUES(110,310014,'insert','bets','{"bet_type":0,"block_index":310014,"counterwager_quantity":350000000,"counterwager_remaining":350000000,"deadline":1388000100,"expiration":10,"expire_index":310024,"fee_fraction_int":99999999.0,"feed_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","leverage":5040,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"open","target_value":0.0,"tx_hash":"2066b9a6b8913412384a0401ef57bfc604e7c5a2c141e23111a8ccc6881b0fb3","tx_index":15,"wager_quantity":150000000,"wager_remaining":150000000}',0,'OPEN_BET'); INSERT INTO messages VALUES(111,310014,'parse','transactions','{"supported":true,"tx_hash":"2066b9a6b8913412384a0401ef57bfc604e7c5a2c141e23111a8ccc6881b0fb3","tx_index":15}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(112,310014,'parse','blocks','{"block_index":310014,"ledger_hash":"49fcaed957776bc62c9f1feac30dad8c0574596d312f9efee7a453e00bf64866","messages_hash":"912195d824c04576868edda92286e9720896de5c90b6477ee927e78553c23283","txlist_hash":"700cf4c54e23c0cfb4d8b02bc6cb1ca509637dd95312629625aa92d32d5548d2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(113,310015,'insert','blocks','{"block_hash":"4cf77d688f18f0c68c077db882f62e49f31859dfa6144372457cd73b29223922","block_index":310015,"block_time":310015000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(113,310014,'insert','blocks','{"block_hash":"4cf77d688f18f0c68c077db882f62e49f31859dfa6144372457cd73b29223922","block_index":310015,"block_time":310015000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(114,310015,'insert','transactions','{"block_hash":"4cf77d688f18f0c68c077db882f62e49f31859dfa6144372457cd73b29223922","block_index":310015,"block_time":310015000,"btc_amount":1000,"data":"00000028000152bb33640000000014dc93800000000008f0d1800000000000000000000013b00000000a","destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"65db3ab58b65891a947ab9bdba4723e907678bf3b48397add62802dcc65d1d8e","tx_index":16}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(115,310015,'insert','debits','{"action":"bet","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310015,"event":"65db3ab58b65891a947ab9bdba4723e907678bf3b48397add62802dcc65d1d8e","quantity":350000000,"tx_index":16}',0,'DEBIT'); INSERT INTO messages VALUES(116,310015,'insert','bets','{"bet_type":1,"block_index":310015,"counterwager_quantity":150000000,"counterwager_remaining":150000000,"deadline":1388000100,"expiration":10,"expire_index":310025,"fee_fraction_int":99999999.0,"feed_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","leverage":5040,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"open","target_value":0.0,"tx_hash":"65db3ab58b65891a947ab9bdba4723e907678bf3b48397add62802dcc65d1d8e","tx_index":16,"wager_quantity":350000000,"wager_remaining":350000000}',0,'OPEN_BET'); @@ -586,16 +586,16 @@ INSERT INTO messages VALUES(117,310015,'insert','credits','{"address":"1_mn6q3dS INSERT INTO messages VALUES(118,310015,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"2066b9a6b8913412384a0401ef57bfc604e7c5a2c141e23111a8ccc6881b0fb3","wager_remaining":0}',0,'BET_UPDATE'); INSERT INTO messages VALUES(119,310015,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310015,"calling_function":"filled","event":"65db3ab58b65891a947ab9bdba4723e907678bf3b48397add62802dcc65d1d8e","quantity":0,"tx_index":16}',0,'CREDIT'); INSERT INTO messages VALUES(120,310015,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"65db3ab58b65891a947ab9bdba4723e907678bf3b48397add62802dcc65d1d8e","wager_remaining":0}',0,'BET_UPDATE'); -INSERT INTO messages VALUES(121,310014,'insert','bet_matches','{"backward_quantity":350000000,"block_index":310014,"deadline":1388000100,"fee_fraction_int":99999999,"feed_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","forward_quantity":150000000,"id":"2066b9a6b8913412384a0401ef57bfc604e7c5a2c141e23111a8ccc6881b0fb3_65db3ab58b65891a947ab9bdba4723e907678bf3b48397add62802dcc65d1d8e","initial_value":100.0,"leverage":5040,"match_expire_index":310024,"status":"pending","target_value":0.0,"tx0_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx0_bet_type":0,"tx0_block_index":310014,"tx0_expiration":10,"tx0_hash":"2066b9a6b8913412384a0401ef57bfc604e7c5a2c141e23111a8ccc6881b0fb3","tx0_index":15,"tx1_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx1_bet_type":1,"tx1_block_index":310015,"tx1_expiration":10,"tx1_hash":"65db3ab58b65891a947ab9bdba4723e907678bf3b48397add62802dcc65d1d8e","tx1_index":16}',0,'BET_MATCH'); +INSERT INTO messages VALUES(121,310015,'insert','bet_matches','{"backward_quantity":350000000,"block_index":310014,"deadline":1388000100,"fee_fraction_int":99999999,"feed_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","forward_quantity":150000000,"id":"2066b9a6b8913412384a0401ef57bfc604e7c5a2c141e23111a8ccc6881b0fb3_65db3ab58b65891a947ab9bdba4723e907678bf3b48397add62802dcc65d1d8e","initial_value":100.0,"leverage":5040,"match_expire_index":310024,"status":"pending","target_value":0.0,"tx0_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx0_bet_type":0,"tx0_block_index":310014,"tx0_expiration":10,"tx0_hash":"2066b9a6b8913412384a0401ef57bfc604e7c5a2c141e23111a8ccc6881b0fb3","tx0_index":15,"tx1_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx1_bet_type":1,"tx1_block_index":310015,"tx1_expiration":10,"tx1_hash":"65db3ab58b65891a947ab9bdba4723e907678bf3b48397add62802dcc65d1d8e","tx1_index":16}',0,'BET_MATCH'); INSERT INTO messages VALUES(122,310015,'parse','transactions','{"supported":true,"tx_hash":"65db3ab58b65891a947ab9bdba4723e907678bf3b48397add62802dcc65d1d8e","tx_index":16}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(123,310015,'parse','blocks','{"block_index":310015,"ledger_hash":"4e4abd3e8ab2658a7ac673e3a178ceac76fee41cf48bb6ed007d241c079979bf","messages_hash":"b0cc104a22aa13139de9b6ddd2f363738160a44272d0c5f60e9568b4cd718f23","txlist_hash":"288c9c0f37cb0c2e9db66d4b88b165391a67f06016ac84c485e9b9158ee51f2d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(124,310016,'insert','blocks','{"block_hash":"99dc7d2627efb4e5e618a53b9898b4ca39c70e98fe9bf39f68a6c980f5b64ef9","block_index":310016,"block_time":310016000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(124,310015,'insert','blocks','{"block_hash":"99dc7d2627efb4e5e618a53b9898b4ca39c70e98fe9bf39f68a6c980f5b64ef9","block_index":310016,"block_time":310016000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(125,310016,'insert','transactions','{"block_hash":"99dc7d2627efb4e5e618a53b9898b4ca39c70e98fe9bf39f68a6c980f5b64ef9","block_index":310016,"block_time":310016000,"btc_amount":1000,"data":"00000028000252bb33c8000000002cb417800000000026be36803ff0000000000000000013b00000000a","destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"94b11df6b519372bfbcf0ec5f3e6465a63e323c7cd7cff83a8abd78596d4bce4","tx_index":17}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(126,310016,'insert','debits','{"action":"bet","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310016,"event":"94b11df6b519372bfbcf0ec5f3e6465a63e323c7cd7cff83a8abd78596d4bce4","quantity":750000000,"tx_index":17}',0,'DEBIT'); INSERT INTO messages VALUES(127,310016,'insert','bets','{"bet_type":2,"block_index":310016,"counterwager_quantity":650000000,"counterwager_remaining":650000000,"deadline":1388000200,"expiration":10,"expire_index":310026,"fee_fraction_int":99999999.0,"feed_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","leverage":5040,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"open","target_value":1.0,"tx_hash":"94b11df6b519372bfbcf0ec5f3e6465a63e323c7cd7cff83a8abd78596d4bce4","tx_index":17,"wager_quantity":750000000,"wager_remaining":750000000}',0,'OPEN_BET'); INSERT INTO messages VALUES(128,310016,'parse','transactions','{"supported":true,"tx_hash":"94b11df6b519372bfbcf0ec5f3e6465a63e323c7cd7cff83a8abd78596d4bce4","tx_index":17}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(129,310016,'parse','blocks','{"block_index":310016,"ledger_hash":"17a28cca0777254af26544edfefcad8810e847e5d173fded9a7813719cf1162f","messages_hash":"de03065dfd7c73a58301d2ad9411a1f7a4eb42123adaba0ac82f4b26412ab29d","txlist_hash":"1bf7e0a4aa8356584087591a8c8e8b28185a6ebfe1a15a85f01165a04ff57913"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(130,310017,'insert','blocks','{"block_hash":"8a4fedfbf734b91a5c5761a7bcb3908ea57169777a7018148c51ff611970e4a3","block_index":310017,"block_time":310017000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(130,310016,'insert','blocks','{"block_hash":"8a4fedfbf734b91a5c5761a7bcb3908ea57169777a7018148c51ff611970e4a3","block_index":310017,"block_time":310017000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(131,310017,'insert','transactions','{"block_hash":"8a4fedfbf734b91a5c5761a7bcb3908ea57169777a7018148c51ff611970e4a3","block_index":310017,"block_time":310017000,"btc_amount":1000,"data":"00000028000352bb33c80000000026be3680000000002cb417803ff0000000000000000013b00000000a","destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"a7daff1ca2874f6b18a8f1a1e70db27f58c6b39a9f106c353223fbccde57098e","tx_index":18}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(132,310017,'insert','debits','{"action":"bet","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310017,"event":"a7daff1ca2874f6b18a8f1a1e70db27f58c6b39a9f106c353223fbccde57098e","quantity":650000000,"tx_index":18}',0,'DEBIT'); INSERT INTO messages VALUES(133,310017,'insert','bets','{"bet_type":3,"block_index":310017,"counterwager_quantity":750000000,"counterwager_remaining":750000000,"deadline":1388000200,"expiration":10,"expire_index":310027,"fee_fraction_int":99999999.0,"feed_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","leverage":5040,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"open","target_value":1.0,"tx_hash":"a7daff1ca2874f6b18a8f1a1e70db27f58c6b39a9f106c353223fbccde57098e","tx_index":18,"wager_quantity":650000000,"wager_remaining":650000000}',0,'OPEN_BET'); @@ -603,10 +603,10 @@ INSERT INTO messages VALUES(134,310017,'insert','credits','{"address":"1_mn6q3dS INSERT INTO messages VALUES(135,310017,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"94b11df6b519372bfbcf0ec5f3e6465a63e323c7cd7cff83a8abd78596d4bce4","wager_remaining":0}',0,'BET_UPDATE'); INSERT INTO messages VALUES(136,310017,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310017,"calling_function":"filled","event":"a7daff1ca2874f6b18a8f1a1e70db27f58c6b39a9f106c353223fbccde57098e","quantity":0,"tx_index":18}',0,'CREDIT'); INSERT INTO messages VALUES(137,310017,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"a7daff1ca2874f6b18a8f1a1e70db27f58c6b39a9f106c353223fbccde57098e","wager_remaining":0}',0,'BET_UPDATE'); -INSERT INTO messages VALUES(138,310016,'insert','bet_matches','{"backward_quantity":650000000,"block_index":310016,"deadline":1388000200,"fee_fraction_int":99999999,"feed_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","forward_quantity":750000000,"id":"94b11df6b519372bfbcf0ec5f3e6465a63e323c7cd7cff83a8abd78596d4bce4_a7daff1ca2874f6b18a8f1a1e70db27f58c6b39a9f106c353223fbccde57098e","initial_value":100.0,"leverage":5040,"match_expire_index":310026,"status":"pending","target_value":1.0,"tx0_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx0_bet_type":2,"tx0_block_index":310016,"tx0_expiration":10,"tx0_hash":"94b11df6b519372bfbcf0ec5f3e6465a63e323c7cd7cff83a8abd78596d4bce4","tx0_index":17,"tx1_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx1_bet_type":3,"tx1_block_index":310017,"tx1_expiration":10,"tx1_hash":"a7daff1ca2874f6b18a8f1a1e70db27f58c6b39a9f106c353223fbccde57098e","tx1_index":18}',0,'BET_MATCH'); +INSERT INTO messages VALUES(138,310017,'insert','bet_matches','{"backward_quantity":650000000,"block_index":310016,"deadline":1388000200,"fee_fraction_int":99999999,"feed_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","forward_quantity":750000000,"id":"94b11df6b519372bfbcf0ec5f3e6465a63e323c7cd7cff83a8abd78596d4bce4_a7daff1ca2874f6b18a8f1a1e70db27f58c6b39a9f106c353223fbccde57098e","initial_value":100.0,"leverage":5040,"match_expire_index":310026,"status":"pending","target_value":1.0,"tx0_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx0_bet_type":2,"tx0_block_index":310016,"tx0_expiration":10,"tx0_hash":"94b11df6b519372bfbcf0ec5f3e6465a63e323c7cd7cff83a8abd78596d4bce4","tx0_index":17,"tx1_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx1_bet_type":3,"tx1_block_index":310017,"tx1_expiration":10,"tx1_hash":"a7daff1ca2874f6b18a8f1a1e70db27f58c6b39a9f106c353223fbccde57098e","tx1_index":18}',0,'BET_MATCH'); INSERT INTO messages VALUES(139,310017,'parse','transactions','{"supported":true,"tx_hash":"a7daff1ca2874f6b18a8f1a1e70db27f58c6b39a9f106c353223fbccde57098e","tx_index":18}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(140,310017,'parse','blocks','{"block_index":310017,"ledger_hash":"1fb58120e9eb78908fda6265cad12b4a5770701e9a271bd5c4bc94059bd3bab5","messages_hash":"22b69c233a30db17deaf78087019583ae1097211b856b9235b11e341b0420b03","txlist_hash":"62678a570c40b5a12469e442b3a54f1416d9113de2db501f37ed533f345e71c1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(141,310018,'insert','blocks','{"block_hash":"35c06f9e3de39e4e56ceb1d1a22008f52361c50dd0d251c0acbe2e3c2dba8ed3","block_index":310018,"block_time":310018000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(141,310017,'insert','blocks','{"block_hash":"35c06f9e3de39e4e56ceb1d1a22008f52361c50dd0d251c0acbe2e3c2dba8ed3","block_index":310018,"block_time":310018000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(142,310018,'insert','transactions','{"block_hash":"35c06f9e3de39e4e56ceb1d1a22008f52361c50dd0d251c0acbe2e3c2dba8ed3","block_index":310018,"block_time":310018000,"btc_amount":0,"data":"0000001e52bb33324058f7256ffc115e004c4b4009556e69742054657374","destination":"","fee":6800,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"f020ae6c0b1aadbba4893581678ef87f9d2a925be5e6b08d02440e213f6183b4","tx_index":19}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(143,310018,'insert','broadcasts','{"block_index":310018,"fee_fraction_int":5000000,"locked":false,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","text":"Unit Test","timestamp":1388000050,"tx_hash":"f020ae6c0b1aadbba4893581678ef87f9d2a925be5e6b08d02440e213f6183b4","tx_index":19,"value":99.86166}',0,'BROADCAST'); INSERT INTO messages VALUES(144,310018,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310018,"calling_function":"bet settled: liquidated for bear","event":"f020ae6c0b1aadbba4893581678ef87f9d2a925be5e6b08d02440e213f6183b4","quantity":59137500,"tx_index":19}',0,'CREDIT'); @@ -615,7 +615,7 @@ INSERT INTO messages VALUES(146,310018,'insert','bet_match_resolutions','{"bear_ INSERT INTO messages VALUES(147,310018,'update','bet_matches','{"id":"74062934f0a97c41851735fef2a7df4d9ad9945424f09a54281e145a5e32492f_6a5f30666a5f24b6e0e6f31cf06b22ee74d3e692a550297450bdf1d36b1cc167","status":"settled: liquidated for bear"}',0,'BET_MATCH_UPDATE'); INSERT INTO messages VALUES(148,310018,'parse','transactions','{"supported":true,"tx_hash":"f020ae6c0b1aadbba4893581678ef87f9d2a925be5e6b08d02440e213f6183b4","tx_index":19}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(149,310018,'parse','blocks','{"block_index":310018,"ledger_hash":"304243c1b11644e04d325d7100e4c757c07b874f0349e60163a5a544e84e951f","messages_hash":"277c84ad2141397b5cd35cac07e45452ecdd845668f7684bb1c1679f4ef6a50b","txlist_hash":"a174e4813aa967f5466148f27f4f8511ed9404295bf613e112c08b72eb3229ad"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(150,310019,'insert','blocks','{"block_hash":"114affa0c4f34b1ebf8e2778c9477641f60b5b9e8a69052158041d4c41893294","block_index":310019,"block_time":310019000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(150,310018,'insert','blocks','{"block_hash":"114affa0c4f34b1ebf8e2778c9477641f60b5b9e8a69052158041d4c41893294","block_index":310019,"block_time":310019000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(151,310019,'insert','transactions','{"block_hash":"114affa0c4f34b1ebf8e2778c9477641f60b5b9e8a69052158041d4c41893294","block_index":310019,"block_time":310019000,"btc_amount":0,"data":"0000001e52bb3365405915f3b645a1cb004c4b4009556e69742054657374","destination":"","fee":6800,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"dccbd8852c8d489d32f87be0c86a631b63ec50202b0109a2be6aa96f27f89600","tx_index":20}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(152,310019,'insert','broadcasts','{"block_index":310019,"fee_fraction_int":5000000,"locked":false,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","text":"Unit Test","timestamp":1388000101,"tx_hash":"dccbd8852c8d489d32f87be0c86a631b63ec50202b0109a2be6aa96f27f89600","tx_index":20,"value":100.343}',0,'BROADCAST'); INSERT INTO messages VALUES(153,310019,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310019,"calling_function":"bet settled","event":"dccbd8852c8d489d32f87be0c86a631b63ec50202b0109a2be6aa96f27f89600","quantity":159300000,"tx_index":20}',0,'CREDIT'); @@ -625,7 +625,7 @@ INSERT INTO messages VALUES(156,310019,'insert','bet_match_resolutions','{"bear_ INSERT INTO messages VALUES(157,310019,'update','bet_matches','{"id":"2066b9a6b8913412384a0401ef57bfc604e7c5a2c141e23111a8ccc6881b0fb3_65db3ab58b65891a947ab9bdba4723e907678bf3b48397add62802dcc65d1d8e","status":"settled"}',0,'BET_MATCH_UPDATE'); INSERT INTO messages VALUES(158,310019,'parse','transactions','{"supported":true,"tx_hash":"dccbd8852c8d489d32f87be0c86a631b63ec50202b0109a2be6aa96f27f89600","tx_index":20}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(159,310019,'parse','blocks','{"block_index":310019,"ledger_hash":"fc9905ee4863b3cf29a3e558ee690a24ed978a4fd79c464bdde30a34cfff19fe","messages_hash":"0928aaa2af960f1750455c96196f5f331bce38c09b7cc315f40aacfc8b363c3b","txlist_hash":"c551c2094651cd0e06e0cd9d513fec771b69f4bb89c3034f201c89f703cf8a23"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(160,310020,'insert','blocks','{"block_hash":"d93c79920e4a42164af74ecb5c6b903ff6055cdc007376c74dfa692c8d85ebc9","block_index":310020,"block_time":310020000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(160,310019,'insert','blocks','{"block_hash":"d93c79920e4a42164af74ecb5c6b903ff6055cdc007376c74dfa692c8d85ebc9","block_index":310020,"block_time":310020000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(161,310020,'insert','transactions','{"block_hash":"d93c79920e4a42164af74ecb5c6b903ff6055cdc007376c74dfa692c8d85ebc9","block_index":310020,"block_time":310020000,"btc_amount":0,"data":"0000001e52bb33c94000000000000000004c4b4009556e69742054657374","destination":"","fee":6800,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"457f36dccce6664a8e28b00ebf47aa60ba4a41b46642aceef0e2a297429eb64e","tx_index":21}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(162,310020,'insert','broadcasts','{"block_index":310020,"fee_fraction_int":5000000,"locked":false,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","text":"Unit Test","timestamp":1388000201,"tx_hash":"457f36dccce6664a8e28b00ebf47aa60ba4a41b46642aceef0e2a297429eb64e","tx_index":21,"value":2.0}',0,'BROADCAST'); INSERT INTO messages VALUES(163,310020,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310020,"calling_function":"bet settled: for notequal","event":"457f36dccce6664a8e28b00ebf47aa60ba4a41b46642aceef0e2a297429eb64e","quantity":1330000000,"tx_index":21}',0,'CREDIT'); @@ -634,18 +634,18 @@ INSERT INTO messages VALUES(165,310020,'insert','bet_match_resolutions','{"bear_ INSERT INTO messages VALUES(166,310020,'update','bet_matches','{"id":"94b11df6b519372bfbcf0ec5f3e6465a63e323c7cd7cff83a8abd78596d4bce4_a7daff1ca2874f6b18a8f1a1e70db27f58c6b39a9f106c353223fbccde57098e","status":"settled: for notequal"}',0,'BET_MATCH_UPDATE'); INSERT INTO messages VALUES(167,310020,'parse','transactions','{"supported":true,"tx_hash":"457f36dccce6664a8e28b00ebf47aa60ba4a41b46642aceef0e2a297429eb64e","tx_index":21}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(168,310020,'parse','blocks','{"block_index":310020,"ledger_hash":"e433feac4a09ad727bd3764b10a568acf5c659745a695e9d7e8790514f6bc98e","messages_hash":"859eb68b2ff99d0621c4d634d717d985688b8e0ca83b84e330446a25ccbd5fe1","txlist_hash":"087d41720991e4b6bb72c6141334a65c9a289454dd8fd57edc33a09db467d086"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(169,310021,'insert','blocks','{"block_hash":"7c2460bb32c5749c856486393239bf7a0ac789587ac71f32e7237910da8097f2","block_index":310021,"block_time":310021000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(169,310020,'insert','blocks','{"block_hash":"7c2460bb32c5749c856486393239bf7a0ac789587ac71f32e7237910da8097f2","block_index":310021,"block_time":310021000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(170,310021,'insert','transactions','{"block_hash":"7c2460bb32c5749c856486393239bf7a0ac789587ac71f32e7237910da8097f2","block_index":310021,"block_time":310021000,"btc_amount":0,"data":"0000000a00000000000047670000000002faf08000000000000000010000000002faf080000a0000000000000000","destination":"","fee":6800,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"6cb08a1c0547ab0d0d37b74633c1c8a2fd2372d9fd72eb3abdea298f2b245fee","tx_index":22}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(171,310021,'insert','debits','{"action":"open order","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"BBBB","block_index":310021,"event":"6cb08a1c0547ab0d0d37b74633c1c8a2fd2372d9fd72eb3abdea298f2b245fee","quantity":50000000,"tx_index":22}',0,'DEBIT'); INSERT INTO messages VALUES(172,310021,'insert','orders','{"block_index":310021,"expiration":10,"expire_index":310031,"fee_provided":6800,"fee_provided_remaining":6800,"fee_required":0,"fee_required_remaining":0,"get_asset":"XCP","get_quantity":50000000,"get_remaining":50000000,"give_asset":"BBBB","give_quantity":50000000,"give_remaining":50000000,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"open","tx_hash":"6cb08a1c0547ab0d0d37b74633c1c8a2fd2372d9fd72eb3abdea298f2b245fee","tx_index":22}',0,'OPEN_ORDER'); INSERT INTO messages VALUES(173,310021,'parse','transactions','{"supported":true,"tx_hash":"6cb08a1c0547ab0d0d37b74633c1c8a2fd2372d9fd72eb3abdea298f2b245fee","tx_index":22}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(174,310021,'parse','blocks','{"block_index":310021,"ledger_hash":"622f92da40eae0b1b57218b32ad18daf7d79c9e0202fed4a288d75b8fdcd19d2","messages_hash":"9e323ccc0a72f968a5886d5bd8cd26c990602bd87d0e65e8cbd64343c4b02bfe","txlist_hash":"caa77e83354d56437795411f9625dff332c0dd39d059a0ad7381fe1f37e38999"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(175,310022,'insert','blocks','{"block_hash":"44435f9a99a0aa12a9bfabdc4cb8119f6ea6a6e1350d2d65445fb66a456db5fc","block_index":310022,"block_time":310022000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(175,310021,'insert','blocks','{"block_hash":"44435f9a99a0aa12a9bfabdc4cb8119f6ea6a6e1350d2d65445fb66a456db5fc","block_index":310022,"block_time":310022000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(176,310022,'insert','transactions','{"block_hash":"44435f9a99a0aa12a9bfabdc4cb8119f6ea6a6e1350d2d65445fb66a456db5fc","block_index":310022,"block_time":310022000,"btc_amount":100000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":14675,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"c81cd36f1efabd22f1a00923714fd5a5f1ba07852ef1f0763223563e3f55dfda","tx_index":23}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(177,310022,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310022,"calling_function":"burn","event":"c81cd36f1efabd22f1a00923714fd5a5f1ba07852ef1f0763223563e3f55dfda","quantity":56999887262,"tx_index":23}',0,'CREDIT'); INSERT INTO messages VALUES(178,310022,'insert','burns','{"block_index":310022,"burned":38000000,"earned":56999887262,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","tx_hash":"c81cd36f1efabd22f1a00923714fd5a5f1ba07852ef1f0763223563e3f55dfda","tx_index":23}',0,'BURN'); INSERT INTO messages VALUES(179,310022,'parse','blocks','{"block_index":310022,"ledger_hash":"b7aa8d9ebc37d52d8dcce2cc17431d6edf5a183b73ac85bb3d91276592215cfd","messages_hash":"a9bfc8463d636a888c8ae61b3fc13d2d32768fa1920b980cb5ea967b4863e6ec","txlist_hash":"df23960a57099b0b64572553e56794b1eff3004e684ee2b31187b585aeb03587"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(180,310023,'insert','blocks','{"block_hash":"d8cf5bec1bbcab8ca4f495352afde3b6572b7e1d61b3976872ebb8e9d30ccb08","block_index":310023,"block_time":310023000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(180,310022,'insert','blocks','{"block_hash":"d8cf5bec1bbcab8ca4f495352afde3b6572b7e1d61b3976872ebb8e9d30ccb08","block_index":310023,"block_time":310023000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(181,310023,'insert','transactions','{"block_hash":"d8cf5bec1bbcab8ca4f495352afde3b6572b7e1d61b3976872ebb8e9d30ccb08","block_index":310023,"block_time":310023000,"btc_amount":1000,"data":"0000000000000000000047680000000000002710","destination":"1_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"c576ecde0f86c86725b540c9f5e6ae57a378fe9694260f7859eca55613d9d341","tx_index":24}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(182,310023,'update','bets','{"status":"expired","tx_hash":"74062934f0a97c41851735fef2a7df4d9ad9945424f09a54281e145a5e32492f"}',0,'BET_UPDATE'); INSERT INTO messages VALUES(183,310023,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310023,"calling_function":"recredit wager remaining","event":"74062934f0a97c41851735fef2a7df4d9ad9945424f09a54281e145a5e32492f","quantity":8500000,"tx_index":0}',0,'CREDIT'); @@ -655,164 +655,164 @@ INSERT INTO messages VALUES(186,310023,'insert','credits','{"address":"1_mnfAHmd INSERT INTO messages VALUES(187,310023,'insert','sends','{"asset":"BBBC","block_index":310023,"destination":"1_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","quantity":10000,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","tx_hash":"c576ecde0f86c86725b540c9f5e6ae57a378fe9694260f7859eca55613d9d341","tx_index":24}',0,'SEND'); INSERT INTO messages VALUES(188,310023,'parse','transactions','{"supported":true,"tx_hash":"c576ecde0f86c86725b540c9f5e6ae57a378fe9694260f7859eca55613d9d341","tx_index":24}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(189,310023,'parse','blocks','{"block_index":310023,"ledger_hash":"501c058860063ca599f3b946d465b3bbd84fd483a2a80527e456e3de32b48a19","messages_hash":"82ecd86662e345e85c8e68ef7a8dbad744af2415bd71756cdd5824ac35b9655e","txlist_hash":"c680a6d4f839ba4f9420a99f0512e51fc1db0b661ed027332f440c6089eb615a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(190,310024,'insert','blocks','{"block_hash":"b03042b4e18a222b4c8d1e9e1970d93e6e2a2d41686d227ff8ecf0a839223dc5","block_index":310024,"block_time":310024000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(190,310023,'insert','blocks','{"block_hash":"b03042b4e18a222b4c8d1e9e1970d93e6e2a2d41686d227ff8ecf0a839223dc5","block_index":310024,"block_time":310024000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(191,310024,'parse','blocks','{"block_index":310024,"ledger_hash":"222986ec44fae1a6196d64dec24b79872970823f17bf0459d3b247bdef316675","messages_hash":"2d94009516ad0a6a7696d3c90c4a18b18970ed29702a91684120939b7f7e424f","txlist_hash":"f40aab7ef7167a17e35279423d9c14d49a9ebc05691fa658b09add1373216959"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(192,310025,'insert','blocks','{"block_hash":"a872e560766832cc3b4f7f222228cb6db882ce3c54f6459f62c71d5cd6e90666","block_index":310025,"block_time":310025000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(192,310024,'insert','blocks','{"block_hash":"a872e560766832cc3b4f7f222228cb6db882ce3c54f6459f62c71d5cd6e90666","block_index":310025,"block_time":310025000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(193,310025,'parse','blocks','{"block_index":310025,"ledger_hash":"bcd88006b9cb98445a74c656d424435e82eeaef95dd9c54e394b42808dc9cb8b","messages_hash":"07d351ee43763fbb80ea1d600cb501b6f8b0105cf3d3d277b9a9714527a81235","txlist_hash":"0e3736813d3c0e789cd9474449abcf83118b5559cbc2f4dfd4d3ee51b5847a57"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(194,310026,'insert','blocks','{"block_hash":"6c96350f6f2f05810f19a689de235eff975338587194a36a70dfd0fcd490941a","block_index":310026,"block_time":310026000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(194,310025,'insert','blocks','{"block_hash":"6c96350f6f2f05810f19a689de235eff975338587194a36a70dfd0fcd490941a","block_index":310026,"block_time":310026000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(195,310026,'parse','blocks','{"block_index":310026,"ledger_hash":"3de7bf2043ac2e68bc9eaf8d1c12195a4f2400bc78c8deed0d487af11edf401e","messages_hash":"3b432d9f048634678497de80535eced0de2db802c86b3ecd6f7e3052285f2819","txlist_hash":"c3572580398fcd71e5a1fef6e10217a99dec1aa605d61830ebb64ea65b7907ae"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(196,310027,'insert','blocks','{"block_hash":"d7acfac66df393c4482a14c189742c0571b89442eb7f817b34415a560445699e","block_index":310027,"block_time":310027000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(196,310026,'insert','blocks','{"block_hash":"d7acfac66df393c4482a14c189742c0571b89442eb7f817b34415a560445699e","block_index":310027,"block_time":310027000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(197,310027,'parse','blocks','{"block_index":310027,"ledger_hash":"6c2a67783cf36e8987dc1805f87532ee1b94f79fb00952d8ee4cf3daaf655f85","messages_hash":"139682b87ae2b72b9fbd62ca0d3788ab4bf20239f6e27e0142e7b4d810b3138d","txlist_hash":"b8b9d102d56df94d4fcea6f8aeb92d3cb859d3281c9fac7407842b7f05313737"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(198,310028,'insert','blocks','{"block_hash":"02409fcf8fa06dafcb7f11e38593181d9c42cc9d5e2ddc304d098f990bd9530b","block_index":310028,"block_time":310028000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(198,310027,'insert','blocks','{"block_hash":"02409fcf8fa06dafcb7f11e38593181d9c42cc9d5e2ddc304d098f990bd9530b","block_index":310028,"block_time":310028000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(199,310028,'parse','blocks','{"block_index":310028,"ledger_hash":"659c73390e2e7eccc07d690fb438181c604787208bc45f466e57721fa1e21a64","messages_hash":"281c45bea9359ef175c8e8b50167fe72be91b589dd7e589d51280d15ffefb8dc","txlist_hash":"55eafa176bc145ec7b98497c8a156226c68bd3b921cbdd06a890b2bd660ca050"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(200,310029,'insert','blocks','{"block_hash":"3c739fa8b40c118d5547ea356ee8d10ee2898871907643ec02e5db9d00f03cc6","block_index":310029,"block_time":310029000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(200,310028,'insert','blocks','{"block_hash":"3c739fa8b40c118d5547ea356ee8d10ee2898871907643ec02e5db9d00f03cc6","block_index":310029,"block_time":310029000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(201,310029,'parse','blocks','{"block_index":310029,"ledger_hash":"87449e7ff7316e49012934d83c1f5b733cedf39680299a9582eb216e260e0c02","messages_hash":"39af1ee82e4334b2b0596abf86dc82603d9b2c8a5d046c5db281ecf34b303a30","txlist_hash":"c2fc809ff3ef6b74b10b1439fe15c275c6fd925e92dea73cf9d603948aba0d8f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(202,310030,'insert','blocks','{"block_hash":"d5071cddedf89765ee0fd58f209c1c7d669ba8ea66200a57587da8b189b9e4f5","block_index":310030,"block_time":310030000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(202,310029,'insert','blocks','{"block_hash":"d5071cddedf89765ee0fd58f209c1c7d669ba8ea66200a57587da8b189b9e4f5","block_index":310030,"block_time":310030000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(203,310030,'parse','blocks','{"block_index":310030,"ledger_hash":"6c4a7f749d0308edf5c88b3ea4de3b1d497ba3bc06435594d77686318b744b0f","messages_hash":"eaf3156993560de86b2de78af58593d00da00db7fd7bab33a7f7cc56d49944f6","txlist_hash":"45db1d0cde22349299df8245e7ed24d308e1b1cb227098178606650f20832aaa"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(204,310031,'insert','blocks','{"block_hash":"0b02b10f41380fff27c543ea8891ecb845bf7a003ac5c87e15932aff3bfcf689","block_index":310031,"block_time":310031000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(204,310030,'insert','blocks','{"block_hash":"0b02b10f41380fff27c543ea8891ecb845bf7a003ac5c87e15932aff3bfcf689","block_index":310031,"block_time":310031000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(205,310031,'parse','blocks','{"block_index":310031,"ledger_hash":"ecc04b1b2c7803ca17dc2a32adebd0960de2c04c8dbfec9cd88771dd883c885a","messages_hash":"0806bca89167cf716795644fc4577dc88f73a1ab2420109a4a7fb504dade4e65","txlist_hash":"981653075dd609f44e0a5673dac2b63824b84e26080ec226547892c67dd7cc33"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(206,310032,'insert','blocks','{"block_hash":"66346be81e6ba04544f2ae643b76c2b7b1383f038fc2636e02e49dc7ec144074","block_index":310032,"block_time":310032000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(206,310031,'insert','blocks','{"block_hash":"66346be81e6ba04544f2ae643b76c2b7b1383f038fc2636e02e49dc7ec144074","block_index":310032,"block_time":310032000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(207,310032,'update','orders','{"status":"expired","tx_hash":"6cb08a1c0547ab0d0d37b74633c1c8a2fd2372d9fd72eb3abdea298f2b245fee"}',0,'ORDER_UPDATE'); INSERT INTO messages VALUES(208,310032,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"BBBB","block_index":310032,"calling_function":"cancel order","event":"6cb08a1c0547ab0d0d37b74633c1c8a2fd2372d9fd72eb3abdea298f2b245fee","quantity":50000000,"tx_index":0}',0,'CREDIT'); INSERT INTO messages VALUES(209,310032,'insert','order_expirations','{"block_index":310032,"order_hash":"6cb08a1c0547ab0d0d37b74633c1c8a2fd2372d9fd72eb3abdea298f2b245fee","source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2"}',0,'ORDER_EXPIRATION'); INSERT INTO messages VALUES(210,310032,'parse','blocks','{"block_index":310032,"ledger_hash":"01e769c5b990db44a9e534bc6c759567eb4283e0ea252578dd525923c7fde02c","messages_hash":"49cd53ea397947d31318ad902433661e23e78cac31fd544f67ee87f7cf5a5e47","txlist_hash":"81778134948c3577216eeeb6db7fe9687545d855dc3b5f6bdf6053a7edf3eaf3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(211,310033,'insert','blocks','{"block_hash":"999c65df9661f73e8c01f1da1afda09ac16788b72834f0ff5ea3d1464afb4707","block_index":310033,"block_time":310033000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(211,310032,'insert','blocks','{"block_hash":"999c65df9661f73e8c01f1da1afda09ac16788b72834f0ff5ea3d1464afb4707","block_index":310033,"block_time":310033000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(212,310033,'parse','blocks','{"block_index":310033,"ledger_hash":"2df6b8dca0ffa8d6d55997605188637c2b86300e4dd7ebe3f1f275690169fd46","messages_hash":"03e1ca09ca2ad95c3d8625cdbdcefd20d69f2442d56a49c570d85c74935e232a","txlist_hash":"650b0875a0fb44a0ad1b04edf1a0eb1b50b5ecc423c6ecdd37b5aa60b5e85663"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(213,310034,'insert','blocks','{"block_hash":"f552edd2e0a648230f3668e72ddf0ddfb1e8ac0f4c190f91b89c1a8c2e357208","block_index":310034,"block_time":310034000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(213,310033,'insert','blocks','{"block_hash":"f552edd2e0a648230f3668e72ddf0ddfb1e8ac0f4c190f91b89c1a8c2e357208","block_index":310034,"block_time":310034000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(214,310034,'parse','blocks','{"block_index":310034,"ledger_hash":"7f0dc7c1527a7d11831d272f0295eacabcb96fa3599f5a716bd29ba1bb6b7577","messages_hash":"40b21162c2bdec9408ffa79df90b098be7f3adfcbcd8f6bc6e6064d0b3a571ac","txlist_hash":"e9d6c050b077d8e6902999bf64a0f1bf420c881b8a32c511ae81b0359e83a542"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(215,310035,'insert','blocks','{"block_hash":"a13cbb016f3044207a46967a4ba1c87dab411f78c55c1179f2336653c2726ae2","block_index":310035,"block_time":310035000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(215,310034,'insert','blocks','{"block_hash":"a13cbb016f3044207a46967a4ba1c87dab411f78c55c1179f2336653c2726ae2","block_index":310035,"block_time":310035000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(216,310035,'parse','blocks','{"block_index":310035,"ledger_hash":"5e0cdf1764ed94672c29144f9c1bd9c3e70784f17c9dd1c9e4ce703a99bb3599","messages_hash":"aaaa2778599705d04a371a7488537f432426d15e6f3b3230f0d86f8fa7f266a0","txlist_hash":"e755b5d80c9995dfa5763b080b9bdd349fd7b5bd940a661836ad418202b77384"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(217,310036,'insert','blocks','{"block_hash":"158648a98f1e1bd1875584ce8449eb15a4e91a99a923bbb24c4210135cef0c76","block_index":310036,"block_time":310036000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(217,310035,'insert','blocks','{"block_hash":"158648a98f1e1bd1875584ce8449eb15a4e91a99a923bbb24c4210135cef0c76","block_index":310036,"block_time":310036000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(218,310036,'parse','blocks','{"block_index":310036,"ledger_hash":"96da34a5a66b89aa3e8857b4a4edca51a56a0cbbfe600d8153077875624a153e","messages_hash":"a68c4c24471575ea622ce59af306b947b521f01abeaa347a8e33eb651cf91a25","txlist_hash":"cbc0139fb09af6a6c63e07847a37f15767a1f7b01d6305cf40179de841c4f093"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(219,310037,'insert','blocks','{"block_hash":"563acfd6d991ce256d5655de2e9429975c8dceeb221e76d5ec6e9e24a2c27c07","block_index":310037,"block_time":310037000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(219,310036,'insert','blocks','{"block_hash":"563acfd6d991ce256d5655de2e9429975c8dceeb221e76d5ec6e9e24a2c27c07","block_index":310037,"block_time":310037000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(220,310037,'parse','blocks','{"block_index":310037,"ledger_hash":"d481358c19b4220aa9a3d135fd0651fada6df8d0f27b9ec954ac07950e876c0c","messages_hash":"7aa07b58643d61192acc195054c76aa198bc0615a8d1015efd485e6078c84797","txlist_hash":"0493eb6bbab5ced7f25c6f5a3b32e4e2da321a5c761855ef64b5e050ddcfe431"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(221,310038,'insert','blocks','{"block_hash":"b44b4cad12431c32df27940e18d51f63897c7472b70950d18454edfd640490b2","block_index":310038,"block_time":310038000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(221,310037,'insert','blocks','{"block_hash":"b44b4cad12431c32df27940e18d51f63897c7472b70950d18454edfd640490b2","block_index":310038,"block_time":310038000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(222,310038,'parse','blocks','{"block_index":310038,"ledger_hash":"4e9fcc454ee53b3617c792eb6577c2eefa6eee6aa4a2925538cb1976d48817c9","messages_hash":"d06d2f843297dda75791f6d438a0c22a679fa705606c8a82f71c3a316e24bfdd","txlist_hash":"64b95af50bbee190166820a564e858e5c86769c04b22a68c2bed5adee0f7292f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(223,310039,'insert','blocks','{"block_hash":"5fa1ae9c5e8a599247458987b006ad3a57f686df1f7cc240bf119e911b56c347","block_index":310039,"block_time":310039000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(223,310038,'insert','blocks','{"block_hash":"5fa1ae9c5e8a599247458987b006ad3a57f686df1f7cc240bf119e911b56c347","block_index":310039,"block_time":310039000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(224,310039,'parse','blocks','{"block_index":310039,"ledger_hash":"795c5652d9679942a02060edfb497b072009695d9a72fb144fa3591dba65a2ce","messages_hash":"975d014fa7da9eb851641c145a0f55fde983a0d8670ed0008dbed98bde05f8b7","txlist_hash":"9927f1558918a59509f668789e75198eb432fd63e0a7ffb46160d002c0932188"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(225,310040,'insert','blocks','{"block_hash":"7200ded406675453eadddfbb2d14c2a4526c7dc2b5de14bd48b29243df5e1aa3","block_index":310040,"block_time":310040000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(225,310039,'insert','blocks','{"block_hash":"7200ded406675453eadddfbb2d14c2a4526c7dc2b5de14bd48b29243df5e1aa3","block_index":310040,"block_time":310040000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(226,310040,'parse','blocks','{"block_index":310040,"ledger_hash":"e569e6e8083818e594e92b3356833e8dd54fcfcf5ed25af0d09e36e24b9dd441","messages_hash":"8f1a984f0da070ff524c9fc9517efd3567d25bacc25f29ba32d03d06a7c43c36","txlist_hash":"969f7176f1a56d43e0d1b4da9cbac17cb1a934be64c12b3784ef33b584513271"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(227,310041,'insert','blocks','{"block_hash":"5db592ff9ba5fac1e030cf22d6c13b70d330ba397f415340086ee7357143b359","block_index":310041,"block_time":310041000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(227,310040,'insert','blocks','{"block_hash":"5db592ff9ba5fac1e030cf22d6c13b70d330ba397f415340086ee7357143b359","block_index":310041,"block_time":310041000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(228,310041,'parse','blocks','{"block_index":310041,"ledger_hash":"2247fcc633175a91921d226f412e56822379c79ca799117c39ecaaca0a702192","messages_hash":"373d191cad758b4644384ebfbef2cf1e49c038716f6672447b5d36e69bad7d88","txlist_hash":"29cb8f1b29affa41416aca0265599863f6b739538f13bc6672f6b3c17e411045"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(229,310042,'insert','blocks','{"block_hash":"826fd4701ef2824e9559b069517cd3cb990aff6a4690830f78fc845ab77fa3e4","block_index":310042,"block_time":310042000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(229,310041,'insert','blocks','{"block_hash":"826fd4701ef2824e9559b069517cd3cb990aff6a4690830f78fc845ab77fa3e4","block_index":310042,"block_time":310042000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(230,310042,'parse','blocks','{"block_index":310042,"ledger_hash":"0246c3a2a70b33a038ccdb816f6b0922a50d08310f360cbd5db4df58e97fc4dd","messages_hash":"3758f623adbf54b2e0471b990dd67c65bebbf41d86e3277bda367bcc0a98a8cc","txlist_hash":"d1ca4c9abe26de83d9a0170461c87f2c219926f8dcb0c48793d74a0cbf01a43a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(231,310043,'insert','blocks','{"block_hash":"2254a12ada208f1dd57bc17547ecaf3c44720323c47bc7d4b1262477cb7f3c51","block_index":310043,"block_time":310043000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(231,310042,'insert','blocks','{"block_hash":"2254a12ada208f1dd57bc17547ecaf3c44720323c47bc7d4b1262477cb7f3c51","block_index":310043,"block_time":310043000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(232,310043,'parse','blocks','{"block_index":310043,"ledger_hash":"cbe39e9d1a132cdc568f893bbc3d4f55d27bacf7af31f027ebea1b4bed9f0009","messages_hash":"a209a4e543642de2708ff915d0c0e3e966b378dd48feef2430a7d55ac8ff238c","txlist_hash":"452b2e3ff4075f702cddcb4b8fd9006c756dda7a3527d635f637a200fd621c91"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(233,310044,'insert','blocks','{"block_hash":"3346d24118d8af0b3c6bcc42f8b85792e7a2e7036ebf6e4c25f4f6723c78e46b","block_index":310044,"block_time":310044000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(233,310043,'insert','blocks','{"block_hash":"3346d24118d8af0b3c6bcc42f8b85792e7a2e7036ebf6e4c25f4f6723c78e46b","block_index":310044,"block_time":310044000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(234,310044,'parse','blocks','{"block_index":310044,"ledger_hash":"1202b05e118f0940ce270d9002d010076115a0197d889fee2d971a77709899bc","messages_hash":"863dbb043614eab0029f0ebafb1eb4b12902fde830dd1c05722c01ba3923403c","txlist_hash":"527114d86a06f44f12e1f789f095227f9710b47e95251cdbd6f4c03309eae61d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(235,310045,'insert','blocks','{"block_hash":"7bba0ab243839e91ad1a45a762bf074011f8a9883074d68203c6d1b46fffde98","block_index":310045,"block_time":310045000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(235,310044,'insert','blocks','{"block_hash":"7bba0ab243839e91ad1a45a762bf074011f8a9883074d68203c6d1b46fffde98","block_index":310045,"block_time":310045000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(236,310045,'parse','blocks','{"block_index":310045,"ledger_hash":"0bc49f765419c0b5b4911cccf03b0d9959aabacda266480b98245de0c0d35fc5","messages_hash":"023de4e9ae06942b0e09ae12622949346a414f2a4f3d882786f5bb261639d701","txlist_hash":"ed6954fc7aadd8f80684cc67580b9cc16f9a402296ac91c021de0148a1ccb4a8"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(237,310046,'insert','blocks','{"block_hash":"47db6788c38f2d6d712764979e41346b55e78cbb4969e0ef5c4336faf18993a6","block_index":310046,"block_time":310046000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(237,310045,'insert','blocks','{"block_hash":"47db6788c38f2d6d712764979e41346b55e78cbb4969e0ef5c4336faf18993a6","block_index":310046,"block_time":310046000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(238,310046,'parse','blocks','{"block_index":310046,"ledger_hash":"e42bf9806d0ff3a0663756f7955b30735747d14fcb0915c89884baa12795163d","messages_hash":"b9e8dd64f4addd93fcdc8ea8424e96947da4cbadd60abe13f0f53a6d65a39426","txlist_hash":"2e62ee5d03044d0b6086419a6d2fed78b7db3bee75a2bc158bbc04a8f5c34908"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(239,310047,'insert','blocks','{"block_hash":"a9ccabcc2a098a7d25e4ab8bda7c4e66807eefa42e29890dcd88149a10de7075","block_index":310047,"block_time":310047000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(239,310046,'insert','blocks','{"block_hash":"a9ccabcc2a098a7d25e4ab8bda7c4e66807eefa42e29890dcd88149a10de7075","block_index":310047,"block_time":310047000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(240,310047,'parse','blocks','{"block_index":310047,"ledger_hash":"b19b5e14741284b4ca06b736120e903363651460a6efb3ede1aca3a4f3c00df1","messages_hash":"36c01e15c47bcc42b22cf98ddcecdad49522ac234a205d5abff4939ee8478dbf","txlist_hash":"bd40f4de40c172e5b5997091f4a069ea54d25504421e6225ef3d9ee360fbca6c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(241,310048,'insert','blocks','{"block_hash":"610bf3935a85b05a98556c55493c6de45bed4d7b3b6c8553a984718765796309","block_index":310048,"block_time":310048000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(241,310047,'insert','blocks','{"block_hash":"610bf3935a85b05a98556c55493c6de45bed4d7b3b6c8553a984718765796309","block_index":310048,"block_time":310048000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(242,310048,'parse','blocks','{"block_index":310048,"ledger_hash":"e870de901ba86d65d0e2053251ffb32cc7dffb55fcc2efbc006a2b9137314a39","messages_hash":"4de4097a707a21573097f67e72cc9f52b502e0a488b2c17934c60ff9aec3ca64","txlist_hash":"d89730ea689c2912f38a2d2dc86caf6dc35a3e183c4d394129f21368f5c1d371"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(243,310049,'insert','blocks','{"block_hash":"4ad2761923ad49ad2b283b640f1832522a2a5d6964486b21591b71df6b33be3c","block_index":310049,"block_time":310049000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(243,310048,'insert','blocks','{"block_hash":"4ad2761923ad49ad2b283b640f1832522a2a5d6964486b21591b71df6b33be3c","block_index":310049,"block_time":310049000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(244,310049,'parse','blocks','{"block_index":310049,"ledger_hash":"44cf354cdc8552ed37e5911340397d3531d0ba45100feae27377130d4ddef359","messages_hash":"fefb42b3c87927779046cd4ee3e6956ae79798cf47d9fdcbda09d59f99139479","txlist_hash":"1100866c04ae89913abf573ee61b3a7b56ec8fb7526c7d9c9938d61a187586ab"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(245,310050,'insert','blocks','{"block_hash":"8cfeb60a14a4cec6e9be13d699694d49007d82a31065a17890383e262071e348","block_index":310050,"block_time":310050000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(245,310049,'insert','blocks','{"block_hash":"8cfeb60a14a4cec6e9be13d699694d49007d82a31065a17890383e262071e348","block_index":310050,"block_time":310050000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(246,310050,'parse','blocks','{"block_index":310050,"ledger_hash":"7d72f11f48ac99553e1b2c52a7ff5645fbe05728a10a002727b9270dbb32daed","messages_hash":"ed89674f1bdb8bff262936bdd369f9b33ada1cce1466ea08a7f3bd9fbfc06cd5","txlist_hash":"1d95ff7cb416f1915ba7db0099ba9591b97c6bc673cb43296cc82655627eb1ad"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(247,310051,'insert','blocks','{"block_hash":"b53c90385dd808306601350920c6af4beb717518493fd23b5c730eea078f33e6","block_index":310051,"block_time":310051000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(247,310050,'insert','blocks','{"block_hash":"b53c90385dd808306601350920c6af4beb717518493fd23b5c730eea078f33e6","block_index":310051,"block_time":310051000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(248,310051,'parse','blocks','{"block_index":310051,"ledger_hash":"35a965dc90686fc4eb20450da81ca8db9125e25c2cdd7146fd61d98841d80c24","messages_hash":"a1c291e9a5685784681f9f1a9021d1cd88249d7039460ba4a1ef3a61bc6f1e2f","txlist_hash":"9d15589506565edb31f7627a37c1f6a6bca01d584b0dc815e8603689f07a80db"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(249,310052,'insert','blocks','{"block_hash":"0acdacf4e4b6fca756479cb055191b367b1fa433aa558956f5f08fa5b7b394e2","block_index":310052,"block_time":310052000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(249,310051,'insert','blocks','{"block_hash":"0acdacf4e4b6fca756479cb055191b367b1fa433aa558956f5f08fa5b7b394e2","block_index":310052,"block_time":310052000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(250,310052,'parse','blocks','{"block_index":310052,"ledger_hash":"8604d503e7194ee1c8ebe1143019207b2aad163655107a3d23d018ef26cef550","messages_hash":"5554df4e98fed870e873dd4b78c7e5fcf9a2066e573c6a05f48200e435ab1cb7","txlist_hash":"40053c62babd7f69b9822b6d4223732008d45250146216762da4e13b1b9d3a3b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(251,310053,'insert','blocks','{"block_hash":"68348f01b6dc49b2cb30fe92ac43e527aa90d859093d3bf7cd695c64d2ef744f","block_index":310053,"block_time":310053000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(251,310052,'insert','blocks','{"block_hash":"68348f01b6dc49b2cb30fe92ac43e527aa90d859093d3bf7cd695c64d2ef744f","block_index":310053,"block_time":310053000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(252,310053,'parse','blocks','{"block_index":310053,"ledger_hash":"ecdb64ffc44490eeb12199d2da5c1189c07f4102f5b91494cbe4ec68fe6bb6d4","messages_hash":"408d7c4d46c15335764ec5518c65dbbcbf1a389b3a106332fc8ede93eec63ea9","txlist_hash":"7d74527f370a78a8dca189b60657f9fd15c27ba5f875344546bb8d6e5b54c8c5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(253,310054,'insert','blocks','{"block_hash":"a8b5f253df293037e49b998675620d5477445c51d5ec66596e023282bb9cd305","block_index":310054,"block_time":310054000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(253,310053,'insert','blocks','{"block_hash":"a8b5f253df293037e49b998675620d5477445c51d5ec66596e023282bb9cd305","block_index":310054,"block_time":310054000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(254,310054,'parse','blocks','{"block_index":310054,"ledger_hash":"b96b0d51d6327284f5922b65e5d023afd2b2e44c9e11f435afbe2a71df4e6eb2","messages_hash":"cfe641f06ebaae19e0167a07956bfc6af2b8022e00f50d59d079ae6a94344aa4","txlist_hash":"70b8a2eccd5c79e1c270abfdf683dc4423ff315a62486db9e5972a12daaf60ea"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(255,310055,'insert','blocks','{"block_hash":"4b069152e2dc82e96ed8a3c3547c162e8c3aceeb2a4ac07972f8321a535b9356","block_index":310055,"block_time":310055000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(255,310054,'insert','blocks','{"block_hash":"4b069152e2dc82e96ed8a3c3547c162e8c3aceeb2a4ac07972f8321a535b9356","block_index":310055,"block_time":310055000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(256,310055,'parse','blocks','{"block_index":310055,"ledger_hash":"c5be3fc23a9c41b7b78cc7df4ed13d1d35fdd7edab77c998cef5a5a5fe2a7d33","messages_hash":"f398b87ef1257c5cd5f6a09fb7f51a4cbe1687066f25433446f94847cbb8a899","txlist_hash":"0072c2fbc0915dcc39103950d4a48feba19eac28bde001d3dfe0f9ddc25e5152"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(257,310056,'insert','blocks','{"block_hash":"7603eaed418971b745256742f9d2ba70b2c2b2f69f61de6cc70e61ce0336f9d3","block_index":310056,"block_time":310056000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(257,310055,'insert','blocks','{"block_hash":"7603eaed418971b745256742f9d2ba70b2c2b2f69f61de6cc70e61ce0336f9d3","block_index":310056,"block_time":310056000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(258,310056,'parse','blocks','{"block_index":310056,"ledger_hash":"faa7cf6128f229fe3d408797c77ef2972eb28d16542b32ec87c5fd42d2495018","messages_hash":"ef875ddfb4443cd94d86deac01673964c5f3d1ed4b3afaa0d131445562ce64f8","txlist_hash":"46c53b0ab86b04c06e8302726aeed5922fb5b3d940102422c53bdf4bafe285e4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(259,310057,'insert','blocks','{"block_hash":"4a5fdc84f2d66ecb6ee3e3646aad20751ce8694e64e348d3c8aab09d33a3e411","block_index":310057,"block_time":310057000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(259,310056,'insert','blocks','{"block_hash":"4a5fdc84f2d66ecb6ee3e3646aad20751ce8694e64e348d3c8aab09d33a3e411","block_index":310057,"block_time":310057000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(260,310057,'parse','blocks','{"block_index":310057,"ledger_hash":"135af680c59a3d707ff3e6b67fbbb0aaaf0a97724d36ba584087658ae8c0db19","messages_hash":"98310bdd2da785732bfa6de62ba2f2fbd5d103f4204ff7d1b43fed584907693d","txlist_hash":"8b3fe70c1d1b8fa1a247810dfbc2667ca0307860c112002e47107fe4836b8138"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(261,310058,'insert','blocks','{"block_hash":"a6eef3089896f0cae0bfe9423392e45c48f4efe4310b14d8cfbdb1fea613635f","block_index":310058,"block_time":310058000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(261,310057,'insert','blocks','{"block_hash":"a6eef3089896f0cae0bfe9423392e45c48f4efe4310b14d8cfbdb1fea613635f","block_index":310058,"block_time":310058000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(262,310058,'parse','blocks','{"block_index":310058,"ledger_hash":"496b559ef740feabe42d55356bc770bab7b927d79260c22848b7f47d51918f11","messages_hash":"5fe661842a118ac1eeb5382d6bb92d8039390ee68fcf9cce1441839dcc558c9a","txlist_hash":"ddbb4db386fab0fbbb7edee7c7c45676f994d6feb088f50b0f3edaddcc809e47"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(263,310059,'insert','blocks','{"block_hash":"ab505de874c43f97c90be1c26a769e6c5cb140405c993b4a6cc7afc795f156a9","block_index":310059,"block_time":310059000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(263,310058,'insert','blocks','{"block_hash":"ab505de874c43f97c90be1c26a769e6c5cb140405c993b4a6cc7afc795f156a9","block_index":310059,"block_time":310059000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(264,310059,'parse','blocks','{"block_index":310059,"ledger_hash":"608eb77e572aa596c9e14c6e4cb1dc1993bcbcfe735cf0453124c2801192ecc9","messages_hash":"00ed7b98e21c3dc58d1ee6c41389fbf40e86522758fed197cf39ef3a7274dbc9","txlist_hash":"b8d3a5abf9edc13434594de8ec0cdf3b760f6917798eab89ff2a6a4f0bda06d9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(265,310060,'insert','blocks','{"block_hash":"974ad5fbef621e0a38eab811608dc9afaf10c8ecc85fed913075ba1a145e889b","block_index":310060,"block_time":310060000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(265,310059,'insert','blocks','{"block_hash":"974ad5fbef621e0a38eab811608dc9afaf10c8ecc85fed913075ba1a145e889b","block_index":310060,"block_time":310060000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(266,310060,'parse','blocks','{"block_index":310060,"ledger_hash":"bc5c375d1237425486c9f46bd749fba20b5635bcaf3e2d9178b35ddfbb700f14","messages_hash":"4d91b8cb3b7b5363ac2e84f7f3d2f5e52207ef68bae865e09bf9fc89aa42d60a","txlist_hash":"1766568459fde2e95dbe4a1c1b73a37b6f8443dc1ec36cb44a38fadd95d8f807"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(267,310061,'insert','blocks','{"block_hash":"35d267d21ad386e7b7632292af1c422b0310dde7ca49a82f9577525a29c138cf","block_index":310061,"block_time":310061000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(267,310060,'insert','blocks','{"block_hash":"35d267d21ad386e7b7632292af1c422b0310dde7ca49a82f9577525a29c138cf","block_index":310061,"block_time":310061000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(268,310061,'parse','blocks','{"block_index":310061,"ledger_hash":"c6d48d72746c0e18fa0f1b0b16f663869be2c4684a9d98b634e691ea495f4d81","messages_hash":"d47acf46ad59983e01b9e681527ed2068076ab781880c571426aa808fe36c424","txlist_hash":"9f6619aae8ab667b4291ec14e89386177dec7f3465def984144d2991d10476ab"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(269,310062,'insert','blocks','{"block_hash":"b31a0054145319ef9de8c1cb19df5bcf4dc8a1ece20053aa494e5d3a00a2852f","block_index":310062,"block_time":310062000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(269,310061,'insert','blocks','{"block_hash":"b31a0054145319ef9de8c1cb19df5bcf4dc8a1ece20053aa494e5d3a00a2852f","block_index":310062,"block_time":310062000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(270,310062,'parse','blocks','{"block_index":310062,"ledger_hash":"8deffdb1602f1aa2d0d1956d2297ba30ac78901ea27eb223ad8bf7ca83b18110","messages_hash":"8b051844cfce3c15973994e593d4cd84023384ef7d6e4b0c0fe4d2242f68ec6b","txlist_hash":"278612a215aec2522b38d2ddd268f051906a858996b526fa53c48743b1f33c2e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(271,310063,'insert','blocks','{"block_hash":"0cbcbcd5b7f2dc288e3a34eab3d4212463a5a56e886804fb4f9f1cf929eadebe","block_index":310063,"block_time":310063000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(271,310062,'insert','blocks','{"block_hash":"0cbcbcd5b7f2dc288e3a34eab3d4212463a5a56e886804fb4f9f1cf929eadebe","block_index":310063,"block_time":310063000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(272,310063,'parse','blocks','{"block_index":310063,"ledger_hash":"34859861f240c6553ffbf63fff9bc884f231276ec6173964d5fc6641a6d79b16","messages_hash":"dcba300d4efc36a2324491e29a6b0001868b33ab1be391102cef110552178e78","txlist_hash":"a884effb413598885693dd0eed419a3a2a35db95fe4d6582e580bc141f28377c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(273,310064,'insert','blocks','{"block_hash":"e2db8065a195e85cde9ddb868a17d39893a60fb2b1255aa5f0c88729de7cbf30","block_index":310064,"block_time":310064000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(273,310063,'insert','blocks','{"block_hash":"e2db8065a195e85cde9ddb868a17d39893a60fb2b1255aa5f0c88729de7cbf30","block_index":310064,"block_time":310064000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(274,310064,'parse','blocks','{"block_index":310064,"ledger_hash":"fa185f9b97a1666ce3b966dc09b8a7870ba55896a54a54f54d3420708d5a8ae0","messages_hash":"d18f5fc35609a49d75347c92c7c9a483e35d9c4192503782bafe4478043ba4c2","txlist_hash":"070c320cd53cca3d81560367d437e1f4cb2afb10ab6339e2f1cfb0a2dd6d6063"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(275,310065,'insert','blocks','{"block_hash":"8a7bc7a77c831ac4fd11b8a9d22d1b6a0661b07cef05c2e600c7fb683b861d2a","block_index":310065,"block_time":310065000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(275,310064,'insert','blocks','{"block_hash":"8a7bc7a77c831ac4fd11b8a9d22d1b6a0661b07cef05c2e600c7fb683b861d2a","block_index":310065,"block_time":310065000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(276,310065,'parse','blocks','{"block_index":310065,"ledger_hash":"9f75da9f944d59b1841d690b2994ead7fb0ee3d679ddbdb0b692e49238f66603","messages_hash":"18be484e57b9cf23147d188a114137c5948a5b53cd19d657dd973dd265ecd564","txlist_hash":"fb310206b118e11d48becbd11a695199fd7cc3553dd8b2a7c29c6a927f5bafb7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(277,310066,'insert','blocks','{"block_hash":"b6959be51eb084747d301f7ccaf9e75f2292c9404633b1532e3692659939430d","block_index":310066,"block_time":310066000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(277,310065,'insert','blocks','{"block_hash":"b6959be51eb084747d301f7ccaf9e75f2292c9404633b1532e3692659939430d","block_index":310066,"block_time":310066000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(278,310066,'parse','blocks','{"block_index":310066,"ledger_hash":"4740587d203632d1b4061343436e25e12941f0f80be03c3ab390a1c08b842b59","messages_hash":"3443a7b0bee87c7ced9d66afce89399e945d14d182019f4dbc2c014c59abe58f","txlist_hash":"041e6429d7ad46da6e1a2547daf274a0df952ac4f9b43eaadfeafa6e005141d6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(279,310067,'insert','blocks','{"block_hash":"8b08eae98d7193c9c01863fac6effb9162bda010daeacf9e0347112f233b8577","block_index":310067,"block_time":310067000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(279,310066,'insert','blocks','{"block_hash":"8b08eae98d7193c9c01863fac6effb9162bda010daeacf9e0347112f233b8577","block_index":310067,"block_time":310067000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(280,310067,'parse','blocks','{"block_index":310067,"ledger_hash":"d6eecb0ca22f29b50e52cd5dec8f408250a7b1ddc61bfa9bf6cc6ef0a85a6ffc","messages_hash":"169a650e89d34830da0f077b7efebb0a64f43b59d725abf94e3c84ac8b6da6a8","txlist_hash":"f8e9baf27b01e99db390d6ee2e06b8ac7d92951c331d8240fdf0dd711ad75979"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(281,310068,'insert','blocks','{"block_hash":"9280e7297ef6313341bc81787a36acfc9af58f83a415afff5e3154f126cf52b5","block_index":310068,"block_time":310068000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(281,310067,'insert','blocks','{"block_hash":"9280e7297ef6313341bc81787a36acfc9af58f83a415afff5e3154f126cf52b5","block_index":310068,"block_time":310068000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(282,310068,'parse','blocks','{"block_index":310068,"ledger_hash":"1508605d4796eb2d8b0553b307827f570b5020f4cacf773926b6c8f2c1b003c8","messages_hash":"e0b7f166b6b82211e67aec109d3181bee7c6b48dd68f610b57e9a6c0089ce0c8","txlist_hash":"fe7a135af64a7668cee07a66fa146b6a7a54fc78b96eb7c62d0bbd8b8ec4a820"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(283,310069,'insert','blocks','{"block_hash":"486351f0655bf594ffaab1980cff17353b640b63e9c27239109addece189a6f7","block_index":310069,"block_time":310069000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(283,310068,'insert','blocks','{"block_hash":"486351f0655bf594ffaab1980cff17353b640b63e9c27239109addece189a6f7","block_index":310069,"block_time":310069000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(284,310069,'parse','blocks','{"block_index":310069,"ledger_hash":"ea7afbe0817cfef5a5a940bf88b057d01d092182dd5d0c7fd156b6750fdf4cb2","messages_hash":"50be0edf30243d3f05b2d04582b092f02a3bf48cc36592364f244f1406a7d42e","txlist_hash":"561526733017c46e8f7476f6f7f0a1c317a372adf6ccbe2a34e4d8b0fee1a694"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(285,310070,'insert','blocks','{"block_hash":"8739e99f4dee8bebf1332f37f49a125348b40b93b74fe35579dd52bfba4fa7e5","block_index":310070,"block_time":310070000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(285,310069,'insert','blocks','{"block_hash":"8739e99f4dee8bebf1332f37f49a125348b40b93b74fe35579dd52bfba4fa7e5","block_index":310070,"block_time":310070000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(286,310070,'parse','blocks','{"block_index":310070,"ledger_hash":"f805d8bd0b724ffeb9e466367e8524bcbcf2c0fe0525b8ff2707af2013824a2c","messages_hash":"99c95d813c0af76a0ba787330b43f1b3eef9c9c12956c734057f5d6af3f173af","txlist_hash":"4c10a876e31ee15289cd2d82d8771bd9aaffd0e335c6de15f8d5316e6e7ee81a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(287,310071,'insert','blocks','{"block_hash":"7a099aa1bba0ead577f1e44f35263a1f115ed6a868c98d4dd71609072ae7f80b","block_index":310071,"block_time":310071000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(287,310070,'insert','blocks','{"block_hash":"7a099aa1bba0ead577f1e44f35263a1f115ed6a868c98d4dd71609072ae7f80b","block_index":310071,"block_time":310071000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(288,310071,'parse','blocks','{"block_index":310071,"ledger_hash":"305123423486d17e97e8370399b9079a35977465e4cf8c5b33d50bd7004b463b","messages_hash":"600a392fef1ffc97b4862a0eabf83f8bca0be5eacbe68f1a72daa1c9ee52960e","txlist_hash":"660d6afeecb2375668200669bac5cf258dbd18b0f61213eb01d29e133a45917c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(289,310072,'insert','blocks','{"block_hash":"7b17ecedc07552551b8129e068ae67cb176ca766ea3f6df74b597a94e3a7fc8a","block_index":310072,"block_time":310072000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(289,310071,'insert','blocks','{"block_hash":"7b17ecedc07552551b8129e068ae67cb176ca766ea3f6df74b597a94e3a7fc8a","block_index":310072,"block_time":310072000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(290,310072,'parse','blocks','{"block_index":310072,"ledger_hash":"b04fcd2cf46165fa31626b476aa06f9ad8c8cd1d5aa1cfdc014e0d55fa7e0761","messages_hash":"cd91c870d87762425a917c044f5f2f1e3f03abcd3f574f6b738fcf83786a0c09","txlist_hash":"0791350dc66254e276bfea1651fdda43705668f461f5451fd91fb7e084b26aa2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(291,310073,'insert','blocks','{"block_hash":"ee0fe3cc9b3a48a2746b6090b63b442b97ea6055d48edcf4b2288396764c6943","block_index":310073,"block_time":310073000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(291,310072,'insert','blocks','{"block_hash":"ee0fe3cc9b3a48a2746b6090b63b442b97ea6055d48edcf4b2288396764c6943","block_index":310073,"block_time":310073000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(292,310073,'parse','blocks','{"block_index":310073,"ledger_hash":"209f05567343042c8a9172138cc14e28a2e53f9addf16c7affa469fbea9728ae","messages_hash":"42f0c487366bef15ee290608623baa2021b3106933ea6c19c13c889175f25052","txlist_hash":"4885e82f77b273e102f9019b8451e08910a7d98daf19366a0a2b9db779352c0f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(293,310074,'insert','blocks','{"block_hash":"ceab38dfde01f711a187601731ad575d67cfe0b7dbc61dcd4f15baaef72089fb","block_index":310074,"block_time":310074000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(293,310073,'insert','blocks','{"block_hash":"ceab38dfde01f711a187601731ad575d67cfe0b7dbc61dcd4f15baaef72089fb","block_index":310074,"block_time":310074000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(294,310074,'parse','blocks','{"block_index":310074,"ledger_hash":"fc18c0dcd6011c4147575f09bdc6e1eb0e6ae7d3144339859054df458651618a","messages_hash":"7cda3663089c12d62dcf16687d67e6c815f59ee61d49b6c7fbf1acef8ff8ad5a","txlist_hash":"49cbefb674e3da718d86151b10bb37755e158a2bdca642a542897361f15fde66"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(295,310075,'insert','blocks','{"block_hash":"ef547198c6e36d829f117cfd7077ccde45158e3c545152225fa24dba7a26847b","block_index":310075,"block_time":310075000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(295,310074,'insert','blocks','{"block_hash":"ef547198c6e36d829f117cfd7077ccde45158e3c545152225fa24dba7a26847b","block_index":310075,"block_time":310075000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(296,310075,'parse','blocks','{"block_index":310075,"ledger_hash":"f304dbebd02e4536b1754502e6f51e058ed309fdf95a2db8329dd7e5635824ad","messages_hash":"19e396d72aff42647cd89d62de2fc077cd5bef0a338dc80d2b23ebd2d3156de5","txlist_hash":"b5e7c72a91d779334162c8fcb6282c7e5baeb43ef83d8f8c0eeb4dd0579f0916"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(297,310076,'insert','blocks','{"block_hash":"3b0499c2e8e8f0252c7288d4ecf66efc426ca37aad3524424d14c8bc6f8b0d92","block_index":310076,"block_time":310076000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(297,310075,'insert','blocks','{"block_hash":"3b0499c2e8e8f0252c7288d4ecf66efc426ca37aad3524424d14c8bc6f8b0d92","block_index":310076,"block_time":310076000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(298,310076,'parse','blocks','{"block_index":310076,"ledger_hash":"f39c071315c869425bdbcf05ff84130a0860f5f47b4f851cea970f58a6edc9f8","messages_hash":"4045738813eb927f7543bde1971329d6f09a7fde63e8d1392a1600c226474aad","txlist_hash":"e399bd32bd2988f29b4fb003686b343bd72ae59297412480a359bd56ded23ca5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(299,310077,'insert','blocks','{"block_hash":"d2adeefa9024ab3ff2822bc36acf19b6c647cea118cf15b86c6bc00c3322e7dd","block_index":310077,"block_time":310077000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(299,310076,'insert','blocks','{"block_hash":"d2adeefa9024ab3ff2822bc36acf19b6c647cea118cf15b86c6bc00c3322e7dd","block_index":310077,"block_time":310077000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(300,310077,'parse','blocks','{"block_index":310077,"ledger_hash":"20624d783cd8e82044df58c05e6171a744505df43623d9c2a828c1331f505ca8","messages_hash":"94b7908b589b1c80ea4dd88f05ffe997d078ad2c78b8cad6265626b6d5317132","txlist_hash":"c587d5426925227ed7d0ef11834b5bb1291fcf0ea3f0bcac864e4356187b6a10"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(301,310078,'insert','blocks','{"block_hash":"f6c17115ef0efe489c562bcda4615892b4d4b39db0c9791fe193d4922bd82cd6","block_index":310078,"block_time":310078000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(301,310077,'insert','blocks','{"block_hash":"f6c17115ef0efe489c562bcda4615892b4d4b39db0c9791fe193d4922bd82cd6","block_index":310078,"block_time":310078000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(302,310078,'parse','blocks','{"block_index":310078,"ledger_hash":"41ae6610121587bd8171a02da3c50645e8e6d3642aef2c560d46f12707506b66","messages_hash":"365f46087a06fe2306b2c30b88bc3f6779f93b82a0d9496e2674f48e4665cf85","txlist_hash":"c8331e225af242d83e283889e6234d601ecb507373f4b7de891b8508d1b7b1b6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(303,310079,'insert','blocks','{"block_hash":"f2fbd2074d804e631db44cb0fb2e1db3fdc367e439c21ffc40d73104c4d7069c","block_index":310079,"block_time":310079000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(303,310078,'insert','blocks','{"block_hash":"f2fbd2074d804e631db44cb0fb2e1db3fdc367e439c21ffc40d73104c4d7069c","block_index":310079,"block_time":310079000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(304,310079,'parse','blocks','{"block_index":310079,"ledger_hash":"bbc2068f2a4b47c86198a5cb7242e26f385077126c7a3294eca6607485b1170b","messages_hash":"10181469a6450a20a15d45b37942f7dc0ed689640e6555c0ea58b587ec3cbcb2","txlist_hash":"42ee671f6b45a8e36b4e57dc7edaa2501b075eb75bcfce535435ee4c0cdf2e66"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(305,310080,'insert','blocks','{"block_hash":"42943b914d9c367000a78b78a544cc4b84b1df838aadde33fe730964a89a3a6c","block_index":310080,"block_time":310080000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(305,310079,'insert','blocks','{"block_hash":"42943b914d9c367000a78b78a544cc4b84b1df838aadde33fe730964a89a3a6c","block_index":310080,"block_time":310080000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(306,310080,'parse','blocks','{"block_index":310080,"ledger_hash":"fc4350d187ec74fa6dfbbca7f6c51849b78356f853c6c713d10ae4a39ee4f7e2","messages_hash":"e753c18bbf377d74cfe933f4e53a00faf32d066f750c6170e31fae4597c446c0","txlist_hash":"f35b5543ac99e33a4ea6fb61b688d06a2b5b9cc79776df32c24e848b5dad80c0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(307,310081,'insert','blocks','{"block_hash":"6554f9d307976249e7b7e260e08046b3b55d318f8b6af627fed5be3063f123c4","block_index":310081,"block_time":310081000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(307,310080,'insert','blocks','{"block_hash":"6554f9d307976249e7b7e260e08046b3b55d318f8b6af627fed5be3063f123c4","block_index":310081,"block_time":310081000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(308,310081,'parse','blocks','{"block_index":310081,"ledger_hash":"3cadb90f0285d3e3bb107caa2165e88d855cfa057fcff1fccfb278a8f64c9b1c","messages_hash":"bdb06802e00a851facaccffd4e7e0469e99171891e68338fa5c108a59c09e184","txlist_hash":"3ff813ab5112e5adf9f50936955db90036ed0e2ba309022002c69e81473d7c04"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(309,310082,'insert','blocks','{"block_hash":"4f1ef91b1dcd575f8ac2e66a67715500cbca154bd6f3b8148bb7015a6aa6c644","block_index":310082,"block_time":310082000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(309,310081,'insert','blocks','{"block_hash":"4f1ef91b1dcd575f8ac2e66a67715500cbca154bd6f3b8148bb7015a6aa6c644","block_index":310082,"block_time":310082000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(310,310082,'parse','blocks','{"block_index":310082,"ledger_hash":"f3390bff59484b5ce0d84f5034fc88f4d862334ef3c0d7addaa9be7f0e67006f","messages_hash":"91548b15232ca3271660eaed9e543d6027ad088d34286d8abdfe4184b3fb91db","txlist_hash":"3d843f898e46d0ec4c4cf79709ec7326a0e45d44361a2c9fe45e546bd5f1e630"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(311,310083,'insert','blocks','{"block_hash":"9b1f6fd6ff9b0dc4e37603cfb0625f49067c775b99e12492afd85392d3c8d850","block_index":310083,"block_time":310083000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(311,310082,'insert','blocks','{"block_hash":"9b1f6fd6ff9b0dc4e37603cfb0625f49067c775b99e12492afd85392d3c8d850","block_index":310083,"block_time":310083000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(312,310083,'parse','blocks','{"block_index":310083,"ledger_hash":"0354bf318eaec5c79b4a7835c76c89f373ab0e413f9fe4ebdea442f57763a971","messages_hash":"290b3b825f0ac859bbd2db052280d1f45898734f0f89b8fccf96672f6730217f","txlist_hash":"6405368df02c1207da46178c106ac287c7c90e5b87a98154aa938f6ef5a570d1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(313,310084,'insert','blocks','{"block_hash":"1e0972523e80306441b9f4157f171716199f1428db2e818a7f7817ccdc8859e3","block_index":310084,"block_time":310084000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(313,310083,'insert','blocks','{"block_hash":"1e0972523e80306441b9f4157f171716199f1428db2e818a7f7817ccdc8859e3","block_index":310084,"block_time":310084000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(314,310084,'parse','blocks','{"block_index":310084,"ledger_hash":"e22b7a64e15ded24f6c54a5f627354dd2c3ed8175c2f4cd31aa5a6789d7b67e4","messages_hash":"b4f9a9c17f2c4a6bb4fd1a99d9d3ade15eee4ca747d8c5f1132c777d2cf8e04a","txlist_hash":"6f58e857b2891d43f22bb4b44d296ff18f3078de01cf90aeed104283d66342a2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(315,310085,'insert','blocks','{"block_hash":"c5b6e9581831e3bc5848cd7630c499bca26d9ece5156d36579bdb72d54817e34","block_index":310085,"block_time":310085000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(315,310084,'insert','blocks','{"block_hash":"c5b6e9581831e3bc5848cd7630c499bca26d9ece5156d36579bdb72d54817e34","block_index":310085,"block_time":310085000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(316,310085,'parse','blocks','{"block_index":310085,"ledger_hash":"7b8a6f62709cf4d20820031f43d968ea46d73d8cee4ad40f414da60b9be4e676","messages_hash":"89b34eb4cd1d69d9c578c7d6181985d828e55b6b926bf562c3117dd8b39971bd","txlist_hash":"51c8a62f3e4c43e6eea75410efb977c8ddd2ad8e64c0d6ce6f63a4e5eb153400"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(317,310086,'insert','blocks','{"block_hash":"080c1dc55a4ecf4824cf9840602498cfc35b5f84099f50b71b45cb63834c7a78","block_index":310086,"block_time":310086000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(317,310085,'insert','blocks','{"block_hash":"080c1dc55a4ecf4824cf9840602498cfc35b5f84099f50b71b45cb63834c7a78","block_index":310086,"block_time":310086000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(318,310086,'parse','blocks','{"block_index":310086,"ledger_hash":"ae82ee2f7f1e075937b5b8eef065f8643a7bef0428e00689ee773558905eef19","messages_hash":"845f79869780ce25161caef376dca496190611dbaf591d4b1617202eb1ec6035","txlist_hash":"7358e41e9a61f87d68cc6851768346daea2e100ab896e86c0047e47228e6cc29"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(319,310087,'insert','blocks','{"block_hash":"4ec8cb1c38b22904e8087a034a6406b896eff4dd28e7620601c6bddf82e2738c","block_index":310087,"block_time":310087000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(319,310086,'insert','blocks','{"block_hash":"4ec8cb1c38b22904e8087a034a6406b896eff4dd28e7620601c6bddf82e2738c","block_index":310087,"block_time":310087000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(320,310087,'parse','blocks','{"block_index":310087,"ledger_hash":"ced371f1349e81cc2f179f064e4b9b202650a0f79e9b4513666ace29f0e8b3cb","messages_hash":"89835847f0386b5a4a4e4f748f643a22b6bef41b1bbd51c9ee6fa3f3526f0899","txlist_hash":"0e8cd750f8ad91d5b14d2b05b7c03621367036703bed1654555b94592ff41e11"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(321,310088,'insert','blocks','{"block_hash":"e945c815c433cbddd0bf8e66c5c23b51072483492acda98f5c2c201020a8c5b3","block_index":310088,"block_time":310088000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(321,310087,'insert','blocks','{"block_hash":"e945c815c433cbddd0bf8e66c5c23b51072483492acda98f5c2c201020a8c5b3","block_index":310088,"block_time":310088000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(322,310088,'parse','blocks','{"block_index":310088,"ledger_hash":"6c343897092c5dfcd32ee96dc8b96f38fedd31fa58cf5757a3e15a254942cd59","messages_hash":"18faa2da192eaf7d4e7e3ee72a09c146966ce3bae7e2dfe4148d09ec26f6a4fb","txlist_hash":"c38a183db86650f155005a8828155aaf2fc6d92aa89066d7f0843a123800d771"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(323,310089,'insert','blocks','{"block_hash":"0382437f895ef3e7e38bf025fd4f606fd44d4bbd6aea71dbdc4ed11a7cd46f33","block_index":310089,"block_time":310089000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(323,310088,'insert','blocks','{"block_hash":"0382437f895ef3e7e38bf025fd4f606fd44d4bbd6aea71dbdc4ed11a7cd46f33","block_index":310089,"block_time":310089000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(324,310089,'parse','blocks','{"block_index":310089,"ledger_hash":"abc7afdaefa89bf58bc4c28401740657eca24c902ba551f55becb6a1c8992675","messages_hash":"0ed9475500a23bd1df5d9cc2675c3dbe28b137f251b9ce51aeb0e268cc5e1186","txlist_hash":"609b4f777892b43541593da80d09aa2c3928f2f73600009615196a7f89ca8123"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(325,310090,'insert','blocks','{"block_hash":"b756db71dc037b5a4582de354a3347371267d31ebda453e152f0a13bb2fae969","block_index":310090,"block_time":310090000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(325,310089,'insert','blocks','{"block_hash":"b756db71dc037b5a4582de354a3347371267d31ebda453e152f0a13bb2fae969","block_index":310090,"block_time":310090000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(326,310090,'parse','blocks','{"block_index":310090,"ledger_hash":"4c8ca9b4eeae7adfec822b20665e7bd6fecb51d4f30cc2c826f18402d8401a9b","messages_hash":"1192140c5046ed35037f88bc7dd4fe2a013a2c02a98b861e47b48eb19d80c7c0","txlist_hash":"fba4f7514306c49b3045912791cc21a26527a23e58dcb1c8adc5563e5c6e901d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(327,310091,'insert','blocks','{"block_hash":"734a9aa485f36399d5efb74f3b9c47f8b5f6fd68c9967f134b14cfe7e2d7583c","block_index":310091,"block_time":310091000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(327,310090,'insert','blocks','{"block_hash":"734a9aa485f36399d5efb74f3b9c47f8b5f6fd68c9967f134b14cfe7e2d7583c","block_index":310091,"block_time":310091000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(328,310091,'parse','blocks','{"block_index":310091,"ledger_hash":"fe7fd2b60c3216d79dfe4e6d38880f6d3b9fde747b619f2c477108825235663d","messages_hash":"51f6f931459ba6a532c7c74d462deb1b0a54da7e011486c6af3056b2e65f195b","txlist_hash":"3a62ce0eeff09c242b3a7c3a8da6dd20bf06c1c2fbf224f73646791557ce3d4c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(329,310092,'insert','blocks','{"block_hash":"56386beb65f9228740d4ad43a1c575645f6daf59e0dd9f22551c59215b5e8c3d","block_index":310092,"block_time":310092000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(329,310091,'insert','blocks','{"block_hash":"56386beb65f9228740d4ad43a1c575645f6daf59e0dd9f22551c59215b5e8c3d","block_index":310092,"block_time":310092000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(330,310092,'parse','blocks','{"block_index":310092,"ledger_hash":"420b8ff3c159f7e89df2274682e7ef798a0c0233149365114bfd934c38806098","messages_hash":"49487109a4081406fc52526bbedfe3a2f93e749a4685b1633ead6342bf3dd7a0","txlist_hash":"9c866b1985d2ff084264e192e5defce4af96b7aca461a46f58c659008113909a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(331,310093,'insert','blocks','{"block_hash":"a74a2425f2f4be24bb5f715173e6756649e1cbf1b064aeb1ef60e0b94b418ddc","block_index":310093,"block_time":310093000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(331,310092,'insert','blocks','{"block_hash":"a74a2425f2f4be24bb5f715173e6756649e1cbf1b064aeb1ef60e0b94b418ddc","block_index":310093,"block_time":310093000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(332,310093,'parse','blocks','{"block_index":310093,"ledger_hash":"f4fac6a570b4f6332a628a3f8e27f5f081689fb4255363cff1cd8bd0244eecea","messages_hash":"6e9c8dcec7ecbd5d027c038f873ae53e2cc970f49fdd98b3a786fe3c113c38ee","txlist_hash":"271c5484d7a74166a1b83e9dc6f56cc391d5b01829c9b594deb087e58a22b762"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(333,310094,'insert','blocks','{"block_hash":"2a8f976f20c4e89ff01071915ac96ee35192d54df3a246bf61fd4a0cccfb5b23","block_index":310094,"block_time":310094000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(333,310093,'insert','blocks','{"block_hash":"2a8f976f20c4e89ff01071915ac96ee35192d54df3a246bf61fd4a0cccfb5b23","block_index":310094,"block_time":310094000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(334,310094,'parse','blocks','{"block_index":310094,"ledger_hash":"adea7b4cacc06ba1f7dc260f30039943936f5baeecf5a8a452d4cbcaa994a70d","messages_hash":"c8e0c6e52ed6e0dc0d9b2a7cecaa8b53aa2e36e847c0fb20c0c8ef6029700aa6","txlist_hash":"7d8deca0e4f444c015cdf98c74255215af14198d17619640186c6486bb3a6be6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(335,310095,'insert','blocks','{"block_hash":"bed0fa40c9981223fb40b3be8124ca619edc9dd34d0c907369477ea92e5d2cd2","block_index":310095,"block_time":310095000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(335,310094,'insert','blocks','{"block_hash":"bed0fa40c9981223fb40b3be8124ca619edc9dd34d0c907369477ea92e5d2cd2","block_index":310095,"block_time":310095000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(336,310095,'parse','blocks','{"block_index":310095,"ledger_hash":"a2290c6a24befab16b4d9ed768c3129d582edbafdf8a2326c7ed50397e5db674","messages_hash":"142676e0c4985556d710f23cd93b06f98864f2322b458ff58c0ae3e3dff4e5c5","txlist_hash":"8bab183d2c7670f060de1a64663fe4ec602cc9df957a4d1ccd4b2c5e4876e5ab"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(337,310096,'insert','blocks','{"block_hash":"306aeec3db435fabffdf88c2f26ee83caa4c2426375a33daa2be041dbd27ea2f","block_index":310096,"block_time":310096000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(337,310095,'insert','blocks','{"block_hash":"306aeec3db435fabffdf88c2f26ee83caa4c2426375a33daa2be041dbd27ea2f","block_index":310096,"block_time":310096000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(338,310096,'parse','blocks','{"block_index":310096,"ledger_hash":"b3c321ea2fb119cbaacfb39f219be47cb346cdd40d895980afd34b4157a3b7ec","messages_hash":"b2ff4518567b1d1defaebb078146815cc39ab11dc19d392a5d20d299867aa6da","txlist_hash":"6997f2cf50cb2331a8d5cea3f97b32b41a9c40b6006041939b21008016e013c8"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(339,310097,'insert','blocks','{"block_hash":"13e8e16e67c7cdcc80d477491e554b43744f90e8e1a9728439a11fab42cefadf","block_index":310097,"block_time":310097000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(339,310096,'insert','blocks','{"block_hash":"13e8e16e67c7cdcc80d477491e554b43744f90e8e1a9728439a11fab42cefadf","block_index":310097,"block_time":310097000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(340,310097,'parse','blocks','{"block_index":310097,"ledger_hash":"456a1bd4d6b30f24e798a9c1f975af109db030b0bca19db6b29788f938ce6c4d","messages_hash":"11771c3c0ce2f3d5e74539f731ce50c4f34cc01f80b3c32c6136080272e8b448","txlist_hash":"bd930dddbfc97b06fba95a33417533bd58fd5e95326d8677d2939790850a67de"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(341,310098,'insert','blocks','{"block_hash":"ca5bca4b5ec4fa6183e05176abe921cff884c4e20910fab55b603cef48dc3bca","block_index":310098,"block_time":310098000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(341,310097,'insert','blocks','{"block_hash":"ca5bca4b5ec4fa6183e05176abe921cff884c4e20910fab55b603cef48dc3bca","block_index":310098,"block_time":310098000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(342,310098,'parse','blocks','{"block_index":310098,"ledger_hash":"f48d6574488a24155420ae76aa7dcecfe73f6a262a2434a96eb2e93f6bbf02b6","messages_hash":"4ba3a4a60a0c079e27df1ae65619cee9ef2aedc4ab595b55871fd36c6dca22c6","txlist_hash":"bf2e65b5a1da6ac499a4ebcde81b607f6516de77ed2a10ff363ddb05dd8e288d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(343,310099,'insert','blocks','{"block_hash":"3c4c2279cd7de0add5ec469648a845875495a7d54ebfb5b012dcc5a197b7992a","block_index":310099,"block_time":310099000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(343,310098,'insert','blocks','{"block_hash":"3c4c2279cd7de0add5ec469648a845875495a7d54ebfb5b012dcc5a197b7992a","block_index":310099,"block_time":310099000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(344,310099,'parse','blocks','{"block_index":310099,"ledger_hash":"e936debeb5d219215ba24e56ed34edb435131877c2947c0801824155fdc70c05","messages_hash":"ce9c5786ef39b2358c92af86f3ab6a58251b47487128de33ea86a2d817d74d8d","txlist_hash":"d18b9514ed9fda087d3c98eca75ea68388964396143b925cc58ce2e2d5c1c5da"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(345,310100,'insert','blocks','{"block_hash":"96925c05b3c7c80c716f5bef68d161c71d044252c766ca0e3f17f255764242cb","block_index":310100,"block_time":310100000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(345,310099,'insert','blocks','{"block_hash":"96925c05b3c7c80c716f5bef68d161c71d044252c766ca0e3f17f255764242cb","block_index":310100,"block_time":310100000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(346,310100,'parse','blocks','{"block_index":310100,"ledger_hash":"2b033a615b9eb693ed59daca9bc047f61a3519bec5c2b64f968cf717c75afe79","messages_hash":"00c15802e74c7874cd843b0412cc13a263fce9d4cf4f05dbf222ae1558676140","txlist_hash":"1c39371c274124af6085dcf02fcdfda68d36d261bb47d7763ea3f09b70d0f62b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(347,310101,'insert','blocks','{"block_hash":"369472409995ca1a2ebecbad6bf9dab38c378ab1e67e1bdf13d4ce1346731cd6","block_index":310101,"block_time":310101000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(347,310100,'insert','blocks','{"block_hash":"369472409995ca1a2ebecbad6bf9dab38c378ab1e67e1bdf13d4ce1346731cd6","block_index":310101,"block_time":310101000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(348,310101,'parse','blocks','{"block_index":310101,"ledger_hash":"6a41dd11d8b611f6fde79e06a4f65d20fc15419f8336646130c02e9f7d87eff4","messages_hash":"9c5d561b9fd34987179149f2720b511024f0a434b35cb960b4185e80596c7697","txlist_hash":"e2c84c519b3d759f8efb016894a981411328df6f0a778835c95ed4116fef01f5"}',0,'BLOCK_PARSED'); -- Triggers and indices on messages CREATE TRIGGER block_update_messages diff --git a/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_1_of_3.sql b/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_1_of_3.sql index 41026e1a05..0fc147148b 100644 --- a/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_1_of_3.sql +++ b/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_1_of_3.sql @@ -465,26 +465,26 @@ CREATE TABLE messages( bindings TEXT, timestamp INTEGER, event TEXT); -INSERT INTO messages VALUES(0,309999,'insert','blocks','{"block_hash":"8b3bef249cb3b0fa23a4936c1249b6bd41daeadc848c8d2e409ea1cbc10adfe7","block_index":309999,"block_time":309999000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(0,0,'insert','blocks','{"block_hash":"8b3bef249cb3b0fa23a4936c1249b6bd41daeadc848c8d2e409ea1cbc10adfe7","block_index":309999,"block_time":309999000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1,309999,'parse','blocks','{"block_index":309999,"ledger_hash":"63f0fef31d02da85fa779e9a0e1b585b1a6a4e59e14564249e288e074e91c223","messages_hash":"63f0fef31d02da85fa779e9a0e1b585b1a6a4e59e14564249e288e074e91c223","txlist_hash":"63f0fef31d02da85fa779e9a0e1b585b1a6a4e59e14564249e288e074e91c223"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(2,310000,'insert','blocks','{"block_hash":"505d8d82c4ced7daddef7ed0b05ba12ecc664176887b938ef56c6af276f3b30c","block_index":310000,"block_time":310000000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(2,309999,'insert','blocks','{"block_hash":"505d8d82c4ced7daddef7ed0b05ba12ecc664176887b938ef56c6af276f3b30c","block_index":310000,"block_time":310000000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(3,310000,'insert','transactions','{"block_hash":"505d8d82c4ced7daddef7ed0b05ba12ecc664176887b938ef56c6af276f3b30c","block_index":310000,"block_time":310000000,"btc_amount":62000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":5625,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"63f8a75a06328d984c928bdcf6bebb20d9c2b154712f1d03041d07c6f319efd2","tx_index":1}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(4,310000,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310000,"calling_function":"burn","event":"63f8a75a06328d984c928bdcf6bebb20d9c2b154712f1d03041d07c6f319efd2","quantity":93000000000,"tx_index":1}',0,'CREDIT'); INSERT INTO messages VALUES(5,310000,'insert','burns','{"block_index":310000,"burned":62000000,"earned":93000000000,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"63f8a75a06328d984c928bdcf6bebb20d9c2b154712f1d03041d07c6f319efd2","tx_index":1}',0,'BURN'); INSERT INTO messages VALUES(6,310000,'parse','blocks','{"block_index":310000,"ledger_hash":"7e1322d444b3395f9d8ce6b1ca6d48e8f0d78e5d72da997fad9520899bdbebe3","messages_hash":"d95ba402c3fcafbebe7fd8f621727efe65b9a20355645e4f62ca4f77f9b4f061","txlist_hash":"702e537dd6e79386a246cbc44fbccf8ea2a4e575c9f1e072189fbbd831308672"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(7,310001,'insert','blocks','{"block_hash":"3c9f6a9c6cac46a9273bd3db39ad775acd5bc546378ec2fb0587e06e112cc78e","block_index":310001,"block_time":310001000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(7,310000,'insert','blocks','{"block_hash":"3c9f6a9c6cac46a9273bd3db39ad775acd5bc546378ec2fb0587e06e112cc78e","block_index":310001,"block_time":310001000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(8,310001,'insert','transactions','{"block_hash":"3c9f6a9c6cac46a9273bd3db39ad775acd5bc546378ec2fb0587e06e112cc78e","block_index":310001,"block_time":310001000,"btc_amount":1000,"data":"0000000000000000000000010000000002faf080","destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","fee":7650,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"5849bd15f5a73840e4babd220ed450d0f46128479d6bb7eaf9f4e98a409c97d4","tx_index":2}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(9,310001,'insert','debits','{"action":"send","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310001,"event":"5849bd15f5a73840e4babd220ed450d0f46128479d6bb7eaf9f4e98a409c97d4","quantity":50000000,"tx_index":2}',0,'DEBIT'); INSERT INTO messages VALUES(10,310001,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","asset":"XCP","block_index":310001,"calling_function":"send","event":"5849bd15f5a73840e4babd220ed450d0f46128479d6bb7eaf9f4e98a409c97d4","quantity":50000000,"tx_index":2}',0,'CREDIT'); INSERT INTO messages VALUES(11,310001,'insert','sends','{"asset":"XCP","block_index":310001,"destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","quantity":50000000,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"5849bd15f5a73840e4babd220ed450d0f46128479d6bb7eaf9f4e98a409c97d4","tx_index":2}',0,'SEND'); INSERT INTO messages VALUES(12,310001,'parse','transactions','{"supported":true,"tx_hash":"5849bd15f5a73840e4babd220ed450d0f46128479d6bb7eaf9f4e98a409c97d4","tx_index":2}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(13,310001,'parse','blocks','{"block_index":310001,"ledger_hash":"3e18d8a969bce2d869cb86b28c23823d88e6d8a840a3cda905a003b37222ebb8","messages_hash":"992c82eb0567345b819a2b96f773b54399af095bd95ded9bdb81f1c9440c6dfd","txlist_hash":"bcd62109b750a9b5c3a07fb6e3ba7a5feb2cb56fb554da3b2b4b560a632e3e2e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(14,310002,'insert','blocks','{"block_hash":"fbb60f1144e1f7d4dc036a4a158a10ea6dea2ba6283a723342a49b8eb5cc9964","block_index":310002,"block_time":310002000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(14,310001,'insert','blocks','{"block_hash":"fbb60f1144e1f7d4dc036a4a158a10ea6dea2ba6283a723342a49b8eb5cc9964","block_index":310002,"block_time":310002000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(15,310002,'insert','transactions','{"block_hash":"fbb60f1144e1f7d4dc036a4a158a10ea6dea2ba6283a723342a49b8eb5cc9964","block_index":310002,"block_time":310002000,"btc_amount":0,"data":"0000000a00000000000000000000000002faf08000000000000000010000000005f5e100000a0000000000000000","destination":"","fee":1000000,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"04d5809f0085bf2655c500a8c65d6d8b42dd373160fb431af05792b0f30b63a6","tx_index":3}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(16,310002,'insert','orders','{"block_index":310002,"expiration":10,"expire_index":310012,"fee_provided":1000000,"fee_provided_remaining":1000000,"fee_required":0,"fee_required_remaining":0,"get_asset":"XCP","get_quantity":100000000,"get_remaining":100000000,"give_asset":"BTC","give_quantity":50000000,"give_remaining":50000000,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"open","tx_hash":"04d5809f0085bf2655c500a8c65d6d8b42dd373160fb431af05792b0f30b63a6","tx_index":3}',0,'OPEN_ORDER'); INSERT INTO messages VALUES(17,310002,'parse','transactions','{"supported":true,"tx_hash":"04d5809f0085bf2655c500a8c65d6d8b42dd373160fb431af05792b0f30b63a6","tx_index":3}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(18,310002,'parse','blocks','{"block_index":310002,"ledger_hash":"71dfa527236bbaf632db18cf1773c63f7ee3a0076fc6562e46db0c955b346a9f","messages_hash":"ee6ae96acab5328d1beb240759bfd4593ea203c4a5ab8bbbb893586824ae4816","txlist_hash":"f7e5b51624875d95cb14e212ee733c94f12f69084eeefa4b77491479ea3ae990"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(19,310003,'insert','blocks','{"block_hash":"d50825dcb32bcf6f69994d616eba18de7718d3d859497e80751b2cb67e333e8a","block_index":310003,"block_time":310003000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(19,310002,'insert','blocks','{"block_hash":"d50825dcb32bcf6f69994d616eba18de7718d3d859497e80751b2cb67e333e8a","block_index":310003,"block_time":310003000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(20,310003,'insert','transactions','{"block_hash":"d50825dcb32bcf6f69994d616eba18de7718d3d859497e80751b2cb67e333e8a","block_index":310003,"block_time":310003000,"btc_amount":0,"data":"0000000a00000000000000010000000006422c4000000000000000000000000002faf080000a00000000000dbba0","destination":"","fee":6800,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"98ef3d31d1777ad18801e94eef03d4314911ac03d7a82483b40614ea5cf80e52","tx_index":4}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(21,310003,'insert','debits','{"action":"open order","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310003,"event":"98ef3d31d1777ad18801e94eef03d4314911ac03d7a82483b40614ea5cf80e52","quantity":105000000,"tx_index":4}',0,'DEBIT'); INSERT INTO messages VALUES(22,310003,'insert','orders','{"block_index":310003,"expiration":10,"expire_index":310013,"fee_provided":6800,"fee_provided_remaining":6800,"fee_required":900000,"fee_required_remaining":900000,"get_asset":"BTC","get_quantity":50000000,"get_remaining":50000000,"give_asset":"XCP","give_quantity":105000000,"give_remaining":105000000,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"open","tx_hash":"98ef3d31d1777ad18801e94eef03d4314911ac03d7a82483b40614ea5cf80e52","tx_index":4}',0,'OPEN_ORDER'); @@ -493,14 +493,14 @@ INSERT INTO messages VALUES(24,310003,'update','orders','{"fee_provided_remainin INSERT INTO messages VALUES(25,310003,'insert','order_matches','{"backward_asset":"XCP","backward_quantity":100000000,"block_index":310003,"fee_paid":857142,"forward_asset":"BTC","forward_quantity":50000000,"id":"04d5809f0085bf2655c500a8c65d6d8b42dd373160fb431af05792b0f30b63a6_98ef3d31d1777ad18801e94eef03d4314911ac03d7a82483b40614ea5cf80e52","match_expire_index":310023,"status":"pending","tx0_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx0_block_index":310002,"tx0_expiration":10,"tx0_hash":"04d5809f0085bf2655c500a8c65d6d8b42dd373160fb431af05792b0f30b63a6","tx0_index":3,"tx1_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx1_block_index":310003,"tx1_expiration":10,"tx1_hash":"98ef3d31d1777ad18801e94eef03d4314911ac03d7a82483b40614ea5cf80e52","tx1_index":4}',0,'ORDER_MATCH'); INSERT INTO messages VALUES(26,310003,'parse','transactions','{"supported":true,"tx_hash":"98ef3d31d1777ad18801e94eef03d4314911ac03d7a82483b40614ea5cf80e52","tx_index":4}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(27,310003,'parse','blocks','{"block_index":310003,"ledger_hash":"39feff81ad306adcfb9610e6bd8442e35dd6e1924e75a53708c1d2932bda67f6","messages_hash":"c3ba35fc4fb0a7a1e9fff19e260c2a36ffc6869477fd4a382b7bc9294aab42a6","txlist_hash":"a857bb0cb63c343a04d6efdf7d69f1de6f89a67dc25ca5b3e9cd9405ef48c416"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(28,310004,'insert','blocks','{"block_hash":"60cdc0ac0e3121ceaa2c3885f21f5789f49992ffef6e6ff99f7da80e36744615","block_index":310004,"block_time":310004000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(28,310003,'insert','blocks','{"block_hash":"60cdc0ac0e3121ceaa2c3885f21f5789f49992ffef6e6ff99f7da80e36744615","block_index":310004,"block_time":310004000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(29,310004,'insert','transactions','{"block_hash":"60cdc0ac0e3121ceaa2c3885f21f5789f49992ffef6e6ff99f7da80e36744615","block_index":310004,"block_time":310004000,"btc_amount":50000000,"data":"0000000b04d5809f0085bf2655c500a8c65d6d8b42dd373160fb431af05792b0f30b63a698ef3d31d1777ad18801e94eef03d4314911ac03d7a82483b40614ea5cf80e52","destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","fee":9675,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"90eb885df58d93c1d5fdc86a88257db69e6ac7904409929733250b3f7bbe5613","tx_index":5}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(30,310004,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310004,"calling_function":"btcpay","event":"90eb885df58d93c1d5fdc86a88257db69e6ac7904409929733250b3f7bbe5613","quantity":100000000,"tx_index":5}',0,'CREDIT'); INSERT INTO messages VALUES(31,310004,'update','order_matches','{"id":"04d5809f0085bf2655c500a8c65d6d8b42dd373160fb431af05792b0f30b63a6_98ef3d31d1777ad18801e94eef03d4314911ac03d7a82483b40614ea5cf80e52","order_match_id":"04d5809f0085bf2655c500a8c65d6d8b42dd373160fb431af05792b0f30b63a6_98ef3d31d1777ad18801e94eef03d4314911ac03d7a82483b40614ea5cf80e52","status":"completed"}',0,'ORDER_MATCH_UPDATE'); INSERT INTO messages VALUES(32,310004,'insert','btcpays','{"block_index":310004,"btc_amount":50000000,"destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","order_match_id":"04d5809f0085bf2655c500a8c65d6d8b42dd373160fb431af05792b0f30b63a6_98ef3d31d1777ad18801e94eef03d4314911ac03d7a82483b40614ea5cf80e52","source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"90eb885df58d93c1d5fdc86a88257db69e6ac7904409929733250b3f7bbe5613","tx_index":5}',0,'BTC_PAY'); INSERT INTO messages VALUES(33,310004,'parse','transactions','{"supported":true,"tx_hash":"90eb885df58d93c1d5fdc86a88257db69e6ac7904409929733250b3f7bbe5613","tx_index":5}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(34,310004,'parse','blocks','{"block_index":310004,"ledger_hash":"1cee0851ee48eeaa3f71e7a18f9f52fffa28cd3b2e1cbf1f79c0f562618b88c6","messages_hash":"db1deda535fb5c25233d6efc2cc930499cde719c4546f817abad5b30d48af9ac","txlist_hash":"32e68b308a1281ef170d188fe7d19a93486667d45d8a6b50a0c39f00d6924cde"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(35,310005,'insert','blocks','{"block_hash":"8005c2926b7ecc50376642bc661a49108b6dc62636463a5c492b123e2184cd9a","block_index":310005,"block_time":310005000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(35,310004,'insert','blocks','{"block_hash":"8005c2926b7ecc50376642bc661a49108b6dc62636463a5c492b123e2184cd9a","block_index":310005,"block_time":310005000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(36,310005,'insert','transactions','{"block_hash":"8005c2926b7ecc50376642bc661a49108b6dc62636463a5c492b123e2184cd9a","block_index":310005,"block_time":310005000,"btc_amount":0,"data":"000000140000000000004767000000003b9aca000100000000000000000000","destination":"","fee":6800,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"1ba2a0b4ee8543976aab629c78103c0ba86c60250c11d51f9bc40676487283b7","tx_index":6}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(37,310005,'insert','debits','{"action":"issuance fee","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310005,"event":"1ba2a0b4ee8543976aab629c78103c0ba86c60250c11d51f9bc40676487283b7","quantity":50000000,"tx_index":6}',0,'DEBIT'); INSERT INTO messages VALUES(38,310005,'insert','assets','{"asset_id":"18279","asset_longname":null,"asset_name":"BBBB","block_index":310005}',0,'ASSET_CREATION'); @@ -508,7 +508,7 @@ INSERT INTO messages VALUES(39,310005,'insert','issuances','{"asset":"BBBB","ass INSERT INTO messages VALUES(40,310005,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"BBBB","block_index":310005,"calling_function":"issuance","event":"1ba2a0b4ee8543976aab629c78103c0ba86c60250c11d51f9bc40676487283b7","quantity":1000000000,"tx_index":6}',0,'CREDIT'); INSERT INTO messages VALUES(41,310005,'parse','transactions','{"supported":true,"tx_hash":"1ba2a0b4ee8543976aab629c78103c0ba86c60250c11d51f9bc40676487283b7","tx_index":6}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(42,310005,'parse','blocks','{"block_index":310005,"ledger_hash":"89f516c3fbdcd1540125561301db451fb55b1baead9ae8f408156075aed104ad","messages_hash":"a587bd615ee0752052c4b1ce2df72fa76cf8ba03ae53e561fa1b55674ae3fbd7","txlist_hash":"3a41f3c4d912ee4628975e61c4a04b836de31df5a9aa5fbd7031628d9c4f0eb6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(43,310006,'insert','blocks','{"block_hash":"bdad69d1669eace68b9f246de113161099d4f83322e2acf402c42defef3af2bb","block_index":310006,"block_time":310006000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(43,310005,'insert','blocks','{"block_hash":"bdad69d1669eace68b9f246de113161099d4f83322e2acf402c42defef3af2bb","block_index":310006,"block_time":310006000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(44,310006,'insert','transactions','{"block_hash":"bdad69d1669eace68b9f246de113161099d4f83322e2acf402c42defef3af2bb","block_index":310006,"block_time":310006000,"btc_amount":0,"data":"00000014000000000000476800000000000186a00000000000000000000006666f6f626172","destination":"","fee":6800,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"3f9e2dc4f7a72dee0e2d3badd871324506fe6c8239f62b6aa35f316800d55846","tx_index":7}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(45,310006,'insert','debits','{"action":"issuance fee","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310006,"event":"3f9e2dc4f7a72dee0e2d3badd871324506fe6c8239f62b6aa35f316800d55846","quantity":50000000,"tx_index":7}',0,'DEBIT'); INSERT INTO messages VALUES(46,310006,'insert','assets','{"asset_id":"18280","asset_longname":null,"asset_name":"BBBC","block_index":310006}',0,'ASSET_CREATION'); @@ -516,21 +516,21 @@ INSERT INTO messages VALUES(47,310006,'insert','issuances','{"asset":"BBBC","ass INSERT INTO messages VALUES(48,310006,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"BBBC","block_index":310006,"calling_function":"issuance","event":"3f9e2dc4f7a72dee0e2d3badd871324506fe6c8239f62b6aa35f316800d55846","quantity":100000,"tx_index":7}',0,'CREDIT'); INSERT INTO messages VALUES(49,310006,'parse','transactions','{"supported":true,"tx_hash":"3f9e2dc4f7a72dee0e2d3badd871324506fe6c8239f62b6aa35f316800d55846","tx_index":7}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(50,310006,'parse','blocks','{"block_index":310006,"ledger_hash":"e9a37cfc1055e8c18d369896a14422cad3c5ac8d9b4d5aff6053d8e31dd56336","messages_hash":"200f90a0b58f1350230916be6521a38bc99cc9fdc9165b36a26141b28ae83954","txlist_hash":"4d2d6945b23826371a1cdb4cf2f841cf2b78c891a6b93da8167ed219388edd65"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(51,310007,'insert','blocks','{"block_hash":"10a642b96d60091d08234d17dfdecf3025eca41e4fc8e3bbe71a91c5a457cb4b","block_index":310007,"block_time":310007000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(51,310006,'insert','blocks','{"block_hash":"10a642b96d60091d08234d17dfdecf3025eca41e4fc8e3bbe71a91c5a457cb4b","block_index":310007,"block_time":310007000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(52,310007,'insert','transactions','{"block_hash":"10a642b96d60091d08234d17dfdecf3025eca41e4fc8e3bbe71a91c5a457cb4b","block_index":310007,"block_time":310007000,"btc_amount":1000,"data":"00000000000000000000476700000000003d0900","destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","fee":7650,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"30bfb2793bd1a65e5993edb9c3268db31bc96b8bf1f6e3bef037da4f4e93bc65","tx_index":8}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(53,310007,'insert','debits','{"action":"send","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"BBBB","block_index":310007,"event":"30bfb2793bd1a65e5993edb9c3268db31bc96b8bf1f6e3bef037da4f4e93bc65","quantity":4000000,"tx_index":8}',0,'DEBIT'); INSERT INTO messages VALUES(54,310007,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","asset":"BBBB","block_index":310007,"calling_function":"send","event":"30bfb2793bd1a65e5993edb9c3268db31bc96b8bf1f6e3bef037da4f4e93bc65","quantity":4000000,"tx_index":8}',0,'CREDIT'); INSERT INTO messages VALUES(55,310007,'insert','sends','{"asset":"BBBB","block_index":310007,"destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","quantity":4000000,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"30bfb2793bd1a65e5993edb9c3268db31bc96b8bf1f6e3bef037da4f4e93bc65","tx_index":8}',0,'SEND'); INSERT INTO messages VALUES(56,310007,'parse','transactions','{"supported":true,"tx_hash":"30bfb2793bd1a65e5993edb9c3268db31bc96b8bf1f6e3bef037da4f4e93bc65","tx_index":8}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(57,310007,'parse','blocks','{"block_index":310007,"ledger_hash":"174c7c107c37e0ca2c907b1bc35e086eebbad8eb02493a2f166ff2279ecc013c","messages_hash":"0727ddaec67766acc71f6b2534a1fe0eb25e8866c10d8bd0c5c742eb6a5f8d8c","txlist_hash":"dd1e7522ff359cc0ed124a82d3b367ea105127d45ccf563848b531aaf75b8c2d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(58,310008,'insert','blocks','{"block_hash":"47d0e3acbdc6916aeae95e987f9cfa16209b3df1e67bb38143b3422b32322c33","block_index":310008,"block_time":310008000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(58,310007,'insert','blocks','{"block_hash":"47d0e3acbdc6916aeae95e987f9cfa16209b3df1e67bb38143b3422b32322c33","block_index":310008,"block_time":310008000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(59,310008,'insert','transactions','{"block_hash":"47d0e3acbdc6916aeae95e987f9cfa16209b3df1e67bb38143b3422b32322c33","block_index":310008,"block_time":310008000,"btc_amount":1000,"data":"000000000000000000004768000000000000020e","destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","fee":7650,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"7da21bef68887cb50f8582fc0dda69ee5414993450dfab7437891b5a1117e849","tx_index":9}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(60,310008,'insert','debits','{"action":"send","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"BBBC","block_index":310008,"event":"7da21bef68887cb50f8582fc0dda69ee5414993450dfab7437891b5a1117e849","quantity":526,"tx_index":9}',0,'DEBIT'); INSERT INTO messages VALUES(61,310008,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","asset":"BBBC","block_index":310008,"calling_function":"send","event":"7da21bef68887cb50f8582fc0dda69ee5414993450dfab7437891b5a1117e849","quantity":526,"tx_index":9}',0,'CREDIT'); INSERT INTO messages VALUES(62,310008,'insert','sends','{"asset":"BBBC","block_index":310008,"destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","quantity":526,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"7da21bef68887cb50f8582fc0dda69ee5414993450dfab7437891b5a1117e849","tx_index":9}',0,'SEND'); INSERT INTO messages VALUES(63,310008,'parse','transactions','{"supported":true,"tx_hash":"7da21bef68887cb50f8582fc0dda69ee5414993450dfab7437891b5a1117e849","tx_index":9}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(64,310008,'parse','blocks','{"block_index":310008,"ledger_hash":"1463da3ebe264e703ecc0c708baa98f737b31f51726f85d3ac646f5e301b7c10","messages_hash":"46eeaba57e4e2bef42a40c71a8bfd0bd81d10357dfe68f3cc0899ceb0da7bd74","txlist_hash":"3e547d66bace022adbb42aba8172ed287077f306537c9ce69bb11f47ed1b34d1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(65,310009,'insert','blocks','{"block_hash":"4d474992b141620bf3753863db7ee5e8af26cadfbba27725911f44fa657bc1c0","block_index":310009,"block_time":310009000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(65,310008,'insert','blocks','{"block_hash":"4d474992b141620bf3753863db7ee5e8af26cadfbba27725911f44fa657bc1c0","block_index":310009,"block_time":310009000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(66,310009,'insert','transactions','{"block_hash":"4d474992b141620bf3753863db7ee5e8af26cadfbba27725911f44fa657bc1c0","block_index":310009,"block_time":310009000,"btc_amount":0,"data":"00000032000000000000025800000000000047670000000000000001","destination":"","fee":6800,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"f3cb8e3c39c261fef8d71c5222b8864bee3c7c1c4ec342430cff08945273779f","tx_index":10}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(67,310009,'insert','debits','{"action":"dividend","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310009,"event":"f3cb8e3c39c261fef8d71c5222b8864bee3c7c1c4ec342430cff08945273779f","quantity":24,"tx_index":10}',0,'DEBIT'); INSERT INTO messages VALUES(68,310009,'insert','debits','{"action":"dividend fee","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310009,"event":"f3cb8e3c39c261fef8d71c5222b8864bee3c7c1c4ec342430cff08945273779f","quantity":20000,"tx_index":10}',0,'DEBIT'); @@ -538,7 +538,7 @@ INSERT INTO messages VALUES(69,310009,'insert','credits','{"address":"1_mn6q3dS2 INSERT INTO messages VALUES(70,310009,'insert','dividends','{"asset":"BBBB","block_index":310009,"dividend_asset":"XCP","fee_paid":20000,"quantity_per_unit":600,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"f3cb8e3c39c261fef8d71c5222b8864bee3c7c1c4ec342430cff08945273779f","tx_index":10}',0,'ASSET_DIVIDEND'); INSERT INTO messages VALUES(71,310009,'parse','transactions','{"supported":true,"tx_hash":"f3cb8e3c39c261fef8d71c5222b8864bee3c7c1c4ec342430cff08945273779f","tx_index":10}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(72,310009,'parse','blocks','{"block_index":310009,"ledger_hash":"dfe8c57b4ce4ea12f002d11cfc127f95b7cea7727bcbaf64418b2d584602a250","messages_hash":"fe46bead46c77b206699519527766a6528f0b9c5de6b51cbab3ff306a30b20bd","txlist_hash":"20b7caf43b34f595139545c800247b16da6e00b0b1162928670c80ffc2cc773f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(73,310010,'insert','blocks','{"block_hash":"a58162dff81a32e6a29b075be759dbb9fa9b8b65303e69c78fb4d7b0acc37042","block_index":310010,"block_time":310010000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(73,310009,'insert','blocks','{"block_hash":"a58162dff81a32e6a29b075be759dbb9fa9b8b65303e69c78fb4d7b0acc37042","block_index":310010,"block_time":310010000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(74,310010,'insert','transactions','{"block_hash":"a58162dff81a32e6a29b075be759dbb9fa9b8b65303e69c78fb4d7b0acc37042","block_index":310010,"block_time":310010000,"btc_amount":0,"data":"00000032000000000000032000000000000047680000000000000001","destination":"","fee":6800,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"15741649c83a752d61662fe00bd28b1c33dfd7816cb92225a0a61008f9059a59","tx_index":11}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(75,310010,'insert','debits','{"action":"dividend","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310010,"event":"15741649c83a752d61662fe00bd28b1c33dfd7816cb92225a0a61008f9059a59","quantity":420800,"tx_index":11}',0,'DEBIT'); INSERT INTO messages VALUES(76,310010,'insert','debits','{"action":"dividend fee","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310010,"event":"15741649c83a752d61662fe00bd28b1c33dfd7816cb92225a0a61008f9059a59","quantity":20000,"tx_index":11}',0,'DEBIT'); @@ -546,18 +546,18 @@ INSERT INTO messages VALUES(77,310010,'insert','credits','{"address":"1_mn6q3dS2 INSERT INTO messages VALUES(78,310010,'insert','dividends','{"asset":"BBBC","block_index":310010,"dividend_asset":"XCP","fee_paid":20000,"quantity_per_unit":800,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"15741649c83a752d61662fe00bd28b1c33dfd7816cb92225a0a61008f9059a59","tx_index":11}',0,'ASSET_DIVIDEND'); INSERT INTO messages VALUES(79,310010,'parse','transactions','{"supported":true,"tx_hash":"15741649c83a752d61662fe00bd28b1c33dfd7816cb92225a0a61008f9059a59","tx_index":11}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(80,310010,'parse','blocks','{"block_index":310010,"ledger_hash":"f9c936d3bb4c8bbc20e544d9262ffa3906fbaeca5e4b2e3b241f6059868f506e","messages_hash":"aa6e782f2298ea91fe4708af37be85c140fbe2b6772a66a9f9acb11d0e2186fe","txlist_hash":"47442be955776c7e31fba3f14df298b088192577691c17dced8b14b6037e3c50"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(81,310011,'insert','blocks','{"block_hash":"8042cc2ef293fd73d050f283fbd075c79dd4c49fdcca054dc0714fc3a50dc1bb","block_index":310011,"block_time":310011000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(81,310010,'insert','blocks','{"block_hash":"8042cc2ef293fd73d050f283fbd075c79dd4c49fdcca054dc0714fc3a50dc1bb","block_index":310011,"block_time":310011000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(82,310011,'insert','transactions','{"block_hash":"8042cc2ef293fd73d050f283fbd075c79dd4c49fdcca054dc0714fc3a50dc1bb","block_index":310011,"block_time":310011000,"btc_amount":0,"data":"0000001e52bb3300405900000000000005f5e0ff09556e69742054657374","destination":"","fee":6800,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"1a5b6320346fcb5f7b59ce88553ef92738d2f5ba0a7477e898df85b2730a0f1a","tx_index":12}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(83,310011,'insert','broadcasts','{"block_index":310011,"fee_fraction_int":99999999,"locked":false,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","text":"Unit Test","timestamp":1388000000,"tx_hash":"1a5b6320346fcb5f7b59ce88553ef92738d2f5ba0a7477e898df85b2730a0f1a","tx_index":12,"value":100.0}',0,'BROADCAST'); INSERT INTO messages VALUES(84,310011,'parse','transactions','{"supported":true,"tx_hash":"1a5b6320346fcb5f7b59ce88553ef92738d2f5ba0a7477e898df85b2730a0f1a","tx_index":12}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(85,310011,'parse','blocks','{"block_index":310011,"ledger_hash":"490bfec10bfd72eca7fcbae5887b94ce4739454a82e601dc754e4e9d1030f3c2","messages_hash":"c9c5eded352f3952628122af57f3f3d716beac03fc6058fb7601f90617221fd2","txlist_hash":"8a060a9cc82b497e020ad7af45a62c07110b724282ce0c7ca34ad24584638a3b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(86,310012,'insert','blocks','{"block_hash":"cdba329019d93a67b31b79d05f76ce1b7791d430ea0d6c1c2168fe78d2f67677","block_index":310012,"block_time":310012000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(86,310011,'insert','blocks','{"block_hash":"cdba329019d93a67b31b79d05f76ce1b7791d430ea0d6c1c2168fe78d2f67677","block_index":310012,"block_time":310012000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(87,310012,'insert','transactions','{"block_hash":"cdba329019d93a67b31b79d05f76ce1b7791d430ea0d6c1c2168fe78d2f67677","block_index":310012,"block_time":310012000,"btc_amount":1000,"data":"00000028000052bb33640000000002faf08000000000017d7840000000000000000000003b100000000a","destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","fee":7650,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"1075391072b01264a783bf31205a83abdf7356c8c405753d3ef8599f852df887","tx_index":13}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(88,310012,'insert','debits','{"action":"bet","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310012,"event":"1075391072b01264a783bf31205a83abdf7356c8c405753d3ef8599f852df887","quantity":50000000,"tx_index":13}',0,'DEBIT'); INSERT INTO messages VALUES(89,310012,'insert','bets','{"bet_type":0,"block_index":310012,"counterwager_quantity":25000000,"counterwager_remaining":25000000,"deadline":1388000100,"expiration":10,"expire_index":310022,"fee_fraction_int":99999999.0,"feed_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","leverage":15120,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"open","target_value":0.0,"tx_hash":"1075391072b01264a783bf31205a83abdf7356c8c405753d3ef8599f852df887","tx_index":13,"wager_quantity":50000000,"wager_remaining":50000000}',0,'OPEN_BET'); INSERT INTO messages VALUES(90,310012,'parse','transactions','{"supported":true,"tx_hash":"1075391072b01264a783bf31205a83abdf7356c8c405753d3ef8599f852df887","tx_index":13}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(91,310012,'parse','blocks','{"block_index":310012,"ledger_hash":"621d39c103bff9a76ada332f41e3ad54c89676bb6057f624942ddf28b31b5927","messages_hash":"26c52cc30b3386eeac9bdd91338ea6460559a0ec72b81314f6de852446b881f3","txlist_hash":"4eb1fdd02e0f8ba27b9134ddb7b03b51caf3417e92687c7c1a7b50ce2d52e6ca"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(92,310013,'insert','blocks','{"block_hash":"0425e5e832e4286757dc0228cd505b8d572081007218abd3a0983a3bcd502a61","block_index":310013,"block_time":310013000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(92,310012,'insert','blocks','{"block_hash":"0425e5e832e4286757dc0228cd505b8d572081007218abd3a0983a3bcd502a61","block_index":310013,"block_time":310013000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(93,310013,'insert','transactions','{"block_hash":"0425e5e832e4286757dc0228cd505b8d572081007218abd3a0983a3bcd502a61","block_index":310013,"block_time":310013000,"btc_amount":1000,"data":"00000028000152bb336400000000017d78400000000002793d60000000000000000000003b100000000a","destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","fee":7650,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"a067f79057992245507ea08e901e623918be2b0eb2d178e35b01f36da2d30a33","tx_index":14}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(94,310013,'update','orders','{"status":"expired","tx_hash":"04d5809f0085bf2655c500a8c65d6d8b42dd373160fb431af05792b0f30b63a6"}',0,'ORDER_UPDATE'); INSERT INTO messages VALUES(95,310013,'insert','order_expirations','{"block_index":310013,"order_hash":"04d5809f0085bf2655c500a8c65d6d8b42dd373160fb431af05792b0f30b63a6","source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3"}',0,'ORDER_EXPIRATION'); @@ -566,10 +566,10 @@ INSERT INTO messages VALUES(97,310013,'insert','bets','{"bet_type":1,"block_inde INSERT INTO messages VALUES(98,310013,'update','bets','{"counterwager_remaining":4250000,"status":"open","tx_hash":"1075391072b01264a783bf31205a83abdf7356c8c405753d3ef8599f852df887","wager_remaining":8500000}',0,'BET_UPDATE'); INSERT INTO messages VALUES(99,310013,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310013,"calling_function":"filled","event":"a067f79057992245507ea08e901e623918be2b0eb2d178e35b01f36da2d30a33","quantity":4250000,"tx_index":14}',0,'CREDIT'); INSERT INTO messages VALUES(100,310013,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"a067f79057992245507ea08e901e623918be2b0eb2d178e35b01f36da2d30a33","wager_remaining":4250000}',0,'BET_UPDATE'); -INSERT INTO messages VALUES(101,310012,'insert','bet_matches','{"backward_quantity":20750000,"block_index":310012,"deadline":1388000100,"fee_fraction_int":99999999,"feed_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","forward_quantity":41500000,"id":"1075391072b01264a783bf31205a83abdf7356c8c405753d3ef8599f852df887_a067f79057992245507ea08e901e623918be2b0eb2d178e35b01f36da2d30a33","initial_value":100.0,"leverage":15120,"match_expire_index":310022,"status":"pending","target_value":0.0,"tx0_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx0_bet_type":0,"tx0_block_index":310012,"tx0_expiration":10,"tx0_hash":"1075391072b01264a783bf31205a83abdf7356c8c405753d3ef8599f852df887","tx0_index":13,"tx1_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx1_bet_type":1,"tx1_block_index":310013,"tx1_expiration":10,"tx1_hash":"a067f79057992245507ea08e901e623918be2b0eb2d178e35b01f36da2d30a33","tx1_index":14}',0,'BET_MATCH'); +INSERT INTO messages VALUES(101,310013,'insert','bet_matches','{"backward_quantity":20750000,"block_index":310012,"deadline":1388000100,"fee_fraction_int":99999999,"feed_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","forward_quantity":41500000,"id":"1075391072b01264a783bf31205a83abdf7356c8c405753d3ef8599f852df887_a067f79057992245507ea08e901e623918be2b0eb2d178e35b01f36da2d30a33","initial_value":100.0,"leverage":15120,"match_expire_index":310022,"status":"pending","target_value":0.0,"tx0_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx0_bet_type":0,"tx0_block_index":310012,"tx0_expiration":10,"tx0_hash":"1075391072b01264a783bf31205a83abdf7356c8c405753d3ef8599f852df887","tx0_index":13,"tx1_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx1_bet_type":1,"tx1_block_index":310013,"tx1_expiration":10,"tx1_hash":"a067f79057992245507ea08e901e623918be2b0eb2d178e35b01f36da2d30a33","tx1_index":14}',0,'BET_MATCH'); INSERT INTO messages VALUES(102,310013,'parse','transactions','{"supported":true,"tx_hash":"a067f79057992245507ea08e901e623918be2b0eb2d178e35b01f36da2d30a33","tx_index":14}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(103,310013,'parse','blocks','{"block_index":310013,"ledger_hash":"7d31be770d6bb6669bcb0a8a5964e57a758788cbbb942d1d3da1abd25b5dd158","messages_hash":"04ac5c161df427ab528946abd575d82c8579c27637511d1784049e1281c97dfe","txlist_hash":"c71d132b3da755134d5305e814129761fdeab1ac933dc320f83570bd5d007002"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(104,310014,'insert','blocks','{"block_hash":"85b28d413ebda2968ed82ae53643677338650151b997ed1e4656158005b9f65f","block_index":310014,"block_time":310014000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(104,310013,'insert','blocks','{"block_hash":"85b28d413ebda2968ed82ae53643677338650151b997ed1e4656158005b9f65f","block_index":310014,"block_time":310014000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(105,310014,'insert','transactions','{"block_hash":"85b28d413ebda2968ed82ae53643677338650151b997ed1e4656158005b9f65f","block_index":310014,"block_time":310014000,"btc_amount":1000,"data":"00000028000052bb33640000000008f0d1800000000014dc93800000000000000000000013b00000000a","destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","fee":7650,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"040e03dfdef2df24411a077cfe5f90f3311bbb82bb3783ea2d7e6f484afd3e2b","tx_index":15}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(106,310014,'update','orders','{"status":"expired","tx_hash":"98ef3d31d1777ad18801e94eef03d4314911ac03d7a82483b40614ea5cf80e52"}',0,'ORDER_UPDATE'); INSERT INTO messages VALUES(107,310014,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310014,"calling_function":"cancel order","event":"98ef3d31d1777ad18801e94eef03d4314911ac03d7a82483b40614ea5cf80e52","quantity":5000000,"tx_index":0}',0,'CREDIT'); @@ -578,7 +578,7 @@ INSERT INTO messages VALUES(109,310014,'insert','debits','{"action":"bet","addre INSERT INTO messages VALUES(110,310014,'insert','bets','{"bet_type":0,"block_index":310014,"counterwager_quantity":350000000,"counterwager_remaining":350000000,"deadline":1388000100,"expiration":10,"expire_index":310024,"fee_fraction_int":99999999.0,"feed_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","leverage":5040,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"open","target_value":0.0,"tx_hash":"040e03dfdef2df24411a077cfe5f90f3311bbb82bb3783ea2d7e6f484afd3e2b","tx_index":15,"wager_quantity":150000000,"wager_remaining":150000000}',0,'OPEN_BET'); INSERT INTO messages VALUES(111,310014,'parse','transactions','{"supported":true,"tx_hash":"040e03dfdef2df24411a077cfe5f90f3311bbb82bb3783ea2d7e6f484afd3e2b","tx_index":15}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(112,310014,'parse','blocks','{"block_index":310014,"ledger_hash":"3aba9622f8de243bcd5e6a5c88fdf04a79a52d95bdc1778d57586b13f30e501c","messages_hash":"6955a89976cbc97716f4f2a189d22ce159a4110af396e660f85ab6e688c24fea","txlist_hash":"d7949a992d062d2eb763b2bd406ffab07d7d676e3327f5e38a4a8a4815e97f35"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(113,310015,'insert','blocks','{"block_hash":"4cf77d688f18f0c68c077db882f62e49f31859dfa6144372457cd73b29223922","block_index":310015,"block_time":310015000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(113,310014,'insert','blocks','{"block_hash":"4cf77d688f18f0c68c077db882f62e49f31859dfa6144372457cd73b29223922","block_index":310015,"block_time":310015000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(114,310015,'insert','transactions','{"block_hash":"4cf77d688f18f0c68c077db882f62e49f31859dfa6144372457cd73b29223922","block_index":310015,"block_time":310015000,"btc_amount":1000,"data":"00000028000152bb33640000000014dc93800000000008f0d1800000000000000000000013b00000000a","destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","fee":7650,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"62ece578c6760773bd4252922a7a0af87da1a1c308f32423e20cf49a369ea0a2","tx_index":16}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(115,310015,'insert','debits','{"action":"bet","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310015,"event":"62ece578c6760773bd4252922a7a0af87da1a1c308f32423e20cf49a369ea0a2","quantity":350000000,"tx_index":16}',0,'DEBIT'); INSERT INTO messages VALUES(116,310015,'insert','bets','{"bet_type":1,"block_index":310015,"counterwager_quantity":150000000,"counterwager_remaining":150000000,"deadline":1388000100,"expiration":10,"expire_index":310025,"fee_fraction_int":99999999.0,"feed_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","leverage":5040,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"open","target_value":0.0,"tx_hash":"62ece578c6760773bd4252922a7a0af87da1a1c308f32423e20cf49a369ea0a2","tx_index":16,"wager_quantity":350000000,"wager_remaining":350000000}',0,'OPEN_BET'); @@ -586,16 +586,16 @@ INSERT INTO messages VALUES(117,310015,'insert','credits','{"address":"1_mn6q3dS INSERT INTO messages VALUES(118,310015,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"040e03dfdef2df24411a077cfe5f90f3311bbb82bb3783ea2d7e6f484afd3e2b","wager_remaining":0}',0,'BET_UPDATE'); INSERT INTO messages VALUES(119,310015,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310015,"calling_function":"filled","event":"62ece578c6760773bd4252922a7a0af87da1a1c308f32423e20cf49a369ea0a2","quantity":0,"tx_index":16}',0,'CREDIT'); INSERT INTO messages VALUES(120,310015,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"62ece578c6760773bd4252922a7a0af87da1a1c308f32423e20cf49a369ea0a2","wager_remaining":0}',0,'BET_UPDATE'); -INSERT INTO messages VALUES(121,310014,'insert','bet_matches','{"backward_quantity":350000000,"block_index":310014,"deadline":1388000100,"fee_fraction_int":99999999,"feed_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","forward_quantity":150000000,"id":"040e03dfdef2df24411a077cfe5f90f3311bbb82bb3783ea2d7e6f484afd3e2b_62ece578c6760773bd4252922a7a0af87da1a1c308f32423e20cf49a369ea0a2","initial_value":100.0,"leverage":5040,"match_expire_index":310024,"status":"pending","target_value":0.0,"tx0_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx0_bet_type":0,"tx0_block_index":310014,"tx0_expiration":10,"tx0_hash":"040e03dfdef2df24411a077cfe5f90f3311bbb82bb3783ea2d7e6f484afd3e2b","tx0_index":15,"tx1_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx1_bet_type":1,"tx1_block_index":310015,"tx1_expiration":10,"tx1_hash":"62ece578c6760773bd4252922a7a0af87da1a1c308f32423e20cf49a369ea0a2","tx1_index":16}',0,'BET_MATCH'); +INSERT INTO messages VALUES(121,310015,'insert','bet_matches','{"backward_quantity":350000000,"block_index":310014,"deadline":1388000100,"fee_fraction_int":99999999,"feed_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","forward_quantity":150000000,"id":"040e03dfdef2df24411a077cfe5f90f3311bbb82bb3783ea2d7e6f484afd3e2b_62ece578c6760773bd4252922a7a0af87da1a1c308f32423e20cf49a369ea0a2","initial_value":100.0,"leverage":5040,"match_expire_index":310024,"status":"pending","target_value":0.0,"tx0_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx0_bet_type":0,"tx0_block_index":310014,"tx0_expiration":10,"tx0_hash":"040e03dfdef2df24411a077cfe5f90f3311bbb82bb3783ea2d7e6f484afd3e2b","tx0_index":15,"tx1_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx1_bet_type":1,"tx1_block_index":310015,"tx1_expiration":10,"tx1_hash":"62ece578c6760773bd4252922a7a0af87da1a1c308f32423e20cf49a369ea0a2","tx1_index":16}',0,'BET_MATCH'); INSERT INTO messages VALUES(122,310015,'parse','transactions','{"supported":true,"tx_hash":"62ece578c6760773bd4252922a7a0af87da1a1c308f32423e20cf49a369ea0a2","tx_index":16}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(123,310015,'parse','blocks','{"block_index":310015,"ledger_hash":"342e5dddd2289d3d6e381fade13e5a5e3ed27615b89bd8e06ea2bab8f8b48be8","messages_hash":"710b39597c7c1009e186eb15450bec99878edf95af9935ae8ccb2246b6b6728b","txlist_hash":"5afdd424176b977bd7b0660867d92952a9cec422a6861c62a876a10014807084"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(124,310016,'insert','blocks','{"block_hash":"99dc7d2627efb4e5e618a53b9898b4ca39c70e98fe9bf39f68a6c980f5b64ef9","block_index":310016,"block_time":310016000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(124,310015,'insert','blocks','{"block_hash":"99dc7d2627efb4e5e618a53b9898b4ca39c70e98fe9bf39f68a6c980f5b64ef9","block_index":310016,"block_time":310016000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(125,310016,'insert','transactions','{"block_hash":"99dc7d2627efb4e5e618a53b9898b4ca39c70e98fe9bf39f68a6c980f5b64ef9","block_index":310016,"block_time":310016000,"btc_amount":1000,"data":"00000028000252bb33c8000000002cb417800000000026be36803ff0000000000000000013b00000000a","destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","fee":7650,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"578d8026c9a3a9173fdb7d5f10c6d5e7d49f375edf5fd8b3f29ccb37a8b42d1f","tx_index":17}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(126,310016,'insert','debits','{"action":"bet","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310016,"event":"578d8026c9a3a9173fdb7d5f10c6d5e7d49f375edf5fd8b3f29ccb37a8b42d1f","quantity":750000000,"tx_index":17}',0,'DEBIT'); INSERT INTO messages VALUES(127,310016,'insert','bets','{"bet_type":2,"block_index":310016,"counterwager_quantity":650000000,"counterwager_remaining":650000000,"deadline":1388000200,"expiration":10,"expire_index":310026,"fee_fraction_int":99999999.0,"feed_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","leverage":5040,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"open","target_value":1.0,"tx_hash":"578d8026c9a3a9173fdb7d5f10c6d5e7d49f375edf5fd8b3f29ccb37a8b42d1f","tx_index":17,"wager_quantity":750000000,"wager_remaining":750000000}',0,'OPEN_BET'); INSERT INTO messages VALUES(128,310016,'parse','transactions','{"supported":true,"tx_hash":"578d8026c9a3a9173fdb7d5f10c6d5e7d49f375edf5fd8b3f29ccb37a8b42d1f","tx_index":17}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(129,310016,'parse','blocks','{"block_index":310016,"ledger_hash":"51b904e6b18ce4d17bdc491457036ff3a4ba70789ae929862844e9456c3b9b01","messages_hash":"068b8aa01882c57eee33d9c970b47032d3977b9a5c3c5f96cbb96f10a7209706","txlist_hash":"d74711d3af6b2313835591b58b1ff53bc20bc194922d10a60cb1274ca632e153"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(130,310017,'insert','blocks','{"block_hash":"8a4fedfbf734b91a5c5761a7bcb3908ea57169777a7018148c51ff611970e4a3","block_index":310017,"block_time":310017000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(130,310016,'insert','blocks','{"block_hash":"8a4fedfbf734b91a5c5761a7bcb3908ea57169777a7018148c51ff611970e4a3","block_index":310017,"block_time":310017000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(131,310017,'insert','transactions','{"block_hash":"8a4fedfbf734b91a5c5761a7bcb3908ea57169777a7018148c51ff611970e4a3","block_index":310017,"block_time":310017000,"btc_amount":1000,"data":"00000028000352bb33c80000000026be3680000000002cb417803ff0000000000000000013b00000000a","destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","fee":7650,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"479b0fbec468381f1e27332755b12a69800680379d0037e02f641265a8beb183","tx_index":18}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(132,310017,'insert','debits','{"action":"bet","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310017,"event":"479b0fbec468381f1e27332755b12a69800680379d0037e02f641265a8beb183","quantity":650000000,"tx_index":18}',0,'DEBIT'); INSERT INTO messages VALUES(133,310017,'insert','bets','{"bet_type":3,"block_index":310017,"counterwager_quantity":750000000,"counterwager_remaining":750000000,"deadline":1388000200,"expiration":10,"expire_index":310027,"fee_fraction_int":99999999.0,"feed_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","leverage":5040,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"open","target_value":1.0,"tx_hash":"479b0fbec468381f1e27332755b12a69800680379d0037e02f641265a8beb183","tx_index":18,"wager_quantity":650000000,"wager_remaining":650000000}',0,'OPEN_BET'); @@ -603,10 +603,10 @@ INSERT INTO messages VALUES(134,310017,'insert','credits','{"address":"1_mn6q3dS INSERT INTO messages VALUES(135,310017,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"578d8026c9a3a9173fdb7d5f10c6d5e7d49f375edf5fd8b3f29ccb37a8b42d1f","wager_remaining":0}',0,'BET_UPDATE'); INSERT INTO messages VALUES(136,310017,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310017,"calling_function":"filled","event":"479b0fbec468381f1e27332755b12a69800680379d0037e02f641265a8beb183","quantity":0,"tx_index":18}',0,'CREDIT'); INSERT INTO messages VALUES(137,310017,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"479b0fbec468381f1e27332755b12a69800680379d0037e02f641265a8beb183","wager_remaining":0}',0,'BET_UPDATE'); -INSERT INTO messages VALUES(138,310016,'insert','bet_matches','{"backward_quantity":650000000,"block_index":310016,"deadline":1388000200,"fee_fraction_int":99999999,"feed_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","forward_quantity":750000000,"id":"578d8026c9a3a9173fdb7d5f10c6d5e7d49f375edf5fd8b3f29ccb37a8b42d1f_479b0fbec468381f1e27332755b12a69800680379d0037e02f641265a8beb183","initial_value":100.0,"leverage":5040,"match_expire_index":310026,"status":"pending","target_value":1.0,"tx0_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx0_bet_type":2,"tx0_block_index":310016,"tx0_expiration":10,"tx0_hash":"578d8026c9a3a9173fdb7d5f10c6d5e7d49f375edf5fd8b3f29ccb37a8b42d1f","tx0_index":17,"tx1_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx1_bet_type":3,"tx1_block_index":310017,"tx1_expiration":10,"tx1_hash":"479b0fbec468381f1e27332755b12a69800680379d0037e02f641265a8beb183","tx1_index":18}',0,'BET_MATCH'); +INSERT INTO messages VALUES(138,310017,'insert','bet_matches','{"backward_quantity":650000000,"block_index":310016,"deadline":1388000200,"fee_fraction_int":99999999,"feed_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","forward_quantity":750000000,"id":"578d8026c9a3a9173fdb7d5f10c6d5e7d49f375edf5fd8b3f29ccb37a8b42d1f_479b0fbec468381f1e27332755b12a69800680379d0037e02f641265a8beb183","initial_value":100.0,"leverage":5040,"match_expire_index":310026,"status":"pending","target_value":1.0,"tx0_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx0_bet_type":2,"tx0_block_index":310016,"tx0_expiration":10,"tx0_hash":"578d8026c9a3a9173fdb7d5f10c6d5e7d49f375edf5fd8b3f29ccb37a8b42d1f","tx0_index":17,"tx1_address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx1_bet_type":3,"tx1_block_index":310017,"tx1_expiration":10,"tx1_hash":"479b0fbec468381f1e27332755b12a69800680379d0037e02f641265a8beb183","tx1_index":18}',0,'BET_MATCH'); INSERT INTO messages VALUES(139,310017,'parse','transactions','{"supported":true,"tx_hash":"479b0fbec468381f1e27332755b12a69800680379d0037e02f641265a8beb183","tx_index":18}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(140,310017,'parse','blocks','{"block_index":310017,"ledger_hash":"03a60654bc84711524cb38171f6573acbe8cc2120787bd09e5ec621b2f53929c","messages_hash":"795d00da46b3c5f0d16ed694ca58d6aff3cb42c8e2f0d08bfc77964b5b451cde","txlist_hash":"bafeaf2f42cf716cdd586e1aea74504257d170275022dfb2c11863cdc33d3127"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(141,310018,'insert','blocks','{"block_hash":"35c06f9e3de39e4e56ceb1d1a22008f52361c50dd0d251c0acbe2e3c2dba8ed3","block_index":310018,"block_time":310018000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(141,310017,'insert','blocks','{"block_hash":"35c06f9e3de39e4e56ceb1d1a22008f52361c50dd0d251c0acbe2e3c2dba8ed3","block_index":310018,"block_time":310018000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(142,310018,'insert','transactions','{"block_hash":"35c06f9e3de39e4e56ceb1d1a22008f52361c50dd0d251c0acbe2e3c2dba8ed3","block_index":310018,"block_time":310018000,"btc_amount":0,"data":"0000001e52bb33324058f7256ffc115e004c4b4009556e69742054657374","destination":"","fee":6800,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"16a5d04f339e5765125c4b2fdda91e45e135e44df489b97805b5d3bae50a6485","tx_index":19}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(143,310018,'insert','broadcasts','{"block_index":310018,"fee_fraction_int":5000000,"locked":false,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","text":"Unit Test","timestamp":1388000050,"tx_hash":"16a5d04f339e5765125c4b2fdda91e45e135e44df489b97805b5d3bae50a6485","tx_index":19,"value":99.86166}',0,'BROADCAST'); INSERT INTO messages VALUES(144,310018,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310018,"calling_function":"bet settled: liquidated for bear","event":"16a5d04f339e5765125c4b2fdda91e45e135e44df489b97805b5d3bae50a6485","quantity":59137500,"tx_index":19}',0,'CREDIT'); @@ -615,7 +615,7 @@ INSERT INTO messages VALUES(146,310018,'insert','bet_match_resolutions','{"bear_ INSERT INTO messages VALUES(147,310018,'update','bet_matches','{"id":"1075391072b01264a783bf31205a83abdf7356c8c405753d3ef8599f852df887_a067f79057992245507ea08e901e623918be2b0eb2d178e35b01f36da2d30a33","status":"settled: liquidated for bear"}',0,'BET_MATCH_UPDATE'); INSERT INTO messages VALUES(148,310018,'parse','transactions','{"supported":true,"tx_hash":"16a5d04f339e5765125c4b2fdda91e45e135e44df489b97805b5d3bae50a6485","tx_index":19}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(149,310018,'parse','blocks','{"block_index":310018,"ledger_hash":"a590602f34163cf8f880c3620f07a8cd27b9aeba8fc80ccb201d88364eaed210","messages_hash":"dfd585d1c8707912ca3f03923bc4e50cbbbe5a8e4218caecb73df3cb6cb4fd5a","txlist_hash":"930eaaee66936628f4ac02f6417167100cc7e2335aaae56dac78cf2ea81bb172"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(150,310019,'insert','blocks','{"block_hash":"114affa0c4f34b1ebf8e2778c9477641f60b5b9e8a69052158041d4c41893294","block_index":310019,"block_time":310019000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(150,310018,'insert','blocks','{"block_hash":"114affa0c4f34b1ebf8e2778c9477641f60b5b9e8a69052158041d4c41893294","block_index":310019,"block_time":310019000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(151,310019,'insert','transactions','{"block_hash":"114affa0c4f34b1ebf8e2778c9477641f60b5b9e8a69052158041d4c41893294","block_index":310019,"block_time":310019000,"btc_amount":0,"data":"0000001e52bb3365405915f3b645a1cb004c4b4009556e69742054657374","destination":"","fee":6800,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"65c96e80d7bfe2c7b00086196a7fc38889d91f5907658a6bbe795c89ef90ce37","tx_index":20}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(152,310019,'insert','broadcasts','{"block_index":310019,"fee_fraction_int":5000000,"locked":false,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","text":"Unit Test","timestamp":1388000101,"tx_hash":"65c96e80d7bfe2c7b00086196a7fc38889d91f5907658a6bbe795c89ef90ce37","tx_index":20,"value":100.343}',0,'BROADCAST'); INSERT INTO messages VALUES(153,310019,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310019,"calling_function":"bet settled","event":"65c96e80d7bfe2c7b00086196a7fc38889d91f5907658a6bbe795c89ef90ce37","quantity":159300000,"tx_index":20}',0,'CREDIT'); @@ -625,7 +625,7 @@ INSERT INTO messages VALUES(156,310019,'insert','bet_match_resolutions','{"bear_ INSERT INTO messages VALUES(157,310019,'update','bet_matches','{"id":"040e03dfdef2df24411a077cfe5f90f3311bbb82bb3783ea2d7e6f484afd3e2b_62ece578c6760773bd4252922a7a0af87da1a1c308f32423e20cf49a369ea0a2","status":"settled"}',0,'BET_MATCH_UPDATE'); INSERT INTO messages VALUES(158,310019,'parse','transactions','{"supported":true,"tx_hash":"65c96e80d7bfe2c7b00086196a7fc38889d91f5907658a6bbe795c89ef90ce37","tx_index":20}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(159,310019,'parse','blocks','{"block_index":310019,"ledger_hash":"1b340e7abac4c458e6a0c6ff2abd6dadaa2913414f450cf926725b5253210950","messages_hash":"16e098173f2f2fb61b8df304c27cc1069eb397263de2262743a57426e05a8152","txlist_hash":"ba496b27fd545d9d811d7421c6f9663e68aa9dbe3a7b5aa9d1ee5644cd142b4a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(160,310020,'insert','blocks','{"block_hash":"d93c79920e4a42164af74ecb5c6b903ff6055cdc007376c74dfa692c8d85ebc9","block_index":310020,"block_time":310020000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(160,310019,'insert','blocks','{"block_hash":"d93c79920e4a42164af74ecb5c6b903ff6055cdc007376c74dfa692c8d85ebc9","block_index":310020,"block_time":310020000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(161,310020,'insert','transactions','{"block_hash":"d93c79920e4a42164af74ecb5c6b903ff6055cdc007376c74dfa692c8d85ebc9","block_index":310020,"block_time":310020000,"btc_amount":0,"data":"0000001e52bb33c94000000000000000004c4b4009556e69742054657374","destination":"","fee":6800,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"43232e4a2e0863cde59fb404a8da059c01cc8afb6c88b509f77d6cbfa02d187e","tx_index":21}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(162,310020,'insert','broadcasts','{"block_index":310020,"fee_fraction_int":5000000,"locked":false,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","text":"Unit Test","timestamp":1388000201,"tx_hash":"43232e4a2e0863cde59fb404a8da059c01cc8afb6c88b509f77d6cbfa02d187e","tx_index":21,"value":2.0}',0,'BROADCAST'); INSERT INTO messages VALUES(163,310020,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310020,"calling_function":"bet settled: for notequal","event":"43232e4a2e0863cde59fb404a8da059c01cc8afb6c88b509f77d6cbfa02d187e","quantity":1330000000,"tx_index":21}',0,'CREDIT'); @@ -634,18 +634,18 @@ INSERT INTO messages VALUES(165,310020,'insert','bet_match_resolutions','{"bear_ INSERT INTO messages VALUES(166,310020,'update','bet_matches','{"id":"578d8026c9a3a9173fdb7d5f10c6d5e7d49f375edf5fd8b3f29ccb37a8b42d1f_479b0fbec468381f1e27332755b12a69800680379d0037e02f641265a8beb183","status":"settled: for notequal"}',0,'BET_MATCH_UPDATE'); INSERT INTO messages VALUES(167,310020,'parse','transactions','{"supported":true,"tx_hash":"43232e4a2e0863cde59fb404a8da059c01cc8afb6c88b509f77d6cbfa02d187e","tx_index":21}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(168,310020,'parse','blocks','{"block_index":310020,"ledger_hash":"5a5a31ae9b03a362b44c9e38effadfeac273bd370374ea4816b8402d6b8a8a1a","messages_hash":"27297409f25155cbbf6c84b665c6d0375c5e964c279c111df35370720b9299ee","txlist_hash":"be94a40c259a5f9e2ad5cb714089c4be18de7bd6d3b403f3a4620f4d889ba4ed"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(169,310021,'insert','blocks','{"block_hash":"7c2460bb32c5749c856486393239bf7a0ac789587ac71f32e7237910da8097f2","block_index":310021,"block_time":310021000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(169,310020,'insert','blocks','{"block_hash":"7c2460bb32c5749c856486393239bf7a0ac789587ac71f32e7237910da8097f2","block_index":310021,"block_time":310021000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(170,310021,'insert','transactions','{"block_hash":"7c2460bb32c5749c856486393239bf7a0ac789587ac71f32e7237910da8097f2","block_index":310021,"block_time":310021000,"btc_amount":0,"data":"0000000a00000000000047670000000002faf08000000000000000010000000002faf080000a0000000000000000","destination":"","fee":6800,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"cd79f155a7a8b7737cf959cdc347db22f2f38288261842997e13844a09f6f2ee","tx_index":22}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(171,310021,'insert','debits','{"action":"open order","address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"BBBB","block_index":310021,"event":"cd79f155a7a8b7737cf959cdc347db22f2f38288261842997e13844a09f6f2ee","quantity":50000000,"tx_index":22}',0,'DEBIT'); INSERT INTO messages VALUES(172,310021,'insert','orders','{"block_index":310021,"expiration":10,"expire_index":310031,"fee_provided":6800,"fee_provided_remaining":6800,"fee_required":0,"fee_required_remaining":0,"get_asset":"XCP","get_quantity":50000000,"get_remaining":50000000,"give_asset":"BBBB","give_quantity":50000000,"give_remaining":50000000,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"open","tx_hash":"cd79f155a7a8b7737cf959cdc347db22f2f38288261842997e13844a09f6f2ee","tx_index":22}',0,'OPEN_ORDER'); INSERT INTO messages VALUES(173,310021,'parse','transactions','{"supported":true,"tx_hash":"cd79f155a7a8b7737cf959cdc347db22f2f38288261842997e13844a09f6f2ee","tx_index":22}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(174,310021,'parse','blocks','{"block_index":310021,"ledger_hash":"2005a300856ccc74efe80c56927fc13619d5c40ab03ae4ee4fba2050bc2a6b75","messages_hash":"dad5bc884bf7ba7bc454bc0864ce114a1faf785f6cf500fc4df296130ac5d56f","txlist_hash":"afa68f3f9cb6cf8f767075bc9119411e146b6838278d884868a80d9c8e80e26f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(175,310022,'insert','blocks','{"block_hash":"44435f9a99a0aa12a9bfabdc4cb8119f6ea6a6e1350d2d65445fb66a456db5fc","block_index":310022,"block_time":310022000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(175,310021,'insert','blocks','{"block_hash":"44435f9a99a0aa12a9bfabdc4cb8119f6ea6a6e1350d2d65445fb66a456db5fc","block_index":310022,"block_time":310022000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(176,310022,'insert','transactions','{"block_hash":"44435f9a99a0aa12a9bfabdc4cb8119f6ea6a6e1350d2d65445fb66a456db5fc","block_index":310022,"block_time":310022000,"btc_amount":100000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":5625,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"ec9788fbae83a6cdf980d5373d85911a27447410efa4b11997fefcc41bc89caa","tx_index":23}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(177,310022,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310022,"calling_function":"burn","event":"ec9788fbae83a6cdf980d5373d85911a27447410efa4b11997fefcc41bc89caa","quantity":56999887262,"tx_index":23}',0,'CREDIT'); INSERT INTO messages VALUES(178,310022,'insert','burns','{"block_index":310022,"burned":38000000,"earned":56999887262,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"ec9788fbae83a6cdf980d5373d85911a27447410efa4b11997fefcc41bc89caa","tx_index":23}',0,'BURN'); INSERT INTO messages VALUES(179,310022,'parse','blocks','{"block_index":310022,"ledger_hash":"95307de52e23a8433143d79710e7df22ba7205e2651c88a2eda220ebc8e0f289","messages_hash":"36fe7b2ad4951a9900b5bbf451e10101d5cdd8ff33d4c40eb6e253dee2e8e991","txlist_hash":"66f27b0e46d782b3e7eb8207ba442131069820295ea19ba9b1f8be5ae5b1367b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(180,310023,'insert','blocks','{"block_hash":"d8cf5bec1bbcab8ca4f495352afde3b6572b7e1d61b3976872ebb8e9d30ccb08","block_index":310023,"block_time":310023000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(180,310022,'insert','blocks','{"block_hash":"d8cf5bec1bbcab8ca4f495352afde3b6572b7e1d61b3976872ebb8e9d30ccb08","block_index":310023,"block_time":310023000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(181,310023,'insert','transactions','{"block_hash":"d8cf5bec1bbcab8ca4f495352afde3b6572b7e1d61b3976872ebb8e9d30ccb08","block_index":310023,"block_time":310023000,"btc_amount":1000,"data":"0000000000000000000047680000000000002710","destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","fee":7650,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"53290702a54a5c19d9a5e2fc1942c2381a4d2283f30d645579b982ae0dbb7fcc","tx_index":24}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(182,310023,'update','bets','{"status":"expired","tx_hash":"1075391072b01264a783bf31205a83abdf7356c8c405753d3ef8599f852df887"}',0,'BET_UPDATE'); INSERT INTO messages VALUES(183,310023,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310023,"calling_function":"recredit wager remaining","event":"1075391072b01264a783bf31205a83abdf7356c8c405753d3ef8599f852df887","quantity":8500000,"tx_index":0}',0,'CREDIT'); @@ -655,164 +655,164 @@ INSERT INTO messages VALUES(186,310023,'insert','credits','{"address":"1_mn6q3dS INSERT INTO messages VALUES(187,310023,'insert','sends','{"asset":"BBBC","block_index":310023,"destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","quantity":10000,"source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"53290702a54a5c19d9a5e2fc1942c2381a4d2283f30d645579b982ae0dbb7fcc","tx_index":24}',0,'SEND'); INSERT INTO messages VALUES(188,310023,'parse','transactions','{"supported":true,"tx_hash":"53290702a54a5c19d9a5e2fc1942c2381a4d2283f30d645579b982ae0dbb7fcc","tx_index":24}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(189,310023,'parse','blocks','{"block_index":310023,"ledger_hash":"de5a22c228bfc58ceaf428d55f180e951ff877537ef463821ce1206f07ab02f3","messages_hash":"f8aeac00fb3c7b32c574f4025dd01789ea804d7dd61ab5e84fc8f0536d6fc923","txlist_hash":"eda7d728863433b4e738e2b317d661a68d7f8921ed3fcf56120e0e0df464f161"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(190,310024,'insert','blocks','{"block_hash":"b03042b4e18a222b4c8d1e9e1970d93e6e2a2d41686d227ff8ecf0a839223dc5","block_index":310024,"block_time":310024000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(190,310023,'insert','blocks','{"block_hash":"b03042b4e18a222b4c8d1e9e1970d93e6e2a2d41686d227ff8ecf0a839223dc5","block_index":310024,"block_time":310024000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(191,310024,'parse','blocks','{"block_index":310024,"ledger_hash":"e54da9db6c4911087dcfb2824acfd7429431e3297f6b5836dfa8f95165ac9b08","messages_hash":"0cdb6d20ad2c93a414e4a882e78a01188ab03c3b4d20ab23980282d0be6d4ab0","txlist_hash":"6d7b69dafc9e895a4a4b75c2e7ee2dcda352e21b82249074bfd0865e04dfe6f6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(192,310025,'insert','blocks','{"block_hash":"a872e560766832cc3b4f7f222228cb6db882ce3c54f6459f62c71d5cd6e90666","block_index":310025,"block_time":310025000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(192,310024,'insert','blocks','{"block_hash":"a872e560766832cc3b4f7f222228cb6db882ce3c54f6459f62c71d5cd6e90666","block_index":310025,"block_time":310025000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(193,310025,'parse','blocks','{"block_index":310025,"ledger_hash":"dac63e0e407785c7a461d839ddd749f020f8a33026cd6ea2acd659567a36c40c","messages_hash":"3338a508c7799481dd961696b5634afa3f7caafd82114c09f35903a0761be969","txlist_hash":"fb8e2f9f37cc8ceb72b92925cdb86f62af821bbae196e5de5083d784436e26ef"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(194,310026,'insert','blocks','{"block_hash":"6c96350f6f2f05810f19a689de235eff975338587194a36a70dfd0fcd490941a","block_index":310026,"block_time":310026000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(194,310025,'insert','blocks','{"block_hash":"6c96350f6f2f05810f19a689de235eff975338587194a36a70dfd0fcd490941a","block_index":310026,"block_time":310026000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(195,310026,'parse','blocks','{"block_index":310026,"ledger_hash":"0397b7da62fb672aadb96fbdfc37f3265ea04c4d401632d5d9018b9b0ad7cd45","messages_hash":"49b57bea36ede566bc2f0b73007114f2979075d952326fa548ea7589598a8648","txlist_hash":"35f40cec8ce2dab43b642668fb3baed3654b63a328ef005e41c8772cbf02029a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(196,310027,'insert','blocks','{"block_hash":"d7acfac66df393c4482a14c189742c0571b89442eb7f817b34415a560445699e","block_index":310027,"block_time":310027000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(196,310026,'insert','blocks','{"block_hash":"d7acfac66df393c4482a14c189742c0571b89442eb7f817b34415a560445699e","block_index":310027,"block_time":310027000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(197,310027,'parse','blocks','{"block_index":310027,"ledger_hash":"dbe43e77c383acc66cb46105991ed066ed5309434016081c26ca1a7dd948b6ce","messages_hash":"c9e442648e4c4070ad2b42eb492b272dedb0fbb261625d7a1400a36c1ab469d0","txlist_hash":"df94b526dfa87413c5d4c11024019c28dd94051780c00b433b28093788b15ce0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(198,310028,'insert','blocks','{"block_hash":"02409fcf8fa06dafcb7f11e38593181d9c42cc9d5e2ddc304d098f990bd9530b","block_index":310028,"block_time":310028000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(198,310027,'insert','blocks','{"block_hash":"02409fcf8fa06dafcb7f11e38593181d9c42cc9d5e2ddc304d098f990bd9530b","block_index":310028,"block_time":310028000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(199,310028,'parse','blocks','{"block_index":310028,"ledger_hash":"ce1021a584895988014f16dd9f7b7b29bbe59ca8a761914f60c9290b5ec6a16f","messages_hash":"d7e783156e45f96a55b90a5d0b0986bf47ef91b509c294a3c8369df38b32828e","txlist_hash":"7d8c18a5d7ec2d6d87ef468e4ed6784e9d41b248bd3d6754bef8f6bd1df9b9f2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(200,310029,'insert','blocks','{"block_hash":"3c739fa8b40c118d5547ea356ee8d10ee2898871907643ec02e5db9d00f03cc6","block_index":310029,"block_time":310029000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(200,310028,'insert','blocks','{"block_hash":"3c739fa8b40c118d5547ea356ee8d10ee2898871907643ec02e5db9d00f03cc6","block_index":310029,"block_time":310029000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(201,310029,'parse','blocks','{"block_index":310029,"ledger_hash":"4a066ff12cf6f8dad894e23cfbb4fe6a087893b717b3f0c1ec53764b1e922bf4","messages_hash":"ac70e12d6f22150346bb4773fc6439f402a2d5ceb618856bd234d28b475d0917","txlist_hash":"0dab776748029f3a094e8c2ad8871c1771263f81cfc6de79ded15ff475239371"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(202,310030,'insert','blocks','{"block_hash":"d5071cddedf89765ee0fd58f209c1c7d669ba8ea66200a57587da8b189b9e4f5","block_index":310030,"block_time":310030000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(202,310029,'insert','blocks','{"block_hash":"d5071cddedf89765ee0fd58f209c1c7d669ba8ea66200a57587da8b189b9e4f5","block_index":310030,"block_time":310030000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(203,310030,'parse','blocks','{"block_index":310030,"ledger_hash":"be1cc89117e7cb3fc18eb610103d72f144c31848da4d8001c334aac577f19427","messages_hash":"047e32ff2ff5dfd5356f783809f796f8816c8d5e620d72194126a3277b814783","txlist_hash":"934400af42a6099d1279e8fc2700bfc118bc313da8383d06892521a17663ef73"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(204,310031,'insert','blocks','{"block_hash":"0b02b10f41380fff27c543ea8891ecb845bf7a003ac5c87e15932aff3bfcf689","block_index":310031,"block_time":310031000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(204,310030,'insert','blocks','{"block_hash":"0b02b10f41380fff27c543ea8891ecb845bf7a003ac5c87e15932aff3bfcf689","block_index":310031,"block_time":310031000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(205,310031,'parse','blocks','{"block_index":310031,"ledger_hash":"a616b3d81a1ad1db1a9b1491b06ff6bcead9037f75552d14a4c7234b6ff56670","messages_hash":"f84fea3613d29a2ae4189da93688bf73179b5ca9ca98eed91009e003f919a931","txlist_hash":"b45534f04aeeee6c2ed877085eac7ebea9f7eacceb2026e5ab8a34ff715bc3be"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(206,310032,'insert','blocks','{"block_hash":"66346be81e6ba04544f2ae643b76c2b7b1383f038fc2636e02e49dc7ec144074","block_index":310032,"block_time":310032000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(206,310031,'insert','blocks','{"block_hash":"66346be81e6ba04544f2ae643b76c2b7b1383f038fc2636e02e49dc7ec144074","block_index":310032,"block_time":310032000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(207,310032,'update','orders','{"status":"expired","tx_hash":"cd79f155a7a8b7737cf959cdc347db22f2f38288261842997e13844a09f6f2ee"}',0,'ORDER_UPDATE'); INSERT INTO messages VALUES(208,310032,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"BBBB","block_index":310032,"calling_function":"cancel order","event":"cd79f155a7a8b7737cf959cdc347db22f2f38288261842997e13844a09f6f2ee","quantity":50000000,"tx_index":0}',0,'CREDIT'); INSERT INTO messages VALUES(209,310032,'insert','order_expirations','{"block_index":310032,"order_hash":"cd79f155a7a8b7737cf959cdc347db22f2f38288261842997e13844a09f6f2ee","source":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3"}',0,'ORDER_EXPIRATION'); INSERT INTO messages VALUES(210,310032,'parse','blocks','{"block_index":310032,"ledger_hash":"e7e76fe32ac5c06696c0bda815f29f1e0785a9d48641615f2ef78fa9982d258f","messages_hash":"2087d0657082953a749135ecbf8ebfc3659f774ce32c3549d0064fd0474bd7a2","txlist_hash":"b8261f9bd73b90fef96702a2e83111c3b9305e55efefae86a4078d99ce8c3d0d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(211,310033,'insert','blocks','{"block_hash":"999c65df9661f73e8c01f1da1afda09ac16788b72834f0ff5ea3d1464afb4707","block_index":310033,"block_time":310033000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(211,310032,'insert','blocks','{"block_hash":"999c65df9661f73e8c01f1da1afda09ac16788b72834f0ff5ea3d1464afb4707","block_index":310033,"block_time":310033000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(212,310033,'parse','blocks','{"block_index":310033,"ledger_hash":"f0d33d2f73f83449c18b9a7bea43857b36effa24eb248283d9356c5280e4992f","messages_hash":"fdbb2f907b3d0a7f263f6fa913d39624181ac3bb69d4abfa9f9907eacbff4109","txlist_hash":"bd3133719a6698bda726f9304fa48db5847cc475db79b879d2566da3cc7299d0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(213,310034,'insert','blocks','{"block_hash":"f552edd2e0a648230f3668e72ddf0ddfb1e8ac0f4c190f91b89c1a8c2e357208","block_index":310034,"block_time":310034000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(213,310033,'insert','blocks','{"block_hash":"f552edd2e0a648230f3668e72ddf0ddfb1e8ac0f4c190f91b89c1a8c2e357208","block_index":310034,"block_time":310034000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(214,310034,'parse','blocks','{"block_index":310034,"ledger_hash":"434d631a1c3ef7d31d136b4eab8b3044dc2b65886bf43642537cc592db0415a3","messages_hash":"c9d7c4ebbd0bf9570081d316d219a200759d9e0c820dbd96ffd08ee0ae2550cc","txlist_hash":"eea570d87d2e343bcb9b93764aa9bed952588f4b053d13e87da410b8dee27d7c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(215,310035,'insert','blocks','{"block_hash":"a13cbb016f3044207a46967a4ba1c87dab411f78c55c1179f2336653c2726ae2","block_index":310035,"block_time":310035000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(215,310034,'insert','blocks','{"block_hash":"a13cbb016f3044207a46967a4ba1c87dab411f78c55c1179f2336653c2726ae2","block_index":310035,"block_time":310035000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(216,310035,'parse','blocks','{"block_index":310035,"ledger_hash":"5ca42816d9c6aaed19f6d25cd02e842b5d834254f90a169630544c83a129c7e5","messages_hash":"e69e7e5d53ad6f4e017b29ae535c181f961c676bf9f868c2712b00a1b23d3485","txlist_hash":"c827847c2f94718cd8c3efdf2b30cf9c8753893a76590efae0e30c61ef9a2d4a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(217,310036,'insert','blocks','{"block_hash":"158648a98f1e1bd1875584ce8449eb15a4e91a99a923bbb24c4210135cef0c76","block_index":310036,"block_time":310036000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(217,310035,'insert','blocks','{"block_hash":"158648a98f1e1bd1875584ce8449eb15a4e91a99a923bbb24c4210135cef0c76","block_index":310036,"block_time":310036000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(218,310036,'parse','blocks','{"block_index":310036,"ledger_hash":"31aecb842ea816f98aead90fed7ad005c010919a2ef2c5d7a8965b71832d3201","messages_hash":"7714fff105a6606c2e60c25256d11266c90d628e9aa6947d2fb2ed9f873835ab","txlist_hash":"5a69c5cc5e4aa7e7d071da7ecf8cff88740a707f70ddec29c57ee52b3da09127"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(219,310037,'insert','blocks','{"block_hash":"563acfd6d991ce256d5655de2e9429975c8dceeb221e76d5ec6e9e24a2c27c07","block_index":310037,"block_time":310037000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(219,310036,'insert','blocks','{"block_hash":"563acfd6d991ce256d5655de2e9429975c8dceeb221e76d5ec6e9e24a2c27c07","block_index":310037,"block_time":310037000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(220,310037,'parse','blocks','{"block_index":310037,"ledger_hash":"7a3167eb2c8a80c7c363ac47200ebc8cb6bd53f57da64465bec14bd86cf2c6c7","messages_hash":"6baaa9f3a19f84c31e3ae3be04bfae441a1073cee975d3e6a2dea97b94904808","txlist_hash":"8bc588a7a9286c3f5c13bc31c0faf29f155391f14ad89defebe3d0a0b21d049e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(221,310038,'insert','blocks','{"block_hash":"b44b4cad12431c32df27940e18d51f63897c7472b70950d18454edfd640490b2","block_index":310038,"block_time":310038000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(221,310037,'insert','blocks','{"block_hash":"b44b4cad12431c32df27940e18d51f63897c7472b70950d18454edfd640490b2","block_index":310038,"block_time":310038000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(222,310038,'parse','blocks','{"block_index":310038,"ledger_hash":"212bc51956081e57aa618360926e186824dce8987948ee7706403451ab417a0a","messages_hash":"2fed45c6e0eb8befd33dfaae01c3121fbaa17a33fc8db9e7ab32f2a2c8ae970a","txlist_hash":"77861a778f50d5f8314cf4caeb6a78539702ee5b36b882713079b88143d4c6ca"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(223,310039,'insert','blocks','{"block_hash":"5fa1ae9c5e8a599247458987b006ad3a57f686df1f7cc240bf119e911b56c347","block_index":310039,"block_time":310039000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(223,310038,'insert','blocks','{"block_hash":"5fa1ae9c5e8a599247458987b006ad3a57f686df1f7cc240bf119e911b56c347","block_index":310039,"block_time":310039000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(224,310039,'parse','blocks','{"block_index":310039,"ledger_hash":"03e72d7551164403b41956638a0fdec8703c29373ea2b15c770717b0ec39fa95","messages_hash":"f85797a2335bfe5bb7fe18328e1e199a2c576284b6cbc402b1089c18e7c19319","txlist_hash":"b445575b555d0621a37fc3f9f22c113126ea35507703f8885294cb2a4613a6c7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(225,310040,'insert','blocks','{"block_hash":"7200ded406675453eadddfbb2d14c2a4526c7dc2b5de14bd48b29243df5e1aa3","block_index":310040,"block_time":310040000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(225,310039,'insert','blocks','{"block_hash":"7200ded406675453eadddfbb2d14c2a4526c7dc2b5de14bd48b29243df5e1aa3","block_index":310040,"block_time":310040000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(226,310040,'parse','blocks','{"block_index":310040,"ledger_hash":"922aa744aa0c08274d1f47a0f80638c7937ecaaf95555e68ceec09449e60d080","messages_hash":"976d3bb7ff94f02bde2563b09209c79d775221e6c6b2031b1c202771b499b773","txlist_hash":"d46179d869f330c786bb81e0c122952d33b264f3af2b4a70627764332cce3fb7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(227,310041,'insert','blocks','{"block_hash":"5db592ff9ba5fac1e030cf22d6c13b70d330ba397f415340086ee7357143b359","block_index":310041,"block_time":310041000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(227,310040,'insert','blocks','{"block_hash":"5db592ff9ba5fac1e030cf22d6c13b70d330ba397f415340086ee7357143b359","block_index":310041,"block_time":310041000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(228,310041,'parse','blocks','{"block_index":310041,"ledger_hash":"de422fc7f3f11d20b697e0ee57afe101ddeb5e84105153a3bb10f97f9c3f1783","messages_hash":"46b89e475c74e426ff35955880806d687cca7f89f6237980a9b2fb481790947f","txlist_hash":"d0cef146e488d50917e659d8c039e7304a41d239d2330947d81e49d3bc7aa723"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(229,310042,'insert','blocks','{"block_hash":"826fd4701ef2824e9559b069517cd3cb990aff6a4690830f78fc845ab77fa3e4","block_index":310042,"block_time":310042000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(229,310041,'insert','blocks','{"block_hash":"826fd4701ef2824e9559b069517cd3cb990aff6a4690830f78fc845ab77fa3e4","block_index":310042,"block_time":310042000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(230,310042,'parse','blocks','{"block_index":310042,"ledger_hash":"82d7c9a0c9d63c3f93b125a9eabc2a7b5f560eccc5fb578d71ec071f150c8fac","messages_hash":"6beccf09f1d28e3b1e210b39e233b2550bc5084e26240329d1a51907745a9ddc","txlist_hash":"68777d56b0179c05517b00df97200e16079b34c54a270d598c28caa4f39ea43b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(231,310043,'insert','blocks','{"block_hash":"2254a12ada208f1dd57bc17547ecaf3c44720323c47bc7d4b1262477cb7f3c51","block_index":310043,"block_time":310043000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(231,310042,'insert','blocks','{"block_hash":"2254a12ada208f1dd57bc17547ecaf3c44720323c47bc7d4b1262477cb7f3c51","block_index":310043,"block_time":310043000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(232,310043,'parse','blocks','{"block_index":310043,"ledger_hash":"c9232d9cfb183cc9bc09bef78f7c83bac3d9af803e6916c9b14063c4f619d9e6","messages_hash":"bdaa43efd672607af77b4b40f439f6aeaed1085617186e1acd6801bb61f3c0f9","txlist_hash":"728975e1d9ed1caeeef47b1b8f1040c3d1ede182cc47282f32f2f464071057b2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(233,310044,'insert','blocks','{"block_hash":"3346d24118d8af0b3c6bcc42f8b85792e7a2e7036ebf6e4c25f4f6723c78e46b","block_index":310044,"block_time":310044000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(233,310043,'insert','blocks','{"block_hash":"3346d24118d8af0b3c6bcc42f8b85792e7a2e7036ebf6e4c25f4f6723c78e46b","block_index":310044,"block_time":310044000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(234,310044,'parse','blocks','{"block_index":310044,"ledger_hash":"71c3e7aa2ad71e35b752dd4e48381b4ca845c370e5c340f2a221dde808966a45","messages_hash":"66199cebdbc88c927c1f33af517c8f679cd75a9c1d3179e75230b43ca181e447","txlist_hash":"56e52a1e4cd4954442f83c421e7b8c653e38cd7725d6b140a47e74f57df2c169"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(235,310045,'insert','blocks','{"block_hash":"7bba0ab243839e91ad1a45a762bf074011f8a9883074d68203c6d1b46fffde98","block_index":310045,"block_time":310045000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(235,310044,'insert','blocks','{"block_hash":"7bba0ab243839e91ad1a45a762bf074011f8a9883074d68203c6d1b46fffde98","block_index":310045,"block_time":310045000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(236,310045,'parse','blocks','{"block_index":310045,"ledger_hash":"47230be2ba96e7adb6088b18788b52a65aa48183c2c00095b79999f5ea1af514","messages_hash":"e2e6623c734a0f965d3897a10844b64d4edf09be17ea873645a6f11f736e9123","txlist_hash":"e8b8a81eeb5c9a9fa6f19f6d9617c7c8e1d19368725d223ef270b74b09b1a541"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(237,310046,'insert','blocks','{"block_hash":"47db6788c38f2d6d712764979e41346b55e78cbb4969e0ef5c4336faf18993a6","block_index":310046,"block_time":310046000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(237,310045,'insert','blocks','{"block_hash":"47db6788c38f2d6d712764979e41346b55e78cbb4969e0ef5c4336faf18993a6","block_index":310046,"block_time":310046000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(238,310046,'parse','blocks','{"block_index":310046,"ledger_hash":"2c306c41049fba2e58a07b5d14f930bcaa465b2afa4df24d8a887958555f0c57","messages_hash":"a4f142388df842e3f7638bba46fa8451424281206af0a37977a5489d032cb40b","txlist_hash":"3ed01193d67e5b016184cd322ca01829a616ad7f7c98bdc034c642ab5c37938d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(239,310047,'insert','blocks','{"block_hash":"a9ccabcc2a098a7d25e4ab8bda7c4e66807eefa42e29890dcd88149a10de7075","block_index":310047,"block_time":310047000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(239,310046,'insert','blocks','{"block_hash":"a9ccabcc2a098a7d25e4ab8bda7c4e66807eefa42e29890dcd88149a10de7075","block_index":310047,"block_time":310047000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(240,310047,'parse','blocks','{"block_index":310047,"ledger_hash":"95a6325dcb8b9f7aef9da35bd20a46addef23aa5c36795beccacf992bee88d28","messages_hash":"0f056aff130424174dc02d66a0359b0ac135228727e1235bcfdc8c8de90ec17c","txlist_hash":"730fe6316784de4a36e2530b3935fbbd2e1bb9c876c61d0cc436f86a103d6655"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(241,310048,'insert','blocks','{"block_hash":"610bf3935a85b05a98556c55493c6de45bed4d7b3b6c8553a984718765796309","block_index":310048,"block_time":310048000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(241,310047,'insert','blocks','{"block_hash":"610bf3935a85b05a98556c55493c6de45bed4d7b3b6c8553a984718765796309","block_index":310048,"block_time":310048000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(242,310048,'parse','blocks','{"block_index":310048,"ledger_hash":"8811d6a6b22ff3e0ecf399dd20a28a17ad000e99b17f90e63e02230ed42cf260","messages_hash":"ebe06e76bbe19b578653b19bc7dbeb78c4b133028ed77cd51e7f5f366a53bf94","txlist_hash":"a1772d6d909c4fd092a9e511c2f0425480f61c1f2a3d513d973a15e587c47a51"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(243,310049,'insert','blocks','{"block_hash":"4ad2761923ad49ad2b283b640f1832522a2a5d6964486b21591b71df6b33be3c","block_index":310049,"block_time":310049000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(243,310048,'insert','blocks','{"block_hash":"4ad2761923ad49ad2b283b640f1832522a2a5d6964486b21591b71df6b33be3c","block_index":310049,"block_time":310049000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(244,310049,'parse','blocks','{"block_index":310049,"ledger_hash":"4bffe3d3071cee255f64108bd8b97652f06190cb73caac5bdc4ef61d3ff9ecd6","messages_hash":"cdddfdb873c4834f4250cda22831636cab7c724f678da6216fd559b80a0e7ff7","txlist_hash":"af66fd2b113c2349077f00be46a1cd5629b2ec39576ae16ec004249438781905"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(245,310050,'insert','blocks','{"block_hash":"8cfeb60a14a4cec6e9be13d699694d49007d82a31065a17890383e262071e348","block_index":310050,"block_time":310050000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(245,310049,'insert','blocks','{"block_hash":"8cfeb60a14a4cec6e9be13d699694d49007d82a31065a17890383e262071e348","block_index":310050,"block_time":310050000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(246,310050,'parse','blocks','{"block_index":310050,"ledger_hash":"b00d5001e914fde448457f3b373637385114eeb07d79751241f4c1f50cadc050","messages_hash":"82992ff8a610ee881b81bd88a5d4a86e5010062bb0faf06cae1eefe2c6769249","txlist_hash":"64149e5936bce967da53b587f07492b64472145ac66f58c1773a4df324ced96d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(247,310051,'insert','blocks','{"block_hash":"b53c90385dd808306601350920c6af4beb717518493fd23b5c730eea078f33e6","block_index":310051,"block_time":310051000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(247,310050,'insert','blocks','{"block_hash":"b53c90385dd808306601350920c6af4beb717518493fd23b5c730eea078f33e6","block_index":310051,"block_time":310051000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(248,310051,'parse','blocks','{"block_index":310051,"ledger_hash":"90dd8fabe43314ac6ab6f5485275a4b1131c232a1e9d92395fc030659873edb8","messages_hash":"8dd7a3b1ee68d435cf5931e578e166e91e9961350db22909b6af5fefd5c4442f","txlist_hash":"71f3161707a90feeb8b8e3340f47a9102c344b652ff70760aaa1f7b3bb30a14f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(249,310052,'insert','blocks','{"block_hash":"0acdacf4e4b6fca756479cb055191b367b1fa433aa558956f5f08fa5b7b394e2","block_index":310052,"block_time":310052000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(249,310051,'insert','blocks','{"block_hash":"0acdacf4e4b6fca756479cb055191b367b1fa433aa558956f5f08fa5b7b394e2","block_index":310052,"block_time":310052000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(250,310052,'parse','blocks','{"block_index":310052,"ledger_hash":"923848bdc7906ab89898021e05e201f69305087b12803c459f066f2d681fe9b5","messages_hash":"3698853c8fd4827d29eea3f3c530f1529fa5f17dd33dffaa19be81d9f30511a6","txlist_hash":"de443d5cc1b054f4cff96f616b234d91b0b5e3712e6d72e64d564c201b7cd757"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(251,310053,'insert','blocks','{"block_hash":"68348f01b6dc49b2cb30fe92ac43e527aa90d859093d3bf7cd695c64d2ef744f","block_index":310053,"block_time":310053000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(251,310052,'insert','blocks','{"block_hash":"68348f01b6dc49b2cb30fe92ac43e527aa90d859093d3bf7cd695c64d2ef744f","block_index":310053,"block_time":310053000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(252,310053,'parse','blocks','{"block_index":310053,"ledger_hash":"e5ecdf8c0a2166fa8fe25adea0d374d34131d29a3c901868fec579eb20a5a930","messages_hash":"dd245b141ff920a732dda71cbc156cbcd1047a88e56724aa897e88f63a1f0af1","txlist_hash":"05b8fe3b76416a506aed1b000e3649af38e59adf26cf0d168c5e84112641ea6c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(253,310054,'insert','blocks','{"block_hash":"a8b5f253df293037e49b998675620d5477445c51d5ec66596e023282bb9cd305","block_index":310054,"block_time":310054000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(253,310053,'insert','blocks','{"block_hash":"a8b5f253df293037e49b998675620d5477445c51d5ec66596e023282bb9cd305","block_index":310054,"block_time":310054000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(254,310054,'parse','blocks','{"block_index":310054,"ledger_hash":"03cd75c14bbe11800f4d436dce93235787e2521a19b1d5a90796a5de369680d1","messages_hash":"17cdd1a908040ea3a4f92093afe9b9bdab12daea6436a6c00994b04481ed082d","txlist_hash":"d8edec966eae31778588f68b7343dbdb4bf878b30cb430246b04ebebdd9e43b9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(255,310055,'insert','blocks','{"block_hash":"4b069152e2dc82e96ed8a3c3547c162e8c3aceeb2a4ac07972f8321a535b9356","block_index":310055,"block_time":310055000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(255,310054,'insert','blocks','{"block_hash":"4b069152e2dc82e96ed8a3c3547c162e8c3aceeb2a4ac07972f8321a535b9356","block_index":310055,"block_time":310055000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(256,310055,'parse','blocks','{"block_index":310055,"ledger_hash":"7239560704ca831dfe90791f1cd21ae1f1506275cf6b45933676be9b096d340b","messages_hash":"7741ea70459b2a66f6dd9e80dece0be8e2c70d9bf2f4a35a7e25209afc693168","txlist_hash":"1294057c4f21c98f97d10d96510ce83d0e8d348d138b3caa2c76ef1be47a3c2a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(257,310056,'insert','blocks','{"block_hash":"7603eaed418971b745256742f9d2ba70b2c2b2f69f61de6cc70e61ce0336f9d3","block_index":310056,"block_time":310056000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(257,310055,'insert','blocks','{"block_hash":"7603eaed418971b745256742f9d2ba70b2c2b2f69f61de6cc70e61ce0336f9d3","block_index":310056,"block_time":310056000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(258,310056,'parse','blocks','{"block_index":310056,"ledger_hash":"3aa4ef8714cbb71c4f0b052dc7ec7795322103ba7b8361db3f33303f564f3815","messages_hash":"67c95d8fcaf9ce3998af05392f9a5068937a7f7e2db782fd8398f91d9a8401b9","txlist_hash":"211d0e47a87100167138974db02ac1299bf1b2a1d7b60606b19cecf2f06df0fd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(259,310057,'insert','blocks','{"block_hash":"4a5fdc84f2d66ecb6ee3e3646aad20751ce8694e64e348d3c8aab09d33a3e411","block_index":310057,"block_time":310057000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(259,310056,'insert','blocks','{"block_hash":"4a5fdc84f2d66ecb6ee3e3646aad20751ce8694e64e348d3c8aab09d33a3e411","block_index":310057,"block_time":310057000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(260,310057,'parse','blocks','{"block_index":310057,"ledger_hash":"fee33c0a466c580887106b4bb7a8c6aeb7a049c94987bae64f695ae400c4a4a1","messages_hash":"b669486dbace095d0a4d0c2c526e18b2f10e79c415589a782f79734e9b11fef0","txlist_hash":"f851a0d0a25322d5939a5cd2cafc831b6282af5ab81932553cb80ff3825b4a2d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(261,310058,'insert','blocks','{"block_hash":"a6eef3089896f0cae0bfe9423392e45c48f4efe4310b14d8cfbdb1fea613635f","block_index":310058,"block_time":310058000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(261,310057,'insert','blocks','{"block_hash":"a6eef3089896f0cae0bfe9423392e45c48f4efe4310b14d8cfbdb1fea613635f","block_index":310058,"block_time":310058000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(262,310058,'parse','blocks','{"block_index":310058,"ledger_hash":"94d58bd9a65a2e13c7ea2373e521952e916b0e1d31d803eced96e5c8903aa625","messages_hash":"e7600207187bfd393eb1cbab52e554db20953b3c0e7677735776cd0c8e6fa1b5","txlist_hash":"e959bddf887904cd324ff7bf5fb60380f2c4a7c2b1b4215c63715a59ad297200"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(263,310059,'insert','blocks','{"block_hash":"ab505de874c43f97c90be1c26a769e6c5cb140405c993b4a6cc7afc795f156a9","block_index":310059,"block_time":310059000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(263,310058,'insert','blocks','{"block_hash":"ab505de874c43f97c90be1c26a769e6c5cb140405c993b4a6cc7afc795f156a9","block_index":310059,"block_time":310059000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(264,310059,'parse','blocks','{"block_index":310059,"ledger_hash":"e9c87b2a652d4ef3d48ac74424f57d06dd85893fd542e0784df067c37396b0df","messages_hash":"1d1f6ff471aa4e5771d0d8f5527a283f946485ffab1ca06addec37f8c3df6039","txlist_hash":"ec205004b519cbbc750bcae821effee41789b3f643f90148e8db2d9d9f83ed49"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(265,310060,'insert','blocks','{"block_hash":"974ad5fbef621e0a38eab811608dc9afaf10c8ecc85fed913075ba1a145e889b","block_index":310060,"block_time":310060000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(265,310059,'insert','blocks','{"block_hash":"974ad5fbef621e0a38eab811608dc9afaf10c8ecc85fed913075ba1a145e889b","block_index":310060,"block_time":310060000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(266,310060,'parse','blocks','{"block_index":310060,"ledger_hash":"b664a0985edab20768aec36096a7b2faa159cef4af7e779ad421942137ee317a","messages_hash":"1da3366346658554be885ca7896d80736ed13f520e7848030de9ebc9acfdc199","txlist_hash":"dec86d178abd72944cda84a3154303e16eaf39e5bd5bd59a80cca27a5ed5887e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(267,310061,'insert','blocks','{"block_hash":"35d267d21ad386e7b7632292af1c422b0310dde7ca49a82f9577525a29c138cf","block_index":310061,"block_time":310061000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(267,310060,'insert','blocks','{"block_hash":"35d267d21ad386e7b7632292af1c422b0310dde7ca49a82f9577525a29c138cf","block_index":310061,"block_time":310061000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(268,310061,'parse','blocks','{"block_index":310061,"ledger_hash":"5ffa5e1f36c5539b2f5a89a6a60d45ec6372ced770d9b0e0e8dfd61edad84c22","messages_hash":"b31533d94983095966b5f0ac4d0ba3996f7bf8263ccddd8e42aef7356bec55ae","txlist_hash":"be052ccd372d556b9b28d0d2b6f9dbfc9b32ff173b71d7842fb6008047a67384"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(269,310062,'insert','blocks','{"block_hash":"b31a0054145319ef9de8c1cb19df5bcf4dc8a1ece20053aa494e5d3a00a2852f","block_index":310062,"block_time":310062000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(269,310061,'insert','blocks','{"block_hash":"b31a0054145319ef9de8c1cb19df5bcf4dc8a1ece20053aa494e5d3a00a2852f","block_index":310062,"block_time":310062000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(270,310062,'parse','blocks','{"block_index":310062,"ledger_hash":"fc6f9f23c3b8954c7989b0e4ce40087b66dceabc7c0e407ac7f4b397fe2a1281","messages_hash":"657e25d6ed0c9c9eb39155ba6f1e9d205a57ab7015d18a13905df2b3657ce3c3","txlist_hash":"1495ca8eeb434877ce36335268a349709e99811e93f416ccf1f0c98114731824"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(271,310063,'insert','blocks','{"block_hash":"0cbcbcd5b7f2dc288e3a34eab3d4212463a5a56e886804fb4f9f1cf929eadebe","block_index":310063,"block_time":310063000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(271,310062,'insert','blocks','{"block_hash":"0cbcbcd5b7f2dc288e3a34eab3d4212463a5a56e886804fb4f9f1cf929eadebe","block_index":310063,"block_time":310063000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(272,310063,'parse','blocks','{"block_index":310063,"ledger_hash":"cc6c3b8cf2c457b2f6afb5b208f968544767be8b86ca53bdab4224619a03121d","messages_hash":"3f132fc4d63edafb5eb644dd47aaa2af32fedf3a15c206deedcc1d3dc47549b2","txlist_hash":"93d193df39b7340b932b5abd85a027df086e033ff2b18fd8c9d0d03cd6db392f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(273,310064,'insert','blocks','{"block_hash":"e2db8065a195e85cde9ddb868a17d39893a60fb2b1255aa5f0c88729de7cbf30","block_index":310064,"block_time":310064000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(273,310063,'insert','blocks','{"block_hash":"e2db8065a195e85cde9ddb868a17d39893a60fb2b1255aa5f0c88729de7cbf30","block_index":310064,"block_time":310064000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(274,310064,'parse','blocks','{"block_index":310064,"ledger_hash":"cc57ac6aec118ebfb03f5113ad1af749522e60ef4ca201d48bd43478cc0a29e4","messages_hash":"22e4ad71319ebf70101939828e606ddd7381dadd77c8fe5ab718ddba78feded7","txlist_hash":"064c03f24da9de841de9f492487de4077b842d6de92366d3fe7ff37d558998c1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(275,310065,'insert','blocks','{"block_hash":"8a7bc7a77c831ac4fd11b8a9d22d1b6a0661b07cef05c2e600c7fb683b861d2a","block_index":310065,"block_time":310065000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(275,310064,'insert','blocks','{"block_hash":"8a7bc7a77c831ac4fd11b8a9d22d1b6a0661b07cef05c2e600c7fb683b861d2a","block_index":310065,"block_time":310065000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(276,310065,'parse','blocks','{"block_index":310065,"ledger_hash":"9999be70079c0943f0a00c54236680bafe0c87dd3bb75c982211f751e7ecdcae","messages_hash":"cbd70e755299ba20e886f6aad7674e4a0784b8507c9a15a64fb1403164d6cc51","txlist_hash":"f1196c84f3767cea82b4dfb6a5e4be30f3ed3f53e9b9cefdadf81af9f2b2bd49"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(277,310066,'insert','blocks','{"block_hash":"b6959be51eb084747d301f7ccaf9e75f2292c9404633b1532e3692659939430d","block_index":310066,"block_time":310066000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(277,310065,'insert','blocks','{"block_hash":"b6959be51eb084747d301f7ccaf9e75f2292c9404633b1532e3692659939430d","block_index":310066,"block_time":310066000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(278,310066,'parse','blocks','{"block_index":310066,"ledger_hash":"efb2fcb7b5628bb99994bc1ada157bf80b4516d961497aa011c06da1523801d7","messages_hash":"7ed9c6fe414c01dddd55faa66d5934f375f8eef87637bfc2c626ba44eb67968f","txlist_hash":"ba6d273c442538389e43b3ad47795d7e61d9b17427d1a1044333f96cafe575c4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(279,310067,'insert','blocks','{"block_hash":"8b08eae98d7193c9c01863fac6effb9162bda010daeacf9e0347112f233b8577","block_index":310067,"block_time":310067000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(279,310066,'insert','blocks','{"block_hash":"8b08eae98d7193c9c01863fac6effb9162bda010daeacf9e0347112f233b8577","block_index":310067,"block_time":310067000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(280,310067,'parse','blocks','{"block_index":310067,"ledger_hash":"fb396fca9af7816f97b22b8bf1b01951e271a75f1a640dfc64955696dc1c0b7d","messages_hash":"5537534fb9d0145545b419b9d01d124fb4021e9a7144eee21c74e633fc995daa","txlist_hash":"20ebf686e5c5a50c0df23ee15488559024622039aa4fa47f1b07dc3967bbc760"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(281,310068,'insert','blocks','{"block_hash":"9280e7297ef6313341bc81787a36acfc9af58f83a415afff5e3154f126cf52b5","block_index":310068,"block_time":310068000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(281,310067,'insert','blocks','{"block_hash":"9280e7297ef6313341bc81787a36acfc9af58f83a415afff5e3154f126cf52b5","block_index":310068,"block_time":310068000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(282,310068,'parse','blocks','{"block_index":310068,"ledger_hash":"6cbc681ed90e676cc507d07120888bd4c8759873a0b9215f721a0ce707070086","messages_hash":"f758fe286e0973f30be7c0d6afaa7c7cc2ffa3f5dbb73dc91ee326cc2d3b0070","txlist_hash":"d8c09411f0c7fd43774558fd6cc9884b032cfdcca63a08845b61293ff52ef380"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(283,310069,'insert','blocks','{"block_hash":"486351f0655bf594ffaab1980cff17353b640b63e9c27239109addece189a6f7","block_index":310069,"block_time":310069000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(283,310068,'insert','blocks','{"block_hash":"486351f0655bf594ffaab1980cff17353b640b63e9c27239109addece189a6f7","block_index":310069,"block_time":310069000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(284,310069,'parse','blocks','{"block_index":310069,"ledger_hash":"7cb734eb3e24e92de8915a6bea42b6ef721251c481ac9ec751cdbdc08e110011","messages_hash":"65a2965d49d850b583ec0574c58c5d1a7bbc3e5c789f143b4505aed318ba88af","txlist_hash":"4f02ef18a644ac564db930818e845496ab0ea3caa34ff70878f0f9f0ef6641e9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(285,310070,'insert','blocks','{"block_hash":"8739e99f4dee8bebf1332f37f49a125348b40b93b74fe35579dd52bfba4fa7e5","block_index":310070,"block_time":310070000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(285,310069,'insert','blocks','{"block_hash":"8739e99f4dee8bebf1332f37f49a125348b40b93b74fe35579dd52bfba4fa7e5","block_index":310070,"block_time":310070000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(286,310070,'parse','blocks','{"block_index":310070,"ledger_hash":"7b57a4d1ce0995a938e174e52a096cc9829a0ddd59f698ed04d8b43371a78126","messages_hash":"d65f12404b216e72ad6ae61b04e69c9f4ca01e2f3fdb4f504e0225ac54736ea5","txlist_hash":"7716368643d8c6d26932d9efabb6fd6e574c1b13b8f149363ec4b99d9f405435"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(287,310071,'insert','blocks','{"block_hash":"7a099aa1bba0ead577f1e44f35263a1f115ed6a868c98d4dd71609072ae7f80b","block_index":310071,"block_time":310071000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(287,310070,'insert','blocks','{"block_hash":"7a099aa1bba0ead577f1e44f35263a1f115ed6a868c98d4dd71609072ae7f80b","block_index":310071,"block_time":310071000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(288,310071,'parse','blocks','{"block_index":310071,"ledger_hash":"f46f820a64ced97ccf68a56c048459de0b2855ecd4299e447c4b630913ce1749","messages_hash":"5ab53570219fc9bb359c607e25599669bb1595309f563491e3f66bfa31d1f984","txlist_hash":"71375966f9a524c1df04c5033ebb17e4293053f3ecb8e724a2f093b3373641b6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(289,310072,'insert','blocks','{"block_hash":"7b17ecedc07552551b8129e068ae67cb176ca766ea3f6df74b597a94e3a7fc8a","block_index":310072,"block_time":310072000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(289,310071,'insert','blocks','{"block_hash":"7b17ecedc07552551b8129e068ae67cb176ca766ea3f6df74b597a94e3a7fc8a","block_index":310072,"block_time":310072000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(290,310072,'parse','blocks','{"block_index":310072,"ledger_hash":"878239189ae0afa759af5e59db8a17fd17c0c9a2c017384fd2d0ca789e738050","messages_hash":"0552a8f121d1ab0e74a11098bee498faa3e6ca29ed768c5477060ab17ef7909c","txlist_hash":"4ead629f99d32f3d0ef6c5f7ad1bbffa91608d71b815293128461a9b5850ad15"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(291,310073,'insert','blocks','{"block_hash":"ee0fe3cc9b3a48a2746b6090b63b442b97ea6055d48edcf4b2288396764c6943","block_index":310073,"block_time":310073000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(291,310072,'insert','blocks','{"block_hash":"ee0fe3cc9b3a48a2746b6090b63b442b97ea6055d48edcf4b2288396764c6943","block_index":310073,"block_time":310073000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(292,310073,'parse','blocks','{"block_index":310073,"ledger_hash":"d2d86823f727bc075138653a682373a9c76d21d48b5881968adb66042b501e53","messages_hash":"1bfdd70a8a1e5b2bd0e98a38a1d8583b65de45bcfb19b22e88c1c240d45d5116","txlist_hash":"3958da4cebd7670ab3e197b6ff8b5a770dc756dccc1806bdd050513e75e9e33c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(293,310074,'insert','blocks','{"block_hash":"ceab38dfde01f711a187601731ad575d67cfe0b7dbc61dcd4f15baaef72089fb","block_index":310074,"block_time":310074000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(293,310073,'insert','blocks','{"block_hash":"ceab38dfde01f711a187601731ad575d67cfe0b7dbc61dcd4f15baaef72089fb","block_index":310074,"block_time":310074000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(294,310074,'parse','blocks','{"block_index":310074,"ledger_hash":"9fd098fcc7d71c0c46fc741ea278de92589c44a6efc4980ced53843193553ea8","messages_hash":"a453a4c531be98d82b30875224f99b77ed74bb8b5433a46773ed9086c78ad820","txlist_hash":"f5b2e274c8dda92ac634490b28d13b18d7aeb22fd1a5101c805d3f4265422a7c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(295,310075,'insert','blocks','{"block_hash":"ef547198c6e36d829f117cfd7077ccde45158e3c545152225fa24dba7a26847b","block_index":310075,"block_time":310075000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(295,310074,'insert','blocks','{"block_hash":"ef547198c6e36d829f117cfd7077ccde45158e3c545152225fa24dba7a26847b","block_index":310075,"block_time":310075000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(296,310075,'parse','blocks','{"block_index":310075,"ledger_hash":"f1ad21f9b4134bc0225c26fb8969af3565c07997197a7ed9636c01f187f07042","messages_hash":"ee8a0a5a6e43392e0e1a898383cc016e65ea48728faecfd48ac2216769d3ab4d","txlist_hash":"3711ef31e2cc58fe1a9cbcf0a5bfdac9a805f346137b923fd86c65f850b35eae"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(297,310076,'insert','blocks','{"block_hash":"3b0499c2e8e8f0252c7288d4ecf66efc426ca37aad3524424d14c8bc6f8b0d92","block_index":310076,"block_time":310076000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(297,310075,'insert','blocks','{"block_hash":"3b0499c2e8e8f0252c7288d4ecf66efc426ca37aad3524424d14c8bc6f8b0d92","block_index":310076,"block_time":310076000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(298,310076,'parse','blocks','{"block_index":310076,"ledger_hash":"9a1f3de6b5a255720973fb0c93ae2bc8fe8936565140b8ae991b9d83f86a0002","messages_hash":"813aee3a02a6e3051aee0bcc3f1559a1ef525876773365702d8cfb623b76104a","txlist_hash":"8e73f7f52266820ca7f25665628e31afc6a5e3dcbbf51bc1bc8635440ecdf669"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(299,310077,'insert','blocks','{"block_hash":"d2adeefa9024ab3ff2822bc36acf19b6c647cea118cf15b86c6bc00c3322e7dd","block_index":310077,"block_time":310077000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(299,310076,'insert','blocks','{"block_hash":"d2adeefa9024ab3ff2822bc36acf19b6c647cea118cf15b86c6bc00c3322e7dd","block_index":310077,"block_time":310077000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(300,310077,'parse','blocks','{"block_index":310077,"ledger_hash":"ab56d9f59575b2d8ecc4933bbfa1fb0cb81c7a6fe84c1ba81bdee40c3da13164","messages_hash":"857718a08a7c24695301eea96ac485c69d7d8528ebd7144526877144727a1930","txlist_hash":"2720a0a338a84ae1b56086f0d4f1b341eb5e3b46e9290887d7675800c6872081"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(301,310078,'insert','blocks','{"block_hash":"f6c17115ef0efe489c562bcda4615892b4d4b39db0c9791fe193d4922bd82cd6","block_index":310078,"block_time":310078000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(301,310077,'insert','blocks','{"block_hash":"f6c17115ef0efe489c562bcda4615892b4d4b39db0c9791fe193d4922bd82cd6","block_index":310078,"block_time":310078000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(302,310078,'parse','blocks','{"block_index":310078,"ledger_hash":"8399d461b5079a145c716f8f6004d2f7870fe93786bd944fa36ef27134c9517c","messages_hash":"cde0bd558daabf0cbede387365e4a018d490754a10047d177cae43a0f4b45d12","txlist_hash":"18ee24262532a6a1e49086f1a8ea0161a5c1ae80ce2230f1b76ce782f6aff39a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(303,310079,'insert','blocks','{"block_hash":"f2fbd2074d804e631db44cb0fb2e1db3fdc367e439c21ffc40d73104c4d7069c","block_index":310079,"block_time":310079000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(303,310078,'insert','blocks','{"block_hash":"f2fbd2074d804e631db44cb0fb2e1db3fdc367e439c21ffc40d73104c4d7069c","block_index":310079,"block_time":310079000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(304,310079,'parse','blocks','{"block_index":310079,"ledger_hash":"b6696a1511704128bbd5ec2c80a1d7d8d3bda6b959f1a674537ace152cb7f8bc","messages_hash":"e1727b554699bff7dbb8b8e04c1703b9dd8baec7d0adbbe19ed29c13063feacf","txlist_hash":"e839a4222aad212860b0698214f3d426d065226d1e7983e6620325a583b28abb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(305,310080,'insert','blocks','{"block_hash":"42943b914d9c367000a78b78a544cc4b84b1df838aadde33fe730964a89a3a6c","block_index":310080,"block_time":310080000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(305,310079,'insert','blocks','{"block_hash":"42943b914d9c367000a78b78a544cc4b84b1df838aadde33fe730964a89a3a6c","block_index":310080,"block_time":310080000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(306,310080,'parse','blocks','{"block_index":310080,"ledger_hash":"9aea0f996c36a815e4103b86ee7fc9be784d7c72549e54d04d84cf7fb8adfb78","messages_hash":"417fc14121a6d8f20288b10640991263f4237e0dad8bcd9bfaa3e13bbca4851c","txlist_hash":"fca6c96a2d6bbe118c5418a3e2b85dced8cfc0da2a8b46fef65f49e81a459efc"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(307,310081,'insert','blocks','{"block_hash":"6554f9d307976249e7b7e260e08046b3b55d318f8b6af627fed5be3063f123c4","block_index":310081,"block_time":310081000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(307,310080,'insert','blocks','{"block_hash":"6554f9d307976249e7b7e260e08046b3b55d318f8b6af627fed5be3063f123c4","block_index":310081,"block_time":310081000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(308,310081,'parse','blocks','{"block_index":310081,"ledger_hash":"7571b554c5600796b60982bb6df3517eed517a2a3627f8383b92a073cc4a5872","messages_hash":"8b39440aeec8b1f4a945ab49608e3f9c8d439ccdb5a42d9e60d5ac4e719f8297","txlist_hash":"a168e4a6c3de65e68532d534107bc3033588b2b0d67ae2f5d23b1ffac1a21ca8"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(309,310082,'insert','blocks','{"block_hash":"4f1ef91b1dcd575f8ac2e66a67715500cbca154bd6f3b8148bb7015a6aa6c644","block_index":310082,"block_time":310082000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(309,310081,'insert','blocks','{"block_hash":"4f1ef91b1dcd575f8ac2e66a67715500cbca154bd6f3b8148bb7015a6aa6c644","block_index":310082,"block_time":310082000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(310,310082,'parse','blocks','{"block_index":310082,"ledger_hash":"b2507a73ff4f6998582daac667c457308ba78744e3d1d7533c0232092e3eab1f","messages_hash":"c40fd8a8ad93626d3df0814b83e6e53fc1ac7e1b56d56c64597931b14dd3ad75","txlist_hash":"379aebcf4d32a0480f5d334f5c04629b6ace33bdc5f138907c338eab7b1d9093"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(311,310083,'insert','blocks','{"block_hash":"9b1f6fd6ff9b0dc4e37603cfb0625f49067c775b99e12492afd85392d3c8d850","block_index":310083,"block_time":310083000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(311,310082,'insert','blocks','{"block_hash":"9b1f6fd6ff9b0dc4e37603cfb0625f49067c775b99e12492afd85392d3c8d850","block_index":310083,"block_time":310083000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(312,310083,'parse','blocks','{"block_index":310083,"ledger_hash":"18566f22ffb9bc5f98712ef3234f8da84f8f3e382007b23c3bb8e6c910043746","messages_hash":"3cb151083aad730810ba5c58d41d621145473366f7b8c502a742583e5fdecdb8","txlist_hash":"b238ccb2ac0b6329a0fc30267fd29e4813bfc786ad871de90c1797c6c72e65bb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(313,310084,'insert','blocks','{"block_hash":"1e0972523e80306441b9f4157f171716199f1428db2e818a7f7817ccdc8859e3","block_index":310084,"block_time":310084000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(313,310083,'insert','blocks','{"block_hash":"1e0972523e80306441b9f4157f171716199f1428db2e818a7f7817ccdc8859e3","block_index":310084,"block_time":310084000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(314,310084,'parse','blocks','{"block_index":310084,"ledger_hash":"72c44bddd5b54657623692e444bf893ca7b6d8da992c274bcbaa37c6db903825","messages_hash":"943656932a28a98619d4de3abdd3e84004dc58ede68152286af3ce6209e12afa","txlist_hash":"2736ff0669b8c3cfb5b4ad8f082e23d985cbf0c4ba9990175febf1c02882bdf9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(315,310085,'insert','blocks','{"block_hash":"c5b6e9581831e3bc5848cd7630c499bca26d9ece5156d36579bdb72d54817e34","block_index":310085,"block_time":310085000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(315,310084,'insert','blocks','{"block_hash":"c5b6e9581831e3bc5848cd7630c499bca26d9ece5156d36579bdb72d54817e34","block_index":310085,"block_time":310085000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(316,310085,'parse','blocks','{"block_index":310085,"ledger_hash":"1ddc441adb4b262862caf5b811b2375bd376d9b5d7b8ee251c4337478833cde9","messages_hash":"d970401c49e0b45d95031cbd740826688efbe7440f776fe4ae5fbd8f5a2d0eae","txlist_hash":"3407db619adaf80236c8319a7e9283c10a43a7b1717d4d89115ac90e8f52b706"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(317,310086,'insert','blocks','{"block_hash":"080c1dc55a4ecf4824cf9840602498cfc35b5f84099f50b71b45cb63834c7a78","block_index":310086,"block_time":310086000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(317,310085,'insert','blocks','{"block_hash":"080c1dc55a4ecf4824cf9840602498cfc35b5f84099f50b71b45cb63834c7a78","block_index":310086,"block_time":310086000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(318,310086,'parse','blocks','{"block_index":310086,"ledger_hash":"b59447846d380cb8d32639ca13e6e396b68b18483f70b6380296bff65dced3d2","messages_hash":"e22966531dedb141d7f6e4a5aabfd82382ed9fcfe6caf8991a17fafb7afc5997","txlist_hash":"e02f456fb1e9b6de38bb9923f6f68973d592ffa04f65731c66dae734e4fd1d44"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(319,310087,'insert','blocks','{"block_hash":"4ec8cb1c38b22904e8087a034a6406b896eff4dd28e7620601c6bddf82e2738c","block_index":310087,"block_time":310087000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(319,310086,'insert','blocks','{"block_hash":"4ec8cb1c38b22904e8087a034a6406b896eff4dd28e7620601c6bddf82e2738c","block_index":310087,"block_time":310087000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(320,310087,'parse','blocks','{"block_index":310087,"ledger_hash":"54a1c32d20665e7ff92ea43451ff2e59a98136ad7da576fa6b2614dda700b707","messages_hash":"8cb58a3a69cd2881516a1073e0e6f8c8a6ca7624c1ba03327f39865006054482","txlist_hash":"5177e82a6aa417664930ecdb0495e108b3fb660ff08a608fa540a29b0c4c2650"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(321,310088,'insert','blocks','{"block_hash":"e945c815c433cbddd0bf8e66c5c23b51072483492acda98f5c2c201020a8c5b3","block_index":310088,"block_time":310088000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(321,310087,'insert','blocks','{"block_hash":"e945c815c433cbddd0bf8e66c5c23b51072483492acda98f5c2c201020a8c5b3","block_index":310088,"block_time":310088000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(322,310088,'parse','blocks','{"block_index":310088,"ledger_hash":"f0bef715c366843e002c75992b8d50d82a3ea54f144350f158e862eb03cb45dd","messages_hash":"a61bd68a25b8460c5a8b915a33898526dcd728017a7f651b70b597cfb11bb1d8","txlist_hash":"84abe1e98b75d07291ef4b9847c336f787fdcc74f9a2570d23cb8ce396c9104a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(323,310089,'insert','blocks','{"block_hash":"0382437f895ef3e7e38bf025fd4f606fd44d4bbd6aea71dbdc4ed11a7cd46f33","block_index":310089,"block_time":310089000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(323,310088,'insert','blocks','{"block_hash":"0382437f895ef3e7e38bf025fd4f606fd44d4bbd6aea71dbdc4ed11a7cd46f33","block_index":310089,"block_time":310089000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(324,310089,'parse','blocks','{"block_index":310089,"ledger_hash":"0a4ce98b783b97f81fff9ab73d7a7091087e8511ebb425c81ccf60c3f9edbfd6","messages_hash":"e8454aef34c815ad01cd9016c6c3fb983bf301e63273a36fc802d26b929b7969","txlist_hash":"ca0f3a6b9b2eafb864eb324359d4ad9dd85361a7c7d2833ba6bfd230d0e60773"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(325,310090,'insert','blocks','{"block_hash":"b756db71dc037b5a4582de354a3347371267d31ebda453e152f0a13bb2fae969","block_index":310090,"block_time":310090000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(325,310089,'insert','blocks','{"block_hash":"b756db71dc037b5a4582de354a3347371267d31ebda453e152f0a13bb2fae969","block_index":310090,"block_time":310090000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(326,310090,'parse','blocks','{"block_index":310090,"ledger_hash":"f3b6781eebab3a6928791cf281d4ae7cb4f7fb59c6ae7575eba253e6ec6e447b","messages_hash":"5b1b966a74a430ee625b0e0d381a963a41ea1d427840a109b95929a4c7061f0d","txlist_hash":"283080af19ccbde44c6e268326ddde17fc850d7ca1add3698adb3e606cd984e4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(327,310091,'insert','blocks','{"block_hash":"734a9aa485f36399d5efb74f3b9c47f8b5f6fd68c9967f134b14cfe7e2d7583c","block_index":310091,"block_time":310091000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(327,310090,'insert','blocks','{"block_hash":"734a9aa485f36399d5efb74f3b9c47f8b5f6fd68c9967f134b14cfe7e2d7583c","block_index":310091,"block_time":310091000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(328,310091,'parse','blocks','{"block_index":310091,"ledger_hash":"14261b6b340632c469847700cee16c0163a7f8cad4dac7ad4555efeb5f3235fb","messages_hash":"d429ca517a7f8c46db00cbb4da11040e4735d0c0aced4f21f1493b44cd679e1f","txlist_hash":"744bcdbcd8d44066eb9528c6fa39109148ea557d3cc3bdb88a818b9f9a9dcb25"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(329,310092,'insert','blocks','{"block_hash":"56386beb65f9228740d4ad43a1c575645f6daf59e0dd9f22551c59215b5e8c3d","block_index":310092,"block_time":310092000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(329,310091,'insert','blocks','{"block_hash":"56386beb65f9228740d4ad43a1c575645f6daf59e0dd9f22551c59215b5e8c3d","block_index":310092,"block_time":310092000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(330,310092,'parse','blocks','{"block_index":310092,"ledger_hash":"3c033a502e1890e8a3c697e354cd1769e4300ce7f62ee7ac47a7201e1ad5de2c","messages_hash":"099e7a26e5dca406cf008eae37302e3e0c7c1797c55362c98b4a3743edad2b40","txlist_hash":"c424d1724a85f76a855b4dc834c8b599f764b5095b0649448a0fa2aef1e41d31"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(331,310093,'insert','blocks','{"block_hash":"a74a2425f2f4be24bb5f715173e6756649e1cbf1b064aeb1ef60e0b94b418ddc","block_index":310093,"block_time":310093000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(331,310092,'insert','blocks','{"block_hash":"a74a2425f2f4be24bb5f715173e6756649e1cbf1b064aeb1ef60e0b94b418ddc","block_index":310093,"block_time":310093000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(332,310093,'parse','blocks','{"block_index":310093,"ledger_hash":"acc1dc4b7ec10c0989af833b57640be486035d76f74b57a50b023fb60f418be2","messages_hash":"e7704dd7f3358c09a87dff920ee932c695e7f0b530239518d50b20b10470141f","txlist_hash":"dde73fa3b80a8e2d1cb8aa692dd62ad712549fdceebf4083965cb36f692d45d9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(333,310094,'insert','blocks','{"block_hash":"2a8f976f20c4e89ff01071915ac96ee35192d54df3a246bf61fd4a0cccfb5b23","block_index":310094,"block_time":310094000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(333,310093,'insert','blocks','{"block_hash":"2a8f976f20c4e89ff01071915ac96ee35192d54df3a246bf61fd4a0cccfb5b23","block_index":310094,"block_time":310094000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(334,310094,'parse','blocks','{"block_index":310094,"ledger_hash":"1443d97efeeb04291e117b152f1e18537035a59c80fabb574577cb3e66e5db59","messages_hash":"acc5a7b3c965552eec18f13d55d796897254c9ae4f6b76b304c53560a5f4cc85","txlist_hash":"a52c247beb178317cdd18532927c8281abe3af9914c676cf250084d4b1e96762"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(335,310095,'insert','blocks','{"block_hash":"bed0fa40c9981223fb40b3be8124ca619edc9dd34d0c907369477ea92e5d2cd2","block_index":310095,"block_time":310095000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(335,310094,'insert','blocks','{"block_hash":"bed0fa40c9981223fb40b3be8124ca619edc9dd34d0c907369477ea92e5d2cd2","block_index":310095,"block_time":310095000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(336,310095,'parse','blocks','{"block_index":310095,"ledger_hash":"1c74208da191b965f52006e577c3f4df30f29b36b1d137ab457bbfe30737285d","messages_hash":"96f02682a3030b2befc1d70760002100282215a301eb5aee1cb07c9162843e0d","txlist_hash":"693d04e9be7d9de1aee3cfe832c6d913213bbf44b0f04a5b394e1aceb77b7b49"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(337,310096,'insert','blocks','{"block_hash":"306aeec3db435fabffdf88c2f26ee83caa4c2426375a33daa2be041dbd27ea2f","block_index":310096,"block_time":310096000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(337,310095,'insert','blocks','{"block_hash":"306aeec3db435fabffdf88c2f26ee83caa4c2426375a33daa2be041dbd27ea2f","block_index":310096,"block_time":310096000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(338,310096,'parse','blocks','{"block_index":310096,"ledger_hash":"662e1b232c5afeba4df756a31d7b63f7f33dbb4aa752abbea9f0b57f1c7c4295","messages_hash":"457f56e032453d64457be80fad88d46e8d4325df25b621c6aea936b6b3636669","txlist_hash":"bce25b4036b54089a064c1fd781923787126977938ff3c206f0a8d76ddf52489"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(339,310097,'insert','blocks','{"block_hash":"13e8e16e67c7cdcc80d477491e554b43744f90e8e1a9728439a11fab42cefadf","block_index":310097,"block_time":310097000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(339,310096,'insert','blocks','{"block_hash":"13e8e16e67c7cdcc80d477491e554b43744f90e8e1a9728439a11fab42cefadf","block_index":310097,"block_time":310097000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(340,310097,'parse','blocks','{"block_index":310097,"ledger_hash":"8a1b60657764a35ce95c9e215600f63f0fc8c4933c682ea017553010743c97a2","messages_hash":"64e00821dde4646cad059921826a3014f892cafa2f978b8baee1ed96e4a00409","txlist_hash":"0d0259b0c4755aba3d725283f1773bdd766a0ae009f2b94be00a5589b61ef8f5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(341,310098,'insert','blocks','{"block_hash":"ca5bca4b5ec4fa6183e05176abe921cff884c4e20910fab55b603cef48dc3bca","block_index":310098,"block_time":310098000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(341,310097,'insert','blocks','{"block_hash":"ca5bca4b5ec4fa6183e05176abe921cff884c4e20910fab55b603cef48dc3bca","block_index":310098,"block_time":310098000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(342,310098,'parse','blocks','{"block_index":310098,"ledger_hash":"c2e25d20f3c50a67a4268d9aa3e386c92e5217cf8f106d2affaae19e49b48828","messages_hash":"da90a92d7a7cc0e24781d15093a3fbb9df9720571e36eb5032240ecb805f01ba","txlist_hash":"32c25e6b70ffe5ea4582a7fd8bf8c892d4fe0afb247e3aca79686e5b5ce9e430"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(343,310099,'insert','blocks','{"block_hash":"3c4c2279cd7de0add5ec469648a845875495a7d54ebfb5b012dcc5a197b7992a","block_index":310099,"block_time":310099000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(343,310098,'insert','blocks','{"block_hash":"3c4c2279cd7de0add5ec469648a845875495a7d54ebfb5b012dcc5a197b7992a","block_index":310099,"block_time":310099000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(344,310099,'parse','blocks','{"block_index":310099,"ledger_hash":"bd7479caeb388072138c99d19624e495200df1bf02f47caf0ae8a5007fd9dfce","messages_hash":"41e980e29574743be776872e4c380ce99c1c84f48f8eeb4ddcfb2cb24207d7e5","txlist_hash":"0fdf6d97b6a63f690d30aca13e27aa4cd6bc3ebbf525cfe6f6eee3ce529dfff4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(345,310100,'insert','blocks','{"block_hash":"96925c05b3c7c80c716f5bef68d161c71d044252c766ca0e3f17f255764242cb","block_index":310100,"block_time":310100000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(345,310099,'insert','blocks','{"block_hash":"96925c05b3c7c80c716f5bef68d161c71d044252c766ca0e3f17f255764242cb","block_index":310100,"block_time":310100000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(346,310100,'parse','blocks','{"block_index":310100,"ledger_hash":"ddb8394df96a37e0127c8894e669072cb195ac953e2a3e922b95bf40804820b6","messages_hash":"0cbcc6eba05629dc63fb500419ab4e6f81b94820d68d7974328e09ff92a2f40b","txlist_hash":"8cd686429ec5799fb9a78d07d662c5f51431c6d79691a45c109d512d261aa5df"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(347,310101,'insert','blocks','{"block_hash":"369472409995ca1a2ebecbad6bf9dab38c378ab1e67e1bdf13d4ce1346731cd6","block_index":310101,"block_time":310101000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(347,310100,'insert','blocks','{"block_hash":"369472409995ca1a2ebecbad6bf9dab38c378ab1e67e1bdf13d4ce1346731cd6","block_index":310101,"block_time":310101000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(348,310101,'parse','blocks','{"block_index":310101,"ledger_hash":"3ed7694459a57281ba8e4159ce156333aae4b596aa3ab5193ea6c1901f2c9667","messages_hash":"a2034f57c8adc0bddcddab4aa24ca8732ed7c72a551dd4c8369db54be08e025a","txlist_hash":"b6c153092c9e72a0fc5f32febc767803bf50df6886edea271315e382903b8cc1"}',0,'BLOCK_PARSED'); -- Triggers and indices on messages CREATE TRIGGER block_update_messages diff --git a/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_2_of_2.sql b/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_2_of_2.sql index a3d30e1e6a..a6adacb8e0 100644 --- a/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_2_of_2.sql +++ b/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_2_of_2.sql @@ -465,26 +465,26 @@ CREATE TABLE messages( bindings TEXT, timestamp INTEGER, event TEXT); -INSERT INTO messages VALUES(0,309999,'insert','blocks','{"block_hash":"8b3bef249cb3b0fa23a4936c1249b6bd41daeadc848c8d2e409ea1cbc10adfe7","block_index":309999,"block_time":309999000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(0,0,'insert','blocks','{"block_hash":"8b3bef249cb3b0fa23a4936c1249b6bd41daeadc848c8d2e409ea1cbc10adfe7","block_index":309999,"block_time":309999000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1,309999,'parse','blocks','{"block_index":309999,"ledger_hash":"63f0fef31d02da85fa779e9a0e1b585b1a6a4e59e14564249e288e074e91c223","messages_hash":"63f0fef31d02da85fa779e9a0e1b585b1a6a4e59e14564249e288e074e91c223","txlist_hash":"63f0fef31d02da85fa779e9a0e1b585b1a6a4e59e14564249e288e074e91c223"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(2,310000,'insert','blocks','{"block_hash":"505d8d82c4ced7daddef7ed0b05ba12ecc664176887b938ef56c6af276f3b30c","block_index":310000,"block_time":310000000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(2,309999,'insert','blocks','{"block_hash":"505d8d82c4ced7daddef7ed0b05ba12ecc664176887b938ef56c6af276f3b30c","block_index":310000,"block_time":310000000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(3,310000,'insert','transactions','{"block_hash":"505d8d82c4ced7daddef7ed0b05ba12ecc664176887b938ef56c6af276f3b30c","block_index":310000,"block_time":310000000,"btc_amount":62000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":5625,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"5fde1c728d8d00aaa1b5f8dae963ceb4fd30c415eb0b8a982ba2d8d676fec0bb","tx_index":1}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(4,310000,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310000,"calling_function":"burn","event":"5fde1c728d8d00aaa1b5f8dae963ceb4fd30c415eb0b8a982ba2d8d676fec0bb","quantity":93000000000,"tx_index":1}',0,'CREDIT'); INSERT INTO messages VALUES(5,310000,'insert','burns','{"block_index":310000,"burned":62000000,"earned":93000000000,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","tx_hash":"5fde1c728d8d00aaa1b5f8dae963ceb4fd30c415eb0b8a982ba2d8d676fec0bb","tx_index":1}',0,'BURN'); INSERT INTO messages VALUES(6,310000,'parse','blocks','{"block_index":310000,"ledger_hash":"a16ae7423db132c887ae41cc33b7fa48a0cc6571d5a49e0963be25ec8a9769b4","messages_hash":"72fb35fd107eb57460c13d547f5963136bd2c13d3ded9fc7318f917f7b7bf3e4","txlist_hash":"b8fb4fb649dd315851564165b076d636e5a85e043d59c11877bdccced38f1b3e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(7,310001,'insert','blocks','{"block_hash":"3c9f6a9c6cac46a9273bd3db39ad775acd5bc546378ec2fb0587e06e112cc78e","block_index":310001,"block_time":310001000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(7,310000,'insert','blocks','{"block_hash":"3c9f6a9c6cac46a9273bd3db39ad775acd5bc546378ec2fb0587e06e112cc78e","block_index":310001,"block_time":310001000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(8,310001,'insert','transactions','{"block_hash":"3c9f6a9c6cac46a9273bd3db39ad775acd5bc546378ec2fb0587e06e112cc78e","block_index":310001,"block_time":310001000,"btc_amount":1000,"data":"0000000000000000000000010000000002faf080","destination":"2_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"eacd03b732d28924807d4f0cb1c1aa5720a78bf44d23660fb1658a5fd1b4e9a3","tx_index":2}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(9,310001,'insert','debits','{"action":"send","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310001,"event":"eacd03b732d28924807d4f0cb1c1aa5720a78bf44d23660fb1658a5fd1b4e9a3","quantity":50000000,"tx_index":2}',0,'DEBIT'); INSERT INTO messages VALUES(10,310001,'insert','credits','{"address":"2_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310001,"calling_function":"send","event":"eacd03b732d28924807d4f0cb1c1aa5720a78bf44d23660fb1658a5fd1b4e9a3","quantity":50000000,"tx_index":2}',0,'CREDIT'); INSERT INTO messages VALUES(11,310001,'insert','sends','{"asset":"XCP","block_index":310001,"destination":"2_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","quantity":50000000,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","tx_hash":"eacd03b732d28924807d4f0cb1c1aa5720a78bf44d23660fb1658a5fd1b4e9a3","tx_index":2}',0,'SEND'); INSERT INTO messages VALUES(12,310001,'parse','transactions','{"supported":true,"tx_hash":"eacd03b732d28924807d4f0cb1c1aa5720a78bf44d23660fb1658a5fd1b4e9a3","tx_index":2}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(13,310001,'parse','blocks','{"block_index":310001,"ledger_hash":"0cda5c4a26f0b23d5b948142dcd226b2718c57c9c6a481250128a7a1c8ad30dc","messages_hash":"aff0be14b9e6ace9e4d6333cf04061ef6447598c02d9b27fac1d939df31aa09c","txlist_hash":"1c009ff73127980e51ba6a7035bec5c2a9650b5a184da1d55c3d807fa658f8e7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(14,310002,'insert','blocks','{"block_hash":"fbb60f1144e1f7d4dc036a4a158a10ea6dea2ba6283a723342a49b8eb5cc9964","block_index":310002,"block_time":310002000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(14,310001,'insert','blocks','{"block_hash":"fbb60f1144e1f7d4dc036a4a158a10ea6dea2ba6283a723342a49b8eb5cc9964","block_index":310002,"block_time":310002000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(15,310002,'insert','transactions','{"block_hash":"fbb60f1144e1f7d4dc036a4a158a10ea6dea2ba6283a723342a49b8eb5cc9964","block_index":310002,"block_time":310002000,"btc_amount":0,"data":"0000000a00000000000000000000000002faf08000000000000000010000000005f5e100000a0000000000000000","destination":"","fee":1000000,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"025ca2c1784ca3c9389b9f227a5a04445908337e21e2ef9411c890e20aff61c0","tx_index":3}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(16,310002,'insert','orders','{"block_index":310002,"expiration":10,"expire_index":310012,"fee_provided":1000000,"fee_provided_remaining":1000000,"fee_required":0,"fee_required_remaining":0,"get_asset":"XCP","get_quantity":100000000,"get_remaining":100000000,"give_asset":"BTC","give_quantity":50000000,"give_remaining":50000000,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"open","tx_hash":"025ca2c1784ca3c9389b9f227a5a04445908337e21e2ef9411c890e20aff61c0","tx_index":3}',0,'OPEN_ORDER'); INSERT INTO messages VALUES(17,310002,'parse','transactions','{"supported":true,"tx_hash":"025ca2c1784ca3c9389b9f227a5a04445908337e21e2ef9411c890e20aff61c0","tx_index":3}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(18,310002,'parse','blocks','{"block_index":310002,"ledger_hash":"657c31576766cf1f8a699a14e6c7493498673f1948bea1be4f639247f4d52d53","messages_hash":"3f32659dd96a8649fd53b83ac36a4fc05acaac73db54738573b8642b7875f787","txlist_hash":"c674bb5077acb71ab19a6a4a8f779015846135e7b93a5006555fe1f4ad10c58e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(19,310003,'insert','blocks','{"block_hash":"d50825dcb32bcf6f69994d616eba18de7718d3d859497e80751b2cb67e333e8a","block_index":310003,"block_time":310003000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(19,310002,'insert','blocks','{"block_hash":"d50825dcb32bcf6f69994d616eba18de7718d3d859497e80751b2cb67e333e8a","block_index":310003,"block_time":310003000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(20,310003,'insert','transactions','{"block_hash":"d50825dcb32bcf6f69994d616eba18de7718d3d859497e80751b2cb67e333e8a","block_index":310003,"block_time":310003000,"btc_amount":0,"data":"0000000a00000000000000010000000006422c4000000000000000000000000002faf080000a00000000000dbba0","destination":"","fee":6800,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"c6881f7505bd7fe0742c2ce50490e21431705bf2df4368be43f423fa0c515aee","tx_index":4}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(21,310003,'insert','debits','{"action":"open order","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310003,"event":"c6881f7505bd7fe0742c2ce50490e21431705bf2df4368be43f423fa0c515aee","quantity":105000000,"tx_index":4}',0,'DEBIT'); INSERT INTO messages VALUES(22,310003,'insert','orders','{"block_index":310003,"expiration":10,"expire_index":310013,"fee_provided":6800,"fee_provided_remaining":6800,"fee_required":900000,"fee_required_remaining":900000,"get_asset":"BTC","get_quantity":50000000,"get_remaining":50000000,"give_asset":"XCP","give_quantity":105000000,"give_remaining":105000000,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"open","tx_hash":"c6881f7505bd7fe0742c2ce50490e21431705bf2df4368be43f423fa0c515aee","tx_index":4}',0,'OPEN_ORDER'); @@ -493,14 +493,14 @@ INSERT INTO messages VALUES(24,310003,'update','orders','{"fee_provided_remainin INSERT INTO messages VALUES(25,310003,'insert','order_matches','{"backward_asset":"XCP","backward_quantity":100000000,"block_index":310003,"fee_paid":857142,"forward_asset":"BTC","forward_quantity":50000000,"id":"025ca2c1784ca3c9389b9f227a5a04445908337e21e2ef9411c890e20aff61c0_c6881f7505bd7fe0742c2ce50490e21431705bf2df4368be43f423fa0c515aee","match_expire_index":310023,"status":"pending","tx0_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx0_block_index":310002,"tx0_expiration":10,"tx0_hash":"025ca2c1784ca3c9389b9f227a5a04445908337e21e2ef9411c890e20aff61c0","tx0_index":3,"tx1_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx1_block_index":310003,"tx1_expiration":10,"tx1_hash":"c6881f7505bd7fe0742c2ce50490e21431705bf2df4368be43f423fa0c515aee","tx1_index":4}',0,'ORDER_MATCH'); INSERT INTO messages VALUES(26,310003,'parse','transactions','{"supported":true,"tx_hash":"c6881f7505bd7fe0742c2ce50490e21431705bf2df4368be43f423fa0c515aee","tx_index":4}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(27,310003,'parse','blocks','{"block_index":310003,"ledger_hash":"e11e7eeb21ff539c27324c94a407dc6f04c739f3ed9841f9f661bf4441e4d847","messages_hash":"85ce063a964cd9bc7d1b5803ebd4a0f460cd48e5be820968cd47859025492a45","txlist_hash":"105a5c9915547d3ebfe733d284d6e812cada8e86a904510fc196e2f0af5b50a4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(28,310004,'insert','blocks','{"block_hash":"60cdc0ac0e3121ceaa2c3885f21f5789f49992ffef6e6ff99f7da80e36744615","block_index":310004,"block_time":310004000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(28,310003,'insert','blocks','{"block_hash":"60cdc0ac0e3121ceaa2c3885f21f5789f49992ffef6e6ff99f7da80e36744615","block_index":310004,"block_time":310004000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(29,310004,'insert','transactions','{"block_hash":"60cdc0ac0e3121ceaa2c3885f21f5789f49992ffef6e6ff99f7da80e36744615","block_index":310004,"block_time":310004000,"btc_amount":50000000,"data":"0000000b025ca2c1784ca3c9389b9f227a5a04445908337e21e2ef9411c890e20aff61c0c6881f7505bd7fe0742c2ce50490e21431705bf2df4368be43f423fa0c515aee","destination":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":9675,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"b0bf5693ba52a5c6bda34671ba065606bd02277f281e9aa19d25778e26c2f7e2","tx_index":5}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(30,310004,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310004,"calling_function":"btcpay","event":"b0bf5693ba52a5c6bda34671ba065606bd02277f281e9aa19d25778e26c2f7e2","quantity":100000000,"tx_index":5}',0,'CREDIT'); INSERT INTO messages VALUES(31,310004,'update','order_matches','{"id":"025ca2c1784ca3c9389b9f227a5a04445908337e21e2ef9411c890e20aff61c0_c6881f7505bd7fe0742c2ce50490e21431705bf2df4368be43f423fa0c515aee","order_match_id":"025ca2c1784ca3c9389b9f227a5a04445908337e21e2ef9411c890e20aff61c0_c6881f7505bd7fe0742c2ce50490e21431705bf2df4368be43f423fa0c515aee","status":"completed"}',0,'ORDER_MATCH_UPDATE'); INSERT INTO messages VALUES(32,310004,'insert','btcpays','{"block_index":310004,"btc_amount":50000000,"destination":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","order_match_id":"025ca2c1784ca3c9389b9f227a5a04445908337e21e2ef9411c890e20aff61c0_c6881f7505bd7fe0742c2ce50490e21431705bf2df4368be43f423fa0c515aee","source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","tx_hash":"b0bf5693ba52a5c6bda34671ba065606bd02277f281e9aa19d25778e26c2f7e2","tx_index":5}',0,'BTC_PAY'); INSERT INTO messages VALUES(33,310004,'parse','transactions','{"supported":true,"tx_hash":"b0bf5693ba52a5c6bda34671ba065606bd02277f281e9aa19d25778e26c2f7e2","tx_index":5}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(34,310004,'parse','blocks','{"block_index":310004,"ledger_hash":"2742a3e99eed62c09d9ecdaf501aa69b0d0b21fc092ca061448d5016957f35e0","messages_hash":"604c56317946ca59a8278817b3802ec346527d2d286d64e2f354179effbe87b0","txlist_hash":"369b47f51b512708e680edc5ba459b91e2a514f5a5c7cb8435670a4b3ed34dbe"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(35,310005,'insert','blocks','{"block_hash":"8005c2926b7ecc50376642bc661a49108b6dc62636463a5c492b123e2184cd9a","block_index":310005,"block_time":310005000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(35,310004,'insert','blocks','{"block_hash":"8005c2926b7ecc50376642bc661a49108b6dc62636463a5c492b123e2184cd9a","block_index":310005,"block_time":310005000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(36,310005,'insert','transactions','{"block_hash":"8005c2926b7ecc50376642bc661a49108b6dc62636463a5c492b123e2184cd9a","block_index":310005,"block_time":310005000,"btc_amount":0,"data":"000000140000000000004767000000003b9aca000100000000000000000000","destination":"","fee":6800,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"93599860b4a4a3b672a79c064812eb18d2e1b532613e08bd3ae1ee2a9979eae2","tx_index":6}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(37,310005,'insert','debits','{"action":"issuance fee","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310005,"event":"93599860b4a4a3b672a79c064812eb18d2e1b532613e08bd3ae1ee2a9979eae2","quantity":50000000,"tx_index":6}',0,'DEBIT'); INSERT INTO messages VALUES(38,310005,'insert','assets','{"asset_id":"18279","asset_longname":null,"asset_name":"BBBB","block_index":310005}',0,'ASSET_CREATION'); @@ -508,7 +508,7 @@ INSERT INTO messages VALUES(39,310005,'insert','issuances','{"asset":"BBBB","ass INSERT INTO messages VALUES(40,310005,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"BBBB","block_index":310005,"calling_function":"issuance","event":"93599860b4a4a3b672a79c064812eb18d2e1b532613e08bd3ae1ee2a9979eae2","quantity":1000000000,"tx_index":6}',0,'CREDIT'); INSERT INTO messages VALUES(41,310005,'parse','transactions','{"supported":true,"tx_hash":"93599860b4a4a3b672a79c064812eb18d2e1b532613e08bd3ae1ee2a9979eae2","tx_index":6}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(42,310005,'parse','blocks','{"block_index":310005,"ledger_hash":"49f526a56f21491c797e8e2559f722ded6f6990b1f69c55dc38791d8d30f4048","messages_hash":"7601e852ffd000c30484a083254b65a7d1d6c72df44ebf568915c7d8fcd72512","txlist_hash":"f0c2ddd7c39b14fc55d8518c65aa0811fe7807ebd1eebb4b66df8459f9e5352b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(43,310006,'insert','blocks','{"block_hash":"bdad69d1669eace68b9f246de113161099d4f83322e2acf402c42defef3af2bb","block_index":310006,"block_time":310006000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(43,310005,'insert','blocks','{"block_hash":"bdad69d1669eace68b9f246de113161099d4f83322e2acf402c42defef3af2bb","block_index":310006,"block_time":310006000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(44,310006,'insert','transactions','{"block_hash":"bdad69d1669eace68b9f246de113161099d4f83322e2acf402c42defef3af2bb","block_index":310006,"block_time":310006000,"btc_amount":0,"data":"00000014000000000000476800000000000186a00000000000000000000006666f6f626172","destination":"","fee":6800,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"3318c4b8b244fbc64f6894d28f7a1866db5671f04d2e4f5911d0fd688f804404","tx_index":7}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(45,310006,'insert','debits','{"action":"issuance fee","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310006,"event":"3318c4b8b244fbc64f6894d28f7a1866db5671f04d2e4f5911d0fd688f804404","quantity":50000000,"tx_index":7}',0,'DEBIT'); INSERT INTO messages VALUES(46,310006,'insert','assets','{"asset_id":"18280","asset_longname":null,"asset_name":"BBBC","block_index":310006}',0,'ASSET_CREATION'); @@ -516,21 +516,21 @@ INSERT INTO messages VALUES(47,310006,'insert','issuances','{"asset":"BBBC","ass INSERT INTO messages VALUES(48,310006,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"BBBC","block_index":310006,"calling_function":"issuance","event":"3318c4b8b244fbc64f6894d28f7a1866db5671f04d2e4f5911d0fd688f804404","quantity":100000,"tx_index":7}',0,'CREDIT'); INSERT INTO messages VALUES(49,310006,'parse','transactions','{"supported":true,"tx_hash":"3318c4b8b244fbc64f6894d28f7a1866db5671f04d2e4f5911d0fd688f804404","tx_index":7}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(50,310006,'parse','blocks','{"block_index":310006,"ledger_hash":"78787c4c9537fc4db5d1dc7d31d4fab6b445d57021aab1a38d4bd6a9404713c5","messages_hash":"914680b3a6ab891815c044f2d4a31422852b4125f1810e9d1179515560f1582f","txlist_hash":"877117b3bd10ddbe6e46f417845085a6bdecd86a4961b99c80e991b4c51e0f5e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(51,310007,'insert','blocks','{"block_hash":"10a642b96d60091d08234d17dfdecf3025eca41e4fc8e3bbe71a91c5a457cb4b","block_index":310007,"block_time":310007000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(51,310006,'insert','blocks','{"block_hash":"10a642b96d60091d08234d17dfdecf3025eca41e4fc8e3bbe71a91c5a457cb4b","block_index":310007,"block_time":310007000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(52,310007,'insert','transactions','{"block_hash":"10a642b96d60091d08234d17dfdecf3025eca41e4fc8e3bbe71a91c5a457cb4b","block_index":310007,"block_time":310007000,"btc_amount":1000,"data":"00000000000000000000476700000000003d0900","destination":"2_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"e43d2ab22a3a5fe1de032bdf042381fc1d6fc34794abc51a1b3db46ccf8cbdbe","tx_index":8}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(53,310007,'insert','debits','{"action":"send","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"BBBB","block_index":310007,"event":"e43d2ab22a3a5fe1de032bdf042381fc1d6fc34794abc51a1b3db46ccf8cbdbe","quantity":4000000,"tx_index":8}',0,'DEBIT'); INSERT INTO messages VALUES(54,310007,'insert','credits','{"address":"2_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"BBBB","block_index":310007,"calling_function":"send","event":"e43d2ab22a3a5fe1de032bdf042381fc1d6fc34794abc51a1b3db46ccf8cbdbe","quantity":4000000,"tx_index":8}',0,'CREDIT'); INSERT INTO messages VALUES(55,310007,'insert','sends','{"asset":"BBBB","block_index":310007,"destination":"2_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","quantity":4000000,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","tx_hash":"e43d2ab22a3a5fe1de032bdf042381fc1d6fc34794abc51a1b3db46ccf8cbdbe","tx_index":8}',0,'SEND'); INSERT INTO messages VALUES(56,310007,'parse','transactions','{"supported":true,"tx_hash":"e43d2ab22a3a5fe1de032bdf042381fc1d6fc34794abc51a1b3db46ccf8cbdbe","tx_index":8}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(57,310007,'parse','blocks','{"block_index":310007,"ledger_hash":"5cc2599b63007433426c220c59a777b5c37b1165595f2ba239c3ce578c8055ab","messages_hash":"854c4c587b4276b27f3fed020babe5e6b8ab8dd184a4d7ba1432ab6bfab2c6ea","txlist_hash":"702a5772ce8529995f7a66a244e8be495e3f7cbedb7b09f47e3d5aa941c7f4c1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(58,310008,'insert','blocks','{"block_hash":"47d0e3acbdc6916aeae95e987f9cfa16209b3df1e67bb38143b3422b32322c33","block_index":310008,"block_time":310008000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(58,310007,'insert','blocks','{"block_hash":"47d0e3acbdc6916aeae95e987f9cfa16209b3df1e67bb38143b3422b32322c33","block_index":310008,"block_time":310008000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(59,310008,'insert','transactions','{"block_hash":"47d0e3acbdc6916aeae95e987f9cfa16209b3df1e67bb38143b3422b32322c33","block_index":310008,"block_time":310008000,"btc_amount":1000,"data":"000000000000000000004768000000000000020e","destination":"2_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"7b48b32b5373757d0bfa50358184117ca01b5ad564ca4338ecb021ae726a19c9","tx_index":9}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(60,310008,'insert','debits','{"action":"send","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"BBBC","block_index":310008,"event":"7b48b32b5373757d0bfa50358184117ca01b5ad564ca4338ecb021ae726a19c9","quantity":526,"tx_index":9}',0,'DEBIT'); INSERT INTO messages VALUES(61,310008,'insert','credits','{"address":"2_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"BBBC","block_index":310008,"calling_function":"send","event":"7b48b32b5373757d0bfa50358184117ca01b5ad564ca4338ecb021ae726a19c9","quantity":526,"tx_index":9}',0,'CREDIT'); INSERT INTO messages VALUES(62,310008,'insert','sends','{"asset":"BBBC","block_index":310008,"destination":"2_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","quantity":526,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","tx_hash":"7b48b32b5373757d0bfa50358184117ca01b5ad564ca4338ecb021ae726a19c9","tx_index":9}',0,'SEND'); INSERT INTO messages VALUES(63,310008,'parse','transactions','{"supported":true,"tx_hash":"7b48b32b5373757d0bfa50358184117ca01b5ad564ca4338ecb021ae726a19c9","tx_index":9}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(64,310008,'parse','blocks','{"block_index":310008,"ledger_hash":"9550db622e679ff3d63d814f9ffa743d57eb12491b213ef6474617a6c738c3fa","messages_hash":"345a10c31ef469648159999ef16856316259345971b2eec607a5ce57ba556676","txlist_hash":"6c536f7ae10567cbd91945e3e958640e6c65408f83e4a1d93e705950ba39de1b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(65,310009,'insert','blocks','{"block_hash":"4d474992b141620bf3753863db7ee5e8af26cadfbba27725911f44fa657bc1c0","block_index":310009,"block_time":310009000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(65,310008,'insert','blocks','{"block_hash":"4d474992b141620bf3753863db7ee5e8af26cadfbba27725911f44fa657bc1c0","block_index":310009,"block_time":310009000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(66,310009,'insert','transactions','{"block_hash":"4d474992b141620bf3753863db7ee5e8af26cadfbba27725911f44fa657bc1c0","block_index":310009,"block_time":310009000,"btc_amount":0,"data":"00000032000000000000025800000000000047670000000000000001","destination":"","fee":6800,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"cbc73bb03bae7cbaa0e88c9c16cb78fa6f315b9a6383f0f7efb63d0fdd831a81","tx_index":10}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(67,310009,'insert','debits','{"action":"dividend","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310009,"event":"cbc73bb03bae7cbaa0e88c9c16cb78fa6f315b9a6383f0f7efb63d0fdd831a81","quantity":24,"tx_index":10}',0,'DEBIT'); INSERT INTO messages VALUES(68,310009,'insert','debits','{"action":"dividend fee","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310009,"event":"cbc73bb03bae7cbaa0e88c9c16cb78fa6f315b9a6383f0f7efb63d0fdd831a81","quantity":20000,"tx_index":10}',0,'DEBIT'); @@ -538,7 +538,7 @@ INSERT INTO messages VALUES(69,310009,'insert','credits','{"address":"2_mnfAHmdd INSERT INTO messages VALUES(70,310009,'insert','dividends','{"asset":"BBBB","block_index":310009,"dividend_asset":"XCP","fee_paid":20000,"quantity_per_unit":600,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","tx_hash":"cbc73bb03bae7cbaa0e88c9c16cb78fa6f315b9a6383f0f7efb63d0fdd831a81","tx_index":10}',0,'ASSET_DIVIDEND'); INSERT INTO messages VALUES(71,310009,'parse','transactions','{"supported":true,"tx_hash":"cbc73bb03bae7cbaa0e88c9c16cb78fa6f315b9a6383f0f7efb63d0fdd831a81","tx_index":10}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(72,310009,'parse','blocks','{"block_index":310009,"ledger_hash":"08c005dd5bae7f21ca27803d75318ac4b968c6d4dd2c275ef284c03fea43b189","messages_hash":"5ab18e8b7b08bdb2aabef0fb95b3a8d431438f98527f224b19863e1a18e7671b","txlist_hash":"8f8156aca3441754221fbf9cc21b0e7d877a533e00f63950be3f95d0a9305433"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(73,310010,'insert','blocks','{"block_hash":"a58162dff81a32e6a29b075be759dbb9fa9b8b65303e69c78fb4d7b0acc37042","block_index":310010,"block_time":310010000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(73,310009,'insert','blocks','{"block_hash":"a58162dff81a32e6a29b075be759dbb9fa9b8b65303e69c78fb4d7b0acc37042","block_index":310010,"block_time":310010000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(74,310010,'insert','transactions','{"block_hash":"a58162dff81a32e6a29b075be759dbb9fa9b8b65303e69c78fb4d7b0acc37042","block_index":310010,"block_time":310010000,"btc_amount":0,"data":"00000032000000000000032000000000000047680000000000000001","destination":"","fee":6800,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"c59e9803933740537b59928d19d2b65812e6f2b8d1ac811d9262353a19327b97","tx_index":11}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(75,310010,'insert','debits','{"action":"dividend","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310010,"event":"c59e9803933740537b59928d19d2b65812e6f2b8d1ac811d9262353a19327b97","quantity":420800,"tx_index":11}',0,'DEBIT'); INSERT INTO messages VALUES(76,310010,'insert','debits','{"action":"dividend fee","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310010,"event":"c59e9803933740537b59928d19d2b65812e6f2b8d1ac811d9262353a19327b97","quantity":20000,"tx_index":11}',0,'DEBIT'); @@ -546,18 +546,18 @@ INSERT INTO messages VALUES(77,310010,'insert','credits','{"address":"2_mnfAHmdd INSERT INTO messages VALUES(78,310010,'insert','dividends','{"asset":"BBBC","block_index":310010,"dividend_asset":"XCP","fee_paid":20000,"quantity_per_unit":800,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","tx_hash":"c59e9803933740537b59928d19d2b65812e6f2b8d1ac811d9262353a19327b97","tx_index":11}',0,'ASSET_DIVIDEND'); INSERT INTO messages VALUES(79,310010,'parse','transactions','{"supported":true,"tx_hash":"c59e9803933740537b59928d19d2b65812e6f2b8d1ac811d9262353a19327b97","tx_index":11}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(80,310010,'parse','blocks','{"block_index":310010,"ledger_hash":"07f48634d06e6be1d800e068cd213a648517fe167ed89c355d9db966897ed7b0","messages_hash":"0546e010b64a8b52b22b5806d642b98afa94cd8ba58a7b79fd5468c7d3967e2e","txlist_hash":"c5956a9750e786639ceb4a252a219afef6abb753037888c90ebf17a5c5db079f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(81,310011,'insert','blocks','{"block_hash":"8042cc2ef293fd73d050f283fbd075c79dd4c49fdcca054dc0714fc3a50dc1bb","block_index":310011,"block_time":310011000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(81,310010,'insert','blocks','{"block_hash":"8042cc2ef293fd73d050f283fbd075c79dd4c49fdcca054dc0714fc3a50dc1bb","block_index":310011,"block_time":310011000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(82,310011,'insert','transactions','{"block_hash":"8042cc2ef293fd73d050f283fbd075c79dd4c49fdcca054dc0714fc3a50dc1bb","block_index":310011,"block_time":310011000,"btc_amount":0,"data":"0000001e52bb3300405900000000000005f5e0ff09556e69742054657374","destination":"","fee":6800,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"0a15cc28e58f28a690051e66e6c50ecb68826077d59b75d05590a1db453d9d61","tx_index":12}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(83,310011,'insert','broadcasts','{"block_index":310011,"fee_fraction_int":99999999,"locked":false,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","text":"Unit Test","timestamp":1388000000,"tx_hash":"0a15cc28e58f28a690051e66e6c50ecb68826077d59b75d05590a1db453d9d61","tx_index":12,"value":100.0}',0,'BROADCAST'); INSERT INTO messages VALUES(84,310011,'parse','transactions','{"supported":true,"tx_hash":"0a15cc28e58f28a690051e66e6c50ecb68826077d59b75d05590a1db453d9d61","tx_index":12}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(85,310011,'parse','blocks','{"block_index":310011,"ledger_hash":"8d0be0b3731bdd0d611e81b48efa6c706a983990f31bc563d57893f705b73aa7","messages_hash":"aa5dc6df82251757a41241459af772cbf946bceda20e4ab304e9c0dc1d54b729","txlist_hash":"219d47523246e5c4ffa99ae9c29bdcfdf9f419bff3d21da76fdc91cfe99fc28d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(86,310012,'insert','blocks','{"block_hash":"cdba329019d93a67b31b79d05f76ce1b7791d430ea0d6c1c2168fe78d2f67677","block_index":310012,"block_time":310012000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(86,310011,'insert','blocks','{"block_hash":"cdba329019d93a67b31b79d05f76ce1b7791d430ea0d6c1c2168fe78d2f67677","block_index":310012,"block_time":310012000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(87,310012,'insert','transactions','{"block_hash":"cdba329019d93a67b31b79d05f76ce1b7791d430ea0d6c1c2168fe78d2f67677","block_index":310012,"block_time":310012000,"btc_amount":1000,"data":"00000028000052bb33640000000002faf08000000000017d7840000000000000000000003b100000000a","destination":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"c36b65e3d4c105739d5c8cef470c0878d2e8da138416e09cb499edcec343c0b8","tx_index":13}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(88,310012,'insert','debits','{"action":"bet","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310012,"event":"c36b65e3d4c105739d5c8cef470c0878d2e8da138416e09cb499edcec343c0b8","quantity":50000000,"tx_index":13}',0,'DEBIT'); INSERT INTO messages VALUES(89,310012,'insert','bets','{"bet_type":0,"block_index":310012,"counterwager_quantity":25000000,"counterwager_remaining":25000000,"deadline":1388000100,"expiration":10,"expire_index":310022,"fee_fraction_int":99999999.0,"feed_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","leverage":15120,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"open","target_value":0.0,"tx_hash":"c36b65e3d4c105739d5c8cef470c0878d2e8da138416e09cb499edcec343c0b8","tx_index":13,"wager_quantity":50000000,"wager_remaining":50000000}',0,'OPEN_BET'); INSERT INTO messages VALUES(90,310012,'parse','transactions','{"supported":true,"tx_hash":"c36b65e3d4c105739d5c8cef470c0878d2e8da138416e09cb499edcec343c0b8","tx_index":13}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(91,310012,'parse','blocks','{"block_index":310012,"ledger_hash":"e3de05180536ad40eb9007f19ccb819fee0586cb9e7c414dc560e506ae5c09b7","messages_hash":"5322bd28e42ff13238d6bad863782392d07d3c529139d25b5a7859f2065e25ff","txlist_hash":"ce6072bd562a52051fc530ec552aa343e4980a1b236f1cb8318c415d3eb2e851"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(92,310013,'insert','blocks','{"block_hash":"0425e5e832e4286757dc0228cd505b8d572081007218abd3a0983a3bcd502a61","block_index":310013,"block_time":310013000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(92,310012,'insert','blocks','{"block_hash":"0425e5e832e4286757dc0228cd505b8d572081007218abd3a0983a3bcd502a61","block_index":310013,"block_time":310013000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(93,310013,'insert','transactions','{"block_hash":"0425e5e832e4286757dc0228cd505b8d572081007218abd3a0983a3bcd502a61","block_index":310013,"block_time":310013000,"btc_amount":1000,"data":"00000028000152bb336400000000017d78400000000002793d60000000000000000000003b100000000a","destination":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"23f77ca0034c19aa841413edfde7f4a3dca8d8ef582ce939dfc2e170c7c811a1","tx_index":14}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(94,310013,'update','orders','{"status":"expired","tx_hash":"025ca2c1784ca3c9389b9f227a5a04445908337e21e2ef9411c890e20aff61c0"}',0,'ORDER_UPDATE'); INSERT INTO messages VALUES(95,310013,'insert','order_expirations','{"block_index":310013,"order_hash":"025ca2c1784ca3c9389b9f227a5a04445908337e21e2ef9411c890e20aff61c0","source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2"}',0,'ORDER_EXPIRATION'); @@ -566,10 +566,10 @@ INSERT INTO messages VALUES(97,310013,'insert','bets','{"bet_type":1,"block_inde INSERT INTO messages VALUES(98,310013,'update','bets','{"counterwager_remaining":4250000,"status":"open","tx_hash":"c36b65e3d4c105739d5c8cef470c0878d2e8da138416e09cb499edcec343c0b8","wager_remaining":8500000}',0,'BET_UPDATE'); INSERT INTO messages VALUES(99,310013,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310013,"calling_function":"filled","event":"23f77ca0034c19aa841413edfde7f4a3dca8d8ef582ce939dfc2e170c7c811a1","quantity":4250000,"tx_index":14}',0,'CREDIT'); INSERT INTO messages VALUES(100,310013,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"23f77ca0034c19aa841413edfde7f4a3dca8d8ef582ce939dfc2e170c7c811a1","wager_remaining":4250000}',0,'BET_UPDATE'); -INSERT INTO messages VALUES(101,310012,'insert','bet_matches','{"backward_quantity":20750000,"block_index":310012,"deadline":1388000100,"fee_fraction_int":99999999,"feed_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","forward_quantity":41500000,"id":"c36b65e3d4c105739d5c8cef470c0878d2e8da138416e09cb499edcec343c0b8_23f77ca0034c19aa841413edfde7f4a3dca8d8ef582ce939dfc2e170c7c811a1","initial_value":100.0,"leverage":15120,"match_expire_index":310022,"status":"pending","target_value":0.0,"tx0_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx0_bet_type":0,"tx0_block_index":310012,"tx0_expiration":10,"tx0_hash":"c36b65e3d4c105739d5c8cef470c0878d2e8da138416e09cb499edcec343c0b8","tx0_index":13,"tx1_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx1_bet_type":1,"tx1_block_index":310013,"tx1_expiration":10,"tx1_hash":"23f77ca0034c19aa841413edfde7f4a3dca8d8ef582ce939dfc2e170c7c811a1","tx1_index":14}',0,'BET_MATCH'); +INSERT INTO messages VALUES(101,310013,'insert','bet_matches','{"backward_quantity":20750000,"block_index":310012,"deadline":1388000100,"fee_fraction_int":99999999,"feed_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","forward_quantity":41500000,"id":"c36b65e3d4c105739d5c8cef470c0878d2e8da138416e09cb499edcec343c0b8_23f77ca0034c19aa841413edfde7f4a3dca8d8ef582ce939dfc2e170c7c811a1","initial_value":100.0,"leverage":15120,"match_expire_index":310022,"status":"pending","target_value":0.0,"tx0_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx0_bet_type":0,"tx0_block_index":310012,"tx0_expiration":10,"tx0_hash":"c36b65e3d4c105739d5c8cef470c0878d2e8da138416e09cb499edcec343c0b8","tx0_index":13,"tx1_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx1_bet_type":1,"tx1_block_index":310013,"tx1_expiration":10,"tx1_hash":"23f77ca0034c19aa841413edfde7f4a3dca8d8ef582ce939dfc2e170c7c811a1","tx1_index":14}',0,'BET_MATCH'); INSERT INTO messages VALUES(102,310013,'parse','transactions','{"supported":true,"tx_hash":"23f77ca0034c19aa841413edfde7f4a3dca8d8ef582ce939dfc2e170c7c811a1","tx_index":14}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(103,310013,'parse','blocks','{"block_index":310013,"ledger_hash":"e521556db091cc726fb38cbebfd10923e37dab652c51dca73a646fe5bd81bb96","messages_hash":"53dd35d7fcb3cb00c464d2e5cf8d658b0de66fbdb3c644d862477ec1cf9827ea","txlist_hash":"1a1e24f2debcd4b5b1e350a71823758d3114335ac831367bc91c9e487b94c65c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(104,310014,'insert','blocks','{"block_hash":"85b28d413ebda2968ed82ae53643677338650151b997ed1e4656158005b9f65f","block_index":310014,"block_time":310014000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(104,310013,'insert','blocks','{"block_hash":"85b28d413ebda2968ed82ae53643677338650151b997ed1e4656158005b9f65f","block_index":310014,"block_time":310014000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(105,310014,'insert','transactions','{"block_hash":"85b28d413ebda2968ed82ae53643677338650151b997ed1e4656158005b9f65f","block_index":310014,"block_time":310014000,"btc_amount":1000,"data":"00000028000052bb33640000000008f0d1800000000014dc93800000000000000000000013b00000000a","destination":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"a5a1927a83521144a5aa751f61065b530c9447c5b2c35e35064de32dae9573fd","tx_index":15}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(106,310014,'update','orders','{"status":"expired","tx_hash":"c6881f7505bd7fe0742c2ce50490e21431705bf2df4368be43f423fa0c515aee"}',0,'ORDER_UPDATE'); INSERT INTO messages VALUES(107,310014,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310014,"calling_function":"cancel order","event":"c6881f7505bd7fe0742c2ce50490e21431705bf2df4368be43f423fa0c515aee","quantity":5000000,"tx_index":0}',0,'CREDIT'); @@ -578,7 +578,7 @@ INSERT INTO messages VALUES(109,310014,'insert','debits','{"action":"bet","addre INSERT INTO messages VALUES(110,310014,'insert','bets','{"bet_type":0,"block_index":310014,"counterwager_quantity":350000000,"counterwager_remaining":350000000,"deadline":1388000100,"expiration":10,"expire_index":310024,"fee_fraction_int":99999999.0,"feed_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","leverage":5040,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"open","target_value":0.0,"tx_hash":"a5a1927a83521144a5aa751f61065b530c9447c5b2c35e35064de32dae9573fd","tx_index":15,"wager_quantity":150000000,"wager_remaining":150000000}',0,'OPEN_BET'); INSERT INTO messages VALUES(111,310014,'parse','transactions','{"supported":true,"tx_hash":"a5a1927a83521144a5aa751f61065b530c9447c5b2c35e35064de32dae9573fd","tx_index":15}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(112,310014,'parse','blocks','{"block_index":310014,"ledger_hash":"1cd6d92fbbca9266135a35f20a4328d510c8d209ba6161dc8c9e9bfa69032c57","messages_hash":"2b42fe416ff6b68adcff8c01b8ad5e9e664617e5982215fa404edea66c7ef951","txlist_hash":"80ee1bd354b8e1aa1c2f57926fbd36c0d9e2dbd3f77d8f2e43d59b29bd8175a6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(113,310015,'insert','blocks','{"block_hash":"4cf77d688f18f0c68c077db882f62e49f31859dfa6144372457cd73b29223922","block_index":310015,"block_time":310015000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(113,310014,'insert','blocks','{"block_hash":"4cf77d688f18f0c68c077db882f62e49f31859dfa6144372457cd73b29223922","block_index":310015,"block_time":310015000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(114,310015,'insert','transactions','{"block_hash":"4cf77d688f18f0c68c077db882f62e49f31859dfa6144372457cd73b29223922","block_index":310015,"block_time":310015000,"btc_amount":1000,"data":"00000028000152bb33640000000014dc93800000000008f0d1800000000000000000000013b00000000a","destination":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"6aa4c5853aa9971d13c0291c4e91ee5cddd506521942377aca5c3b1a48780c75","tx_index":16}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(115,310015,'insert','debits','{"action":"bet","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310015,"event":"6aa4c5853aa9971d13c0291c4e91ee5cddd506521942377aca5c3b1a48780c75","quantity":350000000,"tx_index":16}',0,'DEBIT'); INSERT INTO messages VALUES(116,310015,'insert','bets','{"bet_type":1,"block_index":310015,"counterwager_quantity":150000000,"counterwager_remaining":150000000,"deadline":1388000100,"expiration":10,"expire_index":310025,"fee_fraction_int":99999999.0,"feed_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","leverage":5040,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"open","target_value":0.0,"tx_hash":"6aa4c5853aa9971d13c0291c4e91ee5cddd506521942377aca5c3b1a48780c75","tx_index":16,"wager_quantity":350000000,"wager_remaining":350000000}',0,'OPEN_BET'); @@ -586,16 +586,16 @@ INSERT INTO messages VALUES(117,310015,'insert','credits','{"address":"2_mn6q3dS INSERT INTO messages VALUES(118,310015,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"a5a1927a83521144a5aa751f61065b530c9447c5b2c35e35064de32dae9573fd","wager_remaining":0}',0,'BET_UPDATE'); INSERT INTO messages VALUES(119,310015,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310015,"calling_function":"filled","event":"6aa4c5853aa9971d13c0291c4e91ee5cddd506521942377aca5c3b1a48780c75","quantity":0,"tx_index":16}',0,'CREDIT'); INSERT INTO messages VALUES(120,310015,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"6aa4c5853aa9971d13c0291c4e91ee5cddd506521942377aca5c3b1a48780c75","wager_remaining":0}',0,'BET_UPDATE'); -INSERT INTO messages VALUES(121,310014,'insert','bet_matches','{"backward_quantity":350000000,"block_index":310014,"deadline":1388000100,"fee_fraction_int":99999999,"feed_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","forward_quantity":150000000,"id":"a5a1927a83521144a5aa751f61065b530c9447c5b2c35e35064de32dae9573fd_6aa4c5853aa9971d13c0291c4e91ee5cddd506521942377aca5c3b1a48780c75","initial_value":100.0,"leverage":5040,"match_expire_index":310024,"status":"pending","target_value":0.0,"tx0_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx0_bet_type":0,"tx0_block_index":310014,"tx0_expiration":10,"tx0_hash":"a5a1927a83521144a5aa751f61065b530c9447c5b2c35e35064de32dae9573fd","tx0_index":15,"tx1_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx1_bet_type":1,"tx1_block_index":310015,"tx1_expiration":10,"tx1_hash":"6aa4c5853aa9971d13c0291c4e91ee5cddd506521942377aca5c3b1a48780c75","tx1_index":16}',0,'BET_MATCH'); +INSERT INTO messages VALUES(121,310015,'insert','bet_matches','{"backward_quantity":350000000,"block_index":310014,"deadline":1388000100,"fee_fraction_int":99999999,"feed_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","forward_quantity":150000000,"id":"a5a1927a83521144a5aa751f61065b530c9447c5b2c35e35064de32dae9573fd_6aa4c5853aa9971d13c0291c4e91ee5cddd506521942377aca5c3b1a48780c75","initial_value":100.0,"leverage":5040,"match_expire_index":310024,"status":"pending","target_value":0.0,"tx0_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx0_bet_type":0,"tx0_block_index":310014,"tx0_expiration":10,"tx0_hash":"a5a1927a83521144a5aa751f61065b530c9447c5b2c35e35064de32dae9573fd","tx0_index":15,"tx1_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx1_bet_type":1,"tx1_block_index":310015,"tx1_expiration":10,"tx1_hash":"6aa4c5853aa9971d13c0291c4e91ee5cddd506521942377aca5c3b1a48780c75","tx1_index":16}',0,'BET_MATCH'); INSERT INTO messages VALUES(122,310015,'parse','transactions','{"supported":true,"tx_hash":"6aa4c5853aa9971d13c0291c4e91ee5cddd506521942377aca5c3b1a48780c75","tx_index":16}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(123,310015,'parse','blocks','{"block_index":310015,"ledger_hash":"62759ea6d5070225bd30253a42b6c68fdaf2c4165b1b221b8e7bdddeb26e9737","messages_hash":"95e6788f7af884c71f7e813de2665e2beddc6faee99015402ec9e8498edf6074","txlist_hash":"30a124b4460d985c715c7bbd85cfbe972a5caf457e45844e0a54daa258ca3376"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(124,310016,'insert','blocks','{"block_hash":"99dc7d2627efb4e5e618a53b9898b4ca39c70e98fe9bf39f68a6c980f5b64ef9","block_index":310016,"block_time":310016000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(124,310015,'insert','blocks','{"block_hash":"99dc7d2627efb4e5e618a53b9898b4ca39c70e98fe9bf39f68a6c980f5b64ef9","block_index":310016,"block_time":310016000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(125,310016,'insert','transactions','{"block_hash":"99dc7d2627efb4e5e618a53b9898b4ca39c70e98fe9bf39f68a6c980f5b64ef9","block_index":310016,"block_time":310016000,"btc_amount":1000,"data":"00000028000252bb33c8000000002cb417800000000026be36803ff0000000000000000013b00000000a","destination":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"91cea72c920a13cc450d14c92a81a318462300670308d6b1eb344ac06a72eda1","tx_index":17}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(126,310016,'insert','debits','{"action":"bet","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310016,"event":"91cea72c920a13cc450d14c92a81a318462300670308d6b1eb344ac06a72eda1","quantity":750000000,"tx_index":17}',0,'DEBIT'); INSERT INTO messages VALUES(127,310016,'insert','bets','{"bet_type":2,"block_index":310016,"counterwager_quantity":650000000,"counterwager_remaining":650000000,"deadline":1388000200,"expiration":10,"expire_index":310026,"fee_fraction_int":99999999.0,"feed_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","leverage":5040,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"open","target_value":1.0,"tx_hash":"91cea72c920a13cc450d14c92a81a318462300670308d6b1eb344ac06a72eda1","tx_index":17,"wager_quantity":750000000,"wager_remaining":750000000}',0,'OPEN_BET'); INSERT INTO messages VALUES(128,310016,'parse','transactions','{"supported":true,"tx_hash":"91cea72c920a13cc450d14c92a81a318462300670308d6b1eb344ac06a72eda1","tx_index":17}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(129,310016,'parse','blocks','{"block_index":310016,"ledger_hash":"f9fc0dd4d98ac5e06e4f9673cf5678f9fc264cda23172e24427b833331b73c33","messages_hash":"7fd6480d829327edbce5d160651ffe3490f980d0e5f2b0ff6d5328f7e29e75d4","txlist_hash":"cdbbf3665287df62a1660198e00049d06f649f37c49cb76e9fb1eab12960e66c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(130,310017,'insert','blocks','{"block_hash":"8a4fedfbf734b91a5c5761a7bcb3908ea57169777a7018148c51ff611970e4a3","block_index":310017,"block_time":310017000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(130,310016,'insert','blocks','{"block_hash":"8a4fedfbf734b91a5c5761a7bcb3908ea57169777a7018148c51ff611970e4a3","block_index":310017,"block_time":310017000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(131,310017,'insert','transactions','{"block_hash":"8a4fedfbf734b91a5c5761a7bcb3908ea57169777a7018148c51ff611970e4a3","block_index":310017,"block_time":310017000,"btc_amount":1000,"data":"00000028000352bb33c80000000026be3680000000002cb417803ff0000000000000000013b00000000a","destination":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"c345c2e6d9899c7729a0ca2ef13fab71ca5808854fb6be62e3b3dcd9225d1c4a","tx_index":18}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(132,310017,'insert','debits','{"action":"bet","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310017,"event":"c345c2e6d9899c7729a0ca2ef13fab71ca5808854fb6be62e3b3dcd9225d1c4a","quantity":650000000,"tx_index":18}',0,'DEBIT'); INSERT INTO messages VALUES(133,310017,'insert','bets','{"bet_type":3,"block_index":310017,"counterwager_quantity":750000000,"counterwager_remaining":750000000,"deadline":1388000200,"expiration":10,"expire_index":310027,"fee_fraction_int":99999999.0,"feed_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","leverage":5040,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"open","target_value":1.0,"tx_hash":"c345c2e6d9899c7729a0ca2ef13fab71ca5808854fb6be62e3b3dcd9225d1c4a","tx_index":18,"wager_quantity":650000000,"wager_remaining":650000000}',0,'OPEN_BET'); @@ -603,10 +603,10 @@ INSERT INTO messages VALUES(134,310017,'insert','credits','{"address":"2_mn6q3dS INSERT INTO messages VALUES(135,310017,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"91cea72c920a13cc450d14c92a81a318462300670308d6b1eb344ac06a72eda1","wager_remaining":0}',0,'BET_UPDATE'); INSERT INTO messages VALUES(136,310017,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310017,"calling_function":"filled","event":"c345c2e6d9899c7729a0ca2ef13fab71ca5808854fb6be62e3b3dcd9225d1c4a","quantity":0,"tx_index":18}',0,'CREDIT'); INSERT INTO messages VALUES(137,310017,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"c345c2e6d9899c7729a0ca2ef13fab71ca5808854fb6be62e3b3dcd9225d1c4a","wager_remaining":0}',0,'BET_UPDATE'); -INSERT INTO messages VALUES(138,310016,'insert','bet_matches','{"backward_quantity":650000000,"block_index":310016,"deadline":1388000200,"fee_fraction_int":99999999,"feed_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","forward_quantity":750000000,"id":"91cea72c920a13cc450d14c92a81a318462300670308d6b1eb344ac06a72eda1_c345c2e6d9899c7729a0ca2ef13fab71ca5808854fb6be62e3b3dcd9225d1c4a","initial_value":100.0,"leverage":5040,"match_expire_index":310026,"status":"pending","target_value":1.0,"tx0_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx0_bet_type":2,"tx0_block_index":310016,"tx0_expiration":10,"tx0_hash":"91cea72c920a13cc450d14c92a81a318462300670308d6b1eb344ac06a72eda1","tx0_index":17,"tx1_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx1_bet_type":3,"tx1_block_index":310017,"tx1_expiration":10,"tx1_hash":"c345c2e6d9899c7729a0ca2ef13fab71ca5808854fb6be62e3b3dcd9225d1c4a","tx1_index":18}',0,'BET_MATCH'); +INSERT INTO messages VALUES(138,310017,'insert','bet_matches','{"backward_quantity":650000000,"block_index":310016,"deadline":1388000200,"fee_fraction_int":99999999,"feed_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","forward_quantity":750000000,"id":"91cea72c920a13cc450d14c92a81a318462300670308d6b1eb344ac06a72eda1_c345c2e6d9899c7729a0ca2ef13fab71ca5808854fb6be62e3b3dcd9225d1c4a","initial_value":100.0,"leverage":5040,"match_expire_index":310026,"status":"pending","target_value":1.0,"tx0_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx0_bet_type":2,"tx0_block_index":310016,"tx0_expiration":10,"tx0_hash":"91cea72c920a13cc450d14c92a81a318462300670308d6b1eb344ac06a72eda1","tx0_index":17,"tx1_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","tx1_bet_type":3,"tx1_block_index":310017,"tx1_expiration":10,"tx1_hash":"c345c2e6d9899c7729a0ca2ef13fab71ca5808854fb6be62e3b3dcd9225d1c4a","tx1_index":18}',0,'BET_MATCH'); INSERT INTO messages VALUES(139,310017,'parse','transactions','{"supported":true,"tx_hash":"c345c2e6d9899c7729a0ca2ef13fab71ca5808854fb6be62e3b3dcd9225d1c4a","tx_index":18}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(140,310017,'parse','blocks','{"block_index":310017,"ledger_hash":"4a355b8e80a902030f384f58700d05da9a6efaae3f3ce0b1a056dc1250d9ec63","messages_hash":"4326f831920bfbfc580e6dbc0b1c8c012c7b46f95f2a57e8cfba5128a8ec7d31","txlist_hash":"355616d4b8b8408ea7061e787ca35918b6d0417895a2a2ff224d207f0f76e02a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(141,310018,'insert','blocks','{"block_hash":"35c06f9e3de39e4e56ceb1d1a22008f52361c50dd0d251c0acbe2e3c2dba8ed3","block_index":310018,"block_time":310018000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(141,310017,'insert','blocks','{"block_hash":"35c06f9e3de39e4e56ceb1d1a22008f52361c50dd0d251c0acbe2e3c2dba8ed3","block_index":310018,"block_time":310018000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(142,310018,'insert','transactions','{"block_hash":"35c06f9e3de39e4e56ceb1d1a22008f52361c50dd0d251c0acbe2e3c2dba8ed3","block_index":310018,"block_time":310018000,"btc_amount":0,"data":"0000001e52bb33324058f7256ffc115e004c4b4009556e69742054657374","destination":"","fee":6800,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"c473921b7c5d877de55ef38b39935e149003d6fec701bea0c8b66b77255942d4","tx_index":19}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(143,310018,'insert','broadcasts','{"block_index":310018,"fee_fraction_int":5000000,"locked":false,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","text":"Unit Test","timestamp":1388000050,"tx_hash":"c473921b7c5d877de55ef38b39935e149003d6fec701bea0c8b66b77255942d4","tx_index":19,"value":99.86166}',0,'BROADCAST'); INSERT INTO messages VALUES(144,310018,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310018,"calling_function":"bet settled: liquidated for bear","event":"c473921b7c5d877de55ef38b39935e149003d6fec701bea0c8b66b77255942d4","quantity":59137500,"tx_index":19}',0,'CREDIT'); @@ -615,7 +615,7 @@ INSERT INTO messages VALUES(146,310018,'insert','bet_match_resolutions','{"bear_ INSERT INTO messages VALUES(147,310018,'update','bet_matches','{"id":"c36b65e3d4c105739d5c8cef470c0878d2e8da138416e09cb499edcec343c0b8_23f77ca0034c19aa841413edfde7f4a3dca8d8ef582ce939dfc2e170c7c811a1","status":"settled: liquidated for bear"}',0,'BET_MATCH_UPDATE'); INSERT INTO messages VALUES(148,310018,'parse','transactions','{"supported":true,"tx_hash":"c473921b7c5d877de55ef38b39935e149003d6fec701bea0c8b66b77255942d4","tx_index":19}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(149,310018,'parse','blocks','{"block_index":310018,"ledger_hash":"57aee8f9c9b63342ceeea3a3162998e9034a3d624d6d85b19782943ce170cef5","messages_hash":"1933395b09d7e4284e5565db7975d03a7b752fa50af48573e1ef8bd7aaf91964","txlist_hash":"7987b849a43c706d33e421d45e99ca6593c9aa8c69079522888f746a8d4ff748"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(150,310019,'insert','blocks','{"block_hash":"114affa0c4f34b1ebf8e2778c9477641f60b5b9e8a69052158041d4c41893294","block_index":310019,"block_time":310019000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(150,310018,'insert','blocks','{"block_hash":"114affa0c4f34b1ebf8e2778c9477641f60b5b9e8a69052158041d4c41893294","block_index":310019,"block_time":310019000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(151,310019,'insert','transactions','{"block_hash":"114affa0c4f34b1ebf8e2778c9477641f60b5b9e8a69052158041d4c41893294","block_index":310019,"block_time":310019000,"btc_amount":0,"data":"0000001e52bb3365405915f3b645a1cb004c4b4009556e69742054657374","destination":"","fee":6800,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"c9388ea12ab42ec1502dbb54e2da81beca5adee6056777559200aab28e5e1dc0","tx_index":20}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(152,310019,'insert','broadcasts','{"block_index":310019,"fee_fraction_int":5000000,"locked":false,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","text":"Unit Test","timestamp":1388000101,"tx_hash":"c9388ea12ab42ec1502dbb54e2da81beca5adee6056777559200aab28e5e1dc0","tx_index":20,"value":100.343}',0,'BROADCAST'); INSERT INTO messages VALUES(153,310019,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310019,"calling_function":"bet settled","event":"c9388ea12ab42ec1502dbb54e2da81beca5adee6056777559200aab28e5e1dc0","quantity":159300000,"tx_index":20}',0,'CREDIT'); @@ -625,7 +625,7 @@ INSERT INTO messages VALUES(156,310019,'insert','bet_match_resolutions','{"bear_ INSERT INTO messages VALUES(157,310019,'update','bet_matches','{"id":"a5a1927a83521144a5aa751f61065b530c9447c5b2c35e35064de32dae9573fd_6aa4c5853aa9971d13c0291c4e91ee5cddd506521942377aca5c3b1a48780c75","status":"settled"}',0,'BET_MATCH_UPDATE'); INSERT INTO messages VALUES(158,310019,'parse','transactions','{"supported":true,"tx_hash":"c9388ea12ab42ec1502dbb54e2da81beca5adee6056777559200aab28e5e1dc0","tx_index":20}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(159,310019,'parse','blocks','{"block_index":310019,"ledger_hash":"d11f94528a9e0034365e4388ee455f02102d2024c65e1428cdee28b6e5aa7e1c","messages_hash":"f58bd63cd1c639a15c0ef21fbb816bdcfc65555f27e76c7638d632f2f65308ed","txlist_hash":"14d0604fb6986f281715ae660221c79b7bfddf15cbc7da02c722e86b8e264d85"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(160,310020,'insert','blocks','{"block_hash":"d93c79920e4a42164af74ecb5c6b903ff6055cdc007376c74dfa692c8d85ebc9","block_index":310020,"block_time":310020000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(160,310019,'insert','blocks','{"block_hash":"d93c79920e4a42164af74ecb5c6b903ff6055cdc007376c74dfa692c8d85ebc9","block_index":310020,"block_time":310020000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(161,310020,'insert','transactions','{"block_hash":"d93c79920e4a42164af74ecb5c6b903ff6055cdc007376c74dfa692c8d85ebc9","block_index":310020,"block_time":310020000,"btc_amount":0,"data":"0000001e52bb33c94000000000000000004c4b4009556e69742054657374","destination":"","fee":6800,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"54292b0676d266705f8dd0daa1194cff3d16414564f25c422309af75d8ca344e","tx_index":21}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(162,310020,'insert','broadcasts','{"block_index":310020,"fee_fraction_int":5000000,"locked":false,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","text":"Unit Test","timestamp":1388000201,"tx_hash":"54292b0676d266705f8dd0daa1194cff3d16414564f25c422309af75d8ca344e","tx_index":21,"value":2.0}',0,'BROADCAST'); INSERT INTO messages VALUES(163,310020,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310020,"calling_function":"bet settled: for notequal","event":"54292b0676d266705f8dd0daa1194cff3d16414564f25c422309af75d8ca344e","quantity":1330000000,"tx_index":21}',0,'CREDIT'); @@ -634,18 +634,18 @@ INSERT INTO messages VALUES(165,310020,'insert','bet_match_resolutions','{"bear_ INSERT INTO messages VALUES(166,310020,'update','bet_matches','{"id":"91cea72c920a13cc450d14c92a81a318462300670308d6b1eb344ac06a72eda1_c345c2e6d9899c7729a0ca2ef13fab71ca5808854fb6be62e3b3dcd9225d1c4a","status":"settled: for notequal"}',0,'BET_MATCH_UPDATE'); INSERT INTO messages VALUES(167,310020,'parse','transactions','{"supported":true,"tx_hash":"54292b0676d266705f8dd0daa1194cff3d16414564f25c422309af75d8ca344e","tx_index":21}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(168,310020,'parse','blocks','{"block_index":310020,"ledger_hash":"4397f5568bfcf8cc90d1e72b7c61e7cc6905a0d9d3b3890c33e2afb464a25fb9","messages_hash":"c83c26a59d32bdb9ac99237809b1df16a5ac2ca3102b1c6dc4ebf59b57e6c231","txlist_hash":"5483ead85237ef0ceb3486e3c3e6ee1e5080a5dd602f805b811cedf996b8dbaa"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(169,310021,'insert','blocks','{"block_hash":"7c2460bb32c5749c856486393239bf7a0ac789587ac71f32e7237910da8097f2","block_index":310021,"block_time":310021000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(169,310020,'insert','blocks','{"block_hash":"7c2460bb32c5749c856486393239bf7a0ac789587ac71f32e7237910da8097f2","block_index":310021,"block_time":310021000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(170,310021,'insert','transactions','{"block_hash":"7c2460bb32c5749c856486393239bf7a0ac789587ac71f32e7237910da8097f2","block_index":310021,"block_time":310021000,"btc_amount":0,"data":"0000000a00000000000047670000000002faf08000000000000000010000000002faf080000a0000000000000000","destination":"","fee":6800,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"6d3c6a9ea36e82a0e8162f69c68fc8bb95d316ad5586a30553fbaf1717f4121e","tx_index":22}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(171,310021,'insert','debits','{"action":"open order","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"BBBB","block_index":310021,"event":"6d3c6a9ea36e82a0e8162f69c68fc8bb95d316ad5586a30553fbaf1717f4121e","quantity":50000000,"tx_index":22}',0,'DEBIT'); INSERT INTO messages VALUES(172,310021,'insert','orders','{"block_index":310021,"expiration":10,"expire_index":310031,"fee_provided":6800,"fee_provided_remaining":6800,"fee_required":0,"fee_required_remaining":0,"get_asset":"XCP","get_quantity":50000000,"get_remaining":50000000,"give_asset":"BBBB","give_quantity":50000000,"give_remaining":50000000,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"open","tx_hash":"6d3c6a9ea36e82a0e8162f69c68fc8bb95d316ad5586a30553fbaf1717f4121e","tx_index":22}',0,'OPEN_ORDER'); INSERT INTO messages VALUES(173,310021,'parse','transactions','{"supported":true,"tx_hash":"6d3c6a9ea36e82a0e8162f69c68fc8bb95d316ad5586a30553fbaf1717f4121e","tx_index":22}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(174,310021,'parse','blocks','{"block_index":310021,"ledger_hash":"16b7018344f7a97695eb17dc5921c4955b3f8cf4d9e70bd8628041c4033886b9","messages_hash":"df2718afd201901a86d99a9d0a6d51eae8c18ffd5410c2df3e03f9bc9dc19ad6","txlist_hash":"bd68fe9b7aef054c8a5925dff9ff140cb5c00eb611a8802156196ed486479ad1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(175,310022,'insert','blocks','{"block_hash":"44435f9a99a0aa12a9bfabdc4cb8119f6ea6a6e1350d2d65445fb66a456db5fc","block_index":310022,"block_time":310022000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(175,310021,'insert','blocks','{"block_hash":"44435f9a99a0aa12a9bfabdc4cb8119f6ea6a6e1350d2d65445fb66a456db5fc","block_index":310022,"block_time":310022000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(176,310022,'insert','transactions','{"block_hash":"44435f9a99a0aa12a9bfabdc4cb8119f6ea6a6e1350d2d65445fb66a456db5fc","block_index":310022,"block_time":310022000,"btc_amount":100000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":5625,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"df080a76ceb263201901bc23c85c3e8dce4eca0e72c873131adaf2f46820e9f1","tx_index":23}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(177,310022,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310022,"calling_function":"burn","event":"df080a76ceb263201901bc23c85c3e8dce4eca0e72c873131adaf2f46820e9f1","quantity":56999887262,"tx_index":23}',0,'CREDIT'); INSERT INTO messages VALUES(178,310022,'insert','burns','{"block_index":310022,"burned":38000000,"earned":56999887262,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","tx_hash":"df080a76ceb263201901bc23c85c3e8dce4eca0e72c873131adaf2f46820e9f1","tx_index":23}',0,'BURN'); INSERT INTO messages VALUES(179,310022,'parse','blocks','{"block_index":310022,"ledger_hash":"c3c26212677f4aed4614b653f1e5da509f962c29502d22c84c1c5522bca0dcf5","messages_hash":"44ca0135d35e858c86b381ada27e536e525b152a649f50d2707dba4154f181bf","txlist_hash":"109e820ac7d290ecec049098115ba6b467ba90ba624aa24326cc7e103e51b265"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(180,310023,'insert','blocks','{"block_hash":"d8cf5bec1bbcab8ca4f495352afde3b6572b7e1d61b3976872ebb8e9d30ccb08","block_index":310023,"block_time":310023000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(180,310022,'insert','blocks','{"block_hash":"d8cf5bec1bbcab8ca4f495352afde3b6572b7e1d61b3976872ebb8e9d30ccb08","block_index":310023,"block_time":310023000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(181,310023,'insert','transactions','{"block_hash":"d8cf5bec1bbcab8ca4f495352afde3b6572b7e1d61b3976872ebb8e9d30ccb08","block_index":310023,"block_time":310023000,"btc_amount":1000,"data":"0000000000000000000047680000000000002710","destination":"2_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","supported":true,"tx_hash":"abc5e16e5a7a1a7dd7d38ff1351b252a3813d40a695ab798f6a26cb904f91ab1","tx_index":24}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(182,310023,'update','bets','{"status":"expired","tx_hash":"c36b65e3d4c105739d5c8cef470c0878d2e8da138416e09cb499edcec343c0b8"}',0,'BET_UPDATE'); INSERT INTO messages VALUES(183,310023,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310023,"calling_function":"recredit wager remaining","event":"c36b65e3d4c105739d5c8cef470c0878d2e8da138416e09cb499edcec343c0b8","quantity":8500000,"tx_index":0}',0,'CREDIT'); @@ -655,164 +655,164 @@ INSERT INTO messages VALUES(186,310023,'insert','credits','{"address":"2_mnfAHmd INSERT INTO messages VALUES(187,310023,'insert','sends','{"asset":"BBBC","block_index":310023,"destination":"2_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","quantity":10000,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","status":"valid","tx_hash":"abc5e16e5a7a1a7dd7d38ff1351b252a3813d40a695ab798f6a26cb904f91ab1","tx_index":24}',0,'SEND'); INSERT INTO messages VALUES(188,310023,'parse','transactions','{"supported":true,"tx_hash":"abc5e16e5a7a1a7dd7d38ff1351b252a3813d40a695ab798f6a26cb904f91ab1","tx_index":24}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(189,310023,'parse','blocks','{"block_index":310023,"ledger_hash":"420b753d9e2a4ae5c00cf65efccb9a657d2daeb19159075d1671a076d8c1ade1","messages_hash":"91081b0be0fff5219493139012532117f008245abc4b50bd36faab48f85be5ff","txlist_hash":"8e03eae75b5f9306a0a8142296412f7271b17f8c751e9e8e1b1cbeca5418f4eb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(190,310024,'insert','blocks','{"block_hash":"b03042b4e18a222b4c8d1e9e1970d93e6e2a2d41686d227ff8ecf0a839223dc5","block_index":310024,"block_time":310024000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(190,310023,'insert','blocks','{"block_hash":"b03042b4e18a222b4c8d1e9e1970d93e6e2a2d41686d227ff8ecf0a839223dc5","block_index":310024,"block_time":310024000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(191,310024,'parse','blocks','{"block_index":310024,"ledger_hash":"786e9c043df5025bb8d123322e2dd9cba30cc433ff90a44b7b7036369565835b","messages_hash":"9ab46e4d9677c04c33eaf38a5739415b157e5030714de0a236e7be42ff238dc0","txlist_hash":"6a80f89b076199d165801b34c7d292976e069920f2ae4184e09dad8411735b94"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(192,310025,'insert','blocks','{"block_hash":"a872e560766832cc3b4f7f222228cb6db882ce3c54f6459f62c71d5cd6e90666","block_index":310025,"block_time":310025000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(192,310024,'insert','blocks','{"block_hash":"a872e560766832cc3b4f7f222228cb6db882ce3c54f6459f62c71d5cd6e90666","block_index":310025,"block_time":310025000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(193,310025,'parse','blocks','{"block_index":310025,"ledger_hash":"1a2e0585eb1a7f608b4ca4b1d252f555f87e7f16fff124ed869285ec17643059","messages_hash":"20141b1af89156b848ceb20e590be9ff0d54478bcaad039be244306aef734642","txlist_hash":"a2110149cc4e90d1474c53bdf91e24f8bbb8931548542a6afda94bc343fe3a7f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(194,310026,'insert','blocks','{"block_hash":"6c96350f6f2f05810f19a689de235eff975338587194a36a70dfd0fcd490941a","block_index":310026,"block_time":310026000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(194,310025,'insert','blocks','{"block_hash":"6c96350f6f2f05810f19a689de235eff975338587194a36a70dfd0fcd490941a","block_index":310026,"block_time":310026000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(195,310026,'parse','blocks','{"block_index":310026,"ledger_hash":"44a1f10e2df25328c38e20c36029bff557c7a93784030ece591406df9c71ebd6","messages_hash":"63504129b0e9f989d9c6f9ab21687c26b7202d9cf0f03f79958385033f163464","txlist_hash":"d087d907b7af1ac1171c61f00c756754fc94e0edf0dc265d9eced163a07357c1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(196,310027,'insert','blocks','{"block_hash":"d7acfac66df393c4482a14c189742c0571b89442eb7f817b34415a560445699e","block_index":310027,"block_time":310027000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(196,310026,'insert','blocks','{"block_hash":"d7acfac66df393c4482a14c189742c0571b89442eb7f817b34415a560445699e","block_index":310027,"block_time":310027000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(197,310027,'parse','blocks','{"block_index":310027,"ledger_hash":"093f82c2b8e108242edc6dad72e5878700b9c33606c359e673bdfe65341db64a","messages_hash":"66093532b874150a5943bf3868b6f76cfcd695755d97035987429f4cfa0edeb5","txlist_hash":"5796b7de2e12cda876546b21e2a64e92b85792c201f39fe404e7fa6c395e78db"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(198,310028,'insert','blocks','{"block_hash":"02409fcf8fa06dafcb7f11e38593181d9c42cc9d5e2ddc304d098f990bd9530b","block_index":310028,"block_time":310028000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(198,310027,'insert','blocks','{"block_hash":"02409fcf8fa06dafcb7f11e38593181d9c42cc9d5e2ddc304d098f990bd9530b","block_index":310028,"block_time":310028000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(199,310028,'parse','blocks','{"block_index":310028,"ledger_hash":"efac93e04f7cd9d3b1c0af3da102c29b50d940b4b5687fb0061b3b6e169290f6","messages_hash":"de99b16970903ae65ce92f70f7d0a8da9ad74db4c483e2d4447cb548982d0bc9","txlist_hash":"5daed82ccefd923a597451b918ece6172dbc75df5cd53ea0f7e40065e3d0d929"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(200,310029,'insert','blocks','{"block_hash":"3c739fa8b40c118d5547ea356ee8d10ee2898871907643ec02e5db9d00f03cc6","block_index":310029,"block_time":310029000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(200,310028,'insert','blocks','{"block_hash":"3c739fa8b40c118d5547ea356ee8d10ee2898871907643ec02e5db9d00f03cc6","block_index":310029,"block_time":310029000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(201,310029,'parse','blocks','{"block_index":310029,"ledger_hash":"1fa464e853787685a588de6dab287456de7a0efdcd76052a41ddaf5e2f85a648","messages_hash":"f3b6cd92ef9d32c924d0ce7881b825fa846c06a58bbc075502484ed976f8f528","txlist_hash":"818415429923b4a38cb65dddb4e8b8a17264cea0188e905d4a19db340e98ef82"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(202,310030,'insert','blocks','{"block_hash":"d5071cddedf89765ee0fd58f209c1c7d669ba8ea66200a57587da8b189b9e4f5","block_index":310030,"block_time":310030000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(202,310029,'insert','blocks','{"block_hash":"d5071cddedf89765ee0fd58f209c1c7d669ba8ea66200a57587da8b189b9e4f5","block_index":310030,"block_time":310030000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(203,310030,'parse','blocks','{"block_index":310030,"ledger_hash":"fee866f1cf6e5f83010b97e0e9d88b54ce43fdf45e89081ba3b2fe07b62434fc","messages_hash":"c61b51630aa3cec277cb59ae2f322a8abd57699b6f090b731564d2e6d00f4810","txlist_hash":"7e3fb0dc1ce885afb71be88ad0ca3b189202535d328ff70bda7cceaede6813bb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(204,310031,'insert','blocks','{"block_hash":"0b02b10f41380fff27c543ea8891ecb845bf7a003ac5c87e15932aff3bfcf689","block_index":310031,"block_time":310031000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(204,310030,'insert','blocks','{"block_hash":"0b02b10f41380fff27c543ea8891ecb845bf7a003ac5c87e15932aff3bfcf689","block_index":310031,"block_time":310031000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(205,310031,'parse','blocks','{"block_index":310031,"ledger_hash":"11ed526c46610698e7a4f102ae91755a541d668750ec3bc10decd0c1709d1115","messages_hash":"6e82edc73115783e4515dc3c8f34c62c906da0c0c882c4ab621a4adf58ad11b5","txlist_hash":"e3044e5fc57d122eb707d271ca1f4248358a8f477a6466cedb739e7799351bb8"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(206,310032,'insert','blocks','{"block_hash":"66346be81e6ba04544f2ae643b76c2b7b1383f038fc2636e02e49dc7ec144074","block_index":310032,"block_time":310032000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(206,310031,'insert','blocks','{"block_hash":"66346be81e6ba04544f2ae643b76c2b7b1383f038fc2636e02e49dc7ec144074","block_index":310032,"block_time":310032000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(207,310032,'update','orders','{"status":"expired","tx_hash":"6d3c6a9ea36e82a0e8162f69c68fc8bb95d316ad5586a30553fbaf1717f4121e"}',0,'ORDER_UPDATE'); INSERT INTO messages VALUES(208,310032,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"BBBB","block_index":310032,"calling_function":"cancel order","event":"6d3c6a9ea36e82a0e8162f69c68fc8bb95d316ad5586a30553fbaf1717f4121e","quantity":50000000,"tx_index":0}',0,'CREDIT'); INSERT INTO messages VALUES(209,310032,'insert','order_expirations','{"block_index":310032,"order_hash":"6d3c6a9ea36e82a0e8162f69c68fc8bb95d316ad5586a30553fbaf1717f4121e","source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2"}',0,'ORDER_EXPIRATION'); INSERT INTO messages VALUES(210,310032,'parse','blocks','{"block_index":310032,"ledger_hash":"7930e5a2c6150df64dfd995801aec68ce11df292e206f08f7ff20eda9ca2d017","messages_hash":"9e5bd4348011a4bfd4f91b9ecfa75389c87204381308a38032ccbfd463529617","txlist_hash":"cbe01ce5a4da72538e9310180de025f141ea8baf1b6eeede8164cac3488532fe"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(211,310033,'insert','blocks','{"block_hash":"999c65df9661f73e8c01f1da1afda09ac16788b72834f0ff5ea3d1464afb4707","block_index":310033,"block_time":310033000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(211,310032,'insert','blocks','{"block_hash":"999c65df9661f73e8c01f1da1afda09ac16788b72834f0ff5ea3d1464afb4707","block_index":310033,"block_time":310033000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(212,310033,'parse','blocks','{"block_index":310033,"ledger_hash":"c5834a54b3ad7f9fdbb18a87c8cefe867eff2ba1ae5bff238a3a041431d0afdd","messages_hash":"907ed29694aefd86edfbc4a210f60db1de73085d1ef82b5eba6fed922ef2681a","txlist_hash":"81bceadbd9f9b956ed25021e2e0a9f4217c7424522105f8a0ba41c9f78234fcd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(213,310034,'insert','blocks','{"block_hash":"f552edd2e0a648230f3668e72ddf0ddfb1e8ac0f4c190f91b89c1a8c2e357208","block_index":310034,"block_time":310034000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(213,310033,'insert','blocks','{"block_hash":"f552edd2e0a648230f3668e72ddf0ddfb1e8ac0f4c190f91b89c1a8c2e357208","block_index":310034,"block_time":310034000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(214,310034,'parse','blocks','{"block_index":310034,"ledger_hash":"5a4b3f29cb1554ae8f670955df4dde45fdcc57623a50ca7d8f2c78ad79186a7a","messages_hash":"dd328930abb087b56675e8122dc92a7dcd71162ee577f4d482fa176d2a88b3fb","txlist_hash":"0ec430eb4c16f386b5abbd6586133741dfe6c19eb820d388810f3680442d363a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(215,310035,'insert','blocks','{"block_hash":"a13cbb016f3044207a46967a4ba1c87dab411f78c55c1179f2336653c2726ae2","block_index":310035,"block_time":310035000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(215,310034,'insert','blocks','{"block_hash":"a13cbb016f3044207a46967a4ba1c87dab411f78c55c1179f2336653c2726ae2","block_index":310035,"block_time":310035000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(216,310035,'parse','blocks','{"block_index":310035,"ledger_hash":"b81834ed9e92514fe7d277378be72e1f81043a615a4b67cb67dbcf97e3c3b43e","messages_hash":"41db3179bc9788824037f2c6341e43178c2013baec35d5144cfd625349ca9b20","txlist_hash":"a883860baff0c6dec150c9d80b8a640401e191312eeebd4e9f21914e7803c46b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(217,310036,'insert','blocks','{"block_hash":"158648a98f1e1bd1875584ce8449eb15a4e91a99a923bbb24c4210135cef0c76","block_index":310036,"block_time":310036000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(217,310035,'insert','blocks','{"block_hash":"158648a98f1e1bd1875584ce8449eb15a4e91a99a923bbb24c4210135cef0c76","block_index":310036,"block_time":310036000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(218,310036,'parse','blocks','{"block_index":310036,"ledger_hash":"736adff04611f10a4e384b5d5c44651bdf037c0caeb8dda5bedbbc6d18d04ca2","messages_hash":"e47efff42238d0792a847ce03c257ebc6a98df5b2ed2aa6794deb87bb1762714","txlist_hash":"821ad697a76d9a35b14a7c388b65b4f3a86fc66c42e02af6d568f73e2586beec"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(219,310037,'insert','blocks','{"block_hash":"563acfd6d991ce256d5655de2e9429975c8dceeb221e76d5ec6e9e24a2c27c07","block_index":310037,"block_time":310037000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(219,310036,'insert','blocks','{"block_hash":"563acfd6d991ce256d5655de2e9429975c8dceeb221e76d5ec6e9e24a2c27c07","block_index":310037,"block_time":310037000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(220,310037,'parse','blocks','{"block_index":310037,"ledger_hash":"34d49fb14a7ec85ebd02ffe04768f5aa7382ed0ac7f9ae903e71567dc5d9ab67","messages_hash":"c85db66d7f2fc6b8db0dc4a2290e79e34f961b84004b7d0260be4e17d645b209","txlist_hash":"c5ff4e50b07b755c23a6d9ca6dd5efe71a2728c4c662418fab814993be455308"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(221,310038,'insert','blocks','{"block_hash":"b44b4cad12431c32df27940e18d51f63897c7472b70950d18454edfd640490b2","block_index":310038,"block_time":310038000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(221,310037,'insert','blocks','{"block_hash":"b44b4cad12431c32df27940e18d51f63897c7472b70950d18454edfd640490b2","block_index":310038,"block_time":310038000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(222,310038,'parse','blocks','{"block_index":310038,"ledger_hash":"9bfc3bf0ed35dd256f0df04c813dab9dd818238163e6b01842e18815971e7010","messages_hash":"2c2e220375664b0c12fa86da7be19a292aa6fdd5ada46d285df190b50f5d3bb4","txlist_hash":"8a2ea429a26990e70f9c8937d11c58c986f991c55f196416344847435c670849"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(223,310039,'insert','blocks','{"block_hash":"5fa1ae9c5e8a599247458987b006ad3a57f686df1f7cc240bf119e911b56c347","block_index":310039,"block_time":310039000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(223,310038,'insert','blocks','{"block_hash":"5fa1ae9c5e8a599247458987b006ad3a57f686df1f7cc240bf119e911b56c347","block_index":310039,"block_time":310039000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(224,310039,'parse','blocks','{"block_index":310039,"ledger_hash":"da7a63f22053d1713c805684d14695c31670eaf848bf23eee3331e679744f291","messages_hash":"b203f7b7b307a063a1d329553fb07b2b1dcece4111f3cd0c35b32c3af097d943","txlist_hash":"9f186391b30cc438ae59dabfb18dfca8811193a8fe37cada73d513ad688a80f0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(225,310040,'insert','blocks','{"block_hash":"7200ded406675453eadddfbb2d14c2a4526c7dc2b5de14bd48b29243df5e1aa3","block_index":310040,"block_time":310040000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(225,310039,'insert','blocks','{"block_hash":"7200ded406675453eadddfbb2d14c2a4526c7dc2b5de14bd48b29243df5e1aa3","block_index":310040,"block_time":310040000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(226,310040,'parse','blocks','{"block_index":310040,"ledger_hash":"ddb485115b64342bcb172cc3e77b20effb1294e635459119b59179f3b6a87d66","messages_hash":"c7ce0dc2cbfb4e01ad2d6ee56ba13aa9b1bb7ea41a814d918e62351b5f7e46d6","txlist_hash":"f73c8b5e92181566aeee4ec42a1e50b950fd18680c69c58fe20b5288a915d7e9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(227,310041,'insert','blocks','{"block_hash":"5db592ff9ba5fac1e030cf22d6c13b70d330ba397f415340086ee7357143b359","block_index":310041,"block_time":310041000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(227,310040,'insert','blocks','{"block_hash":"5db592ff9ba5fac1e030cf22d6c13b70d330ba397f415340086ee7357143b359","block_index":310041,"block_time":310041000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(228,310041,'parse','blocks','{"block_index":310041,"ledger_hash":"b58d05ae5f282f7904c7a759ae5624194b5cb091f43f05d738cb4002a999c26d","messages_hash":"93117028a2487b2bfcaf92829728572bd59794f0ecc6ab6108ad7e2dc620023e","txlist_hash":"73ee837bac9153dbc94c23879192b6c2fd71a9a6148502e8c4693bd342c4feec"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(229,310042,'insert','blocks','{"block_hash":"826fd4701ef2824e9559b069517cd3cb990aff6a4690830f78fc845ab77fa3e4","block_index":310042,"block_time":310042000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(229,310041,'insert','blocks','{"block_hash":"826fd4701ef2824e9559b069517cd3cb990aff6a4690830f78fc845ab77fa3e4","block_index":310042,"block_time":310042000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(230,310042,'parse','blocks','{"block_index":310042,"ledger_hash":"c18e1989fccd8bc7168ebf2acc035c224a9010b428b81c814683b0ce1e244113","messages_hash":"2d222cb4b49a3a83535b2f026e13759f1ef6faf8ff833e79dfd218a8e2972a7e","txlist_hash":"9ef577154ca6e451585e9dcc4c3690d496b8a666856987194c4e41414743945f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(231,310043,'insert','blocks','{"block_hash":"2254a12ada208f1dd57bc17547ecaf3c44720323c47bc7d4b1262477cb7f3c51","block_index":310043,"block_time":310043000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(231,310042,'insert','blocks','{"block_hash":"2254a12ada208f1dd57bc17547ecaf3c44720323c47bc7d4b1262477cb7f3c51","block_index":310043,"block_time":310043000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(232,310043,'parse','blocks','{"block_index":310043,"ledger_hash":"1a935492fce6a168d9aafd24246bba6f5615f53a47311549059b21adc6a67154","messages_hash":"2e99c026842fbb3d0096b55a09d137f21c59b1d5b1d9303b8c02d3e049e471ca","txlist_hash":"29f3ff5d49a8c6ffbf0ddc41a5e45fd3b777fd7c9ea60a914191fc551ac46ea4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(233,310044,'insert','blocks','{"block_hash":"3346d24118d8af0b3c6bcc42f8b85792e7a2e7036ebf6e4c25f4f6723c78e46b","block_index":310044,"block_time":310044000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(233,310043,'insert','blocks','{"block_hash":"3346d24118d8af0b3c6bcc42f8b85792e7a2e7036ebf6e4c25f4f6723c78e46b","block_index":310044,"block_time":310044000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(234,310044,'parse','blocks','{"block_index":310044,"ledger_hash":"536611cb3cb3005f8c4ffc5b8ed8271734448b5d6f49bd47eb0456bc4ee207e4","messages_hash":"f45c8d78c1854e9ff54aa0ea675ae1e5267a5b9ee5e41284fdf2bcc8fa49553f","txlist_hash":"6f22c984234616fa84a474dc80c5d5e25ccdbec1a84b0cabb279505e93aa4d6c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(235,310045,'insert','blocks','{"block_hash":"7bba0ab243839e91ad1a45a762bf074011f8a9883074d68203c6d1b46fffde98","block_index":310045,"block_time":310045000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(235,310044,'insert','blocks','{"block_hash":"7bba0ab243839e91ad1a45a762bf074011f8a9883074d68203c6d1b46fffde98","block_index":310045,"block_time":310045000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(236,310045,'parse','blocks','{"block_index":310045,"ledger_hash":"ebbeea29c073c61dad3e091302cd945a9926741db0dc6a918792c4c01b8cc30c","messages_hash":"f7e2e1530436138aa604ff4ab4fdf5199c0c14b1307aad7f53992963325b99b8","txlist_hash":"a1d1a029c0bcbe481f8ba760714e266ff9e759844517ceef96bbaefb05652dcd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(237,310046,'insert','blocks','{"block_hash":"47db6788c38f2d6d712764979e41346b55e78cbb4969e0ef5c4336faf18993a6","block_index":310046,"block_time":310046000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(237,310045,'insert','blocks','{"block_hash":"47db6788c38f2d6d712764979e41346b55e78cbb4969e0ef5c4336faf18993a6","block_index":310046,"block_time":310046000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(238,310046,'parse','blocks','{"block_index":310046,"ledger_hash":"d9baff8bec82f3c29f1fa69c9ddd456f1867f33a55d1648605ea7109270d8e07","messages_hash":"79f70931f48bb72ed75656a64ab2de397aa09047ac7609b22611c21b40dd754d","txlist_hash":"26f6ea6c1e350b91f4757619dd52bb7a2b2bad7277497f0d4e1d61b363eb7a99"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(239,310047,'insert','blocks','{"block_hash":"a9ccabcc2a098a7d25e4ab8bda7c4e66807eefa42e29890dcd88149a10de7075","block_index":310047,"block_time":310047000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(239,310046,'insert','blocks','{"block_hash":"a9ccabcc2a098a7d25e4ab8bda7c4e66807eefa42e29890dcd88149a10de7075","block_index":310047,"block_time":310047000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(240,310047,'parse','blocks','{"block_index":310047,"ledger_hash":"09ad4a6bb3f671e6ac6d595bcbfb82371cc41f35c309142678eb5b7df97a5de5","messages_hash":"24e0e1b61be60f0a0078d5d1ac7e31c287354323e9331e2bf40021cc703358f6","txlist_hash":"5e32dc4d14838fdf0460146fd87eeb59ece3416bb7104362d24fd6d2bf0fe963"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(241,310048,'insert','blocks','{"block_hash":"610bf3935a85b05a98556c55493c6de45bed4d7b3b6c8553a984718765796309","block_index":310048,"block_time":310048000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(241,310047,'insert','blocks','{"block_hash":"610bf3935a85b05a98556c55493c6de45bed4d7b3b6c8553a984718765796309","block_index":310048,"block_time":310048000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(242,310048,'parse','blocks','{"block_index":310048,"ledger_hash":"208200708851a32b0ffaecade58f78f8ba7d5820457c582d5ca127e16fec0952","messages_hash":"2597361763116e4e99d7f8d7988dc1c3a1f1316e51703c09a1d02852aa1caa26","txlist_hash":"c0a8253cff82f71d9a90c7b982e5d5093d5c2bbc2ee2859d9d7d09afbef56192"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(243,310049,'insert','blocks','{"block_hash":"4ad2761923ad49ad2b283b640f1832522a2a5d6964486b21591b71df6b33be3c","block_index":310049,"block_time":310049000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(243,310048,'insert','blocks','{"block_hash":"4ad2761923ad49ad2b283b640f1832522a2a5d6964486b21591b71df6b33be3c","block_index":310049,"block_time":310049000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(244,310049,'parse','blocks','{"block_index":310049,"ledger_hash":"9d1a7335d989bb73b0363bc88da6dd82c0fbaf064b1d70708b0aa2f6a8a9958b","messages_hash":"17d15d7933015f793185bd1eae6e311471e2cdf3c15df12eef904447206625a2","txlist_hash":"c07861a54cc9537b7a2486e5a7e6366cd04413fb1307712ec6af55588dd22cfc"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(245,310050,'insert','blocks','{"block_hash":"8cfeb60a14a4cec6e9be13d699694d49007d82a31065a17890383e262071e348","block_index":310050,"block_time":310050000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(245,310049,'insert','blocks','{"block_hash":"8cfeb60a14a4cec6e9be13d699694d49007d82a31065a17890383e262071e348","block_index":310050,"block_time":310050000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(246,310050,'parse','blocks','{"block_index":310050,"ledger_hash":"2fd9039e49fcbb070315defae275bed858cfbb539bc4db8f2ec5f5ff6d69ea25","messages_hash":"e9d18500e588b2ee026e997cf3bf94d83180495f1ed9a943591b63d99c379e1f","txlist_hash":"0ae948495f47c1ad343052f786467c6236cd6ca23dce0c628503a44ada8f8329"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(247,310051,'insert','blocks','{"block_hash":"b53c90385dd808306601350920c6af4beb717518493fd23b5c730eea078f33e6","block_index":310051,"block_time":310051000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(247,310050,'insert','blocks','{"block_hash":"b53c90385dd808306601350920c6af4beb717518493fd23b5c730eea078f33e6","block_index":310051,"block_time":310051000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(248,310051,'parse','blocks','{"block_index":310051,"ledger_hash":"2e97864865a020b04ed60b22c347d9dbebce5d00abce86c2b3a5054a3184699b","messages_hash":"db5355867330ece23a480053220efc0a9c0e2adc29c43066b897db1f8be5ce5d","txlist_hash":"986536c5e9cec38d9b78bef44e21e73f93a654b9c421c7822dcba475b14f2127"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(249,310052,'insert','blocks','{"block_hash":"0acdacf4e4b6fca756479cb055191b367b1fa433aa558956f5f08fa5b7b394e2","block_index":310052,"block_time":310052000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(249,310051,'insert','blocks','{"block_hash":"0acdacf4e4b6fca756479cb055191b367b1fa433aa558956f5f08fa5b7b394e2","block_index":310052,"block_time":310052000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(250,310052,'parse','blocks','{"block_index":310052,"ledger_hash":"f6a8e9f4cde78fbf6c9a5ea176312116f3813f2c0bcaee6c92f3beb13a8c3899","messages_hash":"d42146acaf047c28ad0bff965c05dcefaf06d898828e4a538d9fd1a7422e3e89","txlist_hash":"4ffb95c683e1839d31018cc7ec92e978014b8cd32f308c2819ff2e79ff60fa2d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(251,310053,'insert','blocks','{"block_hash":"68348f01b6dc49b2cb30fe92ac43e527aa90d859093d3bf7cd695c64d2ef744f","block_index":310053,"block_time":310053000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(251,310052,'insert','blocks','{"block_hash":"68348f01b6dc49b2cb30fe92ac43e527aa90d859093d3bf7cd695c64d2ef744f","block_index":310053,"block_time":310053000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(252,310053,'parse','blocks','{"block_index":310053,"ledger_hash":"1d84e4657febaa291b4873d808d9ab433370227976196fd6436a65839c3575d1","messages_hash":"cea5b93f173a27746ed90eb780446303b38fa611548f5641f24381973435570b","txlist_hash":"0ed99730b61327cff9ed15d8585f70d7629b2b10150a717093dac4fafcc4e737"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(253,310054,'insert','blocks','{"block_hash":"a8b5f253df293037e49b998675620d5477445c51d5ec66596e023282bb9cd305","block_index":310054,"block_time":310054000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(253,310053,'insert','blocks','{"block_hash":"a8b5f253df293037e49b998675620d5477445c51d5ec66596e023282bb9cd305","block_index":310054,"block_time":310054000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(254,310054,'parse','blocks','{"block_index":310054,"ledger_hash":"083f6b773191caaf1844f47c53077e8724e100d0b46461ddaa642b88d5265c9a","messages_hash":"73b50c51dd56dc45dfd626e0051250cdbebd9ce256952530fd0b6710a3cba150","txlist_hash":"69aa5d1c74c026da7b7cebe352bd6d907a31174cfd6f346e09382b0cf3fb8239"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(255,310055,'insert','blocks','{"block_hash":"4b069152e2dc82e96ed8a3c3547c162e8c3aceeb2a4ac07972f8321a535b9356","block_index":310055,"block_time":310055000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(255,310054,'insert','blocks','{"block_hash":"4b069152e2dc82e96ed8a3c3547c162e8c3aceeb2a4ac07972f8321a535b9356","block_index":310055,"block_time":310055000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(256,310055,'parse','blocks','{"block_index":310055,"ledger_hash":"b1302087b804fc5753df5a4d8aaf8626e80ff99b429f52fed97767b051c24e8c","messages_hash":"7a31dd7f45427e5ed38234de010caee7ef9713c09191aedc7ce9279a4dfd9059","txlist_hash":"e35d2a19e5b60e2534a36d8c1d0c14c6211d56c29b4aa4953a14bf0b83bcc405"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(257,310056,'insert','blocks','{"block_hash":"7603eaed418971b745256742f9d2ba70b2c2b2f69f61de6cc70e61ce0336f9d3","block_index":310056,"block_time":310056000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(257,310055,'insert','blocks','{"block_hash":"7603eaed418971b745256742f9d2ba70b2c2b2f69f61de6cc70e61ce0336f9d3","block_index":310056,"block_time":310056000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(258,310056,'parse','blocks','{"block_index":310056,"ledger_hash":"956c9ca0b51eaba7343703a165eb96d5947fc764457ef3dde5ca90c18d3b2f3d","messages_hash":"7c37e4f5dcbb655f768081f89e89f74a8dfa368459e2c65c34e41f4904709f0b","txlist_hash":"165a88d3d459ce6f4f37cc2ddb1c365dd01542b102dc68181d41b95ebde044dd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(259,310057,'insert','blocks','{"block_hash":"4a5fdc84f2d66ecb6ee3e3646aad20751ce8694e64e348d3c8aab09d33a3e411","block_index":310057,"block_time":310057000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(259,310056,'insert','blocks','{"block_hash":"4a5fdc84f2d66ecb6ee3e3646aad20751ce8694e64e348d3c8aab09d33a3e411","block_index":310057,"block_time":310057000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(260,310057,'parse','blocks','{"block_index":310057,"ledger_hash":"e86cae3e73aa13e8498a98de335ed0cbdb7899b24e91839bbf0f50aa22355ecb","messages_hash":"cb8ea0fe610cd5906ffe9de26da5d5b2635ddfc88ececfe465e2f9711bcfda04","txlist_hash":"37394f57952a82ab5fb6ceb7323152d83f3c911a533e289c55b531fc83269268"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(261,310058,'insert','blocks','{"block_hash":"a6eef3089896f0cae0bfe9423392e45c48f4efe4310b14d8cfbdb1fea613635f","block_index":310058,"block_time":310058000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(261,310057,'insert','blocks','{"block_hash":"a6eef3089896f0cae0bfe9423392e45c48f4efe4310b14d8cfbdb1fea613635f","block_index":310058,"block_time":310058000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(262,310058,'parse','blocks','{"block_index":310058,"ledger_hash":"54bd5e4fc1bc17df27f9e6f22b5e1facd82229a877e09ec0136f878f2da81344","messages_hash":"34d713c9ef3e60d682f178fa7dbe1daf4f12a64fc8143a01e036666da1f4f46a","txlist_hash":"ebd7b1c7c24aa51a0622e244d1b486d4bde8b1019d86e1d8845b6e90847ad09b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(263,310059,'insert','blocks','{"block_hash":"ab505de874c43f97c90be1c26a769e6c5cb140405c993b4a6cc7afc795f156a9","block_index":310059,"block_time":310059000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(263,310058,'insert','blocks','{"block_hash":"ab505de874c43f97c90be1c26a769e6c5cb140405c993b4a6cc7afc795f156a9","block_index":310059,"block_time":310059000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(264,310059,'parse','blocks','{"block_index":310059,"ledger_hash":"1403832427d4c482b0d2d925e08a72fe37f5aaa6af73e74f601f7e22fdad7662","messages_hash":"5d1b34371d873a0b08e072ba89187bf5f51e9d1bd9471b3a9ad8c3cc0374adca","txlist_hash":"cb71b795988456a345fd21a3c729005ab802707d54311480012920f07db40bc9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(265,310060,'insert','blocks','{"block_hash":"974ad5fbef621e0a38eab811608dc9afaf10c8ecc85fed913075ba1a145e889b","block_index":310060,"block_time":310060000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(265,310059,'insert','blocks','{"block_hash":"974ad5fbef621e0a38eab811608dc9afaf10c8ecc85fed913075ba1a145e889b","block_index":310060,"block_time":310060000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(266,310060,'parse','blocks','{"block_index":310060,"ledger_hash":"7b08f124a953d0e5511b0698d3314f5ec71ebba77b94c4d236ff9738d5a587e8","messages_hash":"e52e415923ef293e6c5a234251c4298558d2d739934fb7efdf6fc6c56c341ece","txlist_hash":"cf47be21938b5a55ffb8eba6a9f63eb61b89e679b279d75080571832bf08c0e0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(267,310061,'insert','blocks','{"block_hash":"35d267d21ad386e7b7632292af1c422b0310dde7ca49a82f9577525a29c138cf","block_index":310061,"block_time":310061000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(267,310060,'insert','blocks','{"block_hash":"35d267d21ad386e7b7632292af1c422b0310dde7ca49a82f9577525a29c138cf","block_index":310061,"block_time":310061000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(268,310061,'parse','blocks','{"block_index":310061,"ledger_hash":"1de158dfd18413618b9800236a2aa265d2fab497b09a839be408da8871b0960a","messages_hash":"739ac804a6f6728dbb657d1c6e918b357b3bca5b468bd919a413f4c826737ac5","txlist_hash":"a9c1a3c24a410649e701fc0b321b2030b6fc35de7a2538a10e75b482cbe96b3f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(269,310062,'insert','blocks','{"block_hash":"b31a0054145319ef9de8c1cb19df5bcf4dc8a1ece20053aa494e5d3a00a2852f","block_index":310062,"block_time":310062000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(269,310061,'insert','blocks','{"block_hash":"b31a0054145319ef9de8c1cb19df5bcf4dc8a1ece20053aa494e5d3a00a2852f","block_index":310062,"block_time":310062000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(270,310062,'parse','blocks','{"block_index":310062,"ledger_hash":"aa4be540bad6cd762a02b77856c3d6a737d90245e71f61b63a426573bffb3a4a","messages_hash":"54d67ccdcc62ff368fd5344c672b89a1b1e70cab962fc124ff44562a8669bd40","txlist_hash":"93d0499dcc4fc819927eed8d1eec8b094eb5a4323b70d2cec33d568e31737ce4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(271,310063,'insert','blocks','{"block_hash":"0cbcbcd5b7f2dc288e3a34eab3d4212463a5a56e886804fb4f9f1cf929eadebe","block_index":310063,"block_time":310063000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(271,310062,'insert','blocks','{"block_hash":"0cbcbcd5b7f2dc288e3a34eab3d4212463a5a56e886804fb4f9f1cf929eadebe","block_index":310063,"block_time":310063000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(272,310063,'parse','blocks','{"block_index":310063,"ledger_hash":"49edce8190c2480fe3c6b3df7c7c5f13d34f67c3aef3b2aa12eaea603153aa83","messages_hash":"6aaade6a270f9a62a4dcaac7b6f1c07cd511a51f0094be18b1c8aff23e7951ef","txlist_hash":"a76d957ffb41dbfd83b8c92ad487582586cdf13ca49dc1dfc30e869afc8ca76b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(273,310064,'insert','blocks','{"block_hash":"e2db8065a195e85cde9ddb868a17d39893a60fb2b1255aa5f0c88729de7cbf30","block_index":310064,"block_time":310064000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(273,310063,'insert','blocks','{"block_hash":"e2db8065a195e85cde9ddb868a17d39893a60fb2b1255aa5f0c88729de7cbf30","block_index":310064,"block_time":310064000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(274,310064,'parse','blocks','{"block_index":310064,"ledger_hash":"a2a8c9946cf45490858deb15c8f277ec545854dfc02dc9d248a684c0c3544d6e","messages_hash":"4c574f2119c32253047618cfd26249d088f1f78b7a3122be6132431db5812d9d","txlist_hash":"0270a3faca0bc1a674fbd3632a1edbe8363d5115db8af56f135493f09a63df30"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(275,310065,'insert','blocks','{"block_hash":"8a7bc7a77c831ac4fd11b8a9d22d1b6a0661b07cef05c2e600c7fb683b861d2a","block_index":310065,"block_time":310065000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(275,310064,'insert','blocks','{"block_hash":"8a7bc7a77c831ac4fd11b8a9d22d1b6a0661b07cef05c2e600c7fb683b861d2a","block_index":310065,"block_time":310065000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(276,310065,'parse','blocks','{"block_index":310065,"ledger_hash":"ca1e5d385fd9cec1184d28095a6f4a2ec2914d40cc016309fe322dbb335cf2c3","messages_hash":"917bc990738cda65cd360163d7a69a3d52acfa1d93ef3d39e0684dd323519842","txlist_hash":"85484b37f06238496ca822d539fe09e0e2906d12cf5b6d77c6219af29ec7410a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(277,310066,'insert','blocks','{"block_hash":"b6959be51eb084747d301f7ccaf9e75f2292c9404633b1532e3692659939430d","block_index":310066,"block_time":310066000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(277,310065,'insert','blocks','{"block_hash":"b6959be51eb084747d301f7ccaf9e75f2292c9404633b1532e3692659939430d","block_index":310066,"block_time":310066000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(278,310066,'parse','blocks','{"block_index":310066,"ledger_hash":"73519f53874cc8cbe9052bf8dd18c590e0a4bd5bdc2a286c4930e8cfd006a993","messages_hash":"a59263137511047b1accc2820a60c67aaee255e806d3850abeafe6a7de0ebb57","txlist_hash":"9c360f75cdc0788ebf8a530fa967e8eaefc3876b19739dfef2f7307e1af414f2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(279,310067,'insert','blocks','{"block_hash":"8b08eae98d7193c9c01863fac6effb9162bda010daeacf9e0347112f233b8577","block_index":310067,"block_time":310067000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(279,310066,'insert','blocks','{"block_hash":"8b08eae98d7193c9c01863fac6effb9162bda010daeacf9e0347112f233b8577","block_index":310067,"block_time":310067000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(280,310067,'parse','blocks','{"block_index":310067,"ledger_hash":"5de09a95e36480de84f9d3c8db3e18b7bf5145f8b6ee6bde57b5c3de11274cbd","messages_hash":"9eef7e51b0077440af3cdd4cd771c9639cc28f7c45baa6a9792e5310382a2119","txlist_hash":"b4a32df829f1f913a9077d0ecd83362230bf893ffd654703538c5fc1c30a181e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(281,310068,'insert','blocks','{"block_hash":"9280e7297ef6313341bc81787a36acfc9af58f83a415afff5e3154f126cf52b5","block_index":310068,"block_time":310068000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(281,310067,'insert','blocks','{"block_hash":"9280e7297ef6313341bc81787a36acfc9af58f83a415afff5e3154f126cf52b5","block_index":310068,"block_time":310068000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(282,310068,'parse','blocks','{"block_index":310068,"ledger_hash":"be6a452931358d500eda0fd2aa3a91b86483fa847a7bf350f23d33d85712592e","messages_hash":"3e98d5f18828f0025e9ae510f23a142b57d1801ea8d4f33426caba2d861be081","txlist_hash":"fc4f551737950e1293a8718899c3b74c2ce76d8d1f58d6e22d10976ffd15eb24"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(283,310069,'insert','blocks','{"block_hash":"486351f0655bf594ffaab1980cff17353b640b63e9c27239109addece189a6f7","block_index":310069,"block_time":310069000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(283,310068,'insert','blocks','{"block_hash":"486351f0655bf594ffaab1980cff17353b640b63e9c27239109addece189a6f7","block_index":310069,"block_time":310069000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(284,310069,'parse','blocks','{"block_index":310069,"ledger_hash":"5940a47dfa1a1c8bc1e51f1e64100cd0604c74197c88b39f6f7a9d5b763a0b56","messages_hash":"6f2fcc910d98c607fb5b6373ae58afc4d60928eb6de15f43489fbd4221529157","txlist_hash":"53ce1fdeb3b9e39930ad127bc86bc71e7b497f24cc34af2a022200db36ebfa36"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(285,310070,'insert','blocks','{"block_hash":"8739e99f4dee8bebf1332f37f49a125348b40b93b74fe35579dd52bfba4fa7e5","block_index":310070,"block_time":310070000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(285,310069,'insert','blocks','{"block_hash":"8739e99f4dee8bebf1332f37f49a125348b40b93b74fe35579dd52bfba4fa7e5","block_index":310070,"block_time":310070000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(286,310070,'parse','blocks','{"block_index":310070,"ledger_hash":"6aebe68545207e7cc81d68c3aca801f0b39e276ac86e8e0130d5029eefb60e2e","messages_hash":"b24b67a141d2b58200f8e59427c601292b3cf1ffe3b1459bd06984b224be6286","txlist_hash":"0d482039b615aa55b721fef8ddaffcc2942838dbda8784940e9fdd8dba8b1465"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(287,310071,'insert','blocks','{"block_hash":"7a099aa1bba0ead577f1e44f35263a1f115ed6a868c98d4dd71609072ae7f80b","block_index":310071,"block_time":310071000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(287,310070,'insert','blocks','{"block_hash":"7a099aa1bba0ead577f1e44f35263a1f115ed6a868c98d4dd71609072ae7f80b","block_index":310071,"block_time":310071000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(288,310071,'parse','blocks','{"block_index":310071,"ledger_hash":"d005aff752907b93e2dfe442896c8976203f0139fb67cda3ea1936aea495e008","messages_hash":"616dba0e803fd874755b060b0585ffa3bfe5777161671e5438501c82a61dd167","txlist_hash":"8be094b2e99ec5c85a594d4a4059b7427ffbee3671190b84161fbf2fadb6f313"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(289,310072,'insert','blocks','{"block_hash":"7b17ecedc07552551b8129e068ae67cb176ca766ea3f6df74b597a94e3a7fc8a","block_index":310072,"block_time":310072000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(289,310071,'insert','blocks','{"block_hash":"7b17ecedc07552551b8129e068ae67cb176ca766ea3f6df74b597a94e3a7fc8a","block_index":310072,"block_time":310072000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(290,310072,'parse','blocks','{"block_index":310072,"ledger_hash":"781f0ebe67964c25640f0bf5624e08cda546dbbb6648bd6e8d9f280c7f075f7c","messages_hash":"d49d67e76802bf51725be6edba18b0699a224052de810192c76e1780d6fdd23f","txlist_hash":"9c5e049c1738beda53ffdffe18492b0af038a756278f2bdeaddaa1a726681ce5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(291,310073,'insert','blocks','{"block_hash":"ee0fe3cc9b3a48a2746b6090b63b442b97ea6055d48edcf4b2288396764c6943","block_index":310073,"block_time":310073000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(291,310072,'insert','blocks','{"block_hash":"ee0fe3cc9b3a48a2746b6090b63b442b97ea6055d48edcf4b2288396764c6943","block_index":310073,"block_time":310073000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(292,310073,'parse','blocks','{"block_index":310073,"ledger_hash":"83b5e1ca76fda895b144e8c03cda5fc3d18f6324b5413fd74923e51a94ccc53a","messages_hash":"d10c8c167ab11695802fabdfb86811f5e97dfd159eb48726599d1f6db6e8d79d","txlist_hash":"a7199dd9b360cc694f85a81ccf72fd614e6c0400d753132cb517ca9da55df86a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(293,310074,'insert','blocks','{"block_hash":"ceab38dfde01f711a187601731ad575d67cfe0b7dbc61dcd4f15baaef72089fb","block_index":310074,"block_time":310074000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(293,310073,'insert','blocks','{"block_hash":"ceab38dfde01f711a187601731ad575d67cfe0b7dbc61dcd4f15baaef72089fb","block_index":310074,"block_time":310074000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(294,310074,'parse','blocks','{"block_index":310074,"ledger_hash":"4293be396327c0aa3c56c77a9152068cc32612692c76ba94e8961c59a9ad780f","messages_hash":"8ffe9a16041d01db32f197ac722248cc5a965f8b898b9993fd22a85eea5db562","txlist_hash":"833f9d3ae03e5819eec47318d948999dfbe35fcbe66766f985b6ca71eccae54a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(295,310075,'insert','blocks','{"block_hash":"ef547198c6e36d829f117cfd7077ccde45158e3c545152225fa24dba7a26847b","block_index":310075,"block_time":310075000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(295,310074,'insert','blocks','{"block_hash":"ef547198c6e36d829f117cfd7077ccde45158e3c545152225fa24dba7a26847b","block_index":310075,"block_time":310075000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(296,310075,'parse','blocks','{"block_index":310075,"ledger_hash":"d08b93b609f1766534cb0c30502350b9e4ccc4a885ebff7633e9e5c5b52d8e90","messages_hash":"292b6736907d722669ccff7de41f5768bf856990f27bed1bc6bbae4d86a698b0","txlist_hash":"7db8bbcaa76b087fbcdbd8f5b428b3587c494f0cd7d458a2d519abb0ef26f424"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(297,310076,'insert','blocks','{"block_hash":"3b0499c2e8e8f0252c7288d4ecf66efc426ca37aad3524424d14c8bc6f8b0d92","block_index":310076,"block_time":310076000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(297,310075,'insert','blocks','{"block_hash":"3b0499c2e8e8f0252c7288d4ecf66efc426ca37aad3524424d14c8bc6f8b0d92","block_index":310076,"block_time":310076000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(298,310076,'parse','blocks','{"block_index":310076,"ledger_hash":"06c72d219df429f2873af74b6250f3d12996cce14496d151bf8bd4cf819532e4","messages_hash":"454f362796ec85e40ff999ad703786cb1566dc265cbad79679a21863df744616","txlist_hash":"8f6a902dd8d5d573658f07e8ac598ccc46ed49bff95b2a9ed89a051c852215a5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(299,310077,'insert','blocks','{"block_hash":"d2adeefa9024ab3ff2822bc36acf19b6c647cea118cf15b86c6bc00c3322e7dd","block_index":310077,"block_time":310077000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(299,310076,'insert','blocks','{"block_hash":"d2adeefa9024ab3ff2822bc36acf19b6c647cea118cf15b86c6bc00c3322e7dd","block_index":310077,"block_time":310077000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(300,310077,'parse','blocks','{"block_index":310077,"ledger_hash":"0ff019cc4b9b8a394aad1b9f8f579fd5c4cc48a846e4fe71ab2f45226cec5a1e","messages_hash":"f1fd80fbd94b33058c5f6c79aba84481468967589830db3d32883d8543d32367","txlist_hash":"e1ab0a4cbd4e60c5b1da333c5ef542bbc1d8bbd7709fdb35374c072a1f54d38c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(301,310078,'insert','blocks','{"block_hash":"f6c17115ef0efe489c562bcda4615892b4d4b39db0c9791fe193d4922bd82cd6","block_index":310078,"block_time":310078000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(301,310077,'insert','blocks','{"block_hash":"f6c17115ef0efe489c562bcda4615892b4d4b39db0c9791fe193d4922bd82cd6","block_index":310078,"block_time":310078000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(302,310078,'parse','blocks','{"block_index":310078,"ledger_hash":"6ea40a02464725d0ba45b9969bdbb7529ae5e3ca794ae00abf4783bfc9667104","messages_hash":"ced300cd87e34fe62b096d945571be63ab5bba0fc53d62541a52f6c1274f6e3e","txlist_hash":"be6f6965b6ba8aae157eb48f28bce3fa91c3bbc22b88fc3ee8d4f126c1538032"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(303,310079,'insert','blocks','{"block_hash":"f2fbd2074d804e631db44cb0fb2e1db3fdc367e439c21ffc40d73104c4d7069c","block_index":310079,"block_time":310079000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(303,310078,'insert','blocks','{"block_hash":"f2fbd2074d804e631db44cb0fb2e1db3fdc367e439c21ffc40d73104c4d7069c","block_index":310079,"block_time":310079000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(304,310079,'parse','blocks','{"block_index":310079,"ledger_hash":"076abf036bd51c47525fe4e638dbad403a8a1667a5b7c2f81ffc2a70e79b80a8","messages_hash":"dfd50e735f06f6aae4bcd58b484f39021e38ee290d41240b18b1744d3de653f7","txlist_hash":"eb97110f496f9813e14f127af2cdcdb26d54e9745e274fe227fb0646cc132c29"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(305,310080,'insert','blocks','{"block_hash":"42943b914d9c367000a78b78a544cc4b84b1df838aadde33fe730964a89a3a6c","block_index":310080,"block_time":310080000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(305,310079,'insert','blocks','{"block_hash":"42943b914d9c367000a78b78a544cc4b84b1df838aadde33fe730964a89a3a6c","block_index":310080,"block_time":310080000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(306,310080,'parse','blocks','{"block_index":310080,"ledger_hash":"8cc2e62f7b3ae2c89977ee9e31acacff38f944d00a978e9b0e48678487cdbe27","messages_hash":"4b3120593291e81d0a0519478f45b1c17aad478f384964dadbb6631295912aa7","txlist_hash":"93c6c5967f4d297df962f2853f2a2ba3870f5692c8835413c08528cf243985dc"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(307,310081,'insert','blocks','{"block_hash":"6554f9d307976249e7b7e260e08046b3b55d318f8b6af627fed5be3063f123c4","block_index":310081,"block_time":310081000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(307,310080,'insert','blocks','{"block_hash":"6554f9d307976249e7b7e260e08046b3b55d318f8b6af627fed5be3063f123c4","block_index":310081,"block_time":310081000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(308,310081,'parse','blocks','{"block_index":310081,"ledger_hash":"ec86fa6786b598b091121fc2001650bc04668d26d88805efff7271312c76a373","messages_hash":"815500c2b55e7b9eadf7b1436407dc29d17fcbd5145aee3cc14b9559fdc38600","txlist_hash":"e6cf70178316b3c594c60d10ac1ee3783f1dafe5054ce4c6fb932bf3c771f703"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(309,310082,'insert','blocks','{"block_hash":"4f1ef91b1dcd575f8ac2e66a67715500cbca154bd6f3b8148bb7015a6aa6c644","block_index":310082,"block_time":310082000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(309,310081,'insert','blocks','{"block_hash":"4f1ef91b1dcd575f8ac2e66a67715500cbca154bd6f3b8148bb7015a6aa6c644","block_index":310082,"block_time":310082000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(310,310082,'parse','blocks','{"block_index":310082,"ledger_hash":"6b720db96b2d10816e5022ab8c61fafba49cc6bf484909fb500295451e61f768","messages_hash":"33014d2d503328d843a057ed2d544af2dd00c7c7dfe923c4494d5f04a5e5ea2c","txlist_hash":"254cf1d1ac865c611a3d9fbd78001152928a52ad94fd640c526e043ce7c0fdb3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(311,310083,'insert','blocks','{"block_hash":"9b1f6fd6ff9b0dc4e37603cfb0625f49067c775b99e12492afd85392d3c8d850","block_index":310083,"block_time":310083000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(311,310082,'insert','blocks','{"block_hash":"9b1f6fd6ff9b0dc4e37603cfb0625f49067c775b99e12492afd85392d3c8d850","block_index":310083,"block_time":310083000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(312,310083,'parse','blocks','{"block_index":310083,"ledger_hash":"d8c6fabb9b9dff0f1f3ba35e75c08be55dc4ded8dcf54e51f0cd857625b87dc8","messages_hash":"7b5d4bd5a47db25e25b6fbfed91c263663202753248a1953369da64a782ac8cb","txlist_hash":"a34f7e98c65b95becae5908e74cfedcb846366a83605f9d8685e98ac629d1278"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(313,310084,'insert','blocks','{"block_hash":"1e0972523e80306441b9f4157f171716199f1428db2e818a7f7817ccdc8859e3","block_index":310084,"block_time":310084000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(313,310083,'insert','blocks','{"block_hash":"1e0972523e80306441b9f4157f171716199f1428db2e818a7f7817ccdc8859e3","block_index":310084,"block_time":310084000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(314,310084,'parse','blocks','{"block_index":310084,"ledger_hash":"eba03194b13ca764dbfbb86f86d16841df4486f12c26a214f7f1020468b52d27","messages_hash":"b9ce189b79f426b6e6eb9d9bd6ea4272dee9713c93e9d842183ccb6ae66f9211","txlist_hash":"e5a15333b0539a58bcf306d993b0be078d8dfd3cf3f5929a690da5ac534eff5e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(315,310085,'insert','blocks','{"block_hash":"c5b6e9581831e3bc5848cd7630c499bca26d9ece5156d36579bdb72d54817e34","block_index":310085,"block_time":310085000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(315,310084,'insert','blocks','{"block_hash":"c5b6e9581831e3bc5848cd7630c499bca26d9ece5156d36579bdb72d54817e34","block_index":310085,"block_time":310085000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(316,310085,'parse','blocks','{"block_index":310085,"ledger_hash":"d7fa8085722edc91ea5cb907e439649533e32ad5429b52bc10463629719af5ab","messages_hash":"20abfbccb4ae6786f1ef5249f27b96ce3a561e38705295ae96433606a9ee2f59","txlist_hash":"bfedffe97e2bf812728130721dec204767d92ab05bfcf2c4596b5386fc6ea380"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(317,310086,'insert','blocks','{"block_hash":"080c1dc55a4ecf4824cf9840602498cfc35b5f84099f50b71b45cb63834c7a78","block_index":310086,"block_time":310086000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(317,310085,'insert','blocks','{"block_hash":"080c1dc55a4ecf4824cf9840602498cfc35b5f84099f50b71b45cb63834c7a78","block_index":310086,"block_time":310086000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(318,310086,'parse','blocks','{"block_index":310086,"ledger_hash":"e84e0b26a5a67af1bca0cdadadea17b52b79f160d8acc0281289de1c70bef248","messages_hash":"5f674cafe43098f7d91995019a4796221cb521683242efb9350aebd6f0962761","txlist_hash":"2b4c3ff824d597cc1376a524f89bac6deef025a71395e848b51e9c06002d7f12"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(319,310087,'insert','blocks','{"block_hash":"4ec8cb1c38b22904e8087a034a6406b896eff4dd28e7620601c6bddf82e2738c","block_index":310087,"block_time":310087000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(319,310086,'insert','blocks','{"block_hash":"4ec8cb1c38b22904e8087a034a6406b896eff4dd28e7620601c6bddf82e2738c","block_index":310087,"block_time":310087000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(320,310087,'parse','blocks','{"block_index":310087,"ledger_hash":"ac3522ba0e8278bac956b5f9d7af271424f8e4eff23d57d2a5ff88416dd02ff4","messages_hash":"aa6c5e822ec3d28fab4b599a922cb46afe34d4d8b075d59266bd814704bf3b30","txlist_hash":"2b3b181734d815e3cd024f6fd91b11de8cd457bdc5f833520af281a6c42ab391"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(321,310088,'insert','blocks','{"block_hash":"e945c815c433cbddd0bf8e66c5c23b51072483492acda98f5c2c201020a8c5b3","block_index":310088,"block_time":310088000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(321,310087,'insert','blocks','{"block_hash":"e945c815c433cbddd0bf8e66c5c23b51072483492acda98f5c2c201020a8c5b3","block_index":310088,"block_time":310088000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(322,310088,'parse','blocks','{"block_index":310088,"ledger_hash":"86255a3e32e6c7a96d0f0a6e7815d61d9a970272f1df38bb0c29ee9f2051f2e4","messages_hash":"1aecea3bd5175ddda4a31d3ffc6dbc1873210b9191b76b4e12e77b96d7e4e53c","txlist_hash":"9092b97fab9af004edd169f26446c6712e5e1ed1d5f94fc5ac0b49565fa65b4b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(323,310089,'insert','blocks','{"block_hash":"0382437f895ef3e7e38bf025fd4f606fd44d4bbd6aea71dbdc4ed11a7cd46f33","block_index":310089,"block_time":310089000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(323,310088,'insert','blocks','{"block_hash":"0382437f895ef3e7e38bf025fd4f606fd44d4bbd6aea71dbdc4ed11a7cd46f33","block_index":310089,"block_time":310089000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(324,310089,'parse','blocks','{"block_index":310089,"ledger_hash":"9694fd19263381693133a47584432de876ef1e0a32060d52c8db96811ff7d09e","messages_hash":"46153be228fa8f944bbdf64b72e4ab8089c93152fa4e70e99866e57496899e11","txlist_hash":"06ae398816ea8ca96fa424903182c7df9ce93c5d1bdbc2ead089ee71acb90531"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(325,310090,'insert','blocks','{"block_hash":"b756db71dc037b5a4582de354a3347371267d31ebda453e152f0a13bb2fae969","block_index":310090,"block_time":310090000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(325,310089,'insert','blocks','{"block_hash":"b756db71dc037b5a4582de354a3347371267d31ebda453e152f0a13bb2fae969","block_index":310090,"block_time":310090000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(326,310090,'parse','blocks','{"block_index":310090,"ledger_hash":"3cb1b469cc6627cbed3f0db1a00370d5c95edf9940f8a4c9406fc78076640d90","messages_hash":"1cb847cbd07a241995f1c2afa6efb8c9557104fae1b36048f241e7b1ff62b63b","txlist_hash":"2c688b2021aa321432ae1bd5a60a9f65cdb6d3720512ca2c304bd2773e7647d9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(327,310091,'insert','blocks','{"block_hash":"734a9aa485f36399d5efb74f3b9c47f8b5f6fd68c9967f134b14cfe7e2d7583c","block_index":310091,"block_time":310091000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(327,310090,'insert','blocks','{"block_hash":"734a9aa485f36399d5efb74f3b9c47f8b5f6fd68c9967f134b14cfe7e2d7583c","block_index":310091,"block_time":310091000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(328,310091,'parse','blocks','{"block_index":310091,"ledger_hash":"cac7cc49c1d632aef2e9bcb3456f60df2ff11110c4e9980989ce0f2d8a5835e1","messages_hash":"e48ef422b958d8058d5cd6aa702072825fd190a03b58f569671ee58d6ca2306f","txlist_hash":"2a7ce0455e84f973c078752f1c0ea93ffdbe993f239baeb7ed947e749c119dfb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(329,310092,'insert','blocks','{"block_hash":"56386beb65f9228740d4ad43a1c575645f6daf59e0dd9f22551c59215b5e8c3d","block_index":310092,"block_time":310092000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(329,310091,'insert','blocks','{"block_hash":"56386beb65f9228740d4ad43a1c575645f6daf59e0dd9f22551c59215b5e8c3d","block_index":310092,"block_time":310092000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(330,310092,'parse','blocks','{"block_index":310092,"ledger_hash":"1614a317b1144c7f08fb2785bf468bb299b9f19450331b7fdfebd510fa07e574","messages_hash":"ac58d3aa1c81f62a3b39215d28d911e1d7b2c2b16d5fb942dc81c215231d9703","txlist_hash":"270190f8eea6e059acfe66f7369986d3748f707f3ad0eaa2e396a190cc047a6f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(331,310093,'insert','blocks','{"block_hash":"a74a2425f2f4be24bb5f715173e6756649e1cbf1b064aeb1ef60e0b94b418ddc","block_index":310093,"block_time":310093000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(331,310092,'insert','blocks','{"block_hash":"a74a2425f2f4be24bb5f715173e6756649e1cbf1b064aeb1ef60e0b94b418ddc","block_index":310093,"block_time":310093000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(332,310093,'parse','blocks','{"block_index":310093,"ledger_hash":"631d42f4b3fb091a4c67f737bc2da60b8bf9820d27c758f5b9453b40813c5bc5","messages_hash":"af5aec74565edcf44587e0eb2782fc4fc4cf1506001b8a0e45401bc8186ed36b","txlist_hash":"35ca62f9b66717328f41e23c80e72395f4ece758ce3ca9aabe1d1edd87d06016"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(333,310094,'insert','blocks','{"block_hash":"2a8f976f20c4e89ff01071915ac96ee35192d54df3a246bf61fd4a0cccfb5b23","block_index":310094,"block_time":310094000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(333,310093,'insert','blocks','{"block_hash":"2a8f976f20c4e89ff01071915ac96ee35192d54df3a246bf61fd4a0cccfb5b23","block_index":310094,"block_time":310094000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(334,310094,'parse','blocks','{"block_index":310094,"ledger_hash":"2b3f460da72fc0a9b3a720abca80bff0c44654287de69567c43c62a5557144bf","messages_hash":"3184f5a18eb60486361d3987a39fe534d6d0a5e6fb450dcc8835c6c37e11ed19","txlist_hash":"37d35cf95c6f102413739a672d5dc1c3b0760068de256676b336c631bdc94447"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(335,310095,'insert','blocks','{"block_hash":"bed0fa40c9981223fb40b3be8124ca619edc9dd34d0c907369477ea92e5d2cd2","block_index":310095,"block_time":310095000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(335,310094,'insert','blocks','{"block_hash":"bed0fa40c9981223fb40b3be8124ca619edc9dd34d0c907369477ea92e5d2cd2","block_index":310095,"block_time":310095000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(336,310095,'parse','blocks','{"block_index":310095,"ledger_hash":"db62bf94ddb276cf55ddfe73f8023e760788647910807adff6e0672ce1d5e23d","messages_hash":"a73f6efcbccef38fded18f60759919ae1bcdcbb425eaff8b4225d1e6d411c59c","txlist_hash":"2eec38760b106cf52b3bf0fa51198348cb611ae9bb75edd8e4a343e7fef1e042"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(337,310096,'insert','blocks','{"block_hash":"306aeec3db435fabffdf88c2f26ee83caa4c2426375a33daa2be041dbd27ea2f","block_index":310096,"block_time":310096000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(337,310095,'insert','blocks','{"block_hash":"306aeec3db435fabffdf88c2f26ee83caa4c2426375a33daa2be041dbd27ea2f","block_index":310096,"block_time":310096000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(338,310096,'parse','blocks','{"block_index":310096,"ledger_hash":"1c427808f1eb1972df57b51eea9f3405d3d63a1d58c5a3faba616d7160e3a264","messages_hash":"c95f2aa93c30ec8c210a78b3439c66b1586e3eab75991b87296393289c1dbd07","txlist_hash":"be57a1f4088437c89e3bdd7c9456b8ac9dc6011d15ada8d5432ab662f80e9a52"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(339,310097,'insert','blocks','{"block_hash":"13e8e16e67c7cdcc80d477491e554b43744f90e8e1a9728439a11fab42cefadf","block_index":310097,"block_time":310097000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(339,310096,'insert','blocks','{"block_hash":"13e8e16e67c7cdcc80d477491e554b43744f90e8e1a9728439a11fab42cefadf","block_index":310097,"block_time":310097000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(340,310097,'parse','blocks','{"block_index":310097,"ledger_hash":"cd28b5ac0f80f8815467663c1e90b15ffe46ce067a1b2ce004b0d371cb0ceb16","messages_hash":"f36348ab193e851709e6f1e2977ff3b954bcfc208e81a1a2faff95014cbfc64c","txlist_hash":"cf5fed759ba01d430d2e97ed6d52503a67c35688f02ad6742e87f1da1b468ae0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(341,310098,'insert','blocks','{"block_hash":"ca5bca4b5ec4fa6183e05176abe921cff884c4e20910fab55b603cef48dc3bca","block_index":310098,"block_time":310098000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(341,310097,'insert','blocks','{"block_hash":"ca5bca4b5ec4fa6183e05176abe921cff884c4e20910fab55b603cef48dc3bca","block_index":310098,"block_time":310098000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(342,310098,'parse','blocks','{"block_index":310098,"ledger_hash":"69adfbe756c116e395fb3a5170b57210ac2721b07144b3d7a35c4327f28e28c9","messages_hash":"ca4a3f93e7ffdbdfce2fdc86ab481462f5d9ea6c30968c939d784a837736b3ef","txlist_hash":"528e0ea934cb95d328ad13fb3a3a47a1d89824ee44abbb2cc271d707bb6d62d1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(343,310099,'insert','blocks','{"block_hash":"3c4c2279cd7de0add5ec469648a845875495a7d54ebfb5b012dcc5a197b7992a","block_index":310099,"block_time":310099000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(343,310098,'insert','blocks','{"block_hash":"3c4c2279cd7de0add5ec469648a845875495a7d54ebfb5b012dcc5a197b7992a","block_index":310099,"block_time":310099000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(344,310099,'parse','blocks','{"block_index":310099,"ledger_hash":"d50cb66a25a410db360cdf749b5d10932410b5e37c3e5d3d834a65b5671dcca6","messages_hash":"a953aa10f4e569ce2037e817593575ae40b4423b9f857d5b38e09afbf07e1a12","txlist_hash":"f0e0e40238d13f69c9c40cad5b8be218cb09af9bc061e728b56d74a42182788b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(345,310100,'insert','blocks','{"block_hash":"96925c05b3c7c80c716f5bef68d161c71d044252c766ca0e3f17f255764242cb","block_index":310100,"block_time":310100000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(345,310099,'insert','blocks','{"block_hash":"96925c05b3c7c80c716f5bef68d161c71d044252c766ca0e3f17f255764242cb","block_index":310100,"block_time":310100000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(346,310100,'parse','blocks','{"block_index":310100,"ledger_hash":"384f8d2eda5f1b7b8273ef149ac37fcaa9ae51865fd57bd348339579b8a078eb","messages_hash":"23ce68e6c5fde9490e384c6204ce16bcf645cb1fc006622de99beeb1b8ea40e3","txlist_hash":"19ac618404aade5a0914a9a9c159ea229384be303a320b08b9915474beccf1df"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(347,310101,'insert','blocks','{"block_hash":"369472409995ca1a2ebecbad6bf9dab38c378ab1e67e1bdf13d4ce1346731cd6","block_index":310101,"block_time":310101000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(347,310100,'insert','blocks','{"block_hash":"369472409995ca1a2ebecbad6bf9dab38c378ab1e67e1bdf13d4ce1346731cd6","block_index":310101,"block_time":310101000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(348,310101,'parse','blocks','{"block_index":310101,"ledger_hash":"5eff25450225c71f85f34466d6e359001eed8f05ea5042e7d65c30ccfeb6098f","messages_hash":"d85c0fed7144a53f31159f376756a35a8ce777d7dd174ed300eead63079bfdf0","txlist_hash":"7d02630f0fbe3e5c3b16766f1d04dd1a83c305f74f0546276d970b36e870ba8e"}',0,'BLOCK_PARSED'); -- Triggers and indices on messages CREATE TRIGGER block_update_messages diff --git a/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_2_of_3.sql b/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_2_of_3.sql index 242e97ecc6..a98db1ec2f 100644 --- a/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_2_of_3.sql +++ b/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_2_of_3.sql @@ -465,26 +465,26 @@ CREATE TABLE messages( bindings TEXT, timestamp INTEGER, event TEXT); -INSERT INTO messages VALUES(0,309999,'insert','blocks','{"block_hash":"8b3bef249cb3b0fa23a4936c1249b6bd41daeadc848c8d2e409ea1cbc10adfe7","block_index":309999,"block_time":309999000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(0,0,'insert','blocks','{"block_hash":"8b3bef249cb3b0fa23a4936c1249b6bd41daeadc848c8d2e409ea1cbc10adfe7","block_index":309999,"block_time":309999000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1,309999,'parse','blocks','{"block_index":309999,"ledger_hash":"63f0fef31d02da85fa779e9a0e1b585b1a6a4e59e14564249e288e074e91c223","messages_hash":"63f0fef31d02da85fa779e9a0e1b585b1a6a4e59e14564249e288e074e91c223","txlist_hash":"63f0fef31d02da85fa779e9a0e1b585b1a6a4e59e14564249e288e074e91c223"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(2,310000,'insert','blocks','{"block_hash":"505d8d82c4ced7daddef7ed0b05ba12ecc664176887b938ef56c6af276f3b30c","block_index":310000,"block_time":310000000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(2,309999,'insert','blocks','{"block_hash":"505d8d82c4ced7daddef7ed0b05ba12ecc664176887b938ef56c6af276f3b30c","block_index":310000,"block_time":310000000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(3,310000,'insert','transactions','{"block_hash":"505d8d82c4ced7daddef7ed0b05ba12ecc664176887b938ef56c6af276f3b30c","block_index":310000,"block_time":310000000,"btc_amount":62000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":5625,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"15b35d5497f454c43576f21a1b61d99bde25dfc5aae1a4796dcf55e739d6a399","tx_index":1}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(4,310000,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310000,"calling_function":"burn","event":"15b35d5497f454c43576f21a1b61d99bde25dfc5aae1a4796dcf55e739d6a399","quantity":93000000000,"tx_index":1}',0,'CREDIT'); INSERT INTO messages VALUES(5,310000,'insert','burns','{"block_index":310000,"burned":62000000,"earned":93000000000,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"15b35d5497f454c43576f21a1b61d99bde25dfc5aae1a4796dcf55e739d6a399","tx_index":1}',0,'BURN'); INSERT INTO messages VALUES(6,310000,'parse','blocks','{"block_index":310000,"ledger_hash":"cff3ba7c92f6b318eb4a4a5e2b90b655fc055d4e8a82101b813aef6e1c6152e4","messages_hash":"f25f391e967671ba5a4efd1b0766b90d3d0443b51d9507f85125d9d1ef3a0308","txlist_hash":"9f6f20e36fd2b2b44df6e91fbfaeffc6d7fae9917b27d196245ee90c36d99ff1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(7,310001,'insert','blocks','{"block_hash":"3c9f6a9c6cac46a9273bd3db39ad775acd5bc546378ec2fb0587e06e112cc78e","block_index":310001,"block_time":310001000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(7,310000,'insert','blocks','{"block_hash":"3c9f6a9c6cac46a9273bd3db39ad775acd5bc546378ec2fb0587e06e112cc78e","block_index":310001,"block_time":310001000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(8,310001,'insert','transactions','{"block_hash":"3c9f6a9c6cac46a9273bd3db39ad775acd5bc546378ec2fb0587e06e112cc78e","block_index":310001,"block_time":310001000,"btc_amount":1000,"data":"0000000000000000000000010000000002faf080","destination":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","fee":7650,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"121285e4ce5c17fbd6e0b0277702af982cdc14054735154a9043beecb247b84f","tx_index":2}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(9,310001,'insert','debits','{"action":"send","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310001,"event":"121285e4ce5c17fbd6e0b0277702af982cdc14054735154a9043beecb247b84f","quantity":50000000,"tx_index":2}',0,'DEBIT'); INSERT INTO messages VALUES(10,310001,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","asset":"XCP","block_index":310001,"calling_function":"send","event":"121285e4ce5c17fbd6e0b0277702af982cdc14054735154a9043beecb247b84f","quantity":50000000,"tx_index":2}',0,'CREDIT'); INSERT INTO messages VALUES(11,310001,'insert','sends','{"asset":"XCP","block_index":310001,"destination":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","quantity":50000000,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"121285e4ce5c17fbd6e0b0277702af982cdc14054735154a9043beecb247b84f","tx_index":2}',0,'SEND'); INSERT INTO messages VALUES(12,310001,'parse','transactions','{"supported":true,"tx_hash":"121285e4ce5c17fbd6e0b0277702af982cdc14054735154a9043beecb247b84f","tx_index":2}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(13,310001,'parse','blocks','{"block_index":310001,"ledger_hash":"2281de0177f4fcf8d730e2751d7b9fb5da4df741196bbcaff470c7860a2ca0b6","messages_hash":"e3aa0380b1a456cdf8335e2c4dcf2bf5cd54a82bf155a91cf04c9ecc8ff63bdb","txlist_hash":"49836952844fe3f887e718d236efa6b1f4cc0b81cfc010f79a6349562ebfc162"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(14,310002,'insert','blocks','{"block_hash":"fbb60f1144e1f7d4dc036a4a158a10ea6dea2ba6283a723342a49b8eb5cc9964","block_index":310002,"block_time":310002000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(14,310001,'insert','blocks','{"block_hash":"fbb60f1144e1f7d4dc036a4a158a10ea6dea2ba6283a723342a49b8eb5cc9964","block_index":310002,"block_time":310002000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(15,310002,'insert','transactions','{"block_hash":"fbb60f1144e1f7d4dc036a4a158a10ea6dea2ba6283a723342a49b8eb5cc9964","block_index":310002,"block_time":310002000,"btc_amount":0,"data":"0000000a00000000000000000000000002faf08000000000000000010000000005f5e100000a0000000000000000","destination":"","fee":1000000,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"c953eb18873ce8aed42456df0ece8e4678e13282d9917916e7a4aec10e828375","tx_index":3}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(16,310002,'insert','orders','{"block_index":310002,"expiration":10,"expire_index":310012,"fee_provided":1000000,"fee_provided_remaining":1000000,"fee_required":0,"fee_required_remaining":0,"get_asset":"XCP","get_quantity":100000000,"get_remaining":100000000,"give_asset":"BTC","give_quantity":50000000,"give_remaining":50000000,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"open","tx_hash":"c953eb18873ce8aed42456df0ece8e4678e13282d9917916e7a4aec10e828375","tx_index":3}',0,'OPEN_ORDER'); INSERT INTO messages VALUES(17,310002,'parse','transactions','{"supported":true,"tx_hash":"c953eb18873ce8aed42456df0ece8e4678e13282d9917916e7a4aec10e828375","tx_index":3}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(18,310002,'parse','blocks','{"block_index":310002,"ledger_hash":"802742a55d8ab83de24c45efb86d1daa0ad4e565cc4db6dcaa5cedb16ec4125f","messages_hash":"d8df33aece3f5184376a2f4a13cfb52ed09ab73cdbdffd84dadde3ca8e4d4b9f","txlist_hash":"017a0ddcf461ffcc3c89042ba6a6337efcc276c8f144daad445ba0e4a36bab33"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(19,310003,'insert','blocks','{"block_hash":"d50825dcb32bcf6f69994d616eba18de7718d3d859497e80751b2cb67e333e8a","block_index":310003,"block_time":310003000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(19,310002,'insert','blocks','{"block_hash":"d50825dcb32bcf6f69994d616eba18de7718d3d859497e80751b2cb67e333e8a","block_index":310003,"block_time":310003000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(20,310003,'insert','transactions','{"block_hash":"d50825dcb32bcf6f69994d616eba18de7718d3d859497e80751b2cb67e333e8a","block_index":310003,"block_time":310003000,"btc_amount":0,"data":"0000000a00000000000000010000000006422c4000000000000000000000000002faf080000a00000000000dbba0","destination":"","fee":6800,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"89a44a3314b298a83d5d14c8646900a5122b8a1e8f6e0528e73ea82044d1726a","tx_index":4}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(21,310003,'insert','debits','{"action":"open order","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310003,"event":"89a44a3314b298a83d5d14c8646900a5122b8a1e8f6e0528e73ea82044d1726a","quantity":105000000,"tx_index":4}',0,'DEBIT'); INSERT INTO messages VALUES(22,310003,'insert','orders','{"block_index":310003,"expiration":10,"expire_index":310013,"fee_provided":6800,"fee_provided_remaining":6800,"fee_required":900000,"fee_required_remaining":900000,"get_asset":"BTC","get_quantity":50000000,"get_remaining":50000000,"give_asset":"XCP","give_quantity":105000000,"give_remaining":105000000,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"open","tx_hash":"89a44a3314b298a83d5d14c8646900a5122b8a1e8f6e0528e73ea82044d1726a","tx_index":4}',0,'OPEN_ORDER'); @@ -493,14 +493,14 @@ INSERT INTO messages VALUES(24,310003,'update','orders','{"fee_provided_remainin INSERT INTO messages VALUES(25,310003,'insert','order_matches','{"backward_asset":"XCP","backward_quantity":100000000,"block_index":310003,"fee_paid":857142,"forward_asset":"BTC","forward_quantity":50000000,"id":"c953eb18873ce8aed42456df0ece8e4678e13282d9917916e7a4aec10e828375_89a44a3314b298a83d5d14c8646900a5122b8a1e8f6e0528e73ea82044d1726a","match_expire_index":310023,"status":"pending","tx0_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx0_block_index":310002,"tx0_expiration":10,"tx0_hash":"c953eb18873ce8aed42456df0ece8e4678e13282d9917916e7a4aec10e828375","tx0_index":3,"tx1_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx1_block_index":310003,"tx1_expiration":10,"tx1_hash":"89a44a3314b298a83d5d14c8646900a5122b8a1e8f6e0528e73ea82044d1726a","tx1_index":4}',0,'ORDER_MATCH'); INSERT INTO messages VALUES(26,310003,'parse','transactions','{"supported":true,"tx_hash":"89a44a3314b298a83d5d14c8646900a5122b8a1e8f6e0528e73ea82044d1726a","tx_index":4}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(27,310003,'parse','blocks','{"block_index":310003,"ledger_hash":"ed279c6a985256134cfb39f1283ec97c8dc800b7255a3e8243ca9846884d0378","messages_hash":"e8a8467421c8964ff378e119f97e7cf43ee424041b1d660cbd6493b23213f79b","txlist_hash":"8ec458bf08abe2f3634eafac5af321f02cf5d470c2a87301b8061efe3dcc644f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(28,310004,'insert','blocks','{"block_hash":"60cdc0ac0e3121ceaa2c3885f21f5789f49992ffef6e6ff99f7da80e36744615","block_index":310004,"block_time":310004000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(28,310003,'insert','blocks','{"block_hash":"60cdc0ac0e3121ceaa2c3885f21f5789f49992ffef6e6ff99f7da80e36744615","block_index":310004,"block_time":310004000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(29,310004,'insert','transactions','{"block_hash":"60cdc0ac0e3121ceaa2c3885f21f5789f49992ffef6e6ff99f7da80e36744615","block_index":310004,"block_time":310004000,"btc_amount":50000000,"data":"0000000bc953eb18873ce8aed42456df0ece8e4678e13282d9917916e7a4aec10e82837589a44a3314b298a83d5d14c8646900a5122b8a1e8f6e0528e73ea82044d1726a","destination":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","fee":9675,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"f0c58099c1614dcf2b8fd12be01c63427a5877b8c0367ecadea31ae9eb9714e6","tx_index":5}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(30,310004,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310004,"calling_function":"btcpay","event":"f0c58099c1614dcf2b8fd12be01c63427a5877b8c0367ecadea31ae9eb9714e6","quantity":100000000,"tx_index":5}',0,'CREDIT'); INSERT INTO messages VALUES(31,310004,'update','order_matches','{"id":"c953eb18873ce8aed42456df0ece8e4678e13282d9917916e7a4aec10e828375_89a44a3314b298a83d5d14c8646900a5122b8a1e8f6e0528e73ea82044d1726a","order_match_id":"c953eb18873ce8aed42456df0ece8e4678e13282d9917916e7a4aec10e828375_89a44a3314b298a83d5d14c8646900a5122b8a1e8f6e0528e73ea82044d1726a","status":"completed"}',0,'ORDER_MATCH_UPDATE'); INSERT INTO messages VALUES(32,310004,'insert','btcpays','{"block_index":310004,"btc_amount":50000000,"destination":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","order_match_id":"c953eb18873ce8aed42456df0ece8e4678e13282d9917916e7a4aec10e828375_89a44a3314b298a83d5d14c8646900a5122b8a1e8f6e0528e73ea82044d1726a","source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"f0c58099c1614dcf2b8fd12be01c63427a5877b8c0367ecadea31ae9eb9714e6","tx_index":5}',0,'BTC_PAY'); INSERT INTO messages VALUES(33,310004,'parse','transactions','{"supported":true,"tx_hash":"f0c58099c1614dcf2b8fd12be01c63427a5877b8c0367ecadea31ae9eb9714e6","tx_index":5}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(34,310004,'parse','blocks','{"block_index":310004,"ledger_hash":"bba1ec90ee149be7d8a88ff9df1fca931e076e885be21bc822637829a8675e02","messages_hash":"7942936fb941c33d235d0f95f868587159b956e31c7ebd591e09117f54faa9bb","txlist_hash":"e2e334cb3c300e622a50d2c206fe532a3320f56c445dc1a9dec750417260fe9a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(35,310005,'insert','blocks','{"block_hash":"8005c2926b7ecc50376642bc661a49108b6dc62636463a5c492b123e2184cd9a","block_index":310005,"block_time":310005000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(35,310004,'insert','blocks','{"block_hash":"8005c2926b7ecc50376642bc661a49108b6dc62636463a5c492b123e2184cd9a","block_index":310005,"block_time":310005000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(36,310005,'insert','transactions','{"block_hash":"8005c2926b7ecc50376642bc661a49108b6dc62636463a5c492b123e2184cd9a","block_index":310005,"block_time":310005000,"btc_amount":0,"data":"000000140000000000004767000000003b9aca000100000000000000000000","destination":"","fee":6800,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"9238105e39efd4b7d428ad14011ad0c0f366bdcd150afa954e1f25c0cf4c2cc9","tx_index":6}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(37,310005,'insert','debits','{"action":"issuance fee","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310005,"event":"9238105e39efd4b7d428ad14011ad0c0f366bdcd150afa954e1f25c0cf4c2cc9","quantity":50000000,"tx_index":6}',0,'DEBIT'); INSERT INTO messages VALUES(38,310005,'insert','assets','{"asset_id":"18279","asset_longname":null,"asset_name":"BBBB","block_index":310005}',0,'ASSET_CREATION'); @@ -508,7 +508,7 @@ INSERT INTO messages VALUES(39,310005,'insert','issuances','{"asset":"BBBB","ass INSERT INTO messages VALUES(40,310005,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"BBBB","block_index":310005,"calling_function":"issuance","event":"9238105e39efd4b7d428ad14011ad0c0f366bdcd150afa954e1f25c0cf4c2cc9","quantity":1000000000,"tx_index":6}',0,'CREDIT'); INSERT INTO messages VALUES(41,310005,'parse','transactions','{"supported":true,"tx_hash":"9238105e39efd4b7d428ad14011ad0c0f366bdcd150afa954e1f25c0cf4c2cc9","tx_index":6}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(42,310005,'parse','blocks','{"block_index":310005,"ledger_hash":"5f8a9d465e686b3e9471041bd15d645b7fc8afee36ee890873aa6c3c51d87bb5","messages_hash":"fa485519e19f15670e3c2e14e5edf24ceb43f3716d9b941e6d553ed966890c50","txlist_hash":"260ad7ae2e2b555f7adf9155fcb761e7ed7a2d22f128457db0f1ff363b498d64"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(43,310006,'insert','blocks','{"block_hash":"bdad69d1669eace68b9f246de113161099d4f83322e2acf402c42defef3af2bb","block_index":310006,"block_time":310006000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(43,310005,'insert','blocks','{"block_hash":"bdad69d1669eace68b9f246de113161099d4f83322e2acf402c42defef3af2bb","block_index":310006,"block_time":310006000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(44,310006,'insert','transactions','{"block_hash":"bdad69d1669eace68b9f246de113161099d4f83322e2acf402c42defef3af2bb","block_index":310006,"block_time":310006000,"btc_amount":0,"data":"00000014000000000000476800000000000186a00000000000000000000006666f6f626172","destination":"","fee":6800,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"19d9d6059edf351635fa19ad867ccfa1db3959a5109fc63729430110a661b6e8","tx_index":7}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(45,310006,'insert','debits','{"action":"issuance fee","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310006,"event":"19d9d6059edf351635fa19ad867ccfa1db3959a5109fc63729430110a661b6e8","quantity":50000000,"tx_index":7}',0,'DEBIT'); INSERT INTO messages VALUES(46,310006,'insert','assets','{"asset_id":"18280","asset_longname":null,"asset_name":"BBBC","block_index":310006}',0,'ASSET_CREATION'); @@ -516,21 +516,21 @@ INSERT INTO messages VALUES(47,310006,'insert','issuances','{"asset":"BBBC","ass INSERT INTO messages VALUES(48,310006,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"BBBC","block_index":310006,"calling_function":"issuance","event":"19d9d6059edf351635fa19ad867ccfa1db3959a5109fc63729430110a661b6e8","quantity":100000,"tx_index":7}',0,'CREDIT'); INSERT INTO messages VALUES(49,310006,'parse','transactions','{"supported":true,"tx_hash":"19d9d6059edf351635fa19ad867ccfa1db3959a5109fc63729430110a661b6e8","tx_index":7}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(50,310006,'parse','blocks','{"block_index":310006,"ledger_hash":"153795f1c7ae2dbec7fc19bb25d03dd518f0664bca82b9bb92bb7c4f1e22f040","messages_hash":"91d3dd09443d1265650e148632f4de4352559fb4a2aa2dfbe161b1a83d7f51de","txlist_hash":"c047baa686f8bf24c406cf03687c0b4fe6b95e4afe0b396e0f507a694fb10245"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(51,310007,'insert','blocks','{"block_hash":"10a642b96d60091d08234d17dfdecf3025eca41e4fc8e3bbe71a91c5a457cb4b","block_index":310007,"block_time":310007000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(51,310006,'insert','blocks','{"block_hash":"10a642b96d60091d08234d17dfdecf3025eca41e4fc8e3bbe71a91c5a457cb4b","block_index":310007,"block_time":310007000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(52,310007,'insert','transactions','{"block_hash":"10a642b96d60091d08234d17dfdecf3025eca41e4fc8e3bbe71a91c5a457cb4b","block_index":310007,"block_time":310007000,"btc_amount":1000,"data":"00000000000000000000476700000000003d0900","destination":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","fee":7650,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"b25659252f68f162d96cf2cf3070b30e5913b472cbace76985e314b4634641a0","tx_index":8}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(53,310007,'insert','debits','{"action":"send","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"BBBB","block_index":310007,"event":"b25659252f68f162d96cf2cf3070b30e5913b472cbace76985e314b4634641a0","quantity":4000000,"tx_index":8}',0,'DEBIT'); INSERT INTO messages VALUES(54,310007,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","asset":"BBBB","block_index":310007,"calling_function":"send","event":"b25659252f68f162d96cf2cf3070b30e5913b472cbace76985e314b4634641a0","quantity":4000000,"tx_index":8}',0,'CREDIT'); INSERT INTO messages VALUES(55,310007,'insert','sends','{"asset":"BBBB","block_index":310007,"destination":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","quantity":4000000,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"b25659252f68f162d96cf2cf3070b30e5913b472cbace76985e314b4634641a0","tx_index":8}',0,'SEND'); INSERT INTO messages VALUES(56,310007,'parse','transactions','{"supported":true,"tx_hash":"b25659252f68f162d96cf2cf3070b30e5913b472cbace76985e314b4634641a0","tx_index":8}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(57,310007,'parse','blocks','{"block_index":310007,"ledger_hash":"c5d21baa8c6949a8e9f0d73a37436d431bf4876ab3b60b82553877ec53fc4454","messages_hash":"477c8a3efdb86228e5387e26f324d6db1de8d3d0269b61e5918c50e9099e27ca","txlist_hash":"d9532f5bdd583968d88ed24feb95b50c5e319d36171dd7bc6067ddf3d13c623c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(58,310008,'insert','blocks','{"block_hash":"47d0e3acbdc6916aeae95e987f9cfa16209b3df1e67bb38143b3422b32322c33","block_index":310008,"block_time":310008000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(58,310007,'insert','blocks','{"block_hash":"47d0e3acbdc6916aeae95e987f9cfa16209b3df1e67bb38143b3422b32322c33","block_index":310008,"block_time":310008000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(59,310008,'insert','transactions','{"block_hash":"47d0e3acbdc6916aeae95e987f9cfa16209b3df1e67bb38143b3422b32322c33","block_index":310008,"block_time":310008000,"btc_amount":1000,"data":"000000000000000000004768000000000000020e","destination":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","fee":7650,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"592e248181970aa6f97f2cfe133323d3ffb2095dd7f411cfd20b1ab611238a11","tx_index":9}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(60,310008,'insert','debits','{"action":"send","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"BBBC","block_index":310008,"event":"592e248181970aa6f97f2cfe133323d3ffb2095dd7f411cfd20b1ab611238a11","quantity":526,"tx_index":9}',0,'DEBIT'); INSERT INTO messages VALUES(61,310008,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","asset":"BBBC","block_index":310008,"calling_function":"send","event":"592e248181970aa6f97f2cfe133323d3ffb2095dd7f411cfd20b1ab611238a11","quantity":526,"tx_index":9}',0,'CREDIT'); INSERT INTO messages VALUES(62,310008,'insert','sends','{"asset":"BBBC","block_index":310008,"destination":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","quantity":526,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"592e248181970aa6f97f2cfe133323d3ffb2095dd7f411cfd20b1ab611238a11","tx_index":9}',0,'SEND'); INSERT INTO messages VALUES(63,310008,'parse','transactions','{"supported":true,"tx_hash":"592e248181970aa6f97f2cfe133323d3ffb2095dd7f411cfd20b1ab611238a11","tx_index":9}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(64,310008,'parse','blocks','{"block_index":310008,"ledger_hash":"579de8204446e9128076fd27a644a82da77ca5ff2793ff56815c24a11218af5e","messages_hash":"e6077ca90d21f6c9bf673fddbfde5afa61ce76d3efdc19e3e98601ebe2659c69","txlist_hash":"5b37c224e5684c0b3a913793e7e97c4f88b26b6c6d7683de8e06bb9485fba409"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(65,310009,'insert','blocks','{"block_hash":"4d474992b141620bf3753863db7ee5e8af26cadfbba27725911f44fa657bc1c0","block_index":310009,"block_time":310009000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(65,310008,'insert','blocks','{"block_hash":"4d474992b141620bf3753863db7ee5e8af26cadfbba27725911f44fa657bc1c0","block_index":310009,"block_time":310009000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(66,310009,'insert','transactions','{"block_hash":"4d474992b141620bf3753863db7ee5e8af26cadfbba27725911f44fa657bc1c0","block_index":310009,"block_time":310009000,"btc_amount":0,"data":"00000032000000000000025800000000000047670000000000000001","destination":"","fee":6800,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"f2f6db13d6bda4def4f1bd759b603c64c962f82017329057a9237ceaf171520a","tx_index":10}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(67,310009,'insert','debits','{"action":"dividend","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310009,"event":"f2f6db13d6bda4def4f1bd759b603c64c962f82017329057a9237ceaf171520a","quantity":24,"tx_index":10}',0,'DEBIT'); INSERT INTO messages VALUES(68,310009,'insert','debits','{"action":"dividend fee","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310009,"event":"f2f6db13d6bda4def4f1bd759b603c64c962f82017329057a9237ceaf171520a","quantity":20000,"tx_index":10}',0,'DEBIT'); @@ -538,7 +538,7 @@ INSERT INTO messages VALUES(69,310009,'insert','credits','{"address":"2_mn6q3dS2 INSERT INTO messages VALUES(70,310009,'insert','dividends','{"asset":"BBBB","block_index":310009,"dividend_asset":"XCP","fee_paid":20000,"quantity_per_unit":600,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"f2f6db13d6bda4def4f1bd759b603c64c962f82017329057a9237ceaf171520a","tx_index":10}',0,'ASSET_DIVIDEND'); INSERT INTO messages VALUES(71,310009,'parse','transactions','{"supported":true,"tx_hash":"f2f6db13d6bda4def4f1bd759b603c64c962f82017329057a9237ceaf171520a","tx_index":10}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(72,310009,'parse','blocks','{"block_index":310009,"ledger_hash":"c03a6e31f50f172c86029ce6a810ec730e1179ad3e76ba5d4290595ec414bb87","messages_hash":"6b1c0ca7b4fbde952b5729befc447a09d9e996f873f25757fc9fe6332799bdc9","txlist_hash":"f81c6592f74098821e15c146c2a7e4a5be2cc743431d37a5fb6d4143b89907d5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(73,310010,'insert','blocks','{"block_hash":"a58162dff81a32e6a29b075be759dbb9fa9b8b65303e69c78fb4d7b0acc37042","block_index":310010,"block_time":310010000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(73,310009,'insert','blocks','{"block_hash":"a58162dff81a32e6a29b075be759dbb9fa9b8b65303e69c78fb4d7b0acc37042","block_index":310010,"block_time":310010000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(74,310010,'insert','transactions','{"block_hash":"a58162dff81a32e6a29b075be759dbb9fa9b8b65303e69c78fb4d7b0acc37042","block_index":310010,"block_time":310010000,"btc_amount":0,"data":"00000032000000000000032000000000000047680000000000000001","destination":"","fee":6800,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"a4353c6bd3159d3288f76c9f40fdbde89d681b09ec64d1f2b422b2e9e30c10d8","tx_index":11}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(75,310010,'insert','debits','{"action":"dividend","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310010,"event":"a4353c6bd3159d3288f76c9f40fdbde89d681b09ec64d1f2b422b2e9e30c10d8","quantity":420800,"tx_index":11}',0,'DEBIT'); INSERT INTO messages VALUES(76,310010,'insert','debits','{"action":"dividend fee","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310010,"event":"a4353c6bd3159d3288f76c9f40fdbde89d681b09ec64d1f2b422b2e9e30c10d8","quantity":20000,"tx_index":11}',0,'DEBIT'); @@ -546,18 +546,18 @@ INSERT INTO messages VALUES(77,310010,'insert','credits','{"address":"2_mn6q3dS2 INSERT INTO messages VALUES(78,310010,'insert','dividends','{"asset":"BBBC","block_index":310010,"dividend_asset":"XCP","fee_paid":20000,"quantity_per_unit":800,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"a4353c6bd3159d3288f76c9f40fdbde89d681b09ec64d1f2b422b2e9e30c10d8","tx_index":11}',0,'ASSET_DIVIDEND'); INSERT INTO messages VALUES(79,310010,'parse','transactions','{"supported":true,"tx_hash":"a4353c6bd3159d3288f76c9f40fdbde89d681b09ec64d1f2b422b2e9e30c10d8","tx_index":11}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(80,310010,'parse','blocks','{"block_index":310010,"ledger_hash":"804651f6571bb24ef7534c97116ae35fb0b6b31aa6a4574a419aae7fc2900b1c","messages_hash":"68122cbe27346172664dc07f3c7cd823a2fd9ff5efdb47ed357fcf80ba43976c","txlist_hash":"3698516a21c2c590522e6419eae91ed8b469d922863141def1f3e295c4954dfd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(81,310011,'insert','blocks','{"block_hash":"8042cc2ef293fd73d050f283fbd075c79dd4c49fdcca054dc0714fc3a50dc1bb","block_index":310011,"block_time":310011000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(81,310010,'insert','blocks','{"block_hash":"8042cc2ef293fd73d050f283fbd075c79dd4c49fdcca054dc0714fc3a50dc1bb","block_index":310011,"block_time":310011000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(82,310011,'insert','transactions','{"block_hash":"8042cc2ef293fd73d050f283fbd075c79dd4c49fdcca054dc0714fc3a50dc1bb","block_index":310011,"block_time":310011000,"btc_amount":0,"data":"0000001e52bb3300405900000000000005f5e0ff09556e69742054657374","destination":"","fee":6800,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"9ec74a4822710f9534a3815f0e836a09219f6c766880a57767c7514071d99084","tx_index":12}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(83,310011,'insert','broadcasts','{"block_index":310011,"fee_fraction_int":99999999,"locked":false,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","text":"Unit Test","timestamp":1388000000,"tx_hash":"9ec74a4822710f9534a3815f0e836a09219f6c766880a57767c7514071d99084","tx_index":12,"value":100.0}',0,'BROADCAST'); INSERT INTO messages VALUES(84,310011,'parse','transactions','{"supported":true,"tx_hash":"9ec74a4822710f9534a3815f0e836a09219f6c766880a57767c7514071d99084","tx_index":12}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(85,310011,'parse','blocks','{"block_index":310011,"ledger_hash":"a9a18fcba1a83d637dcfd633f32848d55c86c5b499e0c15af6a626653b7424b8","messages_hash":"3cb60f7ac2f1597df6cde54a9aea3c2dda78734aa723e408520d205af49c6c62","txlist_hash":"deaaba2ecb1772901052ae6490a1015e75146af3b2707b1c148562deff91af49"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(86,310012,'insert','blocks','{"block_hash":"cdba329019d93a67b31b79d05f76ce1b7791d430ea0d6c1c2168fe78d2f67677","block_index":310012,"block_time":310012000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(86,310011,'insert','blocks','{"block_hash":"cdba329019d93a67b31b79d05f76ce1b7791d430ea0d6c1c2168fe78d2f67677","block_index":310012,"block_time":310012000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(87,310012,'insert','transactions','{"block_hash":"cdba329019d93a67b31b79d05f76ce1b7791d430ea0d6c1c2168fe78d2f67677","block_index":310012,"block_time":310012000,"btc_amount":1000,"data":"00000028000052bb33640000000002faf08000000000017d7840000000000000000000003b100000000a","destination":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","fee":7650,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"ef92dc4986fdfb4ccb6e101ee949d5307c554e8dd1619307548ec032a973f19c","tx_index":13}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(88,310012,'insert','debits','{"action":"bet","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310012,"event":"ef92dc4986fdfb4ccb6e101ee949d5307c554e8dd1619307548ec032a973f19c","quantity":50000000,"tx_index":13}',0,'DEBIT'); INSERT INTO messages VALUES(89,310012,'insert','bets','{"bet_type":0,"block_index":310012,"counterwager_quantity":25000000,"counterwager_remaining":25000000,"deadline":1388000100,"expiration":10,"expire_index":310022,"fee_fraction_int":99999999.0,"feed_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","leverage":15120,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"open","target_value":0.0,"tx_hash":"ef92dc4986fdfb4ccb6e101ee949d5307c554e8dd1619307548ec032a973f19c","tx_index":13,"wager_quantity":50000000,"wager_remaining":50000000}',0,'OPEN_BET'); INSERT INTO messages VALUES(90,310012,'parse','transactions','{"supported":true,"tx_hash":"ef92dc4986fdfb4ccb6e101ee949d5307c554e8dd1619307548ec032a973f19c","tx_index":13}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(91,310012,'parse','blocks','{"block_index":310012,"ledger_hash":"27298dbdb9026b5d54228b686b7a76f9d42479da79b38b9ef7cd13e4fee27159","messages_hash":"49b0d12e30aae10622d9c04e4d7ae9c574020ad4471669bd37c5e5e3354f928e","txlist_hash":"e409e7c7435482a64f10aaaaa6e62d69a4f0ae3083922c91907d6f15393dbb22"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(92,310013,'insert','blocks','{"block_hash":"0425e5e832e4286757dc0228cd505b8d572081007218abd3a0983a3bcd502a61","block_index":310013,"block_time":310013000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(92,310012,'insert','blocks','{"block_hash":"0425e5e832e4286757dc0228cd505b8d572081007218abd3a0983a3bcd502a61","block_index":310013,"block_time":310013000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(93,310013,'insert','transactions','{"block_hash":"0425e5e832e4286757dc0228cd505b8d572081007218abd3a0983a3bcd502a61","block_index":310013,"block_time":310013000,"btc_amount":1000,"data":"00000028000152bb336400000000017d78400000000002793d60000000000000000000003b100000000a","destination":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","fee":7650,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"ce9d3a5ea18ed454ddee80b75bd12abdd47de8e176d9c9dfc768c1233e729943","tx_index":14}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(94,310013,'update','orders','{"status":"expired","tx_hash":"c953eb18873ce8aed42456df0ece8e4678e13282d9917916e7a4aec10e828375"}',0,'ORDER_UPDATE'); INSERT INTO messages VALUES(95,310013,'insert','order_expirations','{"block_index":310013,"order_hash":"c953eb18873ce8aed42456df0ece8e4678e13282d9917916e7a4aec10e828375","source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3"}',0,'ORDER_EXPIRATION'); @@ -566,10 +566,10 @@ INSERT INTO messages VALUES(97,310013,'insert','bets','{"bet_type":1,"block_inde INSERT INTO messages VALUES(98,310013,'update','bets','{"counterwager_remaining":4250000,"status":"open","tx_hash":"ef92dc4986fdfb4ccb6e101ee949d5307c554e8dd1619307548ec032a973f19c","wager_remaining":8500000}',0,'BET_UPDATE'); INSERT INTO messages VALUES(99,310013,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310013,"calling_function":"filled","event":"ce9d3a5ea18ed454ddee80b75bd12abdd47de8e176d9c9dfc768c1233e729943","quantity":4250000,"tx_index":14}',0,'CREDIT'); INSERT INTO messages VALUES(100,310013,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"ce9d3a5ea18ed454ddee80b75bd12abdd47de8e176d9c9dfc768c1233e729943","wager_remaining":4250000}',0,'BET_UPDATE'); -INSERT INTO messages VALUES(101,310012,'insert','bet_matches','{"backward_quantity":20750000,"block_index":310012,"deadline":1388000100,"fee_fraction_int":99999999,"feed_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","forward_quantity":41500000,"id":"ef92dc4986fdfb4ccb6e101ee949d5307c554e8dd1619307548ec032a973f19c_ce9d3a5ea18ed454ddee80b75bd12abdd47de8e176d9c9dfc768c1233e729943","initial_value":100.0,"leverage":15120,"match_expire_index":310022,"status":"pending","target_value":0.0,"tx0_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx0_bet_type":0,"tx0_block_index":310012,"tx0_expiration":10,"tx0_hash":"ef92dc4986fdfb4ccb6e101ee949d5307c554e8dd1619307548ec032a973f19c","tx0_index":13,"tx1_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx1_bet_type":1,"tx1_block_index":310013,"tx1_expiration":10,"tx1_hash":"ce9d3a5ea18ed454ddee80b75bd12abdd47de8e176d9c9dfc768c1233e729943","tx1_index":14}',0,'BET_MATCH'); +INSERT INTO messages VALUES(101,310013,'insert','bet_matches','{"backward_quantity":20750000,"block_index":310012,"deadline":1388000100,"fee_fraction_int":99999999,"feed_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","forward_quantity":41500000,"id":"ef92dc4986fdfb4ccb6e101ee949d5307c554e8dd1619307548ec032a973f19c_ce9d3a5ea18ed454ddee80b75bd12abdd47de8e176d9c9dfc768c1233e729943","initial_value":100.0,"leverage":15120,"match_expire_index":310022,"status":"pending","target_value":0.0,"tx0_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx0_bet_type":0,"tx0_block_index":310012,"tx0_expiration":10,"tx0_hash":"ef92dc4986fdfb4ccb6e101ee949d5307c554e8dd1619307548ec032a973f19c","tx0_index":13,"tx1_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx1_bet_type":1,"tx1_block_index":310013,"tx1_expiration":10,"tx1_hash":"ce9d3a5ea18ed454ddee80b75bd12abdd47de8e176d9c9dfc768c1233e729943","tx1_index":14}',0,'BET_MATCH'); INSERT INTO messages VALUES(102,310013,'parse','transactions','{"supported":true,"tx_hash":"ce9d3a5ea18ed454ddee80b75bd12abdd47de8e176d9c9dfc768c1233e729943","tx_index":14}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(103,310013,'parse','blocks','{"block_index":310013,"ledger_hash":"f5fbbb8870bb8253cfba52c58765b8c2493ceee6a2db5779a4212ed456bf892e","messages_hash":"0548d7767e52fe92fb48e9860a17d4d0aae87d90395c814f71a19418cb01f253","txlist_hash":"78b492a743e24d50541f29a1a8e476434e81961bd457552c55fcbbac68d68fca"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(104,310014,'insert','blocks','{"block_hash":"85b28d413ebda2968ed82ae53643677338650151b997ed1e4656158005b9f65f","block_index":310014,"block_time":310014000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(104,310013,'insert','blocks','{"block_hash":"85b28d413ebda2968ed82ae53643677338650151b997ed1e4656158005b9f65f","block_index":310014,"block_time":310014000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(105,310014,'insert','transactions','{"block_hash":"85b28d413ebda2968ed82ae53643677338650151b997ed1e4656158005b9f65f","block_index":310014,"block_time":310014000,"btc_amount":1000,"data":"00000028000052bb33640000000008f0d1800000000014dc93800000000000000000000013b00000000a","destination":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","fee":7650,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"6722884208180367a60c5c96ae86865dad3c63525a9498d716e98b5015ec2e3d","tx_index":15}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(106,310014,'update','orders','{"status":"expired","tx_hash":"89a44a3314b298a83d5d14c8646900a5122b8a1e8f6e0528e73ea82044d1726a"}',0,'ORDER_UPDATE'); INSERT INTO messages VALUES(107,310014,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310014,"calling_function":"cancel order","event":"89a44a3314b298a83d5d14c8646900a5122b8a1e8f6e0528e73ea82044d1726a","quantity":5000000,"tx_index":0}',0,'CREDIT'); @@ -578,7 +578,7 @@ INSERT INTO messages VALUES(109,310014,'insert','debits','{"action":"bet","addre INSERT INTO messages VALUES(110,310014,'insert','bets','{"bet_type":0,"block_index":310014,"counterwager_quantity":350000000,"counterwager_remaining":350000000,"deadline":1388000100,"expiration":10,"expire_index":310024,"fee_fraction_int":99999999.0,"feed_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","leverage":5040,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"open","target_value":0.0,"tx_hash":"6722884208180367a60c5c96ae86865dad3c63525a9498d716e98b5015ec2e3d","tx_index":15,"wager_quantity":150000000,"wager_remaining":150000000}',0,'OPEN_BET'); INSERT INTO messages VALUES(111,310014,'parse','transactions','{"supported":true,"tx_hash":"6722884208180367a60c5c96ae86865dad3c63525a9498d716e98b5015ec2e3d","tx_index":15}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(112,310014,'parse','blocks','{"block_index":310014,"ledger_hash":"f1e77a7a4d28d64a0cfd878112074b6205ef09055b93b8923b0c6466a07ea500","messages_hash":"1ec2ab1b175680972277d46d3c88eacd45939ff84545534192a4aae70b68bd1f","txlist_hash":"475ee3563b60fa5bbf8f8db5eabf9bdfea4a2f1b5fc82aedc37fa7c581c5f065"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(113,310015,'insert','blocks','{"block_hash":"4cf77d688f18f0c68c077db882f62e49f31859dfa6144372457cd73b29223922","block_index":310015,"block_time":310015000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(113,310014,'insert','blocks','{"block_hash":"4cf77d688f18f0c68c077db882f62e49f31859dfa6144372457cd73b29223922","block_index":310015,"block_time":310015000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(114,310015,'insert','transactions','{"block_hash":"4cf77d688f18f0c68c077db882f62e49f31859dfa6144372457cd73b29223922","block_index":310015,"block_time":310015000,"btc_amount":1000,"data":"00000028000152bb33640000000014dc93800000000008f0d1800000000000000000000013b00000000a","destination":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","fee":7650,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"10c669ad89d61e1a983e179f66f355b1dd21e53d520fd4dc3bb5a6f9e5e24fcd","tx_index":16}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(115,310015,'insert','debits','{"action":"bet","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310015,"event":"10c669ad89d61e1a983e179f66f355b1dd21e53d520fd4dc3bb5a6f9e5e24fcd","quantity":350000000,"tx_index":16}',0,'DEBIT'); INSERT INTO messages VALUES(116,310015,'insert','bets','{"bet_type":1,"block_index":310015,"counterwager_quantity":150000000,"counterwager_remaining":150000000,"deadline":1388000100,"expiration":10,"expire_index":310025,"fee_fraction_int":99999999.0,"feed_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","leverage":5040,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"open","target_value":0.0,"tx_hash":"10c669ad89d61e1a983e179f66f355b1dd21e53d520fd4dc3bb5a6f9e5e24fcd","tx_index":16,"wager_quantity":350000000,"wager_remaining":350000000}',0,'OPEN_BET'); @@ -586,16 +586,16 @@ INSERT INTO messages VALUES(117,310015,'insert','credits','{"address":"2_mn6q3dS INSERT INTO messages VALUES(118,310015,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"6722884208180367a60c5c96ae86865dad3c63525a9498d716e98b5015ec2e3d","wager_remaining":0}',0,'BET_UPDATE'); INSERT INTO messages VALUES(119,310015,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310015,"calling_function":"filled","event":"10c669ad89d61e1a983e179f66f355b1dd21e53d520fd4dc3bb5a6f9e5e24fcd","quantity":0,"tx_index":16}',0,'CREDIT'); INSERT INTO messages VALUES(120,310015,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"10c669ad89d61e1a983e179f66f355b1dd21e53d520fd4dc3bb5a6f9e5e24fcd","wager_remaining":0}',0,'BET_UPDATE'); -INSERT INTO messages VALUES(121,310014,'insert','bet_matches','{"backward_quantity":350000000,"block_index":310014,"deadline":1388000100,"fee_fraction_int":99999999,"feed_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","forward_quantity":150000000,"id":"6722884208180367a60c5c96ae86865dad3c63525a9498d716e98b5015ec2e3d_10c669ad89d61e1a983e179f66f355b1dd21e53d520fd4dc3bb5a6f9e5e24fcd","initial_value":100.0,"leverage":5040,"match_expire_index":310024,"status":"pending","target_value":0.0,"tx0_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx0_bet_type":0,"tx0_block_index":310014,"tx0_expiration":10,"tx0_hash":"6722884208180367a60c5c96ae86865dad3c63525a9498d716e98b5015ec2e3d","tx0_index":15,"tx1_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx1_bet_type":1,"tx1_block_index":310015,"tx1_expiration":10,"tx1_hash":"10c669ad89d61e1a983e179f66f355b1dd21e53d520fd4dc3bb5a6f9e5e24fcd","tx1_index":16}',0,'BET_MATCH'); +INSERT INTO messages VALUES(121,310015,'insert','bet_matches','{"backward_quantity":350000000,"block_index":310014,"deadline":1388000100,"fee_fraction_int":99999999,"feed_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","forward_quantity":150000000,"id":"6722884208180367a60c5c96ae86865dad3c63525a9498d716e98b5015ec2e3d_10c669ad89d61e1a983e179f66f355b1dd21e53d520fd4dc3bb5a6f9e5e24fcd","initial_value":100.0,"leverage":5040,"match_expire_index":310024,"status":"pending","target_value":0.0,"tx0_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx0_bet_type":0,"tx0_block_index":310014,"tx0_expiration":10,"tx0_hash":"6722884208180367a60c5c96ae86865dad3c63525a9498d716e98b5015ec2e3d","tx0_index":15,"tx1_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx1_bet_type":1,"tx1_block_index":310015,"tx1_expiration":10,"tx1_hash":"10c669ad89d61e1a983e179f66f355b1dd21e53d520fd4dc3bb5a6f9e5e24fcd","tx1_index":16}',0,'BET_MATCH'); INSERT INTO messages VALUES(122,310015,'parse','transactions','{"supported":true,"tx_hash":"10c669ad89d61e1a983e179f66f355b1dd21e53d520fd4dc3bb5a6f9e5e24fcd","tx_index":16}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(123,310015,'parse','blocks','{"block_index":310015,"ledger_hash":"014bcc839c0ea0d2fecd9aab3074528ffee3b2dce7f805e4d459e2dfb3d98a51","messages_hash":"1c29ad09a0e553303984b97abf9b4a3a844defb01750cda96efc763eb7e0e509","txlist_hash":"5d40b180a3f3b38eedd15c7f40e8585aaa5e2fdde3967dff443a74703fa45fd4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(124,310016,'insert','blocks','{"block_hash":"99dc7d2627efb4e5e618a53b9898b4ca39c70e98fe9bf39f68a6c980f5b64ef9","block_index":310016,"block_time":310016000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(124,310015,'insert','blocks','{"block_hash":"99dc7d2627efb4e5e618a53b9898b4ca39c70e98fe9bf39f68a6c980f5b64ef9","block_index":310016,"block_time":310016000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(125,310016,'insert','transactions','{"block_hash":"99dc7d2627efb4e5e618a53b9898b4ca39c70e98fe9bf39f68a6c980f5b64ef9","block_index":310016,"block_time":310016000,"btc_amount":1000,"data":"00000028000252bb33c8000000002cb417800000000026be36803ff0000000000000000013b00000000a","destination":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","fee":7650,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"caaceb9160747bd86fa4b3b4d090c9e1617285fae312eac2152bf3fabedcd2bc","tx_index":17}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(126,310016,'insert','debits','{"action":"bet","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310016,"event":"caaceb9160747bd86fa4b3b4d090c9e1617285fae312eac2152bf3fabedcd2bc","quantity":750000000,"tx_index":17}',0,'DEBIT'); INSERT INTO messages VALUES(127,310016,'insert','bets','{"bet_type":2,"block_index":310016,"counterwager_quantity":650000000,"counterwager_remaining":650000000,"deadline":1388000200,"expiration":10,"expire_index":310026,"fee_fraction_int":99999999.0,"feed_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","leverage":5040,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"open","target_value":1.0,"tx_hash":"caaceb9160747bd86fa4b3b4d090c9e1617285fae312eac2152bf3fabedcd2bc","tx_index":17,"wager_quantity":750000000,"wager_remaining":750000000}',0,'OPEN_BET'); INSERT INTO messages VALUES(128,310016,'parse','transactions','{"supported":true,"tx_hash":"caaceb9160747bd86fa4b3b4d090c9e1617285fae312eac2152bf3fabedcd2bc","tx_index":17}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(129,310016,'parse','blocks','{"block_index":310016,"ledger_hash":"9f72d6a84ee58e1e851a90a62b525dc257c3b1b0c7e9964f93a7e5df6a2e4007","messages_hash":"422aca1d53d6f1cdabb33311ac6416c777f51a0f2964e2c9f8ccd40f5894e98e","txlist_hash":"e990e43e7272c9d971fcc782768bea70c71d45fa7d712a7195bcc4151617a57f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(130,310017,'insert','blocks','{"block_hash":"8a4fedfbf734b91a5c5761a7bcb3908ea57169777a7018148c51ff611970e4a3","block_index":310017,"block_time":310017000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(130,310016,'insert','blocks','{"block_hash":"8a4fedfbf734b91a5c5761a7bcb3908ea57169777a7018148c51ff611970e4a3","block_index":310017,"block_time":310017000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(131,310017,'insert','transactions','{"block_hash":"8a4fedfbf734b91a5c5761a7bcb3908ea57169777a7018148c51ff611970e4a3","block_index":310017,"block_time":310017000,"btc_amount":1000,"data":"00000028000352bb33c80000000026be3680000000002cb417803ff0000000000000000013b00000000a","destination":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","fee":7650,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"67497105b77192af401ec8024ad34de211592877dee8532dbe216d8a8f17dd0c","tx_index":18}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(132,310017,'insert','debits','{"action":"bet","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310017,"event":"67497105b77192af401ec8024ad34de211592877dee8532dbe216d8a8f17dd0c","quantity":650000000,"tx_index":18}',0,'DEBIT'); INSERT INTO messages VALUES(133,310017,'insert','bets','{"bet_type":3,"block_index":310017,"counterwager_quantity":750000000,"counterwager_remaining":750000000,"deadline":1388000200,"expiration":10,"expire_index":310027,"fee_fraction_int":99999999.0,"feed_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","leverage":5040,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"open","target_value":1.0,"tx_hash":"67497105b77192af401ec8024ad34de211592877dee8532dbe216d8a8f17dd0c","tx_index":18,"wager_quantity":650000000,"wager_remaining":650000000}',0,'OPEN_BET'); @@ -603,10 +603,10 @@ INSERT INTO messages VALUES(134,310017,'insert','credits','{"address":"2_mn6q3dS INSERT INTO messages VALUES(135,310017,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"caaceb9160747bd86fa4b3b4d090c9e1617285fae312eac2152bf3fabedcd2bc","wager_remaining":0}',0,'BET_UPDATE'); INSERT INTO messages VALUES(136,310017,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310017,"calling_function":"filled","event":"67497105b77192af401ec8024ad34de211592877dee8532dbe216d8a8f17dd0c","quantity":0,"tx_index":18}',0,'CREDIT'); INSERT INTO messages VALUES(137,310017,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"67497105b77192af401ec8024ad34de211592877dee8532dbe216d8a8f17dd0c","wager_remaining":0}',0,'BET_UPDATE'); -INSERT INTO messages VALUES(138,310016,'insert','bet_matches','{"backward_quantity":650000000,"block_index":310016,"deadline":1388000200,"fee_fraction_int":99999999,"feed_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","forward_quantity":750000000,"id":"caaceb9160747bd86fa4b3b4d090c9e1617285fae312eac2152bf3fabedcd2bc_67497105b77192af401ec8024ad34de211592877dee8532dbe216d8a8f17dd0c","initial_value":100.0,"leverage":5040,"match_expire_index":310026,"status":"pending","target_value":1.0,"tx0_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx0_bet_type":2,"tx0_block_index":310016,"tx0_expiration":10,"tx0_hash":"caaceb9160747bd86fa4b3b4d090c9e1617285fae312eac2152bf3fabedcd2bc","tx0_index":17,"tx1_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx1_bet_type":3,"tx1_block_index":310017,"tx1_expiration":10,"tx1_hash":"67497105b77192af401ec8024ad34de211592877dee8532dbe216d8a8f17dd0c","tx1_index":18}',0,'BET_MATCH'); +INSERT INTO messages VALUES(138,310017,'insert','bet_matches','{"backward_quantity":650000000,"block_index":310016,"deadline":1388000200,"fee_fraction_int":99999999,"feed_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","forward_quantity":750000000,"id":"caaceb9160747bd86fa4b3b4d090c9e1617285fae312eac2152bf3fabedcd2bc_67497105b77192af401ec8024ad34de211592877dee8532dbe216d8a8f17dd0c","initial_value":100.0,"leverage":5040,"match_expire_index":310026,"status":"pending","target_value":1.0,"tx0_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx0_bet_type":2,"tx0_block_index":310016,"tx0_expiration":10,"tx0_hash":"caaceb9160747bd86fa4b3b4d090c9e1617285fae312eac2152bf3fabedcd2bc","tx0_index":17,"tx1_address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx1_bet_type":3,"tx1_block_index":310017,"tx1_expiration":10,"tx1_hash":"67497105b77192af401ec8024ad34de211592877dee8532dbe216d8a8f17dd0c","tx1_index":18}',0,'BET_MATCH'); INSERT INTO messages VALUES(139,310017,'parse','transactions','{"supported":true,"tx_hash":"67497105b77192af401ec8024ad34de211592877dee8532dbe216d8a8f17dd0c","tx_index":18}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(140,310017,'parse','blocks','{"block_index":310017,"ledger_hash":"5d1e195a7d313d703253640cd98be600b04a7d98aae69b5327a29e740573198d","messages_hash":"51b88cfe43063411950072a1f9a3529859a893b57b1f10f578725b072279a25b","txlist_hash":"443444009d5700747b2d345cc10a70bf5a48214bc279d811a311ef76e52abf04"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(141,310018,'insert','blocks','{"block_hash":"35c06f9e3de39e4e56ceb1d1a22008f52361c50dd0d251c0acbe2e3c2dba8ed3","block_index":310018,"block_time":310018000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(141,310017,'insert','blocks','{"block_hash":"35c06f9e3de39e4e56ceb1d1a22008f52361c50dd0d251c0acbe2e3c2dba8ed3","block_index":310018,"block_time":310018000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(142,310018,'insert','transactions','{"block_hash":"35c06f9e3de39e4e56ceb1d1a22008f52361c50dd0d251c0acbe2e3c2dba8ed3","block_index":310018,"block_time":310018000,"btc_amount":0,"data":"0000001e52bb33324058f7256ffc115e004c4b4009556e69742054657374","destination":"","fee":6800,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"e87bf8dfeda7df143873ff042cc7a05dd590a6bef6a55c5832e22db1bd5e3bcd","tx_index":19}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(143,310018,'insert','broadcasts','{"block_index":310018,"fee_fraction_int":5000000,"locked":false,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","text":"Unit Test","timestamp":1388000050,"tx_hash":"e87bf8dfeda7df143873ff042cc7a05dd590a6bef6a55c5832e22db1bd5e3bcd","tx_index":19,"value":99.86166}',0,'BROADCAST'); INSERT INTO messages VALUES(144,310018,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310018,"calling_function":"bet settled: liquidated for bear","event":"e87bf8dfeda7df143873ff042cc7a05dd590a6bef6a55c5832e22db1bd5e3bcd","quantity":59137500,"tx_index":19}',0,'CREDIT'); @@ -615,7 +615,7 @@ INSERT INTO messages VALUES(146,310018,'insert','bet_match_resolutions','{"bear_ INSERT INTO messages VALUES(147,310018,'update','bet_matches','{"id":"ef92dc4986fdfb4ccb6e101ee949d5307c554e8dd1619307548ec032a973f19c_ce9d3a5ea18ed454ddee80b75bd12abdd47de8e176d9c9dfc768c1233e729943","status":"settled: liquidated for bear"}',0,'BET_MATCH_UPDATE'); INSERT INTO messages VALUES(148,310018,'parse','transactions','{"supported":true,"tx_hash":"e87bf8dfeda7df143873ff042cc7a05dd590a6bef6a55c5832e22db1bd5e3bcd","tx_index":19}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(149,310018,'parse','blocks','{"block_index":310018,"ledger_hash":"f38538a4a2cba9bcf8821b56e1dc877990e027135d3f220338cd8cb11f3eb205","messages_hash":"641798f65a211495512814860dc526be35f6887724547aa27a257203cc2b2e38","txlist_hash":"abe72d22a1fb28e1ce34bfe3f1fd012d5a41fe219a0c4ee96f3b4b0e49aea889"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(150,310019,'insert','blocks','{"block_hash":"114affa0c4f34b1ebf8e2778c9477641f60b5b9e8a69052158041d4c41893294","block_index":310019,"block_time":310019000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(150,310018,'insert','blocks','{"block_hash":"114affa0c4f34b1ebf8e2778c9477641f60b5b9e8a69052158041d4c41893294","block_index":310019,"block_time":310019000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(151,310019,'insert','transactions','{"block_hash":"114affa0c4f34b1ebf8e2778c9477641f60b5b9e8a69052158041d4c41893294","block_index":310019,"block_time":310019000,"btc_amount":0,"data":"0000001e52bb3365405915f3b645a1cb004c4b4009556e69742054657374","destination":"","fee":6800,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"1fcd2de64aabc6c05796e28cbea31df45a25928c2cd8dd30d774c9e70c4e97df","tx_index":20}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(152,310019,'insert','broadcasts','{"block_index":310019,"fee_fraction_int":5000000,"locked":false,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","text":"Unit Test","timestamp":1388000101,"tx_hash":"1fcd2de64aabc6c05796e28cbea31df45a25928c2cd8dd30d774c9e70c4e97df","tx_index":20,"value":100.343}',0,'BROADCAST'); INSERT INTO messages VALUES(153,310019,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310019,"calling_function":"bet settled","event":"1fcd2de64aabc6c05796e28cbea31df45a25928c2cd8dd30d774c9e70c4e97df","quantity":159300000,"tx_index":20}',0,'CREDIT'); @@ -625,7 +625,7 @@ INSERT INTO messages VALUES(156,310019,'insert','bet_match_resolutions','{"bear_ INSERT INTO messages VALUES(157,310019,'update','bet_matches','{"id":"6722884208180367a60c5c96ae86865dad3c63525a9498d716e98b5015ec2e3d_10c669ad89d61e1a983e179f66f355b1dd21e53d520fd4dc3bb5a6f9e5e24fcd","status":"settled"}',0,'BET_MATCH_UPDATE'); INSERT INTO messages VALUES(158,310019,'parse','transactions','{"supported":true,"tx_hash":"1fcd2de64aabc6c05796e28cbea31df45a25928c2cd8dd30d774c9e70c4e97df","tx_index":20}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(159,310019,'parse','blocks','{"block_index":310019,"ledger_hash":"3a51f1f061d953c940ac7e53f8bb37df041f2d4f42a16f5c5d23707b8b0c0dc6","messages_hash":"b59cc514a2948e9f942fb18aff5acbc5686a7021b67fd5fbb8c1cb2ee11bde4b","txlist_hash":"8bea2f5ef9805bffa4b23881f7635ec213525f8dfe98aa45e716e43a73ffe114"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(160,310020,'insert','blocks','{"block_hash":"d93c79920e4a42164af74ecb5c6b903ff6055cdc007376c74dfa692c8d85ebc9","block_index":310020,"block_time":310020000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(160,310019,'insert','blocks','{"block_hash":"d93c79920e4a42164af74ecb5c6b903ff6055cdc007376c74dfa692c8d85ebc9","block_index":310020,"block_time":310020000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(161,310020,'insert','transactions','{"block_hash":"d93c79920e4a42164af74ecb5c6b903ff6055cdc007376c74dfa692c8d85ebc9","block_index":310020,"block_time":310020000,"btc_amount":0,"data":"0000001e52bb33c94000000000000000004c4b4009556e69742054657374","destination":"","fee":6800,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"dc4b57ad8a0b23dbc7ffc03f51e8076cd2418edf256b2660783bb0d1be0b8b73","tx_index":21}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(162,310020,'insert','broadcasts','{"block_index":310020,"fee_fraction_int":5000000,"locked":false,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","text":"Unit Test","timestamp":1388000201,"tx_hash":"dc4b57ad8a0b23dbc7ffc03f51e8076cd2418edf256b2660783bb0d1be0b8b73","tx_index":21,"value":2.0}',0,'BROADCAST'); INSERT INTO messages VALUES(163,310020,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310020,"calling_function":"bet settled: for notequal","event":"dc4b57ad8a0b23dbc7ffc03f51e8076cd2418edf256b2660783bb0d1be0b8b73","quantity":1330000000,"tx_index":21}',0,'CREDIT'); @@ -634,18 +634,18 @@ INSERT INTO messages VALUES(165,310020,'insert','bet_match_resolutions','{"bear_ INSERT INTO messages VALUES(166,310020,'update','bet_matches','{"id":"caaceb9160747bd86fa4b3b4d090c9e1617285fae312eac2152bf3fabedcd2bc_67497105b77192af401ec8024ad34de211592877dee8532dbe216d8a8f17dd0c","status":"settled: for notequal"}',0,'BET_MATCH_UPDATE'); INSERT INTO messages VALUES(167,310020,'parse','transactions','{"supported":true,"tx_hash":"dc4b57ad8a0b23dbc7ffc03f51e8076cd2418edf256b2660783bb0d1be0b8b73","tx_index":21}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(168,310020,'parse','blocks','{"block_index":310020,"ledger_hash":"cce3284c53fcf79ba268d925e32ab70e3d4df1e6f13dbcbe2920e93fc689128b","messages_hash":"657db356d2ffcb7ba632c7144241fe250361e09d32b93f551768e31502d614ae","txlist_hash":"d0e8a123b3125a8e057d8504b7a96e77188895c86907c273922b80e7e9ca42d2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(169,310021,'insert','blocks','{"block_hash":"7c2460bb32c5749c856486393239bf7a0ac789587ac71f32e7237910da8097f2","block_index":310021,"block_time":310021000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(169,310020,'insert','blocks','{"block_hash":"7c2460bb32c5749c856486393239bf7a0ac789587ac71f32e7237910da8097f2","block_index":310021,"block_time":310021000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(170,310021,'insert','transactions','{"block_hash":"7c2460bb32c5749c856486393239bf7a0ac789587ac71f32e7237910da8097f2","block_index":310021,"block_time":310021000,"btc_amount":0,"data":"0000000a00000000000047670000000002faf08000000000000000010000000002faf080000a0000000000000000","destination":"","fee":6800,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"4408350196e71533e054ef84d1bdc4ba4b0f693d2d98d240d3c697b553078ab7","tx_index":22}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(171,310021,'insert','debits','{"action":"open order","address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"BBBB","block_index":310021,"event":"4408350196e71533e054ef84d1bdc4ba4b0f693d2d98d240d3c697b553078ab7","quantity":50000000,"tx_index":22}',0,'DEBIT'); INSERT INTO messages VALUES(172,310021,'insert','orders','{"block_index":310021,"expiration":10,"expire_index":310031,"fee_provided":6800,"fee_provided_remaining":6800,"fee_required":0,"fee_required_remaining":0,"get_asset":"XCP","get_quantity":50000000,"get_remaining":50000000,"give_asset":"BBBB","give_quantity":50000000,"give_remaining":50000000,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"open","tx_hash":"4408350196e71533e054ef84d1bdc4ba4b0f693d2d98d240d3c697b553078ab7","tx_index":22}',0,'OPEN_ORDER'); INSERT INTO messages VALUES(173,310021,'parse','transactions','{"supported":true,"tx_hash":"4408350196e71533e054ef84d1bdc4ba4b0f693d2d98d240d3c697b553078ab7","tx_index":22}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(174,310021,'parse','blocks','{"block_index":310021,"ledger_hash":"6ad5172a6dcaa6706d5a4f6fd8ada183e103b9faab58e42c1365613a26477490","messages_hash":"bee135735ca1d013383b5fde88988a6f7e0155ec16c2d5ffaae49d6f4e0d6905","txlist_hash":"1c207ab28dd2c5d297f47d5ac366699523cd97ccfc8a3e348dbf6fe900c32b5d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(175,310022,'insert','blocks','{"block_hash":"44435f9a99a0aa12a9bfabdc4cb8119f6ea6a6e1350d2d65445fb66a456db5fc","block_index":310022,"block_time":310022000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(175,310021,'insert','blocks','{"block_hash":"44435f9a99a0aa12a9bfabdc4cb8119f6ea6a6e1350d2d65445fb66a456db5fc","block_index":310022,"block_time":310022000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(176,310022,'insert','transactions','{"block_hash":"44435f9a99a0aa12a9bfabdc4cb8119f6ea6a6e1350d2d65445fb66a456db5fc","block_index":310022,"block_time":310022000,"btc_amount":100000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":5625,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"181709b341ec136f90975fdaa362c767ebd789e72f16d4e17348ab2985c1bd01","tx_index":23}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(177,310022,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310022,"calling_function":"burn","event":"181709b341ec136f90975fdaa362c767ebd789e72f16d4e17348ab2985c1bd01","quantity":56999887262,"tx_index":23}',0,'CREDIT'); INSERT INTO messages VALUES(178,310022,'insert','burns','{"block_index":310022,"burned":38000000,"earned":56999887262,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"181709b341ec136f90975fdaa362c767ebd789e72f16d4e17348ab2985c1bd01","tx_index":23}',0,'BURN'); INSERT INTO messages VALUES(179,310022,'parse','blocks','{"block_index":310022,"ledger_hash":"c9361fea7f3dd2415969eb6ad7fe893381c9ca65ea391f2e47a966e342db3a90","messages_hash":"bb9d4b79d020195079c817aac5ae98987b3e9db4889667e69dc62fe454c25a14","txlist_hash":"c0867554bd3d50cd8ca4bb6e2d055250fa0c3c46f47b5f03ce5022b7090e07d4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(180,310023,'insert','blocks','{"block_hash":"d8cf5bec1bbcab8ca4f495352afde3b6572b7e1d61b3976872ebb8e9d30ccb08","block_index":310023,"block_time":310023000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(180,310022,'insert','blocks','{"block_hash":"d8cf5bec1bbcab8ca4f495352afde3b6572b7e1d61b3976872ebb8e9d30ccb08","block_index":310023,"block_time":310023000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(181,310023,'insert','transactions','{"block_hash":"d8cf5bec1bbcab8ca4f495352afde3b6572b7e1d61b3976872ebb8e9d30ccb08","block_index":310023,"block_time":310023000,"btc_amount":1000,"data":"0000000000000000000047680000000000002710","destination":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","fee":7650,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"f4a0c2582fb141e9451a7c00fa61afc147b9959c2dd20a1978950936fdb53831","tx_index":24}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(182,310023,'update','bets','{"status":"expired","tx_hash":"ef92dc4986fdfb4ccb6e101ee949d5307c554e8dd1619307548ec032a973f19c"}',0,'BET_UPDATE'); INSERT INTO messages VALUES(183,310023,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310023,"calling_function":"recredit wager remaining","event":"ef92dc4986fdfb4ccb6e101ee949d5307c554e8dd1619307548ec032a973f19c","quantity":8500000,"tx_index":0}',0,'CREDIT'); @@ -655,164 +655,164 @@ INSERT INTO messages VALUES(186,310023,'insert','credits','{"address":"2_mn6q3dS INSERT INTO messages VALUES(187,310023,'insert','sends','{"asset":"BBBC","block_index":310023,"destination":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","quantity":10000,"source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"f4a0c2582fb141e9451a7c00fa61afc147b9959c2dd20a1978950936fdb53831","tx_index":24}',0,'SEND'); INSERT INTO messages VALUES(188,310023,'parse','transactions','{"supported":true,"tx_hash":"f4a0c2582fb141e9451a7c00fa61afc147b9959c2dd20a1978950936fdb53831","tx_index":24}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(189,310023,'parse','blocks','{"block_index":310023,"ledger_hash":"f63680db66cf963aaaebf64130629790e7492b5ea9396434c2179a5eb8774412","messages_hash":"9953f0483df04bf7651d41fb34e95ecf36ef2195b8508e8e1525e4d1e872beea","txlist_hash":"6a3cc06342da18a8eae7180bd93af2cc3a6f7c51916a19265365814f52a58119"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(190,310024,'insert','blocks','{"block_hash":"b03042b4e18a222b4c8d1e9e1970d93e6e2a2d41686d227ff8ecf0a839223dc5","block_index":310024,"block_time":310024000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(190,310023,'insert','blocks','{"block_hash":"b03042b4e18a222b4c8d1e9e1970d93e6e2a2d41686d227ff8ecf0a839223dc5","block_index":310024,"block_time":310024000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(191,310024,'parse','blocks','{"block_index":310024,"ledger_hash":"d69ea243fcd5e525ae03af680d5610b654a9d2bad17782e196305aaa110a6ba9","messages_hash":"b68e0765ebe5e98e0972ee993eb7ae5fc1178de01b68aa2e33966fb69ea2591c","txlist_hash":"7e4a0076ce614d5b7bcb0a59c84e79d21702a3507ba88bc0d8ce9e644d7fe692"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(192,310025,'insert','blocks','{"block_hash":"a872e560766832cc3b4f7f222228cb6db882ce3c54f6459f62c71d5cd6e90666","block_index":310025,"block_time":310025000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(192,310024,'insert','blocks','{"block_hash":"a872e560766832cc3b4f7f222228cb6db882ce3c54f6459f62c71d5cd6e90666","block_index":310025,"block_time":310025000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(193,310025,'parse','blocks','{"block_index":310025,"ledger_hash":"721906ed4cbd1524fafdc8e3ffef27d8b03e0c798bbcbe3eee7bc7f14afe4e81","messages_hash":"e1edd85efb3d8302b64133ce5edac3cc3047c0b968b295f864e61dadc65cdcee","txlist_hash":"c1596eb8c172f2968ddd2ef70c1a8f125ab989c1a7bb012ab56f6c75cd96bb41"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(194,310026,'insert','blocks','{"block_hash":"6c96350f6f2f05810f19a689de235eff975338587194a36a70dfd0fcd490941a","block_index":310026,"block_time":310026000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(194,310025,'insert','blocks','{"block_hash":"6c96350f6f2f05810f19a689de235eff975338587194a36a70dfd0fcd490941a","block_index":310026,"block_time":310026000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(195,310026,'parse','blocks','{"block_index":310026,"ledger_hash":"27912da2afa797876030dd0e50c31aea462d54c7bfa4f89d2f14fdb7b80db6b0","messages_hash":"fdb48d0418b6e97e15f1beb3e755e001eccc2217100606217e003c3a86a27997","txlist_hash":"2d653751a75829265f2cfe2dd7bcc3a594be62492893d36642e3c8815d339fbd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(196,310027,'insert','blocks','{"block_hash":"d7acfac66df393c4482a14c189742c0571b89442eb7f817b34415a560445699e","block_index":310027,"block_time":310027000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(196,310026,'insert','blocks','{"block_hash":"d7acfac66df393c4482a14c189742c0571b89442eb7f817b34415a560445699e","block_index":310027,"block_time":310027000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(197,310027,'parse','blocks','{"block_index":310027,"ledger_hash":"cc0734ecfd2bdbd2d04d236b853f60e324feaa9115fae33a8add961c4a5f9436","messages_hash":"88a9b5e14c5f63905f30734c91a2bfb61efe8e62ba88cf36a5242495487885b4","txlist_hash":"3d5c1eb8dafccfee04f7d91b2819d9f51a9fe8df4050c025c19c29ceb18b3575"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(198,310028,'insert','blocks','{"block_hash":"02409fcf8fa06dafcb7f11e38593181d9c42cc9d5e2ddc304d098f990bd9530b","block_index":310028,"block_time":310028000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(198,310027,'insert','blocks','{"block_hash":"02409fcf8fa06dafcb7f11e38593181d9c42cc9d5e2ddc304d098f990bd9530b","block_index":310028,"block_time":310028000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(199,310028,'parse','blocks','{"block_index":310028,"ledger_hash":"d3f5fbbe85d5a81fef8735c73349f61a43122f4b6f3f7aa61215323a683ce3aa","messages_hash":"ba94bc00c1246e08a641038398acddf181d667a726e0a054a570a95a91407055","txlist_hash":"e6600d6d90725ce81afdd7b00220f8df650f85dc3a308d2486fab88edaaa8981"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(200,310029,'insert','blocks','{"block_hash":"3c739fa8b40c118d5547ea356ee8d10ee2898871907643ec02e5db9d00f03cc6","block_index":310029,"block_time":310029000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(200,310028,'insert','blocks','{"block_hash":"3c739fa8b40c118d5547ea356ee8d10ee2898871907643ec02e5db9d00f03cc6","block_index":310029,"block_time":310029000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(201,310029,'parse','blocks','{"block_index":310029,"ledger_hash":"74d08f0d1cad9f7102d0cfe70f50614c7ae7f4844ca6d02390031e1e96c2b418","messages_hash":"f4f014290c00eb6d1df157e203d82ed4bdd52aaa758dabdf3fd32ec3880c2b5c","txlist_hash":"341aa44dcd4967cc3356ca23c97111b1cf3ee128c944493a0ebc6458c4f119be"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(202,310030,'insert','blocks','{"block_hash":"d5071cddedf89765ee0fd58f209c1c7d669ba8ea66200a57587da8b189b9e4f5","block_index":310030,"block_time":310030000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(202,310029,'insert','blocks','{"block_hash":"d5071cddedf89765ee0fd58f209c1c7d669ba8ea66200a57587da8b189b9e4f5","block_index":310030,"block_time":310030000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(203,310030,'parse','blocks','{"block_index":310030,"ledger_hash":"753a1a8bb877851ae24dbc33884344f34ee18c6b0d70a4d909231448b943e8cd","messages_hash":"db8ea86a15db96b17b2d85a213bb157e6044ef311d40258dcb4e2030ee91546b","txlist_hash":"b9385290e5bd72f2a1a5d2cc889108a6da0aa888fdcf76170b166888c6301407"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(204,310031,'insert','blocks','{"block_hash":"0b02b10f41380fff27c543ea8891ecb845bf7a003ac5c87e15932aff3bfcf689","block_index":310031,"block_time":310031000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(204,310030,'insert','blocks','{"block_hash":"0b02b10f41380fff27c543ea8891ecb845bf7a003ac5c87e15932aff3bfcf689","block_index":310031,"block_time":310031000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(205,310031,'parse','blocks','{"block_index":310031,"ledger_hash":"f7c62d08a4efc854dea6f47249786d3d00778d97223dd84de1d0fd1eef3e2ee7","messages_hash":"108cd055eb0f1f50883615c29d1f2f7e58a3ed849b381d6a13f5249cf3339d6c","txlist_hash":"6c27a0cb80d8602b9ccd126f53bb69727d358353b4c1299434c3472b0469d85f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(206,310032,'insert','blocks','{"block_hash":"66346be81e6ba04544f2ae643b76c2b7b1383f038fc2636e02e49dc7ec144074","block_index":310032,"block_time":310032000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(206,310031,'insert','blocks','{"block_hash":"66346be81e6ba04544f2ae643b76c2b7b1383f038fc2636e02e49dc7ec144074","block_index":310032,"block_time":310032000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(207,310032,'update','orders','{"status":"expired","tx_hash":"4408350196e71533e054ef84d1bdc4ba4b0f693d2d98d240d3c697b553078ab7"}',0,'ORDER_UPDATE'); INSERT INTO messages VALUES(208,310032,'insert','credits','{"address":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"BBBB","block_index":310032,"calling_function":"cancel order","event":"4408350196e71533e054ef84d1bdc4ba4b0f693d2d98d240d3c697b553078ab7","quantity":50000000,"tx_index":0}',0,'CREDIT'); INSERT INTO messages VALUES(209,310032,'insert','order_expirations','{"block_index":310032,"order_hash":"4408350196e71533e054ef84d1bdc4ba4b0f693d2d98d240d3c697b553078ab7","source":"2_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3"}',0,'ORDER_EXPIRATION'); INSERT INTO messages VALUES(210,310032,'parse','blocks','{"block_index":310032,"ledger_hash":"833690f195e85b427b61890640fe8f0cc7419e0f4301b6f4738bab12be06dbb8","messages_hash":"a6321cefb0ec463ccef9562be2387263feab779731c65626aeb393b2fdde3886","txlist_hash":"cb3ca17e5c792309fead54d49039ee0e00e7b17291868a3a2e86e09bb3dae80e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(211,310033,'insert','blocks','{"block_hash":"999c65df9661f73e8c01f1da1afda09ac16788b72834f0ff5ea3d1464afb4707","block_index":310033,"block_time":310033000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(211,310032,'insert','blocks','{"block_hash":"999c65df9661f73e8c01f1da1afda09ac16788b72834f0ff5ea3d1464afb4707","block_index":310033,"block_time":310033000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(212,310033,'parse','blocks','{"block_index":310033,"ledger_hash":"a1e118474a6f70b8f700a67b43ee0272c4609d3309603b5be6434ca587eaa704","messages_hash":"039c4c914fb56800d197a5eba14ff51734a5f39e848fb6a3d41bf811c34a1582","txlist_hash":"2f097bb1b1dff2b4266dcb3b46d29255401e23a2fcfb75f28e9f7184733e14bc"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(213,310034,'insert','blocks','{"block_hash":"f552edd2e0a648230f3668e72ddf0ddfb1e8ac0f4c190f91b89c1a8c2e357208","block_index":310034,"block_time":310034000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(213,310033,'insert','blocks','{"block_hash":"f552edd2e0a648230f3668e72ddf0ddfb1e8ac0f4c190f91b89c1a8c2e357208","block_index":310034,"block_time":310034000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(214,310034,'parse','blocks','{"block_index":310034,"ledger_hash":"3b6427f61fb59ffd674ed8e0af75687fc4ccf8b462011727d4dc4bdf4c794775","messages_hash":"e33abdd943a38b791ea9eedd1fecb1b25e17fb11ca5f434d1fb9c1a52e014b25","txlist_hash":"be05766d9a1c70d8907d523979a313ccec8cf2900335fd91800b4b90da3bee12"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(215,310035,'insert','blocks','{"block_hash":"a13cbb016f3044207a46967a4ba1c87dab411f78c55c1179f2336653c2726ae2","block_index":310035,"block_time":310035000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(215,310034,'insert','blocks','{"block_hash":"a13cbb016f3044207a46967a4ba1c87dab411f78c55c1179f2336653c2726ae2","block_index":310035,"block_time":310035000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(216,310035,'parse','blocks','{"block_index":310035,"ledger_hash":"d065384f739c52a718f656717f88eb2fecc10d8567a93ccf823434c003d28c55","messages_hash":"5be7215f264b8f7977200c67689ceff9e2f14035280d424ae973855a8e689d7f","txlist_hash":"41cb2236ce676fd45ae98593c9cac6291fa95479ec07a5af615ccb5fbbeab760"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(217,310036,'insert','blocks','{"block_hash":"158648a98f1e1bd1875584ce8449eb15a4e91a99a923bbb24c4210135cef0c76","block_index":310036,"block_time":310036000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(217,310035,'insert','blocks','{"block_hash":"158648a98f1e1bd1875584ce8449eb15a4e91a99a923bbb24c4210135cef0c76","block_index":310036,"block_time":310036000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(218,310036,'parse','blocks','{"block_index":310036,"ledger_hash":"22cddc8dbfcbaf4b851fa5379c740a96294acc3d772dcf6d684881bef18d7fbf","messages_hash":"70668b938741ae0f0dc76997b78268cebb0960bfd43fa6d043b648d3de84cf72","txlist_hash":"0beb88a3d4adbf913601c2d5144599cecfd48886ca51f995aecfeb50c56aab1c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(219,310037,'insert','blocks','{"block_hash":"563acfd6d991ce256d5655de2e9429975c8dceeb221e76d5ec6e9e24a2c27c07","block_index":310037,"block_time":310037000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(219,310036,'insert','blocks','{"block_hash":"563acfd6d991ce256d5655de2e9429975c8dceeb221e76d5ec6e9e24a2c27c07","block_index":310037,"block_time":310037000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(220,310037,'parse','blocks','{"block_index":310037,"ledger_hash":"93172c51a9c4cb5c33937a199a32ad3c13a40a60f4c194a1187e2c59a15c0ccc","messages_hash":"b23bd50542786f46b18658498e048f11ecd3c4bab73ace2b1d41e72b3ef921e8","txlist_hash":"ea276540d3637a9165f482c48e414467e3a78c2c25c6a70bbed0c38f7205920e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(221,310038,'insert','blocks','{"block_hash":"b44b4cad12431c32df27940e18d51f63897c7472b70950d18454edfd640490b2","block_index":310038,"block_time":310038000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(221,310037,'insert','blocks','{"block_hash":"b44b4cad12431c32df27940e18d51f63897c7472b70950d18454edfd640490b2","block_index":310038,"block_time":310038000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(222,310038,'parse','blocks','{"block_index":310038,"ledger_hash":"7a167a13f7e576c7e066035dbe2a2513659f1386c095a9e63afa494c043b7def","messages_hash":"d236c4cc61ab09e7b0a2b20a2d8358002b4cdd8528edfad746df5f4156ebb8a5","txlist_hash":"15ef5d6175a7ce1937554ed6c2b10be6555aa14f7179245b7b140d1a620095fc"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(223,310039,'insert','blocks','{"block_hash":"5fa1ae9c5e8a599247458987b006ad3a57f686df1f7cc240bf119e911b56c347","block_index":310039,"block_time":310039000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(223,310038,'insert','blocks','{"block_hash":"5fa1ae9c5e8a599247458987b006ad3a57f686df1f7cc240bf119e911b56c347","block_index":310039,"block_time":310039000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(224,310039,'parse','blocks','{"block_index":310039,"ledger_hash":"4733d9ada3d4f60bc09f0a6eba3fdcdcd8e8b18adfd38c7bf06372259e2d38f3","messages_hash":"b001901e32d2be5ffcf6722ad12d238cba23d17cf5903818c35fc4f1e111ea45","txlist_hash":"4ac5fe346b8577626d58c9442c95fccd4955506ac712ee3f27b5df6b7ec1d0df"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(225,310040,'insert','blocks','{"block_hash":"7200ded406675453eadddfbb2d14c2a4526c7dc2b5de14bd48b29243df5e1aa3","block_index":310040,"block_time":310040000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(225,310039,'insert','blocks','{"block_hash":"7200ded406675453eadddfbb2d14c2a4526c7dc2b5de14bd48b29243df5e1aa3","block_index":310040,"block_time":310040000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(226,310040,'parse','blocks','{"block_index":310040,"ledger_hash":"b8021bbe3744e58cedfc3dd99220fce48f4e56a8fe8256d7894dd55c7312a76d","messages_hash":"bcfde45a33ace1870169520291256debd57cd92191055b02b067ca9b359459d9","txlist_hash":"acbb3114dc5c7599eabdaec4833952c3b6de20dde616233f3945151977d5be16"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(227,310041,'insert','blocks','{"block_hash":"5db592ff9ba5fac1e030cf22d6c13b70d330ba397f415340086ee7357143b359","block_index":310041,"block_time":310041000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(227,310040,'insert','blocks','{"block_hash":"5db592ff9ba5fac1e030cf22d6c13b70d330ba397f415340086ee7357143b359","block_index":310041,"block_time":310041000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(228,310041,'parse','blocks','{"block_index":310041,"ledger_hash":"017b79a5fb34785dd39964a61a5bde69d676f75ee085c27bbc9e3381983c2dab","messages_hash":"fe7e2286d95c9fedb3f426879324acf58b6b818e79fb76f672d77d9a052f33a0","txlist_hash":"6cbdfb2d6b3677c91097b1e80a32dafb0172725fabff370adcf444321ee48509"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(229,310042,'insert','blocks','{"block_hash":"826fd4701ef2824e9559b069517cd3cb990aff6a4690830f78fc845ab77fa3e4","block_index":310042,"block_time":310042000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(229,310041,'insert','blocks','{"block_hash":"826fd4701ef2824e9559b069517cd3cb990aff6a4690830f78fc845ab77fa3e4","block_index":310042,"block_time":310042000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(230,310042,'parse','blocks','{"block_index":310042,"ledger_hash":"cf5389c037b6c619025bf95d9718fb5548cd67978c3ebf26f76029873828162e","messages_hash":"cf30fc0d3b3fcad9aa91035bdab67237d66928cfaffd8c6e9d5747ba7e730295","txlist_hash":"a091876d90aaf1dd5b0d53403a3a9b5788710bf3d0c1996184a91961a1f24aa0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(231,310043,'insert','blocks','{"block_hash":"2254a12ada208f1dd57bc17547ecaf3c44720323c47bc7d4b1262477cb7f3c51","block_index":310043,"block_time":310043000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(231,310042,'insert','blocks','{"block_hash":"2254a12ada208f1dd57bc17547ecaf3c44720323c47bc7d4b1262477cb7f3c51","block_index":310043,"block_time":310043000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(232,310043,'parse','blocks','{"block_index":310043,"ledger_hash":"df116ea1fcf5f968644dcc97c1149f0ef6061b188fd56c27152543256ce79009","messages_hash":"3967234a887552a7a446b28b1d71be584efe09d346e735477726fcb803d3ea06","txlist_hash":"eafb7d2cbbb2d1afe4a3eb65ca6bc7be653d7d824238264082d2c5e382757e54"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(233,310044,'insert','blocks','{"block_hash":"3346d24118d8af0b3c6bcc42f8b85792e7a2e7036ebf6e4c25f4f6723c78e46b","block_index":310044,"block_time":310044000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(233,310043,'insert','blocks','{"block_hash":"3346d24118d8af0b3c6bcc42f8b85792e7a2e7036ebf6e4c25f4f6723c78e46b","block_index":310044,"block_time":310044000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(234,310044,'parse','blocks','{"block_index":310044,"ledger_hash":"c12cfaa984bfb34e781ac93848a87cdc0318c45a1cd9f02d31f5c3a4abe8d918","messages_hash":"b96d11bc51e12584035a7a14072443ebb4ab62cb43903ce3f93183f4489708ab","txlist_hash":"61cb811c578f90cd6cc9f6963ff80c280f6ad0edb53fe53dd3075a8818404fe8"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(235,310045,'insert','blocks','{"block_hash":"7bba0ab243839e91ad1a45a762bf074011f8a9883074d68203c6d1b46fffde98","block_index":310045,"block_time":310045000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(235,310044,'insert','blocks','{"block_hash":"7bba0ab243839e91ad1a45a762bf074011f8a9883074d68203c6d1b46fffde98","block_index":310045,"block_time":310045000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(236,310045,'parse','blocks','{"block_index":310045,"ledger_hash":"999a9ed2673de2db7637e22eb8a1876e0c794e90f09cdd76d1442e56ae12b1c8","messages_hash":"3ba540abdfe5bec9c2b07cacfbec12fd67312f884073e3f7a2e0138fd4c1d5d3","txlist_hash":"ce9e3f0524576a630ed0154cf69c7798065a001e6752c4f369c30b06aebbe378"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(237,310046,'insert','blocks','{"block_hash":"47db6788c38f2d6d712764979e41346b55e78cbb4969e0ef5c4336faf18993a6","block_index":310046,"block_time":310046000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(237,310045,'insert','blocks','{"block_hash":"47db6788c38f2d6d712764979e41346b55e78cbb4969e0ef5c4336faf18993a6","block_index":310046,"block_time":310046000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(238,310046,'parse','blocks','{"block_index":310046,"ledger_hash":"240c9a2f6dc918ed868abfb5de6838d7a17f02263fdda0ccd3c7481c09e155d1","messages_hash":"657eaa5a6ca03f35197b063eff359fdd5c08e369a9675a2f2aefefae93a8adf7","txlist_hash":"4f83f9bc531841759d1071a92ccda5d898af693fc88db0de16b2d2ca09630d59"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(239,310047,'insert','blocks','{"block_hash":"a9ccabcc2a098a7d25e4ab8bda7c4e66807eefa42e29890dcd88149a10de7075","block_index":310047,"block_time":310047000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(239,310046,'insert','blocks','{"block_hash":"a9ccabcc2a098a7d25e4ab8bda7c4e66807eefa42e29890dcd88149a10de7075","block_index":310047,"block_time":310047000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(240,310047,'parse','blocks','{"block_index":310047,"ledger_hash":"79836105e355e25afd709d15632e2c0d1ab53ab251cd3750ffee9fea4a2605b8","messages_hash":"67b525e65cdf790966a30fa8980229402ca894d989c8e04b368b39710cb486a1","txlist_hash":"b17c5d4fc0eef05c315095d265b324a0ea7dee28145d7b4e251a944b4b6a16fb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(241,310048,'insert','blocks','{"block_hash":"610bf3935a85b05a98556c55493c6de45bed4d7b3b6c8553a984718765796309","block_index":310048,"block_time":310048000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(241,310047,'insert','blocks','{"block_hash":"610bf3935a85b05a98556c55493c6de45bed4d7b3b6c8553a984718765796309","block_index":310048,"block_time":310048000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(242,310048,'parse','blocks','{"block_index":310048,"ledger_hash":"6bf0789392e97311c4283d9f748b37effe7b0d1678076e30ce5725eff345a8c5","messages_hash":"d1189f782de3e9769c05abd81d1f7e13ff72ebae99f271958b33b84c1cecfeff","txlist_hash":"f9f7ec8bdc9301d4ea41a099d04f84631badad709fdbdf43582327f183102590"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(243,310049,'insert','blocks','{"block_hash":"4ad2761923ad49ad2b283b640f1832522a2a5d6964486b21591b71df6b33be3c","block_index":310049,"block_time":310049000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(243,310048,'insert','blocks','{"block_hash":"4ad2761923ad49ad2b283b640f1832522a2a5d6964486b21591b71df6b33be3c","block_index":310049,"block_time":310049000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(244,310049,'parse','blocks','{"block_index":310049,"ledger_hash":"1842c46a03800f5e191cb8d641aead6bc80e6d25c2ec826f3a5df426059cc1cb","messages_hash":"3840a6172bb14e16efef4402c3a4f81667c97dc4a5ce48d90e60982f5bbaecb1","txlist_hash":"458e51569acd6ef757e0b36ab3f558e76f239ea3bfbf1b0ce7824f39ec5ac23b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(245,310050,'insert','blocks','{"block_hash":"8cfeb60a14a4cec6e9be13d699694d49007d82a31065a17890383e262071e348","block_index":310050,"block_time":310050000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(245,310049,'insert','blocks','{"block_hash":"8cfeb60a14a4cec6e9be13d699694d49007d82a31065a17890383e262071e348","block_index":310050,"block_time":310050000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(246,310050,'parse','blocks','{"block_index":310050,"ledger_hash":"d424b02109320491b2d32388869d6468ab1fca26d4bf72374cfef729efad866d","messages_hash":"4e38733346bd60ded8f95932eb85b68c170ab5e0e62dcdbd28b66901ac96c1d0","txlist_hash":"53e0972193c4f689d3a7216f22607a9b0cb7b8a9f43f144469bfbf25f59edb09"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(247,310051,'insert','blocks','{"block_hash":"b53c90385dd808306601350920c6af4beb717518493fd23b5c730eea078f33e6","block_index":310051,"block_time":310051000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(247,310050,'insert','blocks','{"block_hash":"b53c90385dd808306601350920c6af4beb717518493fd23b5c730eea078f33e6","block_index":310051,"block_time":310051000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(248,310051,'parse','blocks','{"block_index":310051,"ledger_hash":"d1db4181403136b41168ab7786831f2fadfc418a05b7477246ab097bab531859","messages_hash":"036a2c57db183169924f171a954a33d5ec1cd430b5916bf071a0b587afaa7147","txlist_hash":"89bbd06ca16ed2098ac6b7accd2296b4e0a2d8236dbf1cc14137e90ebad364e3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(249,310052,'insert','blocks','{"block_hash":"0acdacf4e4b6fca756479cb055191b367b1fa433aa558956f5f08fa5b7b394e2","block_index":310052,"block_time":310052000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(249,310051,'insert','blocks','{"block_hash":"0acdacf4e4b6fca756479cb055191b367b1fa433aa558956f5f08fa5b7b394e2","block_index":310052,"block_time":310052000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(250,310052,'parse','blocks','{"block_index":310052,"ledger_hash":"97fdb6b2c8e636d23109a67af55ab4bb30955a84073274de3fdc788074dc1b6b","messages_hash":"3db2edc06e57d225d363f733a6539fed037aee88e16888ed16da58b7b692707a","txlist_hash":"8b8739b799483eb556e0e32f92cc092c349bb2bcb87044e88e762d55d6f1b033"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(251,310053,'insert','blocks','{"block_hash":"68348f01b6dc49b2cb30fe92ac43e527aa90d859093d3bf7cd695c64d2ef744f","block_index":310053,"block_time":310053000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(251,310052,'insert','blocks','{"block_hash":"68348f01b6dc49b2cb30fe92ac43e527aa90d859093d3bf7cd695c64d2ef744f","block_index":310053,"block_time":310053000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(252,310053,'parse','blocks','{"block_index":310053,"ledger_hash":"0506be4f04a22058504406210af3f1475dbf6d6834c1c1b7f6ac0fe013b47363","messages_hash":"aa9e8f3e3d6febd2672bcdb086a690d656bf47a8817fc555f139c786b2530fd3","txlist_hash":"05673a7bf2fc7e9a5daf3732cb03bcf43712df43ef7ecf1bfe89d18f54726b6b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(253,310054,'insert','blocks','{"block_hash":"a8b5f253df293037e49b998675620d5477445c51d5ec66596e023282bb9cd305","block_index":310054,"block_time":310054000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(253,310053,'insert','blocks','{"block_hash":"a8b5f253df293037e49b998675620d5477445c51d5ec66596e023282bb9cd305","block_index":310054,"block_time":310054000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(254,310054,'parse','blocks','{"block_index":310054,"ledger_hash":"3dc7894c1368c9ef5d32a95fdc292e7de8237b73b61365a25b9d0da95eedc2e6","messages_hash":"f94db2dd80cde70db18382dffac1ed812f3d2d03c4a2b1f9feb972247e212525","txlist_hash":"4651aab35442e5ec1d79ba6422ca0c2b0df02369ee49b33efe1ef54e2ebc7080"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(255,310055,'insert','blocks','{"block_hash":"4b069152e2dc82e96ed8a3c3547c162e8c3aceeb2a4ac07972f8321a535b9356","block_index":310055,"block_time":310055000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(255,310054,'insert','blocks','{"block_hash":"4b069152e2dc82e96ed8a3c3547c162e8c3aceeb2a4ac07972f8321a535b9356","block_index":310055,"block_time":310055000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(256,310055,'parse','blocks','{"block_index":310055,"ledger_hash":"a9ef2c8bf3a88c326d2bdd722c3d82ed4f4c10b65620b136d4b893ed93174795","messages_hash":"2e774913f25b35ed4864bc24fdd94ca25a67cd9779d0c59e652a7fd22607010e","txlist_hash":"d826fea28c0f5e82a6fbefae4d6885a0a49a3180d3c16d6eeb4faff9f57d4d89"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(257,310056,'insert','blocks','{"block_hash":"7603eaed418971b745256742f9d2ba70b2c2b2f69f61de6cc70e61ce0336f9d3","block_index":310056,"block_time":310056000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(257,310055,'insert','blocks','{"block_hash":"7603eaed418971b745256742f9d2ba70b2c2b2f69f61de6cc70e61ce0336f9d3","block_index":310056,"block_time":310056000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(258,310056,'parse','blocks','{"block_index":310056,"ledger_hash":"13b76edecb04a9733107d5c21420ee20424fd463dcde2ea98424ad99ed3383f0","messages_hash":"2f5072254be3d1ca2cf2c871f75d90c7ff0158014b26e0803daadb7f8ea1430e","txlist_hash":"fe620dd60bf5b6f3c610495735deca47cdbfcbb510975ebba2f68c7df6d32a15"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(259,310057,'insert','blocks','{"block_hash":"4a5fdc84f2d66ecb6ee3e3646aad20751ce8694e64e348d3c8aab09d33a3e411","block_index":310057,"block_time":310057000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(259,310056,'insert','blocks','{"block_hash":"4a5fdc84f2d66ecb6ee3e3646aad20751ce8694e64e348d3c8aab09d33a3e411","block_index":310057,"block_time":310057000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(260,310057,'parse','blocks','{"block_index":310057,"ledger_hash":"41c8a47d7bc4e73aa2f09685acb9fac052c5c55764ec3a8250abbbcde40dbe90","messages_hash":"8337aa5515901276b768ee119463ff5e7cdb251b8517b47006cc734d70c5311f","txlist_hash":"553ea196d7a1045f71dc6261cbfe4b84c78b7dc37de89b8865f4d385cbb42863"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(261,310058,'insert','blocks','{"block_hash":"a6eef3089896f0cae0bfe9423392e45c48f4efe4310b14d8cfbdb1fea613635f","block_index":310058,"block_time":310058000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(261,310057,'insert','blocks','{"block_hash":"a6eef3089896f0cae0bfe9423392e45c48f4efe4310b14d8cfbdb1fea613635f","block_index":310058,"block_time":310058000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(262,310058,'parse','blocks','{"block_index":310058,"ledger_hash":"0b8ec211d258206ab8c318c079d9deb33d444a7086d5a05aaba97abc0be137df","messages_hash":"ac5c07af4e8057be82c39a551bf2a0eaf6d9acf57658e3d13383dd66014727c5","txlist_hash":"c3fd7824c9b8413f24feb96ca676285447a980d684f730d10b81c06a440fab7a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(263,310059,'insert','blocks','{"block_hash":"ab505de874c43f97c90be1c26a769e6c5cb140405c993b4a6cc7afc795f156a9","block_index":310059,"block_time":310059000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(263,310058,'insert','blocks','{"block_hash":"ab505de874c43f97c90be1c26a769e6c5cb140405c993b4a6cc7afc795f156a9","block_index":310059,"block_time":310059000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(264,310059,'parse','blocks','{"block_index":310059,"ledger_hash":"f5c2686408577854893d11b02f52d8ea917e90777dddf67c98aabb36a3339b6f","messages_hash":"0bc06f8d5a42655c32b9d0a2faf5a15b638e7529721c1fc07562b8445458e72d","txlist_hash":"3f73e1d36c82dfc8ee58f83502643d962ba6558cbf0fb46d83fea966b5cdfc59"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(265,310060,'insert','blocks','{"block_hash":"974ad5fbef621e0a38eab811608dc9afaf10c8ecc85fed913075ba1a145e889b","block_index":310060,"block_time":310060000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(265,310059,'insert','blocks','{"block_hash":"974ad5fbef621e0a38eab811608dc9afaf10c8ecc85fed913075ba1a145e889b","block_index":310060,"block_time":310060000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(266,310060,'parse','blocks','{"block_index":310060,"ledger_hash":"b80d446905550494f56f4f8240b501d593b0d0e63b5d98a09e180b1a0a68e3b1","messages_hash":"121aeaa7099e55f66f61bf5597e6c277106987c914283bfe3de59757c9dc5a53","txlist_hash":"f1995db5beea80756d509ddf79d3467bb14ae96b0d151175499030505d1f648e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(267,310061,'insert','blocks','{"block_hash":"35d267d21ad386e7b7632292af1c422b0310dde7ca49a82f9577525a29c138cf","block_index":310061,"block_time":310061000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(267,310060,'insert','blocks','{"block_hash":"35d267d21ad386e7b7632292af1c422b0310dde7ca49a82f9577525a29c138cf","block_index":310061,"block_time":310061000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(268,310061,'parse','blocks','{"block_index":310061,"ledger_hash":"41b30d23becc727151698b29a1bb733e45ae5086683c5256d073a6f817baaf49","messages_hash":"ad3dc31b4ef463b328c95e834f9fb14b8b2c0ccdc009a7570aa10ecd18c7cc47","txlist_hash":"de6a4e6bbd49de2001ce26387040970beeb7062b4e16911757204d2745f6c409"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(269,310062,'insert','blocks','{"block_hash":"b31a0054145319ef9de8c1cb19df5bcf4dc8a1ece20053aa494e5d3a00a2852f","block_index":310062,"block_time":310062000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(269,310061,'insert','blocks','{"block_hash":"b31a0054145319ef9de8c1cb19df5bcf4dc8a1ece20053aa494e5d3a00a2852f","block_index":310062,"block_time":310062000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(270,310062,'parse','blocks','{"block_index":310062,"ledger_hash":"f873f47e89715e965c98e92616339f8ff4200f6b8ef5cf747e8de2d101cbde02","messages_hash":"f49c03b535f3622c285a0c30dc16b1ab768477a919617e94558a766e8b0dd783","txlist_hash":"f2954d07588b07ffc063170f43afbb12548fe61584575a979526d28dd631edaa"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(271,310063,'insert','blocks','{"block_hash":"0cbcbcd5b7f2dc288e3a34eab3d4212463a5a56e886804fb4f9f1cf929eadebe","block_index":310063,"block_time":310063000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(271,310062,'insert','blocks','{"block_hash":"0cbcbcd5b7f2dc288e3a34eab3d4212463a5a56e886804fb4f9f1cf929eadebe","block_index":310063,"block_time":310063000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(272,310063,'parse','blocks','{"block_index":310063,"ledger_hash":"14ce21ebfe6a00eccd7bf1aac2d5cf122441d2ebe8c0f5fd6dd14a95b5a209b3","messages_hash":"8abb5b763837ecbe0ee9fcc3f199e14e0a5b7d3af2132dcf24ad69971ccf83ff","txlist_hash":"96b5675e5c3a3b66d7e2bd3424316119cf795c17bbbf2c8677b66872e4659574"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(273,310064,'insert','blocks','{"block_hash":"e2db8065a195e85cde9ddb868a17d39893a60fb2b1255aa5f0c88729de7cbf30","block_index":310064,"block_time":310064000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(273,310063,'insert','blocks','{"block_hash":"e2db8065a195e85cde9ddb868a17d39893a60fb2b1255aa5f0c88729de7cbf30","block_index":310064,"block_time":310064000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(274,310064,'parse','blocks','{"block_index":310064,"ledger_hash":"adb05bac5e7f1e6a1679d5c51f252dc877ebd99c2b73a56df69a9c848cef98a7","messages_hash":"fd8f02cc9a32ede97914e157560a3d68ee7106ca7e7d2ab80f2397e39455cb85","txlist_hash":"243e437b3c00d8106e8c9c2cb08d22376e8a16bd3b62a8b62b86128ddd6d139e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(275,310065,'insert','blocks','{"block_hash":"8a7bc7a77c831ac4fd11b8a9d22d1b6a0661b07cef05c2e600c7fb683b861d2a","block_index":310065,"block_time":310065000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(275,310064,'insert','blocks','{"block_hash":"8a7bc7a77c831ac4fd11b8a9d22d1b6a0661b07cef05c2e600c7fb683b861d2a","block_index":310065,"block_time":310065000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(276,310065,'parse','blocks','{"block_index":310065,"ledger_hash":"9065476b6b2cfb122888e036cea71d36f3d5f7d6c72451c63d770b40a4560fac","messages_hash":"237fab9675ab9d7b81399d8fefb8678ffd4dc2424b7089ed9c107c2437a0f9b9","txlist_hash":"4af47a042289756821ffb0b14aba38fcc8c972fd254220d3991b05642df641e6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(277,310066,'insert','blocks','{"block_hash":"b6959be51eb084747d301f7ccaf9e75f2292c9404633b1532e3692659939430d","block_index":310066,"block_time":310066000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(277,310065,'insert','blocks','{"block_hash":"b6959be51eb084747d301f7ccaf9e75f2292c9404633b1532e3692659939430d","block_index":310066,"block_time":310066000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(278,310066,'parse','blocks','{"block_index":310066,"ledger_hash":"7d5d369827ec0cd44743ed9a519d45003789ff8dc2e511191d2726e1482f58d2","messages_hash":"a6ef9c531563e09b7fa26c58ef497218dd993107540fe47bce76770a8a7f92e5","txlist_hash":"4d61dab0197a7a3f452f3751a92cb1f5378106a13be0351f0f8942d011da097d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(279,310067,'insert','blocks','{"block_hash":"8b08eae98d7193c9c01863fac6effb9162bda010daeacf9e0347112f233b8577","block_index":310067,"block_time":310067000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(279,310066,'insert','blocks','{"block_hash":"8b08eae98d7193c9c01863fac6effb9162bda010daeacf9e0347112f233b8577","block_index":310067,"block_time":310067000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(280,310067,'parse','blocks','{"block_index":310067,"ledger_hash":"301b22a9338d5dd39bbebf6bf518ac53bbb8e1cf7469322484cbcee2fee666ef","messages_hash":"409af4673120ac3029d09fdf1b20a59e4d86d8c1922acfc0dc94f120c79bcbfd","txlist_hash":"ae0cf0361293deb7b8903f20aca2410197db694ea3aff0aec3b635690168f5a5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(281,310068,'insert','blocks','{"block_hash":"9280e7297ef6313341bc81787a36acfc9af58f83a415afff5e3154f126cf52b5","block_index":310068,"block_time":310068000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(281,310067,'insert','blocks','{"block_hash":"9280e7297ef6313341bc81787a36acfc9af58f83a415afff5e3154f126cf52b5","block_index":310068,"block_time":310068000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(282,310068,'parse','blocks','{"block_index":310068,"ledger_hash":"fc281736e1dfe5a89a9a3dd098565c645904a4ad1626dd70ac8e9bc447dfb8b8","messages_hash":"f410e3c9f4d3381177946edaae6b1db4c84eb0118f0ce0bbcd2cac11b15221a1","txlist_hash":"460295c507a33a24231d1f4c760e5987b54f29d1e17bc97959db2a712f0339bf"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(283,310069,'insert','blocks','{"block_hash":"486351f0655bf594ffaab1980cff17353b640b63e9c27239109addece189a6f7","block_index":310069,"block_time":310069000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(283,310068,'insert','blocks','{"block_hash":"486351f0655bf594ffaab1980cff17353b640b63e9c27239109addece189a6f7","block_index":310069,"block_time":310069000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(284,310069,'parse','blocks','{"block_index":310069,"ledger_hash":"b0249a0dfd008a4554adc24085d3c5f44278403cbccb44ba27ee354b23c5627b","messages_hash":"546c9caf6f78f49dc560850474c3354eb4c8a80b3775ec147f78700a9f117e0e","txlist_hash":"d07500b12517493106b918ff5b6c96c371bc10bb3699eb279647539ea7ab1fd5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(285,310070,'insert','blocks','{"block_hash":"8739e99f4dee8bebf1332f37f49a125348b40b93b74fe35579dd52bfba4fa7e5","block_index":310070,"block_time":310070000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(285,310069,'insert','blocks','{"block_hash":"8739e99f4dee8bebf1332f37f49a125348b40b93b74fe35579dd52bfba4fa7e5","block_index":310070,"block_time":310070000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(286,310070,'parse','blocks','{"block_index":310070,"ledger_hash":"d34051879c8db679ac5c49e50edf2085d0ce88dfc1adb971e7b097c0177854c2","messages_hash":"3e6dba3cc0c763aa7ca983d8f815aae7c993a51ee1db7a058c764f76fc821c7f","txlist_hash":"874e494499820bcc0ba41ac5cd1bd153ac1772f730c9b842b77b289adbb2c2f5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(287,310071,'insert','blocks','{"block_hash":"7a099aa1bba0ead577f1e44f35263a1f115ed6a868c98d4dd71609072ae7f80b","block_index":310071,"block_time":310071000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(287,310070,'insert','blocks','{"block_hash":"7a099aa1bba0ead577f1e44f35263a1f115ed6a868c98d4dd71609072ae7f80b","block_index":310071,"block_time":310071000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(288,310071,'parse','blocks','{"block_index":310071,"ledger_hash":"0186c5312af19576cc628a85014ce7c33892dc23b5352c8ff5a0f230adfe263b","messages_hash":"179740d814b3143f9f9243c1afc800cabbcce38f4a3bff20d372f08eeb6f0768","txlist_hash":"01342c18caeaea6b35f2d815b9aeffbd92228f6ad285103faa13cb25171fdfc6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(289,310072,'insert','blocks','{"block_hash":"7b17ecedc07552551b8129e068ae67cb176ca766ea3f6df74b597a94e3a7fc8a","block_index":310072,"block_time":310072000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(289,310071,'insert','blocks','{"block_hash":"7b17ecedc07552551b8129e068ae67cb176ca766ea3f6df74b597a94e3a7fc8a","block_index":310072,"block_time":310072000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(290,310072,'parse','blocks','{"block_index":310072,"ledger_hash":"5376530512d61c3967f21cf01418d317ed072976119b8583fefaf3991b93d8b2","messages_hash":"290e9835fd502c57d1d3b10c512789133df5c6caa128f4e64f53b016d06dc3d2","txlist_hash":"72a7d63ad0b15a401210b197da00ca549b6e8c80d8eda1650cf9017bcbc92532"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(291,310073,'insert','blocks','{"block_hash":"ee0fe3cc9b3a48a2746b6090b63b442b97ea6055d48edcf4b2288396764c6943","block_index":310073,"block_time":310073000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(291,310072,'insert','blocks','{"block_hash":"ee0fe3cc9b3a48a2746b6090b63b442b97ea6055d48edcf4b2288396764c6943","block_index":310073,"block_time":310073000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(292,310073,'parse','blocks','{"block_index":310073,"ledger_hash":"d15fe704fe5de58e9203ff5ded50218a1a01609b65a1a259aec510b8b9e6d690","messages_hash":"6d25cf33e13bf22ab1e3e0aa9e92bc6c70dfd3af45e3f2c1435855289369c2d0","txlist_hash":"924753a39229b5005b684c4b2dd111b6233347b89179f2fd2732d256b960ace0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(293,310074,'insert','blocks','{"block_hash":"ceab38dfde01f711a187601731ad575d67cfe0b7dbc61dcd4f15baaef72089fb","block_index":310074,"block_time":310074000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(293,310073,'insert','blocks','{"block_hash":"ceab38dfde01f711a187601731ad575d67cfe0b7dbc61dcd4f15baaef72089fb","block_index":310074,"block_time":310074000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(294,310074,'parse','blocks','{"block_index":310074,"ledger_hash":"61015667044d0dddac3bdb16db67faa6ebcb71758101bfad898fca8ed183e7c3","messages_hash":"37a72ebc94288c1526b9dd7ffc91a59b9fcfeddc28c7848efe86bf44ed5eaa31","txlist_hash":"298ed692f21afcee61b06fd853cf07e5707dbd63a05f0caff6b6a177edc3b613"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(295,310075,'insert','blocks','{"block_hash":"ef547198c6e36d829f117cfd7077ccde45158e3c545152225fa24dba7a26847b","block_index":310075,"block_time":310075000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(295,310074,'insert','blocks','{"block_hash":"ef547198c6e36d829f117cfd7077ccde45158e3c545152225fa24dba7a26847b","block_index":310075,"block_time":310075000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(296,310075,'parse','blocks','{"block_index":310075,"ledger_hash":"5dd06f32075c46b6e573d73f12c1c31cf82cac5d1588bbdf302b8fe95c4b948b","messages_hash":"1bd5f8cc1ec863a1eabcbc0e89dd96b86cf0b47a76ea553fae27a1f9b44a78f3","txlist_hash":"528e4b6aee88202f84f9f2b56611d0aba2336d925b8d8fe47039504e6eea1ebc"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(297,310076,'insert','blocks','{"block_hash":"3b0499c2e8e8f0252c7288d4ecf66efc426ca37aad3524424d14c8bc6f8b0d92","block_index":310076,"block_time":310076000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(297,310075,'insert','blocks','{"block_hash":"3b0499c2e8e8f0252c7288d4ecf66efc426ca37aad3524424d14c8bc6f8b0d92","block_index":310076,"block_time":310076000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(298,310076,'parse','blocks','{"block_index":310076,"ledger_hash":"8e1782c2f35a07fcc4c57b34b2226b70cc4c7af2761386f38fc8fd74d53d5e60","messages_hash":"ae84d3a2b80f3efcb466d2371fd67160de7b6a832d122ee80403f9e966190814","txlist_hash":"76682f0ffbc6b86d16fbcec967a7562f6f12558c12aa3d9abd8779f51cc870ab"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(299,310077,'insert','blocks','{"block_hash":"d2adeefa9024ab3ff2822bc36acf19b6c647cea118cf15b86c6bc00c3322e7dd","block_index":310077,"block_time":310077000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(299,310076,'insert','blocks','{"block_hash":"d2adeefa9024ab3ff2822bc36acf19b6c647cea118cf15b86c6bc00c3322e7dd","block_index":310077,"block_time":310077000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(300,310077,'parse','blocks','{"block_index":310077,"ledger_hash":"6469ff80c3890d274817d30602f33d5d4b0a7c0a9e3b85100d21d7b38d894efb","messages_hash":"c3eaa5ca861b8b1f550baee63c8210fc3fcca2e8326b968478c7fd435959d700","txlist_hash":"187e9ae8428d46b7f8c8d652ab31dcf7c86a574cc781714a71784857dc0d1365"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(301,310078,'insert','blocks','{"block_hash":"f6c17115ef0efe489c562bcda4615892b4d4b39db0c9791fe193d4922bd82cd6","block_index":310078,"block_time":310078000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(301,310077,'insert','blocks','{"block_hash":"f6c17115ef0efe489c562bcda4615892b4d4b39db0c9791fe193d4922bd82cd6","block_index":310078,"block_time":310078000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(302,310078,'parse','blocks','{"block_index":310078,"ledger_hash":"3ca73c2bf37c694281938a0599335633dccf0284a027f5f3b8e17a9e68cbcdf0","messages_hash":"4b53c5f3f79be4d81443e9c774ced97b5a945a4ea630ee39796a6f18784874cd","txlist_hash":"f7830250755fc0566ee5162a06e7308b51c9c0a7a951752be6cff224806a90fa"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(303,310079,'insert','blocks','{"block_hash":"f2fbd2074d804e631db44cb0fb2e1db3fdc367e439c21ffc40d73104c4d7069c","block_index":310079,"block_time":310079000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(303,310078,'insert','blocks','{"block_hash":"f2fbd2074d804e631db44cb0fb2e1db3fdc367e439c21ffc40d73104c4d7069c","block_index":310079,"block_time":310079000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(304,310079,'parse','blocks','{"block_index":310079,"ledger_hash":"ae4a36e1ce7d5e11f059301684573cddce85b70ba69188a116e0611ceba5c140","messages_hash":"d3fb445eb5f1998a4f0490b187079d82a2522179d7fabd4aac10961120e8de5c","txlist_hash":"8d3b4ed30546c5f19f5522a0f57a86c29159ce27bf9e1e183a5ecffd9fbae8a2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(305,310080,'insert','blocks','{"block_hash":"42943b914d9c367000a78b78a544cc4b84b1df838aadde33fe730964a89a3a6c","block_index":310080,"block_time":310080000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(305,310079,'insert','blocks','{"block_hash":"42943b914d9c367000a78b78a544cc4b84b1df838aadde33fe730964a89a3a6c","block_index":310080,"block_time":310080000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(306,310080,'parse','blocks','{"block_index":310080,"ledger_hash":"c2c0b96c64f1ed555c8553da976e0fcc3a5ef403819ceac49cf22b476281ced1","messages_hash":"53f48ccfd392fea120503dc3305b1a2425316a48760bdbd9eca17c1cde959319","txlist_hash":"d9ecf83f3f9f40246bee151938855fce34e0f9c636a5c9c2c80c896eb59287b9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(307,310081,'insert','blocks','{"block_hash":"6554f9d307976249e7b7e260e08046b3b55d318f8b6af627fed5be3063f123c4","block_index":310081,"block_time":310081000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(307,310080,'insert','blocks','{"block_hash":"6554f9d307976249e7b7e260e08046b3b55d318f8b6af627fed5be3063f123c4","block_index":310081,"block_time":310081000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(308,310081,'parse','blocks','{"block_index":310081,"ledger_hash":"88d1b09f8141b90b44740e4618422298f8a64f2b3d11230c6b04084ef8d11b2c","messages_hash":"d66811b6b4438b65cf403dbcf382e0a41cfcfe9bd4f0f7b95c2e061564e81ea7","txlist_hash":"49e2f64485ac3ef523a079732bce9b2197384e2abfb3a4ad9340bca5a7179e31"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(309,310082,'insert','blocks','{"block_hash":"4f1ef91b1dcd575f8ac2e66a67715500cbca154bd6f3b8148bb7015a6aa6c644","block_index":310082,"block_time":310082000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(309,310081,'insert','blocks','{"block_hash":"4f1ef91b1dcd575f8ac2e66a67715500cbca154bd6f3b8148bb7015a6aa6c644","block_index":310082,"block_time":310082000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(310,310082,'parse','blocks','{"block_index":310082,"ledger_hash":"dab22ae7a9216033777136cbbac87a3597cf6478a2fd008260caab3cad0cde3f","messages_hash":"a07058ef1ba8c2a825e497f04e76c526294e8a4bd8e999c96cd195fec2266738","txlist_hash":"5406c6e3c63633910da82fc039c525dbeeb1aa818dc450a9d34d43084eef680f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(311,310083,'insert','blocks','{"block_hash":"9b1f6fd6ff9b0dc4e37603cfb0625f49067c775b99e12492afd85392d3c8d850","block_index":310083,"block_time":310083000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(311,310082,'insert','blocks','{"block_hash":"9b1f6fd6ff9b0dc4e37603cfb0625f49067c775b99e12492afd85392d3c8d850","block_index":310083,"block_time":310083000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(312,310083,'parse','blocks','{"block_index":310083,"ledger_hash":"a185e60dc97d19a211b0dfaa3f3da154956499b4af146751bf1d776fc68c15b8","messages_hash":"be8805302f4e3ff5944af2e51e0eeb84680ee2fe6c5a976ba576b347998d8c73","txlist_hash":"76e009b37822fc739a1e4abccf9f908a5fcdbed7fac540a719efbff8ebc694b7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(313,310084,'insert','blocks','{"block_hash":"1e0972523e80306441b9f4157f171716199f1428db2e818a7f7817ccdc8859e3","block_index":310084,"block_time":310084000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(313,310083,'insert','blocks','{"block_hash":"1e0972523e80306441b9f4157f171716199f1428db2e818a7f7817ccdc8859e3","block_index":310084,"block_time":310084000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(314,310084,'parse','blocks','{"block_index":310084,"ledger_hash":"622c574321be176c535fde918f319e10cfacaab383978be51406334303d14a8d","messages_hash":"1182b2e349f88f2df5119e7cbbd3ff6d9893ab5e00be067bc47d35b3f986d041","txlist_hash":"f3a3c37d89eb008f2194267a1eb5a7a52e9443f8b1f5fe51267d93a57eee27c7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(315,310085,'insert','blocks','{"block_hash":"c5b6e9581831e3bc5848cd7630c499bca26d9ece5156d36579bdb72d54817e34","block_index":310085,"block_time":310085000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(315,310084,'insert','blocks','{"block_hash":"c5b6e9581831e3bc5848cd7630c499bca26d9ece5156d36579bdb72d54817e34","block_index":310085,"block_time":310085000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(316,310085,'parse','blocks','{"block_index":310085,"ledger_hash":"5556084b92f51175d4de4097fcd820a3c367c2f0630d3a20081296e892462d84","messages_hash":"3398a844add370aa0b7661ed80a3d7090f730a0b1bb0a5943ed5f1383ace9234","txlist_hash":"f284f757d004154b6ab9b9ee9d18281e6f8dd51f25f3f1fc7cc58450e0ba5f17"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(317,310086,'insert','blocks','{"block_hash":"080c1dc55a4ecf4824cf9840602498cfc35b5f84099f50b71b45cb63834c7a78","block_index":310086,"block_time":310086000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(317,310085,'insert','blocks','{"block_hash":"080c1dc55a4ecf4824cf9840602498cfc35b5f84099f50b71b45cb63834c7a78","block_index":310086,"block_time":310086000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(318,310086,'parse','blocks','{"block_index":310086,"ledger_hash":"fc9dd8ef92fc7d47b187a75bd16e9698d61fa9ce6b4da7bba75982f59b0fbbc5","messages_hash":"c6f8b9023f4fb14abf10b405dfe416bb91386d12667871c8b128528162b27df4","txlist_hash":"e5f9da1d98725423a240687ba2985b42f8acb274ba0122b4e31e25c57619845f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(319,310087,'insert','blocks','{"block_hash":"4ec8cb1c38b22904e8087a034a6406b896eff4dd28e7620601c6bddf82e2738c","block_index":310087,"block_time":310087000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(319,310086,'insert','blocks','{"block_hash":"4ec8cb1c38b22904e8087a034a6406b896eff4dd28e7620601c6bddf82e2738c","block_index":310087,"block_time":310087000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(320,310087,'parse','blocks','{"block_index":310087,"ledger_hash":"21f7329fa27373fba176043db9081b0d9f95f75421e5adce87177a3edffcedc0","messages_hash":"74446399df111b44c653465cc75327752e252ed8686373b7266390d50a6707a8","txlist_hash":"7935ee6c215a123367ddfae34507170148723d08f1963aad7e47b68520fa4e70"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(321,310088,'insert','blocks','{"block_hash":"e945c815c433cbddd0bf8e66c5c23b51072483492acda98f5c2c201020a8c5b3","block_index":310088,"block_time":310088000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(321,310087,'insert','blocks','{"block_hash":"e945c815c433cbddd0bf8e66c5c23b51072483492acda98f5c2c201020a8c5b3","block_index":310088,"block_time":310088000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(322,310088,'parse','blocks','{"block_index":310088,"ledger_hash":"19164a10a0602df57d1add2e3a31ad4eef9d3ef9e53e70174b44aa91de2d6296","messages_hash":"8f42f7221255861ee5bd5ba65b281a071fab20f79c483ef92460f8e7d79beb9d","txlist_hash":"d35a417416c712908cdfbeda76e261a55c605ff8091605a79d4d4fc986ae76cd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(323,310089,'insert','blocks','{"block_hash":"0382437f895ef3e7e38bf025fd4f606fd44d4bbd6aea71dbdc4ed11a7cd46f33","block_index":310089,"block_time":310089000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(323,310088,'insert','blocks','{"block_hash":"0382437f895ef3e7e38bf025fd4f606fd44d4bbd6aea71dbdc4ed11a7cd46f33","block_index":310089,"block_time":310089000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(324,310089,'parse','blocks','{"block_index":310089,"ledger_hash":"87f1c713c5f2cd84fab28b996008900f86bf9eaad25ceedac1507348a949be7c","messages_hash":"051ccde9020819e5b7aa2c6f95ab716f1ac0fb7a905d31c67ee5352c8572ab3c","txlist_hash":"44c73622e27c362abf0460a5e0d7b836091523b763b6183cb9815cee30d66bef"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(325,310090,'insert','blocks','{"block_hash":"b756db71dc037b5a4582de354a3347371267d31ebda453e152f0a13bb2fae969","block_index":310090,"block_time":310090000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(325,310089,'insert','blocks','{"block_hash":"b756db71dc037b5a4582de354a3347371267d31ebda453e152f0a13bb2fae969","block_index":310090,"block_time":310090000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(326,310090,'parse','blocks','{"block_index":310090,"ledger_hash":"75264a6a628d669a60b4a8ca7e24b6b5ef1ad2c74d955b8325959f906c3bc337","messages_hash":"883f97a60b66fb64c61c49b1d08bbe3245988443c8da0f04180aaafe1aabc6bb","txlist_hash":"c1771520c57b0c705c3a5f0d576622c8dd40c399e4946b63ba153af976b23b0e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(327,310091,'insert','blocks','{"block_hash":"734a9aa485f36399d5efb74f3b9c47f8b5f6fd68c9967f134b14cfe7e2d7583c","block_index":310091,"block_time":310091000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(327,310090,'insert','blocks','{"block_hash":"734a9aa485f36399d5efb74f3b9c47f8b5f6fd68c9967f134b14cfe7e2d7583c","block_index":310091,"block_time":310091000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(328,310091,'parse','blocks','{"block_index":310091,"ledger_hash":"27914e38b3ca9d8444275e5c6d24b5cfe0b4093f7c645d5c1fc3c39e0d3a3c60","messages_hash":"063389fad33e69fb1a37535b082d7605ceb64e2a98f2c157c4f072e6254b8c35","txlist_hash":"329ae5ae96b71b9a116cb82d9518110e63d32a9dfcb6fece911201ab6c3a78c5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(329,310092,'insert','blocks','{"block_hash":"56386beb65f9228740d4ad43a1c575645f6daf59e0dd9f22551c59215b5e8c3d","block_index":310092,"block_time":310092000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(329,310091,'insert','blocks','{"block_hash":"56386beb65f9228740d4ad43a1c575645f6daf59e0dd9f22551c59215b5e8c3d","block_index":310092,"block_time":310092000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(330,310092,'parse','blocks','{"block_index":310092,"ledger_hash":"eca83e762899ace4d990b8acb23183263df5f92be10b63aecab3518b340b975d","messages_hash":"cd07af393f202759c9752fede344e7b96e08767be4525e4530690dd32961e3b8","txlist_hash":"6183465e58c5e5ef0f359a032e98d12cd247ff080ae44dc7a90ee35006e74e9e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(331,310093,'insert','blocks','{"block_hash":"a74a2425f2f4be24bb5f715173e6756649e1cbf1b064aeb1ef60e0b94b418ddc","block_index":310093,"block_time":310093000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(331,310092,'insert','blocks','{"block_hash":"a74a2425f2f4be24bb5f715173e6756649e1cbf1b064aeb1ef60e0b94b418ddc","block_index":310093,"block_time":310093000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(332,310093,'parse','blocks','{"block_index":310093,"ledger_hash":"3544fab97fe90a35b1f52ba955f88a8149d90329986df38d97e12992201bb187","messages_hash":"54e1bbd5d34dc103464f9254d73b99e2bb240ebf2981fd5e78c1778492442c58","txlist_hash":"407c0451107403f827f434f3f8f8e3c9adb33362ab584802d87903afe3851f4d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(333,310094,'insert','blocks','{"block_hash":"2a8f976f20c4e89ff01071915ac96ee35192d54df3a246bf61fd4a0cccfb5b23","block_index":310094,"block_time":310094000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(333,310093,'insert','blocks','{"block_hash":"2a8f976f20c4e89ff01071915ac96ee35192d54df3a246bf61fd4a0cccfb5b23","block_index":310094,"block_time":310094000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(334,310094,'parse','blocks','{"block_index":310094,"ledger_hash":"df1e6d8f1be344f78c0b58baf7260c2abdbed3175adc45a122947815c08fcc16","messages_hash":"1b3956b84c9076fa22fdd3350a85b27e0ac949495e18dcc9c2187e07d7e4a596","txlist_hash":"d4bc7124f8beb9fe04930a1b19a66aef57669e6bf790a5d38441beefcc001dbf"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(335,310095,'insert','blocks','{"block_hash":"bed0fa40c9981223fb40b3be8124ca619edc9dd34d0c907369477ea92e5d2cd2","block_index":310095,"block_time":310095000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(335,310094,'insert','blocks','{"block_hash":"bed0fa40c9981223fb40b3be8124ca619edc9dd34d0c907369477ea92e5d2cd2","block_index":310095,"block_time":310095000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(336,310095,'parse','blocks','{"block_index":310095,"ledger_hash":"8b9febcfe1a9447f6a820c060f503dfe6e5c02738df4d9d63b007fe03847a6c7","messages_hash":"c35d50219e30573b4346080b362836e7aa84dfa6f4ce548e3f5c94f891b8e5cd","txlist_hash":"7038d6f46cc32e35793799e50fbce7bde13c52c379e3bea10da0e6443a221c62"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(337,310096,'insert','blocks','{"block_hash":"306aeec3db435fabffdf88c2f26ee83caa4c2426375a33daa2be041dbd27ea2f","block_index":310096,"block_time":310096000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(337,310095,'insert','blocks','{"block_hash":"306aeec3db435fabffdf88c2f26ee83caa4c2426375a33daa2be041dbd27ea2f","block_index":310096,"block_time":310096000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(338,310096,'parse','blocks','{"block_index":310096,"ledger_hash":"b927091b4cf42f8537058a9adbec3814b574c1e1ccd242fe44c5f3671a191304","messages_hash":"173e9852974eacbeb6084725c5e9f300ea1e0eec8ee89eb63f822cb1cec8976f","txlist_hash":"7640d47e11233c9d27a8e868bec5595acd99b3c7326a480298f7ea38c4a66689"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(339,310097,'insert','blocks','{"block_hash":"13e8e16e67c7cdcc80d477491e554b43744f90e8e1a9728439a11fab42cefadf","block_index":310097,"block_time":310097000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(339,310096,'insert','blocks','{"block_hash":"13e8e16e67c7cdcc80d477491e554b43744f90e8e1a9728439a11fab42cefadf","block_index":310097,"block_time":310097000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(340,310097,'parse','blocks','{"block_index":310097,"ledger_hash":"649d094cfc74f90e06bb4514276aaf3b0a0ed45f56397a2f774cae9602d02e6f","messages_hash":"c063131b7b3e526fcd0d32784dd33bfbde81aaf84860d2fd128538891629ba59","txlist_hash":"ce9cdd6db6e1bbea3a9446b50b092e504bcc58900befb237580896e1c107eaab"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(341,310098,'insert','blocks','{"block_hash":"ca5bca4b5ec4fa6183e05176abe921cff884c4e20910fab55b603cef48dc3bca","block_index":310098,"block_time":310098000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(341,310097,'insert','blocks','{"block_hash":"ca5bca4b5ec4fa6183e05176abe921cff884c4e20910fab55b603cef48dc3bca","block_index":310098,"block_time":310098000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(342,310098,'parse','blocks','{"block_index":310098,"ledger_hash":"c9a9dec300afba2cc3f171f76ff4c07cbeb7a41a86a3f498f712e066a8acbd17","messages_hash":"8ae79287158f94c84d5945cb8833435518c91dba4c8e95036198369ac548b610","txlist_hash":"7153d6b86e3d8ed76bed0edd2dbd4fe6200e1e6d82d51dd3f812d6b43109f503"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(343,310099,'insert','blocks','{"block_hash":"3c4c2279cd7de0add5ec469648a845875495a7d54ebfb5b012dcc5a197b7992a","block_index":310099,"block_time":310099000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(343,310098,'insert','blocks','{"block_hash":"3c4c2279cd7de0add5ec469648a845875495a7d54ebfb5b012dcc5a197b7992a","block_index":310099,"block_time":310099000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(344,310099,'parse','blocks','{"block_index":310099,"ledger_hash":"3c7434887f9373b5370664180ba640fa63c2eb5b85569875105e4f4db67d8c02","messages_hash":"a3e5b0bb7df3e0ec5a9e23f7abb2cb779e266038bc8e99e5d99a54c7516e6642","txlist_hash":"adfefb6d18cdf44329bf9330e32f265145f60290f2a75db73fea8dd8ed2eb7d6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(345,310100,'insert','blocks','{"block_hash":"96925c05b3c7c80c716f5bef68d161c71d044252c766ca0e3f17f255764242cb","block_index":310100,"block_time":310100000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(345,310099,'insert','blocks','{"block_hash":"96925c05b3c7c80c716f5bef68d161c71d044252c766ca0e3f17f255764242cb","block_index":310100,"block_time":310100000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(346,310100,'parse','blocks','{"block_index":310100,"ledger_hash":"7e6a09386c3d8552a0dcc25b75143876a3046ebac0ff9cb09d6224ea7e2f3df9","messages_hash":"adc0156efd0d146d632eb6ce494f365b5c2d40acc8c22f2138ee64bce753567b","txlist_hash":"2776deb848ce539546aada2bc1756d9de92b23e0a8d513f5dbfb1b0bb3be3bc5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(347,310101,'insert','blocks','{"block_hash":"369472409995ca1a2ebecbad6bf9dab38c378ab1e67e1bdf13d4ce1346731cd6","block_index":310101,"block_time":310101000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(347,310100,'insert','blocks','{"block_hash":"369472409995ca1a2ebecbad6bf9dab38c378ab1e67e1bdf13d4ce1346731cd6","block_index":310101,"block_time":310101000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(348,310101,'parse','blocks','{"block_index":310101,"ledger_hash":"6903c0c5941f334f1374aa731e389b010043fc5940d4e9ae8b94480fb4fca030","messages_hash":"6be3d97c2fd4c161f247215c9fe17df2747c2adf80b1292294705ef636ca4d40","txlist_hash":"6612c5f602f26ccc2cf4961f27e64c188ba405870cc0d7cf881c4e0fcb9a54ce"}',0,'BLOCK_PARSED'); -- Triggers and indices on messages CREATE TRIGGER block_update_messages diff --git a/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_3_of_3.sql b/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_3_of_3.sql index 86e20a1f0b..3305ecf6cb 100644 --- a/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_3_of_3.sql +++ b/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_3_of_3.sql @@ -465,26 +465,26 @@ CREATE TABLE messages( bindings TEXT, timestamp INTEGER, event TEXT); -INSERT INTO messages VALUES(0,309999,'insert','blocks','{"block_hash":"8b3bef249cb3b0fa23a4936c1249b6bd41daeadc848c8d2e409ea1cbc10adfe7","block_index":309999,"block_time":309999000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(0,0,'insert','blocks','{"block_hash":"8b3bef249cb3b0fa23a4936c1249b6bd41daeadc848c8d2e409ea1cbc10adfe7","block_index":309999,"block_time":309999000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1,309999,'parse','blocks','{"block_index":309999,"ledger_hash":"63f0fef31d02da85fa779e9a0e1b585b1a6a4e59e14564249e288e074e91c223","messages_hash":"63f0fef31d02da85fa779e9a0e1b585b1a6a4e59e14564249e288e074e91c223","txlist_hash":"63f0fef31d02da85fa779e9a0e1b585b1a6a4e59e14564249e288e074e91c223"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(2,310000,'insert','blocks','{"block_hash":"505d8d82c4ced7daddef7ed0b05ba12ecc664176887b938ef56c6af276f3b30c","block_index":310000,"block_time":310000000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(2,309999,'insert','blocks','{"block_hash":"505d8d82c4ced7daddef7ed0b05ba12ecc664176887b938ef56c6af276f3b30c","block_index":310000,"block_time":310000000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(3,310000,'insert','transactions','{"block_hash":"505d8d82c4ced7daddef7ed0b05ba12ecc664176887b938ef56c6af276f3b30c","block_index":310000,"block_time":310000000,"btc_amount":62000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":5625,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"c9ff1be2579378fad6d83ca87e6c91428b1eb8cfd1b0f341b3c7e452764404f5","tx_index":1}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(4,310000,'insert','credits','{"address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310000,"calling_function":"burn","event":"c9ff1be2579378fad6d83ca87e6c91428b1eb8cfd1b0f341b3c7e452764404f5","quantity":93000000000,"tx_index":1}',0,'CREDIT'); INSERT INTO messages VALUES(5,310000,'insert','burns','{"block_index":310000,"burned":62000000,"earned":93000000000,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"c9ff1be2579378fad6d83ca87e6c91428b1eb8cfd1b0f341b3c7e452764404f5","tx_index":1}',0,'BURN'); INSERT INTO messages VALUES(6,310000,'parse','blocks','{"block_index":310000,"ledger_hash":"09fa44ed277cd9e448baf3d4a2accc520d57c77fed0d97379ba9bb804e3dda71","messages_hash":"6be4f08fcd898cb64f0378531dbe611a612627b71163bcea29aab0653610dcc6","txlist_hash":"7d9cd23062d78e9eb1a892f69b154410935e9675ede8e05fe9c1269cd3c54b12"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(7,310001,'insert','blocks','{"block_hash":"3c9f6a9c6cac46a9273bd3db39ad775acd5bc546378ec2fb0587e06e112cc78e","block_index":310001,"block_time":310001000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(7,310000,'insert','blocks','{"block_hash":"3c9f6a9c6cac46a9273bd3db39ad775acd5bc546378ec2fb0587e06e112cc78e","block_index":310001,"block_time":310001000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(8,310001,'insert','transactions','{"block_hash":"3c9f6a9c6cac46a9273bd3db39ad775acd5bc546378ec2fb0587e06e112cc78e","block_index":310001,"block_time":310001000,"btc_amount":1000,"data":"0000000000000000000000010000000002faf080","destination":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","fee":7650,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"8968369ff47b1f5f6959aa67aca82d1385f3763e1cac2180d8cf41b44a515a32","tx_index":2}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(9,310001,'insert','debits','{"action":"send","address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310001,"event":"8968369ff47b1f5f6959aa67aca82d1385f3763e1cac2180d8cf41b44a515a32","quantity":50000000,"tx_index":2}',0,'DEBIT'); INSERT INTO messages VALUES(10,310001,'insert','credits','{"address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","asset":"XCP","block_index":310001,"calling_function":"send","event":"8968369ff47b1f5f6959aa67aca82d1385f3763e1cac2180d8cf41b44a515a32","quantity":50000000,"tx_index":2}',0,'CREDIT'); INSERT INTO messages VALUES(11,310001,'insert','sends','{"asset":"XCP","block_index":310001,"destination":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","quantity":50000000,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"8968369ff47b1f5f6959aa67aca82d1385f3763e1cac2180d8cf41b44a515a32","tx_index":2}',0,'SEND'); INSERT INTO messages VALUES(12,310001,'parse','transactions','{"supported":true,"tx_hash":"8968369ff47b1f5f6959aa67aca82d1385f3763e1cac2180d8cf41b44a515a32","tx_index":2}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(13,310001,'parse','blocks','{"block_index":310001,"ledger_hash":"b2237a0b0b29b2198355f47d38cb995e013c0e074c29dcbf1b99ed4c0f459c8d","messages_hash":"e9a2d21a205d237a9db00044b47594e52ddef4e0ce7a8502602d1d763541949e","txlist_hash":"adddb3e1b9020e7ef190f661823c79abbc5951801b15469ad9f483c512af002a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(14,310002,'insert','blocks','{"block_hash":"fbb60f1144e1f7d4dc036a4a158a10ea6dea2ba6283a723342a49b8eb5cc9964","block_index":310002,"block_time":310002000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(14,310001,'insert','blocks','{"block_hash":"fbb60f1144e1f7d4dc036a4a158a10ea6dea2ba6283a723342a49b8eb5cc9964","block_index":310002,"block_time":310002000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(15,310002,'insert','transactions','{"block_hash":"fbb60f1144e1f7d4dc036a4a158a10ea6dea2ba6283a723342a49b8eb5cc9964","block_index":310002,"block_time":310002000,"btc_amount":0,"data":"0000000a00000000000000000000000002faf08000000000000000010000000005f5e100000a0000000000000000","destination":"","fee":1000000,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"1385519ca199f1b39bb89caac062fe3a342f18e393d301d7a56c150a8ab84093","tx_index":3}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(16,310002,'insert','orders','{"block_index":310002,"expiration":10,"expire_index":310012,"fee_provided":1000000,"fee_provided_remaining":1000000,"fee_required":0,"fee_required_remaining":0,"get_asset":"XCP","get_quantity":100000000,"get_remaining":100000000,"give_asset":"BTC","give_quantity":50000000,"give_remaining":50000000,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"open","tx_hash":"1385519ca199f1b39bb89caac062fe3a342f18e393d301d7a56c150a8ab84093","tx_index":3}',0,'OPEN_ORDER'); INSERT INTO messages VALUES(17,310002,'parse','transactions','{"supported":true,"tx_hash":"1385519ca199f1b39bb89caac062fe3a342f18e393d301d7a56c150a8ab84093","tx_index":3}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(18,310002,'parse','blocks','{"block_index":310002,"ledger_hash":"a3c393a285361d2981551f0a903d45847e7a0142779692d384bc77bac420db18","messages_hash":"ab4f4ad0d5abb5f36804c6b59a1ef3005b283e6718eb3b9ef279e64753216d4a","txlist_hash":"6fddb621bb8a1e2d10cf0ec8f507ada12be28578223ee53997aad614097bb35e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(19,310003,'insert','blocks','{"block_hash":"d50825dcb32bcf6f69994d616eba18de7718d3d859497e80751b2cb67e333e8a","block_index":310003,"block_time":310003000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(19,310002,'insert','blocks','{"block_hash":"d50825dcb32bcf6f69994d616eba18de7718d3d859497e80751b2cb67e333e8a","block_index":310003,"block_time":310003000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(20,310003,'insert','transactions','{"block_hash":"d50825dcb32bcf6f69994d616eba18de7718d3d859497e80751b2cb67e333e8a","block_index":310003,"block_time":310003000,"btc_amount":0,"data":"0000000a00000000000000010000000006422c4000000000000000000000000002faf080000a00000000000dbba0","destination":"","fee":6800,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"a2e93083b871e68cb89e216f9a99c4c6aea1eb92cbdbafc5b4b0e160c19c517e","tx_index":4}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(21,310003,'insert','debits','{"action":"open order","address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310003,"event":"a2e93083b871e68cb89e216f9a99c4c6aea1eb92cbdbafc5b4b0e160c19c517e","quantity":105000000,"tx_index":4}',0,'DEBIT'); INSERT INTO messages VALUES(22,310003,'insert','orders','{"block_index":310003,"expiration":10,"expire_index":310013,"fee_provided":6800,"fee_provided_remaining":6800,"fee_required":900000,"fee_required_remaining":900000,"get_asset":"BTC","get_quantity":50000000,"get_remaining":50000000,"give_asset":"XCP","give_quantity":105000000,"give_remaining":105000000,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"open","tx_hash":"a2e93083b871e68cb89e216f9a99c4c6aea1eb92cbdbafc5b4b0e160c19c517e","tx_index":4}',0,'OPEN_ORDER'); @@ -493,14 +493,14 @@ INSERT INTO messages VALUES(24,310003,'update','orders','{"fee_provided_remainin INSERT INTO messages VALUES(25,310003,'insert','order_matches','{"backward_asset":"XCP","backward_quantity":100000000,"block_index":310003,"fee_paid":857142,"forward_asset":"BTC","forward_quantity":50000000,"id":"1385519ca199f1b39bb89caac062fe3a342f18e393d301d7a56c150a8ab84093_a2e93083b871e68cb89e216f9a99c4c6aea1eb92cbdbafc5b4b0e160c19c517e","match_expire_index":310023,"status":"pending","tx0_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx0_block_index":310002,"tx0_expiration":10,"tx0_hash":"1385519ca199f1b39bb89caac062fe3a342f18e393d301d7a56c150a8ab84093","tx0_index":3,"tx1_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx1_block_index":310003,"tx1_expiration":10,"tx1_hash":"a2e93083b871e68cb89e216f9a99c4c6aea1eb92cbdbafc5b4b0e160c19c517e","tx1_index":4}',0,'ORDER_MATCH'); INSERT INTO messages VALUES(26,310003,'parse','transactions','{"supported":true,"tx_hash":"a2e93083b871e68cb89e216f9a99c4c6aea1eb92cbdbafc5b4b0e160c19c517e","tx_index":4}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(27,310003,'parse','blocks','{"block_index":310003,"ledger_hash":"f96ba90a471ab5524a574cc4ff72a228a8dc7019824482a664569dcb41c126c7","messages_hash":"cc9e415b3deeeffb07fe65b558b262e958c9688fda29829a128fc002e7ea07a5","txlist_hash":"d6756ca2a0f2a403b0a1714964ddb71bc773e0a18c049008f78670efb7137e18"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(28,310004,'insert','blocks','{"block_hash":"60cdc0ac0e3121ceaa2c3885f21f5789f49992ffef6e6ff99f7da80e36744615","block_index":310004,"block_time":310004000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(28,310003,'insert','blocks','{"block_hash":"60cdc0ac0e3121ceaa2c3885f21f5789f49992ffef6e6ff99f7da80e36744615","block_index":310004,"block_time":310004000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(29,310004,'insert','transactions','{"block_hash":"60cdc0ac0e3121ceaa2c3885f21f5789f49992ffef6e6ff99f7da80e36744615","block_index":310004,"block_time":310004000,"btc_amount":50000000,"data":"0000000b1385519ca199f1b39bb89caac062fe3a342f18e393d301d7a56c150a8ab84093a2e93083b871e68cb89e216f9a99c4c6aea1eb92cbdbafc5b4b0e160c19c517e","destination":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","fee":9675,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"06448effa4c26f1101b315b2dbe3d2b7b888ca18f5755f4365c97215a6c760ac","tx_index":5}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(30,310004,'insert','credits','{"address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310004,"calling_function":"btcpay","event":"06448effa4c26f1101b315b2dbe3d2b7b888ca18f5755f4365c97215a6c760ac","quantity":100000000,"tx_index":5}',0,'CREDIT'); INSERT INTO messages VALUES(31,310004,'update','order_matches','{"id":"1385519ca199f1b39bb89caac062fe3a342f18e393d301d7a56c150a8ab84093_a2e93083b871e68cb89e216f9a99c4c6aea1eb92cbdbafc5b4b0e160c19c517e","order_match_id":"1385519ca199f1b39bb89caac062fe3a342f18e393d301d7a56c150a8ab84093_a2e93083b871e68cb89e216f9a99c4c6aea1eb92cbdbafc5b4b0e160c19c517e","status":"completed"}',0,'ORDER_MATCH_UPDATE'); INSERT INTO messages VALUES(32,310004,'insert','btcpays','{"block_index":310004,"btc_amount":50000000,"destination":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","order_match_id":"1385519ca199f1b39bb89caac062fe3a342f18e393d301d7a56c150a8ab84093_a2e93083b871e68cb89e216f9a99c4c6aea1eb92cbdbafc5b4b0e160c19c517e","source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"06448effa4c26f1101b315b2dbe3d2b7b888ca18f5755f4365c97215a6c760ac","tx_index":5}',0,'BTC_PAY'); INSERT INTO messages VALUES(33,310004,'parse','transactions','{"supported":true,"tx_hash":"06448effa4c26f1101b315b2dbe3d2b7b888ca18f5755f4365c97215a6c760ac","tx_index":5}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(34,310004,'parse','blocks','{"block_index":310004,"ledger_hash":"943a23e317f71981b24d636cae98f495b2bb00c949b1603a778eb7500894c844","messages_hash":"9f6909b8c5d78e55d34f7745c22743903c3f785b1ef283554b5f878dfb56c07f","txlist_hash":"be04682401f137d4d02c7539d1c776bbc76263dea1bb88fc95197128ec1a700f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(35,310005,'insert','blocks','{"block_hash":"8005c2926b7ecc50376642bc661a49108b6dc62636463a5c492b123e2184cd9a","block_index":310005,"block_time":310005000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(35,310004,'insert','blocks','{"block_hash":"8005c2926b7ecc50376642bc661a49108b6dc62636463a5c492b123e2184cd9a","block_index":310005,"block_time":310005000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(36,310005,'insert','transactions','{"block_hash":"8005c2926b7ecc50376642bc661a49108b6dc62636463a5c492b123e2184cd9a","block_index":310005,"block_time":310005000,"btc_amount":0,"data":"000000140000000000004767000000003b9aca000100000000000000000000","destination":"","fee":6800,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"57b34dae586111eefeecae4d16f6d20d6447efa974b72931f7b2cd0f39890406","tx_index":6}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(37,310005,'insert','debits','{"action":"issuance fee","address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310005,"event":"57b34dae586111eefeecae4d16f6d20d6447efa974b72931f7b2cd0f39890406","quantity":50000000,"tx_index":6}',0,'DEBIT'); INSERT INTO messages VALUES(38,310005,'insert','assets','{"asset_id":"18279","asset_longname":null,"asset_name":"BBBB","block_index":310005}',0,'ASSET_CREATION'); @@ -508,7 +508,7 @@ INSERT INTO messages VALUES(39,310005,'insert','issuances','{"asset":"BBBB","ass INSERT INTO messages VALUES(40,310005,'insert','credits','{"address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"BBBB","block_index":310005,"calling_function":"issuance","event":"57b34dae586111eefeecae4d16f6d20d6447efa974b72931f7b2cd0f39890406","quantity":1000000000,"tx_index":6}',0,'CREDIT'); INSERT INTO messages VALUES(41,310005,'parse','transactions','{"supported":true,"tx_hash":"57b34dae586111eefeecae4d16f6d20d6447efa974b72931f7b2cd0f39890406","tx_index":6}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(42,310005,'parse','blocks','{"block_index":310005,"ledger_hash":"0c5f3dd2d439a571eec03583442fb051bedf5bc0b0ede92012922b27847af2a1","messages_hash":"14056368108692b234d1f9b7f65cf905ea4ce658789e0a79a3032a9e16bb4ab9","txlist_hash":"03c8d26098b8e49a297c104f22af44a622378afa711195bd8b91d46f01d68d65"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(43,310006,'insert','blocks','{"block_hash":"bdad69d1669eace68b9f246de113161099d4f83322e2acf402c42defef3af2bb","block_index":310006,"block_time":310006000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(43,310005,'insert','blocks','{"block_hash":"bdad69d1669eace68b9f246de113161099d4f83322e2acf402c42defef3af2bb","block_index":310006,"block_time":310006000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(44,310006,'insert','transactions','{"block_hash":"bdad69d1669eace68b9f246de113161099d4f83322e2acf402c42defef3af2bb","block_index":310006,"block_time":310006000,"btc_amount":0,"data":"00000014000000000000476800000000000186a00000000000000000000006666f6f626172","destination":"","fee":6800,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"6163ab5e7282e43a2f07a146d28b4b45c55820ee541881bc98d2592f4e6ba975","tx_index":7}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(45,310006,'insert','debits','{"action":"issuance fee","address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310006,"event":"6163ab5e7282e43a2f07a146d28b4b45c55820ee541881bc98d2592f4e6ba975","quantity":50000000,"tx_index":7}',0,'DEBIT'); INSERT INTO messages VALUES(46,310006,'insert','assets','{"asset_id":"18280","asset_longname":null,"asset_name":"BBBC","block_index":310006}',0,'ASSET_CREATION'); @@ -516,21 +516,21 @@ INSERT INTO messages VALUES(47,310006,'insert','issuances','{"asset":"BBBC","ass INSERT INTO messages VALUES(48,310006,'insert','credits','{"address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"BBBC","block_index":310006,"calling_function":"issuance","event":"6163ab5e7282e43a2f07a146d28b4b45c55820ee541881bc98d2592f4e6ba975","quantity":100000,"tx_index":7}',0,'CREDIT'); INSERT INTO messages VALUES(49,310006,'parse','transactions','{"supported":true,"tx_hash":"6163ab5e7282e43a2f07a146d28b4b45c55820ee541881bc98d2592f4e6ba975","tx_index":7}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(50,310006,'parse','blocks','{"block_index":310006,"ledger_hash":"377fe894d79d60b011958ed747908b6009c5e0261fa177caefc664cb8db4c74b","messages_hash":"bd4d9db136434d836e9c7e435e56e44fa3ff5c3b1cf93fd0302f617a4b812347","txlist_hash":"079ec7423e2fe87820626aee8980e236a78e7d51b453a739fb5768d9d520bef6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(51,310007,'insert','blocks','{"block_hash":"10a642b96d60091d08234d17dfdecf3025eca41e4fc8e3bbe71a91c5a457cb4b","block_index":310007,"block_time":310007000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(51,310006,'insert','blocks','{"block_hash":"10a642b96d60091d08234d17dfdecf3025eca41e4fc8e3bbe71a91c5a457cb4b","block_index":310007,"block_time":310007000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(52,310007,'insert','transactions','{"block_hash":"10a642b96d60091d08234d17dfdecf3025eca41e4fc8e3bbe71a91c5a457cb4b","block_index":310007,"block_time":310007000,"btc_amount":1000,"data":"00000000000000000000476700000000003d0900","destination":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","fee":7650,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"8972d4a117a0c4161ddf2bcdeb3877e0ad4cbf9cb5ce2be3411c69eedc9f718b","tx_index":8}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(53,310007,'insert','debits','{"action":"send","address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"BBBB","block_index":310007,"event":"8972d4a117a0c4161ddf2bcdeb3877e0ad4cbf9cb5ce2be3411c69eedc9f718b","quantity":4000000,"tx_index":8}',0,'DEBIT'); INSERT INTO messages VALUES(54,310007,'insert','credits','{"address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","asset":"BBBB","block_index":310007,"calling_function":"send","event":"8972d4a117a0c4161ddf2bcdeb3877e0ad4cbf9cb5ce2be3411c69eedc9f718b","quantity":4000000,"tx_index":8}',0,'CREDIT'); INSERT INTO messages VALUES(55,310007,'insert','sends','{"asset":"BBBB","block_index":310007,"destination":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","quantity":4000000,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"8972d4a117a0c4161ddf2bcdeb3877e0ad4cbf9cb5ce2be3411c69eedc9f718b","tx_index":8}',0,'SEND'); INSERT INTO messages VALUES(56,310007,'parse','transactions','{"supported":true,"tx_hash":"8972d4a117a0c4161ddf2bcdeb3877e0ad4cbf9cb5ce2be3411c69eedc9f718b","tx_index":8}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(57,310007,'parse','blocks','{"block_index":310007,"ledger_hash":"4be55eb54e78e829306dfa31248b3073d311f49da420d9844f9aedabfbd296e3","messages_hash":"0483b397712a1597fda79b43b8d2e320e19089c073d98a94f8f31d4bda960bc0","txlist_hash":"d57db7ce89eeea61f270e7c676b38d3574c52166322cb0e287f1857a7d085e5a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(58,310008,'insert','blocks','{"block_hash":"47d0e3acbdc6916aeae95e987f9cfa16209b3df1e67bb38143b3422b32322c33","block_index":310008,"block_time":310008000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(58,310007,'insert','blocks','{"block_hash":"47d0e3acbdc6916aeae95e987f9cfa16209b3df1e67bb38143b3422b32322c33","block_index":310008,"block_time":310008000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(59,310008,'insert','transactions','{"block_hash":"47d0e3acbdc6916aeae95e987f9cfa16209b3df1e67bb38143b3422b32322c33","block_index":310008,"block_time":310008000,"btc_amount":1000,"data":"000000000000000000004768000000000000020e","destination":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","fee":7650,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"3f49e685b22a7cd1a4d20bb7ca9a3f1ec4e593bc6e60c67037de2aab8b992391","tx_index":9}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(60,310008,'insert','debits','{"action":"send","address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"BBBC","block_index":310008,"event":"3f49e685b22a7cd1a4d20bb7ca9a3f1ec4e593bc6e60c67037de2aab8b992391","quantity":526,"tx_index":9}',0,'DEBIT'); INSERT INTO messages VALUES(61,310008,'insert','credits','{"address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","asset":"BBBC","block_index":310008,"calling_function":"send","event":"3f49e685b22a7cd1a4d20bb7ca9a3f1ec4e593bc6e60c67037de2aab8b992391","quantity":526,"tx_index":9}',0,'CREDIT'); INSERT INTO messages VALUES(62,310008,'insert','sends','{"asset":"BBBC","block_index":310008,"destination":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","quantity":526,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"3f49e685b22a7cd1a4d20bb7ca9a3f1ec4e593bc6e60c67037de2aab8b992391","tx_index":9}',0,'SEND'); INSERT INTO messages VALUES(63,310008,'parse','transactions','{"supported":true,"tx_hash":"3f49e685b22a7cd1a4d20bb7ca9a3f1ec4e593bc6e60c67037de2aab8b992391","tx_index":9}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(64,310008,'parse','blocks','{"block_index":310008,"ledger_hash":"1248da848479b90f9dada38eaa02b9fe1226859e6ed1e3c4a121172786178dea","messages_hash":"1090df77ae250c237887d69ec32aa9ce3978b820f31f257743be73497a03e395","txlist_hash":"8727f3f9af7958daaecda9f2cef1bad0303d631cf9f8418636cf130581e4bb79"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(65,310009,'insert','blocks','{"block_hash":"4d474992b141620bf3753863db7ee5e8af26cadfbba27725911f44fa657bc1c0","block_index":310009,"block_time":310009000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(65,310008,'insert','blocks','{"block_hash":"4d474992b141620bf3753863db7ee5e8af26cadfbba27725911f44fa657bc1c0","block_index":310009,"block_time":310009000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(66,310009,'insert','transactions','{"block_hash":"4d474992b141620bf3753863db7ee5e8af26cadfbba27725911f44fa657bc1c0","block_index":310009,"block_time":310009000,"btc_amount":0,"data":"00000032000000000000025800000000000047670000000000000001","destination":"","fee":6800,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"6aa6c552e5a302b056768aed88aa8da6e9f78def669d5203904719e15ff1ac29","tx_index":10}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(67,310009,'insert','debits','{"action":"dividend","address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310009,"event":"6aa6c552e5a302b056768aed88aa8da6e9f78def669d5203904719e15ff1ac29","quantity":24,"tx_index":10}',0,'DEBIT'); INSERT INTO messages VALUES(68,310009,'insert','debits','{"action":"dividend fee","address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310009,"event":"6aa6c552e5a302b056768aed88aa8da6e9f78def669d5203904719e15ff1ac29","quantity":20000,"tx_index":10}',0,'DEBIT'); @@ -538,7 +538,7 @@ INSERT INTO messages VALUES(69,310009,'insert','credits','{"address":"3_mn6q3dS2 INSERT INTO messages VALUES(70,310009,'insert','dividends','{"asset":"BBBB","block_index":310009,"dividend_asset":"XCP","fee_paid":20000,"quantity_per_unit":600,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"6aa6c552e5a302b056768aed88aa8da6e9f78def669d5203904719e15ff1ac29","tx_index":10}',0,'ASSET_DIVIDEND'); INSERT INTO messages VALUES(71,310009,'parse','transactions','{"supported":true,"tx_hash":"6aa6c552e5a302b056768aed88aa8da6e9f78def669d5203904719e15ff1ac29","tx_index":10}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(72,310009,'parse','blocks','{"block_index":310009,"ledger_hash":"1e1b07f218127eccdfab98a4bc127ce185cda15314e72328dfe10eb8f2f18726","messages_hash":"74ca0349f3017a1f66ef461140c650f4d543dcd443ee6557fc2b5644f1617400","txlist_hash":"baa3b08e70e0db5ecf913bb99da662ec3dc04a5650f99d2d36408eb8ed6cc4ea"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(73,310010,'insert','blocks','{"block_hash":"a58162dff81a32e6a29b075be759dbb9fa9b8b65303e69c78fb4d7b0acc37042","block_index":310010,"block_time":310010000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(73,310009,'insert','blocks','{"block_hash":"a58162dff81a32e6a29b075be759dbb9fa9b8b65303e69c78fb4d7b0acc37042","block_index":310010,"block_time":310010000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(74,310010,'insert','transactions','{"block_hash":"a58162dff81a32e6a29b075be759dbb9fa9b8b65303e69c78fb4d7b0acc37042","block_index":310010,"block_time":310010000,"btc_amount":0,"data":"00000032000000000000032000000000000047680000000000000001","destination":"","fee":6800,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"8606cbcb3aaa438e207e9ef279191f6f100e34d479b1985268525e32a91c953e","tx_index":11}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(75,310010,'insert','debits','{"action":"dividend","address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310010,"event":"8606cbcb3aaa438e207e9ef279191f6f100e34d479b1985268525e32a91c953e","quantity":420800,"tx_index":11}',0,'DEBIT'); INSERT INTO messages VALUES(76,310010,'insert','debits','{"action":"dividend fee","address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310010,"event":"8606cbcb3aaa438e207e9ef279191f6f100e34d479b1985268525e32a91c953e","quantity":20000,"tx_index":11}',0,'DEBIT'); @@ -546,18 +546,18 @@ INSERT INTO messages VALUES(77,310010,'insert','credits','{"address":"3_mn6q3dS2 INSERT INTO messages VALUES(78,310010,'insert','dividends','{"asset":"BBBC","block_index":310010,"dividend_asset":"XCP","fee_paid":20000,"quantity_per_unit":800,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"8606cbcb3aaa438e207e9ef279191f6f100e34d479b1985268525e32a91c953e","tx_index":11}',0,'ASSET_DIVIDEND'); INSERT INTO messages VALUES(79,310010,'parse','transactions','{"supported":true,"tx_hash":"8606cbcb3aaa438e207e9ef279191f6f100e34d479b1985268525e32a91c953e","tx_index":11}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(80,310010,'parse','blocks','{"block_index":310010,"ledger_hash":"03be7c3d8dc521277625164e3e828be106672cba205129c014ce7771a3b8730f","messages_hash":"3d53dacffbd01aea7f6de2017803318dd4f2e3dd68c172d073608c058c185089","txlist_hash":"5def9d6ed9fcf82c7ec9dbc2247657f349ec4df0b75dac4444f7ff90e24f0955"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(81,310011,'insert','blocks','{"block_hash":"8042cc2ef293fd73d050f283fbd075c79dd4c49fdcca054dc0714fc3a50dc1bb","block_index":310011,"block_time":310011000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(81,310010,'insert','blocks','{"block_hash":"8042cc2ef293fd73d050f283fbd075c79dd4c49fdcca054dc0714fc3a50dc1bb","block_index":310011,"block_time":310011000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(82,310011,'insert','transactions','{"block_hash":"8042cc2ef293fd73d050f283fbd075c79dd4c49fdcca054dc0714fc3a50dc1bb","block_index":310011,"block_time":310011000,"btc_amount":0,"data":"0000001e52bb3300405900000000000005f5e0ff09556e69742054657374","destination":"","fee":6800,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"47a25bd63a47c61ca2709279bb5c1dc8695f0e93926bf659038be64e6a1c4060","tx_index":12}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(83,310011,'insert','broadcasts','{"block_index":310011,"fee_fraction_int":99999999,"locked":false,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","text":"Unit Test","timestamp":1388000000,"tx_hash":"47a25bd63a47c61ca2709279bb5c1dc8695f0e93926bf659038be64e6a1c4060","tx_index":12,"value":100.0}',0,'BROADCAST'); INSERT INTO messages VALUES(84,310011,'parse','transactions','{"supported":true,"tx_hash":"47a25bd63a47c61ca2709279bb5c1dc8695f0e93926bf659038be64e6a1c4060","tx_index":12}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(85,310011,'parse','blocks','{"block_index":310011,"ledger_hash":"db6d49ef7cfb461f9431b2e712f694f0747012ae28f3684e0d41476f77fab667","messages_hash":"7ecbc512ec95ddd61fcdc326dd0a773a627a329892228506a957c54bf3bf6a9e","txlist_hash":"f6d1a346abbb2adae7dd7fe6ddd94061bcdae3ed30bd091958d445c8b5f57f4c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(86,310012,'insert','blocks','{"block_hash":"cdba329019d93a67b31b79d05f76ce1b7791d430ea0d6c1c2168fe78d2f67677","block_index":310012,"block_time":310012000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(86,310011,'insert','blocks','{"block_hash":"cdba329019d93a67b31b79d05f76ce1b7791d430ea0d6c1c2168fe78d2f67677","block_index":310012,"block_time":310012000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(87,310012,'insert','transactions','{"block_hash":"cdba329019d93a67b31b79d05f76ce1b7791d430ea0d6c1c2168fe78d2f67677","block_index":310012,"block_time":310012000,"btc_amount":1000,"data":"00000028000052bb33640000000002faf08000000000017d7840000000000000000000003b100000000a","destination":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","fee":7650,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"5c49e06f8ddf9cc0f83541550664bb00075a2f01df493278097066462497af16","tx_index":13}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(88,310012,'insert','debits','{"action":"bet","address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310012,"event":"5c49e06f8ddf9cc0f83541550664bb00075a2f01df493278097066462497af16","quantity":50000000,"tx_index":13}',0,'DEBIT'); INSERT INTO messages VALUES(89,310012,'insert','bets','{"bet_type":0,"block_index":310012,"counterwager_quantity":25000000,"counterwager_remaining":25000000,"deadline":1388000100,"expiration":10,"expire_index":310022,"fee_fraction_int":99999999.0,"feed_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","leverage":15120,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"open","target_value":0.0,"tx_hash":"5c49e06f8ddf9cc0f83541550664bb00075a2f01df493278097066462497af16","tx_index":13,"wager_quantity":50000000,"wager_remaining":50000000}',0,'OPEN_BET'); INSERT INTO messages VALUES(90,310012,'parse','transactions','{"supported":true,"tx_hash":"5c49e06f8ddf9cc0f83541550664bb00075a2f01df493278097066462497af16","tx_index":13}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(91,310012,'parse','blocks','{"block_index":310012,"ledger_hash":"ac399d193def488d3457876edef42dd651b30c976025c3d6f810e4d37c88c822","messages_hash":"9c6c273607bbb6fed258f56ebdf7090ee5a5d45fa7e6736a34197663771cc343","txlist_hash":"273ce70d30b249ba5afb8382ddf7ded2d0849044d519fb48224a6ea69b7ba6dc"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(92,310013,'insert','blocks','{"block_hash":"0425e5e832e4286757dc0228cd505b8d572081007218abd3a0983a3bcd502a61","block_index":310013,"block_time":310013000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(92,310012,'insert','blocks','{"block_hash":"0425e5e832e4286757dc0228cd505b8d572081007218abd3a0983a3bcd502a61","block_index":310013,"block_time":310013000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(93,310013,'insert','transactions','{"block_hash":"0425e5e832e4286757dc0228cd505b8d572081007218abd3a0983a3bcd502a61","block_index":310013,"block_time":310013000,"btc_amount":1000,"data":"00000028000152bb336400000000017d78400000000002793d60000000000000000000003b100000000a","destination":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","fee":7650,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"813e45480753e39c6ea548efd6b77f830120a41ac3b9bd37a4470b14e83301a3","tx_index":14}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(94,310013,'update','orders','{"status":"expired","tx_hash":"1385519ca199f1b39bb89caac062fe3a342f18e393d301d7a56c150a8ab84093"}',0,'ORDER_UPDATE'); INSERT INTO messages VALUES(95,310013,'insert','order_expirations','{"block_index":310013,"order_hash":"1385519ca199f1b39bb89caac062fe3a342f18e393d301d7a56c150a8ab84093","source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3"}',0,'ORDER_EXPIRATION'); @@ -566,10 +566,10 @@ INSERT INTO messages VALUES(97,310013,'insert','bets','{"bet_type":1,"block_inde INSERT INTO messages VALUES(98,310013,'update','bets','{"counterwager_remaining":4250000,"status":"open","tx_hash":"5c49e06f8ddf9cc0f83541550664bb00075a2f01df493278097066462497af16","wager_remaining":8500000}',0,'BET_UPDATE'); INSERT INTO messages VALUES(99,310013,'insert','credits','{"address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310013,"calling_function":"filled","event":"813e45480753e39c6ea548efd6b77f830120a41ac3b9bd37a4470b14e83301a3","quantity":4250000,"tx_index":14}',0,'CREDIT'); INSERT INTO messages VALUES(100,310013,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"813e45480753e39c6ea548efd6b77f830120a41ac3b9bd37a4470b14e83301a3","wager_remaining":4250000}',0,'BET_UPDATE'); -INSERT INTO messages VALUES(101,310012,'insert','bet_matches','{"backward_quantity":20750000,"block_index":310012,"deadline":1388000100,"fee_fraction_int":99999999,"feed_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","forward_quantity":41500000,"id":"5c49e06f8ddf9cc0f83541550664bb00075a2f01df493278097066462497af16_813e45480753e39c6ea548efd6b77f830120a41ac3b9bd37a4470b14e83301a3","initial_value":100.0,"leverage":15120,"match_expire_index":310022,"status":"pending","target_value":0.0,"tx0_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx0_bet_type":0,"tx0_block_index":310012,"tx0_expiration":10,"tx0_hash":"5c49e06f8ddf9cc0f83541550664bb00075a2f01df493278097066462497af16","tx0_index":13,"tx1_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx1_bet_type":1,"tx1_block_index":310013,"tx1_expiration":10,"tx1_hash":"813e45480753e39c6ea548efd6b77f830120a41ac3b9bd37a4470b14e83301a3","tx1_index":14}',0,'BET_MATCH'); +INSERT INTO messages VALUES(101,310013,'insert','bet_matches','{"backward_quantity":20750000,"block_index":310012,"deadline":1388000100,"fee_fraction_int":99999999,"feed_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","forward_quantity":41500000,"id":"5c49e06f8ddf9cc0f83541550664bb00075a2f01df493278097066462497af16_813e45480753e39c6ea548efd6b77f830120a41ac3b9bd37a4470b14e83301a3","initial_value":100.0,"leverage":15120,"match_expire_index":310022,"status":"pending","target_value":0.0,"tx0_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx0_bet_type":0,"tx0_block_index":310012,"tx0_expiration":10,"tx0_hash":"5c49e06f8ddf9cc0f83541550664bb00075a2f01df493278097066462497af16","tx0_index":13,"tx1_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx1_bet_type":1,"tx1_block_index":310013,"tx1_expiration":10,"tx1_hash":"813e45480753e39c6ea548efd6b77f830120a41ac3b9bd37a4470b14e83301a3","tx1_index":14}',0,'BET_MATCH'); INSERT INTO messages VALUES(102,310013,'parse','transactions','{"supported":true,"tx_hash":"813e45480753e39c6ea548efd6b77f830120a41ac3b9bd37a4470b14e83301a3","tx_index":14}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(103,310013,'parse','blocks','{"block_index":310013,"ledger_hash":"f6fd6f6280b1c580abe8e31de28bfa0f269d453068946733cad69d29f6874936","messages_hash":"d31725c5efb73972745475a8c76fa70e0780d81ab89ecd2cbd38c1e2dc128e21","txlist_hash":"ce4d93afd619a9f22326d72b5ae6c10b24d3075399374184463f65d489a57c51"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(104,310014,'insert','blocks','{"block_hash":"85b28d413ebda2968ed82ae53643677338650151b997ed1e4656158005b9f65f","block_index":310014,"block_time":310014000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(104,310013,'insert','blocks','{"block_hash":"85b28d413ebda2968ed82ae53643677338650151b997ed1e4656158005b9f65f","block_index":310014,"block_time":310014000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(105,310014,'insert','transactions','{"block_hash":"85b28d413ebda2968ed82ae53643677338650151b997ed1e4656158005b9f65f","block_index":310014,"block_time":310014000,"btc_amount":1000,"data":"00000028000052bb33640000000008f0d1800000000014dc93800000000000000000000013b00000000a","destination":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","fee":7650,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"33fdca6b108f99ffb56d590f55f9d19c7d16fe83c096b9fbbf71eabeda826a41","tx_index":15}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(106,310014,'update','orders','{"status":"expired","tx_hash":"a2e93083b871e68cb89e216f9a99c4c6aea1eb92cbdbafc5b4b0e160c19c517e"}',0,'ORDER_UPDATE'); INSERT INTO messages VALUES(107,310014,'insert','credits','{"address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310014,"calling_function":"cancel order","event":"a2e93083b871e68cb89e216f9a99c4c6aea1eb92cbdbafc5b4b0e160c19c517e","quantity":5000000,"tx_index":0}',0,'CREDIT'); @@ -578,7 +578,7 @@ INSERT INTO messages VALUES(109,310014,'insert','debits','{"action":"bet","addre INSERT INTO messages VALUES(110,310014,'insert','bets','{"bet_type":0,"block_index":310014,"counterwager_quantity":350000000,"counterwager_remaining":350000000,"deadline":1388000100,"expiration":10,"expire_index":310024,"fee_fraction_int":99999999.0,"feed_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","leverage":5040,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"open","target_value":0.0,"tx_hash":"33fdca6b108f99ffb56d590f55f9d19c7d16fe83c096b9fbbf71eabeda826a41","tx_index":15,"wager_quantity":150000000,"wager_remaining":150000000}',0,'OPEN_BET'); INSERT INTO messages VALUES(111,310014,'parse','transactions','{"supported":true,"tx_hash":"33fdca6b108f99ffb56d590f55f9d19c7d16fe83c096b9fbbf71eabeda826a41","tx_index":15}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(112,310014,'parse','blocks','{"block_index":310014,"ledger_hash":"0c52d56c6f7c25da7b757aba30e890e9eff402155b5497a5420e13e69b7cb54b","messages_hash":"b20b444de969c080c6a742769b8fc09fb899f7a962d04930fdb1eb91f2a8565b","txlist_hash":"7df6ac77f91e828339a1f92ce8197c74ff120f6c00d180bdb19a91f7da14a83a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(113,310015,'insert','blocks','{"block_hash":"4cf77d688f18f0c68c077db882f62e49f31859dfa6144372457cd73b29223922","block_index":310015,"block_time":310015000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(113,310014,'insert','blocks','{"block_hash":"4cf77d688f18f0c68c077db882f62e49f31859dfa6144372457cd73b29223922","block_index":310015,"block_time":310015000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(114,310015,'insert','transactions','{"block_hash":"4cf77d688f18f0c68c077db882f62e49f31859dfa6144372457cd73b29223922","block_index":310015,"block_time":310015000,"btc_amount":1000,"data":"00000028000152bb33640000000014dc93800000000008f0d1800000000000000000000013b00000000a","destination":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","fee":7650,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"22375d61ad5cb70e45ca8843ccffa0abe11b028351352d5da874d246c834ab6f","tx_index":16}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(115,310015,'insert','debits','{"action":"bet","address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310015,"event":"22375d61ad5cb70e45ca8843ccffa0abe11b028351352d5da874d246c834ab6f","quantity":350000000,"tx_index":16}',0,'DEBIT'); INSERT INTO messages VALUES(116,310015,'insert','bets','{"bet_type":1,"block_index":310015,"counterwager_quantity":150000000,"counterwager_remaining":150000000,"deadline":1388000100,"expiration":10,"expire_index":310025,"fee_fraction_int":99999999.0,"feed_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","leverage":5040,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"open","target_value":0.0,"tx_hash":"22375d61ad5cb70e45ca8843ccffa0abe11b028351352d5da874d246c834ab6f","tx_index":16,"wager_quantity":350000000,"wager_remaining":350000000}',0,'OPEN_BET'); @@ -586,16 +586,16 @@ INSERT INTO messages VALUES(117,310015,'insert','credits','{"address":"3_mn6q3dS INSERT INTO messages VALUES(118,310015,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"33fdca6b108f99ffb56d590f55f9d19c7d16fe83c096b9fbbf71eabeda826a41","wager_remaining":0}',0,'BET_UPDATE'); INSERT INTO messages VALUES(119,310015,'insert','credits','{"address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310015,"calling_function":"filled","event":"22375d61ad5cb70e45ca8843ccffa0abe11b028351352d5da874d246c834ab6f","quantity":0,"tx_index":16}',0,'CREDIT'); INSERT INTO messages VALUES(120,310015,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"22375d61ad5cb70e45ca8843ccffa0abe11b028351352d5da874d246c834ab6f","wager_remaining":0}',0,'BET_UPDATE'); -INSERT INTO messages VALUES(121,310014,'insert','bet_matches','{"backward_quantity":350000000,"block_index":310014,"deadline":1388000100,"fee_fraction_int":99999999,"feed_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","forward_quantity":150000000,"id":"33fdca6b108f99ffb56d590f55f9d19c7d16fe83c096b9fbbf71eabeda826a41_22375d61ad5cb70e45ca8843ccffa0abe11b028351352d5da874d246c834ab6f","initial_value":100.0,"leverage":5040,"match_expire_index":310024,"status":"pending","target_value":0.0,"tx0_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx0_bet_type":0,"tx0_block_index":310014,"tx0_expiration":10,"tx0_hash":"33fdca6b108f99ffb56d590f55f9d19c7d16fe83c096b9fbbf71eabeda826a41","tx0_index":15,"tx1_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx1_bet_type":1,"tx1_block_index":310015,"tx1_expiration":10,"tx1_hash":"22375d61ad5cb70e45ca8843ccffa0abe11b028351352d5da874d246c834ab6f","tx1_index":16}',0,'BET_MATCH'); +INSERT INTO messages VALUES(121,310015,'insert','bet_matches','{"backward_quantity":350000000,"block_index":310014,"deadline":1388000100,"fee_fraction_int":99999999,"feed_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","forward_quantity":150000000,"id":"33fdca6b108f99ffb56d590f55f9d19c7d16fe83c096b9fbbf71eabeda826a41_22375d61ad5cb70e45ca8843ccffa0abe11b028351352d5da874d246c834ab6f","initial_value":100.0,"leverage":5040,"match_expire_index":310024,"status":"pending","target_value":0.0,"tx0_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx0_bet_type":0,"tx0_block_index":310014,"tx0_expiration":10,"tx0_hash":"33fdca6b108f99ffb56d590f55f9d19c7d16fe83c096b9fbbf71eabeda826a41","tx0_index":15,"tx1_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx1_bet_type":1,"tx1_block_index":310015,"tx1_expiration":10,"tx1_hash":"22375d61ad5cb70e45ca8843ccffa0abe11b028351352d5da874d246c834ab6f","tx1_index":16}',0,'BET_MATCH'); INSERT INTO messages VALUES(122,310015,'parse','transactions','{"supported":true,"tx_hash":"22375d61ad5cb70e45ca8843ccffa0abe11b028351352d5da874d246c834ab6f","tx_index":16}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(123,310015,'parse','blocks','{"block_index":310015,"ledger_hash":"03cd020f708d5f082f5b63e3c1f58e5f25d564a60699ae0f23471115d9e37d5e","messages_hash":"d8c072c161c3ba901c9d2b06221e5e36b47cc66cf910dabc2aa7d75927ad0c9d","txlist_hash":"45379e27de14058cb9100cc29417da1e5b2534e4434bfcd074c811324e46fd06"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(124,310016,'insert','blocks','{"block_hash":"99dc7d2627efb4e5e618a53b9898b4ca39c70e98fe9bf39f68a6c980f5b64ef9","block_index":310016,"block_time":310016000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(124,310015,'insert','blocks','{"block_hash":"99dc7d2627efb4e5e618a53b9898b4ca39c70e98fe9bf39f68a6c980f5b64ef9","block_index":310016,"block_time":310016000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(125,310016,'insert','transactions','{"block_hash":"99dc7d2627efb4e5e618a53b9898b4ca39c70e98fe9bf39f68a6c980f5b64ef9","block_index":310016,"block_time":310016000,"btc_amount":1000,"data":"00000028000252bb33c8000000002cb417800000000026be36803ff0000000000000000013b00000000a","destination":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","fee":7650,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"5e0cd8d81531e656dc3a4ae4b7edfd1bec48e455ed0bd69a4a3c22c0c08bbede","tx_index":17}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(126,310016,'insert','debits','{"action":"bet","address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310016,"event":"5e0cd8d81531e656dc3a4ae4b7edfd1bec48e455ed0bd69a4a3c22c0c08bbede","quantity":750000000,"tx_index":17}',0,'DEBIT'); INSERT INTO messages VALUES(127,310016,'insert','bets','{"bet_type":2,"block_index":310016,"counterwager_quantity":650000000,"counterwager_remaining":650000000,"deadline":1388000200,"expiration":10,"expire_index":310026,"fee_fraction_int":99999999.0,"feed_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","leverage":5040,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"open","target_value":1.0,"tx_hash":"5e0cd8d81531e656dc3a4ae4b7edfd1bec48e455ed0bd69a4a3c22c0c08bbede","tx_index":17,"wager_quantity":750000000,"wager_remaining":750000000}',0,'OPEN_BET'); INSERT INTO messages VALUES(128,310016,'parse','transactions','{"supported":true,"tx_hash":"5e0cd8d81531e656dc3a4ae4b7edfd1bec48e455ed0bd69a4a3c22c0c08bbede","tx_index":17}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(129,310016,'parse','blocks','{"block_index":310016,"ledger_hash":"d95cf7b2af3f578fc64450d484323075e81999a868918d3dbf89160269d68980","messages_hash":"684fde58a199a4d55bc79612e1f970b2b6b819a513762defdd2629c99fe494a1","txlist_hash":"92ed43fd80e4e254ebff7dc725c32962beb79be51dfe8d62d12bd8e123320532"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(130,310017,'insert','blocks','{"block_hash":"8a4fedfbf734b91a5c5761a7bcb3908ea57169777a7018148c51ff611970e4a3","block_index":310017,"block_time":310017000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(130,310016,'insert','blocks','{"block_hash":"8a4fedfbf734b91a5c5761a7bcb3908ea57169777a7018148c51ff611970e4a3","block_index":310017,"block_time":310017000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(131,310017,'insert','transactions','{"block_hash":"8a4fedfbf734b91a5c5761a7bcb3908ea57169777a7018148c51ff611970e4a3","block_index":310017,"block_time":310017000,"btc_amount":1000,"data":"00000028000352bb33c80000000026be3680000000002cb417803ff0000000000000000013b00000000a","destination":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","fee":7650,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"07d3cbac831b5edb261b1445071e307949d7825565b8d5c8cba1d720d5c7ab4a","tx_index":18}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(132,310017,'insert','debits','{"action":"bet","address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310017,"event":"07d3cbac831b5edb261b1445071e307949d7825565b8d5c8cba1d720d5c7ab4a","quantity":650000000,"tx_index":18}',0,'DEBIT'); INSERT INTO messages VALUES(133,310017,'insert','bets','{"bet_type":3,"block_index":310017,"counterwager_quantity":750000000,"counterwager_remaining":750000000,"deadline":1388000200,"expiration":10,"expire_index":310027,"fee_fraction_int":99999999.0,"feed_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","leverage":5040,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"open","target_value":1.0,"tx_hash":"07d3cbac831b5edb261b1445071e307949d7825565b8d5c8cba1d720d5c7ab4a","tx_index":18,"wager_quantity":650000000,"wager_remaining":650000000}',0,'OPEN_BET'); @@ -603,10 +603,10 @@ INSERT INTO messages VALUES(134,310017,'insert','credits','{"address":"3_mn6q3dS INSERT INTO messages VALUES(135,310017,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"5e0cd8d81531e656dc3a4ae4b7edfd1bec48e455ed0bd69a4a3c22c0c08bbede","wager_remaining":0}',0,'BET_UPDATE'); INSERT INTO messages VALUES(136,310017,'insert','credits','{"address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310017,"calling_function":"filled","event":"07d3cbac831b5edb261b1445071e307949d7825565b8d5c8cba1d720d5c7ab4a","quantity":0,"tx_index":18}',0,'CREDIT'); INSERT INTO messages VALUES(137,310017,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"07d3cbac831b5edb261b1445071e307949d7825565b8d5c8cba1d720d5c7ab4a","wager_remaining":0}',0,'BET_UPDATE'); -INSERT INTO messages VALUES(138,310016,'insert','bet_matches','{"backward_quantity":650000000,"block_index":310016,"deadline":1388000200,"fee_fraction_int":99999999,"feed_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","forward_quantity":750000000,"id":"5e0cd8d81531e656dc3a4ae4b7edfd1bec48e455ed0bd69a4a3c22c0c08bbede_07d3cbac831b5edb261b1445071e307949d7825565b8d5c8cba1d720d5c7ab4a","initial_value":100.0,"leverage":5040,"match_expire_index":310026,"status":"pending","target_value":1.0,"tx0_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx0_bet_type":2,"tx0_block_index":310016,"tx0_expiration":10,"tx0_hash":"5e0cd8d81531e656dc3a4ae4b7edfd1bec48e455ed0bd69a4a3c22c0c08bbede","tx0_index":17,"tx1_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx1_bet_type":3,"tx1_block_index":310017,"tx1_expiration":10,"tx1_hash":"07d3cbac831b5edb261b1445071e307949d7825565b8d5c8cba1d720d5c7ab4a","tx1_index":18}',0,'BET_MATCH'); +INSERT INTO messages VALUES(138,310017,'insert','bet_matches','{"backward_quantity":650000000,"block_index":310016,"deadline":1388000200,"fee_fraction_int":99999999,"feed_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","forward_quantity":750000000,"id":"5e0cd8d81531e656dc3a4ae4b7edfd1bec48e455ed0bd69a4a3c22c0c08bbede_07d3cbac831b5edb261b1445071e307949d7825565b8d5c8cba1d720d5c7ab4a","initial_value":100.0,"leverage":5040,"match_expire_index":310026,"status":"pending","target_value":1.0,"tx0_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx0_bet_type":2,"tx0_block_index":310016,"tx0_expiration":10,"tx0_hash":"5e0cd8d81531e656dc3a4ae4b7edfd1bec48e455ed0bd69a4a3c22c0c08bbede","tx0_index":17,"tx1_address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","tx1_bet_type":3,"tx1_block_index":310017,"tx1_expiration":10,"tx1_hash":"07d3cbac831b5edb261b1445071e307949d7825565b8d5c8cba1d720d5c7ab4a","tx1_index":18}',0,'BET_MATCH'); INSERT INTO messages VALUES(139,310017,'parse','transactions','{"supported":true,"tx_hash":"07d3cbac831b5edb261b1445071e307949d7825565b8d5c8cba1d720d5c7ab4a","tx_index":18}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(140,310017,'parse','blocks','{"block_index":310017,"ledger_hash":"725783dab777f54b11be66fdf47280852fd6b4d8a9b9f2fbba9e92056538ce73","messages_hash":"141e4de5d1572c6001982c0d980d2276a7b805bc6e95b8520cd66edf8a97b593","txlist_hash":"f21d857139bdc083724362346aeaa455f82caf0fdf13f2ca880db6dbc6e047b2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(141,310018,'insert','blocks','{"block_hash":"35c06f9e3de39e4e56ceb1d1a22008f52361c50dd0d251c0acbe2e3c2dba8ed3","block_index":310018,"block_time":310018000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(141,310017,'insert','blocks','{"block_hash":"35c06f9e3de39e4e56ceb1d1a22008f52361c50dd0d251c0acbe2e3c2dba8ed3","block_index":310018,"block_time":310018000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(142,310018,'insert','transactions','{"block_hash":"35c06f9e3de39e4e56ceb1d1a22008f52361c50dd0d251c0acbe2e3c2dba8ed3","block_index":310018,"block_time":310018000,"btc_amount":0,"data":"0000001e52bb33324058f7256ffc115e004c4b4009556e69742054657374","destination":"","fee":6800,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"5a057227535fcb5aeaf56ec919321667cc45f4fa7d11bf940d22abaad909cd66","tx_index":19}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(143,310018,'insert','broadcasts','{"block_index":310018,"fee_fraction_int":5000000,"locked":false,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","text":"Unit Test","timestamp":1388000050,"tx_hash":"5a057227535fcb5aeaf56ec919321667cc45f4fa7d11bf940d22abaad909cd66","tx_index":19,"value":99.86166}',0,'BROADCAST'); INSERT INTO messages VALUES(144,310018,'insert','credits','{"address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310018,"calling_function":"bet settled: liquidated for bear","event":"5a057227535fcb5aeaf56ec919321667cc45f4fa7d11bf940d22abaad909cd66","quantity":59137500,"tx_index":19}',0,'CREDIT'); @@ -615,7 +615,7 @@ INSERT INTO messages VALUES(146,310018,'insert','bet_match_resolutions','{"bear_ INSERT INTO messages VALUES(147,310018,'update','bet_matches','{"id":"5c49e06f8ddf9cc0f83541550664bb00075a2f01df493278097066462497af16_813e45480753e39c6ea548efd6b77f830120a41ac3b9bd37a4470b14e83301a3","status":"settled: liquidated for bear"}',0,'BET_MATCH_UPDATE'); INSERT INTO messages VALUES(148,310018,'parse','transactions','{"supported":true,"tx_hash":"5a057227535fcb5aeaf56ec919321667cc45f4fa7d11bf940d22abaad909cd66","tx_index":19}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(149,310018,'parse','blocks','{"block_index":310018,"ledger_hash":"05ad248fa836b50ce72a2f61c7465a455cc48ac92f2c0ff9bb9f94e69081d1e7","messages_hash":"502d5a096e80766d8d947d832fb1e88e57357b2feaae0912ec783ce3147a85b1","txlist_hash":"3e8a8361086aee82a316c2a041d8f4e1d7b4000c3e18263ca84a3267a811ee7d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(150,310019,'insert','blocks','{"block_hash":"114affa0c4f34b1ebf8e2778c9477641f60b5b9e8a69052158041d4c41893294","block_index":310019,"block_time":310019000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(150,310018,'insert','blocks','{"block_hash":"114affa0c4f34b1ebf8e2778c9477641f60b5b9e8a69052158041d4c41893294","block_index":310019,"block_time":310019000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(151,310019,'insert','transactions','{"block_hash":"114affa0c4f34b1ebf8e2778c9477641f60b5b9e8a69052158041d4c41893294","block_index":310019,"block_time":310019000,"btc_amount":0,"data":"0000001e52bb3365405915f3b645a1cb004c4b4009556e69742054657374","destination":"","fee":6800,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"0baab7280b14d7d8597dc5f570682654fac0453b0b4c374d45cef3d21a7ceb17","tx_index":20}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(152,310019,'insert','broadcasts','{"block_index":310019,"fee_fraction_int":5000000,"locked":false,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","text":"Unit Test","timestamp":1388000101,"tx_hash":"0baab7280b14d7d8597dc5f570682654fac0453b0b4c374d45cef3d21a7ceb17","tx_index":20,"value":100.343}',0,'BROADCAST'); INSERT INTO messages VALUES(153,310019,'insert','credits','{"address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310019,"calling_function":"bet settled","event":"0baab7280b14d7d8597dc5f570682654fac0453b0b4c374d45cef3d21a7ceb17","quantity":159300000,"tx_index":20}',0,'CREDIT'); @@ -625,7 +625,7 @@ INSERT INTO messages VALUES(156,310019,'insert','bet_match_resolutions','{"bear_ INSERT INTO messages VALUES(157,310019,'update','bet_matches','{"id":"33fdca6b108f99ffb56d590f55f9d19c7d16fe83c096b9fbbf71eabeda826a41_22375d61ad5cb70e45ca8843ccffa0abe11b028351352d5da874d246c834ab6f","status":"settled"}',0,'BET_MATCH_UPDATE'); INSERT INTO messages VALUES(158,310019,'parse','transactions','{"supported":true,"tx_hash":"0baab7280b14d7d8597dc5f570682654fac0453b0b4c374d45cef3d21a7ceb17","tx_index":20}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(159,310019,'parse','blocks','{"block_index":310019,"ledger_hash":"0ab8707bce7b77beecc32ad6124482cb561776ed245ce6dce08f5318e2cf396f","messages_hash":"445f1951bd294004e2343cfc7561599bcf0488901a051e4c2cf5dee8f4474eb6","txlist_hash":"d66ff9e099bc707b866c2595b0bb642657601a36ab06cafa070f18e9f3ad30e3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(160,310020,'insert','blocks','{"block_hash":"d93c79920e4a42164af74ecb5c6b903ff6055cdc007376c74dfa692c8d85ebc9","block_index":310020,"block_time":310020000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(160,310019,'insert','blocks','{"block_hash":"d93c79920e4a42164af74ecb5c6b903ff6055cdc007376c74dfa692c8d85ebc9","block_index":310020,"block_time":310020000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(161,310020,'insert','transactions','{"block_hash":"d93c79920e4a42164af74ecb5c6b903ff6055cdc007376c74dfa692c8d85ebc9","block_index":310020,"block_time":310020000,"btc_amount":0,"data":"0000001e52bb33c94000000000000000004c4b4009556e69742054657374","destination":"","fee":6800,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"2b39f99114417cb4857c8c2c671b4bc3bc8b3e52865daa91a49ea6d9bdfb6402","tx_index":21}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(162,310020,'insert','broadcasts','{"block_index":310020,"fee_fraction_int":5000000,"locked":false,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","text":"Unit Test","timestamp":1388000201,"tx_hash":"2b39f99114417cb4857c8c2c671b4bc3bc8b3e52865daa91a49ea6d9bdfb6402","tx_index":21,"value":2.0}',0,'BROADCAST'); INSERT INTO messages VALUES(163,310020,'insert','credits','{"address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310020,"calling_function":"bet settled: for notequal","event":"2b39f99114417cb4857c8c2c671b4bc3bc8b3e52865daa91a49ea6d9bdfb6402","quantity":1330000000,"tx_index":21}',0,'CREDIT'); @@ -634,18 +634,18 @@ INSERT INTO messages VALUES(165,310020,'insert','bet_match_resolutions','{"bear_ INSERT INTO messages VALUES(166,310020,'update','bet_matches','{"id":"5e0cd8d81531e656dc3a4ae4b7edfd1bec48e455ed0bd69a4a3c22c0c08bbede_07d3cbac831b5edb261b1445071e307949d7825565b8d5c8cba1d720d5c7ab4a","status":"settled: for notequal"}',0,'BET_MATCH_UPDATE'); INSERT INTO messages VALUES(167,310020,'parse','transactions','{"supported":true,"tx_hash":"2b39f99114417cb4857c8c2c671b4bc3bc8b3e52865daa91a49ea6d9bdfb6402","tx_index":21}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(168,310020,'parse','blocks','{"block_index":310020,"ledger_hash":"198edc4bf109549538a2f8f96714536a99a1568fe16fe4254881520474adc68d","messages_hash":"ff432d16380c967282cd5222c8626af85bacf13e3d85aef97b632192956598c1","txlist_hash":"3bd8ef01a2be7a5d817b535f19e456325bcf2d684ac25f09124d4582040fde54"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(169,310021,'insert','blocks','{"block_hash":"7c2460bb32c5749c856486393239bf7a0ac789587ac71f32e7237910da8097f2","block_index":310021,"block_time":310021000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(169,310020,'insert','blocks','{"block_hash":"7c2460bb32c5749c856486393239bf7a0ac789587ac71f32e7237910da8097f2","block_index":310021,"block_time":310021000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(170,310021,'insert','transactions','{"block_hash":"7c2460bb32c5749c856486393239bf7a0ac789587ac71f32e7237910da8097f2","block_index":310021,"block_time":310021000,"btc_amount":0,"data":"0000000a00000000000047670000000002faf08000000000000000010000000002faf080000a0000000000000000","destination":"","fee":6800,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"19c6fe5cbf0be99ff3d469077e866e0f9fdc56901824b7fec89b0b523526e323","tx_index":22}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(171,310021,'insert','debits','{"action":"open order","address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"BBBB","block_index":310021,"event":"19c6fe5cbf0be99ff3d469077e866e0f9fdc56901824b7fec89b0b523526e323","quantity":50000000,"tx_index":22}',0,'DEBIT'); INSERT INTO messages VALUES(172,310021,'insert','orders','{"block_index":310021,"expiration":10,"expire_index":310031,"fee_provided":6800,"fee_provided_remaining":6800,"fee_required":0,"fee_required_remaining":0,"get_asset":"XCP","get_quantity":50000000,"get_remaining":50000000,"give_asset":"BBBB","give_quantity":50000000,"give_remaining":50000000,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"open","tx_hash":"19c6fe5cbf0be99ff3d469077e866e0f9fdc56901824b7fec89b0b523526e323","tx_index":22}',0,'OPEN_ORDER'); INSERT INTO messages VALUES(173,310021,'parse','transactions','{"supported":true,"tx_hash":"19c6fe5cbf0be99ff3d469077e866e0f9fdc56901824b7fec89b0b523526e323","tx_index":22}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(174,310021,'parse','blocks','{"block_index":310021,"ledger_hash":"52482033c5c11ad24257707137b090606305497618e29050b2fdd3e13bc822ce","messages_hash":"20a39f221845b6f4e0eaa1ad4bc3a6e735d487cd6fba54ed30714d93ceededdd","txlist_hash":"7d74bbdb4057dc5d0e9b568e983df362b87bdacdddf2724b1ee4c42b6602bd47"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(175,310022,'insert','blocks','{"block_hash":"44435f9a99a0aa12a9bfabdc4cb8119f6ea6a6e1350d2d65445fb66a456db5fc","block_index":310022,"block_time":310022000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(175,310021,'insert','blocks','{"block_hash":"44435f9a99a0aa12a9bfabdc4cb8119f6ea6a6e1350d2d65445fb66a456db5fc","block_index":310022,"block_time":310022000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(176,310022,'insert','transactions','{"block_hash":"44435f9a99a0aa12a9bfabdc4cb8119f6ea6a6e1350d2d65445fb66a456db5fc","block_index":310022,"block_time":310022000,"btc_amount":100000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":5625,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"3739350ed4c86474468cb1fed825b1ef141304d638b298867d0b2ae58c509c22","tx_index":23}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(177,310022,'insert','credits','{"address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310022,"calling_function":"burn","event":"3739350ed4c86474468cb1fed825b1ef141304d638b298867d0b2ae58c509c22","quantity":56999887262,"tx_index":23}',0,'CREDIT'); INSERT INTO messages VALUES(178,310022,'insert','burns','{"block_index":310022,"burned":38000000,"earned":56999887262,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"3739350ed4c86474468cb1fed825b1ef141304d638b298867d0b2ae58c509c22","tx_index":23}',0,'BURN'); INSERT INTO messages VALUES(179,310022,'parse','blocks','{"block_index":310022,"ledger_hash":"85d639cc8147885470da26d3c0470dba0eb8b6870d5941b12bcc4afb8fcd9af1","messages_hash":"a5a389ccb25f814327dbdf5f424767cbb80be0d0c05d0e7752d3fbe6164f071f","txlist_hash":"568bbeb4d12090c110442540d6f12734602dcf84ae5e331f0391a4a47857d059"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(180,310023,'insert','blocks','{"block_hash":"d8cf5bec1bbcab8ca4f495352afde3b6572b7e1d61b3976872ebb8e9d30ccb08","block_index":310023,"block_time":310023000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(180,310022,'insert','blocks','{"block_hash":"d8cf5bec1bbcab8ca4f495352afde3b6572b7e1d61b3976872ebb8e9d30ccb08","block_index":310023,"block_time":310023000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(181,310023,'insert','transactions','{"block_hash":"d8cf5bec1bbcab8ca4f495352afde3b6572b7e1d61b3976872ebb8e9d30ccb08","block_index":310023,"block_time":310023000,"btc_amount":1000,"data":"0000000000000000000047680000000000002710","destination":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","fee":7650,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","supported":true,"tx_hash":"72bd448eb70da9b7554d3b58a1e89356171578c847763af014b25c99e70cbb58","tx_index":24}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(182,310023,'update','bets','{"status":"expired","tx_hash":"5c49e06f8ddf9cc0f83541550664bb00075a2f01df493278097066462497af16"}',0,'BET_UPDATE'); INSERT INTO messages VALUES(183,310023,'insert','credits','{"address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"XCP","block_index":310023,"calling_function":"recredit wager remaining","event":"5c49e06f8ddf9cc0f83541550664bb00075a2f01df493278097066462497af16","quantity":8500000,"tx_index":0}',0,'CREDIT'); @@ -655,164 +655,164 @@ INSERT INTO messages VALUES(186,310023,'insert','credits','{"address":"3_mn6q3dS INSERT INTO messages VALUES(187,310023,'insert','sends','{"asset":"BBBC","block_index":310023,"destination":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj_3","quantity":10000,"source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","status":"valid","tx_hash":"72bd448eb70da9b7554d3b58a1e89356171578c847763af014b25c99e70cbb58","tx_index":24}',0,'SEND'); INSERT INTO messages VALUES(188,310023,'parse','transactions','{"supported":true,"tx_hash":"72bd448eb70da9b7554d3b58a1e89356171578c847763af014b25c99e70cbb58","tx_index":24}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(189,310023,'parse','blocks','{"block_index":310023,"ledger_hash":"eb62ce47d68491a84b9a29b92db2742021881f0274072f1bc39dfef08cd7a590","messages_hash":"7076a1e5280056ffbed986360f5e6985ef94abce4aed7cf01c3625ddb9c8e6f7","txlist_hash":"877a4d466f5f780e8103a42fb7771935ef57486ed7d74aa77757b9cb434893b3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(190,310024,'insert','blocks','{"block_hash":"b03042b4e18a222b4c8d1e9e1970d93e6e2a2d41686d227ff8ecf0a839223dc5","block_index":310024,"block_time":310024000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(190,310023,'insert','blocks','{"block_hash":"b03042b4e18a222b4c8d1e9e1970d93e6e2a2d41686d227ff8ecf0a839223dc5","block_index":310024,"block_time":310024000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(191,310024,'parse','blocks','{"block_index":310024,"ledger_hash":"45e73afbc34855b5cbd342a6fb77545e01f3ff4601a04c6dd25dff665aeff484","messages_hash":"c00cc576f5d36432e15347902f18fccb316e0222d3890019d1ee381bb7936b63","txlist_hash":"b16082c8d932618c9bd89f7b8d6372190cab18b274ed8dbc1b4f04e5edc2bdbf"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(192,310025,'insert','blocks','{"block_hash":"a872e560766832cc3b4f7f222228cb6db882ce3c54f6459f62c71d5cd6e90666","block_index":310025,"block_time":310025000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(192,310024,'insert','blocks','{"block_hash":"a872e560766832cc3b4f7f222228cb6db882ce3c54f6459f62c71d5cd6e90666","block_index":310025,"block_time":310025000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(193,310025,'parse','blocks','{"block_index":310025,"ledger_hash":"714702b25559325c7bacffdf28e0af30c47bf48e6b4fda053c21ea31c7604128","messages_hash":"801eb76b5da9f7d5c76f0bb146caaa3fd6b6dbfdbbd244d6fc9ae5befef65527","txlist_hash":"391a822509e48a899634f3b8a6b0c99fd298eefd97230b401b40c301dd7e6052"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(194,310026,'insert','blocks','{"block_hash":"6c96350f6f2f05810f19a689de235eff975338587194a36a70dfd0fcd490941a","block_index":310026,"block_time":310026000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(194,310025,'insert','blocks','{"block_hash":"6c96350f6f2f05810f19a689de235eff975338587194a36a70dfd0fcd490941a","block_index":310026,"block_time":310026000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(195,310026,'parse','blocks','{"block_index":310026,"ledger_hash":"b305741a1e277ba0ce8436b914784ea0156616ac308282a7f29dbca62a54cc82","messages_hash":"c548b86b7154b71f57f48a7ca09daf1c4a85238e447c78027e00e2da8f47684e","txlist_hash":"16c8d91265aaface472342f436e376984d576675529de1f58a188f994375dea0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(196,310027,'insert','blocks','{"block_hash":"d7acfac66df393c4482a14c189742c0571b89442eb7f817b34415a560445699e","block_index":310027,"block_time":310027000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(196,310026,'insert','blocks','{"block_hash":"d7acfac66df393c4482a14c189742c0571b89442eb7f817b34415a560445699e","block_index":310027,"block_time":310027000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(197,310027,'parse','blocks','{"block_index":310027,"ledger_hash":"1f833f7396917e02b4b65b0a05d19754b6a53b030b659514d0c21cad062d45f9","messages_hash":"207882040c07bf4f53de0d18b2cf8195a8eae75423aee1b9c091cea5ce3b3d27","txlist_hash":"d7a61a46b4f6da78607245b9fdd4e0b1d7499b5687805939342a431ef570711d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(198,310028,'insert','blocks','{"block_hash":"02409fcf8fa06dafcb7f11e38593181d9c42cc9d5e2ddc304d098f990bd9530b","block_index":310028,"block_time":310028000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(198,310027,'insert','blocks','{"block_hash":"02409fcf8fa06dafcb7f11e38593181d9c42cc9d5e2ddc304d098f990bd9530b","block_index":310028,"block_time":310028000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(199,310028,'parse','blocks','{"block_index":310028,"ledger_hash":"47b38906beda7ad735a86b9fd63669b0357b7ae0a0c1a54c9827bc8b90185626","messages_hash":"822023de35329c7abf80e0bfb4982def648716fe0d577705aff5b9f4e7de4440","txlist_hash":"a8a0b67ddb47a15f89fd14f227e118bd374dde04f4bce3205d5ee07a8c7509d7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(200,310029,'insert','blocks','{"block_hash":"3c739fa8b40c118d5547ea356ee8d10ee2898871907643ec02e5db9d00f03cc6","block_index":310029,"block_time":310029000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(200,310028,'insert','blocks','{"block_hash":"3c739fa8b40c118d5547ea356ee8d10ee2898871907643ec02e5db9d00f03cc6","block_index":310029,"block_time":310029000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(201,310029,'parse','blocks','{"block_index":310029,"ledger_hash":"e69f6c9b649ac04920be70f9b076f7909bcebd8312afa715be3d8922794a72e7","messages_hash":"fe7adc1d1add270a2a72656e295146d97f02906127422a837a999878783f7e54","txlist_hash":"355199be765ee2db25308e58d6cdfd22c6941a296b51800e8f937cea1afedbdf"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(202,310030,'insert','blocks','{"block_hash":"d5071cddedf89765ee0fd58f209c1c7d669ba8ea66200a57587da8b189b9e4f5","block_index":310030,"block_time":310030000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(202,310029,'insert','blocks','{"block_hash":"d5071cddedf89765ee0fd58f209c1c7d669ba8ea66200a57587da8b189b9e4f5","block_index":310030,"block_time":310030000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(203,310030,'parse','blocks','{"block_index":310030,"ledger_hash":"c51828b04433b000787c92eaa7e5abd5cc0bc31c619cb8479aff675af6e00c55","messages_hash":"c6b5b98f91407d3fe485e52acccc248f30baa792a5fa385eb6568c9531a1d9f4","txlist_hash":"b4bb7325ae90ccf0095b0970cb4828c98915a2e6694723ca8af1e9f77523d540"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(204,310031,'insert','blocks','{"block_hash":"0b02b10f41380fff27c543ea8891ecb845bf7a003ac5c87e15932aff3bfcf689","block_index":310031,"block_time":310031000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(204,310030,'insert','blocks','{"block_hash":"0b02b10f41380fff27c543ea8891ecb845bf7a003ac5c87e15932aff3bfcf689","block_index":310031,"block_time":310031000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(205,310031,'parse','blocks','{"block_index":310031,"ledger_hash":"26d91568af76b5ad4b357693ecb0b9341aabbf5de5d5c83f9998dc2f95d76e5e","messages_hash":"3628978fba600403d80a4664c770a72885e2a071bb6fcbcc6123870602c6b3a9","txlist_hash":"b13328f7f6011c05736a1c728af4726f63f557ae1eafab7d70b6b7fd60025616"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(206,310032,'insert','blocks','{"block_hash":"66346be81e6ba04544f2ae643b76c2b7b1383f038fc2636e02e49dc7ec144074","block_index":310032,"block_time":310032000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(206,310031,'insert','blocks','{"block_hash":"66346be81e6ba04544f2ae643b76c2b7b1383f038fc2636e02e49dc7ec144074","block_index":310032,"block_time":310032000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(207,310032,'update','orders','{"status":"expired","tx_hash":"19c6fe5cbf0be99ff3d469077e866e0f9fdc56901824b7fec89b0b523526e323"}',0,'ORDER_UPDATE'); INSERT INTO messages VALUES(208,310032,'insert','credits','{"address":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3","asset":"BBBB","block_index":310032,"calling_function":"cancel order","event":"19c6fe5cbf0be99ff3d469077e866e0f9fdc56901824b7fec89b0b523526e323","quantity":50000000,"tx_index":0}',0,'CREDIT'); INSERT INTO messages VALUES(209,310032,'insert','order_expirations','{"block_index":310032,"order_hash":"19c6fe5cbf0be99ff3d469077e866e0f9fdc56901824b7fec89b0b523526e323","source":"3_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_3"}',0,'ORDER_EXPIRATION'); INSERT INTO messages VALUES(210,310032,'parse','blocks','{"block_index":310032,"ledger_hash":"21f8da71c386ec1e5e31a35c1190b895f2df52529ea028d5fba25e0d57616952","messages_hash":"904c8038bf8b7f23c529b8df31b2f8c19713fd76de70d62d87435402068957ff","txlist_hash":"80980b4466ca949fa21a42ffb8c22a2f5853722c4fa02bf0cb962e97365384f1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(211,310033,'insert','blocks','{"block_hash":"999c65df9661f73e8c01f1da1afda09ac16788b72834f0ff5ea3d1464afb4707","block_index":310033,"block_time":310033000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(211,310032,'insert','blocks','{"block_hash":"999c65df9661f73e8c01f1da1afda09ac16788b72834f0ff5ea3d1464afb4707","block_index":310033,"block_time":310033000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(212,310033,'parse','blocks','{"block_index":310033,"ledger_hash":"1c844a38fc28e83406c8019615d0c24a1ea84e6ffe4da392d29f353ca676001b","messages_hash":"0166e273e9fa7ffc4d82e225994c190babf5f835df2b0025c10f6c5ef43799c3","txlist_hash":"0c2f46b4f4d5f345399be6073d2f72bf689f6a3a20e57c41ccd541cc0bae76d3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(213,310034,'insert','blocks','{"block_hash":"f552edd2e0a648230f3668e72ddf0ddfb1e8ac0f4c190f91b89c1a8c2e357208","block_index":310034,"block_time":310034000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(213,310033,'insert','blocks','{"block_hash":"f552edd2e0a648230f3668e72ddf0ddfb1e8ac0f4c190f91b89c1a8c2e357208","block_index":310034,"block_time":310034000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(214,310034,'parse','blocks','{"block_index":310034,"ledger_hash":"0533bc0d3bc008b5d65932c569e9f85e3217ea9efbb8937935be93b7a01ec2a8","messages_hash":"3a3a230f7a95b060a2b17b8482e7d7100c58fcbf490502c90d512a6e02108231","txlist_hash":"9f5f89f0c9821b7de30388b2a0891011612096ac158a70838d4479059a4bfc50"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(215,310035,'insert','blocks','{"block_hash":"a13cbb016f3044207a46967a4ba1c87dab411f78c55c1179f2336653c2726ae2","block_index":310035,"block_time":310035000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(215,310034,'insert','blocks','{"block_hash":"a13cbb016f3044207a46967a4ba1c87dab411f78c55c1179f2336653c2726ae2","block_index":310035,"block_time":310035000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(216,310035,'parse','blocks','{"block_index":310035,"ledger_hash":"b5f0b7406fe3b6dbcbb5c3b28fb8fb119e237f07532f500b422058ba898e5b22","messages_hash":"4c78ac34d5f492cc396c93c5fec07d489dce0734a3d660f92ea9d77fdc2d3762","txlist_hash":"5847c5ec7d8ad0e27d47b3b6ff7df903c4a67a269aa248e69ee918062e58976c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(217,310036,'insert','blocks','{"block_hash":"158648a98f1e1bd1875584ce8449eb15a4e91a99a923bbb24c4210135cef0c76","block_index":310036,"block_time":310036000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(217,310035,'insert','blocks','{"block_hash":"158648a98f1e1bd1875584ce8449eb15a4e91a99a923bbb24c4210135cef0c76","block_index":310036,"block_time":310036000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(218,310036,'parse','blocks','{"block_index":310036,"ledger_hash":"7519ac8cdf4c13b25929d913e3858855aca68bcf3fe6d3636e7371894af27f04","messages_hash":"2bbe9ed724b1fed2ced169ed3c8b73c85e3b907942d63d410034062016d9fde9","txlist_hash":"46fea446096a8d96f1f990374d94405f358ef5a3a8bf09aeba2f76977cf867b0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(219,310037,'insert','blocks','{"block_hash":"563acfd6d991ce256d5655de2e9429975c8dceeb221e76d5ec6e9e24a2c27c07","block_index":310037,"block_time":310037000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(219,310036,'insert','blocks','{"block_hash":"563acfd6d991ce256d5655de2e9429975c8dceeb221e76d5ec6e9e24a2c27c07","block_index":310037,"block_time":310037000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(220,310037,'parse','blocks','{"block_index":310037,"ledger_hash":"f417da67da0c23d4bc44bbb864de5b94057916e28502641ba70764f44165a1fa","messages_hash":"2ca69d6d57ff41bd714ec175e6467480a69e5a62055c216350cce6cbb7d2571d","txlist_hash":"e372a6531d2f206be5cca17be0f42a75e2e6617499a6dec377c274f7738620df"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(221,310038,'insert','blocks','{"block_hash":"b44b4cad12431c32df27940e18d51f63897c7472b70950d18454edfd640490b2","block_index":310038,"block_time":310038000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(221,310037,'insert','blocks','{"block_hash":"b44b4cad12431c32df27940e18d51f63897c7472b70950d18454edfd640490b2","block_index":310038,"block_time":310038000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(222,310038,'parse','blocks','{"block_index":310038,"ledger_hash":"098eb6f2b0a1c584d969167f50bb55383ab71593ed1f0ca61d83c4513a209107","messages_hash":"c015b324f177d23f9dfafef324c000fb4e4397b80e91e663c00b51ce0421d4cf","txlist_hash":"da7704f6d661aa255af6e2d3ad713fbca0a0e6296b16e3a364989bcb5a4e38ba"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(223,310039,'insert','blocks','{"block_hash":"5fa1ae9c5e8a599247458987b006ad3a57f686df1f7cc240bf119e911b56c347","block_index":310039,"block_time":310039000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(223,310038,'insert','blocks','{"block_hash":"5fa1ae9c5e8a599247458987b006ad3a57f686df1f7cc240bf119e911b56c347","block_index":310039,"block_time":310039000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(224,310039,'parse','blocks','{"block_index":310039,"ledger_hash":"a4aa60a1320e47c975628f6650d8fdc44b6a729d26a3178031e32fcb48b59491","messages_hash":"1ddc1eab822609f46aaa413f870738d386600cb5f92477029f3321538a8f3425","txlist_hash":"02eb5dc168a03d3cd067677480b22185a8ad6731e467c0b3bd5a907834e01013"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(225,310040,'insert','blocks','{"block_hash":"7200ded406675453eadddfbb2d14c2a4526c7dc2b5de14bd48b29243df5e1aa3","block_index":310040,"block_time":310040000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(225,310039,'insert','blocks','{"block_hash":"7200ded406675453eadddfbb2d14c2a4526c7dc2b5de14bd48b29243df5e1aa3","block_index":310040,"block_time":310040000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(226,310040,'parse','blocks','{"block_index":310040,"ledger_hash":"cc5b2af6948531b635b18a4b6698efa318190762c8e4419aa9ca3634e7ed5d1e","messages_hash":"d1204fb3f4fc48c21af8226bc45388f0b6eeac8a9f4fd47126f80c6572a5469e","txlist_hash":"f6ba96a6e3e2e3442722bbc1bd770d3f6f0f4a4ffe57d0858586539f81e868b8"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(227,310041,'insert','blocks','{"block_hash":"5db592ff9ba5fac1e030cf22d6c13b70d330ba397f415340086ee7357143b359","block_index":310041,"block_time":310041000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(227,310040,'insert','blocks','{"block_hash":"5db592ff9ba5fac1e030cf22d6c13b70d330ba397f415340086ee7357143b359","block_index":310041,"block_time":310041000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(228,310041,'parse','blocks','{"block_index":310041,"ledger_hash":"7ad02b4853bde78025942e9f58c212a76c1828337610347e516d4a359af804b5","messages_hash":"9436001b6251917c4b69c00921901c387330125c720ccf2c9e576599d8dafa83","txlist_hash":"d8089b22bc20979dce133885c84c5babb754ff0522d7f2193e1d3157c5251631"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(229,310042,'insert','blocks','{"block_hash":"826fd4701ef2824e9559b069517cd3cb990aff6a4690830f78fc845ab77fa3e4","block_index":310042,"block_time":310042000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(229,310041,'insert','blocks','{"block_hash":"826fd4701ef2824e9559b069517cd3cb990aff6a4690830f78fc845ab77fa3e4","block_index":310042,"block_time":310042000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(230,310042,'parse','blocks','{"block_index":310042,"ledger_hash":"64a91735950113c13603e49ca549fae9b30092a9fc02d53a32a20eaef64ab6ce","messages_hash":"517bcde57fab2adad83570b2609cee487bb5705e176f400106ff69ecb4746b6d","txlist_hash":"554d6b2a2182d87b00111b748a5d904aef85a56b92f1d076ad4f866f0d054041"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(231,310043,'insert','blocks','{"block_hash":"2254a12ada208f1dd57bc17547ecaf3c44720323c47bc7d4b1262477cb7f3c51","block_index":310043,"block_time":310043000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(231,310042,'insert','blocks','{"block_hash":"2254a12ada208f1dd57bc17547ecaf3c44720323c47bc7d4b1262477cb7f3c51","block_index":310043,"block_time":310043000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(232,310043,'parse','blocks','{"block_index":310043,"ledger_hash":"68107847c7a9dd19612d8b47c1a39cdc446c752f2c05ea8fcd961a42f835d155","messages_hash":"912b1b96d379d1fc64b209c7d2e5312ba4ee269eb530b04eb7bbeb0537e4c21a","txlist_hash":"f2b1800a73d98a15428bfb5289f7ccbb9d3c66b98fb0a36f00ffce8a78279801"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(233,310044,'insert','blocks','{"block_hash":"3346d24118d8af0b3c6bcc42f8b85792e7a2e7036ebf6e4c25f4f6723c78e46b","block_index":310044,"block_time":310044000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(233,310043,'insert','blocks','{"block_hash":"3346d24118d8af0b3c6bcc42f8b85792e7a2e7036ebf6e4c25f4f6723c78e46b","block_index":310044,"block_time":310044000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(234,310044,'parse','blocks','{"block_index":310044,"ledger_hash":"64d4d51adb6994360b3dbf04663c4f067ba223e62912fe1c5a96a190225bb54c","messages_hash":"1600a9735c13014eb519bd322dde80f84ab675df322f6decfcdffd1af54504d1","txlist_hash":"ce4365857faa29eb04e638064e4810620f434fe515efe63eb2ac49c3adce6581"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(235,310045,'insert','blocks','{"block_hash":"7bba0ab243839e91ad1a45a762bf074011f8a9883074d68203c6d1b46fffde98","block_index":310045,"block_time":310045000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(235,310044,'insert','blocks','{"block_hash":"7bba0ab243839e91ad1a45a762bf074011f8a9883074d68203c6d1b46fffde98","block_index":310045,"block_time":310045000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(236,310045,'parse','blocks','{"block_index":310045,"ledger_hash":"3ba2d7685f63962f576e9fa94e4d6709ace95249a3064804c3822078c982d11d","messages_hash":"56d227f3edb62b974dac1362b79eed46bdfa1e91f69065d83c8d7c61c1129ba3","txlist_hash":"94729a0956e8c1b095c9181e01c220b94257ff582e35d87923e3c5ddba3a3566"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(237,310046,'insert','blocks','{"block_hash":"47db6788c38f2d6d712764979e41346b55e78cbb4969e0ef5c4336faf18993a6","block_index":310046,"block_time":310046000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(237,310045,'insert','blocks','{"block_hash":"47db6788c38f2d6d712764979e41346b55e78cbb4969e0ef5c4336faf18993a6","block_index":310046,"block_time":310046000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(238,310046,'parse','blocks','{"block_index":310046,"ledger_hash":"6502f277568bed2705c5f496e278e5d99310ff6705751a3999cb4b2bc7d725bd","messages_hash":"63397d50f0c1aa35c11c76609beac1cca925f3ba6835f096137952b6411609bf","txlist_hash":"0986f1e944c39e36fe955ff092028c51647a9359492f17a76c682b4346be714e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(239,310047,'insert','blocks','{"block_hash":"a9ccabcc2a098a7d25e4ab8bda7c4e66807eefa42e29890dcd88149a10de7075","block_index":310047,"block_time":310047000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(239,310046,'insert','blocks','{"block_hash":"a9ccabcc2a098a7d25e4ab8bda7c4e66807eefa42e29890dcd88149a10de7075","block_index":310047,"block_time":310047000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(240,310047,'parse','blocks','{"block_index":310047,"ledger_hash":"5dae29289f36e64b87d56f9870af0bd5ad77ca45f1093c1a41140ea397945130","messages_hash":"6b46b89049da0cbfe2d00b6901b5a8954ad60532e57d14ca35967167c73ba625","txlist_hash":"f14e3c5de5e186beaed6835c7c61fe2274603bb73e62ebea5899ae2a998e26e2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(241,310048,'insert','blocks','{"block_hash":"610bf3935a85b05a98556c55493c6de45bed4d7b3b6c8553a984718765796309","block_index":310048,"block_time":310048000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(241,310047,'insert','blocks','{"block_hash":"610bf3935a85b05a98556c55493c6de45bed4d7b3b6c8553a984718765796309","block_index":310048,"block_time":310048000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(242,310048,'parse','blocks','{"block_index":310048,"ledger_hash":"d5dee49d7b78e2ce4dd2a648e345a52bbfa7e0e76de9e970b1dc0b6aea66c130","messages_hash":"c57c5d45c4cef74d650721928f3dbe8f0d83b310cba367170b79381a7ba21ee8","txlist_hash":"e31cb01f21f653217b3bff72061a63f3778f45a72a8419988a496d8f388cac1f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(243,310049,'insert','blocks','{"block_hash":"4ad2761923ad49ad2b283b640f1832522a2a5d6964486b21591b71df6b33be3c","block_index":310049,"block_time":310049000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(243,310048,'insert','blocks','{"block_hash":"4ad2761923ad49ad2b283b640f1832522a2a5d6964486b21591b71df6b33be3c","block_index":310049,"block_time":310049000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(244,310049,'parse','blocks','{"block_index":310049,"ledger_hash":"2b4c97a93933b8986ebb061d47f2e8bbb1672206058ae3c3ae388bab36b8cbc8","messages_hash":"7f8534be109485517c9459dfb5222b8f541b468bb4f7aa58220db663d7f8d243","txlist_hash":"eb45cf1a49da1dfd4ce7231e8f6da96b7241b0b034884cb2de57dc107723b7a5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(245,310050,'insert','blocks','{"block_hash":"8cfeb60a14a4cec6e9be13d699694d49007d82a31065a17890383e262071e348","block_index":310050,"block_time":310050000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(245,310049,'insert','blocks','{"block_hash":"8cfeb60a14a4cec6e9be13d699694d49007d82a31065a17890383e262071e348","block_index":310050,"block_time":310050000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(246,310050,'parse','blocks','{"block_index":310050,"ledger_hash":"115913763ca7ef5691512a5c6d47cbd49203aee8a3242928f62640912c935872","messages_hash":"3e82c3cebfd5dc148f738ef6d03270bd335fdb9f897d7c38ec08de99bd2029dd","txlist_hash":"db0d0812374555812015a2058ea7f6bc8aebb8aa7d2824eeeb26b7b42d75f97e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(247,310051,'insert','blocks','{"block_hash":"b53c90385dd808306601350920c6af4beb717518493fd23b5c730eea078f33e6","block_index":310051,"block_time":310051000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(247,310050,'insert','blocks','{"block_hash":"b53c90385dd808306601350920c6af4beb717518493fd23b5c730eea078f33e6","block_index":310051,"block_time":310051000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(248,310051,'parse','blocks','{"block_index":310051,"ledger_hash":"72f24dc53c759a08aeb447d826bf64aad71ca8f4ab9640e30e440e6bc050a0eb","messages_hash":"988ffda502c528af98f0a02d190e1b79b50362938e53feea5d16c3bb9d6efbd0","txlist_hash":"b3834012ddc576765f337d3dd8b3c916f66711481c0bfa2464f6ec2678d1512e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(249,310052,'insert','blocks','{"block_hash":"0acdacf4e4b6fca756479cb055191b367b1fa433aa558956f5f08fa5b7b394e2","block_index":310052,"block_time":310052000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(249,310051,'insert','blocks','{"block_hash":"0acdacf4e4b6fca756479cb055191b367b1fa433aa558956f5f08fa5b7b394e2","block_index":310052,"block_time":310052000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(250,310052,'parse','blocks','{"block_index":310052,"ledger_hash":"07846004f2da033bfd113e13040b0d0d605375370b7437e2ca2ea9467fc80c1a","messages_hash":"a2a135fe3fb63d0eba7fbe099dd2b528a757d64babba95166aad63f1524d6ad3","txlist_hash":"35357fb0ca94373955c3cdf08be75d20e9665a9632be0df0c90b567875594049"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(251,310053,'insert','blocks','{"block_hash":"68348f01b6dc49b2cb30fe92ac43e527aa90d859093d3bf7cd695c64d2ef744f","block_index":310053,"block_time":310053000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(251,310052,'insert','blocks','{"block_hash":"68348f01b6dc49b2cb30fe92ac43e527aa90d859093d3bf7cd695c64d2ef744f","block_index":310053,"block_time":310053000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(252,310053,'parse','blocks','{"block_index":310053,"ledger_hash":"7bf9a701337c043a7268cecca5ff765c24600a2056137cd03e3ead9d64ef2348","messages_hash":"cd278dc9fcd6af0b08770e3ae24d6cc06035a808521a27d30f52f740c92013b9","txlist_hash":"d177ed9e0bb4b3d77bc5b1a044e724cabb92dee3189747bc1c01d1fee7148fa2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(253,310054,'insert','blocks','{"block_hash":"a8b5f253df293037e49b998675620d5477445c51d5ec66596e023282bb9cd305","block_index":310054,"block_time":310054000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(253,310053,'insert','blocks','{"block_hash":"a8b5f253df293037e49b998675620d5477445c51d5ec66596e023282bb9cd305","block_index":310054,"block_time":310054000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(254,310054,'parse','blocks','{"block_index":310054,"ledger_hash":"d544aec17018203fe2f5c9bda52a5da53d41d3364b8026770d1f620aa53e6c36","messages_hash":"11bdddd1a775214ace919b5cb8b05153a029d3afc0d4fc76aa6fa3745c2be51b","txlist_hash":"8a3b92aa200f79e8aff4a849618914f7d39c34ef2ed636d3b5633a2ad2f647ea"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(255,310055,'insert','blocks','{"block_hash":"4b069152e2dc82e96ed8a3c3547c162e8c3aceeb2a4ac07972f8321a535b9356","block_index":310055,"block_time":310055000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(255,310054,'insert','blocks','{"block_hash":"4b069152e2dc82e96ed8a3c3547c162e8c3aceeb2a4ac07972f8321a535b9356","block_index":310055,"block_time":310055000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(256,310055,'parse','blocks','{"block_index":310055,"ledger_hash":"bd3044c66f7e2c24944a9c938b8f162ac8f566a1338444c219396eadf5179d3e","messages_hash":"c8fe4a422a254591a8fe091f3ac0a188b49f241298ab1548edc31dbce7e09734","txlist_hash":"59ce208e69d4e1427791ae237a6db6a05efcd50fa386f4f8f56862c6cc3b12d5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(257,310056,'insert','blocks','{"block_hash":"7603eaed418971b745256742f9d2ba70b2c2b2f69f61de6cc70e61ce0336f9d3","block_index":310056,"block_time":310056000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(257,310055,'insert','blocks','{"block_hash":"7603eaed418971b745256742f9d2ba70b2c2b2f69f61de6cc70e61ce0336f9d3","block_index":310056,"block_time":310056000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(258,310056,'parse','blocks','{"block_index":310056,"ledger_hash":"b19346f726636aa9da55af6106a471c596a7f7b93289b70d3d33b45334bca9d3","messages_hash":"1f6fb5ab52976782a48b7530e23aa9dfbc640325a72cbb0c7db1247c7a0b4031","txlist_hash":"8e9d4b1d3ad7c5e8e479640da0ffd8b7423aee810ff6adc4ae2d37d545169579"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(259,310057,'insert','blocks','{"block_hash":"4a5fdc84f2d66ecb6ee3e3646aad20751ce8694e64e348d3c8aab09d33a3e411","block_index":310057,"block_time":310057000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(259,310056,'insert','blocks','{"block_hash":"4a5fdc84f2d66ecb6ee3e3646aad20751ce8694e64e348d3c8aab09d33a3e411","block_index":310057,"block_time":310057000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(260,310057,'parse','blocks','{"block_index":310057,"ledger_hash":"35c2ad9ccd3bd68cdb0c4d8fd4e30938521b8559c1cec331a29b1802d649947a","messages_hash":"e850532831c45f4cae14c9bcda7d894dea4a93934ce7afc38f256def03ba1c4f","txlist_hash":"e14484629fa3aa2e8ce54505b3983d0f33e7727d3dacc5de57a574c2e0c69baf"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(261,310058,'insert','blocks','{"block_hash":"a6eef3089896f0cae0bfe9423392e45c48f4efe4310b14d8cfbdb1fea613635f","block_index":310058,"block_time":310058000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(261,310057,'insert','blocks','{"block_hash":"a6eef3089896f0cae0bfe9423392e45c48f4efe4310b14d8cfbdb1fea613635f","block_index":310058,"block_time":310058000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(262,310058,'parse','blocks','{"block_index":310058,"ledger_hash":"e9a705d6661f0345ffe0f45ae26c0d6ba6bd5a125eef2f0e9558d0702ee6d63f","messages_hash":"047adfb7ad69518a1b2a78af1eb8222168b0865300be9a50e37075c7e1948c9c","txlist_hash":"cfbb1995e2c28020dabca30e98f72afee01b64fe276acacee7e104b22772de65"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(263,310059,'insert','blocks','{"block_hash":"ab505de874c43f97c90be1c26a769e6c5cb140405c993b4a6cc7afc795f156a9","block_index":310059,"block_time":310059000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(263,310058,'insert','blocks','{"block_hash":"ab505de874c43f97c90be1c26a769e6c5cb140405c993b4a6cc7afc795f156a9","block_index":310059,"block_time":310059000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(264,310059,'parse','blocks','{"block_index":310059,"ledger_hash":"61efe4d33a7f70cae34df86753532aee25fb0b153744acb962142691f6979482","messages_hash":"8eb894c4a10a9bf7669b8376b5e09663b9e4ccf35adf18de9db07a33315b7ed6","txlist_hash":"401b057e48ae9e423f354f7ddbb11e70c0ec2209ef1a26dc7ffd0bf6003f1335"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(265,310060,'insert','blocks','{"block_hash":"974ad5fbef621e0a38eab811608dc9afaf10c8ecc85fed913075ba1a145e889b","block_index":310060,"block_time":310060000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(265,310059,'insert','blocks','{"block_hash":"974ad5fbef621e0a38eab811608dc9afaf10c8ecc85fed913075ba1a145e889b","block_index":310060,"block_time":310060000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(266,310060,'parse','blocks','{"block_index":310060,"ledger_hash":"59d9785e783c59c12783977087ad439b2dacad9ae1ef2be6384bfc9036da9804","messages_hash":"e932e980d4a231aa6c0b641cf4df7178dee3d08ba746c32f4db844090938d7e8","txlist_hash":"6010ccb1d9476ce07d8b50633bccb97ecff1a229a0ea7701c802aad32f961be9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(267,310061,'insert','blocks','{"block_hash":"35d267d21ad386e7b7632292af1c422b0310dde7ca49a82f9577525a29c138cf","block_index":310061,"block_time":310061000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(267,310060,'insert','blocks','{"block_hash":"35d267d21ad386e7b7632292af1c422b0310dde7ca49a82f9577525a29c138cf","block_index":310061,"block_time":310061000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(268,310061,'parse','blocks','{"block_index":310061,"ledger_hash":"e257d59ab5dfb01b8396bd12d2fd169f9ac7629365b90bf6e593e627738d3754","messages_hash":"e1c03b783d99b6d377dc00755feda0a6939daa86e393e26a5a68f714300fb554","txlist_hash":"bda63243caec3f70173e1e93a16867ecbcf45d987b6a5f72d1bea54d361f0ed2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(269,310062,'insert','blocks','{"block_hash":"b31a0054145319ef9de8c1cb19df5bcf4dc8a1ece20053aa494e5d3a00a2852f","block_index":310062,"block_time":310062000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(269,310061,'insert','blocks','{"block_hash":"b31a0054145319ef9de8c1cb19df5bcf4dc8a1ece20053aa494e5d3a00a2852f","block_index":310062,"block_time":310062000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(270,310062,'parse','blocks','{"block_index":310062,"ledger_hash":"0dc0317a88a6fc4ac791cd4d45edcf2a142fb83aa2e8a2f299fcac48a2c2e04d","messages_hash":"fbddf6eee66e1c7b1df8e81372ee1d62a5ef71db7b7dd4baf4d5ef016bdf7c4a","txlist_hash":"ea9f3db44eb05a8ba1c860cd0a13ea662f84715b59e78a87f49c78377cb6b2c3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(271,310063,'insert','blocks','{"block_hash":"0cbcbcd5b7f2dc288e3a34eab3d4212463a5a56e886804fb4f9f1cf929eadebe","block_index":310063,"block_time":310063000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(271,310062,'insert','blocks','{"block_hash":"0cbcbcd5b7f2dc288e3a34eab3d4212463a5a56e886804fb4f9f1cf929eadebe","block_index":310063,"block_time":310063000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(272,310063,'parse','blocks','{"block_index":310063,"ledger_hash":"892d6a49aebb262f2a626a35c0806c488c836c04d33122c2d65ecd8904fe3d85","messages_hash":"8d2ee1a5f97490c82f97f7cfa52fd6e3b8e4cddae27d1aa5084d19006427fef6","txlist_hash":"3fc1380f35c9123d16b9ffbeb23c44f24e4d6001406a484ce30ee5758b8ec965"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(273,310064,'insert','blocks','{"block_hash":"e2db8065a195e85cde9ddb868a17d39893a60fb2b1255aa5f0c88729de7cbf30","block_index":310064,"block_time":310064000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(273,310063,'insert','blocks','{"block_hash":"e2db8065a195e85cde9ddb868a17d39893a60fb2b1255aa5f0c88729de7cbf30","block_index":310064,"block_time":310064000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(274,310064,'parse','blocks','{"block_index":310064,"ledger_hash":"e345abbf8dc42737a9f2dd038534409200d63a9ebf5d1cbf3344ea9413c388c0","messages_hash":"1557b98be10d0eeeaf1e47f46d632cfa065aa77760ab38f1e81ed16bcc28e405","txlist_hash":"be23706267b965eb38fa15ec1ce8c17ed5727bfedba0ca4d4be3db2fd703744f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(275,310065,'insert','blocks','{"block_hash":"8a7bc7a77c831ac4fd11b8a9d22d1b6a0661b07cef05c2e600c7fb683b861d2a","block_index":310065,"block_time":310065000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(275,310064,'insert','blocks','{"block_hash":"8a7bc7a77c831ac4fd11b8a9d22d1b6a0661b07cef05c2e600c7fb683b861d2a","block_index":310065,"block_time":310065000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(276,310065,'parse','blocks','{"block_index":310065,"ledger_hash":"84ec781d054c0602ed97384cd32cd060b938627ea490a7635fa3ac0babba94cc","messages_hash":"3a160d03c922d16d4defefc07987a5d7d6c87958f1040c9058f4810c5dfd192e","txlist_hash":"1f7417cf7a3d9f07e5a8faf658b166c288aff136ee56f244797ef589f9cf98c5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(277,310066,'insert','blocks','{"block_hash":"b6959be51eb084747d301f7ccaf9e75f2292c9404633b1532e3692659939430d","block_index":310066,"block_time":310066000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(277,310065,'insert','blocks','{"block_hash":"b6959be51eb084747d301f7ccaf9e75f2292c9404633b1532e3692659939430d","block_index":310066,"block_time":310066000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(278,310066,'parse','blocks','{"block_index":310066,"ledger_hash":"3478612a8bb95c2966891fb4d1b35493a1342364a6f08404b83ac9fdda763aa2","messages_hash":"f6bd82018fec6aef410ce22ae9453985c47d112327ac79467b1b58b5459b88a6","txlist_hash":"7b4317e7c2db815ced2d81aaf8efaa6331e475a7a9b3a59041640d43484b1a89"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(279,310067,'insert','blocks','{"block_hash":"8b08eae98d7193c9c01863fac6effb9162bda010daeacf9e0347112f233b8577","block_index":310067,"block_time":310067000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(279,310066,'insert','blocks','{"block_hash":"8b08eae98d7193c9c01863fac6effb9162bda010daeacf9e0347112f233b8577","block_index":310067,"block_time":310067000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(280,310067,'parse','blocks','{"block_index":310067,"ledger_hash":"c532c4c5f5e2ae1026ec2582645d9aef06afee46cb9781427a1f40667378ed67","messages_hash":"534d66483e451478608cbb2ede9587088e10efd2e0e700f59eef272e91423c46","txlist_hash":"89699fdf437b96128d7eb89a45d58e45d0b829789c6e0b29e8972b48ce5e62de"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(281,310068,'insert','blocks','{"block_hash":"9280e7297ef6313341bc81787a36acfc9af58f83a415afff5e3154f126cf52b5","block_index":310068,"block_time":310068000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(281,310067,'insert','blocks','{"block_hash":"9280e7297ef6313341bc81787a36acfc9af58f83a415afff5e3154f126cf52b5","block_index":310068,"block_time":310068000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(282,310068,'parse','blocks','{"block_index":310068,"ledger_hash":"5508189396fa6dfe63a7d06fe97a3073e986eb305bcb49430157f99e3848cd69","messages_hash":"0d2642a45e69da6ca9f71855222603189bd602ecd7ccfa1d5a08fc602f2d83bd","txlist_hash":"4c49d9334c909f728f3b06a0ef613fb09f6369dd431b7078db5d269cdf9dd4bd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(283,310069,'insert','blocks','{"block_hash":"486351f0655bf594ffaab1980cff17353b640b63e9c27239109addece189a6f7","block_index":310069,"block_time":310069000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(283,310068,'insert','blocks','{"block_hash":"486351f0655bf594ffaab1980cff17353b640b63e9c27239109addece189a6f7","block_index":310069,"block_time":310069000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(284,310069,'parse','blocks','{"block_index":310069,"ledger_hash":"9b0b5d09dc7aaffaf5a3603fa2b914c54b04755a5ddbf83476320149f802292a","messages_hash":"8d85103885918d2f0cb3653b55615111561cef1defb3f57a52aa7efc3f2343d3","txlist_hash":"ef4759403c17482a8f8042fb93a5cae1b741085cdbf73e839638fee316044571"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(285,310070,'insert','blocks','{"block_hash":"8739e99f4dee8bebf1332f37f49a125348b40b93b74fe35579dd52bfba4fa7e5","block_index":310070,"block_time":310070000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(285,310069,'insert','blocks','{"block_hash":"8739e99f4dee8bebf1332f37f49a125348b40b93b74fe35579dd52bfba4fa7e5","block_index":310070,"block_time":310070000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(286,310070,'parse','blocks','{"block_index":310070,"ledger_hash":"2e40d398c2eb131e195a667f1b2b5e8de29e80423a2d0dd3935fad6dd7cc919c","messages_hash":"0e52d3a43ac7fe4e49c1ac354ad2cf71668253207b461713d045dcc82e247575","txlist_hash":"18e3230ce4fdaca025887c118a2f2fa6bcbe81fba5c968301a90b43e27f2c7aa"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(287,310071,'insert','blocks','{"block_hash":"7a099aa1bba0ead577f1e44f35263a1f115ed6a868c98d4dd71609072ae7f80b","block_index":310071,"block_time":310071000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(287,310070,'insert','blocks','{"block_hash":"7a099aa1bba0ead577f1e44f35263a1f115ed6a868c98d4dd71609072ae7f80b","block_index":310071,"block_time":310071000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(288,310071,'parse','blocks','{"block_index":310071,"ledger_hash":"763d3d949dc16a797f5b8a2f5a27fd34b4636fa3dbf33eabed5db048e1a848b4","messages_hash":"44bf78b7251f514af029c657853ea438db6a6f19e126dfe21efc7987e3415673","txlist_hash":"7b10cd9561d4a33c7771570925e5a9a879a501ac503004eccc5e60074d2dedab"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(289,310072,'insert','blocks','{"block_hash":"7b17ecedc07552551b8129e068ae67cb176ca766ea3f6df74b597a94e3a7fc8a","block_index":310072,"block_time":310072000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(289,310071,'insert','blocks','{"block_hash":"7b17ecedc07552551b8129e068ae67cb176ca766ea3f6df74b597a94e3a7fc8a","block_index":310072,"block_time":310072000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(290,310072,'parse','blocks','{"block_index":310072,"ledger_hash":"d9b9d6a52f757604a5652aac64c343a47a928160790963521ce33d125486cb0b","messages_hash":"6af984b5ea8eef37a8be2d9aa7ce6a686827604fb285e0632a61ed653f753ceb","txlist_hash":"deda10c92f292c186698b9b4d371727688a9c0ea194963464fd1c5b429fbbff1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(291,310073,'insert','blocks','{"block_hash":"ee0fe3cc9b3a48a2746b6090b63b442b97ea6055d48edcf4b2288396764c6943","block_index":310073,"block_time":310073000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(291,310072,'insert','blocks','{"block_hash":"ee0fe3cc9b3a48a2746b6090b63b442b97ea6055d48edcf4b2288396764c6943","block_index":310073,"block_time":310073000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(292,310073,'parse','blocks','{"block_index":310073,"ledger_hash":"9c1a650b6029cc982e9e617b619da6d88878453ccea68ff82047581d5cc74e9c","messages_hash":"af4dd5f282ecaa21596b2eb8b5aa0cfff6e0400cc3641fdd58964dc8045bf214","txlist_hash":"26e4cfa82a9ed189ffafa596c7022cab40002c8099b48814f3e7fbc48b01b0fa"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(293,310074,'insert','blocks','{"block_hash":"ceab38dfde01f711a187601731ad575d67cfe0b7dbc61dcd4f15baaef72089fb","block_index":310074,"block_time":310074000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(293,310073,'insert','blocks','{"block_hash":"ceab38dfde01f711a187601731ad575d67cfe0b7dbc61dcd4f15baaef72089fb","block_index":310074,"block_time":310074000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(294,310074,'parse','blocks','{"block_index":310074,"ledger_hash":"32d648a0d0b99f6826376e8badb278c06f95a0ab781cd873e2f7f55219953b01","messages_hash":"5e1a75ec243b0a826cb040effbca894d0efbcf88dcdee8133e97cb700f5f9cbc","txlist_hash":"f10d714905f2e84a57e0c792ebf0dd67158f19f352176a571278dce49aaf778b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(295,310075,'insert','blocks','{"block_hash":"ef547198c6e36d829f117cfd7077ccde45158e3c545152225fa24dba7a26847b","block_index":310075,"block_time":310075000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(295,310074,'insert','blocks','{"block_hash":"ef547198c6e36d829f117cfd7077ccde45158e3c545152225fa24dba7a26847b","block_index":310075,"block_time":310075000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(296,310075,'parse','blocks','{"block_index":310075,"ledger_hash":"67cd615e67e397cae8195fc8753403563e9100ecd623b2796a46b137ca553be2","messages_hash":"22127fbab598f700c53a834ddafb92a9325055467b24256455dd998de58d9fd0","txlist_hash":"d0c0ffcafa826685b59ef036c4315e79cc688ac1ee43097143debf445f6e638b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(297,310076,'insert','blocks','{"block_hash":"3b0499c2e8e8f0252c7288d4ecf66efc426ca37aad3524424d14c8bc6f8b0d92","block_index":310076,"block_time":310076000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(297,310075,'insert','blocks','{"block_hash":"3b0499c2e8e8f0252c7288d4ecf66efc426ca37aad3524424d14c8bc6f8b0d92","block_index":310076,"block_time":310076000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(298,310076,'parse','blocks','{"block_index":310076,"ledger_hash":"d636f3831cd35437271557e6299024d70c4be6b9a685a4fed61e7d67e61540dd","messages_hash":"16ff09b6f1392469f352a23d614830752e85e9ed7c39dca2dcac1cfe75249db8","txlist_hash":"fb11ef8957cdc599585372679a59440580acb37458ed3da092b22974a4857bb6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(299,310077,'insert','blocks','{"block_hash":"d2adeefa9024ab3ff2822bc36acf19b6c647cea118cf15b86c6bc00c3322e7dd","block_index":310077,"block_time":310077000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(299,310076,'insert','blocks','{"block_hash":"d2adeefa9024ab3ff2822bc36acf19b6c647cea118cf15b86c6bc00c3322e7dd","block_index":310077,"block_time":310077000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(300,310077,'parse','blocks','{"block_index":310077,"ledger_hash":"abf96247f6b99a24e518d89162c23cffc821d5cae5703f5b7c7c4587e34cdf98","messages_hash":"823ac2dd7bd746deeab41d20c2f7a28ae22e1240582b31108d980814ee7e9a73","txlist_hash":"67d8b52c93c5d07ce1a335ea3572f0015a971effdecf921193cca273553466c1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(301,310078,'insert','blocks','{"block_hash":"f6c17115ef0efe489c562bcda4615892b4d4b39db0c9791fe193d4922bd82cd6","block_index":310078,"block_time":310078000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(301,310077,'insert','blocks','{"block_hash":"f6c17115ef0efe489c562bcda4615892b4d4b39db0c9791fe193d4922bd82cd6","block_index":310078,"block_time":310078000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(302,310078,'parse','blocks','{"block_index":310078,"ledger_hash":"06aeace2e79321c6776dd1098982e71bfc0baadc55470721022db67a03bd4478","messages_hash":"0235009ba1b7b4829cb22ad87c8295f613951a2e5d99fb9b732e734115f72a0a","txlist_hash":"2e148e6946d39fee7c6d1b320122beb1689903e929397821a63e612d5216326d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(303,310079,'insert','blocks','{"block_hash":"f2fbd2074d804e631db44cb0fb2e1db3fdc367e439c21ffc40d73104c4d7069c","block_index":310079,"block_time":310079000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(303,310078,'insert','blocks','{"block_hash":"f2fbd2074d804e631db44cb0fb2e1db3fdc367e439c21ffc40d73104c4d7069c","block_index":310079,"block_time":310079000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(304,310079,'parse','blocks','{"block_index":310079,"ledger_hash":"ba2c7078ee940b14e584459985a5a4785156762135541d40a138c31ff9bfe4fb","messages_hash":"fb33e505d3b178a8d5abae4c7cb9c40e6810b6633d5ad576ec373529a8a4e6a7","txlist_hash":"63832ac6186f8a8e8091579221ada474b43c36f465ae25ddae4ead963207150c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(305,310080,'insert','blocks','{"block_hash":"42943b914d9c367000a78b78a544cc4b84b1df838aadde33fe730964a89a3a6c","block_index":310080,"block_time":310080000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(305,310079,'insert','blocks','{"block_hash":"42943b914d9c367000a78b78a544cc4b84b1df838aadde33fe730964a89a3a6c","block_index":310080,"block_time":310080000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(306,310080,'parse','blocks','{"block_index":310080,"ledger_hash":"af327b161ed9fa8022f3efd81b695d25ad9ae8f250a6d08739a40b0883262045","messages_hash":"bd5b04fd2a333d10ee6dbed807e153fa483cbc0e272dfb146a9c8144420d2e45","txlist_hash":"47bdbc4933d69cd703c277d9a5e156951ef57791f87f92d16b85c15ab3194061"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(307,310081,'insert','blocks','{"block_hash":"6554f9d307976249e7b7e260e08046b3b55d318f8b6af627fed5be3063f123c4","block_index":310081,"block_time":310081000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(307,310080,'insert','blocks','{"block_hash":"6554f9d307976249e7b7e260e08046b3b55d318f8b6af627fed5be3063f123c4","block_index":310081,"block_time":310081000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(308,310081,'parse','blocks','{"block_index":310081,"ledger_hash":"2c4d6568a9c77737c5942fab33613a1ef055ce21b9f0a9b4a42fcdf6e9536a59","messages_hash":"22d1d0053667443aae83fa579cc48b0814338c7b4ec567f88955d9ff37cca0c7","txlist_hash":"7d57db6fdebb83dc0fbd1746eb328a94403f4a66e7e003593fe90c95fdef3e5c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(309,310082,'insert','blocks','{"block_hash":"4f1ef91b1dcd575f8ac2e66a67715500cbca154bd6f3b8148bb7015a6aa6c644","block_index":310082,"block_time":310082000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(309,310081,'insert','blocks','{"block_hash":"4f1ef91b1dcd575f8ac2e66a67715500cbca154bd6f3b8148bb7015a6aa6c644","block_index":310082,"block_time":310082000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(310,310082,'parse','blocks','{"block_index":310082,"ledger_hash":"0b8dcdff637e5e60ae045d4c7646bd47e6047fc992860c99dd422477b9a90d74","messages_hash":"e236d1ad78134a4a1f0eafeb382709f1f9db74313f22bc17d44df9053826be59","txlist_hash":"61316fca3bd986c2398fa5dd92a8b874f4a64095691626d695e82e3c30849e27"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(311,310083,'insert','blocks','{"block_hash":"9b1f6fd6ff9b0dc4e37603cfb0625f49067c775b99e12492afd85392d3c8d850","block_index":310083,"block_time":310083000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(311,310082,'insert','blocks','{"block_hash":"9b1f6fd6ff9b0dc4e37603cfb0625f49067c775b99e12492afd85392d3c8d850","block_index":310083,"block_time":310083000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(312,310083,'parse','blocks','{"block_index":310083,"ledger_hash":"eec6578a8bc1f5766427f4753ded18cb97c53e710f5fff8918bbdadb59678f64","messages_hash":"3dce816512e26be7ae36f3f8f32dc9ad25504c8b08c59c5a3f4d0206096d0e25","txlist_hash":"bc5cabb9579b79f03b329c0e5e3c8652d8b0eccde9563d838890218bcc8bd932"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(313,310084,'insert','blocks','{"block_hash":"1e0972523e80306441b9f4157f171716199f1428db2e818a7f7817ccdc8859e3","block_index":310084,"block_time":310084000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(313,310083,'insert','blocks','{"block_hash":"1e0972523e80306441b9f4157f171716199f1428db2e818a7f7817ccdc8859e3","block_index":310084,"block_time":310084000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(314,310084,'parse','blocks','{"block_index":310084,"ledger_hash":"a2b2ed6a61f1c9a3d322a050178c6be119b89d1a0795fa9c9d7484ad8edfcecd","messages_hash":"80bcccb657ee818f010373641e90d6a1353a15d95a576ea5c83eb41d96832b33","txlist_hash":"86e50073092182d9a5b37cd2453dd5a7a1af175ad0a1150492d5001510b05e6e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(315,310085,'insert','blocks','{"block_hash":"c5b6e9581831e3bc5848cd7630c499bca26d9ece5156d36579bdb72d54817e34","block_index":310085,"block_time":310085000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(315,310084,'insert','blocks','{"block_hash":"c5b6e9581831e3bc5848cd7630c499bca26d9ece5156d36579bdb72d54817e34","block_index":310085,"block_time":310085000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(316,310085,'parse','blocks','{"block_index":310085,"ledger_hash":"02828eaf91883ad16beb5563f9c84cb226269c655a886857b31e5e150a1053ec","messages_hash":"5f930a16ea9b174ea0a1a549f9d094dba36a469572e4094855e3b9e935e94bd8","txlist_hash":"bf59d4fe42c11ab04792ba5c95cfd811a6ddf18e125daebb93695bdd829736c3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(317,310086,'insert','blocks','{"block_hash":"080c1dc55a4ecf4824cf9840602498cfc35b5f84099f50b71b45cb63834c7a78","block_index":310086,"block_time":310086000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(317,310085,'insert','blocks','{"block_hash":"080c1dc55a4ecf4824cf9840602498cfc35b5f84099f50b71b45cb63834c7a78","block_index":310086,"block_time":310086000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(318,310086,'parse','blocks','{"block_index":310086,"ledger_hash":"5427b45ed778796c26d0d2ddf73e975856cc9ae081c36762e78d046f6cfc376c","messages_hash":"36eb11de51610eff7bd985bd603d208ea6308f292233c12aa8ce4c71f4a8f6ca","txlist_hash":"ca0801d366e8dc44c01db11f67594bcb3ea3e81a3031cee93d24683b82185461"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(319,310087,'insert','blocks','{"block_hash":"4ec8cb1c38b22904e8087a034a6406b896eff4dd28e7620601c6bddf82e2738c","block_index":310087,"block_time":310087000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(319,310086,'insert','blocks','{"block_hash":"4ec8cb1c38b22904e8087a034a6406b896eff4dd28e7620601c6bddf82e2738c","block_index":310087,"block_time":310087000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(320,310087,'parse','blocks','{"block_index":310087,"ledger_hash":"34c2664f81b1bbb53c728636097bc4b7cede67bb318ddcc5e5e6b5735bcc55a7","messages_hash":"8f1616a4b99b0017b45f187fe0153199d4afdcc18180b89d915c9a658d22a9ea","txlist_hash":"321bd59dc3c2996a1a2a6f74905f89a8db172b3b2b35a2d1cbfc6d06f49d09c9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(321,310088,'insert','blocks','{"block_hash":"e945c815c433cbddd0bf8e66c5c23b51072483492acda98f5c2c201020a8c5b3","block_index":310088,"block_time":310088000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(321,310087,'insert','blocks','{"block_hash":"e945c815c433cbddd0bf8e66c5c23b51072483492acda98f5c2c201020a8c5b3","block_index":310088,"block_time":310088000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(322,310088,'parse','blocks','{"block_index":310088,"ledger_hash":"14615dfa6194665d43cf2f495b8f65fb9efa04c2e90885172d229ad4a9dd2358","messages_hash":"ab83027e5a67ed9d64eed651a88ee64bf025e741c22fb00088a06b3a73d971f3","txlist_hash":"3ef6f8bdf30073f297852db2b7036374e3d2c1e91b0d087cb2c6c88e400de110"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(323,310089,'insert','blocks','{"block_hash":"0382437f895ef3e7e38bf025fd4f606fd44d4bbd6aea71dbdc4ed11a7cd46f33","block_index":310089,"block_time":310089000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(323,310088,'insert','blocks','{"block_hash":"0382437f895ef3e7e38bf025fd4f606fd44d4bbd6aea71dbdc4ed11a7cd46f33","block_index":310089,"block_time":310089000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(324,310089,'parse','blocks','{"block_index":310089,"ledger_hash":"fc0f077548225d481384a1aba2d91ed4ec8b2df0f0a57ab603305c615672b25f","messages_hash":"28e50e9e6a0cc748d1752c2ee636936f7f0cacc0154cc3f4e2341f99b99da524","txlist_hash":"0788356af4b45cc44c143c457d069e64d54aa12703f8c376cf3b98827052c173"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(325,310090,'insert','blocks','{"block_hash":"b756db71dc037b5a4582de354a3347371267d31ebda453e152f0a13bb2fae969","block_index":310090,"block_time":310090000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(325,310089,'insert','blocks','{"block_hash":"b756db71dc037b5a4582de354a3347371267d31ebda453e152f0a13bb2fae969","block_index":310090,"block_time":310090000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(326,310090,'parse','blocks','{"block_index":310090,"ledger_hash":"5749263295014a597071acf2293fcd185d02a6a7b3a96df859aae3bf146b276e","messages_hash":"24e5630de6254178200271f1a404a76830763d87367530c928ca78fa481ad450","txlist_hash":"02938682157ea8b10c49e9d87ed444c1303a952a00f6acfe33a1661e84868cc8"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(327,310091,'insert','blocks','{"block_hash":"734a9aa485f36399d5efb74f3b9c47f8b5f6fd68c9967f134b14cfe7e2d7583c","block_index":310091,"block_time":310091000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(327,310090,'insert','blocks','{"block_hash":"734a9aa485f36399d5efb74f3b9c47f8b5f6fd68c9967f134b14cfe7e2d7583c","block_index":310091,"block_time":310091000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(328,310091,'parse','blocks','{"block_index":310091,"ledger_hash":"ae369a1ec3e4f2aea602eab8c7ab1181cacd6b8d01582c96c4771fdd7b3de771","messages_hash":"021342bdaccc173aefff413c3400cb85b7eaa5e9aa5fe5b7fc0e5177f5d8b928","txlist_hash":"04aaa17c2a3dacf6c38b16ed63d70aea7b9546dc7e733dd51a3c08248ca13eb1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(329,310092,'insert','blocks','{"block_hash":"56386beb65f9228740d4ad43a1c575645f6daf59e0dd9f22551c59215b5e8c3d","block_index":310092,"block_time":310092000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(329,310091,'insert','blocks','{"block_hash":"56386beb65f9228740d4ad43a1c575645f6daf59e0dd9f22551c59215b5e8c3d","block_index":310092,"block_time":310092000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(330,310092,'parse','blocks','{"block_index":310092,"ledger_hash":"06a2ac591c418d2b01c74edf2524100afd1140c3933f32120c4cc3180c1de3f0","messages_hash":"75fad188405897ce4a94e9a47109b57f4425efa2ce794da636a5ef6bc1282167","txlist_hash":"421eb90f1258261c97512745b3543fee15ae8d17769d523646033851abde9c75"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(331,310093,'insert','blocks','{"block_hash":"a74a2425f2f4be24bb5f715173e6756649e1cbf1b064aeb1ef60e0b94b418ddc","block_index":310093,"block_time":310093000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(331,310092,'insert','blocks','{"block_hash":"a74a2425f2f4be24bb5f715173e6756649e1cbf1b064aeb1ef60e0b94b418ddc","block_index":310093,"block_time":310093000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(332,310093,'parse','blocks','{"block_index":310093,"ledger_hash":"cdf0ae4d5d06b8735e3e62f5a76a902fee40742fc760578dae98b43635f2e57a","messages_hash":"a412013457b63881cbe03936adcc9a6d413ed3f85e8c9f15bcd91238f126d3e4","txlist_hash":"cbe924452487ba251291d1bf1ec518a7233eda0aa956d002bc2e0933d0057c53"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(333,310094,'insert','blocks','{"block_hash":"2a8f976f20c4e89ff01071915ac96ee35192d54df3a246bf61fd4a0cccfb5b23","block_index":310094,"block_time":310094000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(333,310093,'insert','blocks','{"block_hash":"2a8f976f20c4e89ff01071915ac96ee35192d54df3a246bf61fd4a0cccfb5b23","block_index":310094,"block_time":310094000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(334,310094,'parse','blocks','{"block_index":310094,"ledger_hash":"77d836433add0cf3f7691884ec1607dde9a3996df00128703644527fb096bab5","messages_hash":"3f9caa3a0efeadd13a5442e94e78c8202aa5d9a036c1e0d780bbb4708709ec90","txlist_hash":"2dad9d43a8612157867a046cc0dbc8939f30c41cc8f527a1e184c93004cca63e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(335,310095,'insert','blocks','{"block_hash":"bed0fa40c9981223fb40b3be8124ca619edc9dd34d0c907369477ea92e5d2cd2","block_index":310095,"block_time":310095000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(335,310094,'insert','blocks','{"block_hash":"bed0fa40c9981223fb40b3be8124ca619edc9dd34d0c907369477ea92e5d2cd2","block_index":310095,"block_time":310095000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(336,310095,'parse','blocks','{"block_index":310095,"ledger_hash":"770a0187b5c98725dc32e15a414b9323030f407749fcb0652b1e1f2e4e762e7e","messages_hash":"39c7215611beaf69e4ff95e35d7b363ba065b5c67c8d46cfd6e5aa36ee831d51","txlist_hash":"251e12514d80ad256c13398d257708ad2dfb3b70db674695a8d72d977337ac90"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(337,310096,'insert','blocks','{"block_hash":"306aeec3db435fabffdf88c2f26ee83caa4c2426375a33daa2be041dbd27ea2f","block_index":310096,"block_time":310096000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(337,310095,'insert','blocks','{"block_hash":"306aeec3db435fabffdf88c2f26ee83caa4c2426375a33daa2be041dbd27ea2f","block_index":310096,"block_time":310096000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(338,310096,'parse','blocks','{"block_index":310096,"ledger_hash":"567e91f9456ecd020fbd2fe940d796ac976981485f870db8cb0bc41d77a0fd0f","messages_hash":"bd51e820948048543ee33b42759c0936b74471c6ca9f9271395261e6ed825f48","txlist_hash":"48924c125c80fbe8887ff318ebbab0edf8629e604eed0561dd48444bc4acdab3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(339,310097,'insert','blocks','{"block_hash":"13e8e16e67c7cdcc80d477491e554b43744f90e8e1a9728439a11fab42cefadf","block_index":310097,"block_time":310097000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(339,310096,'insert','blocks','{"block_hash":"13e8e16e67c7cdcc80d477491e554b43744f90e8e1a9728439a11fab42cefadf","block_index":310097,"block_time":310097000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(340,310097,'parse','blocks','{"block_index":310097,"ledger_hash":"447ceafb93aeb346eb98d87db46f07f4d1f51ffde3d44adc6056a624bea3b0c3","messages_hash":"67f40bcce0e0c78c223929650f7ce85a0410790fbf93f5d0e269fd29161b4b65","txlist_hash":"213f5672119909ebcda9f987e3bf69dd0404134584b36c56acdd3596a1ea6881"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(341,310098,'insert','blocks','{"block_hash":"ca5bca4b5ec4fa6183e05176abe921cff884c4e20910fab55b603cef48dc3bca","block_index":310098,"block_time":310098000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(341,310097,'insert','blocks','{"block_hash":"ca5bca4b5ec4fa6183e05176abe921cff884c4e20910fab55b603cef48dc3bca","block_index":310098,"block_time":310098000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(342,310098,'parse','blocks','{"block_index":310098,"ledger_hash":"f510ec6201f4eb850d4f62b399d0d360d0d8cca7e3d955f849ad59a22fba1677","messages_hash":"eb8d0c00e10de227ba487e5a1a42828227b0764caee0d5c827833c5de1f108a3","txlist_hash":"e504e97b361e32b0256aeb1640291eeda547dc564043835013086c87f5e637c2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(343,310099,'insert','blocks','{"block_hash":"3c4c2279cd7de0add5ec469648a845875495a7d54ebfb5b012dcc5a197b7992a","block_index":310099,"block_time":310099000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(343,310098,'insert','blocks','{"block_hash":"3c4c2279cd7de0add5ec469648a845875495a7d54ebfb5b012dcc5a197b7992a","block_index":310099,"block_time":310099000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(344,310099,'parse','blocks','{"block_index":310099,"ledger_hash":"1f956e2c07defac832b7c90982c1e7a1192988c4d1e622b54b40b78065deafef","messages_hash":"bc047032c040c11436d7a1c9e7e33d12be7013f1a3df3d2c87a766fda09b0d28","txlist_hash":"891969418c97f41be742eeb562f39cfe92543c159095f58c5f58c8c2b0274423"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(345,310100,'insert','blocks','{"block_hash":"96925c05b3c7c80c716f5bef68d161c71d044252c766ca0e3f17f255764242cb","block_index":310100,"block_time":310100000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(345,310099,'insert','blocks','{"block_hash":"96925c05b3c7c80c716f5bef68d161c71d044252c766ca0e3f17f255764242cb","block_index":310100,"block_time":310100000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(346,310100,'parse','blocks','{"block_index":310100,"ledger_hash":"ac4cc3e01feb10ba2211afdff4ec43a4ce13a12e1a90dc6f675c390e6395b1e3","messages_hash":"6886fd77ef7eb785c257933ea5b6f1008311559a1d350b5ca1a7e2c1cb18cb50","txlist_hash":"71e61b2d7aca45ccd7cfb6bda957b18fa076cc16bcbbfb63668e4c4f2749b7f3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(347,310101,'insert','blocks','{"block_hash":"369472409995ca1a2ebecbad6bf9dab38c378ab1e67e1bdf13d4ce1346731cd6","block_index":310101,"block_time":310101000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(347,310100,'insert','blocks','{"block_hash":"369472409995ca1a2ebecbad6bf9dab38c378ab1e67e1bdf13d4ce1346731cd6","block_index":310101,"block_time":310101000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(348,310101,'parse','blocks','{"block_index":310101,"ledger_hash":"0a4bb35bf922a8175ef5559e74084d32caa16f599df84adb5e255de26b92c1c4","messages_hash":"283b91394c3e8249e7023df44632f72659fa20b0a8f030c82287f59c3579e514","txlist_hash":"e716e04989e254c2ed5b1c4b81026153d5799edb5a676adea5b7efb930940b30"}',0,'BLOCK_PARSED'); -- Triggers and indices on messages CREATE TRIGGER block_update_messages diff --git a/counterparty-core/counterpartycore/test/fixtures/scenarios/parseblock_unittest_fixture.sql b/counterparty-core/counterpartycore/test/fixtures/scenarios/parseblock_unittest_fixture.sql index 3b62528548..e18a8038e9 100644 --- a/counterparty-core/counterpartycore/test/fixtures/scenarios/parseblock_unittest_fixture.sql +++ b/counterparty-core/counterpartycore/test/fixtures/scenarios/parseblock_unittest_fixture.sql @@ -965,14 +965,14 @@ CREATE TABLE messages( bindings TEXT, timestamp INTEGER, event TEXT); -INSERT INTO messages VALUES(0,309999,'insert','blocks','{"block_hash":"8b3bef249cb3b0fa23a4936c1249b6bd41daeadc848c8d2e409ea1cbc10adfe7","block_index":309999,"block_time":309999000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(0,0,'insert','blocks','{"block_hash":"8b3bef249cb3b0fa23a4936c1249b6bd41daeadc848c8d2e409ea1cbc10adfe7","block_index":309999,"block_time":309999000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1,309999,'parse','blocks','{"block_index":309999,"ledger_hash":"63f0fef31d02da85fa779e9a0e1b585b1a6a4e59e14564249e288e074e91c223","messages_hash":"63f0fef31d02da85fa779e9a0e1b585b1a6a4e59e14564249e288e074e91c223","txlist_hash":"63f0fef31d02da85fa779e9a0e1b585b1a6a4e59e14564249e288e074e91c223"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(2,310000,'insert','blocks','{"block_hash":"505d8d82c4ced7daddef7ed0b05ba12ecc664176887b938ef56c6af276f3b30c","block_index":310000,"block_time":310000000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(2,309999,'insert','blocks','{"block_hash":"505d8d82c4ced7daddef7ed0b05ba12ecc664176887b938ef56c6af276f3b30c","block_index":310000,"block_time":310000000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(3,310000,'insert','transactions','{"block_hash":"505d8d82c4ced7daddef7ed0b05ba12ecc664176887b938ef56c6af276f3b30c","block_index":310000,"block_time":310000000,"btc_amount":62000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":5625,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"6dc5b0a33d4d4297e0f5cc2d23ae307951d32aab2d86b7fa147b385219f3a597","tx_index":1}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(4,310000,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310000,"calling_function":"burn","event":"6dc5b0a33d4d4297e0f5cc2d23ae307951d32aab2d86b7fa147b385219f3a597","quantity":93000000000,"tx_index":1}',0,'CREDIT'); INSERT INTO messages VALUES(5,310000,'insert','burns','{"block_index":310000,"burned":62000000,"earned":93000000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"6dc5b0a33d4d4297e0f5cc2d23ae307951d32aab2d86b7fa147b385219f3a597","tx_index":1}',0,'BURN'); INSERT INTO messages VALUES(6,310000,'parse','blocks','{"block_index":310000,"ledger_hash":"cf0ea1d313e22ba5f413075b88e07dffc5c00e59f95eeb6d6dec935bd77f5ae4","messages_hash":"9e7dd13f1ecb4ec6481076dc9bb5fda1bdb9103747455f9de9ab516748201ef0","txlist_hash":"f06c23e6040a063ed59693baa0d63492dce64e1debc7455b22f5535c9dfbdc67"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(7,310001,'insert','blocks','{"block_hash":"3c9f6a9c6cac46a9273bd3db39ad775acd5bc546378ec2fb0587e06e112cc78e","block_index":310001,"block_time":310001000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(7,310000,'insert','blocks','{"block_hash":"3c9f6a9c6cac46a9273bd3db39ad775acd5bc546378ec2fb0587e06e112cc78e","block_index":310001,"block_time":310001000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(8,310001,'insert','transactions','{"block_hash":"3c9f6a9c6cac46a9273bd3db39ad775acd5bc546378ec2fb0587e06e112cc78e","block_index":310001,"block_time":310001000,"btc_amount":0,"data":"00000014000000a25be34b66000000174876e800010000000000000000000f446976697369626c65206173736574","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"1fc2e5a57f584b2f2edd05676e75c33d03eed1d3098cc0550ea33474e3ec9db1","tx_index":2}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(9,310001,'insert','debits','{"action":"issuance fee","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310001,"event":"1fc2e5a57f584b2f2edd05676e75c33d03eed1d3098cc0550ea33474e3ec9db1","quantity":50000000,"tx_index":2}',0,'DEBIT'); INSERT INTO messages VALUES(10,310001,'insert','assets','{"asset_id":"697326324582","asset_longname":null,"asset_name":"DIVISIBLE","block_index":310001}',0,'ASSET_CREATION'); @@ -980,7 +980,7 @@ INSERT INTO messages VALUES(11,310001,'insert','issuances','{"asset":"DIVISIBLE" INSERT INTO messages VALUES(12,310001,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"DIVISIBLE","block_index":310001,"calling_function":"issuance","event":"1fc2e5a57f584b2f2edd05676e75c33d03eed1d3098cc0550ea33474e3ec9db1","quantity":100000000000,"tx_index":2}',0,'CREDIT'); INSERT INTO messages VALUES(13,310001,'parse','transactions','{"supported":true,"tx_hash":"1fc2e5a57f584b2f2edd05676e75c33d03eed1d3098cc0550ea33474e3ec9db1","tx_index":2}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(14,310001,'parse','blocks','{"block_index":310001,"ledger_hash":"11461f972c4cd85c87b5abfedb3cee589d09e945570d34564dcde6f4df9d2b57","messages_hash":"73d038390ff24d64df88c69d45b46bbc90f6b77f68cbbe2081dbe1e556a65e5e","txlist_hash":"ff8358e8c8b2cb9a1765deadb77bdfc6eae05a844831a0a8c8820d416d54446e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(15,310002,'insert','blocks','{"block_hash":"fbb60f1144e1f7d4dc036a4a158a10ea6dea2ba6283a723342a49b8eb5cc9964","block_index":310002,"block_time":310002000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(15,310001,'insert','blocks','{"block_hash":"fbb60f1144e1f7d4dc036a4a158a10ea6dea2ba6283a723342a49b8eb5cc9964","block_index":310002,"block_time":310002000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(16,310002,'insert','transactions','{"block_hash":"fbb60f1144e1f7d4dc036a4a158a10ea6dea2ba6283a723342a49b8eb5cc9964","block_index":310002,"block_time":310002000,"btc_amount":0,"data":"000000140006cad8dc7f0b6600000000000003e800000000000000000000124e6f20646976697369626c65206173736574","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"7b1bf5144346279271b1ff78664f118224fe27fd8679d6c1519345f9c6c54584","tx_index":3}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(17,310002,'insert','debits','{"action":"issuance fee","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310002,"event":"7b1bf5144346279271b1ff78664f118224fe27fd8679d6c1519345f9c6c54584","quantity":50000000,"tx_index":3}',0,'DEBIT'); INSERT INTO messages VALUES(18,310002,'insert','assets','{"asset_id":"1911882621324134","asset_longname":null,"asset_name":"NODIVISIBLE","block_index":310002}',0,'ASSET_CREATION'); @@ -988,7 +988,7 @@ INSERT INTO messages VALUES(19,310002,'insert','issuances','{"asset":"NODIVISIBL INSERT INTO messages VALUES(20,310002,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"NODIVISIBLE","block_index":310002,"calling_function":"issuance","event":"7b1bf5144346279271b1ff78664f118224fe27fd8679d6c1519345f9c6c54584","quantity":1000,"tx_index":3}',0,'CREDIT'); INSERT INTO messages VALUES(21,310002,'parse','transactions','{"supported":true,"tx_hash":"7b1bf5144346279271b1ff78664f118224fe27fd8679d6c1519345f9c6c54584","tx_index":3}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(22,310002,'parse','blocks','{"block_index":310002,"ledger_hash":"355d92f841de89a1d97c3b2ea7623959ea4494bb62ea7e67ad359beb68caca8c","messages_hash":"a180177bd180e7945ff4ce61b48c12cb0fd21535f71e943ffc25ff67a770e0f0","txlist_hash":"b17176b511fdea4cd899cfaf83f2e12193a4c92d1b199f18f590eb4fed90fa25"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(23,310003,'insert','blocks','{"block_hash":"d50825dcb32bcf6f69994d616eba18de7718d3d859497e80751b2cb67e333e8a","block_index":310003,"block_time":310003000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(23,310002,'insert','blocks','{"block_hash":"d50825dcb32bcf6f69994d616eba18de7718d3d859497e80751b2cb67e333e8a","block_index":310003,"block_time":310003000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(24,310003,'insert','transactions','{"block_hash":"d50825dcb32bcf6f69994d616eba18de7718d3d859497e80751b2cb67e333e8a","block_index":310003,"block_time":310003000,"btc_amount":0,"data":"0000001400000003c58e5c5600000000000003e8010000000000000000000e43616c6c61626c65206173736574","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"c26f3a0c4e57e41919ff27aae95a9a9d4d65d34c6da6f1893884a17c8d407140","tx_index":4}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(25,310003,'insert','debits','{"action":"issuance fee","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310003,"event":"c26f3a0c4e57e41919ff27aae95a9a9d4d65d34c6da6f1893884a17c8d407140","quantity":50000000,"tx_index":4}',0,'DEBIT'); INSERT INTO messages VALUES(26,310003,'insert','assets','{"asset_id":"16199343190","asset_longname":null,"asset_name":"CALLABLE","block_index":310003}',0,'ASSET_CREATION'); @@ -996,7 +996,7 @@ INSERT INTO messages VALUES(27,310003,'insert','issuances','{"asset":"CALLABLE", INSERT INTO messages VALUES(28,310003,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"CALLABLE","block_index":310003,"calling_function":"issuance","event":"c26f3a0c4e57e41919ff27aae95a9a9d4d65d34c6da6f1893884a17c8d407140","quantity":1000,"tx_index":4}',0,'CREDIT'); INSERT INTO messages VALUES(29,310003,'parse','transactions','{"supported":true,"tx_hash":"c26f3a0c4e57e41919ff27aae95a9a9d4d65d34c6da6f1893884a17c8d407140","tx_index":4}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(30,310003,'parse','blocks','{"block_index":310003,"ledger_hash":"edcd7e344fb5cca16999f025594890b8b54543555e61eb3807406bb4204677f2","messages_hash":"424e7f569243bc71c70002dce988e93e6b19cfb7f859c2a5195533147d099d87","txlist_hash":"b6dffe5b8c1f483c3c20832d23dddd7b530afe7ac1f3f57f433da59d83b48f06"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(31,310004,'insert','blocks','{"block_hash":"60cdc0ac0e3121ceaa2c3885f21f5789f49992ffef6e6ff99f7da80e36744615","block_index":310004,"block_time":310004000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(31,310003,'insert','blocks','{"block_hash":"60cdc0ac0e3121ceaa2c3885f21f5789f49992ffef6e6ff99f7da80e36744615","block_index":310004,"block_time":310004000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(32,310004,'insert','transactions','{"block_hash":"60cdc0ac0e3121ceaa2c3885f21f5789f49992ffef6e6ff99f7da80e36744615","block_index":310004,"block_time":310004000,"btc_amount":0,"data":"0000001400000000082c82e300000000000003e8010000000000000000000c4c6f636b6564206173736574","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"90b5734be98b0f2a0bd4b6a269c8db3368e2e387bb890ade239951d05423b4da","tx_index":5}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(33,310004,'insert','debits','{"action":"issuance fee","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310004,"event":"90b5734be98b0f2a0bd4b6a269c8db3368e2e387bb890ade239951d05423b4da","quantity":50000000,"tx_index":5}',0,'DEBIT'); INSERT INTO messages VALUES(34,310004,'insert','assets','{"asset_id":"137134819","asset_longname":null,"asset_name":"LOCKED","block_index":310004}',0,'ASSET_CREATION'); @@ -1004,78 +1004,78 @@ INSERT INTO messages VALUES(35,310004,'insert','issuances','{"asset":"LOCKED","a INSERT INTO messages VALUES(36,310004,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"LOCKED","block_index":310004,"calling_function":"issuance","event":"90b5734be98b0f2a0bd4b6a269c8db3368e2e387bb890ade239951d05423b4da","quantity":1000,"tx_index":5}',0,'CREDIT'); INSERT INTO messages VALUES(37,310004,'parse','transactions','{"supported":true,"tx_hash":"90b5734be98b0f2a0bd4b6a269c8db3368e2e387bb890ade239951d05423b4da","tx_index":5}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(38,310004,'parse','blocks','{"block_index":310004,"ledger_hash":"abd71a31bc1f8a072761b23a5bc2976731ebdf305d1d7d33922e93573f308129","messages_hash":"e47e38f99b22b4e486fc05ee95352ec049c4d7e9e4b67082cadc62e928a2a9e7","txlist_hash":"3da72b0c813432f47a3a70887dfd29350d270e9ebaca9875ed6304c91888e387"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(39,310005,'insert','blocks','{"block_hash":"8005c2926b7ecc50376642bc661a49108b6dc62636463a5c492b123e2184cd9a","block_index":310005,"block_time":310005000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(39,310004,'insert','blocks','{"block_hash":"8005c2926b7ecc50376642bc661a49108b6dc62636463a5c492b123e2184cd9a","block_index":310005,"block_time":310005000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(40,310005,'insert','transactions','{"block_hash":"8005c2926b7ecc50376642bc661a49108b6dc62636463a5c492b123e2184cd9a","block_index":310005,"block_time":310005000,"btc_amount":0,"data":"0000001400000000082c82e3000000000000000001000000000000000000044c4f434b","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"344dcc8909ca3a137630726d0071dfd2df4f7c855bac150c7d3a8367835c90bc","tx_index":6}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(41,310005,'insert','debits','{"action":"issuance fee","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310005,"event":"344dcc8909ca3a137630726d0071dfd2df4f7c855bac150c7d3a8367835c90bc","quantity":0,"tx_index":6}',0,'DEBIT'); INSERT INTO messages VALUES(42,310005,'insert','issuances','{"asset":"LOCKED","asset_longname":null,"block_index":310005,"call_date":0,"call_price":0.0,"callable":false,"description":"Locked asset","divisible":true,"fee_paid":0,"issuer":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","locked":true,"quantity":0,"reset":false,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","transfer":false,"tx_hash":"344dcc8909ca3a137630726d0071dfd2df4f7c855bac150c7d3a8367835c90bc","tx_index":6}',0,'ASSET_ISSUANCE'); INSERT INTO messages VALUES(43,310005,'parse','transactions','{"supported":true,"tx_hash":"344dcc8909ca3a137630726d0071dfd2df4f7c855bac150c7d3a8367835c90bc","tx_index":6}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(44,310005,'parse','blocks','{"block_index":310005,"ledger_hash":"0c3914f9676e506a96e6db793f15200ef33087cd47de4d27628849013a391daa","messages_hash":"b5346d07ec8d18e36cbabc930ea2dc452d5fc26b12af0d060f7fb7ff46b8f99d","txlist_hash":"2d59f139907859f9108360f7fa4695101a6b5ef0b7dd0e56c2dd41641e58e9af"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(45,310006,'insert','blocks','{"block_hash":"bdad69d1669eace68b9f246de113161099d4f83322e2acf402c42defef3af2bb","block_index":310006,"block_time":310006000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(45,310005,'insert','blocks','{"block_hash":"bdad69d1669eace68b9f246de113161099d4f83322e2acf402c42defef3af2bb","block_index":310006,"block_time":310006000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(46,310006,'insert','transactions','{"block_hash":"bdad69d1669eace68b9f246de113161099d4f83322e2acf402c42defef3af2bb","block_index":310006,"block_time":310006000,"btc_amount":0,"data":"0000000a00000000000000010000000005f5e100000000a25be34b660000000005f5e10007d00000000000000000","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"4f0433ba841038e2e16328445930dd7bca35309b14b0da4451c8f94c631368b8","tx_index":7}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(47,310006,'insert','debits','{"action":"open order","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310006,"event":"4f0433ba841038e2e16328445930dd7bca35309b14b0da4451c8f94c631368b8","quantity":100000000,"tx_index":7}',0,'DEBIT'); INSERT INTO messages VALUES(48,310006,'insert','orders','{"block_index":310006,"expiration":2000,"expire_index":312006,"fee_provided":6800,"fee_provided_remaining":6800,"fee_required":0,"fee_required_remaining":0,"get_asset":"DIVISIBLE","get_quantity":100000000,"get_remaining":100000000,"give_asset":"XCP","give_quantity":100000000,"give_remaining":100000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"open","tx_hash":"4f0433ba841038e2e16328445930dd7bca35309b14b0da4451c8f94c631368b8","tx_index":7}',0,'OPEN_ORDER'); INSERT INTO messages VALUES(49,310006,'parse','transactions','{"supported":true,"tx_hash":"4f0433ba841038e2e16328445930dd7bca35309b14b0da4451c8f94c631368b8","tx_index":7}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(50,310006,'parse','blocks','{"block_index":310006,"ledger_hash":"57ff5f34a9e418b179db9003414c5f3bdfa7feeb538f24071b23d024a3d05df0","messages_hash":"2490d17814a7fac90af178d960f9e277e98bf005b8d3f076bc7c5d58634fc271","txlist_hash":"a4a6fb433e6c49968fded16954502c472b0d21b74c6cce8d08c8c53c00f2781e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(51,310007,'insert','blocks','{"block_hash":"10a642b96d60091d08234d17dfdecf3025eca41e4fc8e3bbe71a91c5a457cb4b","block_index":310007,"block_time":310007000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(51,310006,'insert','blocks','{"block_hash":"10a642b96d60091d08234d17dfdecf3025eca41e4fc8e3bbe71a91c5a457cb4b","block_index":310007,"block_time":310007000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(52,310007,'insert','transactions','{"block_hash":"10a642b96d60091d08234d17dfdecf3025eca41e4fc8e3bbe71a91c5a457cb4b","block_index":310007,"block_time":310007000,"btc_amount":5430,"data":"00000000000000a25be34b660000000005f5e100","destination":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"6e91ae23de2035e3e28c3322712212333592a1f666bcff9dd91aec45d5ea2753","tx_index":8}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(53,310007,'insert','debits','{"action":"send","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"DIVISIBLE","block_index":310007,"event":"6e91ae23de2035e3e28c3322712212333592a1f666bcff9dd91aec45d5ea2753","quantity":100000000,"tx_index":8}',0,'DEBIT'); INSERT INTO messages VALUES(54,310007,'insert','credits','{"address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","asset":"DIVISIBLE","block_index":310007,"calling_function":"send","event":"6e91ae23de2035e3e28c3322712212333592a1f666bcff9dd91aec45d5ea2753","quantity":100000000,"tx_index":8}',0,'CREDIT'); INSERT INTO messages VALUES(55,310007,'insert','sends','{"asset":"DIVISIBLE","block_index":310007,"destination":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","quantity":100000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"6e91ae23de2035e3e28c3322712212333592a1f666bcff9dd91aec45d5ea2753","tx_index":8}',0,'SEND'); INSERT INTO messages VALUES(56,310007,'parse','transactions','{"supported":true,"tx_hash":"6e91ae23de2035e3e28c3322712212333592a1f666bcff9dd91aec45d5ea2753","tx_index":8}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(57,310007,'parse','blocks','{"block_index":310007,"ledger_hash":"bfed530458339aab02ff75ad76738569dc6997c7a35d4452351678b04e022f68","messages_hash":"8147e6b42edd71153d880649a4b7b75c3e2fc59f122de054ebacf5204abee406","txlist_hash":"ce20264c332892b0a5e0c3e2d4b63d02c901fa2c3f8c5171b2896b50c82ea0af"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(58,310008,'insert','blocks','{"block_hash":"47d0e3acbdc6916aeae95e987f9cfa16209b3df1e67bb38143b3422b32322c33","block_index":310008,"block_time":310008000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(58,310007,'insert','blocks','{"block_hash":"47d0e3acbdc6916aeae95e987f9cfa16209b3df1e67bb38143b3422b32322c33","block_index":310008,"block_time":310008000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(59,310008,'insert','transactions','{"block_hash":"47d0e3acbdc6916aeae95e987f9cfa16209b3df1e67bb38143b3422b32322c33","block_index":310008,"block_time":310008000,"btc_amount":5430,"data":"0000000000000000000000010000000005f5e100","destination":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"4fd55abadfdbe77c3bda2431749cca934a29994a179620a62c1b57f28bd62a43","tx_index":9}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(60,310008,'insert','debits','{"action":"send","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310008,"event":"4fd55abadfdbe77c3bda2431749cca934a29994a179620a62c1b57f28bd62a43","quantity":100000000,"tx_index":9}',0,'DEBIT'); INSERT INTO messages VALUES(61,310008,'insert','credits','{"address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","asset":"XCP","block_index":310008,"calling_function":"send","event":"4fd55abadfdbe77c3bda2431749cca934a29994a179620a62c1b57f28bd62a43","quantity":100000000,"tx_index":9}',0,'CREDIT'); INSERT INTO messages VALUES(62,310008,'insert','sends','{"asset":"XCP","block_index":310008,"destination":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","quantity":100000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"4fd55abadfdbe77c3bda2431749cca934a29994a179620a62c1b57f28bd62a43","tx_index":9}',0,'SEND'); INSERT INTO messages VALUES(63,310008,'parse','transactions','{"supported":true,"tx_hash":"4fd55abadfdbe77c3bda2431749cca934a29994a179620a62c1b57f28bd62a43","tx_index":9}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(64,310008,'parse','blocks','{"block_index":310008,"ledger_hash":"d4feec997754d11a1502e5351ed62fcfbfcafb770e19a37da41d1d88b7b45ed4","messages_hash":"d573b3b22e23c8e7ced1388219033e4b3a1c7711944acfb2926abfdbdd63b44b","txlist_hash":"d25c9f48fbbe2010a62cad729d45b658a2caf9a7c9abc65a30e2a7fc47bc83e5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(65,310009,'insert','blocks','{"block_hash":"4d474992b141620bf3753863db7ee5e8af26cadfbba27725911f44fa657bc1c0","block_index":310009,"block_time":310009000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(65,310008,'insert','blocks','{"block_hash":"4d474992b141620bf3753863db7ee5e8af26cadfbba27725911f44fa657bc1c0","block_index":310009,"block_time":310009000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(66,310009,'insert','transactions','{"block_hash":"4d474992b141620bf3753863db7ee5e8af26cadfbba27725911f44fa657bc1c0","block_index":310009,"block_time":310009000,"btc_amount":0,"data":"0000000a00000000000000010000000005f5e100000000a25be34b660000000005f5e10007d00000000000000000","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"21460d5c07284f9be9baf824927d0d4e4eb790e297f3162305841607b672349b","tx_index":10}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(67,310009,'insert','debits','{"action":"open order","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310009,"event":"21460d5c07284f9be9baf824927d0d4e4eb790e297f3162305841607b672349b","quantity":100000000,"tx_index":10}',0,'DEBIT'); INSERT INTO messages VALUES(68,310009,'insert','orders','{"block_index":310009,"expiration":2000,"expire_index":312009,"fee_provided":6800,"fee_provided_remaining":6800,"fee_required":0,"fee_required_remaining":0,"get_asset":"DIVISIBLE","get_quantity":100000000,"get_remaining":100000000,"give_asset":"XCP","give_quantity":100000000,"give_remaining":100000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"open","tx_hash":"21460d5c07284f9be9baf824927d0d4e4eb790e297f3162305841607b672349b","tx_index":10}',0,'OPEN_ORDER'); INSERT INTO messages VALUES(69,310009,'parse','transactions','{"supported":true,"tx_hash":"21460d5c07284f9be9baf824927d0d4e4eb790e297f3162305841607b672349b","tx_index":10}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(70,310009,'parse','blocks','{"block_index":310009,"ledger_hash":"4ab5ff9e71bbc83956557fb5abec98372fa38e5580838fb258b2d831bfc4d9ea","messages_hash":"54c64b7338e79af0bc6b238eb91692ac0331345cbd6278ef27aa3f6a7351e35e","txlist_hash":"173e769e0b4fa951ef0267c7e218f3a473d9a5857b0880d654a2181f244c92e2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(71,310010,'insert','blocks','{"block_hash":"a58162dff81a32e6a29b075be759dbb9fa9b8b65303e69c78fb4d7b0acc37042","block_index":310010,"block_time":310010000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(71,310009,'insert','blocks','{"block_hash":"a58162dff81a32e6a29b075be759dbb9fa9b8b65303e69c78fb4d7b0acc37042","block_index":310010,"block_time":310010000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(72,310010,'insert','transactions','{"block_hash":"a58162dff81a32e6a29b075be759dbb9fa9b8b65303e69c78fb4d7b0acc37042","block_index":310010,"block_time":310010000,"btc_amount":0,"data":"0000000a00000000000000010000000005f5e100000000000000000000000000000f424007d000000000000dbba0","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"1899b2e6ec36ba4bc9d035e6640b0a62b08c3a147c77c89183a77d9ed9081b3a","tx_index":11}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(73,310010,'insert','debits','{"action":"open order","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310010,"event":"1899b2e6ec36ba4bc9d035e6640b0a62b08c3a147c77c89183a77d9ed9081b3a","quantity":100000000,"tx_index":11}',0,'DEBIT'); INSERT INTO messages VALUES(74,310010,'insert','orders','{"block_index":310010,"expiration":2000,"expire_index":312010,"fee_provided":6800,"fee_provided_remaining":6800,"fee_required":900000,"fee_required_remaining":900000,"get_asset":"BTC","get_quantity":1000000,"get_remaining":1000000,"give_asset":"XCP","give_quantity":100000000,"give_remaining":100000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"open","tx_hash":"1899b2e6ec36ba4bc9d035e6640b0a62b08c3a147c77c89183a77d9ed9081b3a","tx_index":11}',0,'OPEN_ORDER'); INSERT INTO messages VALUES(75,310010,'parse','transactions','{"supported":true,"tx_hash":"1899b2e6ec36ba4bc9d035e6640b0a62b08c3a147c77c89183a77d9ed9081b3a","tx_index":11}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(76,310010,'parse','blocks','{"block_index":310010,"ledger_hash":"1909ef40a24263776cb9e0d52a690048b50728855a0fe4b0e1ba3834a9e401c1","messages_hash":"895d6cc5aa14f7618cc66b2593b43d0223387fd11f1b2b017c9f22140613afcc","txlist_hash":"7d1ef03dad99c4bdf7a8e5af7209a136c8ac392922dd3afdbcc0446ea1f5f604"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(77,310011,'insert','blocks','{"block_hash":"8042cc2ef293fd73d050f283fbd075c79dd4c49fdcca054dc0714fc3a50dc1bb","block_index":310011,"block_time":310011000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(77,310010,'insert','blocks','{"block_hash":"8042cc2ef293fd73d050f283fbd075c79dd4c49fdcca054dc0714fc3a50dc1bb","block_index":310011,"block_time":310011000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(78,310011,'insert','transactions','{"block_hash":"8042cc2ef293fd73d050f283fbd075c79dd4c49fdcca054dc0714fc3a50dc1bb","block_index":310011,"block_time":310011000,"btc_amount":0,"data":"0000000a000000000000000000000000000a2c2b00000000000000010000000005f5e10007d00000000000000000","destination":"","fee":1000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"a1768d7db2db3b9732b26df8c04db4b9a8535a1e5cf684a680e81e7c06f394b6","tx_index":12}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(79,310011,'insert','orders','{"block_index":310011,"expiration":2000,"expire_index":312011,"fee_provided":1000000,"fee_provided_remaining":1000000,"fee_required":0,"fee_required_remaining":0,"get_asset":"XCP","get_quantity":100000000,"get_remaining":100000000,"give_asset":"BTC","give_quantity":666667,"give_remaining":666667,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"open","tx_hash":"a1768d7db2db3b9732b26df8c04db4b9a8535a1e5cf684a680e81e7c06f394b6","tx_index":12}',0,'OPEN_ORDER'); INSERT INTO messages VALUES(80,310011,'parse','transactions','{"supported":true,"tx_hash":"a1768d7db2db3b9732b26df8c04db4b9a8535a1e5cf684a680e81e7c06f394b6","tx_index":12}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(81,310011,'parse','blocks','{"block_index":310011,"ledger_hash":"c3d51a5f2df90c089844ba4de7d5541f6051490aa1389e5945a7bb91d49e3589","messages_hash":"9603465a786c9b927cdf36078b09eed3481d863a390eb52cf617fab895f6be65","txlist_hash":"86ebe5be8b9443f411adcd49e7443a34941979c0c6bf40136a3b44193024abfc"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(82,310012,'insert','blocks','{"block_hash":"cdba329019d93a67b31b79d05f76ce1b7791d430ea0d6c1c2168fe78d2f67677","block_index":310012,"block_time":310012000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(82,310011,'insert','blocks','{"block_hash":"cdba329019d93a67b31b79d05f76ce1b7791d430ea0d6c1c2168fe78d2f67677","block_index":310012,"block_time":310012000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(83,310012,'insert','transactions','{"block_hash":"cdba329019d93a67b31b79d05f76ce1b7791d430ea0d6c1c2168fe78d2f67677","block_index":310012,"block_time":310012000,"btc_amount":1000,"data":"0000000000000000000000010000000011e1a300","destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"698e97e507da8623cf38ab42701853443c8f7fe0d93b4674aabb42f9800ee9d6","tx_index":13}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(84,310012,'insert','debits','{"action":"send","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310012,"event":"698e97e507da8623cf38ab42701853443c8f7fe0d93b4674aabb42f9800ee9d6","quantity":300000000,"tx_index":13}',0,'DEBIT'); INSERT INTO messages VALUES(85,310012,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310012,"calling_function":"send","event":"698e97e507da8623cf38ab42701853443c8f7fe0d93b4674aabb42f9800ee9d6","quantity":300000000,"tx_index":13}',0,'CREDIT'); INSERT INTO messages VALUES(86,310012,'insert','sends','{"asset":"XCP","block_index":310012,"destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","quantity":300000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"698e97e507da8623cf38ab42701853443c8f7fe0d93b4674aabb42f9800ee9d6","tx_index":13}',0,'SEND'); INSERT INTO messages VALUES(87,310012,'parse','transactions','{"supported":true,"tx_hash":"698e97e507da8623cf38ab42701853443c8f7fe0d93b4674aabb42f9800ee9d6","tx_index":13}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(88,310012,'parse','blocks','{"block_index":310012,"ledger_hash":"a9dc31556d38b118eeb0bcbb3a374a0ed79adec4eb23e00c80c0599ba97c9a7a","messages_hash":"f064f5cc3b48464bef3b6aa9b77a01adf3fb99168888a5615a369d1bcf125ec2","txlist_hash":"5a729b250068fe7b175a540b66a30326344514e357023184540ef97bae5e16e7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(89,310013,'insert','blocks','{"block_hash":"0425e5e832e4286757dc0228cd505b8d572081007218abd3a0983a3bcd502a61","block_index":310013,"block_time":310013000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(89,310012,'insert','blocks','{"block_hash":"0425e5e832e4286757dc0228cd505b8d572081007218abd3a0983a3bcd502a61","block_index":310013,"block_time":310013000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(90,310013,'insert','transactions','{"block_hash":"0425e5e832e4286757dc0228cd505b8d572081007218abd3a0983a3bcd502a61","block_index":310013,"block_time":310013000,"btc_amount":1000,"data":"00000000000000a25be34b66000000003b9aca00","destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"0cfeeb559ed794d067557df0376a6c213b48b174b80cdb2c3c6d365cf538e132","tx_index":14}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(91,310013,'insert','debits','{"action":"send","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"DIVISIBLE","block_index":310013,"event":"0cfeeb559ed794d067557df0376a6c213b48b174b80cdb2c3c6d365cf538e132","quantity":1000000000,"tx_index":14}',0,'DEBIT'); INSERT INTO messages VALUES(92,310013,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"DIVISIBLE","block_index":310013,"calling_function":"send","event":"0cfeeb559ed794d067557df0376a6c213b48b174b80cdb2c3c6d365cf538e132","quantity":1000000000,"tx_index":14}',0,'CREDIT'); INSERT INTO messages VALUES(93,310013,'insert','sends','{"asset":"DIVISIBLE","block_index":310013,"destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","quantity":1000000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"0cfeeb559ed794d067557df0376a6c213b48b174b80cdb2c3c6d365cf538e132","tx_index":14}',0,'SEND'); INSERT INTO messages VALUES(94,310013,'parse','transactions','{"supported":true,"tx_hash":"0cfeeb559ed794d067557df0376a6c213b48b174b80cdb2c3c6d365cf538e132","tx_index":14}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(95,310013,'parse','blocks','{"block_index":310013,"ledger_hash":"e72be5070d0a5853631d902d334e8b88eddf6e79616373311babc4a0a27dd3d8","messages_hash":"9c164d38483ae1923ddc825d301d86d8a71548f2a1edcfad8311e4111cc3e34a","txlist_hash":"1294e3d0871b0c2297d9980ed46bfa3563b33b202b426949dadeeba7075b4bc7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(96,310014,'insert','blocks','{"block_hash":"85b28d413ebda2968ed82ae53643677338650151b997ed1e4656158005b9f65f","block_index":310014,"block_time":310014000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(96,310013,'insert','blocks','{"block_hash":"85b28d413ebda2968ed82ae53643677338650151b997ed1e4656158005b9f65f","block_index":310014,"block_time":310014000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(97,310014,'insert','transactions','{"block_hash":"85b28d413ebda2968ed82ae53643677338650151b997ed1e4656158005b9f65f","block_index":310014,"block_time":310014000,"btc_amount":5430,"data":"000000000006cad8dc7f0b660000000000000005","destination":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a","tx_index":15}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(98,310014,'insert','debits','{"action":"send","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"NODIVISIBLE","block_index":310014,"event":"1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a","quantity":5,"tx_index":15}',0,'DEBIT'); INSERT INTO messages VALUES(99,310014,'insert','credits','{"address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","asset":"NODIVISIBLE","block_index":310014,"calling_function":"send","event":"1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a","quantity":5,"tx_index":15}',0,'CREDIT'); INSERT INTO messages VALUES(100,310014,'insert','sends','{"asset":"NODIVISIBLE","block_index":310014,"destination":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","quantity":5,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a","tx_index":15}',0,'SEND'); INSERT INTO messages VALUES(101,310014,'parse','transactions','{"supported":true,"tx_hash":"1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a","tx_index":15}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(102,310014,'parse','blocks','{"block_index":310014,"ledger_hash":"cb0962222af917dbac2a11465c22cd80770c0b3cdb8bdc0870c99a8116745c9e","messages_hash":"81a62b796cd9dbf6eaecf4053b5896e384cf08135dd7aef545c48feadfbd6936","txlist_hash":"d5431af170b331497d8967969820632880473d06dae0d06fa7ffc93a0cb90180"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(103,310015,'insert','blocks','{"block_hash":"4cf77d688f18f0c68c077db882f62e49f31859dfa6144372457cd73b29223922","block_index":310015,"block_time":310015000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(103,310014,'insert','blocks','{"block_hash":"4cf77d688f18f0c68c077db882f62e49f31859dfa6144372457cd73b29223922","block_index":310015,"block_time":310015000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(104,310015,'insert','transactions','{"block_hash":"4cf77d688f18f0c68c077db882f62e49f31859dfa6144372457cd73b29223922","block_index":310015,"block_time":310015000,"btc_amount":1000,"data":"000000000006cad8dc7f0b66000000000000000a","destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c","tx_index":16}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(105,310015,'insert','debits','{"action":"send","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"NODIVISIBLE","block_index":310015,"event":"e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c","quantity":10,"tx_index":16}',0,'DEBIT'); INSERT INTO messages VALUES(106,310015,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"NODIVISIBLE","block_index":310015,"calling_function":"send","event":"e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c","quantity":10,"tx_index":16}',0,'CREDIT'); INSERT INTO messages VALUES(107,310015,'insert','sends','{"asset":"NODIVISIBLE","block_index":310015,"destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","quantity":10,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c","tx_index":16}',0,'SEND'); INSERT INTO messages VALUES(108,310015,'parse','transactions','{"supported":true,"tx_hash":"e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c","tx_index":16}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(109,310015,'parse','blocks','{"block_index":310015,"ledger_hash":"6ff899433f22546c41a15f20b4c66913c747931500fee10d58c4a17b9e2f0c88","messages_hash":"ea46fd7c1ff0ff2b73dc503b3ba507ab43442ffac120f56b5fd0803d27db4b9c","txlist_hash":"b77c1d69b3ac7348e336cce9948f982efafa1cb56cbdde85fe9f49a73871ba3b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(110,310016,'insert','blocks','{"block_hash":"99dc7d2627efb4e5e618a53b9898b4ca39c70e98fe9bf39f68a6c980f5b64ef9","block_index":310016,"block_time":310016000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(110,310015,'insert','blocks','{"block_hash":"99dc7d2627efb4e5e618a53b9898b4ca39c70e98fe9bf39f68a6c980f5b64ef9","block_index":310016,"block_time":310016000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(111,310016,'insert','transactions','{"block_hash":"99dc7d2627efb4e5e618a53b9898b4ca39c70e98fe9bf39f68a6c980f5b64ef9","block_index":310016,"block_time":310016000,"btc_amount":0,"data":"000000140000000000033a3e7fffffffffffffff01000000000000000000104d6178696d756d207175616e74697479","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"bd4e9cbbe69c2db893cd32182a2d315c89c45ba4e31aa5775d1fe42d841cea39","tx_index":17}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(112,310016,'insert','debits','{"action":"issuance fee","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310016,"event":"bd4e9cbbe69c2db893cd32182a2d315c89c45ba4e31aa5775d1fe42d841cea39","quantity":50000000,"tx_index":17}',0,'DEBIT'); INSERT INTO messages VALUES(113,310016,'insert','assets','{"asset_id":"211518","asset_longname":null,"asset_name":"MAXI","block_index":310016}',0,'ASSET_CREATION'); @@ -1083,23 +1083,23 @@ INSERT INTO messages VALUES(114,310016,'insert','issuances','{"asset":"MAXI","as INSERT INTO messages VALUES(115,310016,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"MAXI","block_index":310016,"calling_function":"issuance","event":"bd4e9cbbe69c2db893cd32182a2d315c89c45ba4e31aa5775d1fe42d841cea39","quantity":9223372036854775807,"tx_index":17}',0,'CREDIT'); INSERT INTO messages VALUES(116,310016,'parse','transactions','{"supported":true,"tx_hash":"bd4e9cbbe69c2db893cd32182a2d315c89c45ba4e31aa5775d1fe42d841cea39","tx_index":17}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(117,310016,'parse','blocks','{"block_index":310016,"ledger_hash":"ec66a06cde401b66917c6d1d4e1ee8893405cfbf0474560d9997d6960c8af710","messages_hash":"32d216ca6a80cb867f8963ab1ddde2bd07a969e095d67c80aecd0950a01a6218","txlist_hash":"6d3d469ad1b72a67ee50d8a7c6c57069da3a0e2e9d12a23a30bbf4f2ccc64cb6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(118,310017,'insert','blocks','{"block_hash":"8a4fedfbf734b91a5c5761a7bcb3908ea57169777a7018148c51ff611970e4a3","block_index":310017,"block_time":310017000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(118,310016,'insert','blocks','{"block_hash":"8a4fedfbf734b91a5c5761a7bcb3908ea57169777a7018148c51ff611970e4a3","block_index":310017,"block_time":310017000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(119,310017,'insert','transactions','{"block_hash":"8a4fedfbf734b91a5c5761a7bcb3908ea57169777a7018148c51ff611970e4a3","block_index":310017,"block_time":310017000,"btc_amount":0,"data":"0000001e52bb33003ff0000000000000004c4b4009556e69742054657374","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"d14388b74b63d93e4477b1fe8426028bb8ab20656703e3ce8deeb23c2fe0b8af","tx_index":18}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(120,310017,'insert','broadcasts','{"block_index":310017,"fee_fraction_int":5000000,"locked":false,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","text":"Unit Test","timestamp":1388000000,"tx_hash":"d14388b74b63d93e4477b1fe8426028bb8ab20656703e3ce8deeb23c2fe0b8af","tx_index":18,"value":1.0}',0,'BROADCAST'); INSERT INTO messages VALUES(121,310017,'parse','transactions','{"supported":true,"tx_hash":"d14388b74b63d93e4477b1fe8426028bb8ab20656703e3ce8deeb23c2fe0b8af","tx_index":18}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(122,310017,'parse','blocks','{"block_index":310017,"ledger_hash":"b2053109bff06dae1705fc32ab0712f38bf9d206fa3517fbf0a938d1b5f33bad","messages_hash":"720dfe78fccdb0831b951f79905c945a3c7abb6f13c3e258e7c3b8b7ddbfae36","txlist_hash":"223e10a8e23e4435e635f1dda533a0662dff9f0e3fb86b72a22b2c191f731a80"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(123,310018,'insert','blocks','{"block_hash":"35c06f9e3de39e4e56ceb1d1a22008f52361c50dd0d251c0acbe2e3c2dba8ed3","block_index":310018,"block_time":310018000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(123,310017,'insert','blocks','{"block_hash":"35c06f9e3de39e4e56ceb1d1a22008f52361c50dd0d251c0acbe2e3c2dba8ed3","block_index":310018,"block_time":310018000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(124,310018,'insert','transactions','{"block_hash":"35c06f9e3de39e4e56ceb1d1a22008f52361c50dd0d251c0acbe2e3c2dba8ed3","block_index":310018,"block_time":310018000,"btc_amount":0,"data":"0000001e4cc552003ff000000000000000000000046c6f636b","destination":"","fee":6800,"source":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","supported":true,"tx_hash":"f9e0527c85a9084d7eda91fc30a49993370d029efea031a8ccccdf846146a660","tx_index":19}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(125,310018,'insert','broadcasts','{"block_index":310018,"fee_fraction_int":null,"locked":true,"source":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","status":"valid","text":null,"timestamp":0,"tx_hash":"f9e0527c85a9084d7eda91fc30a49993370d029efea031a8ccccdf846146a660","tx_index":19,"value":null}',0,'BROADCAST'); INSERT INTO messages VALUES(126,310018,'parse','transactions','{"supported":true,"tx_hash":"f9e0527c85a9084d7eda91fc30a49993370d029efea031a8ccccdf846146a660","tx_index":19}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(127,310018,'parse','blocks','{"block_index":310018,"ledger_hash":"d7051de4d03fb31bfedf215b407b1edc12789c1f2748abb5a72257ad8f5113ce","messages_hash":"260724f92886f32a80da2705559eda171d2bd55724a534c72740e05b348c1874","txlist_hash":"9eb6f4683bebb675467829573cd2f7e3ab613d21398c5aef31ed389a40f3c48d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(128,310019,'insert','blocks','{"block_hash":"114affa0c4f34b1ebf8e2778c9477641f60b5b9e8a69052158041d4c41893294","block_index":310019,"block_time":310019000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(128,310018,'insert','blocks','{"block_hash":"114affa0c4f34b1ebf8e2778c9477641f60b5b9e8a69052158041d4c41893294","block_index":310019,"block_time":310019000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(129,310019,'insert','transactions','{"block_hash":"114affa0c4f34b1ebf8e2778c9477641f60b5b9e8a69052158041d4c41893294","block_index":310019,"block_time":310019000,"btc_amount":5430,"data":"00000028000152bb3301000000000000000900000000000000090000000000000000000013b000000064","destination":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"2a2169991597036b6dad687ea1feffd55465a204466f40c35cbba811cb3109b1","tx_index":20}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(130,310019,'insert','debits','{"action":"bet","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310019,"event":"2a2169991597036b6dad687ea1feffd55465a204466f40c35cbba811cb3109b1","quantity":9,"tx_index":20}',0,'DEBIT'); INSERT INTO messages VALUES(131,310019,'insert','bets','{"bet_type":1,"block_index":310019,"counterwager_quantity":9,"counterwager_remaining":9,"deadline":1388000001,"expiration":100,"expire_index":310119,"fee_fraction_int":5000000.0,"feed_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","leverage":5040,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"open","target_value":0.0,"tx_hash":"2a2169991597036b6dad687ea1feffd55465a204466f40c35cbba811cb3109b1","tx_index":20,"wager_quantity":9,"wager_remaining":9}',0,'OPEN_BET'); INSERT INTO messages VALUES(132,310019,'parse','transactions','{"supported":true,"tx_hash":"2a2169991597036b6dad687ea1feffd55465a204466f40c35cbba811cb3109b1","tx_index":20}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(133,310019,'parse','blocks','{"block_index":310019,"ledger_hash":"35c95a70193ded2f9ee18254a91ce5d4834bb162fc3cca85dd432339257539b8","messages_hash":"10830661175f7d2bf48585647709d277e5a895b536f58f83672c14d5026992e8","txlist_hash":"88220e5f48660f8b9e339c3afb65ffbad83d632164f1df8e22af2ee6fc18826e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(134,310020,'insert','blocks','{"block_hash":"d93c79920e4a42164af74ecb5c6b903ff6055cdc007376c74dfa692c8d85ebc9","block_index":310020,"block_time":310020000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(134,310019,'insert','blocks','{"block_hash":"d93c79920e4a42164af74ecb5c6b903ff6055cdc007376c74dfa692c8d85ebc9","block_index":310020,"block_time":310020000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(135,310020,'insert','transactions','{"block_hash":"d93c79920e4a42164af74ecb5c6b903ff6055cdc007376c74dfa692c8d85ebc9","block_index":310020,"block_time":310020000,"btc_amount":5430,"data":"00000028000052bb3301000000000000000900000000000000090000000000000000000013b000000064","destination":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","fee":7650,"source":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","supported":true,"tx_hash":"5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93","tx_index":21}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(136,310020,'insert','debits','{"action":"bet","address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","asset":"XCP","block_index":310020,"event":"5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93","quantity":9,"tx_index":21}',0,'DEBIT'); INSERT INTO messages VALUES(137,310020,'insert','bets','{"bet_type":0,"block_index":310020,"counterwager_quantity":9,"counterwager_remaining":9,"deadline":1388000001,"expiration":100,"expire_index":310120,"fee_fraction_int":5000000.0,"feed_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","leverage":5040,"source":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","status":"open","target_value":0.0,"tx_hash":"5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93","tx_index":21,"wager_quantity":9,"wager_remaining":9}',0,'OPEN_BET'); @@ -1107,176 +1107,176 @@ INSERT INTO messages VALUES(138,310020,'insert','credits','{"address":"mn6q3dS2E INSERT INTO messages VALUES(139,310020,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"2a2169991597036b6dad687ea1feffd55465a204466f40c35cbba811cb3109b1","wager_remaining":0}',0,'BET_UPDATE'); INSERT INTO messages VALUES(140,310020,'insert','credits','{"address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","asset":"XCP","block_index":310020,"calling_function":"filled","event":"5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93","quantity":0,"tx_index":21}',0,'CREDIT'); INSERT INTO messages VALUES(141,310020,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93","wager_remaining":0}',0,'BET_UPDATE'); -INSERT INTO messages VALUES(142,310019,'insert','bet_matches','{"backward_quantity":9,"block_index":310019,"deadline":1388000001,"fee_fraction_int":5000000,"feed_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","forward_quantity":9,"id":"2a2169991597036b6dad687ea1feffd55465a204466f40c35cbba811cb3109b1_5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93","initial_value":1.0,"leverage":5040,"match_expire_index":310119,"status":"pending","target_value":0.0,"tx0_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","tx0_bet_type":1,"tx0_block_index":310019,"tx0_expiration":100,"tx0_hash":"2a2169991597036b6dad687ea1feffd55465a204466f40c35cbba811cb3109b1","tx0_index":20,"tx1_address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","tx1_bet_type":0,"tx1_block_index":310020,"tx1_expiration":100,"tx1_hash":"5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93","tx1_index":21}',0,'BET_MATCH'); +INSERT INTO messages VALUES(142,310020,'insert','bet_matches','{"backward_quantity":9,"block_index":310019,"deadline":1388000001,"fee_fraction_int":5000000,"feed_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","forward_quantity":9,"id":"2a2169991597036b6dad687ea1feffd55465a204466f40c35cbba811cb3109b1_5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93","initial_value":1.0,"leverage":5040,"match_expire_index":310119,"status":"pending","target_value":0.0,"tx0_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","tx0_bet_type":1,"tx0_block_index":310019,"tx0_expiration":100,"tx0_hash":"2a2169991597036b6dad687ea1feffd55465a204466f40c35cbba811cb3109b1","tx0_index":20,"tx1_address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","tx1_bet_type":0,"tx1_block_index":310020,"tx1_expiration":100,"tx1_hash":"5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93","tx1_index":21}',0,'BET_MATCH'); INSERT INTO messages VALUES(143,310020,'parse','transactions','{"supported":true,"tx_hash":"5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93","tx_index":21}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(144,310020,'parse','blocks','{"block_index":310020,"ledger_hash":"8315de64ee1051c333687ba9fae6244287b85bcc1e3a4b67f3fe7d51b931378b","messages_hash":"dd333107fc51c883a23785c8e2176bc01fc1bf8d52ff8d37ee925e9991b03a7a","txlist_hash":"087de9b1715dfdac7372489fc615b597c9575c9520eb1ad5f7435a2641388621"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(145,310021,'insert','blocks','{"block_hash":"7c2460bb32c5749c856486393239bf7a0ac789587ac71f32e7237910da8097f2","block_index":310021,"block_time":310021000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(145,310020,'insert','blocks','{"block_hash":"7c2460bb32c5749c856486393239bf7a0ac789587ac71f32e7237910da8097f2","block_index":310021,"block_time":310021000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(146,310021,'parse','blocks','{"block_index":310021,"ledger_hash":"c2d646bd3f54eec73cd9da6f5da4bc159d0c64e8fb9ad4095dfa58850e65c7b1","messages_hash":"45bb0c5dd432a2d7313fbf6185637260877da537b18334604280a29539e73205","txlist_hash":"e5f36761a4755ebc133389b9bc01a085c585a24fa346c784123f3dd5a125ad27"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(147,310022,'insert','blocks','{"block_hash":"44435f9a99a0aa12a9bfabdc4cb8119f6ea6a6e1350d2d65445fb66a456db5fc","block_index":310022,"block_time":310022000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(147,310021,'insert','blocks','{"block_hash":"44435f9a99a0aa12a9bfabdc4cb8119f6ea6a6e1350d2d65445fb66a456db5fc","block_index":310022,"block_time":310022000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(148,310022,'parse','blocks','{"block_index":310022,"ledger_hash":"619367fb7657e0fb4800acd385eb5593d085ce5cbfbfb098dafa98612d9fd445","messages_hash":"0b5b6279634c98137b3ebd37b0e31af63b183c0f8ae6942df3aec9e0b6ef725f","txlist_hash":"e62992a5e4f80347f92c512e1bd47df4c2f4e9fa0c38b7ca73befd39fd181d54"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(149,310023,'insert','blocks','{"block_hash":"d8cf5bec1bbcab8ca4f495352afde3b6572b7e1d61b3976872ebb8e9d30ccb08","block_index":310023,"block_time":310023000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(149,310022,'insert','blocks','{"block_hash":"d8cf5bec1bbcab8ca4f495352afde3b6572b7e1d61b3976872ebb8e9d30ccb08","block_index":310023,"block_time":310023000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(150,310023,'parse','blocks','{"block_index":310023,"ledger_hash":"ba865dbc8263aaf153d7264dfc6a580bebe9391ca0551f15a1c822c6cbe2b8de","messages_hash":"41612e674a216f80e46263c28770962c5cacf632df3151fee409c0f9eef3a498","txlist_hash":"e62acd9368da6141ddf435bd919fe0e124bd77646207d69a2544790107ab88a5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(151,310024,'insert','blocks','{"block_hash":"b03042b4e18a222b4c8d1e9e1970d93e6e2a2d41686d227ff8ecf0a839223dc5","block_index":310024,"block_time":310024000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(151,310023,'insert','blocks','{"block_hash":"b03042b4e18a222b4c8d1e9e1970d93e6e2a2d41686d227ff8ecf0a839223dc5","block_index":310024,"block_time":310024000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(152,310024,'parse','blocks','{"block_index":310024,"ledger_hash":"368e948cbf42de80aca51abe75d09ec78196924453719182ccc86419df5da2db","messages_hash":"5cc0e229526c00f288c81848c45d12cc6a24fc0ba84e8d78041d84b8e28fbf88","txlist_hash":"2c65dfdc0d371025c6d497e087b8548633238d6049242fa411383fcce72b096e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(153,310025,'insert','blocks','{"block_hash":"a872e560766832cc3b4f7f222228cb6db882ce3c54f6459f62c71d5cd6e90666","block_index":310025,"block_time":310025000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(153,310024,'insert','blocks','{"block_hash":"a872e560766832cc3b4f7f222228cb6db882ce3c54f6459f62c71d5cd6e90666","block_index":310025,"block_time":310025000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(154,310025,'parse','blocks','{"block_index":310025,"ledger_hash":"9f7132c808936f580d4fb1dc5791541a5a3d23532d1093c20d434007f8dde54c","messages_hash":"cc0a82636125f077fd262e62ce5e60bd457154376ba685a771a4b92388324420","txlist_hash":"ca60850f73099aabc38d1521a94d611cc02f4539620a17488d1e9a445087104f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(155,310026,'insert','blocks','{"block_hash":"6c96350f6f2f05810f19a689de235eff975338587194a36a70dfd0fcd490941a","block_index":310026,"block_time":310026000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(155,310025,'insert','blocks','{"block_hash":"6c96350f6f2f05810f19a689de235eff975338587194a36a70dfd0fcd490941a","block_index":310026,"block_time":310026000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(156,310026,'parse','blocks','{"block_index":310026,"ledger_hash":"074ea6f10a5290cff31f7b21483f7b2248723c8d1b5bc060c31219f66f37def7","messages_hash":"33266041a43b151330c149d5536ca098c595054d54d88c2a06bfb257f64c4c06","txlist_hash":"21db77ad7cd241752184fa9fd61ab9cf670cd40105d7d9b887d8df62f25e5cfc"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(157,310027,'insert','blocks','{"block_hash":"d7acfac66df393c4482a14c189742c0571b89442eb7f817b34415a560445699e","block_index":310027,"block_time":310027000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(157,310026,'insert','blocks','{"block_hash":"d7acfac66df393c4482a14c189742c0571b89442eb7f817b34415a560445699e","block_index":310027,"block_time":310027000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(158,310027,'parse','blocks','{"block_index":310027,"ledger_hash":"a3ade2b2e5bc701996f511f3e85d596b60f882a3254fd975769c0f38b3b14cb3","messages_hash":"df932138bd7a19f61e98148cbc5ef645be2d4e05674258fb5f1659bc0be276ca","txlist_hash":"9469f4c4b4f208f2a46569234006846d18ae108ca6a98600ab70bac1ef1ad633"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(159,310028,'insert','blocks','{"block_hash":"02409fcf8fa06dafcb7f11e38593181d9c42cc9d5e2ddc304d098f990bd9530b","block_index":310028,"block_time":310028000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(159,310027,'insert','blocks','{"block_hash":"02409fcf8fa06dafcb7f11e38593181d9c42cc9d5e2ddc304d098f990bd9530b","block_index":310028,"block_time":310028000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(160,310028,'parse','blocks','{"block_index":310028,"ledger_hash":"3bf124a34825b5c487c94dd79b1ea4f25e657294966879f1c10b56b37a3d29b5","messages_hash":"647074e7d5c71b584b7661d02f6f5cac0ea9a0a9fd13ae78d4d2bf4c76793d2d","txlist_hash":"55de4927d0ba81d336f143b08224af9fe9a862bf0ed4d39fbe242e9c5946bcf4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(161,310029,'insert','blocks','{"block_hash":"3c739fa8b40c118d5547ea356ee8d10ee2898871907643ec02e5db9d00f03cc6","block_index":310029,"block_time":310029000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(161,310028,'insert','blocks','{"block_hash":"3c739fa8b40c118d5547ea356ee8d10ee2898871907643ec02e5db9d00f03cc6","block_index":310029,"block_time":310029000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(162,310029,'parse','blocks','{"block_index":310029,"ledger_hash":"e502eb7b282e0bd4940d8f75ef51d677a641f3d55304adcb015bc249c97892bf","messages_hash":"bfe4c7d60e0cca63ba44a61e12c48e2d840faf4a0aa92ba197a9d4fb17f7ddcc","txlist_hash":"3d879f96d783e70a75f71c2b44ae4c5601bc8f1192b828f1b35400b8c99aa0f2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(163,310030,'insert','blocks','{"block_hash":"d5071cddedf89765ee0fd58f209c1c7d669ba8ea66200a57587da8b189b9e4f5","block_index":310030,"block_time":310030000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(163,310029,'insert','blocks','{"block_hash":"d5071cddedf89765ee0fd58f209c1c7d669ba8ea66200a57587da8b189b9e4f5","block_index":310030,"block_time":310030000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(164,310030,'parse','blocks','{"block_index":310030,"ledger_hash":"d64b5eb04ddfb5600be40142b1fd27c308387a35942a6e8a6916407bbc1313b1","messages_hash":"96e13c2a5517d1740fdd2dd5c805a13a37104bc0470eebf6ab1ee5f6edc49343","txlist_hash":"c859356c985f3c051d5b01424759e66e9ec7c2eac055eb9fc2b0ad7323253a6a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(165,310031,'insert','blocks','{"block_hash":"0b02b10f41380fff27c543ea8891ecb845bf7a003ac5c87e15932aff3bfcf689","block_index":310031,"block_time":310031000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(165,310030,'insert','blocks','{"block_hash":"0b02b10f41380fff27c543ea8891ecb845bf7a003ac5c87e15932aff3bfcf689","block_index":310031,"block_time":310031000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(166,310031,'parse','blocks','{"block_index":310031,"ledger_hash":"e9c97dd7adb1b22d4ed0238607faeb2d14c090fbd7d685275ee802ab23b4b740","messages_hash":"92abe74beca9968adb2f2952a4eb710fefe4df33f4cf2ea0319a0d36c93b8bec","txlist_hash":"4cdafec839c7abdda11f10437d890c952b3416929ff6e715f44e8c57412437af"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(167,310032,'insert','blocks','{"block_hash":"66346be81e6ba04544f2ae643b76c2b7b1383f038fc2636e02e49dc7ec144074","block_index":310032,"block_time":310032000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(167,310031,'insert','blocks','{"block_hash":"66346be81e6ba04544f2ae643b76c2b7b1383f038fc2636e02e49dc7ec144074","block_index":310032,"block_time":310032000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(168,310032,'parse','blocks','{"block_index":310032,"ledger_hash":"2544ffced9af1aabd84ab51fb78c56c9beac03dcb286aebd4202938dfa0754ea","messages_hash":"49f3542309f554440ef13516ddc8e88ae079b92a2c7c8eb97765a6ed6ac6cd10","txlist_hash":"2fc6c250a775ac70976d371540df4a7af608ca1b106b7efb7bc5a820ff505bdb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(169,310033,'insert','blocks','{"block_hash":"999c65df9661f73e8c01f1da1afda09ac16788b72834f0ff5ea3d1464afb4707","block_index":310033,"block_time":310033000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(169,310032,'insert','blocks','{"block_hash":"999c65df9661f73e8c01f1da1afda09ac16788b72834f0ff5ea3d1464afb4707","block_index":310033,"block_time":310033000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(170,310033,'parse','blocks','{"block_index":310033,"ledger_hash":"4355d3ebb95187fec36b1847a4c3777d8e1d5541bd1d9ff8461b8ac5b9881261","messages_hash":"ceb14a6637c8a5764c7f33049973a6101daa056d265b46c248c3b8363c919c6c","txlist_hash":"d99b155e06fb50de6e7e6b646c641e3862d3d6df0ab9aec3e360fba0fcb54776"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(171,310034,'insert','blocks','{"block_hash":"f552edd2e0a648230f3668e72ddf0ddfb1e8ac0f4c190f91b89c1a8c2e357208","block_index":310034,"block_time":310034000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(171,310033,'insert','blocks','{"block_hash":"f552edd2e0a648230f3668e72ddf0ddfb1e8ac0f4c190f91b89c1a8c2e357208","block_index":310034,"block_time":310034000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(172,310034,'parse','blocks','{"block_index":310034,"ledger_hash":"c7fcb5134bd8131c035d65b5eeef8a3cd214348822563232a992f3f703c6b0b9","messages_hash":"4ca5dd8e74223684d3d8c28a79b4e872787788fcae088ab3e3066788ffca65af","txlist_hash":"826d7b750bb4ad8fabd67c825c81f840b7a7a264489a9263410a5cb204d3309f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(173,310035,'insert','blocks','{"block_hash":"a13cbb016f3044207a46967a4ba1c87dab411f78c55c1179f2336653c2726ae2","block_index":310035,"block_time":310035000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(173,310034,'insert','blocks','{"block_hash":"a13cbb016f3044207a46967a4ba1c87dab411f78c55c1179f2336653c2726ae2","block_index":310035,"block_time":310035000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(174,310035,'parse','blocks','{"block_index":310035,"ledger_hash":"c41c280498ce05d6073fc6e89be2684dc68c345c1c43c00b9a3f9041954fce26","messages_hash":"b500c7812d872ff80b668ed88d7a8898df99b0a2ef8d4ba16b85597fa3e1cd0e","txlist_hash":"f96598e2169d42d81b91ba03e7403dbd25a61399290f358022a998e4375fe2b9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(175,310036,'insert','blocks','{"block_hash":"158648a98f1e1bd1875584ce8449eb15a4e91a99a923bbb24c4210135cef0c76","block_index":310036,"block_time":310036000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(175,310035,'insert','blocks','{"block_hash":"158648a98f1e1bd1875584ce8449eb15a4e91a99a923bbb24c4210135cef0c76","block_index":310036,"block_time":310036000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(176,310036,'parse','blocks','{"block_index":310036,"ledger_hash":"86c67fd234ca9d2406080018b2677386990fac477db8008c0092d40a398203ed","messages_hash":"1c2819e818ad5ef4ef1d5eb2b9e7630930a559a1cffa880ad0d34fc482b4063d","txlist_hash":"ae7fdf3e9388811e96d470070db9ac45b5b19754bb4ad424aade40fede3c9cf9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(177,310037,'insert','blocks','{"block_hash":"563acfd6d991ce256d5655de2e9429975c8dceeb221e76d5ec6e9e24a2c27c07","block_index":310037,"block_time":310037000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(177,310036,'insert','blocks','{"block_hash":"563acfd6d991ce256d5655de2e9429975c8dceeb221e76d5ec6e9e24a2c27c07","block_index":310037,"block_time":310037000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(178,310037,'parse','blocks','{"block_index":310037,"ledger_hash":"3ae6272437eb0758a779d68785c41e119d1204dd5421c78e03b9d12eba64804b","messages_hash":"b39a9f69fbe9c498602609f3c6bf9bb18e6b97f83519c743afbc14e99d9cb95a","txlist_hash":"aa9600ce32fd7c1d6e963a51648eaae043685d3369413785517172d1f94d551b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(179,310038,'insert','blocks','{"block_hash":"b44b4cad12431c32df27940e18d51f63897c7472b70950d18454edfd640490b2","block_index":310038,"block_time":310038000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(179,310037,'insert','blocks','{"block_hash":"b44b4cad12431c32df27940e18d51f63897c7472b70950d18454edfd640490b2","block_index":310038,"block_time":310038000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(180,310038,'parse','blocks','{"block_index":310038,"ledger_hash":"18f7552567b898f6c2cfe8c829903912445de5dbf05b56a13bf9b402a24fdc11","messages_hash":"49205a5e8db239c4c785868b103864f8727376c7188a58544537cdb035ce153f","txlist_hash":"46ce886f050bf7a80355da9cb15b35f5d38809ef2ec1a25250f057b63f51cdfc"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(181,310039,'insert','blocks','{"block_hash":"5fa1ae9c5e8a599247458987b006ad3a57f686df1f7cc240bf119e911b56c347","block_index":310039,"block_time":310039000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(181,310038,'insert','blocks','{"block_hash":"5fa1ae9c5e8a599247458987b006ad3a57f686df1f7cc240bf119e911b56c347","block_index":310039,"block_time":310039000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(182,310039,'parse','blocks','{"block_index":310039,"ledger_hash":"85f2255f9256a5faf59ddec1c58b1d3bc12c91bc2c62ead61b48e1f94ea2888d","messages_hash":"b4d3737b40df8aecdb8f755b92db906b8f215641fd79326bb4700d1f662b2f36","txlist_hash":"23a26edddf0c8662b055ed992c75c706221b59ce9a7aa45b757a3d5158772e8c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(183,310040,'insert','blocks','{"block_hash":"7200ded406675453eadddfbb2d14c2a4526c7dc2b5de14bd48b29243df5e1aa3","block_index":310040,"block_time":310040000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(183,310039,'insert','blocks','{"block_hash":"7200ded406675453eadddfbb2d14c2a4526c7dc2b5de14bd48b29243df5e1aa3","block_index":310040,"block_time":310040000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(184,310040,'parse','blocks','{"block_index":310040,"ledger_hash":"b799477db184351df5503f8d15d5461a0483ea35142c003b7e640429663ad943","messages_hash":"d5348f656d30e6e4b55706ba5a4a6dfdf262d8ed36d57c5f2fc71f8766d72af6","txlist_hash":"163682e05a9a10f3e3240420c932a7f3f2172484de30dbcac0319ac23a4726f1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(185,310041,'insert','blocks','{"block_hash":"5db592ff9ba5fac1e030cf22d6c13b70d330ba397f415340086ee7357143b359","block_index":310041,"block_time":310041000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(185,310040,'insert','blocks','{"block_hash":"5db592ff9ba5fac1e030cf22d6c13b70d330ba397f415340086ee7357143b359","block_index":310041,"block_time":310041000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(186,310041,'parse','blocks','{"block_index":310041,"ledger_hash":"efa9cd46741b59e74263d6d348584f1a61e8ba32163c09fc3ff2e41a5431a483","messages_hash":"440373118703e7f53afd682abe5514d489a78722a600c1067430e7fec5f5fab0","txlist_hash":"a159868ce28207aa243e7ecc50f188e8e34e5ddb5d801b645b1c16a596e060ed"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(187,310042,'insert','blocks','{"block_hash":"826fd4701ef2824e9559b069517cd3cb990aff6a4690830f78fc845ab77fa3e4","block_index":310042,"block_time":310042000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(187,310041,'insert','blocks','{"block_hash":"826fd4701ef2824e9559b069517cd3cb990aff6a4690830f78fc845ab77fa3e4","block_index":310042,"block_time":310042000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(188,310042,'parse','blocks','{"block_index":310042,"ledger_hash":"f3159919f381d46a3e1341703e55192a02a36519e71fc2675285a3a14c4ee04d","messages_hash":"7611f3db3529dd5fbd5cf9a5ca7affc454536e57455b1b0ea043751c9437a89c","txlist_hash":"52bca7ccb83bfe83d8693ebc4c5b1ce518b2ae472dfc81f2c2940dc2460eeeab"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(189,310043,'insert','blocks','{"block_hash":"2254a12ada208f1dd57bc17547ecaf3c44720323c47bc7d4b1262477cb7f3c51","block_index":310043,"block_time":310043000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(189,310042,'insert','blocks','{"block_hash":"2254a12ada208f1dd57bc17547ecaf3c44720323c47bc7d4b1262477cb7f3c51","block_index":310043,"block_time":310043000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(190,310043,'parse','blocks','{"block_index":310043,"ledger_hash":"961c79ea2b7dcc2d7489c423b568fb978631e71732d6b998bcc0657aa4d19194","messages_hash":"110ad00303e1a01d59989b5ab6e4f166edff24c1a49e06b41cba8d56778e844e","txlist_hash":"1fa2eb6aa4c8b5efd093c6e484dddb85eabfa0de55edc929e04487ce65e73608"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(191,310044,'insert','blocks','{"block_hash":"3346d24118d8af0b3c6bcc42f8b85792e7a2e7036ebf6e4c25f4f6723c78e46b","block_index":310044,"block_time":310044000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(191,310043,'insert','blocks','{"block_hash":"3346d24118d8af0b3c6bcc42f8b85792e7a2e7036ebf6e4c25f4f6723c78e46b","block_index":310044,"block_time":310044000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(192,310044,'parse','blocks','{"block_index":310044,"ledger_hash":"d674c39010fd4554efa487d97a3d9cae278ed9b4aff0ce57db33bd881beeb3e3","messages_hash":"f7708c99c134b071aa3981d012c773e12738ece583c1b2b2908abc6a31556ea9","txlist_hash":"ddc2517e1efddbe56185e00d77333ef9f2f2ad6c59e042d65a8f4d8c2b323e5e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(193,310045,'insert','blocks','{"block_hash":"7bba0ab243839e91ad1a45a762bf074011f8a9883074d68203c6d1b46fffde98","block_index":310045,"block_time":310045000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(193,310044,'insert','blocks','{"block_hash":"7bba0ab243839e91ad1a45a762bf074011f8a9883074d68203c6d1b46fffde98","block_index":310045,"block_time":310045000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(194,310045,'parse','blocks','{"block_index":310045,"ledger_hash":"9ba70a032ae92672174421689c0845784f0cef7374e88b2f5258260191864bf1","messages_hash":"15f23755cf1bc0aff99c1a9ed38462d951ed3ea24168c18786d71207390ca4c1","txlist_hash":"3b1d5cd9cb8e7b753233ac0dac5e697226ae372bff3813852434d96996e78fac"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(195,310046,'insert','blocks','{"block_hash":"47db6788c38f2d6d712764979e41346b55e78cbb4969e0ef5c4336faf18993a6","block_index":310046,"block_time":310046000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(195,310045,'insert','blocks','{"block_hash":"47db6788c38f2d6d712764979e41346b55e78cbb4969e0ef5c4336faf18993a6","block_index":310046,"block_time":310046000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(196,310046,'parse','blocks','{"block_index":310046,"ledger_hash":"114a6ab930fbdf8531431620ed219db3756a634c5b99af6ce1ee66d527d277ff","messages_hash":"5796f08f5f53035af580104f79cebd606ff66c38b88361325289010a7a470268","txlist_hash":"becb4b0241accefb95aee137e58d406e15e87c28ed3f051938b4fc02e249b21c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(197,310047,'insert','blocks','{"block_hash":"a9ccabcc2a098a7d25e4ab8bda7c4e66807eefa42e29890dcd88149a10de7075","block_index":310047,"block_time":310047000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(197,310046,'insert','blocks','{"block_hash":"a9ccabcc2a098a7d25e4ab8bda7c4e66807eefa42e29890dcd88149a10de7075","block_index":310047,"block_time":310047000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(198,310047,'parse','blocks','{"block_index":310047,"ledger_hash":"5356512c94ea2c77623d874a927aae8c3dce287a34dfd27a617abfa57142c7f3","messages_hash":"645ba6137d35e81be31cf45092ab0838b241755dd9d33aec134c20c08cd6b091","txlist_hash":"6e06ce8a113de9e8b1a88516a512671aa2cdef60168a40d91742caa281417634"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(199,310048,'insert','blocks','{"block_hash":"610bf3935a85b05a98556c55493c6de45bed4d7b3b6c8553a984718765796309","block_index":310048,"block_time":310048000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(199,310047,'insert','blocks','{"block_hash":"610bf3935a85b05a98556c55493c6de45bed4d7b3b6c8553a984718765796309","block_index":310048,"block_time":310048000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(200,310048,'parse','blocks','{"block_index":310048,"ledger_hash":"0902ca0868560d05049c983bca3ab91cdd5eafc46ab0a948d702abcbc4010582","messages_hash":"98854c5467b3003c63ec7e208c6c8282f461bb8a9a65e2dd39927a09b44a108a","txlist_hash":"67a2fb81ebb42dc6781746a403d81b4e7603f82f02724074541d42380d7269fe"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(201,310049,'insert','blocks','{"block_hash":"4ad2761923ad49ad2b283b640f1832522a2a5d6964486b21591b71df6b33be3c","block_index":310049,"block_time":310049000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(201,310048,'insert','blocks','{"block_hash":"4ad2761923ad49ad2b283b640f1832522a2a5d6964486b21591b71df6b33be3c","block_index":310049,"block_time":310049000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(202,310049,'parse','blocks','{"block_index":310049,"ledger_hash":"978794628fc95756032cb7fb4e9d5ed286373d84fafbcfceec9af71d18c4c0be","messages_hash":"7524187fdd1244a0d1e4ea4ab1c5cdf5fdd2e1582e30a0d5b7af81ca0805ab76","txlist_hash":"ac68aa21454eb2a2ca973b5451523fc6d2a4df6906b9472891cf8e06087e130c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(203,310050,'insert','blocks','{"block_hash":"8cfeb60a14a4cec6e9be13d699694d49007d82a31065a17890383e262071e348","block_index":310050,"block_time":310050000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(203,310049,'insert','blocks','{"block_hash":"8cfeb60a14a4cec6e9be13d699694d49007d82a31065a17890383e262071e348","block_index":310050,"block_time":310050000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(204,310050,'parse','blocks','{"block_index":310050,"ledger_hash":"ff16abeb1d35e0e422f165e206b0d69e0b9ff48b68fc6656c1af74801908b92d","messages_hash":"0b5471a5d2323a894a74d6332822f0f216a0745089ac58a694b1c61a4094454f","txlist_hash":"720d553ed03860df12ab60af34cfec86b9d7ec80275f6d8815e3f61166e3af88"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(205,310051,'insert','blocks','{"block_hash":"b53c90385dd808306601350920c6af4beb717518493fd23b5c730eea078f33e6","block_index":310051,"block_time":310051000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(205,310050,'insert','blocks','{"block_hash":"b53c90385dd808306601350920c6af4beb717518493fd23b5c730eea078f33e6","block_index":310051,"block_time":310051000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(206,310051,'parse','blocks','{"block_index":310051,"ledger_hash":"556ff900993e70cabefd05ddd5dbe3e8e10bb5c9ada7913b75d84af067004ed5","messages_hash":"ebed9381df6057bd322c0652f404116bcc77e4a0c6acf142d5faec47d4baab45","txlist_hash":"656a21084dc8f46455fd2a42ebbdb0efd5c879ccb16e9b1532a6ab5323debdb4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(207,310052,'insert','blocks','{"block_hash":"0acdacf4e4b6fca756479cb055191b367b1fa433aa558956f5f08fa5b7b394e2","block_index":310052,"block_time":310052000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(207,310051,'insert','blocks','{"block_hash":"0acdacf4e4b6fca756479cb055191b367b1fa433aa558956f5f08fa5b7b394e2","block_index":310052,"block_time":310052000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(208,310052,'parse','blocks','{"block_index":310052,"ledger_hash":"15af3a616a2974aa70b7b58f88132051f335af299473db925b619fda8be1afc7","messages_hash":"95629a91ab0bd8a87878f7f65e9d02d6114e7e6ca7b0a0fcb36aacd89f0eeae9","txlist_hash":"3f90b36b7ebc9a2daea1e498bb44100f12f35c9df04260448bd38b23375b16be"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(209,310053,'insert','blocks','{"block_hash":"68348f01b6dc49b2cb30fe92ac43e527aa90d859093d3bf7cd695c64d2ef744f","block_index":310053,"block_time":310053000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(209,310052,'insert','blocks','{"block_hash":"68348f01b6dc49b2cb30fe92ac43e527aa90d859093d3bf7cd695c64d2ef744f","block_index":310053,"block_time":310053000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(210,310053,'parse','blocks','{"block_index":310053,"ledger_hash":"ed0ed3b480b38929a425c2b61c86582495764624e020cb86b3a95fc7d59c692c","messages_hash":"80cb6a5ce7cc7a796965d8351977fed0a4655f702f72c3fec64ec6dc92d23f13","txlist_hash":"67427731be09b73755cd460d142686c903b819b7b8af48297d460ab91fde3609"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(211,310054,'insert','blocks','{"block_hash":"a8b5f253df293037e49b998675620d5477445c51d5ec66596e023282bb9cd305","block_index":310054,"block_time":310054000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(211,310053,'insert','blocks','{"block_hash":"a8b5f253df293037e49b998675620d5477445c51d5ec66596e023282bb9cd305","block_index":310054,"block_time":310054000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(212,310054,'parse','blocks','{"block_index":310054,"ledger_hash":"f012825d2d549910910ad6b7e4ac2373d095b53869f0793709684f0ff05bb108","messages_hash":"d8dfbd478fa699dc45d2432bbb29ce342b54fb22abf175d13bb6da5c2d3abcf3","txlist_hash":"c5e4ba3e2011e7fbf238285525a544de3cc0fe9360a3451392a4c03acd508690"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(213,310055,'insert','blocks','{"block_hash":"4b069152e2dc82e96ed8a3c3547c162e8c3aceeb2a4ac07972f8321a535b9356","block_index":310055,"block_time":310055000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(213,310054,'insert','blocks','{"block_hash":"4b069152e2dc82e96ed8a3c3547c162e8c3aceeb2a4ac07972f8321a535b9356","block_index":310055,"block_time":310055000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(214,310055,'parse','blocks','{"block_index":310055,"ledger_hash":"90c08144277fe622573282349edaf9e59289b716b5b4e368d88ac25e67e788d1","messages_hash":"8797bf8b7fa1c772c7c44e3301c80e0f723de397db4b8a2f809c096609242cf3","txlist_hash":"5e4a8aee5f04d75d9ffcc85e8344c445b5facfc838f39a77b6b0d5acf6cd8213"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(215,310056,'insert','blocks','{"block_hash":"7603eaed418971b745256742f9d2ba70b2c2b2f69f61de6cc70e61ce0336f9d3","block_index":310056,"block_time":310056000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(215,310055,'insert','blocks','{"block_hash":"7603eaed418971b745256742f9d2ba70b2c2b2f69f61de6cc70e61ce0336f9d3","block_index":310056,"block_time":310056000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(216,310056,'parse','blocks','{"block_index":310056,"ledger_hash":"c888ae590b64fa4514ed7f94ba785b12e881052185cc4702b598cf6e48cbb3ba","messages_hash":"8e16d14f35b8d9caa018a8a40be0d0850c5ae513906d5b4638c692a6b764909a","txlist_hash":"1cb780a12bb6040055fa694822a4f39c340a18a858f0b65a8b227a6fd6fb4f31"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(217,310057,'insert','blocks','{"block_hash":"4a5fdc84f2d66ecb6ee3e3646aad20751ce8694e64e348d3c8aab09d33a3e411","block_index":310057,"block_time":310057000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(217,310056,'insert','blocks','{"block_hash":"4a5fdc84f2d66ecb6ee3e3646aad20751ce8694e64e348d3c8aab09d33a3e411","block_index":310057,"block_time":310057000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(218,310057,'parse','blocks','{"block_index":310057,"ledger_hash":"e68c9a569fda6f1e1e59502953c9735857a0ee158a76397722436466df24708e","messages_hash":"930ff03b64e3b4d399933ba76354b1d9291112c0593dba85d763c8300db1913f","txlist_hash":"2e175f240928edbbd5a5c6c5f3fbacd9516a36c7e99501703e9d1b19999b2029"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(219,310058,'insert','blocks','{"block_hash":"a6eef3089896f0cae0bfe9423392e45c48f4efe4310b14d8cfbdb1fea613635f","block_index":310058,"block_time":310058000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(219,310057,'insert','blocks','{"block_hash":"a6eef3089896f0cae0bfe9423392e45c48f4efe4310b14d8cfbdb1fea613635f","block_index":310058,"block_time":310058000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(220,310058,'parse','blocks','{"block_index":310058,"ledger_hash":"9f6607682f4a6274c2a45895f849816aec83ff0820709ba781634b84518eb05d","messages_hash":"0fbc130a453f3284eb9ec9c847ffbf5ff216ef3bffc06037190267cc2025e835","txlist_hash":"cca92bb672e368c0c1e5b4674a48e150a870f56a67339cbd74926d541ae2a4e4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(221,310059,'insert','blocks','{"block_hash":"ab505de874c43f97c90be1c26a769e6c5cb140405c993b4a6cc7afc795f156a9","block_index":310059,"block_time":310059000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(221,310058,'insert','blocks','{"block_hash":"ab505de874c43f97c90be1c26a769e6c5cb140405c993b4a6cc7afc795f156a9","block_index":310059,"block_time":310059000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(222,310059,'parse','blocks','{"block_index":310059,"ledger_hash":"49b10a5c390f603e7be0d405bf1fcae95fd15682ef2e41a3b2fcf713d271e541","messages_hash":"fef609d5eaabd31efa0317a33730438569163fbab3fc09b9eff59a7b555fc4a5","txlist_hash":"12b8b50b634cb6843258f1c130df1cae60898c902d3e66ad00e1303fde4d8724"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(223,310060,'insert','blocks','{"block_hash":"974ad5fbef621e0a38eab811608dc9afaf10c8ecc85fed913075ba1a145e889b","block_index":310060,"block_time":310060000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(223,310059,'insert','blocks','{"block_hash":"974ad5fbef621e0a38eab811608dc9afaf10c8ecc85fed913075ba1a145e889b","block_index":310060,"block_time":310060000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(224,310060,'parse','blocks','{"block_index":310060,"ledger_hash":"1d6cea34d6f7042ced3a5211da80de88fa77c900af5526f3033b715e4f68df17","messages_hash":"c29369e9d69fcd23979ef58b8cfabc2d6041efe31c810e33bd62b46c8d7866e8","txlist_hash":"40fa40a1a2c02ca514f309fe27268e9e493374bf3edfca8de66e3d46efa32ba6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(225,310061,'insert','blocks','{"block_hash":"35d267d21ad386e7b7632292af1c422b0310dde7ca49a82f9577525a29c138cf","block_index":310061,"block_time":310061000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(225,310060,'insert','blocks','{"block_hash":"35d267d21ad386e7b7632292af1c422b0310dde7ca49a82f9577525a29c138cf","block_index":310061,"block_time":310061000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(226,310061,'parse','blocks','{"block_index":310061,"ledger_hash":"0c43668fdc3d6cc6ec84fee99c68f0eff21650a618db35bc20e428550eae9b0c","messages_hash":"38aef8af21f94ace651d152fbadb529721e3cc64959566388d348d249b226d68","txlist_hash":"4aa0becfc939793d7dccbb0b19881889a20c801e6c627be8ab8a2ffbd8cee8de"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(227,310062,'insert','blocks','{"block_hash":"b31a0054145319ef9de8c1cb19df5bcf4dc8a1ece20053aa494e5d3a00a2852f","block_index":310062,"block_time":310062000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(227,310061,'insert','blocks','{"block_hash":"b31a0054145319ef9de8c1cb19df5bcf4dc8a1ece20053aa494e5d3a00a2852f","block_index":310062,"block_time":310062000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(228,310062,'parse','blocks','{"block_index":310062,"ledger_hash":"cf03a34b29d3a8f8ea5fadb017426f2843c6ab2e785032b6dec70d7aba7bce4a","messages_hash":"e0764773525602d47d332abe4c68dd8c32d8c4585fe47587ecd218a7bc49ebc6","txlist_hash":"3317013c1e6464e0296f5aa7f50208ede42ff9051e4e3ce2da92584cb80a3079"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(229,310063,'insert','blocks','{"block_hash":"0cbcbcd5b7f2dc288e3a34eab3d4212463a5a56e886804fb4f9f1cf929eadebe","block_index":310063,"block_time":310063000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(229,310062,'insert','blocks','{"block_hash":"0cbcbcd5b7f2dc288e3a34eab3d4212463a5a56e886804fb4f9f1cf929eadebe","block_index":310063,"block_time":310063000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(230,310063,'parse','blocks','{"block_index":310063,"ledger_hash":"e145dfc2c7f053a1ba4c8a41d042b40c0748eefcf9e56c5e906ad4b12f3653eb","messages_hash":"c20c09edd2f2235e7287d0439fe2c6c46abfe7ea5a04fa35260840400f54b201","txlist_hash":"b58f95d06b31f7bb5c6f6bd5c5c4460ef4e4ce0e1d154b8557a18cb73f36d432"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(231,310064,'insert','blocks','{"block_hash":"e2db8065a195e85cde9ddb868a17d39893a60fb2b1255aa5f0c88729de7cbf30","block_index":310064,"block_time":310064000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(231,310063,'insert','blocks','{"block_hash":"e2db8065a195e85cde9ddb868a17d39893a60fb2b1255aa5f0c88729de7cbf30","block_index":310064,"block_time":310064000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(232,310064,'parse','blocks','{"block_index":310064,"ledger_hash":"ebc34184623da16251782c82098c7fcfda42f95b155eadfacab2a53e3b34333e","messages_hash":"cbc39bca2b7f961cd5c661f187d4dfa1b5dcb55eba9dec87327cea7eadbbe663","txlist_hash":"e33ac70126559506de70ca420f152dcb639fd0e841d0d7259c0136d518fd4f39"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(233,310065,'insert','blocks','{"block_hash":"8a7bc7a77c831ac4fd11b8a9d22d1b6a0661b07cef05c2e600c7fb683b861d2a","block_index":310065,"block_time":310065000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(233,310064,'insert','blocks','{"block_hash":"8a7bc7a77c831ac4fd11b8a9d22d1b6a0661b07cef05c2e600c7fb683b861d2a","block_index":310065,"block_time":310065000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(234,310065,'parse','blocks','{"block_index":310065,"ledger_hash":"db746a9e0ad8f37c14ef14180dd1bc562ae757a6d4d042a517bb8953f34c6958","messages_hash":"24ca6fdcbb7bdd7358b565ac84d2f14c2314fed7857544359d0c850996e6b151","txlist_hash":"9d52ca0b8859777bcbe84606017ec53961075699eff51b34b80e5a6ed33b137f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(235,310066,'insert','blocks','{"block_hash":"b6959be51eb084747d301f7ccaf9e75f2292c9404633b1532e3692659939430d","block_index":310066,"block_time":310066000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(235,310065,'insert','blocks','{"block_hash":"b6959be51eb084747d301f7ccaf9e75f2292c9404633b1532e3692659939430d","block_index":310066,"block_time":310066000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(236,310066,'parse','blocks','{"block_index":310066,"ledger_hash":"cc71a63314b770e4e010bc7c66d8ab808451b6401e6df8558455a2bfc9bb4882","messages_hash":"9d96fefa3d3e1d197e765fcaf64952ec79b419ced4edf858fed794419153b848","txlist_hash":"5122312265a8305639f6490bc51fb025626dbcd38c5735ce85cd652348f2e86e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(237,310067,'insert','blocks','{"block_hash":"8b08eae98d7193c9c01863fac6effb9162bda010daeacf9e0347112f233b8577","block_index":310067,"block_time":310067000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(237,310066,'insert','blocks','{"block_hash":"8b08eae98d7193c9c01863fac6effb9162bda010daeacf9e0347112f233b8577","block_index":310067,"block_time":310067000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(238,310067,'parse','blocks','{"block_index":310067,"ledger_hash":"a5812c0f3a37b04d5105bca6b0c4819a41beeedf5b0f314f476ab55d6c31235d","messages_hash":"bd447b29f603c6d56257ce8a559c137dfe2fdad10acdacce2bb003e391655225","txlist_hash":"764477c3a233cd407804695f42948d3017951e90b7474cfcc24ef81ee49fdad9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(239,310068,'insert','blocks','{"block_hash":"9280e7297ef6313341bc81787a36acfc9af58f83a415afff5e3154f126cf52b5","block_index":310068,"block_time":310068000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(239,310067,'insert','blocks','{"block_hash":"9280e7297ef6313341bc81787a36acfc9af58f83a415afff5e3154f126cf52b5","block_index":310068,"block_time":310068000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(240,310068,'parse','blocks','{"block_index":310068,"ledger_hash":"14f065751896a2724251b6ca6d0297b344986980075fb72ad058ad0b5bedcd3c","messages_hash":"61dfcc035dbabe08298144762a6ab94589e14668d412ea20a79a0070437fb202","txlist_hash":"866fceb74e8e97d663493f3546519b01f51e1a3cb25bde4b0f3c2e960d2eda85"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(241,310069,'insert','blocks','{"block_hash":"486351f0655bf594ffaab1980cff17353b640b63e9c27239109addece189a6f7","block_index":310069,"block_time":310069000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(241,310068,'insert','blocks','{"block_hash":"486351f0655bf594ffaab1980cff17353b640b63e9c27239109addece189a6f7","block_index":310069,"block_time":310069000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(242,310069,'parse','blocks','{"block_index":310069,"ledger_hash":"a7dd17b4760fb65ac58be1b1653f7cb0e90574c47f70c61ff9f940ad15ad3658","messages_hash":"0eae6329012b77e96a46de6c909ecdfd0887599361884a84a9218aa70665be21","txlist_hash":"9e0565827fcf295ae2149bfcf5e0db29237f447760832083baf94de145bdb531"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(243,310070,'insert','blocks','{"block_hash":"8739e99f4dee8bebf1332f37f49a125348b40b93b74fe35579dd52bfba4fa7e5","block_index":310070,"block_time":310070000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(243,310069,'insert','blocks','{"block_hash":"8739e99f4dee8bebf1332f37f49a125348b40b93b74fe35579dd52bfba4fa7e5","block_index":310070,"block_time":310070000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(244,310070,'parse','blocks','{"block_index":310070,"ledger_hash":"8068a6bcc5d1fc1a78562f0f3165423b45b4674e55f21c4c09948fb65ee632c0","messages_hash":"4419538295a5c394523a396ad0cef24f72972618b2108e4cd084f0bbbf6a7cd6","txlist_hash":"03f84e0f0838204a53ce54e3cfecde00b2e5741ed08aab0c0d9ed99513ab4655"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(245,310071,'insert','blocks','{"block_hash":"7a099aa1bba0ead577f1e44f35263a1f115ed6a868c98d4dd71609072ae7f80b","block_index":310071,"block_time":310071000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(245,310070,'insert','blocks','{"block_hash":"7a099aa1bba0ead577f1e44f35263a1f115ed6a868c98d4dd71609072ae7f80b","block_index":310071,"block_time":310071000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(246,310071,'parse','blocks','{"block_index":310071,"ledger_hash":"af86ffad4b8dd68a0f18142935bbb18623cc5ce2e9e0c02f04c0e7a5dd974e17","messages_hash":"6a299b36e4ccfd1e32f81f91009e367cacc30aedaccbcefbd0273e351b94305f","txlist_hash":"9b3e1c7af0bb119e69813161c19aeac4dd5a594ece5f67f21ffb55b8edaa111f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(247,310072,'insert','blocks','{"block_hash":"7b17ecedc07552551b8129e068ae67cb176ca766ea3f6df74b597a94e3a7fc8a","block_index":310072,"block_time":310072000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(247,310071,'insert','blocks','{"block_hash":"7b17ecedc07552551b8129e068ae67cb176ca766ea3f6df74b597a94e3a7fc8a","block_index":310072,"block_time":310072000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(248,310072,'parse','blocks','{"block_index":310072,"ledger_hash":"36de48518d1446b33f2230c5eee7d18e040db543fe03dca001174f8382c209ee","messages_hash":"180ff6f6092c485217d79b3c5510f9d8e0664d09c882fd164ae3a49cb8a6a356","txlist_hash":"33fccfbad1dd91d9102b82f11b7c97883bc5d5fdfd44584cca6c40fbd04ce2d8"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(249,310073,'insert','blocks','{"block_hash":"ee0fe3cc9b3a48a2746b6090b63b442b97ea6055d48edcf4b2288396764c6943","block_index":310073,"block_time":310073000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(249,310072,'insert','blocks','{"block_hash":"ee0fe3cc9b3a48a2746b6090b63b442b97ea6055d48edcf4b2288396764c6943","block_index":310073,"block_time":310073000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(250,310073,'parse','blocks','{"block_index":310073,"ledger_hash":"4374f567cbc460b73e74d6190db353c3ee86b92c3f99e392beae3caeb264eb5f","messages_hash":"0e4b56334021fa1fb190d62b5c33fd7f37c126d28ef7a61a80d84eb1b7f833e5","txlist_hash":"7544980dbaa8029ae36d883e3079bcc82f2d140072d4dd65cb3384510692ff45"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(251,310074,'insert','blocks','{"block_hash":"ceab38dfde01f711a187601731ad575d67cfe0b7dbc61dcd4f15baaef72089fb","block_index":310074,"block_time":310074000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(251,310073,'insert','blocks','{"block_hash":"ceab38dfde01f711a187601731ad575d67cfe0b7dbc61dcd4f15baaef72089fb","block_index":310074,"block_time":310074000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(252,310074,'parse','blocks','{"block_index":310074,"ledger_hash":"54fd95cdf7f9374d1687590f2860276afe67a265ddd9216e5b63fb06c5bd569e","messages_hash":"ec24c8cf2685cb4750e7e3da65223b72da2e8afff49e12f36b795105d7dd89c9","txlist_hash":"1efba9ea6a8d2e7ee6ee2070b84b497feb66e3387e05c1e4f4989f086e5e02a2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(253,310075,'insert','blocks','{"block_hash":"ef547198c6e36d829f117cfd7077ccde45158e3c545152225fa24dba7a26847b","block_index":310075,"block_time":310075000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(253,310074,'insert','blocks','{"block_hash":"ef547198c6e36d829f117cfd7077ccde45158e3c545152225fa24dba7a26847b","block_index":310075,"block_time":310075000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(254,310075,'parse','blocks','{"block_index":310075,"ledger_hash":"2b42e23b43d30f91fe7705a01f0c8ec86d6230815b587704bcc70b91b5ae87b8","messages_hash":"2178b64331b1afaf3a8d650a93f6173ab0729b9d776b5f4c552970e79db18a0f","txlist_hash":"a370830ef1758c18c88e6d9fcc5803fc15f1dbdad0f2d6a0773f902d86ad7c97"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(255,310076,'insert','blocks','{"block_hash":"3b0499c2e8e8f0252c7288d4ecf66efc426ca37aad3524424d14c8bc6f8b0d92","block_index":310076,"block_time":310076000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(255,310075,'insert','blocks','{"block_hash":"3b0499c2e8e8f0252c7288d4ecf66efc426ca37aad3524424d14c8bc6f8b0d92","block_index":310076,"block_time":310076000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(256,310076,'parse','blocks','{"block_index":310076,"ledger_hash":"577092728a4dc81cd9a06fcf6d2b058f0e4ce8bcb395819a704d6b4144f041dc","messages_hash":"29783a12523c7d590f0c9aa3b71f221de0359f61a368924800b80919084823a2","txlist_hash":"05ce95f07d03f4417a2fd15224418c8ba4ae196e9ec6f3192f5324c028363641"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(257,310077,'insert','blocks','{"block_hash":"d2adeefa9024ab3ff2822bc36acf19b6c647cea118cf15b86c6bc00c3322e7dd","block_index":310077,"block_time":310077000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(257,310076,'insert','blocks','{"block_hash":"d2adeefa9024ab3ff2822bc36acf19b6c647cea118cf15b86c6bc00c3322e7dd","block_index":310077,"block_time":310077000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(258,310077,'parse','blocks','{"block_index":310077,"ledger_hash":"d1ba60181f3061673c64ecd0b92abbc19b1a6e69a927dfefdfd8b8c74171ecd2","messages_hash":"821a8fad56889c6609d97cdd7e6bc8b6ecc68d54318986551c747ac45e22cd54","txlist_hash":"6c9e35feb56fb01c37fce04a1e6dc5f7747a6d26ee2f39ac584f11e8359dce71"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(259,310078,'insert','blocks','{"block_hash":"f6c17115ef0efe489c562bcda4615892b4d4b39db0c9791fe193d4922bd82cd6","block_index":310078,"block_time":310078000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(259,310077,'insert','blocks','{"block_hash":"f6c17115ef0efe489c562bcda4615892b4d4b39db0c9791fe193d4922bd82cd6","block_index":310078,"block_time":310078000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(260,310078,'parse','blocks','{"block_index":310078,"ledger_hash":"c0a9270d15793e68cfd1cf445315d737bed7052914da6def4f014c21f0c9e0c5","messages_hash":"c765bfd546685684c2bfacdbbb248478a115f88dda12b4df64efb0b336362540","txlist_hash":"d59b48425061f0965947dd025cfa0fba8855e997f376572c585db72203b9a80a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(261,310079,'insert','blocks','{"block_hash":"f2fbd2074d804e631db44cb0fb2e1db3fdc367e439c21ffc40d73104c4d7069c","block_index":310079,"block_time":310079000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(261,310078,'insert','blocks','{"block_hash":"f2fbd2074d804e631db44cb0fb2e1db3fdc367e439c21ffc40d73104c4d7069c","block_index":310079,"block_time":310079000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(262,310079,'parse','blocks','{"block_index":310079,"ledger_hash":"74eaddecbf5ab6608c1e95c1c313c13f2af2b649512cc8c7016717d21e93f815","messages_hash":"b38c60aa1982b330713c16d5572143e5970e4b0273ef5461473e237be5133a8b","txlist_hash":"d3f32df02f0e7cd7c2163b47b3ff73d175046599ed626ab343647e1a04525e3c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(263,310080,'insert','blocks','{"block_hash":"42943b914d9c367000a78b78a544cc4b84b1df838aadde33fe730964a89a3a6c","block_index":310080,"block_time":310080000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(263,310079,'insert','blocks','{"block_hash":"42943b914d9c367000a78b78a544cc4b84b1df838aadde33fe730964a89a3a6c","block_index":310080,"block_time":310080000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(264,310080,'parse','blocks','{"block_index":310080,"ledger_hash":"a759e3aac1b015e28b8b524106a74b943b215faac8d5079384ec7351b2239bde","messages_hash":"059af64961a1fef76aafd5d22aedd13466299a9727bd9b21072794674b02c140","txlist_hash":"f588a6cf255e710d9ee481d53f8bc0fc0e1567d58ee701f1b77f0848db881f5f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(265,310081,'insert','blocks','{"block_hash":"6554f9d307976249e7b7e260e08046b3b55d318f8b6af627fed5be3063f123c4","block_index":310081,"block_time":310081000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(265,310080,'insert','blocks','{"block_hash":"6554f9d307976249e7b7e260e08046b3b55d318f8b6af627fed5be3063f123c4","block_index":310081,"block_time":310081000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(266,310081,'parse','blocks','{"block_index":310081,"ledger_hash":"71622e25e8497db6fa222e33c60ea582698e72ca5789a52c9252bf51191cadaa","messages_hash":"f6134380063f36dde912c04787580d3c40a8c8393a595178165f0ff57b5ad90b","txlist_hash":"9a2e169d5fa3721f9bb8852c93ca8ed5dfbcccef05cba99ed3f1c61c937f4366"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(267,310082,'insert','blocks','{"block_hash":"4f1ef91b1dcd575f8ac2e66a67715500cbca154bd6f3b8148bb7015a6aa6c644","block_index":310082,"block_time":310082000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(267,310081,'insert','blocks','{"block_hash":"4f1ef91b1dcd575f8ac2e66a67715500cbca154bd6f3b8148bb7015a6aa6c644","block_index":310082,"block_time":310082000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(268,310082,'parse','blocks','{"block_index":310082,"ledger_hash":"47e9d8fbcbafcee2b4c145ce651333ce49812533d13f7f9a0e9a448f51cfbacd","messages_hash":"21d4d5920b914ea36e3c7065dd7f0af4b294454030688c44e1a011835ef8a49b","txlist_hash":"c2cd395566e0a7b16c76cc0ead2c2cc87a684d5a499c76b2370afffe4b408ad1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(269,310083,'insert','blocks','{"block_hash":"9b1f6fd6ff9b0dc4e37603cfb0625f49067c775b99e12492afd85392d3c8d850","block_index":310083,"block_time":310083000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(269,310082,'insert','blocks','{"block_hash":"9b1f6fd6ff9b0dc4e37603cfb0625f49067c775b99e12492afd85392d3c8d850","block_index":310083,"block_time":310083000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(270,310083,'parse','blocks','{"block_index":310083,"ledger_hash":"e61148e7a8125f7225a6b6e1d77786f8b28b0b8a74e60fef3f75fa4de8f7d882","messages_hash":"b3e7328b23a6af5e3df01bb9bea68d2a8445820c50c2adf3b13bf79c3c4f9d54","txlist_hash":"21fb4596655071cca486c2e6988ec980799a9827e2e5f169033a45d21b3c7a75"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(271,310084,'insert','blocks','{"block_hash":"1e0972523e80306441b9f4157f171716199f1428db2e818a7f7817ccdc8859e3","block_index":310084,"block_time":310084000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(271,310083,'insert','blocks','{"block_hash":"1e0972523e80306441b9f4157f171716199f1428db2e818a7f7817ccdc8859e3","block_index":310084,"block_time":310084000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(272,310084,'parse','blocks','{"block_index":310084,"ledger_hash":"20fb450589ddc6c904fbb61cca8588e85e865635c12402ce7ae72995ab884c14","messages_hash":"3101e4813e73498cef2ec786023347dc13fb29aaf1407bbfee16d04f86ff6ac1","txlist_hash":"feb3992f370b8465a732bc4d90691b99db691f44e1697ad2775a6df216d93b13"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(273,310085,'insert','blocks','{"block_hash":"c5b6e9581831e3bc5848cd7630c499bca26d9ece5156d36579bdb72d54817e34","block_index":310085,"block_time":310085000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(273,310084,'insert','blocks','{"block_hash":"c5b6e9581831e3bc5848cd7630c499bca26d9ece5156d36579bdb72d54817e34","block_index":310085,"block_time":310085000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(274,310085,'parse','blocks','{"block_index":310085,"ledger_hash":"9cea37d548308505f80dc438d5183bac6c6ca424ea4dd9c85d883b05d67cdc92","messages_hash":"a10a734ce80faabca0177b12746f0483692fd13256d7d75af28e615b2324e682","txlist_hash":"277205c28e54078d55ce1641fed64ff4b409b686fbe4aa3a018cead2f969c501"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(275,310086,'insert','blocks','{"block_hash":"080c1dc55a4ecf4824cf9840602498cfc35b5f84099f50b71b45cb63834c7a78","block_index":310086,"block_time":310086000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(275,310085,'insert','blocks','{"block_hash":"080c1dc55a4ecf4824cf9840602498cfc35b5f84099f50b71b45cb63834c7a78","block_index":310086,"block_time":310086000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(276,310086,'parse','blocks','{"block_index":310086,"ledger_hash":"e11bab5fba2d038086c65030b90ce1cbc988314d0c9846aa7ddac4fd357bd01a","messages_hash":"54ccdfdb8690395f13bf11d70244d69052acdb3f9948e8238c0d4bede54c899b","txlist_hash":"ef3ac1de31e29795732b362218bd244945bea4183273512ff6974ecd0c0a7aef"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(277,310087,'insert','blocks','{"block_hash":"4ec8cb1c38b22904e8087a034a6406b896eff4dd28e7620601c6bddf82e2738c","block_index":310087,"block_time":310087000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(277,310086,'insert','blocks','{"block_hash":"4ec8cb1c38b22904e8087a034a6406b896eff4dd28e7620601c6bddf82e2738c","block_index":310087,"block_time":310087000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(278,310087,'parse','blocks','{"block_index":310087,"ledger_hash":"777873e7ebd0ec3052be65197ec0db8bd72e46d2053badb0f37be1f6e84ae0b3","messages_hash":"96a8a5d4606f2e77f429e6ae8f54576e51e1159969612a14739e69e4121e0fb1","txlist_hash":"3bec931f7207a5b03e5a7d390787cd737e598d04025a1514c7654ef34fd1aedc"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(279,310088,'insert','blocks','{"block_hash":"e945c815c433cbddd0bf8e66c5c23b51072483492acda98f5c2c201020a8c5b3","block_index":310088,"block_time":310088000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(279,310087,'insert','blocks','{"block_hash":"e945c815c433cbddd0bf8e66c5c23b51072483492acda98f5c2c201020a8c5b3","block_index":310088,"block_time":310088000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(280,310088,'parse','blocks','{"block_index":310088,"ledger_hash":"85a5ea57af33dfddddbcbe1a1c87994efe5a21a645713aa164f19e19bfb23c64","messages_hash":"20fbc6981fcb9ff9aea35590a435ac2c7d1513bb4a038a8f62602632b6bee622","txlist_hash":"4030ee911aec8ebfbbeecede9cfb977088fb591b20cf52d5340e5aa13e41c7f7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(281,310089,'insert','blocks','{"block_hash":"0382437f895ef3e7e38bf025fd4f606fd44d4bbd6aea71dbdc4ed11a7cd46f33","block_index":310089,"block_time":310089000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(281,310088,'insert','blocks','{"block_hash":"0382437f895ef3e7e38bf025fd4f606fd44d4bbd6aea71dbdc4ed11a7cd46f33","block_index":310089,"block_time":310089000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(282,310089,'parse','blocks','{"block_index":310089,"ledger_hash":"bdf3b6e7a14a3aa22d42a7d69f2f96b0993f1eef2952a7d74313c37e1b407523","messages_hash":"3e376fad3e36d13f5c50f8bac968fba251f8192e0661df0dec9266d0de986838","txlist_hash":"255675a022762a349d44af6315173e05c685f351f2b3b770e0ec80e128969a4b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(283,310090,'insert','blocks','{"block_hash":"b756db71dc037b5a4582de354a3347371267d31ebda453e152f0a13bb2fae969","block_index":310090,"block_time":310090000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(283,310089,'insert','blocks','{"block_hash":"b756db71dc037b5a4582de354a3347371267d31ebda453e152f0a13bb2fae969","block_index":310090,"block_time":310090000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(284,310090,'parse','blocks','{"block_index":310090,"ledger_hash":"9b3ee688c5786ecc438ec9c843ba5f898fe1ab1a8bc3903ad7789aaf6b0c0bf0","messages_hash":"c61c461272d69c03c027a144418a877a6122dba7ba9f2376000d53656037ce75","txlist_hash":"7d658801ab6fbe73231469da5204c5e1c73d290b83449187ec5eec71b846616d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(285,310091,'insert','blocks','{"block_hash":"734a9aa485f36399d5efb74f3b9c47f8b5f6fd68c9967f134b14cfe7e2d7583c","block_index":310091,"block_time":310091000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(285,310090,'insert','blocks','{"block_hash":"734a9aa485f36399d5efb74f3b9c47f8b5f6fd68c9967f134b14cfe7e2d7583c","block_index":310091,"block_time":310091000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(286,310091,'parse','blocks','{"block_index":310091,"ledger_hash":"25578ac389a77dbf9589b23c5470f3199016ac66a415540ae03efac29dfe7adc","messages_hash":"48792e4348415165ef24cbfadfe83934dfd900c8f2a0bf47251604ad1f9819b5","txlist_hash":"1cb14bc9f998c85e670e2e291cde3a2debe9b4013840c0c060417f509c7210ea"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(287,310092,'insert','blocks','{"block_hash":"56386beb65f9228740d4ad43a1c575645f6daf59e0dd9f22551c59215b5e8c3d","block_index":310092,"block_time":310092000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(287,310091,'insert','blocks','{"block_hash":"56386beb65f9228740d4ad43a1c575645f6daf59e0dd9f22551c59215b5e8c3d","block_index":310092,"block_time":310092000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(288,310092,'parse','blocks','{"block_index":310092,"ledger_hash":"bb9109ba299c99cb104ebf2ef6e75141c50264d701d27119525ab5d0a54c1a40","messages_hash":"44a37e3c8140c5d6cc507bae93571af20c9cf4b48e8404edfa4e55c8e5e82931","txlist_hash":"889afcda8b6e0848c7d43014beb0e181c78fa69d3aedec508f4bc0eb8a416029"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(289,310093,'insert','blocks','{"block_hash":"a74a2425f2f4be24bb5f715173e6756649e1cbf1b064aeb1ef60e0b94b418ddc","block_index":310093,"block_time":310093000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(289,310092,'insert','blocks','{"block_hash":"a74a2425f2f4be24bb5f715173e6756649e1cbf1b064aeb1ef60e0b94b418ddc","block_index":310093,"block_time":310093000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(290,310093,'parse','blocks','{"block_index":310093,"ledger_hash":"cdb21362b3eb4fc10ba3c6bf3aba41bfc5bd0bf2475f742c1069cb4383be7b95","messages_hash":"b0166f95f4cf48193827d3b5423889419477c07e9a041c41b72df8229e46adee","txlist_hash":"dec762d55ba88cb2c043f627b2a8b26c920cce9d4dc2746065c0bcf2795c2d99"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(291,310094,'insert','blocks','{"block_hash":"2a8f976f20c4e89ff01071915ac96ee35192d54df3a246bf61fd4a0cccfb5b23","block_index":310094,"block_time":310094000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(291,310093,'insert','blocks','{"block_hash":"2a8f976f20c4e89ff01071915ac96ee35192d54df3a246bf61fd4a0cccfb5b23","block_index":310094,"block_time":310094000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(292,310094,'parse','blocks','{"block_index":310094,"ledger_hash":"b82568de09fe4ea06f3dca053dbcbcc61dbe5e44dd300a4301c995ba180f894d","messages_hash":"34ba529a171f062f8e18bd65ef967158d21a63f907c90ff79f00381c1d9836e9","txlist_hash":"625beebc3c34fa3276e022a37c79137c8f09af21454e8171cce7ab7a04453047"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(293,310095,'insert','blocks','{"block_hash":"bed0fa40c9981223fb40b3be8124ca619edc9dd34d0c907369477ea92e5d2cd2","block_index":310095,"block_time":310095000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(293,310094,'insert','blocks','{"block_hash":"bed0fa40c9981223fb40b3be8124ca619edc9dd34d0c907369477ea92e5d2cd2","block_index":310095,"block_time":310095000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(294,310095,'parse','blocks','{"block_index":310095,"ledger_hash":"513c4a041ee80ba72d1d8428605c682e3485fa45341460bc33fae6540dffb571","messages_hash":"108e625c8ae24f372335196ec1678080f2f5d211a7e47de3eb1da4817dfecd5e","txlist_hash":"b7794e7c8dfe3947ab8d256b94af8bc43acb9ca11f696a81cf9ad98062372959"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(295,310096,'insert','blocks','{"block_hash":"306aeec3db435fabffdf88c2f26ee83caa4c2426375a33daa2be041dbd27ea2f","block_index":310096,"block_time":310096000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(295,310095,'insert','blocks','{"block_hash":"306aeec3db435fabffdf88c2f26ee83caa4c2426375a33daa2be041dbd27ea2f","block_index":310096,"block_time":310096000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(296,310096,'parse','blocks','{"block_index":310096,"ledger_hash":"3e8ff43c8d671159355b2d40a995fb8f6d84f6216fa8326fa80ae39aa9d15d03","messages_hash":"d68fba6521389577f6303af99b28050b6cbceb05908bd85de1dacd982537db4c","txlist_hash":"8117c5400c1cfdb97456cf3b79e8572aecf23c29d1c336d5543979d0e81cc158"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(297,310097,'insert','blocks','{"block_hash":"13e8e16e67c7cdcc80d477491e554b43744f90e8e1a9728439a11fab42cefadf","block_index":310097,"block_time":310097000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(297,310096,'insert','blocks','{"block_hash":"13e8e16e67c7cdcc80d477491e554b43744f90e8e1a9728439a11fab42cefadf","block_index":310097,"block_time":310097000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(298,310097,'parse','blocks','{"block_index":310097,"ledger_hash":"19d91de7be12136737d3f8990e7a4a793912c952e71e017d723d750118e849c6","messages_hash":"3f04ffa37371d7689609be3f5e65a6986553bf2e0c9db51e8ac815dbf61b01df","txlist_hash":"1e2f99bf2c03b8c915bd23c94431002d3801a13caf40d9b42f22001c2faf305a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(299,310098,'insert','blocks','{"block_hash":"ca5bca4b5ec4fa6183e05176abe921cff884c4e20910fab55b603cef48dc3bca","block_index":310098,"block_time":310098000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(299,310097,'insert','blocks','{"block_hash":"ca5bca4b5ec4fa6183e05176abe921cff884c4e20910fab55b603cef48dc3bca","block_index":310098,"block_time":310098000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(300,310098,'parse','blocks','{"block_index":310098,"ledger_hash":"be75df2e5aff3faaebfc0ce4ab5134790fa728f84500e6989739dddc058738de","messages_hash":"cc3e49edd68887f1f34db7c81e3125f9f76ba0c45aae70a5a4e4f7f8a85baf4d","txlist_hash":"7f692426eab57621527d12cc4a49aa85841de9856cd46ad6992a658ed5c15fb1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(301,310099,'insert','blocks','{"block_hash":"3c4c2279cd7de0add5ec469648a845875495a7d54ebfb5b012dcc5a197b7992a","block_index":310099,"block_time":310099000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(301,310098,'insert','blocks','{"block_hash":"3c4c2279cd7de0add5ec469648a845875495a7d54ebfb5b012dcc5a197b7992a","block_index":310099,"block_time":310099000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(302,310099,'parse','blocks','{"block_index":310099,"ledger_hash":"9090b8a4a26ea7dff75658317ce2c6ab828b3b42684922e44debfd1bf8330b8d","messages_hash":"274d30a0808c4740b2fad528bf374e4b65e3bdfa17247e7e1c924bda16be9794","txlist_hash":"c3b0869da7bd7abbda54895e6de81cffd2febe007e1f7085da8cc657512278e6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(303,310100,'insert','blocks','{"block_hash":"96925c05b3c7c80c716f5bef68d161c71d044252c766ca0e3f17f255764242cb","block_index":310100,"block_time":310100000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(303,310099,'insert','blocks','{"block_hash":"96925c05b3c7c80c716f5bef68d161c71d044252c766ca0e3f17f255764242cb","block_index":310100,"block_time":310100000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(304,310100,'parse','blocks','{"block_index":310100,"ledger_hash":"d48d30db433bcee44d87153fb3db17d37fbe3534f23eb16ac853b3420d86d80e","messages_hash":"33ba6fe2f691128379ebff991b818614c4665fd09e4c54b61619d2d2ed54c0ce","txlist_hash":"793627f8b7de24827faca4a19ce374f39c90b74e278b83a599cb637877bd6388"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(305,310101,'insert','blocks','{"block_hash":"369472409995ca1a2ebecbad6bf9dab38c378ab1e67e1bdf13d4ce1346731cd6","block_index":310101,"block_time":310101000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(305,310100,'insert','blocks','{"block_hash":"369472409995ca1a2ebecbad6bf9dab38c378ab1e67e1bdf13d4ce1346731cd6","block_index":310101,"block_time":310101000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(306,310101,'insert','transactions','{"block_hash":"369472409995ca1a2ebecbad6bf9dab38c378ab1e67e1bdf13d4ce1346731cd6","block_index":310101,"block_time":310101000,"btc_amount":5430,"data":"00000028000352bb33c8000000000000000a000000000000000a0000000000000000000013b0000003e8","destination":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","fee":7650,"source":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","supported":true,"tx_hash":"db4ea092bea6036e3d1e5f6ec863db9b900252b4f4d6d9faa6165323f433c51e","tx_index":102}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(307,310101,'insert','debits','{"action":"bet","address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","asset":"XCP","block_index":310101,"event":"db4ea092bea6036e3d1e5f6ec863db9b900252b4f4d6d9faa6165323f433c51e","quantity":10,"tx_index":102}',0,'DEBIT'); INSERT INTO messages VALUES(308,310101,'insert','bets','{"bet_type":3,"block_index":310101,"counterwager_quantity":10,"counterwager_remaining":10,"deadline":1388000200,"expiration":1000,"expire_index":311101,"fee_fraction_int":5000000.0,"feed_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","leverage":5040,"source":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","status":"open","target_value":0.0,"tx_hash":"db4ea092bea6036e3d1e5f6ec863db9b900252b4f4d6d9faa6165323f433c51e","tx_index":102,"wager_quantity":10,"wager_remaining":10}',0,'OPEN_BET'); INSERT INTO messages VALUES(309,310101,'parse','transactions','{"supported":true,"tx_hash":"db4ea092bea6036e3d1e5f6ec863db9b900252b4f4d6d9faa6165323f433c51e","tx_index":102}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(310,310101,'parse','blocks','{"block_index":310101,"ledger_hash":"53c6f9247cd255c86a69c05c4463ab94f9a3277496c155398c38dc6f7121fe9b","messages_hash":"f3689c9c1663d8e96f34d9e34442f1db962b00725c617592ebad5a5b1338cae4","txlist_hash":"7388dcdfb1f5a54a0d4a4d3e50d486b24a662cef04f054a582e2d5b0bcf3ca28"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(311,310102,'insert','blocks','{"block_hash":"11e25883fd0479b78ddb1953ef67e3c3d1ffc82bd1f9e918a75c2194f7137f99","block_index":310102,"block_time":310102000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(311,310101,'insert','blocks','{"block_hash":"11e25883fd0479b78ddb1953ef67e3c3d1ffc82bd1f9e918a75c2194f7137f99","block_index":310102,"block_time":310102000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(312,310102,'insert','transactions','{"block_hash":"11e25883fd0479b78ddb1953ef67e3c3d1ffc82bd1f9e918a75c2194f7137f99","block_index":310102,"block_time":310102000,"btc_amount":0,"data":"0000001e52bb33023ff0000000000000004c4b4009556e69742054657374","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"16462eac6c795cea6e5985ee063867d8c61ae24373df02048186d28118d25bae","tx_index":103}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(313,310102,'insert','broadcasts','{"block_index":310102,"fee_fraction_int":5000000,"locked":false,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","text":"Unit Test","timestamp":1388000002,"tx_hash":"16462eac6c795cea6e5985ee063867d8c61ae24373df02048186d28118d25bae","tx_index":103,"value":1.0}',0,'BROADCAST'); INSERT INTO messages VALUES(314,310102,'insert','credits','{"address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","asset":"XCP","block_index":310102,"calling_function":"bet settled","event":"16462eac6c795cea6e5985ee063867d8c61ae24373df02048186d28118d25bae","quantity":9,"tx_index":103}',0,'CREDIT'); @@ -1286,38 +1286,38 @@ INSERT INTO messages VALUES(317,310102,'insert','bet_match_resolutions','{"bear_ INSERT INTO messages VALUES(318,310102,'update','bet_matches','{"id":"2a2169991597036b6dad687ea1feffd55465a204466f40c35cbba811cb3109b1_5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93","status":"settled"}',0,'BET_MATCH_UPDATE'); INSERT INTO messages VALUES(319,310102,'parse','transactions','{"supported":true,"tx_hash":"16462eac6c795cea6e5985ee063867d8c61ae24373df02048186d28118d25bae","tx_index":103}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(320,310102,'parse','blocks','{"block_index":310102,"ledger_hash":"b225c48fb4c40b2e0695991251f6d69217df6e00c01613e0a20f6a3e34f50d5b","messages_hash":"c3f16c9c50b71969ea4e21819eaf214b1e40316e91af4a3f3964a91b35808e6b","txlist_hash":"7d553f87ef9f2beea74631e2e6ec107522b9f4756f041e2ee40fa3946909b3dd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(321,310103,'insert','blocks','{"block_hash":"559a208afea6dd27b8bfeb031f1bd8f57182dcab6cf55c4089a6c49fb4744f17","block_index":310103,"block_time":310103000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(321,310102,'insert','blocks','{"block_hash":"559a208afea6dd27b8bfeb031f1bd8f57182dcab6cf55c4089a6c49fb4744f17","block_index":310103,"block_time":310103000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(322,310103,'insert','transactions','{"block_hash":"559a208afea6dd27b8bfeb031f1bd8f57182dcab6cf55c4089a6c49fb4744f17","block_index":310103,"block_time":310103000,"btc_amount":62000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":-99994375,"source":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","supported":true,"tx_hash":"65d4048700fb8ae03f321be93c6669b8497f506a1f43920f96d994f43358c35b","tx_index":104}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(323,310103,'insert','credits','{"address":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","asset":"XCP","block_index":310103,"calling_function":"burn","event":"65d4048700fb8ae03f321be93c6669b8497f506a1f43920f96d994f43358c35b","quantity":92999138821,"tx_index":104}',0,'CREDIT'); INSERT INTO messages VALUES(324,310103,'insert','burns','{"block_index":310103,"burned":62000000,"earned":92999138821,"source":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","status":"valid","tx_hash":"65d4048700fb8ae03f321be93c6669b8497f506a1f43920f96d994f43358c35b","tx_index":104}',0,'BURN'); INSERT INTO messages VALUES(325,310103,'parse','blocks','{"block_index":310103,"ledger_hash":"fc2a8ce8efc122e5cbd631998e611dc8707cfe0b8d3f6a531fe5bcc21c17feae","messages_hash":"d57ce83db250acc25efe3e0193a3ae93aa5e521eaf0063a745f538e82e0b6c3d","txlist_hash":"ece7991721b8e94950e2a9f41b9285b34be716340a7621b1c1528f8065e9ac28"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(326,310104,'insert','blocks','{"block_hash":"55b82e631b61d22a8524981ff3b5e3ab4ad7b732b7d1a06191064334b8f2dfd2","block_index":310104,"block_time":310104000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(326,310103,'insert','blocks','{"block_hash":"55b82e631b61d22a8524981ff3b5e3ab4ad7b732b7d1a06191064334b8f2dfd2","block_index":310104,"block_time":310104000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(327,310104,'insert','transactions','{"block_hash":"55b82e631b61d22a8524981ff3b5e3ab4ad7b732b7d1a06191064334b8f2dfd2","block_index":310104,"block_time":310104000,"btc_amount":62000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":-99994375,"source":"munimLLHjPhGeSU5rYB2HN79LJa8bRZr5b","supported":true,"tx_hash":"95332a7e3e2b04f2c10e3027327bfc31b686947fb05381e28903e3ff569bd4ff","tx_index":105}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(328,310104,'insert','credits','{"address":"munimLLHjPhGeSU5rYB2HN79LJa8bRZr5b","asset":"XCP","block_index":310104,"calling_function":"burn","event":"95332a7e3e2b04f2c10e3027327bfc31b686947fb05381e28903e3ff569bd4ff","quantity":92999130460,"tx_index":105}',0,'CREDIT'); INSERT INTO messages VALUES(329,310104,'insert','burns','{"block_index":310104,"burned":62000000,"earned":92999130460,"source":"munimLLHjPhGeSU5rYB2HN79LJa8bRZr5b","status":"valid","tx_hash":"95332a7e3e2b04f2c10e3027327bfc31b686947fb05381e28903e3ff569bd4ff","tx_index":105}',0,'BURN'); INSERT INTO messages VALUES(330,310104,'parse','blocks','{"block_index":310104,"ledger_hash":"b1a7115902d371d13889008320e52473cd5b34591bd657e372c0048df020012e","messages_hash":"b04d2d8cf335c953fa24a5e17662783dcc80794e937589a0dded13744a9c69ba","txlist_hash":"66dacde33bddb633552c94d9107669297fe26ccdcf482f9098f1e6c05f3d01e6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(331,310105,'insert','blocks','{"block_hash":"1d72cdf6c4a02a5f973e6eaa53c28e9e13014b4f5bb13f91621a911b27fe936a","block_index":310105,"block_time":310105000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(331,310104,'insert','blocks','{"block_hash":"1d72cdf6c4a02a5f973e6eaa53c28e9e13014b4f5bb13f91621a911b27fe936a","block_index":310105,"block_time":310105000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(332,310105,'insert','transactions','{"block_hash":"1d72cdf6c4a02a5f973e6eaa53c28e9e13014b4f5bb13f91621a911b27fe936a","block_index":310105,"block_time":310105000,"btc_amount":62000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":-99994375,"source":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","supported":true,"tx_hash":"e062d1ebf4cb71bd22d80c949b956f5286080838a7607ccf87945b2b3abfcafa","tx_index":106}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(333,310105,'insert','credits','{"address":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","asset":"XCP","block_index":310105,"calling_function":"burn","event":"e062d1ebf4cb71bd22d80c949b956f5286080838a7607ccf87945b2b3abfcafa","quantity":92999122099,"tx_index":106}',0,'CREDIT'); INSERT INTO messages VALUES(334,310105,'insert','burns','{"block_index":310105,"burned":62000000,"earned":92999122099,"source":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","status":"valid","tx_hash":"e062d1ebf4cb71bd22d80c949b956f5286080838a7607ccf87945b2b3abfcafa","tx_index":106}',0,'BURN'); INSERT INTO messages VALUES(335,310105,'parse','blocks','{"block_index":310105,"ledger_hash":"b5fcda12415e713fc81278b95515fe86ecc6beb5810e4f80eb9645f09870dab0","messages_hash":"2e336a7a4575cfab7289b78ebf57f67f09e3efa3a4bdeb2c9b9397deb3701c77","txlist_hash":"656d27bdbf841c33dd3c11253159dc5d8a6d7885db3174f4f9c6a8382d6a7209"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(336,310106,'insert','blocks','{"block_hash":"9d39cbe8c8a5357fc56e5c2f95bf132382ddad14cbc8abd54e549d58248140ff","block_index":310106,"block_time":310106000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(336,310105,'insert','blocks','{"block_hash":"9d39cbe8c8a5357fc56e5c2f95bf132382ddad14cbc8abd54e549d58248140ff","block_index":310106,"block_time":310106000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(337,310106,'insert','transactions','{"block_hash":"9d39cbe8c8a5357fc56e5c2f95bf132382ddad14cbc8abd54e549d58248140ff","block_index":310106,"block_time":310106000,"btc_amount":10000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":5625,"source":"mrPk7hTeZWjjSCrMTC2ET4SAUThQt7C4uK","supported":true,"tx_hash":"bbf0b9f6992755a3e371fb0c0b72f6828831e81c6f7ada6f95ba1104fb901ac3","tx_index":107}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(338,310106,'insert','credits','{"address":"mrPk7hTeZWjjSCrMTC2ET4SAUThQt7C4uK","asset":"XCP","block_index":310106,"calling_function":"burn","event":"bbf0b9f6992755a3e371fb0c0b72f6828831e81c6f7ada6f95ba1104fb901ac3","quantity":14999857,"tx_index":107}',0,'CREDIT'); INSERT INTO messages VALUES(339,310106,'insert','burns','{"block_index":310106,"burned":10000,"earned":14999857,"source":"mrPk7hTeZWjjSCrMTC2ET4SAUThQt7C4uK","status":"valid","tx_hash":"bbf0b9f6992755a3e371fb0c0b72f6828831e81c6f7ada6f95ba1104fb901ac3","tx_index":107}',0,'BURN'); INSERT INTO messages VALUES(340,310106,'parse','blocks','{"block_index":310106,"ledger_hash":"f3c98c954cf939951d8b24a257bc6b1bc152a6a0bcf6b580ac281c26bbf16499","messages_hash":"79e48332abdd115517204c76fc873417fc8a3da56e255bade91e6f8842c4f192","txlist_hash":"6138a4e92289d72dab6e43906e545dcc3d1475102b7f33195118de74a53fe576"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(341,310107,'insert','blocks','{"block_hash":"51cc04005e49fa49e661946a0e147240b0e5aac174252c96481ab7ddd5487435","block_index":310107,"block_time":310107000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(341,310106,'insert','blocks','{"block_hash":"51cc04005e49fa49e661946a0e147240b0e5aac174252c96481ab7ddd5487435","block_index":310107,"block_time":310107000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(342,310107,'insert','transactions','{"block_hash":"51cc04005e49fa49e661946a0e147240b0e5aac174252c96481ab7ddd5487435","block_index":310107,"block_time":310107000,"btc_amount":0,"data":"0000000c000000000000000100000000000000640000000000000064000000000000006400","destination":"","fee":6150,"source":"munimLLHjPhGeSU5rYB2HN79LJa8bRZr5b","supported":true,"tx_hash":"9834219d2825b4d85ca7ee0d75a5372d9d42ce75eb9144951fca1af5a25915ec","tx_index":108}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(343,310107,'insert','debits','{"action":"open dispenser","address":"munimLLHjPhGeSU5rYB2HN79LJa8bRZr5b","asset":"XCP","block_index":310107,"event":"9834219d2825b4d85ca7ee0d75a5372d9d42ce75eb9144951fca1af5a25915ec","quantity":100,"tx_index":108}',0,'DEBIT'); INSERT INTO messages VALUES(344,310107,'insert','dispensers','{"asset":"XCP","block_index":310107,"dispense_count":0,"escrow_quantity":100,"give_quantity":100,"give_remaining":100,"oracle_address":null,"origin":"munimLLHjPhGeSU5rYB2HN79LJa8bRZr5b","satoshirate":100,"source":"munimLLHjPhGeSU5rYB2HN79LJa8bRZr5b","status":0,"tx_hash":"9834219d2825b4d85ca7ee0d75a5372d9d42ce75eb9144951fca1af5a25915ec","tx_index":108}',0,'OPEN_DISPENSER'); INSERT INTO messages VALUES(345,310107,'parse','transactions','{"supported":true,"tx_hash":"9834219d2825b4d85ca7ee0d75a5372d9d42ce75eb9144951fca1af5a25915ec","tx_index":108}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(346,310107,'parse','blocks','{"block_index":310107,"ledger_hash":"a550df26b8dee075bee82fc59c44ce5cbf65fe9df10c60f3f3009faa2791c783","messages_hash":"110dd70ced22e1a1c91201c1c1ce0afc628885b2f2b3c785624b851983a71dc6","txlist_hash":"b30d22c6d7e8bf574e3b3e11d08bcb73c5853ba348e8688a25670a861d3f4e3a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(347,310108,'insert','blocks','{"block_hash":"8f2d3861aa42f8e75dc14a23d6046bd89feef0d81996b6e1adc2a2828fbc8b34","block_index":310108,"block_time":310108000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(347,310107,'insert','blocks','{"block_hash":"8f2d3861aa42f8e75dc14a23d6046bd89feef0d81996b6e1adc2a2828fbc8b34","block_index":310108,"block_time":310108000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(348,310108,'insert','transactions','{"block_hash":"8f2d3861aa42f8e75dc14a23d6046bd89feef0d81996b6e1adc2a2828fbc8b34","block_index":310108,"block_time":310108000,"btc_amount":31000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":5625,"source":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","supported":true,"tx_hash":"93c6d2499a0536c31c77a3db3fc9fc8456fbd0726c45b8f716af16f938727a73","tx_index":109}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(349,310108,'insert','credits','{"address":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","asset":"XCP","block_index":310108,"calling_function":"burn","event":"93c6d2499a0536c31c77a3db3fc9fc8456fbd0726c45b8f716af16f938727a73","quantity":46499548508,"tx_index":109}',0,'CREDIT'); INSERT INTO messages VALUES(350,310108,'insert','burns','{"block_index":310108,"burned":31000000,"earned":46499548508,"source":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","status":"valid","tx_hash":"93c6d2499a0536c31c77a3db3fc9fc8456fbd0726c45b8f716af16f938727a73","tx_index":109}',0,'BURN'); INSERT INTO messages VALUES(351,310108,'parse','blocks','{"block_index":310108,"ledger_hash":"e1d8c345c74760010223a823895471d3ad6a2db5c6a70b13850d5cd977414518","messages_hash":"fdaa97987f607fff62cd0459e4d261ba764a7ed75ea6ab1afb3ece06277216dd","txlist_hash":"d03bdcdbb4980ea415ab73c8e91a7fca7099c8c176d6bb4c2fdf72b6873175ae"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(352,310109,'insert','blocks','{"block_hash":"d23aaaae55e6a912eaaa8d20fe2a9ad4819fe9dc1ed58977265af58fad89d8f9","block_index":310109,"block_time":310109000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(352,310108,'insert','blocks','{"block_hash":"d23aaaae55e6a912eaaa8d20fe2a9ad4819fe9dc1ed58977265af58fad89d8f9","block_index":310109,"block_time":310109000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(353,310109,'insert','transactions','{"block_hash":"d23aaaae55e6a912eaaa8d20fe2a9ad4819fe9dc1ed58977265af58fad89d8f9","block_index":310109,"block_time":310109000,"btc_amount":0,"data":"0000001400078a8fe2e5e44100000000000003e8000000000000000000001050534820697373756564206173736574","destination":"","fee":6800,"source":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","supported":true,"tx_hash":"e8baf787b9e4636a3cad0ffeb62992ad7abb160dc6506af0546f566dc178de7e","tx_index":110}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(354,310109,'insert','debits','{"action":"issuance fee","address":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","asset":"XCP","block_index":310109,"event":"e8baf787b9e4636a3cad0ffeb62992ad7abb160dc6506af0546f566dc178de7e","quantity":50000000,"tx_index":110}',0,'DEBIT'); INSERT INTO messages VALUES(355,310109,'insert','assets','{"asset_id":"2122675428648001","asset_longname":null,"asset_name":"PAYTOSCRIPT","block_index":310109}',0,'ASSET_CREATION'); @@ -1325,25 +1325,25 @@ INSERT INTO messages VALUES(356,310109,'insert','issuances','{"asset":"PAYTOSCRI INSERT INTO messages VALUES(357,310109,'insert','credits','{"address":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","asset":"PAYTOSCRIPT","block_index":310109,"calling_function":"issuance","event":"e8baf787b9e4636a3cad0ffeb62992ad7abb160dc6506af0546f566dc178de7e","quantity":1000,"tx_index":110}',0,'CREDIT'); INSERT INTO messages VALUES(358,310109,'parse','transactions','{"supported":true,"tx_hash":"e8baf787b9e4636a3cad0ffeb62992ad7abb160dc6506af0546f566dc178de7e","tx_index":110}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(359,310109,'parse','blocks','{"block_index":310109,"ledger_hash":"8fb63d8460a222163d15eab76a61e383ffa251a175c16f209648d6782c304059","messages_hash":"bf0b49028ffbb1d91272975e819dd6ecba7847dafe7def099bb7119e99ee357b","txlist_hash":"cff81539539169771000a550581dbdf4d4d1fdabecfb9032342269ff5f100b61"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(360,310110,'insert','blocks','{"block_hash":"cecc8e4791bd3081995bd9fd67acb6b97415facfd2b68f926a70b22d9a258382","block_index":310110,"block_time":310110000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(360,310109,'insert','blocks','{"block_hash":"cecc8e4791bd3081995bd9fd67acb6b97415facfd2b68f926a70b22d9a258382","block_index":310110,"block_time":310110000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(361,310110,'insert','transactions','{"block_hash":"cecc8e4791bd3081995bd9fd67acb6b97415facfd2b68f926a70b22d9a258382","block_index":310110,"block_time":310110000,"btc_amount":5430,"data":"00000000000000a25be34b660000000005f5e100","destination":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"f6a0f819e899b407cbfa07b4eff3d58902af3899abfbaa47d5f31d5b398e76e7","tx_index":111}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(362,310110,'insert','debits','{"action":"send","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"DIVISIBLE","block_index":310110,"event":"f6a0f819e899b407cbfa07b4eff3d58902af3899abfbaa47d5f31d5b398e76e7","quantity":100000000,"tx_index":111}',0,'DEBIT'); INSERT INTO messages VALUES(363,310110,'insert','credits','{"address":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","asset":"DIVISIBLE","block_index":310110,"calling_function":"send","event":"f6a0f819e899b407cbfa07b4eff3d58902af3899abfbaa47d5f31d5b398e76e7","quantity":100000000,"tx_index":111}',0,'CREDIT'); INSERT INTO messages VALUES(364,310110,'insert','sends','{"asset":"DIVISIBLE","block_index":310110,"destination":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","quantity":100000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"f6a0f819e899b407cbfa07b4eff3d58902af3899abfbaa47d5f31d5b398e76e7","tx_index":111}',0,'SEND'); INSERT INTO messages VALUES(365,310110,'parse','transactions','{"supported":true,"tx_hash":"f6a0f819e899b407cbfa07b4eff3d58902af3899abfbaa47d5f31d5b398e76e7","tx_index":111}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(366,310110,'parse','blocks','{"block_index":310110,"ledger_hash":"250f7b5c6f00bf06c9cd4de8dea0b8166e2decf093910ea32eabd615b910e7e6","messages_hash":"9bb53822ba08d1625a3eacd2e25ddb87d578d63c081b96395b39a13322c581b4","txlist_hash":"d6853c803a38efdd5190401e94244333cb4f46752a2868d4a03e6d7d6c8c2bad"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(367,310111,'insert','blocks','{"block_hash":"fde71b9756d5ba0b6d8b230ee885af01f9c4461a55dbde8678279166a21b20ae","block_index":310111,"block_time":310111000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(367,310110,'insert','blocks','{"block_hash":"fde71b9756d5ba0b6d8b230ee885af01f9c4461a55dbde8678279166a21b20ae","block_index":310111,"block_time":310111000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(368,310111,'insert','transactions','{"block_hash":"fde71b9756d5ba0b6d8b230ee885af01f9c4461a55dbde8678279166a21b20ae","block_index":310111,"block_time":310111000,"btc_amount":0,"data":"0000001e52bb33023ff0000000000000004c4b4009556e69742054657374","destination":"","fee":5975,"source":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","supported":true,"tx_hash":"510f6feb902159622d83f64eae590a4fec88989869a20caf5804c313aa5e0186","tx_index":112}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(369,310111,'insert','broadcasts','{"block_index":310111,"fee_fraction_int":5000000,"locked":false,"source":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","status":"valid","text":"Unit Test","timestamp":1388000002,"tx_hash":"510f6feb902159622d83f64eae590a4fec88989869a20caf5804c313aa5e0186","tx_index":112,"value":1.0}',0,'BROADCAST'); INSERT INTO messages VALUES(370,310111,'parse','transactions','{"supported":true,"tx_hash":"510f6feb902159622d83f64eae590a4fec88989869a20caf5804c313aa5e0186","tx_index":112}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(371,310111,'parse','blocks','{"block_index":310111,"ledger_hash":"0c3c3d099bf08803f67c2a77d0d67779674d1063cc72d8794b8fe62a55049d75","messages_hash":"65d2ccd2975d2480ed63306ab9054ffdbb76fc442ed4c7dad2aac7428d2506e4","txlist_hash":"9cab90baa72446a36a7c176e82eed32ce968f96b0f29067b240a10a71ed95808"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(372,310112,'insert','blocks','{"block_hash":"5b06f69bfdde1083785cf68ebc2211b464839033c30a099d3227b490bf3ab251","block_index":310112,"block_time":310112000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(372,310111,'insert','blocks','{"block_hash":"5b06f69bfdde1083785cf68ebc2211b464839033c30a099d3227b490bf3ab251","block_index":310112,"block_time":310112000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(373,310112,'insert','transactions','{"block_hash":"5b06f69bfdde1083785cf68ebc2211b464839033c30a099d3227b490bf3ab251","block_index":310112,"block_time":310112000,"btc_amount":5430,"data":"00000028000352bb33c8000000000000000a000000000000000a0000000000000000000013b0000003e8","destination":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","fee":7124,"source":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","supported":true,"tx_hash":"d79b590e4ec3e74cbc3eb4d0f956ce7abb0e3af2ccac85ff90ed8acf13f2e048","tx_index":113}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(374,310112,'insert','debits','{"action":"bet","address":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","asset":"XCP","block_index":310112,"event":"d79b590e4ec3e74cbc3eb4d0f956ce7abb0e3af2ccac85ff90ed8acf13f2e048","quantity":10,"tx_index":113}',0,'DEBIT'); INSERT INTO messages VALUES(375,310112,'insert','bets','{"bet_type":3,"block_index":310112,"counterwager_quantity":10,"counterwager_remaining":10,"deadline":1388000200,"expiration":1000,"expire_index":311112,"fee_fraction_int":5000000.0,"feed_address":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","leverage":5040,"source":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","status":"open","target_value":0.0,"tx_hash":"d79b590e4ec3e74cbc3eb4d0f956ce7abb0e3af2ccac85ff90ed8acf13f2e048","tx_index":113,"wager_quantity":10,"wager_remaining":10}',0,'OPEN_BET'); INSERT INTO messages VALUES(376,310112,'parse','transactions','{"supported":true,"tx_hash":"d79b590e4ec3e74cbc3eb4d0f956ce7abb0e3af2ccac85ff90ed8acf13f2e048","tx_index":113}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(377,310112,'parse','blocks','{"block_index":310112,"ledger_hash":"557fdd1240793f8607a2b4c638ce800d5260c2adb294aac95d6c5eab7e98c3a9","messages_hash":"8600ea90c90218d55e9aec3aedcfb652432fc0f8c2bfde19ca62f768d1653101","txlist_hash":"4fc0df4832258d430e645f1950407e19e72ea27d28b8ae1851333e8e8718086b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(378,310113,'insert','blocks','{"block_hash":"63914cf376d3076b697b9234810dfc084ed5a885d5cd188dd5462560da25d5e7","block_index":310113,"block_time":310113000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(378,310112,'insert','blocks','{"block_hash":"63914cf376d3076b697b9234810dfc084ed5a885d5cd188dd5462560da25d5e7","block_index":310113,"block_time":310113000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(379,310113,'insert','transactions','{"block_hash":"63914cf376d3076b697b9234810dfc084ed5a885d5cd188dd5462560da25d5e7","block_index":310113,"block_time":310113000,"btc_amount":0,"data":"00000014000038fedf6d2c6900000000000003e8010000000000000000000c4c6f636b6564206173736574","destination":"","fee":6800,"source":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","supported":true,"tx_hash":"34bce6f409758b3d6fd13282a99b277ef1fdf44a1025d2901075cac0249dbc63","tx_index":114}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(380,310113,'insert','debits','{"action":"issuance fee","address":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","asset":"XCP","block_index":310113,"event":"34bce6f409758b3d6fd13282a99b277ef1fdf44a1025d2901075cac0249dbc63","quantity":50000000,"tx_index":114}',0,'DEBIT'); INSERT INTO messages VALUES(381,310113,'insert','assets','{"asset_id":"62667321322601","asset_longname":null,"asset_name":"LOCKEDPREV","block_index":310113}',0,'ASSET_CREATION'); @@ -1351,804 +1351,804 @@ INSERT INTO messages VALUES(382,310113,'insert','issuances','{"asset":"LOCKEDPRE INSERT INTO messages VALUES(383,310113,'insert','credits','{"address":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","asset":"LOCKEDPREV","block_index":310113,"calling_function":"issuance","event":"34bce6f409758b3d6fd13282a99b277ef1fdf44a1025d2901075cac0249dbc63","quantity":1000,"tx_index":114}',0,'CREDIT'); INSERT INTO messages VALUES(384,310113,'parse','transactions','{"supported":true,"tx_hash":"34bce6f409758b3d6fd13282a99b277ef1fdf44a1025d2901075cac0249dbc63","tx_index":114}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(385,310113,'parse','blocks','{"block_index":310113,"ledger_hash":"4ecad4a5c8e9b54101c4a037d6c86a7eb36d3cf0503e60a1bf13c5a4196c5989","messages_hash":"aaf7654cbbdd946eeec20b756019f62d012569d28e633380b50e501ea11d37d9","txlist_hash":"baf1f86b3145fd8dc33aa2fcb2e882cf69ffadee81e8412ed2092c634934709c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(386,310114,'insert','blocks','{"block_hash":"24fc2dded4f811eff58b32cda85d90fb5773e81b9267e9a03c359bc730d82283","block_index":310114,"block_time":310114000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(386,310113,'insert','blocks','{"block_hash":"24fc2dded4f811eff58b32cda85d90fb5773e81b9267e9a03c359bc730d82283","block_index":310114,"block_time":310114000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(387,310114,'insert','transactions','{"block_hash":"24fc2dded4f811eff58b32cda85d90fb5773e81b9267e9a03c359bc730d82283","block_index":310114,"block_time":310114000,"btc_amount":0,"data":"00000014000038fedf6d2c69000000000000000001000000000000000000044c4f434b","destination":"","fee":6800,"source":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","supported":true,"tx_hash":"025b810fce7735c5869b90846007e5f604f60c1beda4c1695f1c7fbec3d44bc2","tx_index":115}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(388,310114,'insert','debits','{"action":"issuance fee","address":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","asset":"XCP","block_index":310114,"event":"025b810fce7735c5869b90846007e5f604f60c1beda4c1695f1c7fbec3d44bc2","quantity":0,"tx_index":115}',0,'DEBIT'); INSERT INTO messages VALUES(389,310114,'insert','issuances','{"asset":"LOCKEDPREV","asset_longname":null,"block_index":310114,"call_date":0,"call_price":0.0,"callable":false,"description":"Locked asset","divisible":true,"fee_paid":0,"issuer":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","locked":true,"quantity":0,"reset":false,"source":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","status":"valid","transfer":false,"tx_hash":"025b810fce7735c5869b90846007e5f604f60c1beda4c1695f1c7fbec3d44bc2","tx_index":115}',0,'ASSET_ISSUANCE'); INSERT INTO messages VALUES(390,310114,'parse','transactions','{"supported":true,"tx_hash":"025b810fce7735c5869b90846007e5f604f60c1beda4c1695f1c7fbec3d44bc2","tx_index":115}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(391,310114,'parse','blocks','{"block_index":310114,"ledger_hash":"00380ec3118a5e8f9cab403d10870dd5bc339421297fcb6196a3112d70541ecd","messages_hash":"1dce35ef471c90ab925590429d3bc5d7c2987aedf5acc0ea1b3be46e88f0158e","txlist_hash":"22e3851c91f780c0152549b24228d0dab3542c2632b633995c0d8dcfd8e26601"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(392,310115,'insert','blocks','{"block_hash":"a632d67ff5f832fe9c3c675f855f08a4969c6d78c0211e71b2a24fe04be5656a","block_index":310115,"block_time":310115000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(392,310114,'insert','blocks','{"block_hash":"a632d67ff5f832fe9c3c675f855f08a4969c6d78c0211e71b2a24fe04be5656a","block_index":310115,"block_time":310115000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(393,310115,'insert','transactions','{"block_hash":"a632d67ff5f832fe9c3c675f855f08a4969c6d78c0211e71b2a24fe04be5656a","block_index":310115,"block_time":310115000,"btc_amount":0,"data":"00000014000038fedf6d2c69000000000000000001000000000000000000076368616e676564","destination":"","fee":6800,"source":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","supported":true,"tx_hash":"4ab1a24283c1dbfc710be7b215d64e8a4510ee97af019e210049c25773b50beb","tx_index":116}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(394,310115,'insert','debits','{"action":"issuance fee","address":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","asset":"XCP","block_index":310115,"event":"4ab1a24283c1dbfc710be7b215d64e8a4510ee97af019e210049c25773b50beb","quantity":0,"tx_index":116}',0,'DEBIT'); INSERT INTO messages VALUES(395,310115,'insert','issuances','{"asset":"LOCKEDPREV","asset_longname":null,"block_index":310115,"call_date":0,"call_price":0.0,"callable":false,"description":"changed","divisible":true,"fee_paid":0,"issuer":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","locked":false,"quantity":0,"reset":false,"source":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","status":"valid","transfer":false,"tx_hash":"4ab1a24283c1dbfc710be7b215d64e8a4510ee97af019e210049c25773b50beb","tx_index":116}',0,'ASSET_ISSUANCE'); INSERT INTO messages VALUES(396,310115,'parse','transactions','{"supported":true,"tx_hash":"4ab1a24283c1dbfc710be7b215d64e8a4510ee97af019e210049c25773b50beb","tx_index":116}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(397,310115,'parse','blocks','{"block_index":310115,"ledger_hash":"0acd3a07c5df54e883ff9871852c961b00771d3f4afccb3b1941d0b1c7b300cc","messages_hash":"2d466dd469c4531675c2190d0e4d9fb2daad5b33426b3d22058ed9770cdae63f","txlist_hash":"cf921f50b98df4ec37f2a9803315a798198507adcbfd8fd54e6a9bc539cc8f41"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(398,310116,'insert','blocks','{"block_hash":"8495ba36b331473c4f3529681a118a4cc4fa4d51cd9b8dccb1f13e5ef841dd84","block_index":310116,"block_time":310116000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(398,310115,'insert','blocks','{"block_hash":"8495ba36b331473c4f3529681a118a4cc4fa4d51cd9b8dccb1f13e5ef841dd84","block_index":310116,"block_time":310116000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(399,310116,'insert','transactions','{"block_hash":"8495ba36b331473c4f3529681a118a4cc4fa4d51cd9b8dccb1f13e5ef841dd84","block_index":310116,"block_time":310116000,"btc_amount":62000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":5625,"source":"tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx","supported":true,"tx_hash":"27929c4fcad307a76ea7da34dd2691084f678a22ee43ce7f3842b78730ee08f9","tx_index":117}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(400,310116,'insert','credits','{"address":"tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx","asset":"XCP","block_index":310116,"calling_function":"burn","event":"27929c4fcad307a76ea7da34dd2691084f678a22ee43ce7f3842b78730ee08f9","quantity":92999030129,"tx_index":117}',0,'CREDIT'); INSERT INTO messages VALUES(401,310116,'insert','burns','{"block_index":310116,"burned":62000000,"earned":92999030129,"source":"tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx","status":"valid","tx_hash":"27929c4fcad307a76ea7da34dd2691084f678a22ee43ce7f3842b78730ee08f9","tx_index":117}',0,'BURN'); INSERT INTO messages VALUES(402,310116,'parse','blocks','{"block_index":310116,"ledger_hash":"6c6845d3be70cbe9a71c33227983f695c96877aac6d3a8d6a6839760b4691d25","messages_hash":"c94709a97d76eda00339d8b9313c132c7124fedcbb4f13f7fc65521eec5fd63e","txlist_hash":"a7e01a910cc919588be3b0c19c4bb7c36499b0a9b0347834d40fbb54fdf05fb6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(403,310117,'insert','blocks','{"block_hash":"978a3eac44917b82d009332797e2b6fe64c7ce313c0f15bfd9b7bb68e4f35a71","block_index":310117,"block_time":310117000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(403,310116,'insert','blocks','{"block_hash":"978a3eac44917b82d009332797e2b6fe64c7ce313c0f15bfd9b7bb68e4f35a71","block_index":310117,"block_time":310117000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(404,310117,'parse','blocks','{"block_index":310117,"ledger_hash":"0465a90ff545d58e69c07c204160360bcc6fba5cc60fb81d7e6e389d9ff8133e","messages_hash":"d882f745bd8f7edc17b13d0807c8d3cfccfbd9dd6678913bd354e2fe5334507f","txlist_hash":"1100b7084683079d36f9ec6e4cb1ec457ae4c45941cdbaa0f4d53bc458e2fa9f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(405,310118,'insert','blocks','{"block_hash":"02487d8bd4dadabd06a44fdeb67616e6830c3556ec10faad40a42416039f4723","block_index":310118,"block_time":310118000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(405,310117,'insert','blocks','{"block_hash":"02487d8bd4dadabd06a44fdeb67616e6830c3556ec10faad40a42416039f4723","block_index":310118,"block_time":310118000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(406,310118,'parse','blocks','{"block_index":310118,"ledger_hash":"011ed3df8ae72a02b686e98aa8db07c973e1e12c2ac09891ba90d783ae63161f","messages_hash":"aefb56011c816cb6b5e7a388a109f991957fd957de7ecf9c4f0ea8f7758098db","txlist_hash":"7ed056a59c2b15a2d082f75c8728ee1e7f9b0eea6cb56b37f41319b115e39771"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(407,310119,'insert','blocks','{"block_hash":"6d6be3478c874c27f5d354c9375884089511b1aaaa3cc3421759d8e3aaeb5481","block_index":310119,"block_time":310119000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(407,310118,'insert','blocks','{"block_hash":"6d6be3478c874c27f5d354c9375884089511b1aaaa3cc3421759d8e3aaeb5481","block_index":310119,"block_time":310119000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(408,310119,'parse','blocks','{"block_index":310119,"ledger_hash":"a6620b1b6a5b1f54fe6a8076fc35f0f3ce15315e9f549f5ff3fa0f5b6094919f","messages_hash":"0bb1e98956bc350cf8101125e6147253e60978ddeef6b931e13c772056153ce6","txlist_hash":"1312871691c685ced39676d4d4bd8825d2109587d1ec36f2dadc50f68b4d9cca"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(409,310120,'insert','blocks','{"block_hash":"2bba7fd459ea76fe54d6d7faf437c31af8253438d5685e803c71484c53887deb","block_index":310120,"block_time":310120000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(409,310119,'insert','blocks','{"block_hash":"2bba7fd459ea76fe54d6d7faf437c31af8253438d5685e803c71484c53887deb","block_index":310120,"block_time":310120000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(410,310120,'parse','blocks','{"block_index":310120,"ledger_hash":"e38e2aa0bf8831b90e69b40c78d4b7d41bc564527451b5f9b332bb0beb54c923","messages_hash":"7b105baade40f901ef31f2f73cd8503ee209f79db870e9bd51502f7260c074f8","txlist_hash":"1901f4d80a526969a544b68b1a695f07aa078ad719b8803c0b7543fcb4a974d6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(411,310121,'insert','blocks','{"block_hash":"9b3ea991d6c2fe58906bdc75ba6a2095dcb7f00cfdd6108ac75c938f93c94ee7","block_index":310121,"block_time":310121000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(411,310120,'insert','blocks','{"block_hash":"9b3ea991d6c2fe58906bdc75ba6a2095dcb7f00cfdd6108ac75c938f93c94ee7","block_index":310121,"block_time":310121000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(412,310121,'parse','blocks','{"block_index":310121,"ledger_hash":"5b988c8ad133bb5ff5ac1ee4ad0a6a4fd431247db373e43c9be2a020520f438b","messages_hash":"124d2805fa3144fd091b2ef1c80ce44f9895f9ec4a44e8c7b48237f1282b1e35","txlist_hash":"9921b651b8ca004602b16f95d76b2ea76f03456d9a978abb02bb340f360df7a7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(413,310122,'insert','blocks','{"block_hash":"d31b927c46e8f9ba2ccfb02f11a72179e08474bdd1b60dd3dcfd2e91a9ea2932","block_index":310122,"block_time":310122000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(413,310121,'insert','blocks','{"block_hash":"d31b927c46e8f9ba2ccfb02f11a72179e08474bdd1b60dd3dcfd2e91a9ea2932","block_index":310122,"block_time":310122000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(414,310122,'parse','blocks','{"block_index":310122,"ledger_hash":"70ddab8f1d6283ce5a054650dbcd02d7ad4ca9c35de7bed920c2f266bc092070","messages_hash":"eeac27ff4665134ac9db123eed51a6ebeb9f66b830282684cf14b80fa9ad4018","txlist_hash":"a45cd1eea6626efa3af3dcd3c89782c50cc3b683c1b22249dc67d288e56aeb17"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(415,310123,'insert','blocks','{"block_hash":"be6d35019a923fcef1125a27387d27237755c136f4926c5eddbf150402ea2bbd","block_index":310123,"block_time":310123000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(415,310122,'insert','blocks','{"block_hash":"be6d35019a923fcef1125a27387d27237755c136f4926c5eddbf150402ea2bbd","block_index":310123,"block_time":310123000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(416,310123,'parse','blocks','{"block_index":310123,"ledger_hash":"3670feebcf979edce175ad5b296a4c88fd7fc6bdc251dda84d487b1b092e41dd","messages_hash":"0d89c488b635238845ad30bdc78ec4191561296f57240b2728a3396900f69949","txlist_hash":"78c648296fcc7856757b990a92cf9512c61d180b08d451b63ed4e796d051d338"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(417,310124,'insert','blocks','{"block_hash":"0984b4a908f1a7dac9dcd94da1ee451e367cc6f3216ee8cdee15eae5d0700810","block_index":310124,"block_time":310124000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(417,310123,'insert','blocks','{"block_hash":"0984b4a908f1a7dac9dcd94da1ee451e367cc6f3216ee8cdee15eae5d0700810","block_index":310124,"block_time":310124000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(418,310124,'parse','blocks','{"block_index":310124,"ledger_hash":"9883fff318e7cf9021fb4cc39261840f682e8adabb934549dbae2a10d2a71de3","messages_hash":"6df82c4ffb3e630f9abd9b4f4577221f22a669a0bd985620fec81c585f654797","txlist_hash":"c58aaf910fe01fd9ba6a892ea421c0933f4cebec80c6d2d556accc81102428d3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(419,310125,'insert','blocks','{"block_hash":"cc28d39365904b2f91276d09fae040adb1bbbfd4d37d8c329fced276dc52c6a6","block_index":310125,"block_time":310125000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(419,310124,'insert','blocks','{"block_hash":"cc28d39365904b2f91276d09fae040adb1bbbfd4d37d8c329fced276dc52c6a6","block_index":310125,"block_time":310125000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(420,310125,'parse','blocks','{"block_index":310125,"ledger_hash":"1840685242f9090297d4b432e305e4a093f90faa0b673953b648fbed948f31b6","messages_hash":"8cb8ff5c4c38c9c0fba5186c78e3c57041831ddc55b169a74995edce686de946","txlist_hash":"3d1e4c3a02456d7f79402a89f6a39dcb235fde15b275a762197b70e643d29e25"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(421,310126,'insert','blocks','{"block_hash":"c9d6c2bd3eeb87f3f1033a13de8255a56445341c920a6a0ee2fb030877106797","block_index":310126,"block_time":310126000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(421,310125,'insert','blocks','{"block_hash":"c9d6c2bd3eeb87f3f1033a13de8255a56445341c920a6a0ee2fb030877106797","block_index":310126,"block_time":310126000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(422,310126,'parse','blocks','{"block_index":310126,"ledger_hash":"1a83f417c18439cd3c6269626c44b480317290f0c27a9b9f883a01653de69272","messages_hash":"9fd0630d7ebf232470cd1a8c7e051bbcdb752b88598aa90bec029fb7f118a128","txlist_hash":"7cde633cf5f7bc1176a3faa6ad03a449d3fb0d21dcce5885d2a37b81448a2ca5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(423,310127,'insert','blocks','{"block_hash":"c952f369e2b3317725b4b73ba1922b84af881bd59054be94406a5d9bbb106904","block_index":310127,"block_time":310127000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(423,310126,'insert','blocks','{"block_hash":"c952f369e2b3317725b4b73ba1922b84af881bd59054be94406a5d9bbb106904","block_index":310127,"block_time":310127000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(424,310127,'parse','blocks','{"block_index":310127,"ledger_hash":"094c53dfd00b5004d074987dba90a6c9c47841d01041d0aeb61923c48315d1bb","messages_hash":"fc7ec51fc69f7284dbd6df219ff906253036d1696f5518d346fe5a1997bbd05c","txlist_hash":"0ac0ddcc5c45d4d709d9070814832bfa2339eaf5edbed98232cda4b1731e5478"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(425,310128,'insert','blocks','{"block_hash":"990b0d3575caf5909286b9701ece586338067fbd35357fec7d6a54c6a6120079","block_index":310128,"block_time":310128000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(425,310127,'insert','blocks','{"block_hash":"990b0d3575caf5909286b9701ece586338067fbd35357fec7d6a54c6a6120079","block_index":310128,"block_time":310128000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(426,310128,'parse','blocks','{"block_index":310128,"ledger_hash":"28ad1365daaadc866e79b6b1a555fa31bd804a85827d958cebb9d29511f78e19","messages_hash":"c726eba0cec90d465a44ede024b1f8dc58063711870de6e82d1424ffa23f4081","txlist_hash":"aa9a25819899fc8948c4906673cfc8128c0a98417db8fe659098d28ca12e3786"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(427,310129,'insert','blocks','{"block_hash":"fa8a7d674a9a3e4b40053cf3b819385a71831eec2f119a0f0640c6870ca1dddc","block_index":310129,"block_time":310129000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(427,310128,'insert','blocks','{"block_hash":"fa8a7d674a9a3e4b40053cf3b819385a71831eec2f119a0f0640c6870ca1dddc","block_index":310129,"block_time":310129000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(428,310129,'parse','blocks','{"block_index":310129,"ledger_hash":"61587f9b5d05f8f553f0a4f580f38a140edcf7d9facb13c542865f5ec586a32c","messages_hash":"f0bfe24dec959d07b2b68a79c3c85caf68911d384ef64b4244b61fb86aa21eb3","txlist_hash":"ca3752868d963f0c165166928139cb078aefd0ebcbd9ab8f182c631ff941a56b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(429,310130,'insert','blocks','{"block_hash":"d3046e8e8ab77a67bf0629a3bab0bea4975631d52099d2ddc9c9fa0860522721","block_index":310130,"block_time":310130000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(429,310129,'insert','blocks','{"block_hash":"d3046e8e8ab77a67bf0629a3bab0bea4975631d52099d2ddc9c9fa0860522721","block_index":310130,"block_time":310130000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(430,310130,'parse','blocks','{"block_index":310130,"ledger_hash":"1ee8c39657890ac946e2aac5409147cdbf1b0004db1f00d997cf45452596f781","messages_hash":"c9d741a97b59ad670227903d4a4b5f63048712721e6ee4a59e6593e3a06a4514","txlist_hash":"bb38c9be1ef6ce22f1f14319cb3e1385d70fc63f7d0b2d80789c9af018baaa71"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(431,310131,'insert','blocks','{"block_hash":"d6b4357496bc2c42b58a7d1260a3615bfdb86e2ce68cd20914ef3dd3c0cdd34d","block_index":310131,"block_time":310131000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(431,310130,'insert','blocks','{"block_hash":"d6b4357496bc2c42b58a7d1260a3615bfdb86e2ce68cd20914ef3dd3c0cdd34d","block_index":310131,"block_time":310131000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(432,310131,'parse','blocks','{"block_index":310131,"ledger_hash":"aee45272e68725a2746582f1847582eb9808289d3deca144f8c6cb43bc4f42e6","messages_hash":"eb64baddde8b82bc629227449b9f5ac4cc4adab4b387ad9a2812591de19d6703","txlist_hash":"69fba2b86abed1e740d45d33ec1bed7d2bf7de0f3bd9633959bfe77a21dd7aeb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(433,310132,'insert','blocks','{"block_hash":"1b95a691bf4abf92f0dde901e1152cc5bd87a792d4b42613655e4046a57ab818","block_index":310132,"block_time":310132000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(433,310131,'insert','blocks','{"block_hash":"1b95a691bf4abf92f0dde901e1152cc5bd87a792d4b42613655e4046a57ab818","block_index":310132,"block_time":310132000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(434,310132,'parse','blocks','{"block_index":310132,"ledger_hash":"a3fe51c1d168ed726a78b72db61175f2abb07ea6c614b2886f3054cdd1a858fe","messages_hash":"ff03eb6a337397b372d03eed981a03eb5f3f9565f66bb943bc1e9fb931a3a298","txlist_hash":"352b00e4db389d411377c2302ecf272f97268e953c30d0976a5d12bffc5a17f7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(435,310133,'insert','blocks','{"block_hash":"1029c14051faabf90641371a82f9e2352eaa3d6b1da66737fcf447568ca4ec51","block_index":310133,"block_time":310133000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(435,310132,'insert','blocks','{"block_hash":"1029c14051faabf90641371a82f9e2352eaa3d6b1da66737fcf447568ca4ec51","block_index":310133,"block_time":310133000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(436,310133,'parse','blocks','{"block_index":310133,"ledger_hash":"626743e51b462163f23f22079d672379def21382fd88f9155ddd453ca3d633ef","messages_hash":"5fe7e9c01410af91855efed43e8f9a44d9eb0ef53d2fe80c1d88581285c86df0","txlist_hash":"1a7a1af397c6619b629eba7fdef0f0ea2d737e673d182fe985421dee61d0c63a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(437,310134,'insert','blocks','{"block_hash":"1748478069b32162affa59105257d81ef9d78aee27c626e7b24d11beb2831398","block_index":310134,"block_time":310134000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(437,310133,'insert','blocks','{"block_hash":"1748478069b32162affa59105257d81ef9d78aee27c626e7b24d11beb2831398","block_index":310134,"block_time":310134000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(438,310134,'parse','blocks','{"block_index":310134,"ledger_hash":"4b6e3202cae46fa80222e3ddec001213062ab76b8848eaaf4ab73f44bd84ac55","messages_hash":"33874759d6fdcf012b2fc2b57d21fa0226cb3e18d14194500f282f3b11280f76","txlist_hash":"855a47de54b979a3d958a921c2679825084193b9f1eb0fa56393e0186fb1b440"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(439,310135,'insert','blocks','{"block_hash":"d128d3469b1a5f8fb43e64b40f8a394945d1eb2f19ccbac2603f7044a4097e4f","block_index":310135,"block_time":310135000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(439,310134,'insert','blocks','{"block_hash":"d128d3469b1a5f8fb43e64b40f8a394945d1eb2f19ccbac2603f7044a4097e4f","block_index":310135,"block_time":310135000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(440,310135,'parse','blocks','{"block_index":310135,"ledger_hash":"e32784cedeadac39bb292da2c5eaffc983f416e0bf387978691e4c0fa5b1715a","messages_hash":"359ed3a20d949167d5d711db7a275c8e9a410f5edcc76a0bc1e277d1eb563216","txlist_hash":"80e68a8a303975543781e760be8d8b151206fb0335d3e0f5c2821d3e482b0ef0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(441,310136,'insert','blocks','{"block_hash":"6ec490aaffe2c222a9d6876a18d1c3d385c742ff4c12d1334613a54042a543a5","block_index":310136,"block_time":310136000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(441,310135,'insert','blocks','{"block_hash":"6ec490aaffe2c222a9d6876a18d1c3d385c742ff4c12d1334613a54042a543a5","block_index":310136,"block_time":310136000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(442,310136,'parse','blocks','{"block_index":310136,"ledger_hash":"93c67fdabd991708d1e35dabbdf7acb4e928763eeb817b32a79cd0bdb414fd2a","messages_hash":"d8091e8da964d953066d4973a4212788f9ca3b47788454f693a9a9557d8370f0","txlist_hash":"5fd1f9311646bed047ec4ac1d5aa5c74d68d26ddf6bdec14f2f53f4cb9c1f6b1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(443,310137,'insert','blocks','{"block_hash":"7b44f07e233498303a57e5350f366b767809f1a3426d57b1b754dc16aba76900","block_index":310137,"block_time":310137000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(443,310136,'insert','blocks','{"block_hash":"7b44f07e233498303a57e5350f366b767809f1a3426d57b1b754dc16aba76900","block_index":310137,"block_time":310137000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(444,310137,'parse','blocks','{"block_index":310137,"ledger_hash":"8a43d01155ba47b8b1311c41d5a57112198857701c2970d0fd373da04ef4e585","messages_hash":"2cd10f30db70185a0aa3a4e3b085a99f9b68ddedea747d25a09fe43085873fd7","txlist_hash":"d1f1a4a5fb78621aa1be58d32795feef8ac82572c34a694bf6b0b8c3c73ba7d6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(445,310138,'insert','blocks','{"block_hash":"d2d658ccbf9baa89c32659e8b6c25b640af4b9b2f28f9d40baae840206402ab5","block_index":310138,"block_time":310138000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(445,310137,'insert','blocks','{"block_hash":"d2d658ccbf9baa89c32659e8b6c25b640af4b9b2f28f9d40baae840206402ab5","block_index":310138,"block_time":310138000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(446,310138,'parse','blocks','{"block_index":310138,"ledger_hash":"4acf0244f3188f60152acc8ca30dcaeadf12e6669b15377c81b7e6dc3c8892b6","messages_hash":"0eb29408989eb9c5a38a5a2ef7808a99f649cd05a3d641f6e2d652732884d6d7","txlist_hash":"645be1bed53d63c268cd21d99a914aa4268b5a357dafa57f706075a66e42f948"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(447,310139,'insert','blocks','{"block_hash":"b2c6fb61f2ae0b9d75d18fce4c52a53b1d24772b1ad66c51ca51090210527d46","block_index":310139,"block_time":310139000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(447,310138,'insert','blocks','{"block_hash":"b2c6fb61f2ae0b9d75d18fce4c52a53b1d24772b1ad66c51ca51090210527d46","block_index":310139,"block_time":310139000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(448,310139,'parse','blocks','{"block_index":310139,"ledger_hash":"2d77bdd47ed1b3be1c2edf41473bd5eb707d06dab33717b01c4a227f9855d73d","messages_hash":"86088a65b7c10dc88153276f05db07d1fb4f6d4ad707c5a4a9875e739782e2cc","txlist_hash":"c1e0ab9fe21f807be3431a5d28c048b7f5c49ee5cfba7b9a0a837d1fa5c90f4c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(449,310140,'insert','blocks','{"block_hash":"edddddea90e07a466298219fd7f5a88975f1213289f7c434ed47152af6b68ebb","block_index":310140,"block_time":310140000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(449,310139,'insert','blocks','{"block_hash":"edddddea90e07a466298219fd7f5a88975f1213289f7c434ed47152af6b68ebb","block_index":310140,"block_time":310140000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(450,310140,'parse','blocks','{"block_index":310140,"ledger_hash":"277c0c6dd1c505dc6f9a222c737296396569d8e007c4b9a42582f108e90fa624","messages_hash":"5ff093890b48f2b0ad5d1b99f633fccab79c3014a7f47729399d07e595cdfd45","txlist_hash":"ab9a8224e0e3f8f728b56fd3ff40d960d9d336b2743932053b2419423223f2ac"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(451,310141,'insert','blocks','{"block_hash":"b5b71d2a271bd638561c56f4ffbe94d6086debaaa86bfeb02ef0d71339310709","block_index":310141,"block_time":310141000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(451,310140,'insert','blocks','{"block_hash":"b5b71d2a271bd638561c56f4ffbe94d6086debaaa86bfeb02ef0d71339310709","block_index":310141,"block_time":310141000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(452,310141,'parse','blocks','{"block_index":310141,"ledger_hash":"f5d0edff3f22b2e025c884b7c738abe641bca9110a6b9a7b90de179fd6e5d2dc","messages_hash":"89b97705896f32061405c10278c072dc4fa495e92c935ba0c57c5d54cf4473bb","txlist_hash":"d272db9ecd97edb037736fe46ab9585397f38a6d1c1d9455e64b8439811ebe4f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(453,310142,'insert','blocks','{"block_hash":"a98ae174c41ab8fc575d9c8d53d8e02d8e446b8c6c0d98a20ff234eba082b143","block_index":310142,"block_time":310142000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(453,310141,'insert','blocks','{"block_hash":"a98ae174c41ab8fc575d9c8d53d8e02d8e446b8c6c0d98a20ff234eba082b143","block_index":310142,"block_time":310142000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(454,310142,'parse','blocks','{"block_index":310142,"ledger_hash":"a9f00ec826a30e66820ab2920cf9573244a24dacd63d48c080b9e80b1c5e05b7","messages_hash":"3e036c1c3d33d8075922c286510d7fe6bf687cd7b6b2ca54bc183e36856266c0","txlist_hash":"0c2ddacd61856ee0743eca9125326981ab9f5711982f53874a0f8153089a8d97"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(455,310143,'insert','blocks','{"block_hash":"8ba2f7feb302a5f9ec3e8c7fc718b02379df4698f6387d00858005b8f01e062f","block_index":310143,"block_time":310143000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(455,310142,'insert','blocks','{"block_hash":"8ba2f7feb302a5f9ec3e8c7fc718b02379df4698f6387d00858005b8f01e062f","block_index":310143,"block_time":310143000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(456,310143,'parse','blocks','{"block_index":310143,"ledger_hash":"b5765899f770fdb6cf1120535d85826c6b0ae44b16b8d5a619c5cd12c98783ea","messages_hash":"02e0bd55a0bda5403762446e66a13753ebaa5a514c1cd66c7f04ef46ef4df738","txlist_hash":"39ef998b6c6130f79df8dcb5abff84c18a485915f1088b36a10de30da8c6f9c6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(457,310144,'insert','blocks','{"block_hash":"879ffa05ae6b24b236591c1f1537909179ed1245a27c5fdadd2218ab2193cdb9","block_index":310144,"block_time":310144000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(457,310143,'insert','blocks','{"block_hash":"879ffa05ae6b24b236591c1f1537909179ed1245a27c5fdadd2218ab2193cdb9","block_index":310144,"block_time":310144000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(458,310144,'parse','blocks','{"block_index":310144,"ledger_hash":"1a80f48136e5938b33f817a7cc1cb60aaf6d628b7811abd43e38cc807a18072a","messages_hash":"807eaade814d710f7f74b556d926b294fff13c105e326d6955b02a4bc5d6d29c","txlist_hash":"0b547c8db7446cd3f26dd0d8b88d533c1361fa5dfae6127b85e87095b42ab66b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(459,310145,'insert','blocks','{"block_hash":"175449ef0aa4580593ad4a7d0c5a9b117e1549ea772af00caa4ccdc9b1bf7a6e","block_index":310145,"block_time":310145000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(459,310144,'insert','blocks','{"block_hash":"175449ef0aa4580593ad4a7d0c5a9b117e1549ea772af00caa4ccdc9b1bf7a6e","block_index":310145,"block_time":310145000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(460,310145,'parse','blocks','{"block_index":310145,"ledger_hash":"fce2f084c1776fcb36b3ae3e0c952893934e24672ffa0d3dac72bb1278af8264","messages_hash":"170f6971eaafb88ec0895d5d9af3ed34bbb3eee703117b5b0e6cf8d8deafe0f1","txlist_hash":"bcef3d9f5eb82fb2198d268e442edfca029d5aa3ccff5e5306f0a1a8cf43b30c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(461,310146,'insert','blocks','{"block_hash":"e954ab6a110455d745503f7cc8df9d92c1a800fafdd151e7b1912830a9cb7184","block_index":310146,"block_time":310146000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(461,310145,'insert','blocks','{"block_hash":"e954ab6a110455d745503f7cc8df9d92c1a800fafdd151e7b1912830a9cb7184","block_index":310146,"block_time":310146000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(462,310146,'parse','blocks','{"block_index":310146,"ledger_hash":"9a98eb971580a0a69fceafc5fd41f398f1908b626c47df57965d1863e9a24b84","messages_hash":"e103e1f0ee51b5fa86d61f8b8ddd9b7918e0d047727daa43c66ad3d13d7b3c12","txlist_hash":"036b1784841e65e5905b012f2b74c70e1d9c33b769603c01387d13e693343411"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(463,310147,'insert','blocks','{"block_hash":"7650c95eba7bf1cad81575ed12f32a8cc36281a6f41bef13afe1dfc1b03a7e83","block_index":310147,"block_time":310147000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(463,310146,'insert','blocks','{"block_hash":"7650c95eba7bf1cad81575ed12f32a8cc36281a6f41bef13afe1dfc1b03a7e83","block_index":310147,"block_time":310147000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(464,310147,'parse','blocks','{"block_index":310147,"ledger_hash":"336a89d3d137810d3220d2de432f72e3b3ccd2ada2b746da3859c77dbb89d6a3","messages_hash":"c671dd04015cf20b8cc8fce97e40ed1f31df42f7e42a0989eee0a9b49044554c","txlist_hash":"184e1861a82afa97634e0ad72cff532220a37d75f8eb5e1265039188124f6ad6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(465,310148,'insert','blocks','{"block_hash":"77c29785877724be924f965215eb50ffe916e3b6b3a2beaea3e3ae4796545a7e","block_index":310148,"block_time":310148000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(465,310147,'insert','blocks','{"block_hash":"77c29785877724be924f965215eb50ffe916e3b6b3a2beaea3e3ae4796545a7e","block_index":310148,"block_time":310148000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(466,310148,'parse','blocks','{"block_index":310148,"ledger_hash":"f904794337dd67d356981d2623b8c3d1d78ba584cd98a8c1db939951d3102612","messages_hash":"35a58ace6733dd96d89ffe8486a3d595754aae5271e3584aabedd6f8cb1076e2","txlist_hash":"c75b4218153bfdf3baf44f22f99523f7c54d957994ee838c05c08dd52d98c06f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(467,310149,'insert','blocks','{"block_hash":"526b3c4a74c2663fc04ed5234c86974bffddb7235c8736d76860778c30207b3c","block_index":310149,"block_time":310149000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(467,310148,'insert','blocks','{"block_hash":"526b3c4a74c2663fc04ed5234c86974bffddb7235c8736d76860778c30207b3c","block_index":310149,"block_time":310149000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(468,310149,'parse','blocks','{"block_index":310149,"ledger_hash":"c2972fbd048790f54d9ecef4e18aedec8ae7aa28227d1d43bd19cd71b4feff85","messages_hash":"ecb6a27a09df864cd864d610a210593ec26988d4132f30f63c8607b6323e4c22","txlist_hash":"8dac7e6494cc67fc5c186e74b08d9fc8bc92cf71af9b0e1d919c48e9fecf7660"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(469,310150,'insert','blocks','{"block_hash":"cdd141f7463967dbeb78bf69dc1cd8e12489f58c4ea0a5dc9c5c01ec4fcea333","block_index":310150,"block_time":310150000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(469,310149,'insert','blocks','{"block_hash":"cdd141f7463967dbeb78bf69dc1cd8e12489f58c4ea0a5dc9c5c01ec4fcea333","block_index":310150,"block_time":310150000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(470,310150,'parse','blocks','{"block_index":310150,"ledger_hash":"88b999e4ae34386b826b0f3b315953b5eeda8d9ef496af051498bfce6d8737fc","messages_hash":"6c18380805d06f23f130503ad7148ef1a215c0b217199995496a7670aad67c52","txlist_hash":"db25206ba3a052c622c6a5063359308d04fc2a031d6509447d838cf96a0632d1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(471,310151,'insert','blocks','{"block_hash":"a0f31cc6e12ec86e65e999e806ab3bfa18f4f1084e4aeb4fbd699b4fe284b330","block_index":310151,"block_time":310151000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(471,310150,'insert','blocks','{"block_hash":"a0f31cc6e12ec86e65e999e806ab3bfa18f4f1084e4aeb4fbd699b4fe284b330","block_index":310151,"block_time":310151000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(472,310151,'parse','blocks','{"block_index":310151,"ledger_hash":"b7c176a2eff86655f8b0b71cc8bd3bab3a92ba203d4ccd911d63f3d2ce7fdc25","messages_hash":"86d5f32768df40dbbc112f75dde5f7aef0aa1904a689cce3d24be58fc793bfb6","txlist_hash":"c6868100e51f390d57b2da8324915c9751aa3882b6e102055fcfe229d1abfc85"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(473,310152,'insert','blocks','{"block_hash":"89c8cc3a0938c63a35e89d039aa84318a0fc4e13afac6beb849ac37140132c67","block_index":310152,"block_time":310152000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(473,310151,'insert','blocks','{"block_hash":"89c8cc3a0938c63a35e89d039aa84318a0fc4e13afac6beb849ac37140132c67","block_index":310152,"block_time":310152000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(474,310152,'parse','blocks','{"block_index":310152,"ledger_hash":"3f9471c393bc2bf144b17a5febea88c42982ae746fd700a5903c0e6e541e2b09","messages_hash":"206690aa73f071c14545eea0cb0c8838abdfbc8ebd64c0fd097cc2e2a254d481","txlist_hash":"ff691488593add72ffd8fb9c8eab2b2c6f92dc2082615b3829f4b84fc8a81f88"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(475,310153,'insert','blocks','{"block_hash":"d1121dfa68f4a1de4f97c123d2d2a41a102971a44b34927a78cd539ad8dca482","block_index":310153,"block_time":310153000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(475,310152,'insert','blocks','{"block_hash":"d1121dfa68f4a1de4f97c123d2d2a41a102971a44b34927a78cd539ad8dca482","block_index":310153,"block_time":310153000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(476,310153,'parse','blocks','{"block_index":310153,"ledger_hash":"c6bc81e7b7e6758bbbfe10fa0e688b09e679fb74a18134639e172c18c6e017a7","messages_hash":"ed1c7beb196128167ad8b9d03f1b9a1b7b5d70cd7add306919cd658bc32f0d87","txlist_hash":"6c303c21dd9de15f2a265d88e04a2c110f32718da29a06294ebafe9ed91d4441"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(477,310154,'insert','blocks','{"block_hash":"ba982ea2e99d3bc5f574897c85485f89430ae38cf4ab49b7716ed466afa506d6","block_index":310154,"block_time":310154000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(477,310153,'insert','blocks','{"block_hash":"ba982ea2e99d3bc5f574897c85485f89430ae38cf4ab49b7716ed466afa506d6","block_index":310154,"block_time":310154000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(478,310154,'parse','blocks','{"block_index":310154,"ledger_hash":"b3e07f9de85ab67e88042b1bb52302c6eb16b7ff45d5be6a49700f115ed396d4","messages_hash":"977e7ff9f1e5f0c1f756e802013a6e72299de42a6e2bafad94b57bfdee7a6632","txlist_hash":"b21fe34642b2c9ff09e65be86103f1c3390a01eb51b4d8b98456558639ef6e1f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(479,310155,'insert','blocks','{"block_hash":"cefb3b87c7b75a0eb8f062a0cde8e1073774ae035d176e9769fc87071c12d137","block_index":310155,"block_time":310155000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(479,310154,'insert','blocks','{"block_hash":"cefb3b87c7b75a0eb8f062a0cde8e1073774ae035d176e9769fc87071c12d137","block_index":310155,"block_time":310155000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(480,310155,'parse','blocks','{"block_index":310155,"ledger_hash":"27014841a468e23bcb70c718919745eadcded4310031a7be90a4732c96509404","messages_hash":"a171b8e9e9879ede2f4c1fd42173d0b0ae0a07fc4d1e7f2f58ba50855fd986f6","txlist_hash":"0e5f0bfae3a6ced9c6498cbe95b8bcb56c76530830baa61345b8072aa6e28ff3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(481,310156,'insert','blocks','{"block_hash":"6e3811e65cb02434f9fde0445a7a2b03fe796041458737d0afcc52208f988a83","block_index":310156,"block_time":310156000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(481,310155,'insert','blocks','{"block_hash":"6e3811e65cb02434f9fde0445a7a2b03fe796041458737d0afcc52208f988a83","block_index":310156,"block_time":310156000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(482,310156,'parse','blocks','{"block_index":310156,"ledger_hash":"5597aaadb8cc75848219f9fde3f5d76bb5592689c72068db59922732e89eef9d","messages_hash":"e06a1bce3d693147d3df5c1a5ad3b7b421d526213ced3eec59be44220aa6c2c1","txlist_hash":"ff3319c50ddd9bbd558542bdde3d612a475b543d6a34ea76738d929b5e05a380"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(483,310157,'insert','blocks','{"block_hash":"51dd192502fe797c55287b04c403cc63c087020a01c974a565dd4038db82f94a","block_index":310157,"block_time":310157000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(483,310156,'insert','blocks','{"block_hash":"51dd192502fe797c55287b04c403cc63c087020a01c974a565dd4038db82f94a","block_index":310157,"block_time":310157000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(484,310157,'parse','blocks','{"block_index":310157,"ledger_hash":"cc1ae27fef286424e40204f6b575e9e079e1f7a5ccf6cc356729a7c4a7f83eb8","messages_hash":"e9ab5031997634f6ad74021f5adf3d5a62388fd55401a584464d7bd1c7edd44c","txlist_hash":"9b4884eaca300843017c2732aa8d09815eee4701cff996cc8b6ca6d62af4055d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(485,310158,'insert','blocks','{"block_hash":"749395af0c3221b8652d31b4c4410c19b10404d941c7e78d765b865f853559d2","block_index":310158,"block_time":310158000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(485,310157,'insert','blocks','{"block_hash":"749395af0c3221b8652d31b4c4410c19b10404d941c7e78d765b865f853559d2","block_index":310158,"block_time":310158000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(486,310158,'parse','blocks','{"block_index":310158,"ledger_hash":"6d80d98e778b30c124b0255b3e72620f432245d0f841f6bd62a0fcff44843bf0","messages_hash":"be1d3efb0c59cb3610c20487d20907179398843322cf4a26681010bc89d3032a","txlist_hash":"03a33d54ece86ab81f4f6e1cb337b07b6fc105a580a4ff82496885c7671939a4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(487,310159,'insert','blocks','{"block_hash":"fc0e9f7b6ae99080bc41625588cef73b59c8a9f7a21d7f9f1bf96192ba631c12","block_index":310159,"block_time":310159000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(487,310158,'insert','blocks','{"block_hash":"fc0e9f7b6ae99080bc41625588cef73b59c8a9f7a21d7f9f1bf96192ba631c12","block_index":310159,"block_time":310159000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(488,310159,'parse','blocks','{"block_index":310159,"ledger_hash":"d8ab8bb14092afea6cc675d2f50891318e3169bf9dbe2d07e80c4db95f0f2033","messages_hash":"4c81d40dc2e7cbc7e47272cbc8fd00b3b88fc7743ae9127216c8fd3cf0a29440","txlist_hash":"c292a08eda8cb807f0c11947fc08c748353bf545596d8c6c03a4a734d25461a6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(489,310160,'insert','blocks','{"block_hash":"163a82beeba44b4cb83a31764047880455a94a03e859dc050da782ed89c5fa8b","block_index":310160,"block_time":310160000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(489,310159,'insert','blocks','{"block_hash":"163a82beeba44b4cb83a31764047880455a94a03e859dc050da782ed89c5fa8b","block_index":310160,"block_time":310160000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(490,310160,'parse','blocks','{"block_index":310160,"ledger_hash":"2d76a042d062b73b7dd956d5cff0ee397f068c04eae6cf5b9522d3d55e88cee9","messages_hash":"4091dc7273cdb5d4bd19145a422394d0ce18572cbc6665e32274bff761d04c62","txlist_hash":"df1e1e18b65c4322284ab36204d9f4397c0dade89bf25486c8b84f6358e0f18e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(491,310161,'insert','blocks','{"block_hash":"609c983d412a23c693e666abdea3f672e256674bf9ee55df89b5d9777c9264d8","block_index":310161,"block_time":310161000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(491,310160,'insert','blocks','{"block_hash":"609c983d412a23c693e666abdea3f672e256674bf9ee55df89b5d9777c9264d8","block_index":310161,"block_time":310161000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(492,310161,'parse','blocks','{"block_index":310161,"ledger_hash":"beb3496742415027bcc0d59f3385809523c8783cd91a5670f2fb6fec3230e980","messages_hash":"54055d0c951f4ca0806dec96cde66848cbb36f6bc836d96cd98db0ff9e4b38cb","txlist_hash":"e61374e297180716eee972376d16b85266342dfcee4f383ba9061360f7c0a425"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(493,310162,'insert','blocks','{"block_hash":"043e9645e019f0b6a019d54c5fef5eebee8ce2da1273a21283c517da126fc804","block_index":310162,"block_time":310162000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(493,310161,'insert','blocks','{"block_hash":"043e9645e019f0b6a019d54c5fef5eebee8ce2da1273a21283c517da126fc804","block_index":310162,"block_time":310162000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(494,310162,'parse','blocks','{"block_index":310162,"ledger_hash":"066a2b93df863300741145cd6a4f1a9ea616bc787861cb8ab809f59d47a6fa1f","messages_hash":"2acaead0979ed14161b7b6665b5431098d5544d1415a8539f20bc27e880790d3","txlist_hash":"bc115f6ddeebabd3e0ea592604ff679267b755376e509c4760cfa394e86498df"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(495,310163,'insert','blocks','{"block_hash":"959e0a858a81922d2edf84d1fbb49d7c7e897a8f49f70bd5b066744b77836353","block_index":310163,"block_time":310163000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(495,310162,'insert','blocks','{"block_hash":"959e0a858a81922d2edf84d1fbb49d7c7e897a8f49f70bd5b066744b77836353","block_index":310163,"block_time":310163000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(496,310163,'parse','blocks','{"block_index":310163,"ledger_hash":"460c271269ccdd8775925b511705207baed8fc212caa7e74fc08a80be600a38a","messages_hash":"4616d2ff3ac7feec157408f1a40dda3e96b3ecbd1fd7977a5d89c40936b1d188","txlist_hash":"d16b6243e4c0718a2adca941956564325985750a9a0833aaa35635335cb504ea"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(497,310164,'insert','blocks','{"block_hash":"781b7188be61c98d864d75954cf412b2a181364cc1046de45266ccc8cdb730e2","block_index":310164,"block_time":310164000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(497,310163,'insert','blocks','{"block_hash":"781b7188be61c98d864d75954cf412b2a181364cc1046de45266ccc8cdb730e2","block_index":310164,"block_time":310164000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(498,310164,'parse','blocks','{"block_index":310164,"ledger_hash":"19a7948cd1bc4a89a427d48bb01330dadff848e2b32ec8b8abe342872850b268","messages_hash":"a86e2d86f493fa42f842b5ae85a42f41a97740d844cdcba66dbe64a7aa48872c","txlist_hash":"54068fbe0e385c8ae2df5cb2c601397e15c019c732e37ed484573f07106741e3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(499,310165,'insert','blocks','{"block_hash":"a75081e4143fa95d4aa29618fea17fc3fabd85e84059cc45c96a73473fc32599","block_index":310165,"block_time":310165000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(499,310164,'insert','blocks','{"block_hash":"a75081e4143fa95d4aa29618fea17fc3fabd85e84059cc45c96a73473fc32599","block_index":310165,"block_time":310165000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(500,310165,'parse','blocks','{"block_index":310165,"ledger_hash":"97f0a48a26daf011a8c7b22bb772228a0c8a920eccd011e713956100c9fbdf33","messages_hash":"85a9f6ce9e41a035f7077c6f53371fbaf823985fb3e4aa88c8ab3f917b06014e","txlist_hash":"0783c9e3d99f4f95b64b38b92c4e8b7d257f325d10cd83bc86d684378b9ebbd6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(501,310166,'insert','blocks','{"block_hash":"a440d426adaa83fa9bb7e3d4a04b4fa06e896fc2813f5966941f1ad1f28cfb41","block_index":310166,"block_time":310166000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(501,310165,'insert','blocks','{"block_hash":"a440d426adaa83fa9bb7e3d4a04b4fa06e896fc2813f5966941f1ad1f28cfb41","block_index":310166,"block_time":310166000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(502,310166,'parse','blocks','{"block_index":310166,"ledger_hash":"edbd00e1229c673f4f15b3ac7bbe020f54b5f3a61b1d158658471076a55c77b0","messages_hash":"b45d7ccd18ec37708371b786d993d4f6cd880a42087093d0651432d357acee0c","txlist_hash":"683f4ab00ee1ff495bf452c511c1582100191ef7b575139b9d2f102c852018c8"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(503,310167,'insert','blocks','{"block_hash":"ab4293dbea81fedacca1a0d5230fe85a230afc9490d895aa6963acc216125f66","block_index":310167,"block_time":310167000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(503,310166,'insert','blocks','{"block_hash":"ab4293dbea81fedacca1a0d5230fe85a230afc9490d895aa6963acc216125f66","block_index":310167,"block_time":310167000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(504,310167,'parse','blocks','{"block_index":310167,"ledger_hash":"e118e0f3aad5be73080f4d1892517e8fd2c4575589ccdfadf980edebb9a66a14","messages_hash":"6cd15a6b0104e8343a928946b3bd0dc4ba7062b599e63576a456f9bcbdad2c64","txlist_hash":"d2be4356643047c7bd04eede767d4f6853885f408827f3bec8c54ceb2b7fd71b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(505,310168,'insert','blocks','{"block_hash":"a12b36a88c2b0ed41f1419a29cc118fae4ecd2f70003de77848bf4a9b2b72dc9","block_index":310168,"block_time":310168000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(505,310167,'insert','blocks','{"block_hash":"a12b36a88c2b0ed41f1419a29cc118fae4ecd2f70003de77848bf4a9b2b72dc9","block_index":310168,"block_time":310168000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(506,310168,'parse','blocks','{"block_index":310168,"ledger_hash":"267f48eb4e3b0925f4f472d8ce6ec57ec5039911b13a14ff2884a41a9cafd7b1","messages_hash":"696d4a61ff5e1174d4f20bdb76941ea081a4d2f3189ea334c4e95224f8c8c8a6","txlist_hash":"ad748b661aad47fa8963b43999846ef9bd00ea2595747f835710360afed16797"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(507,310169,'insert','blocks','{"block_hash":"204809a85ead8ba63f981fc1db8ae95afe92015f003eaebbec166021867421f3","block_index":310169,"block_time":310169000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(507,310168,'insert','blocks','{"block_hash":"204809a85ead8ba63f981fc1db8ae95afe92015f003eaebbec166021867421f3","block_index":310169,"block_time":310169000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(508,310169,'parse','blocks','{"block_index":310169,"ledger_hash":"df394a6f3b2a9b9dded6019dce9f3d3214db1f30019faffbdc2ce614f629b25a","messages_hash":"cdfd35fa4c56e13b5d326dd331f4ebf61f85518bbbcbade10dc40b1af4a15431","txlist_hash":"3a92e2c7808a00a0ff2b2fb4695b225acf6262c57753023334bcf3de8e1c7ace"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(509,310170,'insert','blocks','{"block_hash":"b38b0345a20a367dfe854e455e5752f63ac2d9be8de33eab264a29e87f94d119","block_index":310170,"block_time":310170000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(509,310169,'insert','blocks','{"block_hash":"b38b0345a20a367dfe854e455e5752f63ac2d9be8de33eab264a29e87f94d119","block_index":310170,"block_time":310170000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(510,310170,'parse','blocks','{"block_index":310170,"ledger_hash":"3081081c2ab6d8280ef721c5836d0fb7e89eb3d747a4e4522d2e22f5a6b153a2","messages_hash":"a771c459fa5e0cc21787d85a9b38e8ec396e77cc95362ddfa73ec9fb454495fc","txlist_hash":"f4ada9df3e82d94ba52292e829c4c814b3f0d04f0e3f8606a90fed651634fafd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(511,310171,'insert','blocks','{"block_hash":"b8ba5ae8d97900ce37dd451e8c6d8b3a0e2664bb1c103bf697355bf3b1de2d2d","block_index":310171,"block_time":310171000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(511,310170,'insert','blocks','{"block_hash":"b8ba5ae8d97900ce37dd451e8c6d8b3a0e2664bb1c103bf697355bf3b1de2d2d","block_index":310171,"block_time":310171000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(512,310171,'parse','blocks','{"block_index":310171,"ledger_hash":"e6a4017e4f7d9da50bb3817990c3e115d5035443de8824dc01b5380a5b4c52a9","messages_hash":"c31dfeb0e49cd9b9f45143ca853172c4f8d3ee88427c3e98f7cc8dd874355392","txlist_hash":"e335e773387256c016b82649c44647ce0355aa108249413f02117fe14f39c56d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(513,310172,'insert','blocks','{"block_hash":"b17fda199c609ab4cc2d85194dd53fa51ba960212f3964a9d2fe2cfe0bb57055","block_index":310172,"block_time":310172000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(513,310171,'insert','blocks','{"block_hash":"b17fda199c609ab4cc2d85194dd53fa51ba960212f3964a9d2fe2cfe0bb57055","block_index":310172,"block_time":310172000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(514,310172,'parse','blocks','{"block_index":310172,"ledger_hash":"89e90622bf8363bcee5cd7ab6d48b6d06ce4cbd067f9985e35e67fc683f4c103","messages_hash":"7d8b260c7351e40751ff111c6c06d7c8aa885428710b3d1e1f0994c35e2f9643","txlist_hash":"d03bfc2a16d240505e3413ce267b263a0ddde5b3f8a04acb6a67d33a89434996"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(515,310173,'insert','blocks','{"block_hash":"f2dcdc5ffc0aca2e71e6e0466391b388870229398a1f3c57dec646b806a65016","block_index":310173,"block_time":310173000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(515,310172,'insert','blocks','{"block_hash":"f2dcdc5ffc0aca2e71e6e0466391b388870229398a1f3c57dec646b806a65016","block_index":310173,"block_time":310173000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(516,310173,'parse','blocks','{"block_index":310173,"ledger_hash":"35ceee6a23757fa49e7f5c34ccf0fd034731e95d564257b443ebfdee7cd294d3","messages_hash":"af128c2ba7c50382bbe8e3b428f19fcd80958bc2e5d4c33be43712d47d435a70","txlist_hash":"73c9dd3d2f5390d0d4379cc8f5e195ba4a0b4d280d3fe663db3940d4a42108ef"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(517,310174,'insert','blocks','{"block_hash":"fa6f46af9e3664353a473f6fffce56fa295e07985018bface8141b4bf7924679","block_index":310174,"block_time":310174000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(517,310173,'insert','blocks','{"block_hash":"fa6f46af9e3664353a473f6fffce56fa295e07985018bface8141b4bf7924679","block_index":310174,"block_time":310174000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(518,310174,'parse','blocks','{"block_index":310174,"ledger_hash":"101dedf34bc0788c0589c8e2b1d7da4ec65f6eab2e3c5523c0903db685cab017","messages_hash":"c963441968e83c301e8f29f28765581cc5f14e6623c040c3350dc589eea57da6","txlist_hash":"71d9279604a4ac7dbd49f6672ec6cd19ba59b62302eb1b1bd78ecd3b6d4a5263"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(519,310175,'insert','blocks','{"block_hash":"f71e79fe5f03c3bc7f1360febc5d8f79fc2768ce0ff1872cf27a829b49017333","block_index":310175,"block_time":310175000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(519,310174,'insert','blocks','{"block_hash":"f71e79fe5f03c3bc7f1360febc5d8f79fc2768ce0ff1872cf27a829b49017333","block_index":310175,"block_time":310175000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(520,310175,'parse','blocks','{"block_index":310175,"ledger_hash":"67de4a0a9e52d9ae06caf62b3412d0bf2c10a6b24716210b21212d75be75ad6c","messages_hash":"dfee8971396dc54217e263b98b1ee284fabc170a53cf0fa2d123a1f9cbd14d64","txlist_hash":"90b52df6f0427a7dc695fa0e17a7bf3e59d788cf4016bb65c451a151c38f121b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(521,310176,'insert','blocks','{"block_hash":"67cd1d81f2998f615602346065e37f9ceb8916abb74b5762ead317d5e26453c6","block_index":310176,"block_time":310176000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(521,310175,'insert','blocks','{"block_hash":"67cd1d81f2998f615602346065e37f9ceb8916abb74b5762ead317d5e26453c6","block_index":310176,"block_time":310176000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(522,310176,'parse','blocks','{"block_index":310176,"ledger_hash":"a90bd400e15727fada1a27be4a6e228bd91a15f0dbd0fb7de3b6779a8bf89e4c","messages_hash":"493da573a8f068a577690df0b951ad995a49bbbdca22029102fa286d1d633269","txlist_hash":"b870ef1dabda015a561f74122039890b1c9c98e2c4c547dea34ed296fc99e8e1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(523,310177,'insert','blocks','{"block_hash":"6856b1971121b91c907aaf7aed286648a6074f0bd1f66bd55da2b03116192a52","block_index":310177,"block_time":310177000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(523,310176,'insert','blocks','{"block_hash":"6856b1971121b91c907aaf7aed286648a6074f0bd1f66bd55da2b03116192a52","block_index":310177,"block_time":310177000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(524,310177,'parse','blocks','{"block_index":310177,"ledger_hash":"bac315d07dee18e27336a46ff3ffeed58aaf8eb1eb702e98a93c06303c937716","messages_hash":"e54ad17218ff9f1d0ac02978bc5b0ec884a467ccd1417779043860b108dc7e74","txlist_hash":"80b0eed7b842a9779b358c5293771470290876f3acb617d85e1a97e786a73092"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(525,310178,'insert','blocks','{"block_hash":"8094fdc6e549c4fab18c62e4a9be5583990c4167721a7e72f46eaf1e4e04d816","block_index":310178,"block_time":310178000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(525,310177,'insert','blocks','{"block_hash":"8094fdc6e549c4fab18c62e4a9be5583990c4167721a7e72f46eaf1e4e04d816","block_index":310178,"block_time":310178000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(526,310178,'parse','blocks','{"block_index":310178,"ledger_hash":"186ea0ece84d21ee21889ff13c98959dfc1842063a970e0c095552f0ca86515e","messages_hash":"bb17de70c734bbc12be97953357cba4c749de77aed7ff5e0a5a7c95e02a48bec","txlist_hash":"79d67c9aecc8676b0743ebc9af6b78c6f40d264b54bcb510b0028715fc1ca4bd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(527,310179,'insert','blocks','{"block_hash":"d1528027cd25a1530cdc32c4eaff3751a851c947ddc748d99a7d3026a5e581a7","block_index":310179,"block_time":310179000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(527,310178,'insert','blocks','{"block_hash":"d1528027cd25a1530cdc32c4eaff3751a851c947ddc748d99a7d3026a5e581a7","block_index":310179,"block_time":310179000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(528,310179,'parse','blocks','{"block_index":310179,"ledger_hash":"0200402ef08256efa0adc85b2b4b15fb7448b5107b65fafbcc7985d809e84bc8","messages_hash":"2e03fe798f0a5c1f8dedb60d153f4fbb5c461b6df84a5427c4c5fc568c247632","txlist_hash":"3bbcd82428f094a7089c7c9a5c74be0e400e4a03181ea95faea8681323851d43"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(529,310180,'insert','blocks','{"block_hash":"f2f401a5e3141a8387aaf9799e8fef92eb0fc68370dae1e27622893406d685c1","block_index":310180,"block_time":310180000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(529,310179,'insert','blocks','{"block_hash":"f2f401a5e3141a8387aaf9799e8fef92eb0fc68370dae1e27622893406d685c1","block_index":310180,"block_time":310180000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(530,310180,'parse','blocks','{"block_index":310180,"ledger_hash":"13829eeaf9bdc54f87366e35616c5a57cd836c63db8a9ba7d117d02377ef43e1","messages_hash":"de94fa7ca96ff9c889cdfda64f41e136ecdec886443ac534d48cab345400fdf0","txlist_hash":"2398e91ec31dc2810a4648946a85f5af7df71cae0b678f99aaa17e97d215785b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(531,310181,'insert','blocks','{"block_hash":"bd59318cdba0e511487d1e4e093b146b0f362c875d35ab5251592b3d9fed7145","block_index":310181,"block_time":310181000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(531,310180,'insert','blocks','{"block_hash":"bd59318cdba0e511487d1e4e093b146b0f362c875d35ab5251592b3d9fed7145","block_index":310181,"block_time":310181000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(532,310181,'parse','blocks','{"block_index":310181,"ledger_hash":"81b4d83a623a55019ad720c1bd3ecef100d8ca49deda91b8ba6ffe9802764df7","messages_hash":"f62a4c12fb1ef9e3f82035ca00f8b419baa84c536d23f127a552b9c3d9df6e3f","txlist_hash":"82cb247f5dfeeb31342861a77bceb74957ceb62932de536d837988a2f471f599"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(533,310182,'insert','blocks','{"block_hash":"a7e66b4671a11af2743889a10b19d4af09ec873e2b8eb36949d710d22e1d768f","block_index":310182,"block_time":310182000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(533,310181,'insert','blocks','{"block_hash":"a7e66b4671a11af2743889a10b19d4af09ec873e2b8eb36949d710d22e1d768f","block_index":310182,"block_time":310182000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(534,310182,'parse','blocks','{"block_index":310182,"ledger_hash":"935e40f93195d450b292481aac481f445d2de8786d04d26263f4adc5a348704c","messages_hash":"454c2009be61a3954687ce793fe7cb30490d41edd77bd9d62006622440df901d","txlist_hash":"1a48f71be7c5f3baa68d68c393a6c68d63596c561005ac7c6df457584fc18c6a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(535,310183,'insert','blocks','{"block_hash":"85318afb50dc77cf9edfef4d6192f7203415e93be43f19b15ca53e170b0477bb","block_index":310183,"block_time":310183000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(535,310182,'insert','blocks','{"block_hash":"85318afb50dc77cf9edfef4d6192f7203415e93be43f19b15ca53e170b0477bb","block_index":310183,"block_time":310183000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(536,310183,'parse','blocks','{"block_index":310183,"ledger_hash":"268bf841be40615472bf4c60b5306d0763ed50510fbb55c47a6a0ac726e8701f","messages_hash":"6a772e172863a0a850489c0ebce5b7c5467d17a50bb1b04f9ba949dba19ca8b6","txlist_hash":"82d2641b1ab0cdf057e8e68b0cd7824ff8c60222f8d4e23125d68beacf2b3293"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(537,310184,'insert','blocks','{"block_hash":"042a898e29c2ebf0fdbb4156d29d9ba1a5935e7ed707928cb21824c76dd53bfc","block_index":310184,"block_time":310184000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(537,310183,'insert','blocks','{"block_hash":"042a898e29c2ebf0fdbb4156d29d9ba1a5935e7ed707928cb21824c76dd53bfc","block_index":310184,"block_time":310184000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(538,310184,'parse','blocks','{"block_index":310184,"ledger_hash":"64323488ca4d32a1f548842db4ac772b750599ce6222020ef6149b4a0e54a935","messages_hash":"c5850f7e42e373ad7c980eac188fc4c1d93c1b70fa5113498aa6a50a7e583a95","txlist_hash":"9a7f77be4828adcfee8ea1f106ecbcb55ae758d5098a6fa1aa3a494af957f7cb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(539,310185,'insert','blocks','{"block_hash":"bd78c092ae353c78798482830c007aac1be07e9bc8e52855f620a3d48f46811f","block_index":310185,"block_time":310185000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(539,310184,'insert','blocks','{"block_hash":"bd78c092ae353c78798482830c007aac1be07e9bc8e52855f620a3d48f46811f","block_index":310185,"block_time":310185000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(540,310185,'parse','blocks','{"block_index":310185,"ledger_hash":"8946baadef2e19c5e4e4b2d771b36982a217486dcb0f95097b41ce633e61da94","messages_hash":"d67a467f3facea45d03afbe61753a922cd38f8de8c4b23e064a530e2592412aa","txlist_hash":"8956f030f917aa87d9b309bd845b59cb37ba2265184ff1f67bfa4b61e32d43c3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(541,310186,'insert','blocks','{"block_hash":"e30a3a92cc2e5ad0133e5cee1f789a1a28bea620974f9ab8fa663da53e5bf707","block_index":310186,"block_time":310186000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(541,310185,'insert','blocks','{"block_hash":"e30a3a92cc2e5ad0133e5cee1f789a1a28bea620974f9ab8fa663da53e5bf707","block_index":310186,"block_time":310186000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(542,310186,'parse','blocks','{"block_index":310186,"ledger_hash":"e68b5525927cfee15fefee02a16fd700abf6b6e7b4e32e57df7d324fae7ae090","messages_hash":"de219598994c08d7db8fa07ab2a525349193cf9995b12bdebf550efc116f6d3d","txlist_hash":"137a7a7a1ae71a317f7c3c48f7f84e4a782a515fa2096c2abe2c1adeab4e8256"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(543,310187,'insert','blocks','{"block_hash":"fc6402c86b66b6e953d23ed33d149faa0988fa90aa9f7434e2863e33da2f3414","block_index":310187,"block_time":310187000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(543,310186,'insert','blocks','{"block_hash":"fc6402c86b66b6e953d23ed33d149faa0988fa90aa9f7434e2863e33da2f3414","block_index":310187,"block_time":310187000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(544,310187,'parse','blocks','{"block_index":310187,"ledger_hash":"c42efa24d48339fc341908a30c6679beeadc9f5918d8d3e62d5c4b06fec845d5","messages_hash":"d102dd65505ea26b381ebc87971f3346b7bc5caf341923fe94dcb249d69b4e30","txlist_hash":"cc587cfca94dbe30e6670dbfc4a5e3ec46732731f5c66aab9c7ef9028b05c22a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(545,310188,'insert','blocks','{"block_hash":"85694a80e534a53d921b5d2c6b789b747aa73bf5556b91eeed2df148e2ada917","block_index":310188,"block_time":310188000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(545,310187,'insert','blocks','{"block_hash":"85694a80e534a53d921b5d2c6b789b747aa73bf5556b91eeed2df148e2ada917","block_index":310188,"block_time":310188000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(546,310188,'parse','blocks','{"block_index":310188,"ledger_hash":"13de1d9b569d5d2525ecfa39b1eda69f9fd474683b6e34554b1a755125e96e5d","messages_hash":"b8c7ce7442aa512c5eb00e3c222fd2ce668afb4ef43d20af4592755faedf27b0","txlist_hash":"2fcc160068a4eb52ac410937237ec3813bfee52750bd8cef939738b81c8ac30b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(547,310189,'insert','blocks','{"block_hash":"7c036dadf19348348edbe0abe84861f03370415ed2fec991b9374dbb0ca19a06","block_index":310189,"block_time":310189000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(547,310188,'insert','blocks','{"block_hash":"7c036dadf19348348edbe0abe84861f03370415ed2fec991b9374dbb0ca19a06","block_index":310189,"block_time":310189000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(548,310189,'parse','blocks','{"block_index":310189,"ledger_hash":"582b8b3d3a226d3f6df497cb933ed5f42e1e992c0c25372ec15de424c0a33368","messages_hash":"51aa347c9fde3d01458f08a73c430406fd712a905ebc897c477ab43297fb57c4","txlist_hash":"ae81616b5fd77e3672318a0a5ef1b20106afc3ce7d730c8beef848d73ba53a0f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(549,310190,'insert','blocks','{"block_hash":"d6ef65299fb9dfc165284015ff2b23804ffef0b5c8baf6e5fa631211a2edbd8d","block_index":310190,"block_time":310190000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(549,310189,'insert','blocks','{"block_hash":"d6ef65299fb9dfc165284015ff2b23804ffef0b5c8baf6e5fa631211a2edbd8d","block_index":310190,"block_time":310190000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(550,310190,'parse','blocks','{"block_index":310190,"ledger_hash":"d4c49d5e3aaf21e6fe1c30663d0ba93f7dc9ddb03611e3751fba9aac8d382ac4","messages_hash":"badc62331f35d2d438ef5ac0d918e29d750aae86f1275164354eac7a7e7f5254","txlist_hash":"48c70376450aa80a2a920e4b871d27d1efe703b377ba446a262e06c9a6677611"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(551,310191,'insert','blocks','{"block_hash":"5987ffecb8d4a70887a7ce2b7acb9a326f176cca3ccf270f6040219590329139","block_index":310191,"block_time":310191000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(551,310190,'insert','blocks','{"block_hash":"5987ffecb8d4a70887a7ce2b7acb9a326f176cca3ccf270f6040219590329139","block_index":310191,"block_time":310191000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(552,310191,'parse','blocks','{"block_index":310191,"ledger_hash":"23d340ff3f1979a43bd1336c9c882b5ee01c646cd104060feacdb5db78025cca","messages_hash":"88f7d700b8ff35da0dbaf70bc08d827586f42dd7e817ae603c2f81058850c9d1","txlist_hash":"704b02ead8ed3e4e6505225fc620073993e9c3b13209bff9b5f638d5f21ce23b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(553,310192,'insert','blocks','{"block_hash":"31b7be43784f8cc2ce7bc982d29a48ff93ef95ba18f82380881c901c50cd0caa","block_index":310192,"block_time":310192000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(553,310191,'insert','blocks','{"block_hash":"31b7be43784f8cc2ce7bc982d29a48ff93ef95ba18f82380881c901c50cd0caa","block_index":310192,"block_time":310192000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(554,310192,'parse','blocks','{"block_index":310192,"ledger_hash":"cd18860851bceba4a0174480ccdc0f6ddc47b31ce71af8ec8500cb07f75d9da9","messages_hash":"b3ed38fcef537adc2756596562698c24287abe616870b22853ea834aed2a0bf7","txlist_hash":"17018479e73908fd235313691ed8464b93a0a5db774d3608294e23fba918c672"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(555,310193,'insert','blocks','{"block_hash":"ff3bb9c107f3a6e138440dee2d60c65e342dfbf216e1872c7cdb45f2a4d8852a","block_index":310193,"block_time":310193000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(555,310192,'insert','blocks','{"block_hash":"ff3bb9c107f3a6e138440dee2d60c65e342dfbf216e1872c7cdb45f2a4d8852a","block_index":310193,"block_time":310193000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(556,310193,'parse','blocks','{"block_index":310193,"ledger_hash":"391e97ae7ccf5bc38ac72e7ad1256f24c28297c625bd9a789cba8231a5ade046","messages_hash":"62ffa442b4f5a7835ddc82c0f5b5362aa3c97ecb66b039670ee22893b6891ad9","txlist_hash":"d08696a916e09e242fd20a9f8314cd4fb6305e991b506c53e3ef3f77e2d1d6dd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(557,310194,'insert','blocks','{"block_hash":"d1d8f8c242a06005f59d3c4f85983f1fa5d5edcc65eb48e7b75ed7165558434a","block_index":310194,"block_time":310194000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(557,310193,'insert','blocks','{"block_hash":"d1d8f8c242a06005f59d3c4f85983f1fa5d5edcc65eb48e7b75ed7165558434a","block_index":310194,"block_time":310194000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(558,310194,'parse','blocks','{"block_index":310194,"ledger_hash":"9141c9b38087c7cf2b8c11ffd55c2eabcb3bb09f132ac0baf9c3779f628dd42b","messages_hash":"015c140f5d377fa59b3c9d8b1c572565f35cd73b230f7530d42d7bf3e84cf41f","txlist_hash":"d5f418ef4569bb977ff73ab64235b3697d0f7f326f95696e6f63c56cdd180d6d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(559,310195,'insert','blocks','{"block_hash":"0b2f1f57c9a7546faac835cbe43243473fa6533b6e4d8bf8d13b8e3c710faf53","block_index":310195,"block_time":310195000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(559,310194,'insert','blocks','{"block_hash":"0b2f1f57c9a7546faac835cbe43243473fa6533b6e4d8bf8d13b8e3c710faf53","block_index":310195,"block_time":310195000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(560,310195,'parse','blocks','{"block_index":310195,"ledger_hash":"705918f002db29e7b3dfbfd6378f79d53e33c6ffa3948b2e3b5c85f85009bbde","messages_hash":"86c493dd15da412115cf100f1ae5090054ecc5c70899504cd8d28b4341c6b2f4","txlist_hash":"d0165e09e04c2049de1d8582291e623c80477499203b702e46fb829390ed64c0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(561,310196,'insert','blocks','{"block_hash":"280e7f4c9d1457e116b27f6fc2b806d3787002fe285826e468e07f4a0e3bd2e6","block_index":310196,"block_time":310196000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(561,310195,'insert','blocks','{"block_hash":"280e7f4c9d1457e116b27f6fc2b806d3787002fe285826e468e07f4a0e3bd2e6","block_index":310196,"block_time":310196000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(562,310196,'parse','blocks','{"block_index":310196,"ledger_hash":"59e12df19e3c0e3e23a5d1e9783c75e236a000774a038553312919a0f46b8227","messages_hash":"06521b1a530800f4e086530f29d38e8068690ef94e073c38fe834876aa7f9917","txlist_hash":"57dc6e1a18ce4910ba32e109820e8e0630070251ec745e63557c98ce71dedd80"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(563,310197,'insert','blocks','{"block_hash":"68de4c7fd020395a407ef59ea267412bbd2f19b0a654f09c0dafbc7c9ada4467","block_index":310197,"block_time":310197000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(563,310196,'insert','blocks','{"block_hash":"68de4c7fd020395a407ef59ea267412bbd2f19b0a654f09c0dafbc7c9ada4467","block_index":310197,"block_time":310197000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(564,310197,'parse','blocks','{"block_index":310197,"ledger_hash":"a0e1817dfc258180fa1629710ff3b6026181a9042fecd2c8b0b5e38118199e07","messages_hash":"0e8eacaff59da1d2ba48a95aeb66456f4e3bed48ee495cea9ec2e0ffb98db2ba","txlist_hash":"58d18f5f2362b4bfbf155b16fc4e8868b311286b25365f3b4b1a9bf73fab69b4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(565,310198,'insert','blocks','{"block_hash":"30340d4b655879e82543773117d72017a546630ceac29f591d514f37dd5b1cc2","block_index":310198,"block_time":310198000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(565,310197,'insert','blocks','{"block_hash":"30340d4b655879e82543773117d72017a546630ceac29f591d514f37dd5b1cc2","block_index":310198,"block_time":310198000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(566,310198,'parse','blocks','{"block_index":310198,"ledger_hash":"ff51bfc670b1387bfce53781750e35a3bf69d907167cf9cf57e15613cc0ff3b2","messages_hash":"47e506e747a98d1964596e6c438825affd74e81533b2f48e21eb4e5a90262f55","txlist_hash":"1443d1c76f64272d6ea00fb8f78913e72c617c515a162c9f1c213be02d48008a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(567,310199,'insert','blocks','{"block_hash":"494ebe4ce57d53dc0f51e1281f7e335c7315a6a064e982c3852b7179052a4613","block_index":310199,"block_time":310199000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(567,310198,'insert','blocks','{"block_hash":"494ebe4ce57d53dc0f51e1281f7e335c7315a6a064e982c3852b7179052a4613","block_index":310199,"block_time":310199000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(568,310199,'parse','blocks','{"block_index":310199,"ledger_hash":"e5f8f8f00de32f0d8d2b62eba27218edcee77563960fe074da5ae86bf5b553f1","messages_hash":"fe470b47af5b3f99bbbcec04aa4e304ac0b2890d03f6432c9f9a3cb6ac22e474","txlist_hash":"87fca2825c48b9ec9db31e2d6e8e8354a0ceff7fa3df299dc2868c7d616a9599"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(569,310200,'insert','blocks','{"block_hash":"d5169d7b23c44e02a5322e91039ccc7959b558608cf164328cd63dbaf9c81a03","block_index":310200,"block_time":310200000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(569,310199,'insert','blocks','{"block_hash":"d5169d7b23c44e02a5322e91039ccc7959b558608cf164328cd63dbaf9c81a03","block_index":310200,"block_time":310200000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(570,310200,'parse','blocks','{"block_index":310200,"ledger_hash":"fd8fb664576868d4f1c843b28efc7ee028417034a33d6f5635238bd13c701b2a","messages_hash":"9eee9c3e3b358fdbfb78813b40b67c9b33bbaf1512e3d7d27f6c05e61d0bf6ea","txlist_hash":"a88ca1fa9d0dfccf2e49323a500ebdfab7ba13b60dc9011c6b510741148dbf54"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(571,310201,'insert','blocks','{"block_hash":"8842bf23ded504bb28765128c0097e1de47d135f01c5cf47680b3bcf5720ad95","block_index":310201,"block_time":310201000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(571,310200,'insert','blocks','{"block_hash":"8842bf23ded504bb28765128c0097e1de47d135f01c5cf47680b3bcf5720ad95","block_index":310201,"block_time":310201000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(572,310201,'parse','blocks','{"block_index":310201,"ledger_hash":"7e2dbbf14c0620ac0fd4e0e676857e2d055fff80cadfe2d9d0dfe07d36738722","messages_hash":"a22e94319ba0331541ae9446e6313faa1ff5e579294f0a4e73d5a4cbf1368ae2","txlist_hash":"f20074cd00170edae909606eb1bd3937afaa3711590eb7d788c564ddbdc6600f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(573,310202,'insert','blocks','{"block_hash":"95fa18eecbc0905377a70b3ccd48636528d5131ccfa0126ed4639bc60d0003d8","block_index":310202,"block_time":310202000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(573,310201,'insert','blocks','{"block_hash":"95fa18eecbc0905377a70b3ccd48636528d5131ccfa0126ed4639bc60d0003d8","block_index":310202,"block_time":310202000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(574,310202,'parse','blocks','{"block_index":310202,"ledger_hash":"084c24e81842ec8edc4144ad64df9f12377318fe4dc491b307b7d377f3f81b2b","messages_hash":"96cba00eb5b84fe3634ae0c4ab0bc5544b5f9a703f20e0c34c3877aa97769071","txlist_hash":"76c57648e216c5f191f04b79d2a1149d273b2a58a6b4956eb1d077abd2cfc113"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(575,310203,'insert','blocks','{"block_hash":"ab15c43e5ac0b9d4bd7da5a14b8030b55b83d5d1855d9174364adbebf42432f8","block_index":310203,"block_time":310203000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(575,310202,'insert','blocks','{"block_hash":"ab15c43e5ac0b9d4bd7da5a14b8030b55b83d5d1855d9174364adbebf42432f8","block_index":310203,"block_time":310203000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(576,310203,'parse','blocks','{"block_index":310203,"ledger_hash":"4b0b8d82a5a2c8600a09b1050eed4440d9e0f2d817498f3e32ba27ebcfbaf6d5","messages_hash":"36c279295138f4a6da31842ab3a843f35fdc05807920bb9909042562e3f72a83","txlist_hash":"3e49b55d1309646ffce3b91d3cc3c53c488377518fe30cf6397c0d3c2aec45f4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(577,310204,'insert','blocks','{"block_hash":"18996fb47d68e7f4ae140dc1eb80df3e5aba513a344a949fd7c3b4f7cd4d64cb","block_index":310204,"block_time":310204000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(577,310203,'insert','blocks','{"block_hash":"18996fb47d68e7f4ae140dc1eb80df3e5aba513a344a949fd7c3b4f7cd4d64cb","block_index":310204,"block_time":310204000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(578,310204,'parse','blocks','{"block_index":310204,"ledger_hash":"9f81657142f7523c01595bef4e9008d8525c2337f6d90140e05abad619d94416","messages_hash":"689909b859f925743226073e922bf8f21ca99caade631f6a1dd49b16dff9fce8","txlist_hash":"89015233602aeb77d2097a328f2a5a065245131ac88ec6ac2d2b9b056e7764b6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(579,310205,'insert','blocks','{"block_hash":"5363526ff34a35e018d1a18544ad865352a9abf4c801c50aa55742e71630c13a","block_index":310205,"block_time":310205000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(579,310204,'insert','blocks','{"block_hash":"5363526ff34a35e018d1a18544ad865352a9abf4c801c50aa55742e71630c13a","block_index":310205,"block_time":310205000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(580,310205,'parse','blocks','{"block_index":310205,"ledger_hash":"fd1cdea0193ed914cc408968efa42377d7c69453aa9bdf8bdf0731d4b1501b01","messages_hash":"4457523f49ff3994beb0520d8f8c96387bcaec1e3dad5d4e414c0118768e1f67","txlist_hash":"1ea101d94c29967a141d71d3b8b15b278f3530c4c16c7e0219b892072d89f8f6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(581,310206,'insert','blocks','{"block_hash":"0615d9fca5bdf694dca2b255fb9e9256f316aa6b8a9fc700aa63e769189b0518","block_index":310206,"block_time":310206000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(581,310205,'insert','blocks','{"block_hash":"0615d9fca5bdf694dca2b255fb9e9256f316aa6b8a9fc700aa63e769189b0518","block_index":310206,"block_time":310206000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(582,310206,'parse','blocks','{"block_index":310206,"ledger_hash":"5845d6bedf81fba710999bf2954b3c1f3f9ca007a09d812ccae8e2a6d3b9bb07","messages_hash":"643bb31e7baa89d28efcee7755e727165c26c6160da6e474bf0361ca45d4c928","txlist_hash":"e26d49ceb523c99c2583e7bec1b4bbe1f8686c2bd009626fa4c8966c642a1bb8"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(583,310207,'insert','blocks','{"block_hash":"533b4ece95c58d080f958b3982cbd4d964e95f789d0beffe4dd3c67c50f62585","block_index":310207,"block_time":310207000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(583,310206,'insert','blocks','{"block_hash":"533b4ece95c58d080f958b3982cbd4d964e95f789d0beffe4dd3c67c50f62585","block_index":310207,"block_time":310207000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(584,310207,'parse','blocks','{"block_index":310207,"ledger_hash":"b65cf7069a0eb909357cd5d45129b70c576eeabc0cb13404029d088e24a2be34","messages_hash":"7a0ee60726734da2812a9d04529425ae59ac22f6598b536a399f77428e3acb66","txlist_hash":"596206790b52de9f791b99f7e71e3543cec87d4c3b9439ded8b7cbcd182b08e6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(585,310208,'insert','blocks','{"block_hash":"26c1535b00852aec245bac47ad0167b3fa76f6e661fc96534b1c5e7fdc752f44","block_index":310208,"block_time":310208000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(585,310207,'insert','blocks','{"block_hash":"26c1535b00852aec245bac47ad0167b3fa76f6e661fc96534b1c5e7fdc752f44","block_index":310208,"block_time":310208000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(586,310208,'parse','blocks','{"block_index":310208,"ledger_hash":"aa54dc010fec8a0ef3871c91667c45e88ffac08ee2fc93274d7ad1b2b5b28102","messages_hash":"66543655288b9354381b07bd124c91433357babb742999fdf19b7c5928ebb9ac","txlist_hash":"3414e0af132ec9df1da5a4304a3c94529bd915631443d34b759a017ad166863a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(587,310209,'insert','blocks','{"block_hash":"23827b94762c64225d218fa3070a3ea1efce392e3a47a1663d894b8ff8a429bf","block_index":310209,"block_time":310209000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(587,310208,'insert','blocks','{"block_hash":"23827b94762c64225d218fa3070a3ea1efce392e3a47a1663d894b8ff8a429bf","block_index":310209,"block_time":310209000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(588,310209,'parse','blocks','{"block_index":310209,"ledger_hash":"c7866cb2098c87c1333da5b3dce4c84bdeb620c9f1898456b7cceb23e4027df0","messages_hash":"78c91e8e991f4e18fd9b2a200fdbceba6644c5baa7150ab48a55a06378fa2731","txlist_hash":"56dce3d0e9dfa62c44e422f41ecc1517bc98302341496db287adf309f666d3bb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(589,310210,'insert','blocks','{"block_hash":"70b24078df58ecc8f7370b73229d39e52bbadcf539814deccb98948ebd86ccc0","block_index":310210,"block_time":310210000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(589,310209,'insert','blocks','{"block_hash":"70b24078df58ecc8f7370b73229d39e52bbadcf539814deccb98948ebd86ccc0","block_index":310210,"block_time":310210000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(590,310210,'parse','blocks','{"block_index":310210,"ledger_hash":"207a1c90d1658d55fa0fc2e1507fce98521647ab5c4d11099c2742279cc92b3f","messages_hash":"b8d234858f912396a71c45ebae9b3a21bace1a8dda0827b9e8a9b82a47cea34d","txlist_hash":"ecd4bb45bef1d8b395add25118bbeedc8d96f818a471bd7606554946a023b151"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(591,310211,'insert','blocks','{"block_hash":"4acb44225e022e23c7fdea483db5b1f2e04069431a29c682604fe97d270c926d","block_index":310211,"block_time":310211000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(591,310210,'insert','blocks','{"block_hash":"4acb44225e022e23c7fdea483db5b1f2e04069431a29c682604fe97d270c926d","block_index":310211,"block_time":310211000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(592,310211,'parse','blocks','{"block_index":310211,"ledger_hash":"dfc7fe172f9bc77148a1bfad5d441a3688f718b4985406d0cefd4c4dcd926208","messages_hash":"03209d67b7b17a0027728b8940661ea37594bc07cfc6780033aa44c481f48af6","txlist_hash":"f999268e3400907f85a0448d124df4d139b228327721fad7ad29ef595b0d16c9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(593,310212,'insert','blocks','{"block_hash":"6ef5229ec6ea926e99bf4467b0ed49d444eedb652cc792d2b8968b1e9f3b0547","block_index":310212,"block_time":310212000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(593,310211,'insert','blocks','{"block_hash":"6ef5229ec6ea926e99bf4467b0ed49d444eedb652cc792d2b8968b1e9f3b0547","block_index":310212,"block_time":310212000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(594,310212,'parse','blocks','{"block_index":310212,"ledger_hash":"32a39bff0606ec93454a2cb144c0bbd1939bf2be6a2ae369b885afc0b5ef33c9","messages_hash":"079f23e8476ed4f50d9aa11b1dbc3ef842c51bc46b622f75c06b06a62388e701","txlist_hash":"2e46422b38cddef2d8a10b343115c5e587b5456480fb1a019f0a5d541e90afb8"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(595,310213,'insert','blocks','{"block_hash":"17673a8aeff01a8cdc80528df2bd87cdd4a748fcb36d44f3a6d221a6cbddcbe7","block_index":310213,"block_time":310213000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(595,310212,'insert','blocks','{"block_hash":"17673a8aeff01a8cdc80528df2bd87cdd4a748fcb36d44f3a6d221a6cbddcbe7","block_index":310213,"block_time":310213000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(596,310213,'parse','blocks','{"block_index":310213,"ledger_hash":"15968873880e97e849e59971d4ef19881b1c11c3148dba966f51d986c59ccf36","messages_hash":"36a8bd5e1cd13df3238cc21da9490b545e51981845daccd2d7c0f3e7476e9f69","txlist_hash":"fa1e7562a89ee572607e6cdbf26c80d4ee1aac2bcd45374d166e2e993f8672cb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(597,310214,'insert','blocks','{"block_hash":"4393b639990f6f7cd47b56da62c3470dcbb31ef37094b76f53829fc12d313454","block_index":310214,"block_time":310214000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(597,310213,'insert','blocks','{"block_hash":"4393b639990f6f7cd47b56da62c3470dcbb31ef37094b76f53829fc12d313454","block_index":310214,"block_time":310214000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(598,310214,'parse','blocks','{"block_index":310214,"ledger_hash":"dcbdc463154fe49a7f22611fcb53e5ca78501424ba741040d89cac9db0a03ac4","messages_hash":"2e5d68dcda983499b5f291e65d92baaf171cc830e18385d212e6c66e5c8c7da5","txlist_hash":"5928d3221dd0bd142368585dc56f9f8a68885be95b7ad46c35bc37fbc61f651f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(599,310215,'insert','blocks','{"block_hash":"c26253deaf7e8df5d62b158ea4290fc9e92a4a689dadc36915650679743a74c7","block_index":310215,"block_time":310215000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(599,310214,'insert','blocks','{"block_hash":"c26253deaf7e8df5d62b158ea4290fc9e92a4a689dadc36915650679743a74c7","block_index":310215,"block_time":310215000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(600,310215,'parse','blocks','{"block_index":310215,"ledger_hash":"6047855f1c691f27ade1cc4c587f1c11ff68f5f5bd7959a23f801e5da7773eed","messages_hash":"0b8f5bc09af225c25136f886347723693fd43c83b4a0602747803579bd4fe100","txlist_hash":"b6410b25a5d6f17a5431f621d6226491bcb2ed97dac543c06e832cdaa8853d5a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(601,310216,'insert','blocks','{"block_hash":"6b77673d16911635a36fe55575d26d58cda818916ef008415fa58076eb15b524","block_index":310216,"block_time":310216000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(601,310215,'insert','blocks','{"block_hash":"6b77673d16911635a36fe55575d26d58cda818916ef008415fa58076eb15b524","block_index":310216,"block_time":310216000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(602,310216,'parse','blocks','{"block_index":310216,"ledger_hash":"a12fbb09858868de79095c8e3222f6fa179f2f00bc3c97c8205fd9367ae05aef","messages_hash":"58b268d9c7d1747b50ef4a6424d3e57365ce66afa440b9b365126437c676d3cc","txlist_hash":"f8b3b6d36fcb97071d826e68d2e6e5bc60f982c470e68644d94a6ec1342d0148"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(603,310217,'insert','blocks','{"block_hash":"0e09244f49225d1115a2a0382365b5728adbf04f997067ea17df89e84f9c13a8","block_index":310217,"block_time":310217000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(603,310216,'insert','blocks','{"block_hash":"0e09244f49225d1115a2a0382365b5728adbf04f997067ea17df89e84f9c13a8","block_index":310217,"block_time":310217000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(604,310217,'parse','blocks','{"block_index":310217,"ledger_hash":"419d8dc096dd58523cd4822748754158f0c11945bbb62100cb5268cd802580a8","messages_hash":"03e581edbb659df8a0b7a2996d0ce6b97f1f9dff6d10a7d1e9443f5b20836521","txlist_hash":"a61fb813a69ed40eae923918a73a8dfe51dd6fa14f5426ada1a5a543ab7bb0ce"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(605,310218,'insert','blocks','{"block_hash":"3eb26381d8c93399926bb83c146847bfe0b69024220cb145fe6601f6dda957d9","block_index":310218,"block_time":310218000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(605,310217,'insert','blocks','{"block_hash":"3eb26381d8c93399926bb83c146847bfe0b69024220cb145fe6601f6dda957d9","block_index":310218,"block_time":310218000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(606,310218,'parse','blocks','{"block_index":310218,"ledger_hash":"a36c07f7fdfaf7878d73baf14aee58b42220b2b2411fd1864450ec6ce1fbd173","messages_hash":"9c7ecbd39c0967b83ae38062d7674b5fc87e4330253c78da3d19d7c1d8e12fe2","txlist_hash":"dc1d785fe75a506a691f0eccaf752017fbaf5ce2b7225bdde3fb538281698e4e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(607,310219,'insert','blocks','{"block_hash":"60da40e38967aadf08696641d44ee5372586b884929974e1cbd5c347dc5befbf","block_index":310219,"block_time":310219000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(607,310218,'insert','blocks','{"block_hash":"60da40e38967aadf08696641d44ee5372586b884929974e1cbd5c347dc5befbf","block_index":310219,"block_time":310219000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(608,310219,'parse','blocks','{"block_index":310219,"ledger_hash":"7958aa94088ecf0384a9a6b0569e9507d208e009e9ce139c823960e40996a47e","messages_hash":"128105377e3c494bd2ddebf06d4f7b341d300abbae44e42233771cbdb8f6b2f0","txlist_hash":"c9aa622e3b372ba0c76efe97c1443cb89f2dfbcf8ff5e28dedf9b3abab3d6384"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(609,310220,'insert','blocks','{"block_hash":"d78c428ac4d622ab4b4554aa87aeee013d58f428422b35b0ba0f736d491392ef","block_index":310220,"block_time":310220000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(609,310219,'insert','blocks','{"block_hash":"d78c428ac4d622ab4b4554aa87aeee013d58f428422b35b0ba0f736d491392ef","block_index":310220,"block_time":310220000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(610,310220,'parse','blocks','{"block_index":310220,"ledger_hash":"00907c4368c2dc76d1ef98a0ba3c86bc4746ed2734b0c10f3797e0af70714240","messages_hash":"f43ab6ee98113914d6107f8950d5f6fb8affc0764a4723aa3da76bb60462ebe6","txlist_hash":"d0c3959f899232cdb5fed61bac2c09e45254959e8bc1a076acb3ba5e3ee63e65"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(611,310221,'insert','blocks','{"block_hash":"cf5263e382afd268e6059b28dc5862285632efe8d36ba218930765e633d48f2d","block_index":310221,"block_time":310221000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(611,310220,'insert','blocks','{"block_hash":"cf5263e382afd268e6059b28dc5862285632efe8d36ba218930765e633d48f2d","block_index":310221,"block_time":310221000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(612,310221,'parse','blocks','{"block_index":310221,"ledger_hash":"2e42f882087dc2158036592298321113f1b34e15b414efa6d43364c06d368540","messages_hash":"36833c9b3c6ada300b80182e1b9e78ba57b16030c2350a98ae24f85212a8d1c6","txlist_hash":"cf40107f8d11aa8ba96b03912967f88c44e69e20d7105f497d5418fc08aa5800"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(613,310222,'insert','blocks','{"block_hash":"1519f6ec801bf490282065f5299d631be6553af4b0883df344e7f7e5f49c4993","block_index":310222,"block_time":310222000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(613,310221,'insert','blocks','{"block_hash":"1519f6ec801bf490282065f5299d631be6553af4b0883df344e7f7e5f49c4993","block_index":310222,"block_time":310222000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(614,310222,'parse','blocks','{"block_index":310222,"ledger_hash":"00c4a5d41dd629bd0973c03152e4519214dce68498999c8dddc1f7a1cad28a82","messages_hash":"9436a06f0aa4299d6d9dd6eeb34a34763dc1571873ec7d801504482f84e0453f","txlist_hash":"6a012ee8e82d8d24b0a24d4bbab74cbe226afea1a9c1e129aceccd1d7591a107"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(615,310223,'insert','blocks','{"block_hash":"af208e2029fa49c19aa4770e582e32e0802d0baac463b00393a7a668fa2ea047","block_index":310223,"block_time":310223000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(615,310222,'insert','blocks','{"block_hash":"af208e2029fa49c19aa4770e582e32e0802d0baac463b00393a7a668fa2ea047","block_index":310223,"block_time":310223000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(616,310223,'parse','blocks','{"block_index":310223,"ledger_hash":"41c7a0fa22ebee9d55f2a3b118314293d155c349ba01069a23ddff76dc842955","messages_hash":"1dd11ae205fb0e3cd0e40f6b38f828c87984aee77d866a89459b419bc35c8b91","txlist_hash":"1080406ec3ccb84490487860bdd507637fa8fbdc68fc886d082bfcdf9ac835e7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(617,310224,'insert','blocks','{"block_hash":"5b57815583a5333b14beb50b4a35aeb108375492ee452feeeeb7c4a96cfd6e4c","block_index":310224,"block_time":310224000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(617,310223,'insert','blocks','{"block_hash":"5b57815583a5333b14beb50b4a35aeb108375492ee452feeeeb7c4a96cfd6e4c","block_index":310224,"block_time":310224000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(618,310224,'parse','blocks','{"block_index":310224,"ledger_hash":"66c268462442b69efb56b29e08aae1a404d3543e0a20711e8998a31af45ee929","messages_hash":"2959b2278c2b1ec51545610be3ffe8558ee5b8d21654226a04e99fbfad17cb5d","txlist_hash":"1d5188bf347d72bc66239f3b4c709ecca24141c5474755c567f4176293f275af"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(619,310225,'insert','blocks','{"block_hash":"0c2992fc10b2ce8d6d08e018397d366c94231d3a05953e79f2db00605c82e41c","block_index":310225,"block_time":310225000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(619,310224,'insert','blocks','{"block_hash":"0c2992fc10b2ce8d6d08e018397d366c94231d3a05953e79f2db00605c82e41c","block_index":310225,"block_time":310225000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(620,310225,'parse','blocks','{"block_index":310225,"ledger_hash":"cf39fb28a7e4d4db7657bb11a30d592a15c049000d7ac86d4fb3d942bf879b95","messages_hash":"efd4e825c77a27f6c0d8b18c54f144166479fb35ad75dbab439122b908f4d0b5","txlist_hash":"61dccc2a6cdf50b56700c893611fac0dd6cccadcd672cd438452ebd30852ccf7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(621,310226,'insert','blocks','{"block_hash":"b3f6cd212aee8c17ae964536852e7a53c69433bef01e212425a5e99ec0b7e1cb","block_index":310226,"block_time":310226000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(621,310225,'insert','blocks','{"block_hash":"b3f6cd212aee8c17ae964536852e7a53c69433bef01e212425a5e99ec0b7e1cb","block_index":310226,"block_time":310226000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(622,310226,'parse','blocks','{"block_index":310226,"ledger_hash":"cb622a4d04645ad96d3e0006f2b7632e8b82e44206d6c1cb75212b059fe18de5","messages_hash":"07a2801c71185f1fd03a4372433bc536c79aaf46ed374209a41a1fce2d0e9ff8","txlist_hash":"2c131ef357cdc433dce05cf915be1b2c243e51208c877852a19c67968caddca4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(623,310227,'insert','blocks','{"block_hash":"ea8386e130dd4e84669dc8b2ef5f4818e2f5f35403f2dc1696dba072af2bc552","block_index":310227,"block_time":310227000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(623,310226,'insert','blocks','{"block_hash":"ea8386e130dd4e84669dc8b2ef5f4818e2f5f35403f2dc1696dba072af2bc552","block_index":310227,"block_time":310227000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(624,310227,'parse','blocks','{"block_index":310227,"ledger_hash":"60ae4209347248a3f7ad39b6436627f06e45433f6b6dd89cfd3383d68974a41c","messages_hash":"d652cb4035428a7d0c6ff73d8f6b3bc341ebcfefbd5129f45d77d9a4c63648a3","txlist_hash":"200ccbec2ba0927612c50a1ce2a58f856ecbda876943bfc2d3404724fff1927a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(625,310228,'insert','blocks','{"block_hash":"8ab465399d5feb5b7933f3e55539a2f53495277dd0780b7bf15f9338560efc7b","block_index":310228,"block_time":310228000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(625,310227,'insert','blocks','{"block_hash":"8ab465399d5feb5b7933f3e55539a2f53495277dd0780b7bf15f9338560efc7b","block_index":310228,"block_time":310228000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(626,310228,'parse','blocks','{"block_index":310228,"ledger_hash":"798206ee77c9e2fc8fe943f9bf2074c9c2560f534e3304b944e2ed3c89ce8bcb","messages_hash":"03298834b11f7cf4a87e5717022fea72055bc47a6e8d0f62e4a9810f4cb96b82","txlist_hash":"c8c9a18e8420e274c98c528e0d0636aba20f5a6c983135a61e9cd47d60123185"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(627,310229,'insert','blocks','{"block_hash":"d0ccca58f131c8a12ef375dc70951c3aa79c638b4c4d371c7f720c9c784f3297","block_index":310229,"block_time":310229000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(627,310228,'insert','blocks','{"block_hash":"d0ccca58f131c8a12ef375dc70951c3aa79c638b4c4d371c7f720c9c784f3297","block_index":310229,"block_time":310229000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(628,310229,'parse','blocks','{"block_index":310229,"ledger_hash":"becad39a4d1bc8d73a856fa1d2bfa251f29b23fec9448a91932dc610243fd8df","messages_hash":"959fc4e9bdfff5818ca84c2a68c31868f6d3bff79e7dcc5df9da122959332a11","txlist_hash":"1d817cb41854bebc85173e6c6c0a8e6ae5a1bdbbd1077a64265ec4c96d60ca45"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(629,310230,'insert','blocks','{"block_hash":"f126b9318ad8e2d5812d3703ce083a43e179775615b03bd379dae5db46362f35","block_index":310230,"block_time":310230000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(629,310229,'insert','blocks','{"block_hash":"f126b9318ad8e2d5812d3703ce083a43e179775615b03bd379dae5db46362f35","block_index":310230,"block_time":310230000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(630,310230,'parse','blocks','{"block_index":310230,"ledger_hash":"e08eac4daa7d7bc70f2f47a835bb80993d6d6db06d8d8986101b717db1c62ed6","messages_hash":"b540fdab5cebac778cf187ae4e15720474ada921e9ceaa1393176bd2a4b8a3ac","txlist_hash":"d37fa640132bf2595891bfaa5d1d562495c780569e2a5d4f8863fd60d6396d95"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(631,310231,'insert','blocks','{"block_hash":"8667a5b933b6a43dab53858e76e4b9f24c3ac83d3f10b97bb20fde902abd4ceb","block_index":310231,"block_time":310231000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(631,310230,'insert','blocks','{"block_hash":"8667a5b933b6a43dab53858e76e4b9f24c3ac83d3f10b97bb20fde902abd4ceb","block_index":310231,"block_time":310231000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(632,310231,'parse','blocks','{"block_index":310231,"ledger_hash":"a761c29e76c9d5090cd1d6424beb91d0a9fd9546c67ecaa6d4879177b6745b59","messages_hash":"c5044aaa4b6c6310e113ab4b8d4a06108a09e57b6f082589aa84210ff6ef74eb","txlist_hash":"7bdcbdcc058e4c3d39751316b39bc65594624dc79fc8556e2847c94fb5986200"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(633,310232,'insert','blocks','{"block_hash":"813813cec50fd01b6d28277785f9e0ae81f3f0ca4cdee9c4a4415d3719c294e8","block_index":310232,"block_time":310232000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(633,310231,'insert','blocks','{"block_hash":"813813cec50fd01b6d28277785f9e0ae81f3f0ca4cdee9c4a4415d3719c294e8","block_index":310232,"block_time":310232000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(634,310232,'parse','blocks','{"block_index":310232,"ledger_hash":"5da469b7e21ad8ec4fe7cc2f426dcaeb18a3a4a3c44385d529a8b252c77a9e43","messages_hash":"64b6eb076323d0a896145203b0c7c201c2b57511c3d85d7b546395d75ed44a53","txlist_hash":"721ab1fecac8b537de1c90225f23a62d02a6e8b392f5211a8e020d9169dc75f6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(635,310233,'insert','blocks','{"block_hash":"79a443f726c2a7464817deb2c737a264c10488cac02c001fd1a4d1a76de411d6","block_index":310233,"block_time":310233000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(635,310232,'insert','blocks','{"block_hash":"79a443f726c2a7464817deb2c737a264c10488cac02c001fd1a4d1a76de411d6","block_index":310233,"block_time":310233000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(636,310233,'parse','blocks','{"block_index":310233,"ledger_hash":"d8531834d572acc01591997cac000185facc033e1ab72f8218a70d0ae3898914","messages_hash":"d9f33ce31a6349baf6626faf215023a0dcaa381fbbc85519a36790adea83a30c","txlist_hash":"a0b57a1491335a2fde88223b77d7c8a248101187be0b71894b6c56c426603867"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(637,310234,'insert','blocks','{"block_hash":"662e70a85ddc71d3feae92864315e63c2e1be0db715bb5d8432c21a0c14a63cd","block_index":310234,"block_time":310234000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(637,310233,'insert','blocks','{"block_hash":"662e70a85ddc71d3feae92864315e63c2e1be0db715bb5d8432c21a0c14a63cd","block_index":310234,"block_time":310234000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(638,310234,'parse','blocks','{"block_index":310234,"ledger_hash":"0ac6803ab61e14bb08fd8051424565086ab11b4d33faef077f5a0732eec6f766","messages_hash":"9174a71d733b2d1bf9fe8554ee25a8f90b8316b6c4bf8f93a290c8bcd96d7482","txlist_hash":"b719ec81bc5245492809b946a86c76c121148d506292a4ae125b368f1a24b72a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(639,310235,'insert','blocks','{"block_hash":"66915fa9ef2878c38eaf21c50df95d87669f63b40da7bdf30e3c72c6b1fba38e","block_index":310235,"block_time":310235000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(639,310234,'insert','blocks','{"block_hash":"66915fa9ef2878c38eaf21c50df95d87669f63b40da7bdf30e3c72c6b1fba38e","block_index":310235,"block_time":310235000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(640,310235,'parse','blocks','{"block_index":310235,"ledger_hash":"5f7de1c7fe45858dcc844604a77051d55de3b9dbb5f5d9910ead8bd0f3af48d8","messages_hash":"26bcd4fe3cc5d852b6ee428aa6d8fed7ac29d4870aa3765afb64a7f606f34f98","txlist_hash":"8d81c116619e760608161facac457bb00d4e816c049afbe42f6e0f7d7f1d09cd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(641,310236,'insert','blocks','{"block_hash":"d47fadd733c145ad1a3f4b00e03016697ad6e83b15bd6a781589a3a574de23e4","block_index":310236,"block_time":310236000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(641,310235,'insert','blocks','{"block_hash":"d47fadd733c145ad1a3f4b00e03016697ad6e83b15bd6a781589a3a574de23e4","block_index":310236,"block_time":310236000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(642,310236,'parse','blocks','{"block_index":310236,"ledger_hash":"c0437ca60921bb73516c31a74f78d2fb48d2c628b629c8f55c8fbb0060718d76","messages_hash":"a90b36102b9796577c3433977637279f790986193da640ed70d16c82dbcb1697","txlist_hash":"1c50aa16f8543f1eee5c2585aa8f7ee373bdb58648b430189ef4d8c9b0b767db"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(643,310237,'insert','blocks','{"block_hash":"2561400b16b93cfbb1eaba0f10dfaa1b06d70d9a4d560639d1bcc7759e012095","block_index":310237,"block_time":310237000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(643,310236,'insert','blocks','{"block_hash":"2561400b16b93cfbb1eaba0f10dfaa1b06d70d9a4d560639d1bcc7759e012095","block_index":310237,"block_time":310237000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(644,310237,'parse','blocks','{"block_index":310237,"ledger_hash":"4340ab34a083b38dbca477b6cc2479e6d70ffd6d6b9b75772068674297abadff","messages_hash":"387939cbc42aadf395163de49936ffa63ea379a764238cedc0a52ecb280a8810","txlist_hash":"2f23795147dfb09a113607e442cdc926222a2b9c3dc173b9e92ab8560de20c9f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(645,310238,'insert','blocks','{"block_hash":"43420903497d2735dc3077f4d4a2227c29e6fc2fa1c8fd5d55e7ba88782d3d55","block_index":310238,"block_time":310238000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(645,310237,'insert','blocks','{"block_hash":"43420903497d2735dc3077f4d4a2227c29e6fc2fa1c8fd5d55e7ba88782d3d55","block_index":310238,"block_time":310238000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(646,310238,'parse','blocks','{"block_index":310238,"ledger_hash":"6a76891c10ff0f9416ae1a024b985d621154918bd8ab545980b57fd2d18c4af7","messages_hash":"12bb025b6e426c682d70a6ae543622d706b596d8d1848c61b0fd456113766738","txlist_hash":"31d5717812d8f7e54ac8b7a000c7b599e2123a1de205cef6559b3930c466b961"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(647,310239,'insert','blocks','{"block_hash":"065efefe89eadd92ef1d12b092fd891690da79eec79f96b969fbaa9166cd6ef1","block_index":310239,"block_time":310239000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(647,310238,'insert','blocks','{"block_hash":"065efefe89eadd92ef1d12b092fd891690da79eec79f96b969fbaa9166cd6ef1","block_index":310239,"block_time":310239000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(648,310239,'parse','blocks','{"block_index":310239,"ledger_hash":"1128bb89562fc3b112da425a3dee67adaf741a8021ee378bdfeb44af3b1b1fac","messages_hash":"c501a04f979e29b0f67e8c4b2ab0cd68bcc610b98eba76d64c28e426e9162334","txlist_hash":"82b7482bdf98200b43d483dc7725ea9069ab96d897fa88dfafd73334132d362e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(649,310240,'insert','blocks','{"block_hash":"50aac88bb1fa76530134b6826a6cc0d056b0f4c784f86744aae3cfc487eeeb26","block_index":310240,"block_time":310240000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(649,310239,'insert','blocks','{"block_hash":"50aac88bb1fa76530134b6826a6cc0d056b0f4c784f86744aae3cfc487eeeb26","block_index":310240,"block_time":310240000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(650,310240,'parse','blocks','{"block_index":310240,"ledger_hash":"be05624b84b2e76794f065f36b4e98d6c6c120f1d8a5db91957bbe7008ce3240","messages_hash":"d0dc75e494d5935319620e47fe5aced48a36185547557d7ecdf4105ce3865810","txlist_hash":"bfd037773e4ad5fedd072183d19e824c36cf21549c374f7d7dab3ac313a1542b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(651,310241,'insert','blocks','{"block_hash":"792d50a3f8c22ddafe63fa3ba9a0a39dd0e358ba4e2ebcd853ca12941e85bee4","block_index":310241,"block_time":310241000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(651,310240,'insert','blocks','{"block_hash":"792d50a3f8c22ddafe63fa3ba9a0a39dd0e358ba4e2ebcd853ca12941e85bee4","block_index":310241,"block_time":310241000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(652,310241,'parse','blocks','{"block_index":310241,"ledger_hash":"5abfdfb1aa42fb80ca4538062d152d965b6a7a56bd1e170a7a109409a4606b7a","messages_hash":"021d83e2bcd0861be9bda8a7c6543a42d5cb2b1cad18986155556c784420bae3","txlist_hash":"e0bccb8ee5ac848700b228d8d21970f33fcc7a2c091e4b1d1f7f71c09404ecbe"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(653,310242,'insert','blocks','{"block_hash":"85dda4f2d80069b72728c9e6af187e79f486254666604137533cbfe216c5ea93","block_index":310242,"block_time":310242000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(653,310241,'insert','blocks','{"block_hash":"85dda4f2d80069b72728c9e6af187e79f486254666604137533cbfe216c5ea93","block_index":310242,"block_time":310242000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(654,310242,'parse','blocks','{"block_index":310242,"ledger_hash":"5f354f767df3256aa6a23544a7164160b9fabe481c85d1891f5250b3026dd7b8","messages_hash":"f20bae6583a51b6e9170deca1b35559f7a93dde4f14718fba8d132d3fe0e6322","txlist_hash":"a9b87a1cd3146663579bf192b97136602806865bb60ca2d464e3111872b61b7f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(655,310243,'insert','blocks','{"block_hash":"a1f51c9370b0c1171b5be282b5b4892000d8e932d5d41963e28e5d55436ba1bd","block_index":310243,"block_time":310243000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(655,310242,'insert','blocks','{"block_hash":"a1f51c9370b0c1171b5be282b5b4892000d8e932d5d41963e28e5d55436ba1bd","block_index":310243,"block_time":310243000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(656,310243,'parse','blocks','{"block_index":310243,"ledger_hash":"ea3acc31b3c298237fa11ca4400c65ee46732c96e0b7fac5a183dd49d938e730","messages_hash":"d9519ac42fde29980b3bc45cb459ee7e430192d8b5780930877da95a6510c14e","txlist_hash":"b7226a87411a48bc0b25e014f2929d63979a297600f51723a0c9bb89fef120b0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(657,310244,'insert','blocks','{"block_hash":"46e98809a8af5158ede4dfaa5949f5be35578712d59a9f4f1de995a6342c58df","block_index":310244,"block_time":310244000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(657,310243,'insert','blocks','{"block_hash":"46e98809a8af5158ede4dfaa5949f5be35578712d59a9f4f1de995a6342c58df","block_index":310244,"block_time":310244000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(658,310244,'parse','blocks','{"block_index":310244,"ledger_hash":"07ad792741a48d5a7b657e6c4dc83e3534c79bd1e7da7044139516124adc8f80","messages_hash":"004314c5aec356c4085a994e40d6e7af4228da1e3ad37071c58a406c9d79ea21","txlist_hash":"baab169058840f62c00af1dc51ee0a77fb964dd27c6241463650fdb6c77d3b6a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(659,310245,'insert','blocks','{"block_hash":"59f634832088aced78462dd164efd7081148062a63fd5b669af422f4fb55b7ae","block_index":310245,"block_time":310245000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(659,310244,'insert','blocks','{"block_hash":"59f634832088aced78462dd164efd7081148062a63fd5b669af422f4fb55b7ae","block_index":310245,"block_time":310245000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(660,310245,'parse','blocks','{"block_index":310245,"ledger_hash":"d36a618af8e92da03b373ab0137ded666db6cef906a6b2c0cb8c71057a1a5903","messages_hash":"f256e29cac9ed8fd9084d5ba5c67dcf17a9cfdbf448002b4d23be878f8f6c431","txlist_hash":"18cf40a1489af6f99dc454630c35dddf20acacbf979d47acb30a5831e55f920e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(661,310246,'insert','blocks','{"block_hash":"6f3d690448b1bd04aaf01cd2a8e7016d0618a61088f2b226b442360d02b2e4cd","block_index":310246,"block_time":310246000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(661,310245,'insert','blocks','{"block_hash":"6f3d690448b1bd04aaf01cd2a8e7016d0618a61088f2b226b442360d02b2e4cd","block_index":310246,"block_time":310246000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(662,310246,'parse','blocks','{"block_index":310246,"ledger_hash":"a34e154571ee585a839053a851a007d6d433d3efd2b3e923a9c4ec4bb0dc9d98","messages_hash":"92054cd8a49ac6948cac199791828d3caddd81f90d220fc2da94230f776c98b1","txlist_hash":"a2103af3fa84dc4015979f3a629c46e2234f534f86d7c5a403275a8eae144ba7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(663,310247,'insert','blocks','{"block_hash":"fce808e867645071dc8c198bc9a3757536948b972292f743b1e14d2d8283ed66","block_index":310247,"block_time":310247000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(663,310246,'insert','blocks','{"block_hash":"fce808e867645071dc8c198bc9a3757536948b972292f743b1e14d2d8283ed66","block_index":310247,"block_time":310247000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(664,310247,'parse','blocks','{"block_index":310247,"ledger_hash":"ee94fcb9210718095ccdf63f30ab081f45dff765a9ca4f5c86b1b0d98973ef90","messages_hash":"5498543f7056d1878b53eee6bbfbfc859729deff6215caaf7b228b90c2ae0716","txlist_hash":"39cff977657fdbe649c601531383548a3922cde40dd998c355c201cb6deee9f6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(665,310248,'insert','blocks','{"block_hash":"26c05bbcfef8bcd00d0967e804903d340c337b9d9f3a3e3e5a9773363c3e9275","block_index":310248,"block_time":310248000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(665,310247,'insert','blocks','{"block_hash":"26c05bbcfef8bcd00d0967e804903d340c337b9d9f3a3e3e5a9773363c3e9275","block_index":310248,"block_time":310248000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(666,310248,'parse','blocks','{"block_index":310248,"ledger_hash":"029884a5273466fa45cdfbd91ae3aaca50af0771d22f6b55af6367348c2802e2","messages_hash":"a48928b613ea6f3f01d29fdf8a6627a62af3454eeb3fd706201264e41ad28e71","txlist_hash":"6951bec53cc30ad6d9dd3f38f5fa8e4b876cdb1637595d38614ff3e42b53edce"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(667,310249,'insert','blocks','{"block_hash":"93f5a32167b07030d75400af321ca5009a2cf9fce0e97ea763b92593b8133617","block_index":310249,"block_time":310249000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(667,310248,'insert','blocks','{"block_hash":"93f5a32167b07030d75400af321ca5009a2cf9fce0e97ea763b92593b8133617","block_index":310249,"block_time":310249000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(668,310249,'parse','blocks','{"block_index":310249,"ledger_hash":"dc10674812c5249c693ab7b148d048439a0d77266014f3afc1810a6260838f02","messages_hash":"1e5bb681e064d631c8fdaee31e42df684856a141bb47c387a509b4c888a83644","txlist_hash":"2f53ae50e27194404c5b85dab55335582b2961c6997393a9c48e6708bab8f1dc"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(669,310250,'insert','blocks','{"block_hash":"4364d780ef6a5e11c1bf2e36374e848dbbd8d041cde763f9a2f3b85f5bb017a2","block_index":310250,"block_time":310250000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(669,310249,'insert','blocks','{"block_hash":"4364d780ef6a5e11c1bf2e36374e848dbbd8d041cde763f9a2f3b85f5bb017a2","block_index":310250,"block_time":310250000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(670,310250,'parse','blocks','{"block_index":310250,"ledger_hash":"a0fd49b46ff0000e83d4c56281dfe2be1bbfc924c75969726754b05bf7107641","messages_hash":"58fe2492038e1061f1da22695198180f159b434c09fe8184abb758bfde7dd8ed","txlist_hash":"5148416db7a3e45edd128f1b9b5c61b916ce94f25638cc90a8d73f60afe64176"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(671,310251,'insert','blocks','{"block_hash":"63a3897d988330d59b8876ff13aa9eac968de3807f1800b343bd246571f0dca7","block_index":310251,"block_time":310251000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(671,310250,'insert','blocks','{"block_hash":"63a3897d988330d59b8876ff13aa9eac968de3807f1800b343bd246571f0dca7","block_index":310251,"block_time":310251000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(672,310251,'parse','blocks','{"block_index":310251,"ledger_hash":"bdef6a6203d28d314dc087e539a9cdad19d123b605824f0a66f13bf5f72de9b8","messages_hash":"dc119235a0d3348db073f20e5edd73ba7886d07bd928c6593c8b531697a2e8c3","txlist_hash":"6742a15406482537d29722db3302d492647e4c7487d840fc8e7d74d0806c3bee"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(673,310252,'insert','blocks','{"block_hash":"768d65dfb67d6b976279cbfcf5927bb082fad08037bc0c72127fab0ebab7bc43","block_index":310252,"block_time":310252000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(673,310251,'insert','blocks','{"block_hash":"768d65dfb67d6b976279cbfcf5927bb082fad08037bc0c72127fab0ebab7bc43","block_index":310252,"block_time":310252000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(674,310252,'parse','blocks','{"block_index":310252,"ledger_hash":"8da11bec0d58b196ddb073d3aba0def98f01f83da654765fcae21cae6046214e","messages_hash":"b91883ba3c87f07f7f3075cedc509a164fc69cccb3f7b4955263f0a427fa2555","txlist_hash":"2c11848ca51ba429a094ef40b1aa019c132cd9fd6f954139dab5324d77eb7125"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(675,310253,'insert','blocks','{"block_hash":"bc167428ff6b39acf39fa56f5ca83db24493d8dd2ada59b02b45f59a176dbe9e","block_index":310253,"block_time":310253000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(675,310252,'insert','blocks','{"block_hash":"bc167428ff6b39acf39fa56f5ca83db24493d8dd2ada59b02b45f59a176dbe9e","block_index":310253,"block_time":310253000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(676,310253,'parse','blocks','{"block_index":310253,"ledger_hash":"2efa2c5781899d213741e795ca62fbee9d3ddf53792ce002db7484adc66bfbd4","messages_hash":"8c30b4215455a7b5c4fb35ff4b675702192cf87e37cf3a89be543fd46109e8ca","txlist_hash":"1036976d6406322c4c0afb2c6be13d6b89cfb2feb30306c9df8a499330d5489f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(677,310254,'insert','blocks','{"block_hash":"ebda5a4932d24f6cf250ffbb9232913ae47af84d0f0317c12ae6506c05db26e0","block_index":310254,"block_time":310254000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(677,310253,'insert','blocks','{"block_hash":"ebda5a4932d24f6cf250ffbb9232913ae47af84d0f0317c12ae6506c05db26e0","block_index":310254,"block_time":310254000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(678,310254,'parse','blocks','{"block_index":310254,"ledger_hash":"d062ec468e76421d3769a99eb3c8b2cbf4bf393d109ba13b3bce128613fff547","messages_hash":"12b9c9f7b4c06692d2e1c8ccad20ac1ad2be2bea92cbffd939f4ab8d28374fbe","txlist_hash":"098200d06ee21c916a203065eae3cffe8e2c80e32bce890f96e6bee400cf16ee"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(679,310255,'insert','blocks','{"block_hash":"cf36803c1789a98e8524f7bcaff084101d4bc98593ef3c9b9ad1a75d2961f8f4","block_index":310255,"block_time":310255000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(679,310254,'insert','blocks','{"block_hash":"cf36803c1789a98e8524f7bcaff084101d4bc98593ef3c9b9ad1a75d2961f8f4","block_index":310255,"block_time":310255000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(680,310255,'parse','blocks','{"block_index":310255,"ledger_hash":"5c531dc8a7461e9e7a2ead654509d76c9be3427b1d2b75c0ac7ae0e03126c49a","messages_hash":"0ad73b9f29a65b6006fab73449dce8503f1afb74b31cc14d7cbb873df28c48d6","txlist_hash":"b9c0f364e8694264c33b7d993ed45f645410820dd0ff39704b79f6aaa64a46c4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(681,310256,'insert','blocks','{"block_hash":"d0b4cf4e77cbbaee784767f3c75675ab1bf50e733db73fa337aa20edefdd5619","block_index":310256,"block_time":310256000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(681,310255,'insert','blocks','{"block_hash":"d0b4cf4e77cbbaee784767f3c75675ab1bf50e733db73fa337aa20edefdd5619","block_index":310256,"block_time":310256000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(682,310256,'parse','blocks','{"block_index":310256,"ledger_hash":"8da9f0162e15e33e14e5e1e22c2fd847055a65b99eec519dd069a83bb9006b51","messages_hash":"58e3369f4b854d4dcf2b03cebb0d9c22eb74381bf8c4f77e46527f6db4ff9205","txlist_hash":"fbb34ac53fa4a19bb467c92b87291aeafd8bf8c43be49c7d487f962df5c50d21"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(683,310257,'insert','blocks','{"block_hash":"0f42e304acaa582130b496647aa41dcb6b76b5700f7c43dd74b8275c35565f34","block_index":310257,"block_time":310257000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(683,310256,'insert','blocks','{"block_hash":"0f42e304acaa582130b496647aa41dcb6b76b5700f7c43dd74b8275c35565f34","block_index":310257,"block_time":310257000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(684,310257,'parse','blocks','{"block_index":310257,"ledger_hash":"0cf6657db5f3145587a466c05f237289b639668d844abfd8d46430c090b54913","messages_hash":"35b3a89b3adf80381946f70c49cf74fd946b88eb9d243217623c04c645c6be63","txlist_hash":"71c115bc32aefb584d499c054cd09d0ea58ea0cc11d187bd5add8f261f43f055"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(685,310258,'insert','blocks','{"block_hash":"3a0156dd7512738a0a7adba8eeac1815fac224f49312f75b19a36afb744c579f","block_index":310258,"block_time":310258000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(685,310257,'insert','blocks','{"block_hash":"3a0156dd7512738a0a7adba8eeac1815fac224f49312f75b19a36afb744c579f","block_index":310258,"block_time":310258000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(686,310258,'parse','blocks','{"block_index":310258,"ledger_hash":"e340defe4bd84e788f9c5b083849e6aa1d5c7f33123ebe62d7abe04b8a9e312e","messages_hash":"c2f31d665dead39ac346bfc8a6459ef003c35ebe858bf2273cc3a532df345a5a","txlist_hash":"0725d989aaa9e8f1a5604f1807ec8f5aa2db518ec2397479e7e6c48c4d2b04ca"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(687,310259,'insert','blocks','{"block_hash":"e5ed3cdaaf637dd7aa2a7db134253afe716ffdf153e05672df3159b71f8538a9","block_index":310259,"block_time":310259000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(687,310258,'insert','blocks','{"block_hash":"e5ed3cdaaf637dd7aa2a7db134253afe716ffdf153e05672df3159b71f8538a9","block_index":310259,"block_time":310259000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(688,310259,'parse','blocks','{"block_index":310259,"ledger_hash":"03ca0cbce5a5b50988c19c0d4e754240f50821695dca767d1169f8c7f5c1fdcc","messages_hash":"27744046c69e0650cb385182b7b1518085f196c8c2fb11baf13661d2229f4a9c","txlist_hash":"19e343fb3645b7ae94a299eb13691ea02d054e8acef0484a95a4079e42e487b1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(689,310260,'insert','blocks','{"block_hash":"8717ddcc837032ad1dc0bb148ddc0f6a561ed0d483b81abb0c493c5c82ec33cd","block_index":310260,"block_time":310260000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(689,310259,'insert','blocks','{"block_hash":"8717ddcc837032ad1dc0bb148ddc0f6a561ed0d483b81abb0c493c5c82ec33cd","block_index":310260,"block_time":310260000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(690,310260,'parse','blocks','{"block_index":310260,"ledger_hash":"83a3b43e01f4f25ba05b527415baa3e8b8adba319628c245988136bd8fcdfcfe","messages_hash":"d37ff480b33c750eb958bcd17e37f77d69e5ea91ba2cd0fc5bb3368e788691c6","txlist_hash":"de3dee5cacbf5af3aaf1dac7cae860b06af7a2ba227f2bd81840d149354a05db"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(691,310261,'insert','blocks','{"block_hash":"a2a9d8c28ea41df606e81bf99cddb84b593bf5ed1e68743d38d63a7b49a50232","block_index":310261,"block_time":310261000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(691,310260,'insert','blocks','{"block_hash":"a2a9d8c28ea41df606e81bf99cddb84b593bf5ed1e68743d38d63a7b49a50232","block_index":310261,"block_time":310261000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(692,310261,'parse','blocks','{"block_index":310261,"ledger_hash":"e61c12005d60870fee947fff469631ee540b1a0d6b8aa67614cfacc0a9f65ec0","messages_hash":"5656eb27fedc0aa95a07805caadab9816feac61e3a7e97cb67cdfebfef2d3714","txlist_hash":"58b8a751b3daa23993a773073b44d4bb2715075dbe3cc1738f3138383646504e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(693,310262,'insert','blocks','{"block_hash":"e8ebcee80fbf5afb735db18419a68d61a5ffdde1b3f189e51967155c559ee4ce","block_index":310262,"block_time":310262000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(693,310261,'insert','blocks','{"block_hash":"e8ebcee80fbf5afb735db18419a68d61a5ffdde1b3f189e51967155c559ee4ce","block_index":310262,"block_time":310262000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(694,310262,'parse','blocks','{"block_index":310262,"ledger_hash":"c21ac4906d435af5b9ef5576da6bce454f65ef16099b7ee03219a4ae1851bb91","messages_hash":"df2d34002ae7a0a83629c3023a29af627de3da68afd4369cae55737968d1ce5f","txlist_hash":"a1e30e203c037b242cb1a41e5fd948828da8192a5db70453602961183a00d36d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(695,310263,'insert','blocks','{"block_hash":"f5a2d8d77ac9aac8f0c9218eecbb814e4dd0032ec764f15c11407072e037b3c2","block_index":310263,"block_time":310263000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(695,310262,'insert','blocks','{"block_hash":"f5a2d8d77ac9aac8f0c9218eecbb814e4dd0032ec764f15c11407072e037b3c2","block_index":310263,"block_time":310263000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(696,310263,'parse','blocks','{"block_index":310263,"ledger_hash":"676f6c532ff23839fef228a9fac7719e77a3c20efdc17f3cb2d13035c78820e8","messages_hash":"a5e5e3d49738214545b92d1afd827fb69c457af8294d891460eb14ef72bbae9e","txlist_hash":"ca47834be7a15554ab2dd401462d7d5c14f3f5f9ef9ba715488b1b3704de15ab"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(697,310264,'insert','blocks','{"block_hash":"ae968fb818cd631d3e3774d176c24ae6a035de4510b133f0a0dd135dc0ae7416","block_index":310264,"block_time":310264000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(697,310263,'insert','blocks','{"block_hash":"ae968fb818cd631d3e3774d176c24ae6a035de4510b133f0a0dd135dc0ae7416","block_index":310264,"block_time":310264000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(698,310264,'parse','blocks','{"block_index":310264,"ledger_hash":"258854505b1d3067bf360f3d0dcb369ed7a90fec8744578d3dde51a79db72c25","messages_hash":"d06a0daa493d2c5c4a16315a0c4e43447a5cefd995df309dcf6709a2631f1fcf","txlist_hash":"21f8b38aa107a9c6fbd6439244ce85a8a6abd12fde211c4569d28353cad5b8bd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(699,310265,'insert','blocks','{"block_hash":"41b50a1dfd10119afd4f288c89aad1257b22471a7d2177facb328157ed6346a1","block_index":310265,"block_time":310265000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(699,310264,'insert','blocks','{"block_hash":"41b50a1dfd10119afd4f288c89aad1257b22471a7d2177facb328157ed6346a1","block_index":310265,"block_time":310265000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(700,310265,'parse','blocks','{"block_index":310265,"ledger_hash":"72ab32c420a7dcac0e7c36c4d9ca81e237955b4d8bc57c87078ba292923ce98d","messages_hash":"f1bc84e08951dedc768f03db9aec057ac21d9a3eedbd644018defb10dfdd028c","txlist_hash":"9685f9791c085e79a3c298dfe4f49fd1dbf8b4bdacf45e1d25e7d18382ca0e7c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(701,310266,'insert','blocks','{"block_hash":"1c7c8fa2dc51e8f3cecd776435e68c10d0da238032ebba29cbd4e18b6c299431","block_index":310266,"block_time":310266000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(701,310265,'insert','blocks','{"block_hash":"1c7c8fa2dc51e8f3cecd776435e68c10d0da238032ebba29cbd4e18b6c299431","block_index":310266,"block_time":310266000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(702,310266,'parse','blocks','{"block_index":310266,"ledger_hash":"b81386d19aac285fee4e39a818cb0442e378372f7d55f92e6028b37f974e4a61","messages_hash":"31341dfe24064025c6a6fe45b2443ca21d461280708f8070481a46a096880844","txlist_hash":"578600253e06f32b4ee4a312df8213ea7cf12f841858bdf6123b0169cb4bd42e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(703,310267,'insert','blocks','{"block_hash":"c0aa0f7d4b7bb6842bf9f86f1ff7f028831ee7e7e2d7e495cc85623e5ad39199","block_index":310267,"block_time":310267000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(703,310266,'insert','blocks','{"block_hash":"c0aa0f7d4b7bb6842bf9f86f1ff7f028831ee7e7e2d7e495cc85623e5ad39199","block_index":310267,"block_time":310267000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(704,310267,'parse','blocks','{"block_index":310267,"ledger_hash":"ea8fef9e82e451d9650777b051f19fe5e34b8976f1bcc1880b6eebe5feda34d5","messages_hash":"f153cb888d8bbdf63f4eb45b9cc3b87d6e5ab845eb202deaa48c9d57ab78f23f","txlist_hash":"face84fc0aa45f7b072d73d4930b32e223cc4c22a620c39334fc836e16b2fb5c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(705,310268,'insert','blocks','{"block_hash":"b476840cc1ce090f6cf61d31a01807864e0a18dc117d60793d34df4f748189af","block_index":310268,"block_time":310268000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(705,310267,'insert','blocks','{"block_hash":"b476840cc1ce090f6cf61d31a01807864e0a18dc117d60793d34df4f748189af","block_index":310268,"block_time":310268000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(706,310268,'parse','blocks','{"block_index":310268,"ledger_hash":"1545d381812f0f0caa827a237f145838276fe058b05af4808615738ca9910bf1","messages_hash":"f5a8f5bd5e8cae447a96b75fc4b9a0d70e818a9654206cb23ad8d5ea07e92831","txlist_hash":"ee67f9fcd6ce50ee98da722352a917a46d3c71d2e5ea50294a55c613817e77dd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(707,310269,'insert','blocks','{"block_hash":"37460a2ed5ecbad3303fd73e0d9a0b7ba1ab91b552a022d5f300b4da1b14e21e","block_index":310269,"block_time":310269000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(707,310268,'insert','blocks','{"block_hash":"37460a2ed5ecbad3303fd73e0d9a0b7ba1ab91b552a022d5f300b4da1b14e21e","block_index":310269,"block_time":310269000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(708,310269,'parse','blocks','{"block_index":310269,"ledger_hash":"fd9cf61ac6e1fba409e4220a141ed6c89c18c893c7a752af53d5f7608bc04a67","messages_hash":"c30fd1c2fa3af21d093e353716fc4c1e8cde49854002a411d98e2a0e76211911","txlist_hash":"6d1424cf68a5b1dfddbbafb260989c5b27c060a40026e829476d979cbd8f4412"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(709,310270,'insert','blocks','{"block_hash":"a534f448972c42450ad7b7a7b91a084cf1e9ad08863107ef5abc2b2b4997395d","block_index":310270,"block_time":310270000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(709,310269,'insert','blocks','{"block_hash":"a534f448972c42450ad7b7a7b91a084cf1e9ad08863107ef5abc2b2b4997395d","block_index":310270,"block_time":310270000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(710,310270,'parse','blocks','{"block_index":310270,"ledger_hash":"1d34c8c0dfdb4733a7b589647abb0e6a08f8de93a5c86fbab786f6d9d1500785","messages_hash":"bba3fcf5f4baf2b28664137cb7ac723d03999e9a17eebe6e564e15300415e455","txlist_hash":"fc2696c78afd3051d10ea3ecc56280d2633b732a7c755b9057aa30fb11f58f53"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(711,310271,'insert','blocks','{"block_hash":"67e6efb2226a2489d4c1d7fd5dd4c38531aca8e3d687062d2274aa5348363b0b","block_index":310271,"block_time":310271000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(711,310270,'insert','blocks','{"block_hash":"67e6efb2226a2489d4c1d7fd5dd4c38531aca8e3d687062d2274aa5348363b0b","block_index":310271,"block_time":310271000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(712,310271,'parse','blocks','{"block_index":310271,"ledger_hash":"cf38baabc6e8a082eba1bd8ca2f72af5eb01cb76bd3c9eb101b27080a3a70d17","messages_hash":"2d5aba60683d839b1579c2b69089c00819349fc4f4b6abc5a48f665230f67c91","txlist_hash":"b28638da352abf83f2250bbc2da0f75b14483d7d4c69c93636484e9e3aaa326a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(713,310272,'insert','blocks','{"block_hash":"6015ede3e28e642cbcf60bc8d397d066316935adbce5d27673ea95e8c7b78eea","block_index":310272,"block_time":310272000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(713,310271,'insert','blocks','{"block_hash":"6015ede3e28e642cbcf60bc8d397d066316935adbce5d27673ea95e8c7b78eea","block_index":310272,"block_time":310272000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(714,310272,'parse','blocks','{"block_index":310272,"ledger_hash":"2b2763fa5ab2962582c303062da8b8da7280274e615b3e37f93a32e44793ccc8","messages_hash":"52e5adc7e30dfef0bcb7404f93c28177366b172a8f5c8713aa69c712f479b5fb","txlist_hash":"329d5096486b8dc452e2a1ee0a36d9a17ddd5bbb3149ddeee2bdb4989a7a3a35"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(715,310273,'insert','blocks','{"block_hash":"625dad04c47f3f1d7f0794fe98d80122c7621284d0c3cf4a110a2e4f2153c96a","block_index":310273,"block_time":310273000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(715,310272,'insert','blocks','{"block_hash":"625dad04c47f3f1d7f0794fe98d80122c7621284d0c3cf4a110a2e4f2153c96a","block_index":310273,"block_time":310273000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(716,310273,'parse','blocks','{"block_index":310273,"ledger_hash":"ff9df73d4f92b7557c36f20d8f622923dda225a1ae2871e60f16ee2dfdf5b9d8","messages_hash":"a4460c33d3af7eaf48cff39abbffd1b68bba521b1e1f814f0add5c91b00fdb27","txlist_hash":"f79f73097410b602df3a98901e26ed37d07f1da95249cf0e3a62c811d4f7de3a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(717,310274,'insert','blocks','{"block_hash":"925266253df52bed8dc44148f22bbd85648840f83baee19a9c1ab0a4ce8003b6","block_index":310274,"block_time":310274000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(717,310273,'insert','blocks','{"block_hash":"925266253df52bed8dc44148f22bbd85648840f83baee19a9c1ab0a4ce8003b6","block_index":310274,"block_time":310274000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(718,310274,'parse','blocks','{"block_index":310274,"ledger_hash":"ece29ec2cd160d7634009f41cc2d0f13330d53ec6971c019d69dfa4367f86646","messages_hash":"4daa321a8062e35b68c85d63c6c71cba86af28cad34ce1ae7a4a971f34addfcf","txlist_hash":"bf01b445bc208b9efcb314f1cfa1ea4300fc152ad46a973044abf56dc74e9c62"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(719,310275,'insert','blocks','{"block_hash":"85adc228e31fb99c910e291e36e3c6eafdfd7dcaebf5609a6e017269a6c705c9","block_index":310275,"block_time":310275000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(719,310274,'insert','blocks','{"block_hash":"85adc228e31fb99c910e291e36e3c6eafdfd7dcaebf5609a6e017269a6c705c9","block_index":310275,"block_time":310275000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(720,310275,'parse','blocks','{"block_index":310275,"ledger_hash":"23738d6d8dbf8b44b481f6c0eade991987c84e8025fe1f484c7acd3ead7f4163","messages_hash":"3e156c57def9f6dcf24682ed855311663d61079a0422522c3b660d80a4e88430","txlist_hash":"c0f70c46688ecb9eccaa94bdcbb3fc54eaf3af76cc450b62dfd7a9513bbbd50f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(721,310276,'insert','blocks','{"block_hash":"ba172f268e6d1a966075623814c8403796b4eab22ef9885345c7b59ab973cc77","block_index":310276,"block_time":310276000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(721,310275,'insert','blocks','{"block_hash":"ba172f268e6d1a966075623814c8403796b4eab22ef9885345c7b59ab973cc77","block_index":310276,"block_time":310276000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(722,310276,'parse','blocks','{"block_index":310276,"ledger_hash":"a241e1cb19bfbebb3bbb09c6471760b8379ddc73a67d69b4d84fd1d21dfb7034","messages_hash":"f42264c5306769fc6bd1bd6f1955900113ec16b625e06d62ff3001b2e6b69707","txlist_hash":"99d32cb4d9b52ec0726c907330b2a60d7cf8380c8012f804cf8838bee1b0ecec"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(723,310277,'insert','blocks','{"block_hash":"c74bd3d505a05204eb020119b72a291a2684f5a849682632e4f24b73e9524f93","block_index":310277,"block_time":310277000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(723,310276,'insert','blocks','{"block_hash":"c74bd3d505a05204eb020119b72a291a2684f5a849682632e4f24b73e9524f93","block_index":310277,"block_time":310277000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(724,310277,'parse','blocks','{"block_index":310277,"ledger_hash":"0efa57fd462031a87831832a789ed7751aac5f6c19a23767555b3f7145d87532","messages_hash":"236d34af3aa5893e9aecc8fb65c1efedc4f4e38874a2b20b933c973da4b4691e","txlist_hash":"08e71c5246f1225a02a00c8b52bb7a92c6937da9c9659129a5dcd2981069bbb3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(725,310278,'insert','blocks','{"block_hash":"7945512bca68961325e5e1054df4d02ee87a0bc60ac4e1306be3d95479bada05","block_index":310278,"block_time":310278000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(725,310277,'insert','blocks','{"block_hash":"7945512bca68961325e5e1054df4d02ee87a0bc60ac4e1306be3d95479bada05","block_index":310278,"block_time":310278000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(726,310278,'parse','blocks','{"block_index":310278,"ledger_hash":"0045189a4da126b22e91e4bc2a7ac37dc90ec0869b7fcbc927919fca4cce5259","messages_hash":"a70fb335be86478d6730dbcbcc8d738e5e3f55608f445b5a033f9f5800951167","txlist_hash":"6e3580c7af675e8fdd1c5366a7af2e387f8d8d9192589794883a28ad2ce6a499"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(727,310279,'insert','blocks','{"block_hash":"1a9417f9adc7551b82a8c9e1e79c0639476ed9329e0233e7f0d6499618d04b4f","block_index":310279,"block_time":310279000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(727,310278,'insert','blocks','{"block_hash":"1a9417f9adc7551b82a8c9e1e79c0639476ed9329e0233e7f0d6499618d04b4f","block_index":310279,"block_time":310279000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(728,310279,'parse','blocks','{"block_index":310279,"ledger_hash":"442b7d4dee025b81c298ca0f6a5b9dbdf17ed0087fc36eab7f0671d5a19c9a2c","messages_hash":"7244980c44845ce8bd26268b39a1204f014f6c18f968f57dd2e765193b71dcb2","txlist_hash":"04f51f4c3de467be5cfb32cccba5cd482eb14657d7f67a60820204fa22afaa41"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(729,310280,'insert','blocks','{"block_hash":"bf2195835108e32903e4b57c8dd7e25b4d15dd96b4b000d3dbb62f609f800142","block_index":310280,"block_time":310280000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(729,310279,'insert','blocks','{"block_hash":"bf2195835108e32903e4b57c8dd7e25b4d15dd96b4b000d3dbb62f609f800142","block_index":310280,"block_time":310280000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(730,310280,'parse','blocks','{"block_index":310280,"ledger_hash":"38d7f98ae9cfb8e3938032dc33899e2e3e5a88e9037571cdddf8ed4709fc8225","messages_hash":"0b2884e47006914acf505e50ea5272ffeef43e2a646cf0b1c57afc47bf943c5d","txlist_hash":"d25ed55e962a45fbade2012c35ef507dd76fa0c67553343bb6568569bf1c08ca"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(731,310281,'insert','blocks','{"block_hash":"4499b9f7e17fc1ecc7dc54c0c77e57f3dc2c9ea55593361acbea0e456be8830f","block_index":310281,"block_time":310281000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(731,310280,'insert','blocks','{"block_hash":"4499b9f7e17fc1ecc7dc54c0c77e57f3dc2c9ea55593361acbea0e456be8830f","block_index":310281,"block_time":310281000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(732,310281,'parse','blocks','{"block_index":310281,"ledger_hash":"51237cee3b85f1636e336259b115fad87acc830c71e13ca79e344efb7c308ecc","messages_hash":"ff50d8f5f8dcce283b687ce2aff46b5b1250eb43a11bb5996164444879dffb31","txlist_hash":"77eb5540b9f1e2f80cd3cb8572ee80bc112391e0236b560749aaf9952fb6705b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(733,310282,'insert','blocks','{"block_hash":"51a29336aa32e5b121b40d4eba0beb0fd337c9f622dacb50372990e5f5134e6f","block_index":310282,"block_time":310282000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(733,310281,'insert','blocks','{"block_hash":"51a29336aa32e5b121b40d4eba0beb0fd337c9f622dacb50372990e5f5134e6f","block_index":310282,"block_time":310282000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(734,310282,'parse','blocks','{"block_index":310282,"ledger_hash":"73adccef91b5c738e8810d4781a38edf98d2aa0a8cb619d575e9bdeda979f1fb","messages_hash":"02e7b49dd579b3355aa9063b38bec6e6e749b3cb5882483d3b15886e176f0610","txlist_hash":"889f3e1047c8ca362c1ce4749d1c7ad167dab1e5f85e509d114b1ba1bac8f240"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(735,310283,'insert','blocks','{"block_hash":"df8565428e67e93a62147b440477386758da778364deb9fd0c81496e0321cf49","block_index":310283,"block_time":310283000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(735,310282,'insert','blocks','{"block_hash":"df8565428e67e93a62147b440477386758da778364deb9fd0c81496e0321cf49","block_index":310283,"block_time":310283000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(736,310283,'parse','blocks','{"block_index":310283,"ledger_hash":"5853e60a1b79d4f154cc1f3dc8b0a4d6130ac07784bac16f257f92b9ef294144","messages_hash":"25008bffd8cec7dc2c3ae13ac7c9e868129e3b9203911aa0fa3db14f5fc89a9b","txlist_hash":"1ce62f0a42cb7ecd8c35436253e8234b83e81ba5abc757965b5041400139eee2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(737,310284,'insert','blocks','{"block_hash":"f9d05d83d3fa7bb3f3c79b8c554301d20f12fbb953f82616ac4aad6e6cc0abe7","block_index":310284,"block_time":310284000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(737,310283,'insert','blocks','{"block_hash":"f9d05d83d3fa7bb3f3c79b8c554301d20f12fbb953f82616ac4aad6e6cc0abe7","block_index":310284,"block_time":310284000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(738,310284,'parse','blocks','{"block_index":310284,"ledger_hash":"ce33194cb67aa0a5facd788cc24706ef249bcecc95a9965f91065146b33e464b","messages_hash":"4bb8f22e461d70d953ff1b9f0ced8b1cb143ab1b8dc38bd3a1fe3fc803ccd40a","txlist_hash":"c354cfcb046ca331ae57c00f64b56defd034278e5616ef7d1f3e559dc538bf0a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(739,310285,'insert','blocks','{"block_hash":"8cef48dbc69cd0a07a5acd4f4190aa199ebce996c47e24ecc44f17de5e3c285a","block_index":310285,"block_time":310285000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(739,310284,'insert','blocks','{"block_hash":"8cef48dbc69cd0a07a5acd4f4190aa199ebce996c47e24ecc44f17de5e3c285a","block_index":310285,"block_time":310285000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(740,310285,'parse','blocks','{"block_index":310285,"ledger_hash":"3af35e85e98aebe1a9c778570c730bf80e085a08ca707c1a5d44b50f2579e71c","messages_hash":"509ae7a1014f0442bec8eb032d144c64dc8a11e6970d0e32a5ecc4d41fe68760","txlist_hash":"35e84bd8780b8efbdc3207b9fef22e12ff71798477971a50088b9c8def3c77ed"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(741,310286,'insert','blocks','{"block_hash":"d4e01fb028cc6f37497f2231ebf6c00125b12e5353e65bdbf5b2ce40691d47d0","block_index":310286,"block_time":310286000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(741,310285,'insert','blocks','{"block_hash":"d4e01fb028cc6f37497f2231ebf6c00125b12e5353e65bdbf5b2ce40691d47d0","block_index":310286,"block_time":310286000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(742,310286,'parse','blocks','{"block_index":310286,"ledger_hash":"4b09b627adda46ee7cf7116102a330ba2aa1ce714b2fa133f7952af34a52ede9","messages_hash":"a7bcd9f0ef4a4deb4603c21e799e2c9418c9a085af6aee86082d3c79a7b4d880","txlist_hash":"5a868b89444476076be22e42526c4462c5b865012d9970b917376c5342750311"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(743,310287,'insert','blocks','{"block_hash":"a78514aa15a5096e4d4af3755e090390727cfa628168f1d35e8ac1d179fb51f4","block_index":310287,"block_time":310287000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(743,310286,'insert','blocks','{"block_hash":"a78514aa15a5096e4d4af3755e090390727cfa628168f1d35e8ac1d179fb51f4","block_index":310287,"block_time":310287000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(744,310287,'parse','blocks','{"block_index":310287,"ledger_hash":"67786e4ffab15cb78c7bb44ef160d1e5d99b599eecb5ff4f906a6599d744d410","messages_hash":"a0940fad3e49fdf8668dcb4c9d773e1a5eca6fd5ef23fcdf4be0ccd1cbbfe405","txlist_hash":"791a49e50583660824bb3ec141a54951c2fd737ed963b1e65b653c22a4fc4a84"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(745,310288,'insert','blocks','{"block_hash":"2a5c5b3406a944a9ae2615f97064de9af5da07b0258d58c1d6949e95501249e7","block_index":310288,"block_time":310288000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(745,310287,'insert','blocks','{"block_hash":"2a5c5b3406a944a9ae2615f97064de9af5da07b0258d58c1d6949e95501249e7","block_index":310288,"block_time":310288000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(746,310288,'parse','blocks','{"block_index":310288,"ledger_hash":"600716d2696160b3ba290636180f2afa24bf8d24435022b4539a4cc965c18dfc","messages_hash":"4dd23e9dbda9e5647e194648a2be3ef8597c5f9c4c0e5c58448d4195599de8c8","txlist_hash":"3a1e3da301643f22a9b2719922a4621879b2c2d8b790e646f135bc3b5d165e65"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(747,310289,'insert','blocks','{"block_hash":"dda3dc28762969f5b068768d52ddf73f04674ffeddb1cc4f6a684961ecca8f75","block_index":310289,"block_time":310289000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(747,310288,'insert','blocks','{"block_hash":"dda3dc28762969f5b068768d52ddf73f04674ffeddb1cc4f6a684961ecca8f75","block_index":310289,"block_time":310289000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(748,310289,'parse','blocks','{"block_index":310289,"ledger_hash":"cd6d4b17759152edbf25fd72dce9b9126ea31a2bb1a5435636801e0ee4be1158","messages_hash":"b406c7ad8001546298d16bfa1f0e77b3396787dc2324be51ce33e9cae0c6fd5a","txlist_hash":"26aeba5ab63445ebd419a02915a835d8d6a0bc25bac49dd799e356325687c8f8"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(749,310290,'insert','blocks','{"block_hash":"fe962fe98ce9f3ee1ed1e71dbffce93735d8004e7a9b95804fb456f18501a370","block_index":310290,"block_time":310290000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(749,310289,'insert','blocks','{"block_hash":"fe962fe98ce9f3ee1ed1e71dbffce93735d8004e7a9b95804fb456f18501a370","block_index":310290,"block_time":310290000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(750,310290,'parse','blocks','{"block_index":310290,"ledger_hash":"04a9135f416dc041d3c1c0216a84fd780d133213c3369691fbf5e8848af9d14f","messages_hash":"dcb7aa5f99cbb70b4d70bf3a360be2c4a5756261a8792856828a6cc1f282a644","txlist_hash":"74c57c7e7db040f0974be44dae944c978ed2ddb01390d616c9bfaa6816ed198e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(751,310291,'insert','blocks','{"block_hash":"1eeb72097fd0bce4c2377160926b25bf8166dfd6e99402570bf506e153e25aa2","block_index":310291,"block_time":310291000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(751,310290,'insert','blocks','{"block_hash":"1eeb72097fd0bce4c2377160926b25bf8166dfd6e99402570bf506e153e25aa2","block_index":310291,"block_time":310291000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(752,310291,'parse','blocks','{"block_index":310291,"ledger_hash":"50f556e01b9e8c135b20187bf863839e651a0d0bf4cfd1008b446531776f7917","messages_hash":"0b50391ad17533ea1807be4941305ee75a013a8a5330139e36818f60a9f7d8ef","txlist_hash":"13ede25257044f3bd98c6905c216bed45b0d054951d2c5e86a3cf4707699a279"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(753,310292,'insert','blocks','{"block_hash":"9c87d12effe7e07dcaf3f71074c0a4f9f8a23c2ed49bf2634dc83e286ba3131d","block_index":310292,"block_time":310292000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(753,310291,'insert','blocks','{"block_hash":"9c87d12effe7e07dcaf3f71074c0a4f9f8a23c2ed49bf2634dc83e286ba3131d","block_index":310292,"block_time":310292000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(754,310292,'parse','blocks','{"block_index":310292,"ledger_hash":"9d4bf4b1c5dba1132a9cbfd78c1d94cbaf15d7648da80c8bc1a8dce12a79eac0","messages_hash":"24b3947f5fbed58b6a9c47ab51ef2e654114be20f84935eaa908c9544e275514","txlist_hash":"1b761ed985b1e55c95598c5c0f37df4a1e06dfd26c17792b1020cf0d28fa9a56"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(755,310293,'insert','blocks','{"block_hash":"bc18127444c7aebf0cdc5d9d30a3108b25dd3f29bf28d904176c986fa5433712","block_index":310293,"block_time":310293000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(755,310292,'insert','blocks','{"block_hash":"bc18127444c7aebf0cdc5d9d30a3108b25dd3f29bf28d904176c986fa5433712","block_index":310293,"block_time":310293000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(756,310293,'parse','blocks','{"block_index":310293,"ledger_hash":"a51a3f9af39175cc9d142eff67811307ad8f51cdd8161aaf0d98af9e2be28efa","messages_hash":"1db78c9abe493106e75d3629d221d046e1d6194e44df8f882be38b521d33ab53","txlist_hash":"2fd7a38fbb17d7b0eec35f2f03a28c4aee7f579d7f42e3ab124cf5eca07869eb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(757,310294,'insert','blocks','{"block_hash":"4d6ee08b06c8a11b88877b941282dc679e83712880591213fb51c2bf1838cd4d","block_index":310294,"block_time":310294000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(757,310293,'insert','blocks','{"block_hash":"4d6ee08b06c8a11b88877b941282dc679e83712880591213fb51c2bf1838cd4d","block_index":310294,"block_time":310294000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(758,310294,'parse','blocks','{"block_index":310294,"ledger_hash":"3e9858caa8e835295aa7e78505ea34ce0726e3f5f6cf9fbc6dc4393a28724a25","messages_hash":"b6d94000a7b7dc674d610bf89faf7c0d43bdc3e8f391f6089ded1557f7f0f286","txlist_hash":"36566c7c396ecf454c6fa6d3b27dd7ad2c138a85edd74672f2e7d9791e77f0b6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(759,310295,'insert','blocks','{"block_hash":"66b8b169b98858de4ceefcb4cbf3a89383e72180a86aeb2694d4f3467a654a53","block_index":310295,"block_time":310295000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(759,310294,'insert','blocks','{"block_hash":"66b8b169b98858de4ceefcb4cbf3a89383e72180a86aeb2694d4f3467a654a53","block_index":310295,"block_time":310295000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(760,310295,'parse','blocks','{"block_index":310295,"ledger_hash":"bf48715799c46d629641ba5b72405f6e6cf0500886da94fcc6fddd306a86b02a","messages_hash":"cc57c30a8b34a715c886a444cedd81ccf2c8be145642f2df64d376d0acf1e1f3","txlist_hash":"2d6b79733125c81413a3e70acf597a11e986893264588da74e9b8a0d5d46e1da"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(761,310296,'insert','blocks','{"block_hash":"75ceb8b7377c650147612384601cf512e27db7b70503d816b392b941531b5916","block_index":310296,"block_time":310296000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(761,310295,'insert','blocks','{"block_hash":"75ceb8b7377c650147612384601cf512e27db7b70503d816b392b941531b5916","block_index":310296,"block_time":310296000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(762,310296,'parse','blocks','{"block_index":310296,"ledger_hash":"08e2361ae4b98387ee43fd7230ea8b296dee677b337f0e211527e3cf29a64e9b","messages_hash":"b77e2a71e0857e990c1cfbb021c0a04fb17b64ec9ba48c60d49e3dd8ecc6b0ac","txlist_hash":"517c81a10cc4219c38e3f947dd862f6983a4a2eb22459dba31f1a656bdf4eeff"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(763,310297,'insert','blocks','{"block_hash":"d8ccb0c27b1ee885d882ab6314a294b2fb13068b877e35539a51caa46171b650","block_index":310297,"block_time":310297000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(763,310296,'insert','blocks','{"block_hash":"d8ccb0c27b1ee885d882ab6314a294b2fb13068b877e35539a51caa46171b650","block_index":310297,"block_time":310297000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(764,310297,'parse','blocks','{"block_index":310297,"ledger_hash":"cfefc3138983a33686dd1fc37f06fa1d7e01d9b218f7242cdd59005633c0ded8","messages_hash":"edcb77f23eb738d688c1ea5732a945d76279766c4a1ee1effd190bf3f726c05b","txlist_hash":"85ae0c384a76e7c93b29204df759293f7a488fc71edf6b4abaea1944fa3a85d7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(765,310298,'insert','blocks','{"block_hash":"8ca08f7c45e9de5dfc053183c3ee5fadfb1a85c9e5ca2570e2480ef05175547a","block_index":310298,"block_time":310298000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(765,310297,'insert','blocks','{"block_hash":"8ca08f7c45e9de5dfc053183c3ee5fadfb1a85c9e5ca2570e2480ef05175547a","block_index":310298,"block_time":310298000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(766,310298,'parse','blocks','{"block_index":310298,"ledger_hash":"25254257d6f6724161b2b73f94d28d3fd40594b4846699b8a2d5f45d205b1fec","messages_hash":"5dc738e17243a84b37564b261267924bce9c6cce7595c74d8808f0cf03432a89","txlist_hash":"0633d67a69ae2c0ea1e7d3c349cfe1f3b753e387446787987c50782ee4601b68"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(767,310299,'insert','blocks','{"block_hash":"a1cdac6a49a5b71bf5802df800a97310bbf964d53e6464563e5490a0b6fef5e9","block_index":310299,"block_time":310299000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(767,310298,'insert','blocks','{"block_hash":"a1cdac6a49a5b71bf5802df800a97310bbf964d53e6464563e5490a0b6fef5e9","block_index":310299,"block_time":310299000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(768,310299,'parse','blocks','{"block_index":310299,"ledger_hash":"756acb1055ec75df8fa70f80e23d75f2b47e75035bfd68802e68308785a2ee14","messages_hash":"f3c6ab9d0253858a08da5dfe893c8266a32c796eb2e4a6c4f64ebd4263f9250d","txlist_hash":"299d47f0c18c1629003069df0afd0bb877b45f06b5609ec171c7b87ae65a0be0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(769,310300,'insert','blocks','{"block_hash":"395b0b4d289c02416af743d28fb7516486dea87844309ebef2663dc21b76dcb2","block_index":310300,"block_time":310300000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(769,310299,'insert','blocks','{"block_hash":"395b0b4d289c02416af743d28fb7516486dea87844309ebef2663dc21b76dcb2","block_index":310300,"block_time":310300000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(770,310300,'parse','blocks','{"block_index":310300,"ledger_hash":"e30027ca81176dc1e79a0ab3a5afbb839a3338dbe9ea6057aebcd383ed884c1d","messages_hash":"40541eb5a9dfd5c5a299a13aac804fb1b87e790891c55b66e9b36b1838dc8dfd","txlist_hash":"8338432f3d159dd15129a269d1cf3866cc7cda8c3845ab349ee6cc240ecd7020"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(771,310301,'insert','blocks','{"block_hash":"52f13163068f40428b55ccb8496653d0e63e3217ce1dbea8deda8407b7810e8a","block_index":310301,"block_time":310301000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(771,310300,'insert','blocks','{"block_hash":"52f13163068f40428b55ccb8496653d0e63e3217ce1dbea8deda8407b7810e8a","block_index":310301,"block_time":310301000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(772,310301,'parse','blocks','{"block_index":310301,"ledger_hash":"4c2bcffc796af76a2607a978289942241e63a6387e0a2ae8fc3d02c6b5519fb0","messages_hash":"7273cf6a0294acc31eea0e0a9af603500f59a9f115b3c5acd5cca992f185f061","txlist_hash":"676af2de3d30fc26112e65d493b9c2401f93822c8e414cc5e7231e60b728e6e0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(773,310302,'insert','blocks','{"block_hash":"ca03ebc1453dbb1b52c8cc1bc6b343d76ef4c1eaac321a0837c6028384b8d5aa","block_index":310302,"block_time":310302000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(773,310301,'insert','blocks','{"block_hash":"ca03ebc1453dbb1b52c8cc1bc6b343d76ef4c1eaac321a0837c6028384b8d5aa","block_index":310302,"block_time":310302000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(774,310302,'parse','blocks','{"block_index":310302,"ledger_hash":"a39fdd7f84d2f6e29b613a8a724bc0902d9abd2d6b4d2f46c3b0512928d69b3f","messages_hash":"b26574ea33e8a4ca0bd958b82248a9fc9fdfe403aa717a9e0ef31474bcc32e58","txlist_hash":"ef3dfc32bc5b72ec279a0229af8bf6548bfb5bf4ed717e3e81ccb7710f802021"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(775,310303,'insert','blocks','{"block_hash":"d4e6600c553f0f1e3c3af36dd9573352a25033920d7b1e9912e7daae3058dcca","block_index":310303,"block_time":310303000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(775,310302,'insert','blocks','{"block_hash":"d4e6600c553f0f1e3c3af36dd9573352a25033920d7b1e9912e7daae3058dcca","block_index":310303,"block_time":310303000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(776,310303,'parse','blocks','{"block_index":310303,"ledger_hash":"23f307ef560a02210f4aae5fe605c6d8af9317ab17f1e1ef0944038a3515da49","messages_hash":"8076e1b2af994482a8868a28ad8b5d41a5fbe2ccb349d65404e7c0dc59c6dd2e","txlist_hash":"d1c0461baeac24d356af8ba5283753c778f8ab0fa222c51b753758268f1e7fa4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(777,310304,'insert','blocks','{"block_hash":"b698b0c6cb64ca397b3616ce0c4297ca94b20a5332dcc2e2b85d43f5b69a4f1c","block_index":310304,"block_time":310304000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(777,310303,'insert','blocks','{"block_hash":"b698b0c6cb64ca397b3616ce0c4297ca94b20a5332dcc2e2b85d43f5b69a4f1c","block_index":310304,"block_time":310304000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(778,310304,'parse','blocks','{"block_index":310304,"ledger_hash":"6baa2ac646d3725fa01111959753844d22181cbbd1801cb12c4208be3709a3a3","messages_hash":"3862df7b71134b605229146563a78a5ca695a37c4d6da4b65d21876129c80f1b","txlist_hash":"96ea912eae3265566ab229e5d5a25354c0713471d73d866b9a09c9b2954d53e5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(779,310305,'insert','blocks','{"block_hash":"cfba0521675f1e08aef4ecdbc2848fe031e47f8b41014bcd4b5934c1aa483c5b","block_index":310305,"block_time":310305000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(779,310304,'insert','blocks','{"block_hash":"cfba0521675f1e08aef4ecdbc2848fe031e47f8b41014bcd4b5934c1aa483c5b","block_index":310305,"block_time":310305000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(780,310305,'parse','blocks','{"block_index":310305,"ledger_hash":"c366fd009860a090c632131eae9380820e512009bbbaa6f7bc5529afab7a88c1","messages_hash":"3b6505bd17f14fef0f06cf95c6bd3d3d759479674824f738b1c7fecc151b9b44","txlist_hash":"35584be5484303aa263d746735209b04d92a6baa6045e2d684496ff5dabe59ef"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(781,310306,'insert','blocks','{"block_hash":"a88a07c577a6f2f137f686036411a866cae27ff8af4e1dfb8290606780ec722a","block_index":310306,"block_time":310306000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(781,310305,'insert','blocks','{"block_hash":"a88a07c577a6f2f137f686036411a866cae27ff8af4e1dfb8290606780ec722a","block_index":310306,"block_time":310306000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(782,310306,'parse','blocks','{"block_index":310306,"ledger_hash":"fd12969b828d689063b4885a0356fc17e5207794d1f5b6a17bdeb8d584815a79","messages_hash":"c052edd088e829c9ac4ae5ca349da7067bfd5dcb8dfec11c4ec1a635d3c8c9e0","txlist_hash":"df65a3a9f318fd30166869a3d5d6eabb9c84399f15a7a50f39422a05ff851997"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(783,310307,'insert','blocks','{"block_hash":"bc5ccf771903eb94e336daf54b134459e1f9dd4465dec9eaa66a8ee0e76d426c","block_index":310307,"block_time":310307000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(783,310306,'insert','blocks','{"block_hash":"bc5ccf771903eb94e336daf54b134459e1f9dd4465dec9eaa66a8ee0e76d426c","block_index":310307,"block_time":310307000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(784,310307,'parse','blocks','{"block_index":310307,"ledger_hash":"e168094d31f56d36e4c3863fe719e6064b08ccc6f3c2adb490b1359360026aee","messages_hash":"3bd3565fc83516439eab9db5ac6d85d8763d16c16bff122cc6e70b5c48246030","txlist_hash":"272ae60ff5120848055f08303e13a982fc66959f3e3b72f7d7461c7f91252944"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(785,310308,'insert','blocks','{"block_hash":"2291ffd9650760ff861660a70403252d078c677bb037a38e9d4a506b10ee2a30","block_index":310308,"block_time":310308000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(785,310307,'insert','blocks','{"block_hash":"2291ffd9650760ff861660a70403252d078c677bb037a38e9d4a506b10ee2a30","block_index":310308,"block_time":310308000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(786,310308,'parse','blocks','{"block_index":310308,"ledger_hash":"523b3bba7b02e2c4e588f21ed14b7b4f6630f887cc89f9361487b581d7e633b5","messages_hash":"4b488ffd95c4d443b431c66d9d4442621cfcb3831e920f8f1d291501e2d3eba9","txlist_hash":"30df282ad2859208c35204fe5e2d395734e041bd9644b8b8626678fdd64058c1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(787,310309,'insert','blocks','{"block_hash":"ca3ca8819aa3e5fc4238d80e5f06f74ca0c0980adbbf5e2be0076243e7731737","block_index":310309,"block_time":310309000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(787,310308,'insert','blocks','{"block_hash":"ca3ca8819aa3e5fc4238d80e5f06f74ca0c0980adbbf5e2be0076243e7731737","block_index":310309,"block_time":310309000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(788,310309,'parse','blocks','{"block_index":310309,"ledger_hash":"effe1a68917014086da3bf8696f6c13f3cf2cb5cbd6c18b80ed622e476cff017","messages_hash":"5b336477cd043069fc94aaa9efeec573f8ea2f1915382602469f2ab6bed6d717","txlist_hash":"197a65735f9d06d433abdd01f29f44ec697ba537ead9107ebe9cd889393a053c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(789,310310,'insert','blocks','{"block_hash":"07cd7252e3e172168e33a1265b396c3708ae43b761d02448add81e476b1bcb2c","block_index":310310,"block_time":310310000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(789,310309,'insert','blocks','{"block_hash":"07cd7252e3e172168e33a1265b396c3708ae43b761d02448add81e476b1bcb2c","block_index":310310,"block_time":310310000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(790,310310,'parse','blocks','{"block_index":310310,"ledger_hash":"968fb8a7409531a27ffb52af484e7c1076f05b58f9a51bf9cf3d5a7d83b12002","messages_hash":"d4b6b0de6209af38f0a99ee7cc1e629039233cba66bbd546aa874c9b5ec949fd","txlist_hash":"b9b9eef5f4c1720522286ce5f6375613c267684ac330210ab664e29219065cc0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(791,310311,'insert','blocks','{"block_hash":"2842937eabfdd890e3f233d11c030bed6144b884d3a9029cd2252126221caf36","block_index":310311,"block_time":310311000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(791,310310,'insert','blocks','{"block_hash":"2842937eabfdd890e3f233d11c030bed6144b884d3a9029cd2252126221caf36","block_index":310311,"block_time":310311000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(792,310311,'parse','blocks','{"block_index":310311,"ledger_hash":"8c69639a757d0195594fa1da3f6b35a0e8c62b8df7f95db81e26d496b8c9dd72","messages_hash":"9f34557e605c362c267d01a10c0e1230b96311675cf37ac22fefef3e348f90e6","txlist_hash":"86b9b4356e26ab703e29060a4ff1be0c5cad328b2490d983eae10c24369a1649"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(793,310312,'insert','blocks','{"block_hash":"8168511cdfdc0018672bf22f3c6808af709430dd0757609abe10fcd0c3aabfd7","block_index":310312,"block_time":310312000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(793,310311,'insert','blocks','{"block_hash":"8168511cdfdc0018672bf22f3c6808af709430dd0757609abe10fcd0c3aabfd7","block_index":310312,"block_time":310312000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(794,310312,'parse','blocks','{"block_index":310312,"ledger_hash":"8d839bac01b9aae5e554f691ae0ee42cee072f9367fcc2811d4b3f65640cfcad","messages_hash":"06ab0afed2be45271b993ebf500b3fca4df8e920441577bcb1842206129b58f2","txlist_hash":"802b3d153e101c2772b1c96c851efab754f77fd3fd7eb59848d510f8994a9d86"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(795,310313,'insert','blocks','{"block_hash":"7c1b734c019c4f3e27e8d5cbee28e64aa6c66bb041d2a450e03537e3fac8e7e5","block_index":310313,"block_time":310313000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(795,310312,'insert','blocks','{"block_hash":"7c1b734c019c4f3e27e8d5cbee28e64aa6c66bb041d2a450e03537e3fac8e7e5","block_index":310313,"block_time":310313000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(796,310313,'parse','blocks','{"block_index":310313,"ledger_hash":"1377f4255bfd7ff6638734733a4b8faec97fd62aeb954e42b477c875ccc50b73","messages_hash":"471dc3888257e83dc49fb7acb75a3d327ccfc572fa4c2a597f68e97ced7b706c","txlist_hash":"e96392425727ab5eb4e16a61aef7d28cd0826ad7bc1d8266b3c187bb22bb5d51"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(797,310314,'insert','blocks','{"block_hash":"1ce78314eee22e87ccae74ff129b1803115a953426a5b807f2c55fb10fb63dc8","block_index":310314,"block_time":310314000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(797,310313,'insert','blocks','{"block_hash":"1ce78314eee22e87ccae74ff129b1803115a953426a5b807f2c55fb10fb63dc8","block_index":310314,"block_time":310314000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(798,310314,'parse','blocks','{"block_index":310314,"ledger_hash":"8ed80d44f0d6ad01a30611d94b91f735ef3a166cf0dfa7531492a3e4ac7c29f1","messages_hash":"d0edc182ab52e7db475d67edfa4b8d9b4d4bfaa79351ab7c7d0a93cc1e63e465","txlist_hash":"17d9134674657a9958c43efaea302df438762233e7e5d57811b71378e3d62695"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(799,310315,'insert','blocks','{"block_hash":"bd356b1bce263f7933fb4b64cf8298d2f085ca1480975d6346a8f5dab0db72cb","block_index":310315,"block_time":310315000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(799,310314,'insert','blocks','{"block_hash":"bd356b1bce263f7933fb4b64cf8298d2f085ca1480975d6346a8f5dab0db72cb","block_index":310315,"block_time":310315000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(800,310315,'parse','blocks','{"block_index":310315,"ledger_hash":"24b5905cf0d5349b7031870af9677916892e3292fa61455a75e84c1605a398ba","messages_hash":"f96452fa9d526175036d137afc49a849f0839c4338d29815ee3eac02e3df6f91","txlist_hash":"d8bad5e8a6ab63c8e0394c200e6b90cb2a1feabe3f58dc0faaaab59bb0b82654"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(801,310316,'insert','blocks','{"block_hash":"ea9e5e747996c8d8741877afdcf296413126e2b45c693f3abdb602a5dae3fa44","block_index":310316,"block_time":310316000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(801,310315,'insert','blocks','{"block_hash":"ea9e5e747996c8d8741877afdcf296413126e2b45c693f3abdb602a5dae3fa44","block_index":310316,"block_time":310316000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(802,310316,'parse','blocks','{"block_index":310316,"ledger_hash":"a191657253ca159739403f35417ef74637b053db49c7db62465fde4c54e69239","messages_hash":"cf505f0c309fbaecae7d9e525557f8d1501a3a08d66bb8a7abc8d2a8db721add","txlist_hash":"daf2edaf9fb8e7f718f56cff9e570869297ce6bd350794501b05e02a541e1c84"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(803,310317,'insert','blocks','{"block_hash":"aa8a533edd243f1484917951e45f0b7681446747cebcc54d43c78eda68134d63","block_index":310317,"block_time":310317000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(803,310316,'insert','blocks','{"block_hash":"aa8a533edd243f1484917951e45f0b7681446747cebcc54d43c78eda68134d63","block_index":310317,"block_time":310317000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(804,310317,'parse','blocks','{"block_index":310317,"ledger_hash":"bf6d880b9fa42b0e38523c00c92a898093afd068450be504a0a56bafd69ed647","messages_hash":"af696ec589d2b95f36e16039d388a57c38eafee5f3de5596a97f3c823c77f892","txlist_hash":"740737c2cd6ffb9a5e89e2ae0d34afe5f0bb48d120ae482802b76d07100b6153"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(805,310318,'insert','blocks','{"block_hash":"c1be6c211fbad07a10b96ac7e6850a90c43ba2a38e05d53225d913cc2cf60b03","block_index":310318,"block_time":310318000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(805,310317,'insert','blocks','{"block_hash":"c1be6c211fbad07a10b96ac7e6850a90c43ba2a38e05d53225d913cc2cf60b03","block_index":310318,"block_time":310318000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(806,310318,'parse','blocks','{"block_index":310318,"ledger_hash":"6422eb2cab5937adb9ca2194c025d0dce63cd62e18d7ebd63220207957c942ee","messages_hash":"ff573059e90f4aade75d1f2d950dcf046ef2c1217b589d0bf2fc9c38c6c42012","txlist_hash":"3cb46a2e5b1a3ef3dd37dbe0cc429962982812eb9c7f87b5282a77a4a7f6185c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(807,310319,'insert','blocks','{"block_hash":"f7fc6204a576c37295d0c65aac3d8202db94b6a4fa879fff63510d470dcefa71","block_index":310319,"block_time":310319000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(807,310318,'insert','blocks','{"block_hash":"f7fc6204a576c37295d0c65aac3d8202db94b6a4fa879fff63510d470dcefa71","block_index":310319,"block_time":310319000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(808,310319,'parse','blocks','{"block_index":310319,"ledger_hash":"efb625496aa4365f5ac198a82833c880a60cd5f86d04689463216619cd7d96b8","messages_hash":"73a44e99dcb39be095771e34c74ee4b6a7a0819207807821d621545ca4b6a91f","txlist_hash":"ed69cef0ba9e4a9371deca76209629cc988257493a69006504b96a99b3da4222"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(809,310320,'insert','blocks','{"block_hash":"fd34ebe6ba298ba423d860a62c566c05372521438150e8341c430116824e7e0b","block_index":310320,"block_time":310320000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(809,310319,'insert','blocks','{"block_hash":"fd34ebe6ba298ba423d860a62c566c05372521438150e8341c430116824e7e0b","block_index":310320,"block_time":310320000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(810,310320,'parse','blocks','{"block_index":310320,"ledger_hash":"8c3938d7b3c0a822ebee67f1ecf21b1db6496e19471cf1f2cd00f30325d0c88a","messages_hash":"3abdeb2a4902cacc07440c8f176576963d48190c3e66bce2ccd97cc15d79f752","txlist_hash":"b87169ed018fdc8251d14b58f8d0e09001e45ab5dd76eb2408ab625d34ec584b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(811,310321,'insert','blocks','{"block_hash":"f74be89e9ceb0779f3c7f97c34fb97cd7c51942244cbc2018d17a3f423dd3ae5","block_index":310321,"block_time":310321000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(811,310320,'insert','blocks','{"block_hash":"f74be89e9ceb0779f3c7f97c34fb97cd7c51942244cbc2018d17a3f423dd3ae5","block_index":310321,"block_time":310321000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(812,310321,'parse','blocks','{"block_index":310321,"ledger_hash":"21e4c3a7afd02f183cbb69709fc6c006ab3d38fef3466de1a1870232d1c891bd","messages_hash":"0d0c1c139a2f9304f5111dab26862dd88c97f061ee9ec716cfdfa8f101cf9f2a","txlist_hash":"77ef24833ac345e51eeb48fa9adbb111e31ffa3739298ce12a18d2f581c9a79a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(813,310322,'insert','blocks','{"block_hash":"ce0b1afb355e6fd897e74b556a9441f202e3f2b524d1d88bc54e18f860b57668","block_index":310322,"block_time":310322000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(813,310321,'insert','blocks','{"block_hash":"ce0b1afb355e6fd897e74b556a9441f202e3f2b524d1d88bc54e18f860b57668","block_index":310322,"block_time":310322000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(814,310322,'parse','blocks','{"block_index":310322,"ledger_hash":"01b3b28c4d8eb796827267c06e6362206884e44f40c3f72d9b5c9d1e6cdfb29a","messages_hash":"a803ff9c9a83a885463f0f41b774b09c5dad9ef8827579499cd94cc6ff218858","txlist_hash":"3833d915749baf7aa33484d7a6b6b28e4acf0d78ee0f1b4e8ab44b22d756a3e3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(815,310323,'insert','blocks','{"block_hash":"df82040c0cbd905e7991a88786090b93606168a7248c8b099d6b9c166c7e80fd","block_index":310323,"block_time":310323000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(815,310322,'insert','blocks','{"block_hash":"df82040c0cbd905e7991a88786090b93606168a7248c8b099d6b9c166c7e80fd","block_index":310323,"block_time":310323000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(816,310323,'parse','blocks','{"block_index":310323,"ledger_hash":"a362da58df0d31eeaa93a25c91c17bec62f9cad6ff0c31420584ce293ecafdbc","messages_hash":"fe10c5d1f27a192d9c72377818077b94ff7fee46c54b8bc52cbbca50743ccb56","txlist_hash":"2d41c7286053cb2256526ce42c03ab1288dfa066720e9ae5e5dac4532d512de4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(817,310324,'insert','blocks','{"block_hash":"367d0ac107cbc7f93857d79e6fa96d47b1c98f88b3fdda97c51f9163e2366826","block_index":310324,"block_time":310324000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(817,310323,'insert','blocks','{"block_hash":"367d0ac107cbc7f93857d79e6fa96d47b1c98f88b3fdda97c51f9163e2366826","block_index":310324,"block_time":310324000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(818,310324,'parse','blocks','{"block_index":310324,"ledger_hash":"d1b353ac97e000471c66df8ee04d7b0c25f7eead2414e5648cd2ef334881bad6","messages_hash":"c654695d92ff853e15ec8399c1e5fd6b552b8a2e4da3167f792e2325b21fefa0","txlist_hash":"051b158e05c22a326dd8becd27d142b52477b9209f369599db5c5e25484af157"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(819,310325,'insert','blocks','{"block_hash":"60d50997f57a876b2f9291e1ae19c776df95b2e46c14fe6574fb0e4ce8021eac","block_index":310325,"block_time":310325000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(819,310324,'insert','blocks','{"block_hash":"60d50997f57a876b2f9291e1ae19c776df95b2e46c14fe6574fb0e4ce8021eac","block_index":310325,"block_time":310325000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(820,310325,'parse','blocks','{"block_index":310325,"ledger_hash":"7734300dc764c67fde935dd4432396de4a31cedc2901f3fc70bf1576797cf7b0","messages_hash":"0d9072553790491007aa13b4d406831506f7f770f8ac7fea5ad42db6b6cd2b68","txlist_hash":"7671d8cfff3601fc44132a6d274c1ab1fb0b4fb712041d86eb28157667682251"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(821,310326,'insert','blocks','{"block_hash":"d6f210a1617e1a8eb819fc0e9ef06bd135e15ae65af407e7413f0901f5996573","block_index":310326,"block_time":310326000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(821,310325,'insert','blocks','{"block_hash":"d6f210a1617e1a8eb819fc0e9ef06bd135e15ae65af407e7413f0901f5996573","block_index":310326,"block_time":310326000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(822,310326,'parse','blocks','{"block_index":310326,"ledger_hash":"ebe859a722587fd456695c6a46af7f0bf54c03e940bdbb5424520a8c1fe70617","messages_hash":"e0a3b19fce605701f1ce2ed25cde785ddef37c8ae11a1af97f32f89a9faef45b","txlist_hash":"72884e56565b442c37cbbc572fa762c7b7b3c549c396037393463be7afb089fa"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(823,310327,'insert','blocks','{"block_hash":"9fa4076881b482d234c2085a93526b057ead3c73a6e73c1ed1cdee1a59af8adc","block_index":310327,"block_time":310327000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(823,310326,'insert','blocks','{"block_hash":"9fa4076881b482d234c2085a93526b057ead3c73a6e73c1ed1cdee1a59af8adc","block_index":310327,"block_time":310327000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(824,310327,'parse','blocks','{"block_index":310327,"ledger_hash":"8ced7a546ee2c746d4dc3f0ecd2fb4eaa62c65c4e98be74545d8de22c03526e6","messages_hash":"f2ce43aa9e6374f95a9c5d5b55de0396da45be6575dc5223742c2d70369bd00e","txlist_hash":"ccbabd4fc70b15ebb6f28afa6f96e4a1f0af08e6a3cdfb518ae008432b908739"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(825,310328,'insert','blocks','{"block_hash":"c7ffd388714d8d0fc77e92d05145e6845c72e6bfd32aeb61845515eca2fa2daf","block_index":310328,"block_time":310328000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(825,310327,'insert','blocks','{"block_hash":"c7ffd388714d8d0fc77e92d05145e6845c72e6bfd32aeb61845515eca2fa2daf","block_index":310328,"block_time":310328000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(826,310328,'parse','blocks','{"block_index":310328,"ledger_hash":"bb5d3479e492f52a0b3b69d29852faefdff645f9b113eae82594f57e8aa40b5d","messages_hash":"cb79907543638b77555fac7568f2f744f22ce989dc0e7654fd49e132eb7666c8","txlist_hash":"42fa2df2e053f97e86881395e5d66de912e59bf73eb5be322ab170b06fabd344"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(827,310329,'insert','blocks','{"block_hash":"67fb2e77f8d77924c877a58c1af13e1e16b9df425340ed30e9816a9553fd5a30","block_index":310329,"block_time":310329000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(827,310328,'insert','blocks','{"block_hash":"67fb2e77f8d77924c877a58c1af13e1e16b9df425340ed30e9816a9553fd5a30","block_index":310329,"block_time":310329000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(828,310329,'parse','blocks','{"block_index":310329,"ledger_hash":"4ad2c9d802db762537be19143ef5eca474cd9f749bbbc661cb95bcf1dcb0b02b","messages_hash":"02047850f93eb91d0d83851054da00ed66f6f6c0fea04d627866f6355be4273c","txlist_hash":"a5336a1818452ca9888d582bb5ad8182e00ec37723d42e6769b001069f96232a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(829,310330,'insert','blocks','{"block_hash":"b62c222ad5a41084eb4d779e36f635c922ff8fe275df41a9259f9a54b9adcc0c","block_index":310330,"block_time":310330000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(829,310329,'insert','blocks','{"block_hash":"b62c222ad5a41084eb4d779e36f635c922ff8fe275df41a9259f9a54b9adcc0c","block_index":310330,"block_time":310330000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(830,310330,'parse','blocks','{"block_index":310330,"ledger_hash":"4a9a6b59d56f6b7cf867095d939f9bddbf779141177feda470df3759b7d48be3","messages_hash":"3d6595616fc996c9fd880bc5b227a7e2d436bf27f6f06ab15cd456c4322fffb6","txlist_hash":"263932b9bd949d4b0557a7fcd5597a0c607c722b34e644f9795e4f08713a4436"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(831,310331,'insert','blocks','{"block_hash":"52fb4d803a141f02b12a603244801e2e555a2dffb13a76c93f9ce13f9cf9b21e","block_index":310331,"block_time":310331000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(831,310330,'insert','blocks','{"block_hash":"52fb4d803a141f02b12a603244801e2e555a2dffb13a76c93f9ce13f9cf9b21e","block_index":310331,"block_time":310331000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(832,310331,'parse','blocks','{"block_index":310331,"ledger_hash":"c676b9c31e0e3d74d005ad0a52a18ba34688b6002da5d269bcea0f789a4f8e91","messages_hash":"ba499b294c5cb3d50626ad04df807602e4f3fa955ca6b35795202f437182fd6b","txlist_hash":"646197318fca63f2c8068c0a119f122d02cfea4a5c95201d6cc2eada9ba276a6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(833,310332,'insert','blocks','{"block_hash":"201086b0aab856c8b9c7b57d40762e907746fea722dbed8efb518f4bfd0dfdf2","block_index":310332,"block_time":310332000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(833,310331,'insert','blocks','{"block_hash":"201086b0aab856c8b9c7b57d40762e907746fea722dbed8efb518f4bfd0dfdf2","block_index":310332,"block_time":310332000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(834,310332,'parse','blocks','{"block_index":310332,"ledger_hash":"cf0b702c03ecff4bda1254dd5e96ca580b69d5d02d1f233725fccbe1f5f32000","messages_hash":"a57bfcc468c3f5d57b1b178ea7cc8c1af55f42867d0ba5d88d4e55b2bc79fe02","txlist_hash":"8197afee90f808a95bd5a3dbc9c41618e3a07a3039dc2e2539a94cb023e54a0b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(835,310333,'insert','blocks','{"block_hash":"b7476114e72d4a38d0bebb0b388444619c6f1b62f97b598fed2e1ec7cd08ee82","block_index":310333,"block_time":310333000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(835,310332,'insert','blocks','{"block_hash":"b7476114e72d4a38d0bebb0b388444619c6f1b62f97b598fed2e1ec7cd08ee82","block_index":310333,"block_time":310333000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(836,310333,'parse','blocks','{"block_index":310333,"ledger_hash":"b40359eb197db65549946d93a39b2a732e0694d21b8d0138b9bfce4f5a87ae5b","messages_hash":"7694e14e12a15ab6aa8143f1e9fcaae46b1746f51398d79a4f6be6c3137d6c89","txlist_hash":"c8b269f3fb117e7ea3a9592a023787d886ffc388f91fd651618f807c017c9a67"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(837,310334,'insert','blocks','{"block_hash":"a39eb839c62b127287ea01dd087b2fc3ad59107ef012decae298e40c1dec52cd","block_index":310334,"block_time":310334000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(837,310333,'insert','blocks','{"block_hash":"a39eb839c62b127287ea01dd087b2fc3ad59107ef012decae298e40c1dec52cd","block_index":310334,"block_time":310334000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(838,310334,'parse','blocks','{"block_index":310334,"ledger_hash":"7cb471ec146f9ec1e4d1b93184ea641f7b8088807dedcd1c0be4ca5ba99e80e1","messages_hash":"226e74766ac5ef3a15e7d38c05990871f92ef80cddf954d17759d2ad2ea59d02","txlist_hash":"24eb770852273754585985a5fed612de801663408db3703bb9771d5bcf518cb9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(839,310335,'insert','blocks','{"block_hash":"23bd6092da66032357b13b95206e6527a8d22e6637a097d696d7a96c8858cc89","block_index":310335,"block_time":310335000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(839,310334,'insert','blocks','{"block_hash":"23bd6092da66032357b13b95206e6527a8d22e6637a097d696d7a96c8858cc89","block_index":310335,"block_time":310335000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(840,310335,'parse','blocks','{"block_index":310335,"ledger_hash":"47de747ec20cbec96a6bc4b71f67ea827c7a5a1ab0d3541fd539efac7442d644","messages_hash":"fe3fa4d5ea7f9f18f6564a1857c7ce23e418e46aa5b63b3365d6cf73ab930e07","txlist_hash":"ba840a499b9de3ae457db93220ebb7bf61560f33660b8e7b980178325d114cec"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(841,310336,'insert','blocks','{"block_hash":"ec4b8d0968dbae28789be96ffa5a7e27c3846064683acd7c3eb86f1f0cc58199","block_index":310336,"block_time":310336000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(841,310335,'insert','blocks','{"block_hash":"ec4b8d0968dbae28789be96ffa5a7e27c3846064683acd7c3eb86f1f0cc58199","block_index":310336,"block_time":310336000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(842,310336,'parse','blocks','{"block_index":310336,"ledger_hash":"c216588e623d2b3d03499c7e9f817106b20a8c98765979987633f1e4e50d9594","messages_hash":"1eff4c9279cff57e13e005fad48c92f7f5bd928e4b5a3d7eb102bfd0bccf353a","txlist_hash":"a6c20cca4d22fa5b8357fae640f1a90e3e656f9015eb5db289ef6da17b597f1c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(843,310337,'insert','blocks','{"block_hash":"055247d24ba9860eb2eadf9ec7ea966b86794a0e3727e6ffbcba0af38f2bc34a","block_index":310337,"block_time":310337000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(843,310336,'insert','blocks','{"block_hash":"055247d24ba9860eb2eadf9ec7ea966b86794a0e3727e6ffbcba0af38f2bc34a","block_index":310337,"block_time":310337000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(844,310337,'parse','blocks','{"block_index":310337,"ledger_hash":"a558b47328f54b79a5ad9f7737af0e4df07e13e20f150296370e111879c09c2e","messages_hash":"61eeadd7e8f4c94b41e9f3c67bad3ff29cc1d19f580114b3ca3c2a929596c036","txlist_hash":"15c9f81424d97e28fc5d40b9f74edee6bed3f68f8c81dcf572cbd786626ff353"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(845,310338,'insert','blocks','{"block_hash":"97944272a7e86b716c6587d0da0d2094b6f7e29714daa00fec8677205a049bcd","block_index":310338,"block_time":310338000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(845,310337,'insert','blocks','{"block_hash":"97944272a7e86b716c6587d0da0d2094b6f7e29714daa00fec8677205a049bcd","block_index":310338,"block_time":310338000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(846,310338,'parse','blocks','{"block_index":310338,"ledger_hash":"31bea50c6481fa982eace70df5fc13d2981f1af13962809e3492b493a0dd4905","messages_hash":"0b46e8c3b291dbc65e5a2ba99739bea530eeed734b7cbd0248c3b0ab06e3d817","txlist_hash":"ee8efb364c79aae62d48d0198d7ca348d71f312eaef01daf906fec89d2fe9166"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(847,310339,'insert','blocks','{"block_hash":"99d59ea38842e00c8ba156276582ff67c5fc8c3d3c6929246623d8f51239a052","block_index":310339,"block_time":310339000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(847,310338,'insert','blocks','{"block_hash":"99d59ea38842e00c8ba156276582ff67c5fc8c3d3c6929246623d8f51239a052","block_index":310339,"block_time":310339000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(848,310339,'parse','blocks','{"block_index":310339,"ledger_hash":"6605ca3db3c509fbc8574f2e10a3f981e2ff17b2812946ec8f2b1e49ba44f220","messages_hash":"5771cf30f52a621216658854604973564d9a3a5b659986d3f5ab042a8a4a2674","txlist_hash":"af5e50fc6a529fb06423c8ad7beed13c6e1de1c3f746f53dcedb7af76e0d95ff"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(849,310340,'insert','blocks','{"block_hash":"f7a193f14949aaae1167aebf7a6814c44712d2b19f6bf802e72be5f97dd7f5a0","block_index":310340,"block_time":310340000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(849,310339,'insert','blocks','{"block_hash":"f7a193f14949aaae1167aebf7a6814c44712d2b19f6bf802e72be5f97dd7f5a0","block_index":310340,"block_time":310340000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(850,310340,'parse','blocks','{"block_index":310340,"ledger_hash":"7db1ad1952cac2dda86fff6e5f939010bb30a1da26af438d354e17f423d5bf1f","messages_hash":"9b0c7bd03815d2708a3d6038b3783da0dd241e75b6de17402e89a05ec76e5222","txlist_hash":"f42c5c43148a61dace7d50127d905f236ad738774c20d4f874fc3b824b58cf92"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(851,310341,'insert','blocks','{"block_hash":"6c468431e0169b7df175afd661bc21a66f6b4353160f7a6c9df513a6b1788a7f","block_index":310341,"block_time":310341000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(851,310340,'insert','blocks','{"block_hash":"6c468431e0169b7df175afd661bc21a66f6b4353160f7a6c9df513a6b1788a7f","block_index":310341,"block_time":310341000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(852,310341,'parse','blocks','{"block_index":310341,"ledger_hash":"1a1eef01250d2c53a1b34a8ee5b1e8fce984c3d47d28c544c6e162493b51225b","messages_hash":"d0116b9fb089a2865d1425244075ef65425ce9e5f0f1b70fe7cf97e5ce6b8f47","txlist_hash":"5fcdf7ababadc89a26c3833bc8b819642466504b58323cded8cdb8a904239ce6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(853,310342,'insert','blocks','{"block_hash":"48669c2cb8e6bf2ca7f8e4846816d35396cbc88c349a8d1318ded0598a30edf7","block_index":310342,"block_time":310342000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(853,310341,'insert','blocks','{"block_hash":"48669c2cb8e6bf2ca7f8e4846816d35396cbc88c349a8d1318ded0598a30edf7","block_index":310342,"block_time":310342000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(854,310342,'parse','blocks','{"block_index":310342,"ledger_hash":"3c85c0b825985b04b42137da7e59fb3daaaf9e65b871b79390a4d8b31be5da92","messages_hash":"2a6b0c1cd6ba6cb2fc95fa6fb0ce6369b7959d73680cfa1a09697626bb48f4bb","txlist_hash":"b165c708026f386ddc7206518e594fcef7b5782fa0db77db6ce5b02e3b563145"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(855,310343,'insert','blocks','{"block_hash":"41a1030c13ae11f5565e0045c73d15edc583a1ff6f3a8f5eac94ffcfaf759e11","block_index":310343,"block_time":310343000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(855,310342,'insert','blocks','{"block_hash":"41a1030c13ae11f5565e0045c73d15edc583a1ff6f3a8f5eac94ffcfaf759e11","block_index":310343,"block_time":310343000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(856,310343,'parse','blocks','{"block_index":310343,"ledger_hash":"26f4ea323dd31b715c7a7f4ab8f1feabb199333a8494449ed538ff13215bb3b2","messages_hash":"af3dd05b7f7751705f9bc0aaf099568289d0cc8a62b80cb8cf957b67ae9ccdc0","txlist_hash":"37808f9fb4ad766c671be7e9703aa7c7ea53991fa838400536d25f304ebe8090"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(857,310344,'insert','blocks','{"block_hash":"97b74842207c7cd27160b23d74d7deb603882e4e5e61e2899c96a39b079b3977","block_index":310344,"block_time":310344000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(857,310343,'insert','blocks','{"block_hash":"97b74842207c7cd27160b23d74d7deb603882e4e5e61e2899c96a39b079b3977","block_index":310344,"block_time":310344000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(858,310344,'parse','blocks','{"block_index":310344,"ledger_hash":"444314748cb1fa1c836b3b4de65c3920c7fe446741193e5f77843affe3bee908","messages_hash":"071a2af66f03d51498ea342dce8d818d4b2df9e2e5fb7ca9344988ae7676b0e7","txlist_hash":"52dd50744ce4773a3db8dcf016a392a133ff7ebbeaf293d4ecb4a32fcc575a19"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(859,310345,'insert','blocks','{"block_hash":"0bda7b13d1bc2ba4c3c72e0f27157067677595264d6430038f0b227118de8c65","block_index":310345,"block_time":310345000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(859,310344,'insert','blocks','{"block_hash":"0bda7b13d1bc2ba4c3c72e0f27157067677595264d6430038f0b227118de8c65","block_index":310345,"block_time":310345000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(860,310345,'parse','blocks','{"block_index":310345,"ledger_hash":"d1775816bb104187076be74e78e87fc6d367c3cb31d372329aec2b635002ca2e","messages_hash":"54a59c638ed8ad1a8b9d72d0f9afef9616f7ee9c77b1cce9793ec14119c819dc","txlist_hash":"15f4f9eb55ff5d2b8efb40a57193f253470889b1fb2f532f02b66d236bc902bf"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(861,310346,'insert','blocks','{"block_hash":"0635503844de474dd694ecbcfb93e578268f77a80230a29986dfa7eeade15b16","block_index":310346,"block_time":310346000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(861,310345,'insert','blocks','{"block_hash":"0635503844de474dd694ecbcfb93e578268f77a80230a29986dfa7eeade15b16","block_index":310346,"block_time":310346000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(862,310346,'parse','blocks','{"block_index":310346,"ledger_hash":"3244eed1df8ec4ae0ddb04f9f6e59e54244ca3df10dc21fc89c99c74ba734781","messages_hash":"ed53197fade3b880a6bcd70a41112b83879f5a1b2733dcd044a152f6e06966a1","txlist_hash":"58faa47bcd277d0d52d39a46473882adc797797cf2c30967418fb4ae832dc21d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(863,310347,'insert','blocks','{"block_hash":"f3f6b7e7a27c8da4318f9f2f694f37aaa9255bbdad260cb46f319a4755a1a84d","block_index":310347,"block_time":310347000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(863,310346,'insert','blocks','{"block_hash":"f3f6b7e7a27c8da4318f9f2f694f37aaa9255bbdad260cb46f319a4755a1a84d","block_index":310347,"block_time":310347000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(864,310347,'parse','blocks','{"block_index":310347,"ledger_hash":"6fd1802c269750b69ec04df457d47cd6b44c261340ebd5b4da61f06ede6aa166","messages_hash":"f9b1e1152ba3fd730692c61dc7b897b74290425148717cb0c7d26ddb2b066764","txlist_hash":"716162f3fea6641e6ac697eb11880c5b39903de4ab30fa24e899e363d5c1d9cd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(865,310348,'insert','blocks','{"block_hash":"c912af0d57982701bcda4293ad1ff3456299fd9e4a1da939d8d94bcb86634412","block_index":310348,"block_time":310348000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(865,310347,'insert','blocks','{"block_hash":"c912af0d57982701bcda4293ad1ff3456299fd9e4a1da939d8d94bcb86634412","block_index":310348,"block_time":310348000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(866,310348,'parse','blocks','{"block_index":310348,"ledger_hash":"668330e80a23f499c0e91b01c4c51aab393813b840f81b6b672611e391699faf","messages_hash":"95410fcf3fc291907a1969f9cdc8646a55fd0979f748332a10a298ed1914b4c7","txlist_hash":"8c169d593d4c922ef7d3f530f6de4da37c01716f19ea19b48b122a6135f3e293"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(867,310349,'insert','blocks','{"block_hash":"ca911c788add2e16726f4e194137f595823092482e48ff8dd3bdbe56c203523c","block_index":310349,"block_time":310349000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(867,310348,'insert','blocks','{"block_hash":"ca911c788add2e16726f4e194137f595823092482e48ff8dd3bdbe56c203523c","block_index":310349,"block_time":310349000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(868,310349,'parse','blocks','{"block_index":310349,"ledger_hash":"32b36035ac1684e93126657ecd9711feb689672f64cceb03d220a8089dfacf12","messages_hash":"650e904e246fbaccd362968543bd414fe4e03941d96f0a8c1c7d509fc260b738","txlist_hash":"8d54849ce08f65fd3dd06baf845e5a3132b84c960e6f316c4bbbbe5a3d2b7b01"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(869,310350,'insert','blocks','{"block_hash":"c20d54368c4e558c44e2fbaa0765d3aecc8c9f01d456e3ff219508b5d06bd69d","block_index":310350,"block_time":310350000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(869,310349,'insert','blocks','{"block_hash":"c20d54368c4e558c44e2fbaa0765d3aecc8c9f01d456e3ff219508b5d06bd69d","block_index":310350,"block_time":310350000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(870,310350,'parse','blocks','{"block_index":310350,"ledger_hash":"dbe70bf3b8e4b74ac25c1b6737b6a760e6a06a4f96ee83a5ca728c8501d4af05","messages_hash":"33bc524f9a329407e3509a4623d89f6d2c3e00616c4314b86bab1d1b802a4a6c","txlist_hash":"1e46f66542896fa2ff6048472d49feed3065a6fffaad639da03027b00ce377bf"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(871,310351,'insert','blocks','{"block_hash":"656bd69a59329dbea94b8b22cfdaaec8de9ab50204868f006494d78e7f88e26f","block_index":310351,"block_time":310351000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(871,310350,'insert','blocks','{"block_hash":"656bd69a59329dbea94b8b22cfdaaec8de9ab50204868f006494d78e7f88e26f","block_index":310351,"block_time":310351000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(872,310351,'parse','blocks','{"block_index":310351,"ledger_hash":"89bb7ea865a221a3646f78ea774a7cf1e15e8d65b85ddcfbdf87773145904151","messages_hash":"dbbc0a977c9bf6385e4652c94f97702965df6eae2863730b9930e7aafd8d6c84","txlist_hash":"f99c452388cd3d8aa59f7c75fa06770a116b5f69263dddbb7b5fdcffc7ffc524"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(873,310352,'insert','blocks','{"block_hash":"fb97d2f766a23acb9644fef833e0257fdb74546e50d9e2303cf88d2e82b71a50","block_index":310352,"block_time":310352000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(873,310351,'insert','blocks','{"block_hash":"fb97d2f766a23acb9644fef833e0257fdb74546e50d9e2303cf88d2e82b71a50","block_index":310352,"block_time":310352000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(874,310352,'parse','blocks','{"block_index":310352,"ledger_hash":"fdbf27d576a72b046776be0e5c0a91d060619778aadef3df1d30f1a7785a0fdb","messages_hash":"b2a4a9c315f66980a2a3525b322adf6ff4a47e60649559bd2e7dffb68b58c29a","txlist_hash":"1d2f391bb7990954e14c69c9429b54b9f5a88791ec4b2fba2facb464152417f4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(875,310353,'insert','blocks','{"block_hash":"2d3e451f189fc2f29704b1b09820278dd1eeb347fef11352d7a680c9aecc13b8","block_index":310353,"block_time":310353000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(875,310352,'insert','blocks','{"block_hash":"2d3e451f189fc2f29704b1b09820278dd1eeb347fef11352d7a680c9aecc13b8","block_index":310353,"block_time":310353000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(876,310353,'parse','blocks','{"block_index":310353,"ledger_hash":"73429d323376209447edc6d2ddbfd51f0bcde21736ea6dad61dc96b6984a1fa1","messages_hash":"a73650310ecd6b53b89787e20449de8e844aa747b6211dcc0b33aa389b3a5d72","txlist_hash":"8ad1adee999dd851e81025b31920d1f0f66c1e56433e7b2b110d03cfccd7a141"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(877,310354,'insert','blocks','{"block_hash":"437d9635e1702247e0d9330347cc6e339e3678be89a760ba9bf79dd2cd8803e0","block_index":310354,"block_time":310354000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(877,310353,'insert','blocks','{"block_hash":"437d9635e1702247e0d9330347cc6e339e3678be89a760ba9bf79dd2cd8803e0","block_index":310354,"block_time":310354000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(878,310354,'parse','blocks','{"block_index":310354,"ledger_hash":"b2bbcbb6a7db94b2a5681c6e380ac13480bb49c29a3fbb3c7c1eb740f70f8324","messages_hash":"b31bc14fc3a9af3b1b3977100c36b1465781bdbe9390ff267afdc51d57caae39","txlist_hash":"8d6870632f2336908828a72e7445c9d8ecbec3d420b234dad2b17ae06c0a709c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(879,310355,'insert','blocks','{"block_hash":"ea80897a4f9167bfc775e4e43840d9ea6f839f3571c7ab4433f1e082f4bbe37d","block_index":310355,"block_time":310355000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(879,310354,'insert','blocks','{"block_hash":"ea80897a4f9167bfc775e4e43840d9ea6f839f3571c7ab4433f1e082f4bbe37d","block_index":310355,"block_time":310355000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(880,310355,'parse','blocks','{"block_index":310355,"ledger_hash":"ccbd3ea41587c3c1d92f355979b49c5340a0a90060f07c228c22d6ff76b25579","messages_hash":"f1f4e9f44d7cec303a3ff0e9014c66741e8463d2e1e2644edff38a7a06ae19d3","txlist_hash":"8dfb02eb42bf84a085d150a0dc3fb2effa201594da47639e8f77fea0a7084eea"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(881,310356,'insert','blocks','{"block_hash":"68088305f7eba74c1d50458e5e5ca5a849f0b4a4e9935709d8ee56877b1b55c4","block_index":310356,"block_time":310356000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(881,310355,'insert','blocks','{"block_hash":"68088305f7eba74c1d50458e5e5ca5a849f0b4a4e9935709d8ee56877b1b55c4","block_index":310356,"block_time":310356000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(882,310356,'parse','blocks','{"block_index":310356,"ledger_hash":"06a95d39e110e40ba318320d50984096cbec88c680f426f721154555efc2561f","messages_hash":"cc0cc378fba640609764042b3a71687c5ea7085f9fd3528fc22cb4a0f33c535a","txlist_hash":"3516c2e9b180883b3526ee0a028c6d22b2a8a028b896423eb71db31cc284d566"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(883,310357,'insert','blocks','{"block_hash":"4572f7f4ad467ef78212e9e08fa2ce3f01f2acc28c0b8ca9d1479380726bab1f","block_index":310357,"block_time":310357000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(883,310356,'insert','blocks','{"block_hash":"4572f7f4ad467ef78212e9e08fa2ce3f01f2acc28c0b8ca9d1479380726bab1f","block_index":310357,"block_time":310357000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(884,310357,'parse','blocks','{"block_index":310357,"ledger_hash":"443f947352e853367d1c10d25771c7d78eec22fac19c5bace6f96b8f949e264b","messages_hash":"1a17b268e299c081550e6b708d3a67c8e9e5da464a248c07bd7ff2d37521aaf6","txlist_hash":"af4dd2cd8426ceb8c7dacc24b30d4d48e1152340a5a81f32b745878558969f4a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(885,310358,'insert','blocks','{"block_hash":"d5eae5513f1264d00d8c83fe9271e984774526d89b03ecd78d62d4d95ec1dea6","block_index":310358,"block_time":310358000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(885,310357,'insert','blocks','{"block_hash":"d5eae5513f1264d00d8c83fe9271e984774526d89b03ecd78d62d4d95ec1dea6","block_index":310358,"block_time":310358000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(886,310358,'parse','blocks','{"block_index":310358,"ledger_hash":"c2cd71dc9e7d5ccb5d5e9d6b55c47010c9db6a573d01820da1c8960970fd571f","messages_hash":"8994641c9faf9510eb6dc0cafb53c9ddd941fb6c7f628361bc30a57b70d1c635","txlist_hash":"635f90dc6b705e3e5928101d6ffc32a247088fd8965e0e372358b35ba822df31"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(887,310359,'insert','blocks','{"block_hash":"4fa301160e7e0be18a33065475b1511e859475f390133857a803de0692a9b74f","block_index":310359,"block_time":310359000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(887,310358,'insert','blocks','{"block_hash":"4fa301160e7e0be18a33065475b1511e859475f390133857a803de0692a9b74f","block_index":310359,"block_time":310359000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(888,310359,'parse','blocks','{"block_index":310359,"ledger_hash":"5b7646bafc6b11eb1554ea1e02221883043b435ae973c3678505fa2128aadfb7","messages_hash":"f65b2c8ae6adc575a288d4f042f90176bd007350206178e62c024584d6ed287c","txlist_hash":"eeec8a86b03a3973bdf5215e1789277ab7aa4c47f4e9f05a44a312c01e0ccf0d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(889,310360,'insert','blocks','{"block_hash":"cc852c3c20dbb58466f9a3c9f6df59ef1c3584f849272e100823a95b7a3c79f0","block_index":310360,"block_time":310360000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(889,310359,'insert','blocks','{"block_hash":"cc852c3c20dbb58466f9a3c9f6df59ef1c3584f849272e100823a95b7a3c79f0","block_index":310360,"block_time":310360000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(890,310360,'parse','blocks','{"block_index":310360,"ledger_hash":"b0e937568a47c244e3b29cfb3a5e7196c171acc1565c44020345c715b7774658","messages_hash":"0f246fe11fc2b9fc1d2b8f7517473f6a7eb91915d765779783e7898a8bd3d5bc","txlist_hash":"32f4991609b3d8cbddbee2fe5e7aff49e7d4f5334ba0d283893733f19d3f448b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(891,310361,'insert','blocks','{"block_hash":"636110c0af5c76ada1a19fa5cd012e3ee796723f8a7b3a5457d8cb81d6c57019","block_index":310361,"block_time":310361000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(891,310360,'insert','blocks','{"block_hash":"636110c0af5c76ada1a19fa5cd012e3ee796723f8a7b3a5457d8cb81d6c57019","block_index":310361,"block_time":310361000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(892,310361,'parse','blocks','{"block_index":310361,"ledger_hash":"fd5b67bb571f4e9c0c37c6a5c9e1181133c301e05f4f97a41bd827eda7a6db3c","messages_hash":"6fac343e1053a7a48346243c906493f98c138355761619bdc0677a0b3d7c697d","txlist_hash":"4ad763ba9a9de4e6fd2f48d1342b9c2b4f87224fe591cddcf0ea3aab19187ab3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(893,310362,'insert','blocks','{"block_hash":"6199591a598e9b2159adb828ab26d48c37c26b784f8467a6bb55d51d7b6390f2","block_index":310362,"block_time":310362000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(893,310361,'insert','blocks','{"block_hash":"6199591a598e9b2159adb828ab26d48c37c26b784f8467a6bb55d51d7b6390f2","block_index":310362,"block_time":310362000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(894,310362,'parse','blocks','{"block_index":310362,"ledger_hash":"38382cc090b349809c4798c3c83b485f8ff682fd5b5b2568357d62ef30f7c046","messages_hash":"7208036024f6c4e6557619b9625abd7275a52a91f6bf0d62fbd20736138665f4","txlist_hash":"2eed1cb542570837b9e34c5ef140428d09c132369e5073061d9b1580338fad97"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(895,310363,'insert','blocks','{"block_hash":"a31967b730f72da6ad20f563df18c081c13e3537ba7ea5ab5d01db40e02647e6","block_index":310363,"block_time":310363000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(895,310362,'insert','blocks','{"block_hash":"a31967b730f72da6ad20f563df18c081c13e3537ba7ea5ab5d01db40e02647e6","block_index":310363,"block_time":310363000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(896,310363,'parse','blocks','{"block_index":310363,"ledger_hash":"82911a691937d87629bc14e5294f68a25ff2fc6512370db032834b85a623d5c3","messages_hash":"f2e9a33842fc7f9a1482b1c985a2a6058b8b56535c2a508fcd3e3dba930e46be","txlist_hash":"baa8c23f6f8bbed9640382166a4fa59eba156a3c94b645334124a57ad886136d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(897,310364,'insert','blocks','{"block_hash":"67025b6f69e33546f3309b229ea1ae22ed12b0544b48e202f5387e08d13be0c9","block_index":310364,"block_time":310364000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(897,310363,'insert','blocks','{"block_hash":"67025b6f69e33546f3309b229ea1ae22ed12b0544b48e202f5387e08d13be0c9","block_index":310364,"block_time":310364000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(898,310364,'parse','blocks','{"block_index":310364,"ledger_hash":"cc362ce4c2142e539057430e2dd6402b985c62fefa4e4ad33afe1305f53af8a4","messages_hash":"6de02c61011ad812328b595e95dfd62a2a21ed94bcf59d87fc87c758a9ccd48e","txlist_hash":"973037f8124687eaeba2e9f3e301cb20b9370bef4acd3f2c86eedf595b792b73"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(899,310365,'insert','blocks','{"block_hash":"b65b578ed93a85ea5f5005ec957765e2d41e741480adde6968315fe09784c409","block_index":310365,"block_time":310365000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(899,310364,'insert','blocks','{"block_hash":"b65b578ed93a85ea5f5005ec957765e2d41e741480adde6968315fe09784c409","block_index":310365,"block_time":310365000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(900,310365,'parse','blocks','{"block_index":310365,"ledger_hash":"49e41f95f081b70e3f540fa22864cc4f229ceabfdfd54f2da112f1fd35466617","messages_hash":"800333a93bd7fa0dda3e2ba69ae3e54849f6eada89153cb172fd950470da26cf","txlist_hash":"aa3e39acb1dc1a955f579a9a40961a80319c5dd484ddf322ca6edc6b67cec932"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(901,310366,'insert','blocks','{"block_hash":"a7843440b110ab26327672e3d65125a1b9efd838671422b6ede6c85890352440","block_index":310366,"block_time":310366000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(901,310365,'insert','blocks','{"block_hash":"a7843440b110ab26327672e3d65125a1b9efd838671422b6ede6c85890352440","block_index":310366,"block_time":310366000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(902,310366,'parse','blocks','{"block_index":310366,"ledger_hash":"687c5f3e381d164499126ff90785e3635c825db3808267d4de2ec0e37cc7c597","messages_hash":"b33be7191d7e1afb1140f19fd44bb07daf83897c2fa1af45fc75c15bc85307a0","txlist_hash":"610fbd2d8f4dad57d7efca0772534da791785cb2c45de1906a9b282792faa9f8"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(903,310367,'insert','blocks','{"block_hash":"326c7e51165800a892b48909d105ff5ea572ff408d56d1623ad66d3dfeeb4f47","block_index":310367,"block_time":310367000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(903,310366,'insert','blocks','{"block_hash":"326c7e51165800a892b48909d105ff5ea572ff408d56d1623ad66d3dfeeb4f47","block_index":310367,"block_time":310367000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(904,310367,'parse','blocks','{"block_index":310367,"ledger_hash":"d7fe976a4b2cca2e23d082a703ef4f4739e110ce1e0a373e76064f6186856ff7","messages_hash":"78fd0206e26ec2c77965dec55fa417738c919261b8a436e69574a786d313dc65","txlist_hash":"531453a70483611396ce5bacc17e22125b1b61f61d56c110fb72a929b95deb9a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(905,310368,'insert','blocks','{"block_hash":"f7bfee2feb32c2bfd998dc0f6bff5e5994a3131808b912d692c3089528b4e006","block_index":310368,"block_time":310368000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(905,310367,'insert','blocks','{"block_hash":"f7bfee2feb32c2bfd998dc0f6bff5e5994a3131808b912d692c3089528b4e006","block_index":310368,"block_time":310368000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(906,310368,'parse','blocks','{"block_index":310368,"ledger_hash":"97f0a0f9e6f355dd179aa2941412decc1b0a06de0dc14dce8538aed6e35d41ba","messages_hash":"a75962c77a91893bfe4fce4d8e9b6e6f85d863b7f2b30060f7eb61b913c8f988","txlist_hash":"289eb338000f45b4d7e143a08a490fbee8d307eb0975f5a2ed62586c2f625e0e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(907,310369,'insert','blocks','{"block_hash":"0f836b76eb06019a6bb01776e80bc10dac9fb77002262c80d6683fd42dbfc8da","block_index":310369,"block_time":310369000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(907,310368,'insert','blocks','{"block_hash":"0f836b76eb06019a6bb01776e80bc10dac9fb77002262c80d6683fd42dbfc8da","block_index":310369,"block_time":310369000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(908,310369,'parse','blocks','{"block_index":310369,"ledger_hash":"1b5d9ec9bd918c84a5f9b6882c94a739cc1ad1362dedfbdf7b2009fd42251d66","messages_hash":"9f6da7f4b88f3abd9705318ff6a1d23ee9bcfb11c16f6de7a1dfc5c160c8f5bc","txlist_hash":"a9122294ce4ccd606d3fa1787fb9c44f25811fb2fe486c9d58b407b5da50dd8b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(909,310370,'insert','blocks','{"block_hash":"9eb8f1f6cc0ed3d2a77c5b2c66965150c8ceb26d357b9844e19674d8221fef67","block_index":310370,"block_time":310370000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(909,310369,'insert','blocks','{"block_hash":"9eb8f1f6cc0ed3d2a77c5b2c66965150c8ceb26d357b9844e19674d8221fef67","block_index":310370,"block_time":310370000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(910,310370,'parse','blocks','{"block_index":310370,"ledger_hash":"578b039ed2b9a25e1c75ad9a5242c5962d6645616dc53fb08386602e40f14486","messages_hash":"7e1fc55016a8c1f7d8aeb507891febc3d2ff083d15a8386cb151eeed36126902","txlist_hash":"d61d958644caab04dc236d04d3654abeb1fd625dd7b9cdc01ca5caeae9b41f58"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(911,310371,'insert','blocks','{"block_hash":"7404cb31a39887a9841c2c27309d8c50b88748ed5fa8a3e5ba4cc3fc18310154","block_index":310371,"block_time":310371000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(911,310370,'insert','blocks','{"block_hash":"7404cb31a39887a9841c2c27309d8c50b88748ed5fa8a3e5ba4cc3fc18310154","block_index":310371,"block_time":310371000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(912,310371,'parse','blocks','{"block_index":310371,"ledger_hash":"473d21b8218a2b02f7fa0d5daf114fa988e4a3d97c33aebe97e51a8d22252492","messages_hash":"0c1a84220c5740d841e1019b76849a49f2760d82afac404c46ac333840724478","txlist_hash":"8abb7bf5c66895fd9e9de804ed8e35b3b1d12054a4e45ab3df6cd41194d836e6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(913,310372,'insert','blocks','{"block_hash":"d3a790f6f5f85e2662a9d5fcd94a38bfe9f318ffd695f4770b6ea0770e1ae18d","block_index":310372,"block_time":310372000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(913,310371,'insert','blocks','{"block_hash":"d3a790f6f5f85e2662a9d5fcd94a38bfe9f318ffd695f4770b6ea0770e1ae18d","block_index":310372,"block_time":310372000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(914,310372,'parse','blocks','{"block_index":310372,"ledger_hash":"0c306eb25702d190ce32cac521b1fac9b8a7cbcf441fd74be8de2e002b4ce14c","messages_hash":"c4f885c7acac670739975c95af4f377eecfb635a112cc87b6881d6972cf46374","txlist_hash":"ad3d52b024093fcc5b88b7a3176c4117468f0f675fd9e908c727ebedc5e2eff3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(915,310373,'insert','blocks','{"block_hash":"c192bec419937220c2705ce8a260ba0922940af116e10a2bc9db94f7497cf9c0","block_index":310373,"block_time":310373000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(915,310372,'insert','blocks','{"block_hash":"c192bec419937220c2705ce8a260ba0922940af116e10a2bc9db94f7497cf9c0","block_index":310373,"block_time":310373000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(916,310373,'parse','blocks','{"block_index":310373,"ledger_hash":"48d14b17f9074ce1f75ab32581e8f6fe7d518ebd669af6508e5d986d97c92b3d","messages_hash":"95024e723544b65f52242f2c4ec5e71264a1aceb8e4a02136a0772be1c7d60fe","txlist_hash":"b60270d322c86c6452289e0968be64c2217ebeec34944e43aef908e119f838ea"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(917,310374,'insert','blocks','{"block_hash":"f541273d293a084509916c10aec0de40092c7695888ec7510f23e0c7bb405f8e","block_index":310374,"block_time":310374000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(917,310373,'insert','blocks','{"block_hash":"f541273d293a084509916c10aec0de40092c7695888ec7510f23e0c7bb405f8e","block_index":310374,"block_time":310374000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(918,310374,'parse','blocks','{"block_index":310374,"ledger_hash":"aee93917f6fe0046069aaff48d5d1875a9c4451acec6562a377428bfb1184cd4","messages_hash":"015375f1837c56f1921aed0b6297ce0ed5279663bb9bca13ede1392abbf17d81","txlist_hash":"46decb141683d0bf4c52e4f756b955c923bfb3995025d0f19a8ef7cac1dd2b60"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(919,310375,'insert','blocks','{"block_hash":"da666e1886212e20c154aba9d6b617e471106ddc9b8c8a28e9860baf82a17458","block_index":310375,"block_time":310375000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(919,310374,'insert','blocks','{"block_hash":"da666e1886212e20c154aba9d6b617e471106ddc9b8c8a28e9860baf82a17458","block_index":310375,"block_time":310375000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(920,310375,'parse','blocks','{"block_index":310375,"ledger_hash":"2b0d74911bba5c9530b69c04fec512fe4c5df25458e5237db884586a221fa30b","messages_hash":"9f74f2c9fc67e4d2364b85c8d975f11c53dd96dbb33512d3718fa815b5fa070a","txlist_hash":"9349961eeb706cf083d6ef1fff69cc871def662dd23fd7854135c1b0dc1a78fb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(921,310376,'insert','blocks','{"block_hash":"5dc483d7d1697eb823cba64bb8d6c0aded59d00ea37067de0caeebf3ea4ea7dc","block_index":310376,"block_time":310376000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(921,310375,'insert','blocks','{"block_hash":"5dc483d7d1697eb823cba64bb8d6c0aded59d00ea37067de0caeebf3ea4ea7dc","block_index":310376,"block_time":310376000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(922,310376,'parse','blocks','{"block_index":310376,"ledger_hash":"a6f84afe2845ba2fa4e5e7377b1d4474dbde6dfc9c4bed050e6d10cc80025e82","messages_hash":"53b6ffb8648293f11adb26d10dce89a55dc0b6645c74bac3b8841421a2715476","txlist_hash":"a5f607569f31beb9ba2a0496a9eb2eb40a6926df4b174161b73f53719ad04767"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(923,310377,'insert','blocks','{"block_hash":"f8d1cac1fef3fa6e7ad1c44ff6ae2c6920985bad74e77a6868612ee81f16b0b3","block_index":310377,"block_time":310377000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(923,310376,'insert','blocks','{"block_hash":"f8d1cac1fef3fa6e7ad1c44ff6ae2c6920985bad74e77a6868612ee81f16b0b3","block_index":310377,"block_time":310377000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(924,310377,'parse','blocks','{"block_index":310377,"ledger_hash":"e006e13691719e4fce65e72c692d3affeae8ae465de2a3b285a1bed4eb518a70","messages_hash":"318599633adc13ffcdc8228c39103c9f25eff9a3b1d1b1fc308d10bb41d7f9f0","txlist_hash":"4dd3a5ae07e934557005871e7c72351077b1092580eadda11fcd3501bb000579"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(925,310378,'insert','blocks','{"block_hash":"fec994dd24e213aa78f166ca315c90cb74ee871295a252723dd269c13fc614ce","block_index":310378,"block_time":310378000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(925,310377,'insert','blocks','{"block_hash":"fec994dd24e213aa78f166ca315c90cb74ee871295a252723dd269c13fc614ce","block_index":310378,"block_time":310378000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(926,310378,'parse','blocks','{"block_index":310378,"ledger_hash":"607ffa4928577b82f275750353fcecc2e50098d227f18bb8ea95ac2bbb10eea6","messages_hash":"bc105cb041223f0dd3c20019e8a7a9aeb127d6fddec1560d606cd5b8af23279c","txlist_hash":"49533405fa36a389e0d8cac965389e23eb421da5833d625d160f75fa9defdeab"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(927,310379,'insert','blocks','{"block_hash":"d86cdb36616976eafb054477058de5670a02194f3ee27911df1822ff1c26f19c","block_index":310379,"block_time":310379000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(927,310378,'insert','blocks','{"block_hash":"d86cdb36616976eafb054477058de5670a02194f3ee27911df1822ff1c26f19c","block_index":310379,"block_time":310379000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(928,310379,'parse','blocks','{"block_index":310379,"ledger_hash":"9f17e8d662dbbfc12a56dc36172b3154bc9b05a87885d1411826481e1ca4f6ea","messages_hash":"902cbbb20d2a0003f4c579bfbedb04e787a2a5ef5a8c485a269c215c9628db32","txlist_hash":"4514a78a69d0987ff60976334f70d0533a1c5726099ae73d93be187a57f25f44"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(929,310380,'insert','blocks','{"block_hash":"292dba1b887326f0719fe00caf9863afc613fc1643e041ba7678a325cf2b6aae","block_index":310380,"block_time":310380000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(929,310379,'insert','blocks','{"block_hash":"292dba1b887326f0719fe00caf9863afc613fc1643e041ba7678a325cf2b6aae","block_index":310380,"block_time":310380000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(930,310380,'parse','blocks','{"block_index":310380,"ledger_hash":"d617e30e1a32ed1cf269a190fd4c843755413492827546a0b3ed14278f817532","messages_hash":"1c8bc40c48e73b0993830fb4073e2f2ae056111b5bd5d22a87831c4b88d32973","txlist_hash":"77038e6b75820a64c9fc9530b3d2c8411cc4da649fc69a3d235424c2dd5500c5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(931,310381,'insert','blocks','{"block_hash":"6726e0171d41e8b03e8c7a245ef69477b44506b651efe999e892e1e6d9d4cf38","block_index":310381,"block_time":310381000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(931,310380,'insert','blocks','{"block_hash":"6726e0171d41e8b03e8c7a245ef69477b44506b651efe999e892e1e6d9d4cf38","block_index":310381,"block_time":310381000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(932,310381,'parse','blocks','{"block_index":310381,"ledger_hash":"8af8d819f02927de4a74d3d37dcecf6e5124d53be37603764b1b1adad13b0d7a","messages_hash":"910afea0bf4129dd27c06428bafaab6c8c8bbf95ec371466640072a26eb129e5","txlist_hash":"48b66540bea91d2c2d216d5c13e88dfd9c1f1a36cae2ec721253034041e63af6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(933,310382,'insert','blocks','{"block_hash":"0be33004c34938cedd0901b03c95e55d91590aa2fec6c5f6e44aec5366a0e7d8","block_index":310382,"block_time":310382000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(933,310381,'insert','blocks','{"block_hash":"0be33004c34938cedd0901b03c95e55d91590aa2fec6c5f6e44aec5366a0e7d8","block_index":310382,"block_time":310382000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(934,310382,'parse','blocks','{"block_index":310382,"ledger_hash":"809d5c20335bbefe8e4f3552e24b24d96f6ee4ab12f3bfc9e74898371cf69797","messages_hash":"9cdf0d22a1b690bfb2f542326c53e25e0f1d2b83c434bdc8294ce03959faeba6","txlist_hash":"159e8434abde33d3a97a4e7701cafec884a6d0d7ad78852ee7db449a18c5e23f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(935,310383,'insert','blocks','{"block_hash":"992ff9a3b2f4e303854514d4cad554ff333c1f3f84961aa5a6b570af44a74508","block_index":310383,"block_time":310383000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(935,310382,'insert','blocks','{"block_hash":"992ff9a3b2f4e303854514d4cad554ff333c1f3f84961aa5a6b570af44a74508","block_index":310383,"block_time":310383000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(936,310383,'parse','blocks','{"block_index":310383,"ledger_hash":"d8ec301994a5333f8efe7cc547a833d26c6766deb0b39c4fc18d1bdb470ee903","messages_hash":"4b565f4fd6c07a96002f87eccb7e693fe8d7cc6d8a81cb85cc6b06fb071069c4","txlist_hash":"aecbe5619daf47a60ab2765502725a284224c0985e91993b212c50c3449d197a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(937,310384,'insert','blocks','{"block_hash":"d518c696796401d77956d878cbdc247e207f03198eabc2749d61ebeadee87e5e","block_index":310384,"block_time":310384000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(937,310383,'insert','blocks','{"block_hash":"d518c696796401d77956d878cbdc247e207f03198eabc2749d61ebeadee87e5e","block_index":310384,"block_time":310384000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(938,310384,'parse','blocks','{"block_index":310384,"ledger_hash":"fe47a03993cb9079a6e72810552d631fe838bcfaba3b34c73c9948af77266df2","messages_hash":"8e77a1836fdc196b50c2a525208fb5ff587c38486d1dce443a2fb1a7227119f2","txlist_hash":"e69bc390fb0a624f6d33512a55e9732857afee1b114df97761186ac648f63111"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(939,310385,'insert','blocks','{"block_hash":"2aa6a491a03a1a16adbc5f5e795c97ec338345cfdf10ff711ffb7ac3a0e26e28","block_index":310385,"block_time":310385000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(939,310384,'insert','blocks','{"block_hash":"2aa6a491a03a1a16adbc5f5e795c97ec338345cfdf10ff711ffb7ac3a0e26e28","block_index":310385,"block_time":310385000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(940,310385,'parse','blocks','{"block_index":310385,"ledger_hash":"6114e98e0004cf0f9472fce6bfa6bb99ae38e57214c8b134f30da1d62399f6ef","messages_hash":"7668443002aeaae041ff7859c252f642fd930c4d51a616247a798f47942f97ae","txlist_hash":"d3e6a4df9ff34518f8fe243dc87c981aef0cc7b89ff9ca466269a19493aeaecb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(941,310386,'insert','blocks','{"block_hash":"9d19a754b48a180fd5ebb0ae63e96fa9f4a67e475aeefa41f8f4f8420e677eda","block_index":310386,"block_time":310386000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(941,310385,'insert','blocks','{"block_hash":"9d19a754b48a180fd5ebb0ae63e96fa9f4a67e475aeefa41f8f4f8420e677eda","block_index":310386,"block_time":310386000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(942,310386,'parse','blocks','{"block_index":310386,"ledger_hash":"4c52d59ade1bd2068e3b75b8b3cd1d23c6a94b6437f7966d10f5a07bf8f630ff","messages_hash":"1fd22e6bf448e0771f8c7da5c0829614f5f45612bd6592104c369b001fcfd266","txlist_hash":"1c250ef18892c191c535562bb35bb1c8bd4f515ab00bc4cf0b564436b2bd33ee"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(943,310387,'insert','blocks','{"block_hash":"b4cac00f59c626206e193575b3ba9bfddd83bbfc374ebeb2838acd25e34a6c2b","block_index":310387,"block_time":310387000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(943,310386,'insert','blocks','{"block_hash":"b4cac00f59c626206e193575b3ba9bfddd83bbfc374ebeb2838acd25e34a6c2b","block_index":310387,"block_time":310387000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(944,310387,'parse','blocks','{"block_index":310387,"ledger_hash":"327e9a842233568888998ec1456b6f78c093b47639707d44e6336b2bc18d955f","messages_hash":"194a4ec47379a92f7ad3ef8b24e797fe33173d2036b687596fa534356c07a672","txlist_hash":"d7de64dd98a65b478518d909b1f0f2860f6a0b8e5e530f23ee55caffbaf1a545"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(945,310388,'insert','blocks','{"block_hash":"41a04637694ea47a57b76fb52d3e8cfe67ee28e3e8744218f652166abe833284","block_index":310388,"block_time":310388000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(945,310387,'insert','blocks','{"block_hash":"41a04637694ea47a57b76fb52d3e8cfe67ee28e3e8744218f652166abe833284","block_index":310388,"block_time":310388000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(946,310388,'parse','blocks','{"block_index":310388,"ledger_hash":"6efaab188a5cae39ef547a804f61bcbc2be4881e0569f49d7622b407f6860401","messages_hash":"5de4d26d0f94ec5c143e465eb509d22bbd2016bf9068ffb5e5c6949384a648e1","txlist_hash":"4916559fdc472a474aa4c652c85b0db143744daed0d98d7f2fddd1dba32be88e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(947,310389,'insert','blocks','{"block_hash":"3ec95ae011161c6752f308d28bde892b2846e96a96de164e5f3394744d0aa607","block_index":310389,"block_time":310389000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(947,310388,'insert','blocks','{"block_hash":"3ec95ae011161c6752f308d28bde892b2846e96a96de164e5f3394744d0aa607","block_index":310389,"block_time":310389000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(948,310389,'parse','blocks','{"block_index":310389,"ledger_hash":"89c686d5d973691a7281268c867f837b86b140a05f16f12302a3cdeb3b6a0ee9","messages_hash":"232a974e8b60494567216ff9b2b8744fbd48c5328d04a63b29c671a8274df924","txlist_hash":"b2e0098e42f81a8a9369d510b17be67446feb3e5da1b1eb37acd9f0b33b29fce"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(949,310390,'insert','blocks','{"block_hash":"f05a916c6be28909fa19d176e0232f704d8108f73083dded5365d05b306ddf1a","block_index":310390,"block_time":310390000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(949,310389,'insert','blocks','{"block_hash":"f05a916c6be28909fa19d176e0232f704d8108f73083dded5365d05b306ddf1a","block_index":310390,"block_time":310390000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(950,310390,'parse','blocks','{"block_index":310390,"ledger_hash":"2c4eceebb94d0c7a7702478d9547d1afbb42ab5ecb5ae6271a3f69942bd77e50","messages_hash":"bf9827228ad31a03a85dacfd3a333afbbfe662611550bd431077abd226c87845","txlist_hash":"8e3a48b160083860b0928dd97150477980da9097945c4ae3ee144c505f131b86"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(951,310391,'insert','blocks','{"block_hash":"fc26112b7fdd8aaf333645607dabc9781eac067d4468d63bb46628623e122952","block_index":310391,"block_time":310391000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(951,310390,'insert','blocks','{"block_hash":"fc26112b7fdd8aaf333645607dabc9781eac067d4468d63bb46628623e122952","block_index":310391,"block_time":310391000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(952,310391,'parse','blocks','{"block_index":310391,"ledger_hash":"06397124ee2a1bcb9104899469394855d4ecccd1a08626d650bdf3169e227831","messages_hash":"7eb2b6f227e5550b5d0d75c21818c58263a4e86dd6b160b0b1638dda017d3062","txlist_hash":"b1b4f0fc9ba54527ea0902192a61158bb5383f1959f187915c07f88bdf11caaa"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(953,310392,'insert','blocks','{"block_hash":"f7022ecab2f2179c398580460f50c643b10d4b6869e5519db6ef5d5a27d84a1d","block_index":310392,"block_time":310392000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(953,310391,'insert','blocks','{"block_hash":"f7022ecab2f2179c398580460f50c643b10d4b6869e5519db6ef5d5a27d84a1d","block_index":310392,"block_time":310392000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(954,310392,'parse','blocks','{"block_index":310392,"ledger_hash":"44974b5fec0be3a2958d39f2d6824a2e82733f873a404ec9887178c620843149","messages_hash":"3341d9abb5324b460d6a80df5fd0b9c4003b38dffab3a503c27cfd21a3cd60df","txlist_hash":"97a039be078662ac5b1a275d5618224c1a90886c79b9fb651dfcb14481da8e8a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(955,310393,'insert','blocks','{"block_hash":"e6aeef89ab079721e7eae02f7b197acfb37c2de587d35a5cf4dd1e3c54d68308","block_index":310393,"block_time":310393000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(955,310392,'insert','blocks','{"block_hash":"e6aeef89ab079721e7eae02f7b197acfb37c2de587d35a5cf4dd1e3c54d68308","block_index":310393,"block_time":310393000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(956,310393,'parse','blocks','{"block_index":310393,"ledger_hash":"1863677c0e552344607b1af3eb8ef8f4fc6b2a73d63eebb3e9928302c887970f","messages_hash":"7e02c72085143c68bf4ec2f0d7f9cc74a5bdd0bbaf28d7c441401a8990e64fc7","txlist_hash":"c488dd61c64182cdc779e96a2b312463d42ff9829d1d518c8a9daa1a4cb26de3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(957,310394,'insert','blocks','{"block_hash":"2a944743c3beb3bf1b530bd6a210682a0a0e9b0e6a9ff938d9be856236779a6f","block_index":310394,"block_time":310394000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(957,310393,'insert','blocks','{"block_hash":"2a944743c3beb3bf1b530bd6a210682a0a0e9b0e6a9ff938d9be856236779a6f","block_index":310394,"block_time":310394000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(958,310394,'parse','blocks','{"block_index":310394,"ledger_hash":"3838ba6e84376ed8dffb3fee9b5928d903952c0d8a8ad41ab63a9651a1c8c770","messages_hash":"b386b65006170bb4b28bbe1a8235f9fc7104ea3e9e34d51d86eee06326571d99","txlist_hash":"e329db30a579327664d135ce9c3661a259378dcc12e179232599e0186c7bfe91"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(959,310395,'insert','blocks','{"block_hash":"19eb891ce70b82db2f2745e1d60e0cf445363aaff4e96335f9014d92312d20e4","block_index":310395,"block_time":310395000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(959,310394,'insert','blocks','{"block_hash":"19eb891ce70b82db2f2745e1d60e0cf445363aaff4e96335f9014d92312d20e4","block_index":310395,"block_time":310395000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(960,310395,'parse','blocks','{"block_index":310395,"ledger_hash":"872367d61f81cddeb555da5f9c4f46a8ac57c24629ab073094e407a4555a8555","messages_hash":"5f9db4e525ecff94de73118f2cb2ffaf872fe2692c4c35ab221fe89adc13b28d","txlist_hash":"2234b36f4187eb0da9ed6a633aa2e15075d5efb23f154963885e7fd42495e4a5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(961,310396,'insert','blocks','{"block_hash":"aea407729ac8d8e9221efd9d70106d14df6aaf9f2f87dc6f490835a9caadf08e","block_index":310396,"block_time":310396000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(961,310395,'insert','blocks','{"block_hash":"aea407729ac8d8e9221efd9d70106d14df6aaf9f2f87dc6f490835a9caadf08e","block_index":310396,"block_time":310396000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(962,310396,'parse','blocks','{"block_index":310396,"ledger_hash":"b9a9eaaf1cf6cfa4ae5b0f314812a9a2346209da0b7ce57e16010d2a01c0092a","messages_hash":"9e0597d4190ec3e829b62fe7ccc8020109369dbf72ab2b14ea115da386330813","txlist_hash":"25946162b9af068438633980c75eaf9e508144f603f7a913de56cc11a7a482f6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(963,310397,'insert','blocks','{"block_hash":"7c429e56a19e884a8a77a759b52334a4b79404081b976270114043ba94d7985c","block_index":310397,"block_time":310397000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(963,310396,'insert','blocks','{"block_hash":"7c429e56a19e884a8a77a759b52334a4b79404081b976270114043ba94d7985c","block_index":310397,"block_time":310397000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(964,310397,'parse','blocks','{"block_index":310397,"ledger_hash":"b61f36bcc934a18fdccf7806d41482684ca129801d0b9ce7815dcd488fc49a66","messages_hash":"b55fadb9aadb55ad049079769711016434ca942454f5bc39d9f6dc4417b24dab","txlist_hash":"e697fb2f445f03a1d895b904be58a554af4c26ed74a65eb0e52c98e490efbd44"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(965,310398,'insert','blocks','{"block_hash":"55c046db86dee1d63c0e46e6df79b5b77dfd4ab2ff5da79e6360ce77dd98335e","block_index":310398,"block_time":310398000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(965,310397,'insert','blocks','{"block_hash":"55c046db86dee1d63c0e46e6df79b5b77dfd4ab2ff5da79e6360ce77dd98335e","block_index":310398,"block_time":310398000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(966,310398,'parse','blocks','{"block_index":310398,"ledger_hash":"9446476e123e5dd354682c60591cab8b712c30df9080dde756246eef45e21df5","messages_hash":"f56692ed7d8f224a45a3c2563e2441b55626f8845abb6879fd1364cfa442c189","txlist_hash":"0d20ba449b95f7d128c8b78ef2a37ec390e6177b2041a2b035a72cb8e6062ba9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(967,310399,'insert','blocks','{"block_hash":"765abc449b3127d71ab971e0c2ae69c570284e0c5dacf4c3c07f2e4eca180e7a","block_index":310399,"block_time":310399000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(967,310398,'insert','blocks','{"block_hash":"765abc449b3127d71ab971e0c2ae69c570284e0c5dacf4c3c07f2e4eca180e7a","block_index":310399,"block_time":310399000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(968,310399,'parse','blocks','{"block_index":310399,"ledger_hash":"50d288bca09d446f56544fb1ec50d613bdf156488468ac92d433425a3cab0804","messages_hash":"b64321d63d483d9e7c09026e749bf3e9ab67e14d2e6c09363728bfa02c102d09","txlist_hash":"82214bf1638d82e5b66919990e24d3960eb02a423bb3f36bcdd730b17267e340"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(969,310400,'insert','blocks','{"block_hash":"925bc6f6f45fe2fb2d494e852aaf667d8623e5dae2e92fdffa80f15661f04218","block_index":310400,"block_time":310400000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(969,310399,'insert','blocks','{"block_hash":"925bc6f6f45fe2fb2d494e852aaf667d8623e5dae2e92fdffa80f15661f04218","block_index":310400,"block_time":310400000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(970,310400,'parse','blocks','{"block_index":310400,"ledger_hash":"349a24fd446727bb1793ccf88fc569d20eb680c10e506fc25b281ce6ec3fd7bd","messages_hash":"fee9df29e116470c1165c090931eb1bd7e45795f53350fa87da5042ce529edef","txlist_hash":"e7ce5e8c9c4160590dcdaba04bc866267a9784f99fe68bebd337da16768e8f18"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(971,310401,'insert','blocks','{"block_hash":"f7b9af2e2cd16c478eed4a34021f2009944dbc9b757bf8fe4fc03f9d900e0351","block_index":310401,"block_time":310401000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(971,310400,'insert','blocks','{"block_hash":"f7b9af2e2cd16c478eed4a34021f2009944dbc9b757bf8fe4fc03f9d900e0351","block_index":310401,"block_time":310401000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(972,310401,'parse','blocks','{"block_index":310401,"ledger_hash":"52c06b68cad19608420b73476a73b411d0327382b92bd454cadf1b8616eb17a5","messages_hash":"05538970685115a9ddaf41d458a3cce59ecf7b9b6a888729efadce1014e7a899","txlist_hash":"6ff1e13b2110c6ee69e86818bd32bacdffa6f4e91fd2d8c2b09b5db35062be81"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(973,310402,'insert','blocks','{"block_hash":"1404f1826cd93e1861dd92ca3f3b05c65e8578b88626577a3cbad1e771b96e44","block_index":310402,"block_time":310402000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(973,310401,'insert','blocks','{"block_hash":"1404f1826cd93e1861dd92ca3f3b05c65e8578b88626577a3cbad1e771b96e44","block_index":310402,"block_time":310402000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(974,310402,'parse','blocks','{"block_index":310402,"ledger_hash":"8bf64213a454c62dd4b0dcd7dfa298da0244a6aa7ae6fff98be6f49d50d259ab","messages_hash":"21985f293ab45f0cc41e2760cd3cd2c3e5fe8788ad16c5008b1853869e574790","txlist_hash":"3e776187716a384a84170b2e7dbbb5c152d98535351c1f5b4b00c7bf5ea7ff33"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(975,310403,'insert','blocks','{"block_hash":"f7426dbd4a0808148b5fc3eb66df4a8ad606c97888c175850f65099286c7581c","block_index":310403,"block_time":310403000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(975,310402,'insert','blocks','{"block_hash":"f7426dbd4a0808148b5fc3eb66df4a8ad606c97888c175850f65099286c7581c","block_index":310403,"block_time":310403000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(976,310403,'parse','blocks','{"block_index":310403,"ledger_hash":"fb2a365372522d1442792cb38e1a4167eda2612ef442c776749097a3d541a827","messages_hash":"e0e319bb5d4189cd952e021faaf0146e2872b62dcf137856d61959adf81724a4","txlist_hash":"1fad731787bca55d4102d8d355ccb9625590baaccd0ae63490320efbf5aaf90f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(977,310404,'insert','blocks','{"block_hash":"401c327424b39a6d908f1a2f2202208a7893a5bedc2b9aff8e7eda0b64040040","block_index":310404,"block_time":310404000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(977,310403,'insert','blocks','{"block_hash":"401c327424b39a6d908f1a2f2202208a7893a5bedc2b9aff8e7eda0b64040040","block_index":310404,"block_time":310404000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(978,310404,'parse','blocks','{"block_index":310404,"ledger_hash":"47f96d798df9cad17667be908ebb063ab9f79d947784a78189d247e626864a5f","messages_hash":"64c5499c7eef627a35277d801a7480aeb4a1e845ae368475da0c2edac597968c","txlist_hash":"10b2cfe8ebe45dac311048b4aa8d15d7c59ae17f5c1a0c132cfb675d893de8d5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(979,310405,'insert','blocks','{"block_hash":"4f6928561724e0f6aab2fc40719f591823ca7e57e42d1589a943f8c55400430a","block_index":310405,"block_time":310405000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(979,310404,'insert','blocks','{"block_hash":"4f6928561724e0f6aab2fc40719f591823ca7e57e42d1589a943f8c55400430a","block_index":310405,"block_time":310405000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(980,310405,'parse','blocks','{"block_index":310405,"ledger_hash":"185780205a9ab241bb0656799fd0d5942c1e3e5854abd1d06573da550b04b096","messages_hash":"dc4339e5e79750da2e11a43ccf76b285e85e50187e81bf14237084c2a3c414b2","txlist_hash":"8cbd52dd97944b34f080d675a51360dafcd38183cb08633e6ea247d2c5074435"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(981,310406,'insert','blocks','{"block_hash":"6784365c24e32a1dd59043f89283c7f4ac8ceb3ef75310414ded9903a9967b97","block_index":310406,"block_time":310406000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(981,310405,'insert','blocks','{"block_hash":"6784365c24e32a1dd59043f89283c7f4ac8ceb3ef75310414ded9903a9967b97","block_index":310406,"block_time":310406000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(982,310406,'parse','blocks','{"block_index":310406,"ledger_hash":"367b9de2313c5f7fce0c2dc2b4a8e2bc059f6881bc924f7315e8e2ca61728a59","messages_hash":"29eac43bd800bb93099e696e1f4cfe1bb7dfbce8316e65459c5e7780d32488c7","txlist_hash":"0d104d4ce44d11e581f51e5a33ec9e35a994b2b992842b173fb8a2756412b4b2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(983,310407,'insert','blocks','{"block_hash":"84396eb206e0ec366059d9e60aefdb381bca5082d58bffb3d2a7e7b6227fc01e","block_index":310407,"block_time":310407000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(983,310406,'insert','blocks','{"block_hash":"84396eb206e0ec366059d9e60aefdb381bca5082d58bffb3d2a7e7b6227fc01e","block_index":310407,"block_time":310407000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(984,310407,'parse','blocks','{"block_index":310407,"ledger_hash":"2bdbd79575aa2ff52ba0cce3fc1a1aac6120d598a8ab0ff3925e1395e6cad2d1","messages_hash":"b570ec3ca500cb58c1388584391c16e4ff5061ac434b7bcfd8185a121f318207","txlist_hash":"a3407057dc90723c90ed8f2df5af7840e50daa4c4bdedd47181c17a1e8563934"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(985,310408,'insert','blocks','{"block_hash":"4827c178805e2abae5cb6625605623b3260622b364b7b6be455060deaaec2cda","block_index":310408,"block_time":310408000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(985,310407,'insert','blocks','{"block_hash":"4827c178805e2abae5cb6625605623b3260622b364b7b6be455060deaaec2cda","block_index":310408,"block_time":310408000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(986,310408,'parse','blocks','{"block_index":310408,"ledger_hash":"fcd0edef8c4ae9517a6e793a2742c598de38c122829b7a7aa265310417ac92c3","messages_hash":"91b0efd57597544fe96539dbab912ef18d57dc237a42ee5245dd95c59eafd375","txlist_hash":"3ee1e7949bdb395a4e481f94344fccb2781abcb3f5d1fea2bbadb9de9228a426"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(987,310409,'insert','blocks','{"block_hash":"01a719656ad1140e975b2bdc8eebb1e7395905fd814b30690ab0a7abd4f76bba","block_index":310409,"block_time":310409000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(987,310408,'insert','blocks','{"block_hash":"01a719656ad1140e975b2bdc8eebb1e7395905fd814b30690ab0a7abd4f76bba","block_index":310409,"block_time":310409000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(988,310409,'parse','blocks','{"block_index":310409,"ledger_hash":"5b663c40873af21ebc721f2689e2c57a2c787fff579c58f033bba75910a64837","messages_hash":"7b6bfcc602b144da1f9c12773523114a4a54267eca14f4c8f255a9ce8b2e85c4","txlist_hash":"68fbf3a110ed24946d1594f5a4de1dae9c4b6f0394188a71ab89996e9fb4e55b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(989,310410,'insert','blocks','{"block_hash":"247a0070ac1ab6a3bd3ec5e73f802d9fbdcfa7ee562eaeeb21193f487ec4d348","block_index":310410,"block_time":310410000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(989,310409,'insert','blocks','{"block_hash":"247a0070ac1ab6a3bd3ec5e73f802d9fbdcfa7ee562eaeeb21193f487ec4d348","block_index":310410,"block_time":310410000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(990,310410,'parse','blocks','{"block_index":310410,"ledger_hash":"93c5a33931b2a33933bc286d6987b34730c0677460e4875d5c032ae86c2e01f0","messages_hash":"ca813e8e604e5ac2adf5fa18e2776ddf48ef3b2f34a1471fe71fb80ff73769d1","txlist_hash":"bd755bf0718d5a0423ec41a8ac84b1554751ff8f0a3f63d87e7e0f58aaa31008"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(991,310411,'insert','blocks','{"block_hash":"26cae3289bb171773e9e876faa3e45f0ccc992380bb4d00c3a01d087ef537ae2","block_index":310411,"block_time":310411000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(991,310410,'insert','blocks','{"block_hash":"26cae3289bb171773e9e876faa3e45f0ccc992380bb4d00c3a01d087ef537ae2","block_index":310411,"block_time":310411000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(992,310411,'parse','blocks','{"block_index":310411,"ledger_hash":"8d98498f89619a2e334e9ac69bf8ff37251af6431d9bb6d1ea8bbc404c5e560d","messages_hash":"6be534a6fddd54f6813f4f6247e6c47bb0eddda08e28edbafa132bf8115f390f","txlist_hash":"103563dcfc7b9f149b6efdad7cae17b090d4a8232fd4c37fac7bcf942d784b55"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(993,310412,'insert','blocks','{"block_hash":"ab84ad5a3df5cfdce9f90b8d251eb6f68b55e6976a980de6de5bcda148b0cd20","block_index":310412,"block_time":310412000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(993,310411,'insert','blocks','{"block_hash":"ab84ad5a3df5cfdce9f90b8d251eb6f68b55e6976a980de6de5bcda148b0cd20","block_index":310412,"block_time":310412000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(994,310412,'parse','blocks','{"block_index":310412,"ledger_hash":"a16a650c4b63ed783e7229980be1177da867c188a5039ed5c58b9717f6ccf634","messages_hash":"a3b69de49ae3569129f96bc994fd0566acfc5cf6ea0c346e7297aea967283636","txlist_hash":"4daa6f0799529346ba4ee87e2aed1450447921dfa92e785378fae39c234a7c8f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(995,310413,'insert','blocks','{"block_hash":"21c33c9fd432343b549f0036c3620754565c3ad99f19f91f4e42344f10ec79bf","block_index":310413,"block_time":310413000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(995,310412,'insert','blocks','{"block_hash":"21c33c9fd432343b549f0036c3620754565c3ad99f19f91f4e42344f10ec79bf","block_index":310413,"block_time":310413000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(996,310413,'parse','blocks','{"block_index":310413,"ledger_hash":"768577c1a7c2cf2cc19cd8dbe823f1bdb8a222daee4c7ac7b5ead6633040c283","messages_hash":"f8ffa3c414d806885764c093a7a8d362aa78d68751e710cfc89e2e318d59817b","txlist_hash":"7ae9815341dccd2d1bff8dbcfdbcce4e52b4aac8f2fdd421348ed9f44cd19e38"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(997,310414,'insert','blocks','{"block_hash":"8cff03c07fd2a899c3bcf6ac93e05840e00de3133da14a413e9807304db854b6","block_index":310414,"block_time":310414000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(997,310413,'insert','blocks','{"block_hash":"8cff03c07fd2a899c3bcf6ac93e05840e00de3133da14a413e9807304db854b6","block_index":310414,"block_time":310414000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(998,310414,'parse','blocks','{"block_index":310414,"ledger_hash":"906c491f164877c31002da41233c237d0d4a945a0072406a7b7d13df74be7eec","messages_hash":"94b9e9f9260a35300ea27a15a0a9493350c2a6db704bc0d4ee0e78a5818cebdd","txlist_hash":"807cd64b4d8ee3d91a5cbc651e42feeacd5248b6572310472743ca71a9f24621"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(999,310415,'insert','blocks','{"block_hash":"dd0facbd37cca09870f6054d95710d5d97528ed3d1faf2557914b61a1fc9c1cc","block_index":310415,"block_time":310415000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(999,310414,'insert','blocks','{"block_hash":"dd0facbd37cca09870f6054d95710d5d97528ed3d1faf2557914b61a1fc9c1cc","block_index":310415,"block_time":310415000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1000,310415,'parse','blocks','{"block_index":310415,"ledger_hash":"d27f99b4a67dfc910d3b932f97b7299779f245e95f871140d3c90f13cc6e506e","messages_hash":"8146c8dfac8c08e8d1a7fd45ace0cbc146f928616343c082603dea1dbe0375ee","txlist_hash":"67fe947c260b3d8748887e94f68c3725664bb6dbd72187e9312ee48a42770ec3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1001,310416,'insert','blocks','{"block_hash":"7302158055327843ded75203f7cf9320c8719b9d1a044207d2a97f09791a5b6b","block_index":310416,"block_time":310416000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1001,310415,'insert','blocks','{"block_hash":"7302158055327843ded75203f7cf9320c8719b9d1a044207d2a97f09791a5b6b","block_index":310416,"block_time":310416000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1002,310416,'parse','blocks','{"block_index":310416,"ledger_hash":"90fcd04c508a9821e0ba0ed36cd7cfadd1d3c95116e3f52ad69f98d3d14de571","messages_hash":"dca1d2b95f7f534e3dea2e7a2019838753efb31c5ced981701f50940f3cf0d26","txlist_hash":"1041a17c5c146181a56da6ef17386814299be8a22c76a2b2f8a4a2768b2b531c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1003,310417,'insert','blocks','{"block_hash":"2fef6d72654cbd4ea08e0989c18c32f2fe22de70a4c2d863c1778086b0449002","block_index":310417,"block_time":310417000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1003,310416,'insert','blocks','{"block_hash":"2fef6d72654cbd4ea08e0989c18c32f2fe22de70a4c2d863c1778086b0449002","block_index":310417,"block_time":310417000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1004,310417,'parse','blocks','{"block_index":310417,"ledger_hash":"19cbb26c6d24df5b110a5aae9b53a911a61b2086dde926273a1b0f66c1049e6b","messages_hash":"827cc7c36c8f51da81c980c10003c324cfab26a15e2e7d5698ae323deff752c6","txlist_hash":"920154e272608daa3c501588cf0eee50c2c45a385d30f42711657ae4a6de3bf5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1005,310418,'insert','blocks','{"block_hash":"fc27f87607fd57cb02ce54d83cec184cf7d196738f52a8eb9c91b1ea7d071509","block_index":310418,"block_time":310418000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1005,310417,'insert','blocks','{"block_hash":"fc27f87607fd57cb02ce54d83cec184cf7d196738f52a8eb9c91b1ea7d071509","block_index":310418,"block_time":310418000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1006,310418,'parse','blocks','{"block_index":310418,"ledger_hash":"2dc971d2db4e92e2d5dcef124bf9cdad33c41a71d6ae3db80297cb2257911f0d","messages_hash":"85d72f558c2926cf357f739ea311de5aa840cbe82c35beee417a1520860d7a59","txlist_hash":"290826e9c72e49636370d0dad56ba1c2c9209d888b993e030838f84300c0225a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1007,310419,'insert','blocks','{"block_hash":"9df404f5ce813fe6eb0541203c108bc7a0a2bac341a69d607c6641c140e21c8e","block_index":310419,"block_time":310419000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1007,310418,'insert','blocks','{"block_hash":"9df404f5ce813fe6eb0541203c108bc7a0a2bac341a69d607c6641c140e21c8e","block_index":310419,"block_time":310419000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1008,310419,'parse','blocks','{"block_index":310419,"ledger_hash":"7ad2bf141622a0db4b27b1f4dab4857d1595e3f746a4113992850a680ebf1f37","messages_hash":"77ebc95e7c6af80280c5d7915ec2b599d700151c4160dbc5a8d5b2a109bbe05c","txlist_hash":"d06653b493d120dd288637d530cd3f6efa1c8f5c252bb275572c1948ff0f3539"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1009,310420,'insert','blocks','{"block_hash":"138b3f1773159c0dd265a2d32dd2141202d174c2e52a4aeac3588224a3558372","block_index":310420,"block_time":310420000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1009,310419,'insert','blocks','{"block_hash":"138b3f1773159c0dd265a2d32dd2141202d174c2e52a4aeac3588224a3558372","block_index":310420,"block_time":310420000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1010,310420,'parse','blocks','{"block_index":310420,"ledger_hash":"3602b26268d1bd3fc5f08f170e9767ff07c91f6976a1c342dc6b24f7ee98c509","messages_hash":"1107a47b26211af98233b1c5293451ae5bb9349c73368b513ecd337ad2a64d3e","txlist_hash":"ae8e61a57232c10bd15c655bb8c76007dcef394ba64d1619157ca58990e18c25"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1011,310421,'insert','blocks','{"block_hash":"71fe2b0e02c5cad8588636016483ddd97a4ef0737283b5fd4ab6ea5dc5c56b9a","block_index":310421,"block_time":310421000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1011,310420,'insert','blocks','{"block_hash":"71fe2b0e02c5cad8588636016483ddd97a4ef0737283b5fd4ab6ea5dc5c56b9a","block_index":310421,"block_time":310421000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1012,310421,'parse','blocks','{"block_index":310421,"ledger_hash":"1c1facfa3852b33c173a08d06450335a2b230541c60973a154e8dd864f3c3c8b","messages_hash":"1a47a0616e0d7d4153e694dc20509140325be90d30203a496bff146da7aadaef","txlist_hash":"01bfd609f878bb6149779f6377d7868d5b7fa3b831f68cd757967b982cd09ad4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1013,310422,'insert','blocks','{"block_hash":"cd40260541b9ed20abaac53b8f601d01cd972c34f28d91718854f1f3a4026158","block_index":310422,"block_time":310422000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1013,310421,'insert','blocks','{"block_hash":"cd40260541b9ed20abaac53b8f601d01cd972c34f28d91718854f1f3a4026158","block_index":310422,"block_time":310422000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1014,310422,'parse','blocks','{"block_index":310422,"ledger_hash":"e788123aefd1129554fa2c166dbd06ce68f913730183ca73cf248c1f5284eba4","messages_hash":"a6aca492da14b2a2a5911a1eb9fc2b94007ac2618d18c7141e0c917af583b09d","txlist_hash":"6577ad9a9e3889fb5eeac7fc9039af8d4537a8fc28b4a9de85e230f5d9da3583"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1015,310423,'insert','blocks','{"block_hash":"6ca0d6d246108b2df3de62a4dd454ff940e1945f194ba72566089f98ad72f4db","block_index":310423,"block_time":310423000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1015,310422,'insert','blocks','{"block_hash":"6ca0d6d246108b2df3de62a4dd454ff940e1945f194ba72566089f98ad72f4db","block_index":310423,"block_time":310423000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1016,310423,'parse','blocks','{"block_index":310423,"ledger_hash":"ad445e5351af8739b2f74cbba8b44201c20ab55ad1db064402614fb97f35c375","messages_hash":"d52d5b979c57d1fc9b43ab2133ffe65f383646105c22be971c618325a4e295a3","txlist_hash":"dd7b66518e8ec22359df2d8ad4c0349fe4ab3a74620aaf2ef4bdc93a4c7e2d92"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1017,310424,'insert','blocks','{"block_hash":"ed42fe6896e4ba9ded6ea352a1e7e02f3d786bfc9379780daba4e7aa049668ad","block_index":310424,"block_time":310424000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1017,310423,'insert','blocks','{"block_hash":"ed42fe6896e4ba9ded6ea352a1e7e02f3d786bfc9379780daba4e7aa049668ad","block_index":310424,"block_time":310424000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1018,310424,'parse','blocks','{"block_index":310424,"ledger_hash":"e89872ed802fe4421844882958fe6384cf21a85a6dcf10db761e2bb4a77ed24e","messages_hash":"0ba84d839fea22ea4634d16617df4437859805e6ef3fcecbf9319648152c959d","txlist_hash":"bb05836e569bc4c85141c5b4d2832efa5a83ad519260e96d92f6ee16fe4a0c80"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1019,310425,'insert','blocks','{"block_hash":"73f4be91e41a2ccd1c4d836a5cea28aea906ac9ede7773d9cd51dff5936f1ba7","block_index":310425,"block_time":310425000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1019,310424,'insert','blocks','{"block_hash":"73f4be91e41a2ccd1c4d836a5cea28aea906ac9ede7773d9cd51dff5936f1ba7","block_index":310425,"block_time":310425000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1020,310425,'parse','blocks','{"block_index":310425,"ledger_hash":"29e595e9ac7717013cfc8d12255496192234abbddd8a66762a5eaff0c49f3750","messages_hash":"7f501e4f4dad5fc70bb3c56d1378bf4b292259188c56b5d5e53a3c5206c9700a","txlist_hash":"2cedf78c9d13e32fde5792907f2ac9f409fe701740533b94ceab6b8087f790b1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1021,310426,'insert','blocks','{"block_hash":"9d28065325bb70b8e272f6bee3bc2cd5ea4ea4d36e293075096e204cb53dc415","block_index":310426,"block_time":310426000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1021,310425,'insert','blocks','{"block_hash":"9d28065325bb70b8e272f6bee3bc2cd5ea4ea4d36e293075096e204cb53dc415","block_index":310426,"block_time":310426000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1022,310426,'parse','blocks','{"block_index":310426,"ledger_hash":"9b9509ce7b7bf380f4d030604810a755c71fabe27152be990997a6a9db37ff15","messages_hash":"25fa3569e346dfc876bba62b9d23783c146a543cbdeec50fc6e18332122fb2b7","txlist_hash":"c037094c1947835fceefa8a25a81724d9c88191d5f5199d3a59339bd44407289"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1023,310427,'insert','blocks','{"block_hash":"d08e8bc7035bbf08ec91bf42839eccb3d7e489d68f85a0be426f95709a976a2a","block_index":310427,"block_time":310427000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1023,310426,'insert','blocks','{"block_hash":"d08e8bc7035bbf08ec91bf42839eccb3d7e489d68f85a0be426f95709a976a2a","block_index":310427,"block_time":310427000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1024,310427,'parse','blocks','{"block_index":310427,"ledger_hash":"f1b834e2a380f1b9a78c592acbe78ec809220c620e15f296ab8d7ecea6cd392e","messages_hash":"a139b9e0838217dba78ff8d8503ed732bc0a94ca9a5aa75ab8938c99edee297a","txlist_hash":"81d439d9d368279e97c8739243efb01c7027be218d831d93127364fa247aed95"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1025,310428,'insert','blocks','{"block_hash":"2eef4e1784ee12bcb13628f2c0dc7c008db6aaf55930d5de09513425f55658a2","block_index":310428,"block_time":310428000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1025,310427,'insert','blocks','{"block_hash":"2eef4e1784ee12bcb13628f2c0dc7c008db6aaf55930d5de09513425f55658a2","block_index":310428,"block_time":310428000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1026,310428,'parse','blocks','{"block_index":310428,"ledger_hash":"9e963a17fbc4a5c20d48094f1459959033520f92d7a8bc044b71bbffb8dd173d","messages_hash":"3162a5d50ea03633b8b2d947cc3c52a5df9593e245376bf80756f48e7c1fc2d7","txlist_hash":"002b7ac255f66476970512e50d7ca9cb5da695bea9763bf0379f8d8e6c77a71c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1027,310429,'insert','blocks','{"block_hash":"086bfbba799c6d66a39d90a810b8dd6753f2904a48e2c01590845adda214cf8d","block_index":310429,"block_time":310429000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1027,310428,'insert','blocks','{"block_hash":"086bfbba799c6d66a39d90a810b8dd6753f2904a48e2c01590845adda214cf8d","block_index":310429,"block_time":310429000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1028,310429,'parse','blocks','{"block_index":310429,"ledger_hash":"ac8cfd965b9c53f32731a3e0fcdb6df5746d646b02c88b5201a674125e37eed5","messages_hash":"fcea4b97a5fe73cf70e2d0263371e1e00e099bf1cf6ec7db042b3bea048a265c","txlist_hash":"4b68376b50d77145ada0ebc72c3eb43b54b4743b538dbc9fa2c914515882dbb7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1029,310430,'insert','blocks','{"block_hash":"870cf1829f84d1f29c231190205fe2e961738240fc16477c7de24da037763048","block_index":310430,"block_time":310430000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1029,310429,'insert','blocks','{"block_hash":"870cf1829f84d1f29c231190205fe2e961738240fc16477c7de24da037763048","block_index":310430,"block_time":310430000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1030,310430,'parse','blocks','{"block_index":310430,"ledger_hash":"33654e32dfd41ff3a5744b57fd2483a08a2b4729c18ca54c3ac5d95a1bf0ef21","messages_hash":"1b3b759f56da231657bf1c579b3186abe1a28fba2c262a9e872f7ee83aaa4e26","txlist_hash":"3323c2d01e777caaca3eeaf6f2af8299cee1622589cbaf08f4d245356642d2f2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1031,310431,'insert','blocks','{"block_hash":"20b72324e40ffc43a49569b560d6245c679e638b9d20404fc1e3386992d63648","block_index":310431,"block_time":310431000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1031,310430,'insert','blocks','{"block_hash":"20b72324e40ffc43a49569b560d6245c679e638b9d20404fc1e3386992d63648","block_index":310431,"block_time":310431000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1032,310431,'parse','blocks','{"block_index":310431,"ledger_hash":"ba8837c811ae87981cc37cb49438d958fa58dfc5a95824040f2fd088465406d1","messages_hash":"23d2c60e160ae68a16ab609dccdb9b78f1b7d3feeaee2c97c7dedceb13c02eee","txlist_hash":"67aadda0a565f4f5e2786b5007e56e2d10077e87e7d3acc216fe0803365b7b81"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1033,310432,'insert','blocks','{"block_hash":"c81811aca423aa2ccb3fd717b54a24a990611365c360667687dc723e9208ad93","block_index":310432,"block_time":310432000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1033,310431,'insert','blocks','{"block_hash":"c81811aca423aa2ccb3fd717b54a24a990611365c360667687dc723e9208ad93","block_index":310432,"block_time":310432000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1034,310432,'parse','blocks','{"block_index":310432,"ledger_hash":"7864019cb0cbbcd895154421183d6acb932b1d64441103b913d52469f656655f","messages_hash":"51e2478b9f02aba026af477be07173549dba6acf715620c3080db983d5818ae4","txlist_hash":"c12942ffa02a5f8eaddf3e8e55ad0ea03f29cebd9e822e00c504c162cddd0471"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1035,310433,'insert','blocks','{"block_hash":"997e4a145d638ad3dcdb2865f8b8fd95242cbc4a4359407791f421f129b1d725","block_index":310433,"block_time":310433000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1035,310432,'insert','blocks','{"block_hash":"997e4a145d638ad3dcdb2865f8b8fd95242cbc4a4359407791f421f129b1d725","block_index":310433,"block_time":310433000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1036,310433,'parse','blocks','{"block_index":310433,"ledger_hash":"a6da92ef0df7d092de09f2f8d2c99ff65ad74e2a0bd2ea25f8335614372f5279","messages_hash":"9d406a162538d5a0b083ddf1edbc2af4da4772e3dfafeb471757019b03f07860","txlist_hash":"f0eefd9f81db595b07fe719a41e67e54fdb987e177f05d37040237db3be2a8a5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1037,310434,'insert','blocks','{"block_hash":"61df9508e53a7fe477f063e0ff7e86fbb0aef80ff2ddedc556236a38f49ac4d8","block_index":310434,"block_time":310434000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1037,310433,'insert','blocks','{"block_hash":"61df9508e53a7fe477f063e0ff7e86fbb0aef80ff2ddedc556236a38f49ac4d8","block_index":310434,"block_time":310434000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1038,310434,'parse','blocks','{"block_index":310434,"ledger_hash":"e288db28ac6a42822f85fd042f65b57378bc6cc2f8616edfa88143d7b1c9ddcc","messages_hash":"216849b38a9a9bf850733296d6a14b539b2c2261354e26019a723dd7403ad006","txlist_hash":"173f8b7d2c581e9f088b3fb6e96ad2af597b172717d8f8732fd5857997f0f3d7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1039,310435,'insert','blocks','{"block_hash":"f24cf5e1296952a47556ac80a455a2c45da5c0dc2b388b51d235a3f741793d5f","block_index":310435,"block_time":310435000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1039,310434,'insert','blocks','{"block_hash":"f24cf5e1296952a47556ac80a455a2c45da5c0dc2b388b51d235a3f741793d5f","block_index":310435,"block_time":310435000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1040,310435,'parse','blocks','{"block_index":310435,"ledger_hash":"e87af314e8d7a5f2315ccc559d7c2255c008ba63aff017696201db69344d423f","messages_hash":"c974a643a40e5993fd5ecf85e7a627f6ed4c7d32da8d2bb27528e99f226d5efa","txlist_hash":"a4dd5a36f1aeee54e99bb23095b64707fc0b3fde5f64e33135429a100e4ea558"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1041,310436,'insert','blocks','{"block_hash":"a5e341ba92bdf9b3938691cd3aab87731eba5428bb61a804cecf9178c8da0c19","block_index":310436,"block_time":310436000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1041,310435,'insert','blocks','{"block_hash":"a5e341ba92bdf9b3938691cd3aab87731eba5428bb61a804cecf9178c8da0c19","block_index":310436,"block_time":310436000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1042,310436,'parse','blocks','{"block_index":310436,"ledger_hash":"82327b93bd3ffcdf797bc2f6470b9c8c5101e54b924ec5f141a31356aa8865c7","messages_hash":"6c8edec3773ad66f3ef89d20d5190b2c19318ef48bf3752e7f482a7671b006c3","txlist_hash":"c6b0f05a847c30dd3f2d3f8cb7c26a84f1d005b4720a553f9dd8b717185d7f05"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1043,310437,'insert','blocks','{"block_hash":"9e18d0ffff2cb464c664cefc76e32d35752c9e639045542a73746f5ec2f3b002","block_index":310437,"block_time":310437000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1043,310436,'insert','blocks','{"block_hash":"9e18d0ffff2cb464c664cefc76e32d35752c9e639045542a73746f5ec2f3b002","block_index":310437,"block_time":310437000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1044,310437,'parse','blocks','{"block_index":310437,"ledger_hash":"70d86f9ef8df495474de06b94e1857693c73d9ca3528356b82553a52fdce0dda","messages_hash":"64193ef0680fb09096cf55f02405bf8e2a133b12bd8e1453330143d72700f164","txlist_hash":"809d60564fefff56688616b7fb96378d4eb425e5c8de36b34f0c9070935dac26"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1045,310438,'insert','blocks','{"block_hash":"36be4b3470275ff5e23ed4be8f380d6e034eb827ebe9143218d6e4689ea5a9fc","block_index":310438,"block_time":310438000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1045,310437,'insert','blocks','{"block_hash":"36be4b3470275ff5e23ed4be8f380d6e034eb827ebe9143218d6e4689ea5a9fc","block_index":310438,"block_time":310438000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1046,310438,'parse','blocks','{"block_index":310438,"ledger_hash":"44b90478e32373205462f0fb212da636b31db6dfb99a2b56923beb97a3a64722","messages_hash":"65151ecc33ae384e013535fc1f6cda04494809cdedb5a2cdb891f0f38035bd3f","txlist_hash":"2cf7695a3cea08358af8bd9378b1d6ad6c7223cbac01589042ace6c3cb312196"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1047,310439,'insert','blocks','{"block_hash":"4f2449fce22be0edb4d2aefac6f35ce5a47b871623d07c2a8c166363112b2877","block_index":310439,"block_time":310439000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1047,310438,'insert','blocks','{"block_hash":"4f2449fce22be0edb4d2aefac6f35ce5a47b871623d07c2a8c166363112b2877","block_index":310439,"block_time":310439000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1048,310439,'parse','blocks','{"block_index":310439,"ledger_hash":"66b791b9deb7d2fc8b075f41d712e300ffa9c46ca9d6f4e7cec6429ca6a65163","messages_hash":"01d3ab7b218d6bfef3c5b6b6db851297e951cebfdf60b8d4835a44a665e163ca","txlist_hash":"41f11f77910c12535fa183e819b36a0dda32eaafe0ae8016e2ce7c23d5c1d67d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1049,310440,'insert','blocks','{"block_hash":"89d6bd4cdac1cae08c704490406c41fbc5e1efa6c2d7f161e9175149175ef12a","block_index":310440,"block_time":310440000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1049,310439,'insert','blocks','{"block_hash":"89d6bd4cdac1cae08c704490406c41fbc5e1efa6c2d7f161e9175149175ef12a","block_index":310440,"block_time":310440000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1050,310440,'parse','blocks','{"block_index":310440,"ledger_hash":"5baa10e1659182ba4511f87f08deda38d5de3501c63efd376604cc199140d27c","messages_hash":"d8b0a242ba1e6003bbdaf0bf2369b95d39c736ab52e66be2a9113941655e698a","txlist_hash":"c6762d7334806b6b62c3cee84f65346d1121493d3bc3f890af174c4abe4710ae"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1051,310441,'insert','blocks','{"block_hash":"2df1dc53d6481a1ce3a6fee51ad4adcce95f702606fee7c43feda4965cf9ee15","block_index":310441,"block_time":310441000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1051,310440,'insert','blocks','{"block_hash":"2df1dc53d6481a1ce3a6fee51ad4adcce95f702606fee7c43feda4965cf9ee15","block_index":310441,"block_time":310441000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1052,310441,'parse','blocks','{"block_index":310441,"ledger_hash":"2d490229fead1b15a8350da7bcc83c483dae06e4a2f574c6e8fde248acd449d6","messages_hash":"18ff66422cca18b8b49392bae2d93ece152f47035c44ef71dda8cbd5a2cd7f96","txlist_hash":"f9fcb16a928c44b86ab2af7407a2ca269455b144694a80927b9213bf8e7ac710"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1053,310442,'insert','blocks','{"block_hash":"50844c48722edb7681c5d0095c524113415106691e71db34acc44dbc6462bfec","block_index":310442,"block_time":310442000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1053,310441,'insert','blocks','{"block_hash":"50844c48722edb7681c5d0095c524113415106691e71db34acc44dbc6462bfec","block_index":310442,"block_time":310442000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1054,310442,'parse','blocks','{"block_index":310442,"ledger_hash":"a3728bacfbdd289b7af24248b9bdacd5643bd5412bb993f5380278631eabb9e9","messages_hash":"d7bba011aeaf59c39a79cc90a4d40f11c86d3a44c12b722cdab3f2d32b96b430","txlist_hash":"5d2600af95413d101a9e3d98b2d9f5ea02cf1cf6a28bf7e96870e167638a7be9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1055,310443,'insert','blocks','{"block_hash":"edc940455632270b7deda409a3489b19b147be89c4d8f434c284e326b749c79a","block_index":310443,"block_time":310443000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1055,310442,'insert','blocks','{"block_hash":"edc940455632270b7deda409a3489b19b147be89c4d8f434c284e326b749c79a","block_index":310443,"block_time":310443000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1056,310443,'parse','blocks','{"block_index":310443,"ledger_hash":"d829da764f6397b22a6b97ef396b363ef2cf071990df2dc9c0d03806db6a46b5","messages_hash":"fc88f701c65c71e2d90d31fbdc10378ea284a88543543af540b49d970da6e1b3","txlist_hash":"4c595c9a60ccc98d2f6cd75c92c28333174c618337457f9c5ccf362252732081"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1057,310444,'insert','blocks','{"block_hash":"68c9efab28e78e0ef8d316239612f918408ce66be09e8c03428049a6ee3d32e4","block_index":310444,"block_time":310444000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1057,310443,'insert','blocks','{"block_hash":"68c9efab28e78e0ef8d316239612f918408ce66be09e8c03428049a6ee3d32e4","block_index":310444,"block_time":310444000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1058,310444,'parse','blocks','{"block_index":310444,"ledger_hash":"ef53249bf0f13e1f2073b815c8d8da3ab744b6d277b29ddbc0bd68bd006af34b","messages_hash":"0e2148899b497e6e1edd0f0401e2b364cd863d67a16b2d2ba01575249fa44e61","txlist_hash":"5ec6d64106ac1c65cd1dd2129c786aca3cf426c7a1b5f6a966b6684b37755293"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1059,310445,'insert','blocks','{"block_hash":"22a2e3896f1c56aefb2d27032a234ea38d93edf2b6331e72e7b4e3952f0234ef","block_index":310445,"block_time":310445000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1059,310444,'insert','blocks','{"block_hash":"22a2e3896f1c56aefb2d27032a234ea38d93edf2b6331e72e7b4e3952f0234ef","block_index":310445,"block_time":310445000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1060,310445,'parse','blocks','{"block_index":310445,"ledger_hash":"7e731cda90932b2b4844abdbc3ff60683173104e6c72ed81c65d9a17fd4872dc","messages_hash":"a4956f7cb1d7911fe8b00ccee3a92b01db13f0bd2b28ebc66db307c0307c8632","txlist_hash":"6da5abcb8ff2a77c33c7c43061754d9fe8e587157a98e194157faf534d2ee9c6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1061,310446,'insert','blocks','{"block_hash":"e8b0856eff3efce5f5114d6378a4e5c9e69e972825bc55cc00c26954cd1c8837","block_index":310446,"block_time":310446000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1061,310445,'insert','blocks','{"block_hash":"e8b0856eff3efce5f5114d6378a4e5c9e69e972825bc55cc00c26954cd1c8837","block_index":310446,"block_time":310446000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1062,310446,'parse','blocks','{"block_index":310446,"ledger_hash":"db55bac8025e95a567ba984f36dcb09357aa3e9b8706bb594e669b628d4e7204","messages_hash":"cb0858f2c2d1df41d5fce1f8f312d4f31646e876d82754898046d94166f86988","txlist_hash":"e8efb64e8f5f867f1c0db99afa9f9a3e3a06d0e1d55e16e9639ca36c3bda5cd4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1063,310447,'insert','blocks','{"block_hash":"3f4bc894c0bc04ee24ed1e34849af9f719f55df50c8bc36dc059ec5fa0e1c8a8","block_index":310447,"block_time":310447000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1063,310446,'insert','blocks','{"block_hash":"3f4bc894c0bc04ee24ed1e34849af9f719f55df50c8bc36dc059ec5fa0e1c8a8","block_index":310447,"block_time":310447000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1064,310447,'parse','blocks','{"block_index":310447,"ledger_hash":"5cc4fa447cc291ffcce7be3c4f8fc70041bf8af5c2dd591136d4a449095d2570","messages_hash":"8e43ba092a6ba21408ff40f8248c07d7eb27a7deac290ea2d4161bf16d1e21c4","txlist_hash":"026eb6a7315302879ca62afb071da788deb5759eb3de89cf68fec00ec638d9f0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1065,310448,'insert','blocks','{"block_hash":"6a6c7c07ba5b579abd81a7e888bd36fc0e02a2bcfb69dbfa061b1b64bfa1bd10","block_index":310448,"block_time":310448000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1065,310447,'insert','blocks','{"block_hash":"6a6c7c07ba5b579abd81a7e888bd36fc0e02a2bcfb69dbfa061b1b64bfa1bd10","block_index":310448,"block_time":310448000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1066,310448,'parse','blocks','{"block_index":310448,"ledger_hash":"ce49854f4493c163bc891888f920fbc6dd8855c30870beb757df69b33de52633","messages_hash":"0423502422f1719bb57b16c22d7155922a4e57dd46c10c67443ce901fabace72","txlist_hash":"e47cc99299a82c9be619633effff5b9cace113215d7f71aa7d2327e69d3ca3bb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1067,310449,'insert','blocks','{"block_hash":"9e256a436ff8dae9ff77ed4cac4c3bfbbf026681548265a1b62c771d9d8e0779","block_index":310449,"block_time":310449000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1067,310448,'insert','blocks','{"block_hash":"9e256a436ff8dae9ff77ed4cac4c3bfbbf026681548265a1b62c771d9d8e0779","block_index":310449,"block_time":310449000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1068,310449,'parse','blocks','{"block_index":310449,"ledger_hash":"84557595cf2067a95924119b8ed5fea114acd9ca1b0df4dbe4ae5181a739b5d1","messages_hash":"f4202e68bbe225aaf543a2595773a928240b7033f7f920803d1a2281c5e927d8","txlist_hash":"4e3048f5eeba69570f9ffd86a3573e85bdfb46a92acf60d55c04d41f49f7f870"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1069,310450,'insert','blocks','{"block_hash":"2d9b2ccc3ad3a32910295d7f7f0d0e671b074494adc373fc49aa874d575e36a3","block_index":310450,"block_time":310450000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1069,310449,'insert','blocks','{"block_hash":"2d9b2ccc3ad3a32910295d7f7f0d0e671b074494adc373fc49aa874d575e36a3","block_index":310450,"block_time":310450000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1070,310450,'parse','blocks','{"block_index":310450,"ledger_hash":"0e3b252b73fb652f904780da9fc59d1081d712337a9b15cf1a56ea72fbe96c73","messages_hash":"fd5af776d6a38d7d8789a15aa9d76e6d304a94a4d5ffdd2943345da446b6ea80","txlist_hash":"c98b9428cf94077169705f3961816f87293eb89bc840167b1ed8ffb074aef48e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1071,310451,'insert','blocks','{"block_hash":"55731a82b9b28b1aa82445a9e351c9df3a58420f1c2f6b1c9db1874483277296","block_index":310451,"block_time":310451000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1071,310450,'insert','blocks','{"block_hash":"55731a82b9b28b1aa82445a9e351c9df3a58420f1c2f6b1c9db1874483277296","block_index":310451,"block_time":310451000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1072,310451,'parse','blocks','{"block_index":310451,"ledger_hash":"790eccd04e24e5f10f843d63bbdc1538cf1aabb0e8e6c862104be0ef845f603f","messages_hash":"7d18be6c377428f660ba384eec7a473fa7e44627922722cd5b3721c81452432d","txlist_hash":"3fda9e8b7ebc417311c9f14e61c9dca2e490702c1c796eeb1df156f174d52cb5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1073,310452,'insert','blocks','{"block_hash":"016abbaa1163348d8b6bc497cc487880d469f9300374a72ecb793a03d64572aa","block_index":310452,"block_time":310452000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1073,310451,'insert','blocks','{"block_hash":"016abbaa1163348d8b6bc497cc487880d469f9300374a72ecb793a03d64572aa","block_index":310452,"block_time":310452000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1074,310452,'parse','blocks','{"block_index":310452,"ledger_hash":"30962129b060b63050fe8f249592587d74cdabc4ebb5680230a280da880c8586","messages_hash":"c5922e3df1d54ca1fceb420ba9ed3538aa432da592b8d11ed98dd577bbfd7973","txlist_hash":"a1bf92fe5ae4df49a6059263dfd3a9ed105ec24ae02cb9127c0408f7330d962c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1075,310453,'insert','blocks','{"block_hash":"610be2f49623d3fe8c86eacf3620347ed1dc53194bf01e77393b83541ba5d776","block_index":310453,"block_time":310453000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1075,310452,'insert','blocks','{"block_hash":"610be2f49623d3fe8c86eacf3620347ed1dc53194bf01e77393b83541ba5d776","block_index":310453,"block_time":310453000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1076,310453,'parse','blocks','{"block_index":310453,"ledger_hash":"56f4aa1086d8985a00cc295cf9618d976e69ba426b0c3d103bea6b47b58e4355","messages_hash":"8e306a9c943a812c6f52865d39d2964eb365fae7b17b0329b4c251f8dacaaea1","txlist_hash":"a81de51b7b56cc68f599e592be22e11c2f0b51ca27c027f13b58f05b2229a8e1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1077,310454,'insert','blocks','{"block_hash":"baea6ad71f16d05b37bb30ca881c73bc48fd931f4bf3ac908a28d7681e976ee9","block_index":310454,"block_time":310454000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1077,310453,'insert','blocks','{"block_hash":"baea6ad71f16d05b37bb30ca881c73bc48fd931f4bf3ac908a28d7681e976ee9","block_index":310454,"block_time":310454000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1078,310454,'parse','blocks','{"block_index":310454,"ledger_hash":"38d14a206003b812cbaf5f200235dbe12aa6a674e5f3379cb186a781cb5a5654","messages_hash":"f28d86ee84fa30a79a74e3205d45c40c3525c6ea58f9201dc6b5c79fdb526dd3","txlist_hash":"022e8475ba7e68c75b4a00387ae431b7bdaa4d125dcd1b19d08e9c431d3e6057"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1079,310455,'insert','blocks','{"block_hash":"31a375541362b0037245816d50628b0428a28255ff6eddd3dd92ef0262a0a744","block_index":310455,"block_time":310455000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1079,310454,'insert','blocks','{"block_hash":"31a375541362b0037245816d50628b0428a28255ff6eddd3dd92ef0262a0a744","block_index":310455,"block_time":310455000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1080,310455,'parse','blocks','{"block_index":310455,"ledger_hash":"b2ff303a67c05bc12fcdfdb774ea4ddc690434c3371428b3416d38105f265f28","messages_hash":"70550cc53729dedacfd7599305a6ba24dbd67d5349e610da1b3aeedbbdb670e2","txlist_hash":"91a1dc2fe8dd56e137b210136966950c79b4badcdf787b4b9fafa7985847192a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1081,310456,'insert','blocks','{"block_hash":"5fee45c5019669a46a049142c0c4b6cf382e06127211e822f5f6f7320b6b50fa","block_index":310456,"block_time":310456000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1081,310455,'insert','blocks','{"block_hash":"5fee45c5019669a46a049142c0c4b6cf382e06127211e822f5f6f7320b6b50fa","block_index":310456,"block_time":310456000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1082,310456,'parse','blocks','{"block_index":310456,"ledger_hash":"6cc16b442fd7758ed7bae9f50367fa60debdb5d81bffc5abccda044573aeaf15","messages_hash":"48b0c3451909c475fc3273ac84abf136b6b81e2cd6e7022018711a1a8a46abf7","txlist_hash":"5125d7f8718a5a26aed1e1db2ce80e8d2eb4d96bbc91277bace52f571b7f8c26"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1083,310457,'insert','blocks','{"block_hash":"9ce5a2673739be824552754ce60fd5098cf954729bb18be1078395f0c437cce9","block_index":310457,"block_time":310457000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1083,310456,'insert','blocks','{"block_hash":"9ce5a2673739be824552754ce60fd5098cf954729bb18be1078395f0c437cce9","block_index":310457,"block_time":310457000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1084,310457,'parse','blocks','{"block_index":310457,"ledger_hash":"8fa0401d245b1b1e8b40760a54f331564d8597e242462ec412878e36a9b06800","messages_hash":"9cb1f06768f23821c73219929b52fb339a5aac8a1f60e905bbe974759b296606","txlist_hash":"061dc1962f44d4da9de8ad6bff4d96650058f5d444951e9c808b901db8717c81"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1085,310458,'insert','blocks','{"block_hash":"deca40ba154ebc8c6268668b69a447e35ad292db4504d196e8a91abdc5312aac","block_index":310458,"block_time":310458000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1085,310457,'insert','blocks','{"block_hash":"deca40ba154ebc8c6268668b69a447e35ad292db4504d196e8a91abdc5312aac","block_index":310458,"block_time":310458000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1086,310458,'parse','blocks','{"block_index":310458,"ledger_hash":"520f92700e31b8a35260a280ae11bf8668b0e09d34795a9d88678f2977e19f7c","messages_hash":"da021b6ace7610144fdb7bbee83fdf5f617508c18b3b28d111e9abb6719d510d","txlist_hash":"b0208287d25e4ca6a1856236b4d4c7a3608533f0a47a9c673806d5d3baeb2297"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1087,310459,'insert','blocks','{"block_hash":"839c15fa5eea10c91851e160a73a6a8ee273a31ab5385fe5bd71920cbc08b565","block_index":310459,"block_time":310459000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1087,310458,'insert','blocks','{"block_hash":"839c15fa5eea10c91851e160a73a6a8ee273a31ab5385fe5bd71920cbc08b565","block_index":310459,"block_time":310459000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1088,310459,'parse','blocks','{"block_index":310459,"ledger_hash":"d7f728b78228a914b8767a6caeaf2267e9dbd50490a27f6c23bd96060eab8ee0","messages_hash":"464f88651f885a9c3604bd83352de75252aa4a53b40a94e55cf04cba3860b315","txlist_hash":"21a24d787b30434a230cae77e281636855ff40a8fb4aaaad35eb034835f63e97"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1089,310460,'insert','blocks','{"block_hash":"9b5f351a5c85aaaa737b6a55f20ebf04cafdf36013cdee73c4aaac376ad4562b","block_index":310460,"block_time":310460000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1089,310459,'insert','blocks','{"block_hash":"9b5f351a5c85aaaa737b6a55f20ebf04cafdf36013cdee73c4aaac376ad4562b","block_index":310460,"block_time":310460000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1090,310460,'parse','blocks','{"block_index":310460,"ledger_hash":"33c2b4c6d22888448a2458ff2ce6a1cfae5e858acae2a57e4cc0232980f8fa4a","messages_hash":"626b13a5e856517c5e8246032184d39a3b70a8d63b9abd7a56d824ec3573e3cb","txlist_hash":"2ae25ed250bd603684d0affe8b14af5a1b8d1554beaed08aa8f723cc3c66cf8d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1091,310461,'insert','blocks','{"block_hash":"8131c823f11c22066362517f8c80d93bfc4c3b0a12890bdd51a0e5a043d26b7b","block_index":310461,"block_time":310461000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1091,310460,'insert','blocks','{"block_hash":"8131c823f11c22066362517f8c80d93bfc4c3b0a12890bdd51a0e5a043d26b7b","block_index":310461,"block_time":310461000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1092,310461,'parse','blocks','{"block_index":310461,"ledger_hash":"22426912d3317922912326da552af284677c9b76b6416b6c056668f27ae4f19f","messages_hash":"34e034a1eace1f9cc331b124f20bf9b02b06e9920c860d5258bc846afa59be6d","txlist_hash":"13b7774cf2a5a0f3d65031cd5f9ee498eaeee5c1e0e8ecbd346e0427d847a5c0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1093,310462,'insert','blocks','{"block_hash":"16f8fad8c21560b9d7f88c3b22293192c24f5264c964d2de303a0c742c27d146","block_index":310462,"block_time":310462000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1093,310461,'insert','blocks','{"block_hash":"16f8fad8c21560b9d7f88c3b22293192c24f5264c964d2de303a0c742c27d146","block_index":310462,"block_time":310462000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1094,310462,'parse','blocks','{"block_index":310462,"ledger_hash":"74225b62e696aaeafbd4d6db40b41081c7493d9cc44984729d8619ff9450ce32","messages_hash":"c842b12fd725cba9dda8fba23d55154a026780bc6af2b0a8193126e35560c1b3","txlist_hash":"4f23d4da0bbe4b8bb7e00b6b746b4180356013c63f7a6f9b3eee479380b04e4f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1095,310463,'insert','blocks','{"block_hash":"bf919937d8d1b5d5f421b9f59e5893ecb9e77861c6ab6ffe6d2722f52483bd94","block_index":310463,"block_time":310463000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1095,310462,'insert','blocks','{"block_hash":"bf919937d8d1b5d5f421b9f59e5893ecb9e77861c6ab6ffe6d2722f52483bd94","block_index":310463,"block_time":310463000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1096,310463,'parse','blocks','{"block_index":310463,"ledger_hash":"b970979bfe0d44ae2f21f7d98bdcc4ae37287b93cad9fa51f32a62337ceba0c1","messages_hash":"f79b69008dcbe3c3362ee21d19da76108039cb558761d4dcf9e1cdb946bcee10","txlist_hash":"7b9a9095733a9d870b33aef4bb15767c32b012c27b52de8731358178b87bfb50"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1097,310464,'insert','blocks','{"block_hash":"91f08dec994751a6057753945249e9c11964b98b654704e585d9239462bc6f60","block_index":310464,"block_time":310464000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1097,310463,'insert','blocks','{"block_hash":"91f08dec994751a6057753945249e9c11964b98b654704e585d9239462bc6f60","block_index":310464,"block_time":310464000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1098,310464,'parse','blocks','{"block_index":310464,"ledger_hash":"00007a158b003fcca20c9fcaa8d73a556f0206bc9a7ab3e5c566ea1bda8648cb","messages_hash":"ad018c29e0f488918c6a134fe27ae637509d72341a28725cf82d74bae0b2fe75","txlist_hash":"28d7eceb69efcc6736dd64c65ed218dae2e8d0e9d4d7284b0572a5d1065a9d52"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1099,310465,'insert','blocks','{"block_hash":"5686aaff2718a688b9a69411e237912869699f756c3eb7bf7c3cf2b9e3756b3d","block_index":310465,"block_time":310465000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1099,310464,'insert','blocks','{"block_hash":"5686aaff2718a688b9a69411e237912869699f756c3eb7bf7c3cf2b9e3756b3d","block_index":310465,"block_time":310465000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1100,310465,'parse','blocks','{"block_index":310465,"ledger_hash":"09c407870b056db90148a9e4cb8ada003898ff28c584bec6a5be90514758a851","messages_hash":"1de15ad33c8b345fe1ad52110c252cdbda801e4fa7fb749dfba0dac2dd773497","txlist_hash":"7a4f4ed76efc69ddb5fc13abe258656d6a5e4a845203b5f3f9133716093d7f6d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1101,310466,'insert','blocks','{"block_hash":"8a68637850c014116da671bb544fb5deddda7682223055a58bdcf7b2e79501fc","block_index":310466,"block_time":310466000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1101,310465,'insert','blocks','{"block_hash":"8a68637850c014116da671bb544fb5deddda7682223055a58bdcf7b2e79501fc","block_index":310466,"block_time":310466000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1102,310466,'parse','blocks','{"block_index":310466,"ledger_hash":"23bcfdbb44d8fc2ae6a86ea073ab080158014f04516b256a70d846399e7383cd","messages_hash":"39f1eb92ac050aa56760fcdcc747dccdcadc1bc359632b6dd57cecb59d485378","txlist_hash":"57124a566cf1e863b27fa19e3c982fe4a5115119ffb745624697380ad8d5f900"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1103,310467,'insert','blocks','{"block_hash":"d455a803e714bb6bd9e582edc34e624e7e3d80ee6c7b42f7207d763fff5c2bd3","block_index":310467,"block_time":310467000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1103,310466,'insert','blocks','{"block_hash":"d455a803e714bb6bd9e582edc34e624e7e3d80ee6c7b42f7207d763fff5c2bd3","block_index":310467,"block_time":310467000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1104,310467,'parse','blocks','{"block_index":310467,"ledger_hash":"a43abeddb61ad99d57f208cb0c6cc3e0b05a200009e6d90641a2bc7aac707adf","messages_hash":"a2889082db39a64176b16ba1a33377440b0f45dfb7d30b36265477d98bd5a95b","txlist_hash":"fb3b1ef99d2f323e1bdd6998b78b6044c8c7328fafad6b9fea1de7bd0244a265"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1105,310468,'insert','blocks','{"block_hash":"d84dfd2fcf6d8005aeeac01e03b287af788c81955612375510e37a4ab5766891","block_index":310468,"block_time":310468000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1105,310467,'insert','blocks','{"block_hash":"d84dfd2fcf6d8005aeeac01e03b287af788c81955612375510e37a4ab5766891","block_index":310468,"block_time":310468000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1106,310468,'parse','blocks','{"block_index":310468,"ledger_hash":"fc909facd6ba38fa0908fd49a6e2f25bd8284de5265ef761497b8a2d595344b3","messages_hash":"91296f5df4dff2e619fbe8e9d6d94a1e3b196062fc936ed6f07f72b95d912b3e","txlist_hash":"5c84a33365a6954fe639a1c2b1df030b8728d5d331df5ea1ef4a60f976cfa5d2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1107,310469,'insert','blocks','{"block_hash":"2fbbf2724f537d539b675acb6a479e530c7aac5f93b4045f4356ea4b0f8a8755","block_index":310469,"block_time":310469000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1107,310468,'insert','blocks','{"block_hash":"2fbbf2724f537d539b675acb6a479e530c7aac5f93b4045f4356ea4b0f8a8755","block_index":310469,"block_time":310469000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1108,310469,'parse','blocks','{"block_index":310469,"ledger_hash":"09f0d1c9bde8cdd63544fbb5eab46c2954654d32f3736f9975cf860588aa65cf","messages_hash":"8d17e3a799c3ca2be1da35c1c75644f696843093177564b37431e1e40030c925","txlist_hash":"38083f12891b03e2f089b02f7cb6b7fc7b6cb7091613e1d299051717eef6748b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1109,310470,'insert','blocks','{"block_hash":"ebb7c8e3fbe0b123a456d753b85b8c123ca3b315da14a00379ebd34784b28921","block_index":310470,"block_time":310470000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1109,310469,'insert','blocks','{"block_hash":"ebb7c8e3fbe0b123a456d753b85b8c123ca3b315da14a00379ebd34784b28921","block_index":310470,"block_time":310470000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1110,310470,'parse','blocks','{"block_index":310470,"ledger_hash":"41832b12459e778621b8f576e597b9f639390338605b30e5be28423b016b199a","messages_hash":"758117c9999addb364c604cc287e6dc9e51cbe5e326f2690d70ce87a81407597","txlist_hash":"bc0a8227d8698655c56004a73150eb92144469fd22d4ce8bf0f48c27084e99ae"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1111,310471,'insert','blocks','{"block_hash":"fc6f8162c55ecffeaabb09f70f071fd0cb7a9ef1bccaafaf27fe9a936defb739","block_index":310471,"block_time":310471000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1111,310470,'insert','blocks','{"block_hash":"fc6f8162c55ecffeaabb09f70f071fd0cb7a9ef1bccaafaf27fe9a936defb739","block_index":310471,"block_time":310471000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1112,310471,'parse','blocks','{"block_index":310471,"ledger_hash":"bf701017153742cb597353349c90ec66f790f222dd98d617d98a0117f1de3274","messages_hash":"b6b19c84723ff33624fbd5154bbf60083c48b83caeea4ceb6667ecce4bd710bb","txlist_hash":"d912707e01e39b078d3cee49df85af32019d7367d199543259bc98864c3ddae5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1113,310472,'insert','blocks','{"block_hash":"57ee5dec5e95b3d9c65a21c407294a32ed538658a6910b16124f18020f16bdf7","block_index":310472,"block_time":310472000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1113,310471,'insert','blocks','{"block_hash":"57ee5dec5e95b3d9c65a21c407294a32ed538658a6910b16124f18020f16bdf7","block_index":310472,"block_time":310472000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1114,310472,'parse','blocks','{"block_index":310472,"ledger_hash":"2a162bbd5a20f89a39156995658fd0c4715881bc130922d0edf95b60ece60b9c","messages_hash":"2f940bbc941844d4dd73837ff7f6c96ce80efcf385e2d44a1ce5f68d545da057","txlist_hash":"c9f21a9ff022fd95423d3eb56017f4f6f8ad56a9fde974c5d08b37f01a0d0f13"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1115,310473,'insert','blocks','{"block_hash":"33994c8f6d06134f886b47e14cb4b5af8fc0fd66e6bd60b3a71986622483e095","block_index":310473,"block_time":310473000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1115,310472,'insert','blocks','{"block_hash":"33994c8f6d06134f886b47e14cb4b5af8fc0fd66e6bd60b3a71986622483e095","block_index":310473,"block_time":310473000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1116,310473,'parse','blocks','{"block_index":310473,"ledger_hash":"1ce10996ec9e37d8ddc204f038542c6781da88d2d45bae1952a88ab993b81e88","messages_hash":"6559100889b99c05398948cc0d47d0cde899cd6ac3006ac5fc344a0847a87940","txlist_hash":"ad410d51bae82f8322d110d7b2270a1ff74c0ca64dfc31c5d293cfee7dbbb459"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1117,310474,'insert','blocks','{"block_hash":"312ee99e9526e9c240d76e3c3d1fe4c0a21f58156a15f2789605b3e7f7794a09","block_index":310474,"block_time":310474000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1117,310473,'insert','blocks','{"block_hash":"312ee99e9526e9c240d76e3c3d1fe4c0a21f58156a15f2789605b3e7f7794a09","block_index":310474,"block_time":310474000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1118,310474,'parse','blocks','{"block_index":310474,"ledger_hash":"5ae424c24ca30aad5aca8298a13ae9371f55b15bc789c7731d833c6e7c7cb04e","messages_hash":"9666d2dbbeea540ac615ae637bb58d5e2199bf937a396750d2a877fb8f55c75d","txlist_hash":"b091eceeb4b263d9fa55bd5595cd298ff8b335e03007d62339033cd884137d48"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1119,310475,'insert','blocks','{"block_hash":"bb9289bcd79075962117aef1161b333dbc403efebd593d93fc315146a2f040eb","block_index":310475,"block_time":310475000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1119,310474,'insert','blocks','{"block_hash":"bb9289bcd79075962117aef1161b333dbc403efebd593d93fc315146a2f040eb","block_index":310475,"block_time":310475000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1120,310475,'parse','blocks','{"block_index":310475,"ledger_hash":"b9b257efe76a36c340629ceb265822dd10449a08eadc69667a8ea05af5c052f8","messages_hash":"a4d05b2dd9af6d5ba804421e6043f4ccf727eec75ee10a002baafaed45bc772d","txlist_hash":"345c94c7b237efaf2b4e92802125b7d783e456e36ab6868d1f4126698361ba89"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1121,310476,'insert','blocks','{"block_hash":"3712e1ebd195749e0dc92f32f7f451dd76f499bf16d709462309ce358a9370d0","block_index":310476,"block_time":310476000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1121,310475,'insert','blocks','{"block_hash":"3712e1ebd195749e0dc92f32f7f451dd76f499bf16d709462309ce358a9370d0","block_index":310476,"block_time":310476000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1122,310476,'parse','blocks','{"block_index":310476,"ledger_hash":"070c06b36f3a77c04fb4bcc3ab1045e95f198f3f970846e59c35db0d03cdaf2c","messages_hash":"1e684aaf8da9104bf057a078360bf99b878290991bb14c8747d8be386a536095","txlist_hash":"014e01dabe6dd8db8e0477f9b12d4f4e3589e41223ec8c9ca5035b942524ca41"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1123,310477,'insert','blocks','{"block_hash":"7381973c554ac2bbdc849e8ea8c4a0ecbb46e7967d322446d0d83c3f9deab918","block_index":310477,"block_time":310477000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1123,310476,'insert','blocks','{"block_hash":"7381973c554ac2bbdc849e8ea8c4a0ecbb46e7967d322446d0d83c3f9deab918","block_index":310477,"block_time":310477000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1124,310477,'parse','blocks','{"block_index":310477,"ledger_hash":"4954596dd44d112fd0407c215be3c9534a348d6f708ae4a1e66527d1ac2830b1","messages_hash":"8cb254cdf81022602324076922901e7d7c4675bebc066252bd20a7e83c23b76c","txlist_hash":"1351438c8ea21d9619f81e51cfd188dbefd6a4816fe3c30b68210ac160890e9b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1125,310478,'insert','blocks','{"block_hash":"c09ee871af7f2a611d43e6130aed171e301c23c5d1a29d183d40bf15898b4fa0","block_index":310478,"block_time":310478000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1125,310477,'insert','blocks','{"block_hash":"c09ee871af7f2a611d43e6130aed171e301c23c5d1a29d183d40bf15898b4fa0","block_index":310478,"block_time":310478000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1126,310478,'parse','blocks','{"block_index":310478,"ledger_hash":"d9cac2e29863569bc96aaf022437906a534968a17bf965c54bf59931cd92e590","messages_hash":"fceb7400129cbad4ae34656a15a35d8e625e515fdaf78a9f644c43f1da3f836b","txlist_hash":"cbec4d277b86a587fd0463340a8990600046f6f166f6fde0b6ec1ee817ab12bb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1127,310479,'insert','blocks','{"block_hash":"f3d691ce35f62df56d142160b6e2cdcba19d4995c01f802da6ce30bfe8d30030","block_index":310479,"block_time":310479000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1127,310478,'insert','blocks','{"block_hash":"f3d691ce35f62df56d142160b6e2cdcba19d4995c01f802da6ce30bfe8d30030","block_index":310479,"block_time":310479000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1128,310479,'parse','blocks','{"block_index":310479,"ledger_hash":"2e48a89a55b6f368745e1c022683e93c20bdd920011518f18fd936f2190ac5e0","messages_hash":"b878bf2f4f70e1c15eb60535887db7ba9e9414ec524d0f426bbde5a459a56bb9","txlist_hash":"81d4ab55e022000a1bb3fbe758e497425c5196951c3e7896d3c641d54b4f2db6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1129,310480,'insert','blocks','{"block_hash":"2694e89a62b3abd03a38dfd318c05eb5871f1be00a6e1bf06826fd54d142e681","block_index":310480,"block_time":310480000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1129,310479,'insert','blocks','{"block_hash":"2694e89a62b3abd03a38dfd318c05eb5871f1be00a6e1bf06826fd54d142e681","block_index":310480,"block_time":310480000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1130,310480,'parse','blocks','{"block_index":310480,"ledger_hash":"aa54124d86e74bebd14ea481ac2a5a5186236ffe214747f1af11ac370565525c","messages_hash":"855cd018f577fe76942fe9837dc27d3be5e71bf378b611f25cdd6381b04ed703","txlist_hash":"8d7e0f8a6f052692155e23eb612c02468830485938e7cb77a91e0c2061611385"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1131,310481,'insert','blocks','{"block_hash":"db37d8f98630ebc61767736ae2c523e4e930095bf54259c01de4d36fd60b6f4a","block_index":310481,"block_time":310481000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1131,310480,'insert','blocks','{"block_hash":"db37d8f98630ebc61767736ae2c523e4e930095bf54259c01de4d36fd60b6f4a","block_index":310481,"block_time":310481000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1132,310481,'insert','transactions','{"block_hash":"db37d8f98630ebc61767736ae2c523e4e930095bf54259c01de4d36fd60b6f4a","block_index":310481,"block_time":310481000,"btc_amount":0,"data":"0000000200000000000000010000000005f5e1006f8d6ae8a3b381663118b4e1eff4cfc7d0954dd6ec68656c6c6f","destination":"","fee":6375,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"b00bdf03402d81a2cbdbeac4b0df90cff5ab6bf9688f653383d49fe42b8422a5","tx_index":482}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1133,310481,'insert','debits','{"action":"send","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310481,"event":"b00bdf03402d81a2cbdbeac4b0df90cff5ab6bf9688f653383d49fe42b8422a5","quantity":100000000,"tx_index":482}',0,'DEBIT'); INSERT INTO messages VALUES(1134,310481,'insert','credits','{"address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","asset":"XCP","block_index":310481,"calling_function":"send","event":"b00bdf03402d81a2cbdbeac4b0df90cff5ab6bf9688f653383d49fe42b8422a5","quantity":100000000,"tx_index":482}',0,'CREDIT'); INSERT INTO messages VALUES(1135,310481,'insert','sends','{"asset":"XCP","block_index":310481,"destination":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","memo":"68656c6c6f","quantity":100000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"b00bdf03402d81a2cbdbeac4b0df90cff5ab6bf9688f653383d49fe42b8422a5","tx_index":482}',0,'ENHANCED_SEND'); INSERT INTO messages VALUES(1136,310481,'parse','transactions','{"supported":true,"tx_hash":"b00bdf03402d81a2cbdbeac4b0df90cff5ab6bf9688f653383d49fe42b8422a5","tx_index":482}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1137,310481,'parse','blocks','{"block_index":310481,"ledger_hash":"fbbe1266bb773e5a3f5b48e82566ff75bc74bfea9424f81f670952565db15c59","messages_hash":"7b058d359a23326a73d98644d5cb0312360ee69f98c85814b2d574408f8d442d","txlist_hash":"8bc755d288d8d6525d9161e5d5072631a72e46d2373de37c7851aa10f3479ed5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1138,310482,'insert','blocks','{"block_hash":"2e27db87dfb6439c006637734e876cc662d1ca74c717756f90f0e535df0787d6","block_index":310482,"block_time":310482000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1138,310481,'insert','blocks','{"block_hash":"2e27db87dfb6439c006637734e876cc662d1ca74c717756f90f0e535df0787d6","block_index":310482,"block_time":310482000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1139,310482,'insert','transactions','{"block_hash":"2e27db87dfb6439c006637734e876cc662d1ca74c717756f90f0e535df0787d6","block_index":310482,"block_time":310482000,"btc_amount":0,"data":"0000000200000000000000010000000005f5e1006f4838d8b3588c4c7ba7c1d06f866e9b3739c63037fade0001","destination":"","fee":6350,"source":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","supported":true,"tx_hash":"c8716524f33646b9af94d6f5e52494ff3b34466497094b1db2ab920e4f79bc34","tx_index":483}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1140,310482,'insert','debits','{"action":"send","address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","asset":"XCP","block_index":310482,"event":"c8716524f33646b9af94d6f5e52494ff3b34466497094b1db2ab920e4f79bc34","quantity":100000000,"tx_index":483}',0,'DEBIT'); INSERT INTO messages VALUES(1141,310482,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310482,"calling_function":"send","event":"c8716524f33646b9af94d6f5e52494ff3b34466497094b1db2ab920e4f79bc34","quantity":100000000,"tx_index":483}',0,'CREDIT'); INSERT INTO messages VALUES(1142,310482,'insert','sends','{"asset":"XCP","block_index":310482,"destination":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","memo":"fade0001","quantity":100000000,"source":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","status":"valid","tx_hash":"c8716524f33646b9af94d6f5e52494ff3b34466497094b1db2ab920e4f79bc34","tx_index":483}',0,'ENHANCED_SEND'); INSERT INTO messages VALUES(1143,310482,'parse','transactions','{"supported":true,"tx_hash":"c8716524f33646b9af94d6f5e52494ff3b34466497094b1db2ab920e4f79bc34","tx_index":483}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1144,310482,'parse','blocks','{"block_index":310482,"ledger_hash":"bd28a97e90054319c4c301c3e99d68aaa5e1bf5a145a8f2c4529040bb8137209","messages_hash":"222ce836127c79d43fc5847a1cc427f7218fe84d23c2454ae1fd35585c9234dc","txlist_hash":"838486910c9c7722fb3afbac7b0514cdd94126486f6671697423b34164b9906f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1145,310483,'insert','blocks','{"block_hash":"013bac61f8e33c8d8d0f60f5e6a4ec3de9b16696703dea9802f64a258601c460","block_index":310483,"block_time":310483000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1145,310482,'insert','blocks','{"block_hash":"013bac61f8e33c8d8d0f60f5e6a4ec3de9b16696703dea9802f64a258601c460","block_index":310483,"block_time":310483000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1146,310483,'parse','blocks','{"block_index":310483,"ledger_hash":"fbbeacec99c9ed99a7fc37cdd5673fe8bdce08eba7fcb25b696e262af29ca5d8","messages_hash":"14e0c00fe389f298230aabba0e084ff09875e49dba8b5259fcb99a3604081345","txlist_hash":"2be6ebe515877a76a7b83b1929ca2ef77be1df3aa3d6766c0c47450898ad7adf"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1147,310484,'insert','blocks','{"block_hash":"7cac2b3630c31b592fa0497792bed58d3c41120c009471c348b16b5578b3aa2b","block_index":310484,"block_time":310484000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1147,310483,'insert','blocks','{"block_hash":"7cac2b3630c31b592fa0497792bed58d3c41120c009471c348b16b5578b3aa2b","block_index":310484,"block_time":310484000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1148,310484,'parse','blocks','{"block_index":310484,"ledger_hash":"310bc7c61c1325ee3f97e888658fd74e1fe4adccef4924abb6978150fe6f3dad","messages_hash":"00e1362b924985f5761ae514112cc30c143a610d15e936fd909a52e8735eaaa1","txlist_hash":"ec800faf2b61e7b1c2c85157d09b058f59defc14ffbe64d82dffea2a0368ade2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1149,310485,'insert','blocks','{"block_hash":"eab5febc9668cd438178496417b22da5f77ceaed5bb6e01fc0f04bef1f5b4478","block_index":310485,"block_time":310485000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1149,310484,'insert','blocks','{"block_hash":"eab5febc9668cd438178496417b22da5f77ceaed5bb6e01fc0f04bef1f5b4478","block_index":310485,"block_time":310485000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1150,310485,'parse','blocks','{"block_index":310485,"ledger_hash":"b7f66db9ea5838b65286422d0cac262f6b81bbd5a7397adf7b8d85b21354dbcd","messages_hash":"f424a423cf7f105c5f1000cbbc4552b83589f70e959c2a062eca313f5713271d","txlist_hash":"c2c0301119eb8f6e5ee8f72a4f93366a7c2b9f327f087a5aabff7d73892ca74f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1151,310486,'insert','blocks','{"block_hash":"d4fbe610cc60987f2d1d35c7d8ad3ce32156ee5fe36ef8cc4f08b46836388862","block_index":310486,"block_time":310486000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1151,310485,'insert','blocks','{"block_hash":"d4fbe610cc60987f2d1d35c7d8ad3ce32156ee5fe36ef8cc4f08b46836388862","block_index":310486,"block_time":310486000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1152,310486,'insert','transactions','{"block_hash":"d4fbe610cc60987f2d1d35c7d8ad3ce32156ee5fe36ef8cc4f08b46836388862","block_index":310486,"block_time":310486000,"btc_amount":0,"data":"0000001e52bb33003ff0000000000000004c4b4009556e69742054657374","destination":"","fee":6800,"source":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","supported":true,"tx_hash":"3b95e07a2194174ac020de27e8b2b6ee24d5fc120f118df516ba28495657cf14","tx_index":487}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1153,310486,'insert','broadcasts','{"block_index":310486,"fee_fraction_int":5000000,"locked":false,"source":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","status":"valid","text":"Unit Test","timestamp":1388000000,"tx_hash":"3b95e07a2194174ac020de27e8b2b6ee24d5fc120f118df516ba28495657cf14","tx_index":487,"value":1.0}',0,'BROADCAST'); INSERT INTO messages VALUES(1154,310486,'parse','transactions','{"supported":true,"tx_hash":"3b95e07a2194174ac020de27e8b2b6ee24d5fc120f118df516ba28495657cf14","tx_index":487}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1155,310486,'parse','blocks','{"block_index":310486,"ledger_hash":"0f829769e4da773089d7b05047a499db5f6d1b17795d4fba912882caee9813e0","messages_hash":"3c08e19ebcb07664b7679a724ed18c73d7c8c7698a56f85f2fec5e7eb5a3ebd8","txlist_hash":"ea66c7d9251a0eb884fef48de05cb58bbcf3a9e08319f01c96f180aeb0de9bab"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1156,310487,'insert','blocks','{"block_hash":"32aa1b132d0643350bbb62dbd5f38ae0c270d8f491a2012c83b99158d58e464f","block_index":310487,"block_time":310487000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1156,310486,'insert','blocks','{"block_hash":"32aa1b132d0643350bbb62dbd5f38ae0c270d8f491a2012c83b99158d58e464f","block_index":310487,"block_time":310487000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1157,310487,'insert','transactions','{"block_hash":"32aa1b132d0643350bbb62dbd5f38ae0c270d8f491a2012c83b99158d58e464f","block_index":310487,"block_time":310487000,"btc_amount":5430,"data":"00000028000152bb3301000000000000000900000000000000090000000000000000000013b000000064","destination":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","fee":7650,"source":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","supported":true,"tx_hash":"41e821ae1c6b553d0fa5d5a807b2e7e9ffaec5d62706d9d2a59c6e65a3ed9cef","tx_index":488}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1158,310487,'insert','debits','{"action":"bet","address":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","asset":"XCP","block_index":310487,"event":"41e821ae1c6b553d0fa5d5a807b2e7e9ffaec5d62706d9d2a59c6e65a3ed9cef","quantity":9,"tx_index":488}',0,'DEBIT'); INSERT INTO messages VALUES(1159,310487,'insert','bets','{"bet_type":1,"block_index":310487,"counterwager_quantity":9,"counterwager_remaining":9,"deadline":1388000001,"expiration":100,"expire_index":310587,"fee_fraction_int":5000000.0,"feed_address":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","leverage":5040,"source":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","status":"open","target_value":0.0,"tx_hash":"41e821ae1c6b553d0fa5d5a807b2e7e9ffaec5d62706d9d2a59c6e65a3ed9cef","tx_index":488,"wager_quantity":9,"wager_remaining":9}',0,'OPEN_BET'); INSERT INTO messages VALUES(1160,310487,'parse','transactions','{"supported":true,"tx_hash":"41e821ae1c6b553d0fa5d5a807b2e7e9ffaec5d62706d9d2a59c6e65a3ed9cef","tx_index":488}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1161,310487,'parse','blocks','{"block_index":310487,"ledger_hash":"4b4d7a79843342e96e5d9d71bbc49690245b3098be75e7b86f273021d526216d","messages_hash":"900c8266900450b11b7b896e61baaea9e7f4677b5e722ac78cf07985c65a2e5b","txlist_hash":"76fbd411c43f3f67c8bf61138c5672de0cfda2d98f112a6e50b3a5d084d7cc72"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1162,310488,'insert','blocks','{"block_hash":"80b8dd5d7ce2e4886e6721095b892a39fb699980fe2bc1c17e747f822f4c4b1b","block_index":310488,"block_time":310488000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1162,310487,'insert','blocks','{"block_hash":"80b8dd5d7ce2e4886e6721095b892a39fb699980fe2bc1c17e747f822f4c4b1b","block_index":310488,"block_time":310488000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1163,310488,'insert','transactions','{"block_hash":"80b8dd5d7ce2e4886e6721095b892a39fb699980fe2bc1c17e747f822f4c4b1b","block_index":310488,"block_time":310488000,"btc_amount":0,"data":"0000001e52bb33023ff000000000000000000000096f7074696f6e732030","destination":"","fee":6800,"source":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","supported":true,"tx_hash":"870fb08b373705423f31ccd91fdbcabe135ad92d74e709a959dfa2e12f9a6638","tx_index":489}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1164,310488,'insert','broadcasts','{"block_index":310488,"fee_fraction_int":0,"locked":false,"source":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","status":"valid","text":"options 0","timestamp":1388000002,"tx_hash":"870fb08b373705423f31ccd91fdbcabe135ad92d74e709a959dfa2e12f9a6638","tx_index":489,"value":1.0}',0,'BROADCAST'); INSERT INTO messages VALUES(1165,310488,'parse','transactions','{"supported":true,"tx_hash":"870fb08b373705423f31ccd91fdbcabe135ad92d74e709a959dfa2e12f9a6638","tx_index":489}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1166,310488,'parse','blocks','{"block_index":310488,"ledger_hash":"2d7e59026ea4c8933e9c7474936931ca49d4af91f9b9985f3c76085fb3a69104","messages_hash":"7ea198be8ae7e7f46844b1f34a4021ac5612d6dce70b354a5bedb8e8d2ff7762","txlist_hash":"78e801f2d1968c860ac2563e9cc912c18cb8e5f95996011e84c289833fbd46da"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1167,310489,'insert','blocks','{"block_hash":"2efdb36f986b3e3ccc6cc9b0c1c3cdcb07429fb43cbc0cc3b6c87d1b33f258b6","block_index":310489,"block_time":310489000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1167,310488,'insert','blocks','{"block_hash":"2efdb36f986b3e3ccc6cc9b0c1c3cdcb07429fb43cbc0cc3b6c87d1b33f258b6","block_index":310489,"block_time":310489000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1168,310489,'insert','transactions','{"block_hash":"2efdb36f986b3e3ccc6cc9b0c1c3cdcb07429fb43cbc0cc3b6c87d1b33f258b6","block_index":310489,"block_time":310489000,"btc_amount":0,"data":"0000001e52bb33033ff000000000000000000000046c6f636b","destination":"","fee":6800,"source":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","supported":true,"tx_hash":"685d7f99fa76a05201c3239a4e0d9060ea53307b171f6ad7d482a26c73e9c0d1","tx_index":490}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1169,310489,'insert','broadcasts','{"block_index":310489,"fee_fraction_int":null,"locked":true,"source":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","status":"valid","text":null,"timestamp":0,"tx_hash":"685d7f99fa76a05201c3239a4e0d9060ea53307b171f6ad7d482a26c73e9c0d1","tx_index":490,"value":null}',0,'BROADCAST'); INSERT INTO messages VALUES(1170,310489,'parse','transactions','{"supported":true,"tx_hash":"685d7f99fa76a05201c3239a4e0d9060ea53307b171f6ad7d482a26c73e9c0d1","tx_index":490}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1171,310489,'parse','blocks','{"block_index":310489,"ledger_hash":"716354a370f344980e98785a444b56b21188bc699e7fbd0c877b6f2fabf35efc","messages_hash":"d9a37c0bf78624a6bb7630e8f1223f2157df34407341d9813e9ccbc807acf5db","txlist_hash":"23d9af03e6aa29fbab29c8e2a5a0419680053bba19594105cc8ef4d3db05d418"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1172,310490,'insert','blocks','{"block_hash":"e2cb04b8a7368c95359c9d5ff33e64209200fb606de0d64b7c0f67bb1cb8d87c","block_index":310490,"block_time":310490000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1172,310489,'insert','blocks','{"block_hash":"e2cb04b8a7368c95359c9d5ff33e64209200fb606de0d64b7c0f67bb1cb8d87c","block_index":310490,"block_time":310490000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1173,310490,'insert','transactions','{"block_hash":"e2cb04b8a7368c95359c9d5ff33e64209200fb606de0d64b7c0f67bb1cb8d87c","block_index":310490,"block_time":310490000,"btc_amount":0,"data":"0000001e52bb33043ff000000000000000000000096f7074696f6e732031","destination":"","fee":6800,"source":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","supported":true,"tx_hash":"7c437705c315212315c85c0b8ba09d358679c91be20b54f30929c5a6052426af","tx_index":491}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1174,310490,'insert','broadcasts','{"block_index":310490,"fee_fraction_int":0,"locked":false,"source":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","status":"valid","text":"options 1","timestamp":1388000004,"tx_hash":"7c437705c315212315c85c0b8ba09d358679c91be20b54f30929c5a6052426af","tx_index":491,"value":1.0}',0,'BROADCAST'); INSERT INTO messages VALUES(1175,310490,'parse','transactions','{"supported":true,"tx_hash":"7c437705c315212315c85c0b8ba09d358679c91be20b54f30929c5a6052426af","tx_index":491}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1176,310490,'parse','blocks','{"block_index":310490,"ledger_hash":"906a38f4256f50312891119c99721537992438af85421e317574ce1810e2b909","messages_hash":"d25fc5c1d965de9ba7a2e9642ee91920b982ee9304bc4b5f3b9a9a7da965706a","txlist_hash":"5f934032dce4102cd1d72d3f887526e78baa4a78991bc43cf0a1ebefe08fdec7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1177,310491,'insert','blocks','{"block_hash":"811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16","block_index":310491,"block_time":310491000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1177,310490,'insert','blocks','{"block_hash":"811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16","block_index":310491,"block_time":310491000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1178,310491,'insert','transactions','{"block_hash":"811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16","block_index":310491,"block_time":310491000,"btc_amount":0,"data":"0000000a00000000000000010000000005f5e100000000000000000000000000000c350007d000000000000dbba0","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498","tx_index":492}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1179,310491,'insert','debits','{"action":"open order","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310491,"event":"74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498","quantity":100000000,"tx_index":492}',0,'DEBIT'); INSERT INTO messages VALUES(1180,310491,'insert','orders','{"block_index":310491,"expiration":2000,"expire_index":312491,"fee_provided":6800,"fee_provided_remaining":6800,"fee_required":900000,"fee_required_remaining":900000,"get_asset":"BTC","get_quantity":800000,"get_remaining":800000,"give_asset":"XCP","give_quantity":100000000,"give_remaining":100000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"open","tx_hash":"74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498","tx_index":492}',0,'OPEN_ORDER'); INSERT INTO messages VALUES(1181,310491,'parse','transactions','{"supported":true,"tx_hash":"74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498","tx_index":492}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1182,310491,'parse','blocks','{"block_index":310491,"ledger_hash":"3114d8091cfcaa9944c6fab49d51950535c4ef269877d58c372ed80b2b472ec6","messages_hash":"9671cfedb3124b67ed996c547cb26a32e95490009ad56065c79be54a28c45994","txlist_hash":"f065728a3544adc085fae976759c0d040a34ca0a8ddd39260b55f0262cd5baa8"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1183,310492,'insert','blocks','{"block_hash":"8a09b2faf0a7ad67eb4ab5c948b9769fc87eb2ec5e16108f2cde8bd9e6cf7607","block_index":310492,"block_time":310492000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1183,310491,'insert','blocks','{"block_hash":"8a09b2faf0a7ad67eb4ab5c948b9769fc87eb2ec5e16108f2cde8bd9e6cf7607","block_index":310492,"block_time":310492000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1184,310492,'insert','transactions','{"block_hash":"8a09b2faf0a7ad67eb4ab5c948b9769fc87eb2ec5e16108f2cde8bd9e6cf7607","block_index":310492,"block_time":310492000,"btc_amount":0,"data":"0000000a000000000000000000000000000c350000000000000000010000000005f5e10007d00000000000000000","destination":"","fee":1000000,"source":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","supported":true,"tx_hash":"1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81","tx_index":493}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1185,310492,'insert','orders','{"block_index":310492,"expiration":2000,"expire_index":312492,"fee_provided":1000000,"fee_provided_remaining":1000000,"fee_required":0,"fee_required_remaining":0,"get_asset":"XCP","get_quantity":100000000,"get_remaining":100000000,"give_asset":"BTC","give_quantity":800000,"give_remaining":800000,"source":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","status":"open","tx_hash":"1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81","tx_index":493}',0,'OPEN_ORDER'); INSERT INTO messages VALUES(1186,310492,'update','orders','{"fee_provided_remaining":6800,"fee_required_remaining":892800,"get_remaining":0,"give_remaining":0,"status":"open","tx_hash":"74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498"}',0,'ORDER_UPDATE'); @@ -2156,12 +2156,12 @@ INSERT INTO messages VALUES(1187,310492,'update','orders','{"fee_provided_remain INSERT INTO messages VALUES(1188,310492,'insert','order_matches','{"backward_asset":"BTC","backward_quantity":800000,"block_index":310492,"fee_paid":7200,"forward_asset":"XCP","forward_quantity":100000000,"id":"74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498_1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81","match_expire_index":310512,"status":"pending","tx0_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","tx0_block_index":310491,"tx0_expiration":2000,"tx0_hash":"74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498","tx0_index":492,"tx1_address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","tx1_block_index":310492,"tx1_expiration":2000,"tx1_hash":"1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81","tx1_index":493}',0,'ORDER_MATCH'); INSERT INTO messages VALUES(1189,310492,'parse','transactions','{"supported":true,"tx_hash":"1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81","tx_index":493}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1190,310492,'parse','blocks','{"block_index":310492,"ledger_hash":"98af18583618fdeed545347c013763d068e8294405d265911cc5e1bc420bc740","messages_hash":"0d34fbc26126add5a57b7e8f6f71bad150d7232abf046f3fa9b1fc72b10d61b2","txlist_hash":"daf4d2c1a1ad5206abcf7744bdd06fae99c442fb2607a843dcabb5727d02916e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1191,310493,'insert','blocks','{"block_hash":"c19e2915b750279b2be4b52e57e5ce29f63dffb4e14d9aad30c9e820affc0cbf","block_index":310493,"block_time":310493000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1191,310492,'insert','blocks','{"block_hash":"c19e2915b750279b2be4b52e57e5ce29f63dffb4e14d9aad30c9e820affc0cbf","block_index":310493,"block_time":310493000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1192,310493,'insert','transactions','{"block_hash":"c19e2915b750279b2be4b52e57e5ce29f63dffb4e14d9aad30c9e820affc0cbf","block_index":310493,"block_time":310493000,"btc_amount":62000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":5625,"source":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","supported":true,"tx_hash":"c0733e1287afb1bb3d2fdacd1db7c74ea84f14362f3a8d1c038e662e1d0b1b1a","tx_index":494}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1193,310493,'insert','credits','{"address":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","asset":"XCP","block_index":310493,"calling_function":"burn","event":"c0733e1287afb1bb3d2fdacd1db7c74ea84f14362f3a8d1c038e662e1d0b1b1a","quantity":92995878046,"tx_index":494}',0,'CREDIT'); INSERT INTO messages VALUES(1194,310493,'insert','burns','{"block_index":310493,"burned":62000000,"earned":92995878046,"source":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","status":"valid","tx_hash":"c0733e1287afb1bb3d2fdacd1db7c74ea84f14362f3a8d1c038e662e1d0b1b1a","tx_index":494}',0,'BURN'); INSERT INTO messages VALUES(1195,310493,'parse','blocks','{"block_index":310493,"ledger_hash":"29119cd30a4733916fbfd0551506eaa16f7bb1bdfbdf8d17ac4e5bb20d1cb09c","messages_hash":"53a339feb73df3a98bc4acc84af77e111d4780533c8f5a26cf250594d9613cf2","txlist_hash":"7ec4cfa94544900c8e8732ad51be7cee6452aa1884ea940cd5c98862fb4aaba6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1196,310494,'insert','blocks','{"block_hash":"7dda1d3e12785313d5651ee5314d0aecf17588196f9150b10c55695dbaebee5d","block_index":310494,"block_time":310494000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1196,310493,'insert','blocks','{"block_hash":"7dda1d3e12785313d5651ee5314d0aecf17588196f9150b10c55695dbaebee5d","block_index":310494,"block_time":310494000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1197,310494,'insert','transactions','{"block_hash":"7dda1d3e12785313d5651ee5314d0aecf17588196f9150b10c55695dbaebee5d","block_index":310494,"block_time":310494000,"btc_amount":0,"data":"00000014000000063e985ffd00000000000000640100000000000000000000","destination":"","fee":6800,"source":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","supported":true,"tx_hash":"321bed395482e034f2ce0a4dbf28d1f800592a658e26ea91ae9c5b0928204503","tx_index":495}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1198,310494,'insert','debits','{"action":"issuance fee","address":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","asset":"XCP","block_index":310494,"event":"321bed395482e034f2ce0a4dbf28d1f800592a658e26ea91ae9c5b0928204503","quantity":50000000,"tx_index":495}',0,'DEBIT'); INSERT INTO messages VALUES(1199,310494,'insert','assets','{"asset_id":"26819977213","asset_longname":null,"asset_name":"DIVIDEND","block_index":310494}',0,'ASSET_CREATION'); @@ -2169,21 +2169,21 @@ INSERT INTO messages VALUES(1200,310494,'insert','issuances','{"asset":"DIVIDEND INSERT INTO messages VALUES(1201,310494,'insert','credits','{"address":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","asset":"DIVIDEND","block_index":310494,"calling_function":"issuance","event":"321bed395482e034f2ce0a4dbf28d1f800592a658e26ea91ae9c5b0928204503","quantity":100,"tx_index":495}',0,'CREDIT'); INSERT INTO messages VALUES(1202,310494,'parse','transactions','{"supported":true,"tx_hash":"321bed395482e034f2ce0a4dbf28d1f800592a658e26ea91ae9c5b0928204503","tx_index":495}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1203,310494,'parse','blocks','{"block_index":310494,"ledger_hash":"72d71bd72263699ea9f2b097ad141be5bc394f49d8b0b0a6b2ff6a87b0ee3919","messages_hash":"0d3c87692d49dc033eed975eb8b8ee17ff2f0f877c8ed5a5866f73ce63bf8715","txlist_hash":"9350c3ba33d0546d1194c5fa767ced28834b26246aedc56d89b1d48ec4f26014"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1204,310495,'insert','blocks','{"block_hash":"4769aa7030f28a05a137a85ef4ee0c1765c37013773212b93ec90f1227168b67","block_index":310495,"block_time":310495000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1204,310494,'insert','blocks','{"block_hash":"4769aa7030f28a05a137a85ef4ee0c1765c37013773212b93ec90f1227168b67","block_index":310495,"block_time":310495000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1205,310495,'insert','transactions','{"block_hash":"4769aa7030f28a05a137a85ef4ee0c1765c37013773212b93ec90f1227168b67","block_index":310495,"block_time":310495000,"btc_amount":5430,"data":"00000000000000063e985ffd000000000000000a","destination":"mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj","fee":7650,"source":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","supported":true,"tx_hash":"02156b9a1f643fb48330396274a37620c8abbbe5eddb2f8b53dadd135f5d2e2e","tx_index":496}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1206,310495,'insert','debits','{"action":"send","address":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","asset":"DIVIDEND","block_index":310495,"event":"02156b9a1f643fb48330396274a37620c8abbbe5eddb2f8b53dadd135f5d2e2e","quantity":10,"tx_index":496}',0,'DEBIT'); INSERT INTO messages VALUES(1207,310495,'insert','credits','{"address":"mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj","asset":"DIVIDEND","block_index":310495,"calling_function":"send","event":"02156b9a1f643fb48330396274a37620c8abbbe5eddb2f8b53dadd135f5d2e2e","quantity":10,"tx_index":496}',0,'CREDIT'); INSERT INTO messages VALUES(1208,310495,'insert','sends','{"asset":"DIVIDEND","block_index":310495,"destination":"mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj","quantity":10,"source":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","status":"valid","tx_hash":"02156b9a1f643fb48330396274a37620c8abbbe5eddb2f8b53dadd135f5d2e2e","tx_index":496}',0,'SEND'); INSERT INTO messages VALUES(1209,310495,'parse','transactions','{"supported":true,"tx_hash":"02156b9a1f643fb48330396274a37620c8abbbe5eddb2f8b53dadd135f5d2e2e","tx_index":496}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1210,310495,'parse','blocks','{"block_index":310495,"ledger_hash":"5a7e5a36882466373d576bb5f4ccd1bc72ecaf548b9589baa803a7275a7a24cd","messages_hash":"56518bc9abc11bf108188834058bb9c51c9b8dc3b6276116c5b786b07c797fab","txlist_hash":"09e9db121649cacd979fd18bbaa35e519361e727e7e072e2f2f86291160cdb29"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1211,310496,'insert','blocks','{"block_hash":"65884816927e8c566655e85c07bc2bc2c7ee26e625742f219939d43238fb31f8","block_index":310496,"block_time":310496000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1211,310495,'insert','blocks','{"block_hash":"65884816927e8c566655e85c07bc2bc2c7ee26e625742f219939d43238fb31f8","block_index":310496,"block_time":310496000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1212,310496,'insert','transactions','{"block_hash":"65884816927e8c566655e85c07bc2bc2c7ee26e625742f219939d43238fb31f8","block_index":310496,"block_time":310496000,"btc_amount":5430,"data":"00000000000000000000000100000015a4018c1e","destination":"mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj","fee":7650,"source":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","supported":true,"tx_hash":"a35ab1736565aceddbd1d71f92fc7f39d1361006aa9099f731e54e762964d5ba","tx_index":497}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1213,310496,'insert','debits','{"action":"send","address":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","asset":"XCP","block_index":310496,"event":"a35ab1736565aceddbd1d71f92fc7f39d1361006aa9099f731e54e762964d5ba","quantity":92945878046,"tx_index":497}',0,'DEBIT'); INSERT INTO messages VALUES(1214,310496,'insert','credits','{"address":"mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj","asset":"XCP","block_index":310496,"calling_function":"send","event":"a35ab1736565aceddbd1d71f92fc7f39d1361006aa9099f731e54e762964d5ba","quantity":92945878046,"tx_index":497}',0,'CREDIT'); INSERT INTO messages VALUES(1215,310496,'insert','sends','{"asset":"XCP","block_index":310496,"destination":"mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj","quantity":92945878046,"source":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","status":"valid","tx_hash":"a35ab1736565aceddbd1d71f92fc7f39d1361006aa9099f731e54e762964d5ba","tx_index":497}',0,'SEND'); INSERT INTO messages VALUES(1216,310496,'parse','transactions','{"supported":true,"tx_hash":"a35ab1736565aceddbd1d71f92fc7f39d1361006aa9099f731e54e762964d5ba","tx_index":497}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1217,310496,'parse','blocks','{"block_index":310496,"ledger_hash":"7ac6121c624b634f44695172761830926afe76bb18c4cc9195773f3a26966941","messages_hash":"1b1ed76f99d39b36f4d0737299ce15b21fed9e077d0476658c023b09819853a7","txlist_hash":"9eda85cce745579122ba9c6e24b63cd83f2e5161031a34e6ee9bf08b80823cb4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1218,310497,'insert','blocks','{"block_hash":"f1118591fe79b8bf52ccf0c5de9826bfd266b1fdc24b44676cf22bbcc76d464e","block_index":310497,"block_time":310497000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1218,310496,'insert','blocks','{"block_hash":"f1118591fe79b8bf52ccf0c5de9826bfd266b1fdc24b44676cf22bbcc76d464e","block_index":310497,"block_time":310497000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1219,310497,'insert','transactions','{"block_hash":"f1118591fe79b8bf52ccf0c5de9826bfd266b1fdc24b44676cf22bbcc76d464e","block_index":310497,"block_time":310497000,"btc_amount":0,"data":"00000014000000000aa4097d0000000005f5e100010000000000000000000c506172656e74206173736574","destination":"","fee":6300,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"076ae3d8eeb7fb40d2ae27692340157c746d9832806766b0dac5adb1526dc78f","tx_index":498}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1220,310497,'insert','debits','{"action":"issuance fee","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310497,"event":"076ae3d8eeb7fb40d2ae27692340157c746d9832806766b0dac5adb1526dc78f","quantity":50000000,"tx_index":498}',0,'DEBIT'); INSERT INTO messages VALUES(1221,310497,'insert','assets','{"asset_id":"178522493","asset_longname":null,"asset_name":"PARENT","block_index":310497}',0,'ASSET_CREATION'); @@ -2191,7 +2191,7 @@ INSERT INTO messages VALUES(1222,310497,'insert','issuances','{"asset":"PARENT", INSERT INTO messages VALUES(1223,310497,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"PARENT","block_index":310497,"calling_function":"issuance","event":"076ae3d8eeb7fb40d2ae27692340157c746d9832806766b0dac5adb1526dc78f","quantity":100000000,"tx_index":498}',0,'CREDIT'); INSERT INTO messages VALUES(1224,310497,'parse','transactions','{"supported":true,"tx_hash":"076ae3d8eeb7fb40d2ae27692340157c746d9832806766b0dac5adb1526dc78f","tx_index":498}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1225,310497,'parse','blocks','{"block_index":310497,"ledger_hash":"28c6e92b2299b9cbbb5953f8b7ff3de0fe962d15642ba27e43faa64e1935e819","messages_hash":"ac8d8759fbddc8f92ad8b5d8b4637a63b8d21a04ba1a4126baf2b42a87edfce3","txlist_hash":"ff8136601b9e0138a999d1f0467af6e8535a2bcdd2b622af7be0178a083b9519"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1226,310498,'insert','blocks','{"block_hash":"b7058b6d1ddc325a10bf33144937e06ce6025215b416518ae120da9440ae279e","block_index":310498,"block_time":310498000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1226,310497,'insert','blocks','{"block_hash":"b7058b6d1ddc325a10bf33144937e06ce6025215b416518ae120da9440ae279e","block_index":310498,"block_time":310498000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1227,310498,'insert','transactions','{"block_hash":"b7058b6d1ddc325a10bf33144937e06ce6025215b416518ae120da9440ae279e","block_index":310498,"block_time":310498000,"btc_amount":0,"data":"0000001501530821671b10650000000005f5e10001108e90a57dba9967c422e83080f22f0c684368696c64206f6620706172656e74","destination":"","fee":6550,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"0abfce2662c05852fd8b181a60900678643cedad47b23a853b8c4eda82cb2cbf","tx_index":499}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1228,310498,'insert','debits','{"action":"issuance fee","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310498,"event":"0abfce2662c05852fd8b181a60900678643cedad47b23a853b8c4eda82cb2cbf","quantity":25000000,"tx_index":499}',0,'DEBIT'); INSERT INTO messages VALUES(1229,310498,'insert','assets','{"asset_id":"95428956661682277","asset_longname":"PARENT.already.issued","asset_name":"A95428956661682277","block_index":310498}',0,'ASSET_CREATION'); @@ -2199,11 +2199,11 @@ INSERT INTO messages VALUES(1230,310498,'insert','issuances','{"asset":"A9542895 INSERT INTO messages VALUES(1231,310498,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"A95428956661682277","block_index":310498,"calling_function":"issuance","event":"0abfce2662c05852fd8b181a60900678643cedad47b23a853b8c4eda82cb2cbf","quantity":100000000,"tx_index":499}',0,'CREDIT'); INSERT INTO messages VALUES(1232,310498,'parse','transactions','{"supported":true,"tx_hash":"0abfce2662c05852fd8b181a60900678643cedad47b23a853b8c4eda82cb2cbf","tx_index":499}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1233,310498,'parse','blocks','{"block_index":310498,"ledger_hash":"5fe6cdb0828379bf240fad99c68bba34e1889bbc19605ce5c297b82352264414","messages_hash":"113207bd13dda56b5e5edf305f70a56e62cc861184e1e95a64e79ce100462c98","txlist_hash":"b488f6f0e6c233f202ee17c0843236d464144e79c870af88bae56355ae9372b7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1234,310499,'insert','blocks','{"block_hash":"1950e1a4d7fc820ed9603f6df6819c3c953c277c726340dec2a4253e261a1764","block_index":310499,"block_time":310499000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1234,310498,'insert','blocks','{"block_hash":"1950e1a4d7fc820ed9603f6df6819c3c953c277c726340dec2a4253e261a1764","block_index":310499,"block_time":310499000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1235,310499,'parse','blocks','{"block_index":310499,"ledger_hash":"b9fcbdafddd46fdda061f6e9f8744b426b6ca37e32b315df1098cbc7899ae9b9","messages_hash":"d6aedacd4f81520d86ae47c9c776d17a213c706a5cf7c91203a4299261d1648c","txlist_hash":"032166892f568bb97f4f69ef5bdf49cc1b15cc9f8c7f6c1f3e1f9d54816ad7e5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1236,310500,'insert','blocks','{"block_hash":"54aeaf47d5387964e2d51617bf3af50520a0449410e0d096cf8c2aa9dad5550b","block_index":310500,"block_time":310500000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1236,310499,'insert','blocks','{"block_hash":"54aeaf47d5387964e2d51617bf3af50520a0449410e0d096cf8c2aa9dad5550b","block_index":310500,"block_time":310500000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1237,310500,'parse','blocks','{"block_index":310500,"ledger_hash":"5ffefc7a2724be6bd697796bb82638ec913c5cbb73627153d1a13b48c7a6c02d","messages_hash":"45f296a535c13129cb1aaeb4e28a03e04ad902917891c39ae59ea2894e9f868f","txlist_hash":"35f4a33840d002ab4e0e44f11c1749ae95b41376927fb346140508b32518edd1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1238,310501,'insert','blocks','{"block_hash":"9d9019d15a1d878f2c39c7e3de4340a043a4a31aebb298acdf8e913284ae26ba","block_index":310501,"block_time":310501000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1238,310500,'insert','blocks','{"block_hash":"9d9019d15a1d878f2c39c7e3de4340a043a4a31aebb298acdf8e913284ae26ba","block_index":310501,"block_time":310501000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); -- Triggers and indices on messages CREATE TRIGGER block_update_messages BEFORE UPDATE ON messages BEGIN diff --git a/counterparty-core/counterpartycore/test/fixtures/scenarios/simplesig.sql b/counterparty-core/counterpartycore/test/fixtures/scenarios/simplesig.sql index 5e2e9b5866..5dda0aad4b 100644 --- a/counterparty-core/counterpartycore/test/fixtures/scenarios/simplesig.sql +++ b/counterparty-core/counterpartycore/test/fixtures/scenarios/simplesig.sql @@ -465,26 +465,26 @@ CREATE TABLE messages( bindings TEXT, timestamp INTEGER, event TEXT); -INSERT INTO messages VALUES(0,309999,'insert','blocks','{"block_hash":"8b3bef249cb3b0fa23a4936c1249b6bd41daeadc848c8d2e409ea1cbc10adfe7","block_index":309999,"block_time":309999000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(0,0,'insert','blocks','{"block_hash":"8b3bef249cb3b0fa23a4936c1249b6bd41daeadc848c8d2e409ea1cbc10adfe7","block_index":309999,"block_time":309999000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1,309999,'parse','blocks','{"block_index":309999,"ledger_hash":"63f0fef31d02da85fa779e9a0e1b585b1a6a4e59e14564249e288e074e91c223","messages_hash":"63f0fef31d02da85fa779e9a0e1b585b1a6a4e59e14564249e288e074e91c223","txlist_hash":"63f0fef31d02da85fa779e9a0e1b585b1a6a4e59e14564249e288e074e91c223"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(2,310000,'insert','blocks','{"block_hash":"505d8d82c4ced7daddef7ed0b05ba12ecc664176887b938ef56c6af276f3b30c","block_index":310000,"block_time":310000000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(2,309999,'insert','blocks','{"block_hash":"505d8d82c4ced7daddef7ed0b05ba12ecc664176887b938ef56c6af276f3b30c","block_index":310000,"block_time":310000000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(3,310000,'insert','transactions','{"block_hash":"505d8d82c4ced7daddef7ed0b05ba12ecc664176887b938ef56c6af276f3b30c","block_index":310000,"block_time":310000000,"btc_amount":62000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":5625,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"6dc5b0a33d4d4297e0f5cc2d23ae307951d32aab2d86b7fa147b385219f3a597","tx_index":1}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(4,310000,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310000,"calling_function":"burn","event":"6dc5b0a33d4d4297e0f5cc2d23ae307951d32aab2d86b7fa147b385219f3a597","quantity":93000000000,"tx_index":1}',0,'CREDIT'); INSERT INTO messages VALUES(5,310000,'insert','burns','{"block_index":310000,"burned":62000000,"earned":93000000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"6dc5b0a33d4d4297e0f5cc2d23ae307951d32aab2d86b7fa147b385219f3a597","tx_index":1}',0,'BURN'); INSERT INTO messages VALUES(6,310000,'parse','blocks','{"block_index":310000,"ledger_hash":"cf0ea1d313e22ba5f413075b88e07dffc5c00e59f95eeb6d6dec935bd77f5ae4","messages_hash":"9e7dd13f1ecb4ec6481076dc9bb5fda1bdb9103747455f9de9ab516748201ef0","txlist_hash":"f06c23e6040a063ed59693baa0d63492dce64e1debc7455b22f5535c9dfbdc67"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(7,310001,'insert','blocks','{"block_hash":"3c9f6a9c6cac46a9273bd3db39ad775acd5bc546378ec2fb0587e06e112cc78e","block_index":310001,"block_time":310001000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(7,310000,'insert','blocks','{"block_hash":"3c9f6a9c6cac46a9273bd3db39ad775acd5bc546378ec2fb0587e06e112cc78e","block_index":310001,"block_time":310001000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(8,310001,'insert','transactions','{"block_hash":"3c9f6a9c6cac46a9273bd3db39ad775acd5bc546378ec2fb0587e06e112cc78e","block_index":310001,"block_time":310001000,"btc_amount":5430,"data":"0000000000000000000000010000000002faf080","destination":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"3b273ba342ed8bd4ccd2ae28d3df7754768a6c65ec1cee4a6e84b4b4bdec8d8c","tx_index":2}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(9,310001,'insert','debits','{"action":"send","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310001,"event":"3b273ba342ed8bd4ccd2ae28d3df7754768a6c65ec1cee4a6e84b4b4bdec8d8c","quantity":50000000,"tx_index":2}',0,'DEBIT'); INSERT INTO messages VALUES(10,310001,'insert','credits','{"address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","asset":"XCP","block_index":310001,"calling_function":"send","event":"3b273ba342ed8bd4ccd2ae28d3df7754768a6c65ec1cee4a6e84b4b4bdec8d8c","quantity":50000000,"tx_index":2}',0,'CREDIT'); INSERT INTO messages VALUES(11,310001,'insert','sends','{"asset":"XCP","block_index":310001,"destination":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","quantity":50000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"3b273ba342ed8bd4ccd2ae28d3df7754768a6c65ec1cee4a6e84b4b4bdec8d8c","tx_index":2}',0,'SEND'); INSERT INTO messages VALUES(12,310001,'parse','transactions','{"supported":true,"tx_hash":"3b273ba342ed8bd4ccd2ae28d3df7754768a6c65ec1cee4a6e84b4b4bdec8d8c","tx_index":2}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(13,310001,'parse','blocks','{"block_index":310001,"ledger_hash":"bdf1308701712d94da26f53fef4c440ea2fb7b0ef7361f424ba9263e747272bd","messages_hash":"8e1a31c7d7fa8f0fe6981c7b33a5832fef697516b3e3bdaf732746550bf2a9eb","txlist_hash":"fac614e6f77f1b954c12523e9d0eeb4252f92f3640f7d067790a510a9e893811"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(14,310002,'insert','blocks','{"block_hash":"fbb60f1144e1f7d4dc036a4a158a10ea6dea2ba6283a723342a49b8eb5cc9964","block_index":310002,"block_time":310002000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(14,310001,'insert','blocks','{"block_hash":"fbb60f1144e1f7d4dc036a4a158a10ea6dea2ba6283a723342a49b8eb5cc9964","block_index":310002,"block_time":310002000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(15,310002,'insert','transactions','{"block_hash":"fbb60f1144e1f7d4dc036a4a158a10ea6dea2ba6283a723342a49b8eb5cc9964","block_index":310002,"block_time":310002000,"btc_amount":0,"data":"0000000a00000000000000000000000002faf08000000000000000010000000005f5e100000a0000000000000000","destination":"","fee":1000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"6bdb2ef465e9fc04060f58ced26c159dc983a616cb121c5e7954e66833444c59","tx_index":3}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(16,310002,'insert','orders','{"block_index":310002,"expiration":10,"expire_index":310012,"fee_provided":1000000,"fee_provided_remaining":1000000,"fee_required":0,"fee_required_remaining":0,"get_asset":"XCP","get_quantity":100000000,"get_remaining":100000000,"give_asset":"BTC","give_quantity":50000000,"give_remaining":50000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"open","tx_hash":"6bdb2ef465e9fc04060f58ced26c159dc983a616cb121c5e7954e66833444c59","tx_index":3}',0,'OPEN_ORDER'); INSERT INTO messages VALUES(17,310002,'parse','transactions','{"supported":true,"tx_hash":"6bdb2ef465e9fc04060f58ced26c159dc983a616cb121c5e7954e66833444c59","tx_index":3}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(18,310002,'parse','blocks','{"block_index":310002,"ledger_hash":"cf830f949715ebeac09d4441878f60ac04d691c09d6c25c62a0d30fb5886cba9","messages_hash":"d5c067448e960b3b7609d4bc33f28739e755833b8752d57757dc8fe6bfdaaef2","txlist_hash":"0c743d61c27efab7c83c1845f6b0446b67c9b59173318709d51363e75e7a0601"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(19,310003,'insert','blocks','{"block_hash":"d50825dcb32bcf6f69994d616eba18de7718d3d859497e80751b2cb67e333e8a","block_index":310003,"block_time":310003000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(19,310002,'insert','blocks','{"block_hash":"d50825dcb32bcf6f69994d616eba18de7718d3d859497e80751b2cb67e333e8a","block_index":310003,"block_time":310003000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(20,310003,'insert','transactions','{"block_hash":"d50825dcb32bcf6f69994d616eba18de7718d3d859497e80751b2cb67e333e8a","block_index":310003,"block_time":310003000,"btc_amount":0,"data":"0000000a00000000000000010000000006422c4000000000000000000000000002faf080000a00000000000dbba0","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"36d00f8c35a9c6ecc7dd0a64610b1c39a71110d1a95face6a2486a6a7a1ff83c","tx_index":4}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(21,310003,'insert','debits','{"action":"open order","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310003,"event":"36d00f8c35a9c6ecc7dd0a64610b1c39a71110d1a95face6a2486a6a7a1ff83c","quantity":105000000,"tx_index":4}',0,'DEBIT'); INSERT INTO messages VALUES(22,310003,'insert','orders','{"block_index":310003,"expiration":10,"expire_index":310013,"fee_provided":6800,"fee_provided_remaining":6800,"fee_required":900000,"fee_required_remaining":900000,"get_asset":"BTC","get_quantity":50000000,"get_remaining":50000000,"give_asset":"XCP","give_quantity":105000000,"give_remaining":105000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"open","tx_hash":"36d00f8c35a9c6ecc7dd0a64610b1c39a71110d1a95face6a2486a6a7a1ff83c","tx_index":4}',0,'OPEN_ORDER'); @@ -493,14 +493,14 @@ INSERT INTO messages VALUES(24,310003,'update','orders','{"fee_provided_remainin INSERT INTO messages VALUES(25,310003,'insert','order_matches','{"backward_asset":"XCP","backward_quantity":100000000,"block_index":310003,"fee_paid":857142,"forward_asset":"BTC","forward_quantity":50000000,"id":"6bdb2ef465e9fc04060f58ced26c159dc983a616cb121c5e7954e66833444c59_36d00f8c35a9c6ecc7dd0a64610b1c39a71110d1a95face6a2486a6a7a1ff83c","match_expire_index":310023,"status":"pending","tx0_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","tx0_block_index":310002,"tx0_expiration":10,"tx0_hash":"6bdb2ef465e9fc04060f58ced26c159dc983a616cb121c5e7954e66833444c59","tx0_index":3,"tx1_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","tx1_block_index":310003,"tx1_expiration":10,"tx1_hash":"36d00f8c35a9c6ecc7dd0a64610b1c39a71110d1a95face6a2486a6a7a1ff83c","tx1_index":4}',0,'ORDER_MATCH'); INSERT INTO messages VALUES(26,310003,'parse','transactions','{"supported":true,"tx_hash":"36d00f8c35a9c6ecc7dd0a64610b1c39a71110d1a95face6a2486a6a7a1ff83c","tx_index":4}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(27,310003,'parse','blocks','{"block_index":310003,"ledger_hash":"e881a675a38c4649cd44e6406ddc494996c761671bc349dcdea1de430a84258d","messages_hash":"c060770e246851710cba711099d9f8ccfed66a792b2e64d68ae887e1b83bac51","txlist_hash":"9ae051d14f8d19db67a85c713eefc0a936f1bad818ae1138fcecb91506a46d88"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(28,310004,'insert','blocks','{"block_hash":"60cdc0ac0e3121ceaa2c3885f21f5789f49992ffef6e6ff99f7da80e36744615","block_index":310004,"block_time":310004000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(28,310003,'insert','blocks','{"block_hash":"60cdc0ac0e3121ceaa2c3885f21f5789f49992ffef6e6ff99f7da80e36744615","block_index":310004,"block_time":310004000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(29,310004,'insert','transactions','{"block_hash":"60cdc0ac0e3121ceaa2c3885f21f5789f49992ffef6e6ff99f7da80e36744615","block_index":310004,"block_time":310004000,"btc_amount":50000000,"data":"0000000b6bdb2ef465e9fc04060f58ced26c159dc983a616cb121c5e7954e66833444c5936d00f8c35a9c6ecc7dd0a64610b1c39a71110d1a95face6a2486a6a7a1ff83c","destination":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","fee":9675,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"843c5df8f979db230ba61f26ad1342ed5803adeba7333b019b8a96ac6703f099","tx_index":5}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(30,310004,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310004,"calling_function":"btcpay","event":"843c5df8f979db230ba61f26ad1342ed5803adeba7333b019b8a96ac6703f099","quantity":100000000,"tx_index":5}',0,'CREDIT'); INSERT INTO messages VALUES(31,310004,'update','order_matches','{"id":"6bdb2ef465e9fc04060f58ced26c159dc983a616cb121c5e7954e66833444c59_36d00f8c35a9c6ecc7dd0a64610b1c39a71110d1a95face6a2486a6a7a1ff83c","order_match_id":"6bdb2ef465e9fc04060f58ced26c159dc983a616cb121c5e7954e66833444c59_36d00f8c35a9c6ecc7dd0a64610b1c39a71110d1a95face6a2486a6a7a1ff83c","status":"completed"}',0,'ORDER_MATCH_UPDATE'); INSERT INTO messages VALUES(32,310004,'insert','btcpays','{"block_index":310004,"btc_amount":50000000,"destination":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","order_match_id":"6bdb2ef465e9fc04060f58ced26c159dc983a616cb121c5e7954e66833444c59_36d00f8c35a9c6ecc7dd0a64610b1c39a71110d1a95face6a2486a6a7a1ff83c","source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"843c5df8f979db230ba61f26ad1342ed5803adeba7333b019b8a96ac6703f099","tx_index":5}',0,'BTC_PAY'); INSERT INTO messages VALUES(33,310004,'parse','transactions','{"supported":true,"tx_hash":"843c5df8f979db230ba61f26ad1342ed5803adeba7333b019b8a96ac6703f099","tx_index":5}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(34,310004,'parse','blocks','{"block_index":310004,"ledger_hash":"13e0c6276f297ff1ca77705f1b18d807ca22f53735fba52f4f5c3766dc4b04e8","messages_hash":"0238a76faa733825349cf252aa10cfc94392cccd7599025643ac132abf329636","txlist_hash":"a865bc7b6e26b3c3868ae080ab927ce3f2dcdb7d3654ffbcd1b3a8111d0807b1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(35,310005,'insert','blocks','{"block_hash":"8005c2926b7ecc50376642bc661a49108b6dc62636463a5c492b123e2184cd9a","block_index":310005,"block_time":310005000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(35,310004,'insert','blocks','{"block_hash":"8005c2926b7ecc50376642bc661a49108b6dc62636463a5c492b123e2184cd9a","block_index":310005,"block_time":310005000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(36,310005,'insert','transactions','{"block_hash":"8005c2926b7ecc50376642bc661a49108b6dc62636463a5c492b123e2184cd9a","block_index":310005,"block_time":310005000,"btc_amount":0,"data":"000000140000000000004767000000003b9aca000100000000000000000000","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"5d951d44d034cb6fd5dc5c98cd877c63f55c1ae108d335b6b6d991d072856adf","tx_index":6}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(37,310005,'insert','debits','{"action":"issuance fee","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310005,"event":"5d951d44d034cb6fd5dc5c98cd877c63f55c1ae108d335b6b6d991d072856adf","quantity":50000000,"tx_index":6}',0,'DEBIT'); INSERT INTO messages VALUES(38,310005,'insert','assets','{"asset_id":"18279","asset_longname":null,"asset_name":"BBBB","block_index":310005}',0,'ASSET_CREATION'); @@ -508,7 +508,7 @@ INSERT INTO messages VALUES(39,310005,'insert','issuances','{"asset":"BBBB","ass INSERT INTO messages VALUES(40,310005,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"BBBB","block_index":310005,"calling_function":"issuance","event":"5d951d44d034cb6fd5dc5c98cd877c63f55c1ae108d335b6b6d991d072856adf","quantity":1000000000,"tx_index":6}',0,'CREDIT'); INSERT INTO messages VALUES(41,310005,'parse','transactions','{"supported":true,"tx_hash":"5d951d44d034cb6fd5dc5c98cd877c63f55c1ae108d335b6b6d991d072856adf","tx_index":6}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(42,310005,'parse','blocks','{"block_index":310005,"ledger_hash":"765896f532b411af9f889687a750d44414296c20002f3e2abed9551a6822937d","messages_hash":"2be211b1beee52aa7be5d2f229a93c3795d226c12eac8fbfee98b2742ce1e0d8","txlist_hash":"59095fce5f573c2ff1b5eda5cd75c36227b0f9782601e7538215fea5317c505b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(43,310006,'insert','blocks','{"block_hash":"bdad69d1669eace68b9f246de113161099d4f83322e2acf402c42defef3af2bb","block_index":310006,"block_time":310006000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(43,310005,'insert','blocks','{"block_hash":"bdad69d1669eace68b9f246de113161099d4f83322e2acf402c42defef3af2bb","block_index":310006,"block_time":310006000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(44,310006,'insert','transactions','{"block_hash":"bdad69d1669eace68b9f246de113161099d4f83322e2acf402c42defef3af2bb","block_index":310006,"block_time":310006000,"btc_amount":0,"data":"00000014000000000000476800000000000186a00000000000000000000006666f6f626172","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"2b44f590422a3ab5b70fb1265a2e4f4d3b0bcb3de3f296dc7280924870ec8c59","tx_index":7}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(45,310006,'insert','debits','{"action":"issuance fee","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310006,"event":"2b44f590422a3ab5b70fb1265a2e4f4d3b0bcb3de3f296dc7280924870ec8c59","quantity":50000000,"tx_index":7}',0,'DEBIT'); INSERT INTO messages VALUES(46,310006,'insert','assets','{"asset_id":"18280","asset_longname":null,"asset_name":"BBBC","block_index":310006}',0,'ASSET_CREATION'); @@ -516,21 +516,21 @@ INSERT INTO messages VALUES(47,310006,'insert','issuances','{"asset":"BBBC","ass INSERT INTO messages VALUES(48,310006,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"BBBC","block_index":310006,"calling_function":"issuance","event":"2b44f590422a3ab5b70fb1265a2e4f4d3b0bcb3de3f296dc7280924870ec8c59","quantity":100000,"tx_index":7}',0,'CREDIT'); INSERT INTO messages VALUES(49,310006,'parse','transactions','{"supported":true,"tx_hash":"2b44f590422a3ab5b70fb1265a2e4f4d3b0bcb3de3f296dc7280924870ec8c59","tx_index":7}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(50,310006,'parse','blocks','{"block_index":310006,"ledger_hash":"853e3a8d39c4e8bdb36a0ec01a8d20f12335fcc00a00ac271e9d83be471d394f","messages_hash":"fc41309cdb46e7fbae0f09fda002234a6e758ab63e8240a648793fee6bfc0c7d","txlist_hash":"752821f935743579d04abcc94c104148b226cbc0777a6bb30bb7eceb29b85fca"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(51,310007,'insert','blocks','{"block_hash":"10a642b96d60091d08234d17dfdecf3025eca41e4fc8e3bbe71a91c5a457cb4b","block_index":310007,"block_time":310007000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(51,310006,'insert','blocks','{"block_hash":"10a642b96d60091d08234d17dfdecf3025eca41e4fc8e3bbe71a91c5a457cb4b","block_index":310007,"block_time":310007000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(52,310007,'insert','transactions','{"block_hash":"10a642b96d60091d08234d17dfdecf3025eca41e4fc8e3bbe71a91c5a457cb4b","block_index":310007,"block_time":310007000,"btc_amount":5430,"data":"00000000000000000000476700000000003d0900","destination":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"5836fb23c2bb94eeb4b71cb8e3c622c6d943b3e4ed3aebee42d240445e615db8","tx_index":8}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(53,310007,'insert','debits','{"action":"send","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"BBBB","block_index":310007,"event":"5836fb23c2bb94eeb4b71cb8e3c622c6d943b3e4ed3aebee42d240445e615db8","quantity":4000000,"tx_index":8}',0,'DEBIT'); INSERT INTO messages VALUES(54,310007,'insert','credits','{"address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","asset":"BBBB","block_index":310007,"calling_function":"send","event":"5836fb23c2bb94eeb4b71cb8e3c622c6d943b3e4ed3aebee42d240445e615db8","quantity":4000000,"tx_index":8}',0,'CREDIT'); INSERT INTO messages VALUES(55,310007,'insert','sends','{"asset":"BBBB","block_index":310007,"destination":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","quantity":4000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"5836fb23c2bb94eeb4b71cb8e3c622c6d943b3e4ed3aebee42d240445e615db8","tx_index":8}',0,'SEND'); INSERT INTO messages VALUES(56,310007,'parse','transactions','{"supported":true,"tx_hash":"5836fb23c2bb94eeb4b71cb8e3c622c6d943b3e4ed3aebee42d240445e615db8","tx_index":8}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(57,310007,'parse','blocks','{"block_index":310007,"ledger_hash":"f2b2d250a94afa158f9ed84434c3ac7a0bfc97b4387e5e3c099afc95b8a6ad9c","messages_hash":"569752afb305c679927918cc1cebce198cb79b86e2e52a5cfbf5284cb1382065","txlist_hash":"405914410b5982b395f52f17ee4fc69dc0e4fb4c7a511009c700c0d1bdbfb563"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(58,310008,'insert','blocks','{"block_hash":"47d0e3acbdc6916aeae95e987f9cfa16209b3df1e67bb38143b3422b32322c33","block_index":310008,"block_time":310008000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(58,310007,'insert','blocks','{"block_hash":"47d0e3acbdc6916aeae95e987f9cfa16209b3df1e67bb38143b3422b32322c33","block_index":310008,"block_time":310008000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(59,310008,'insert','transactions','{"block_hash":"47d0e3acbdc6916aeae95e987f9cfa16209b3df1e67bb38143b3422b32322c33","block_index":310008,"block_time":310008000,"btc_amount":5430,"data":"000000000000000000004768000000000000020e","destination":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"843e6f7712b7847099502bda8a4bd7127c17a2799290b91ef1584a6bfe069412","tx_index":9}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(60,310008,'insert','debits','{"action":"send","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"BBBC","block_index":310008,"event":"843e6f7712b7847099502bda8a4bd7127c17a2799290b91ef1584a6bfe069412","quantity":526,"tx_index":9}',0,'DEBIT'); INSERT INTO messages VALUES(61,310008,'insert','credits','{"address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","asset":"BBBC","block_index":310008,"calling_function":"send","event":"843e6f7712b7847099502bda8a4bd7127c17a2799290b91ef1584a6bfe069412","quantity":526,"tx_index":9}',0,'CREDIT'); INSERT INTO messages VALUES(62,310008,'insert','sends','{"asset":"BBBC","block_index":310008,"destination":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","quantity":526,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"843e6f7712b7847099502bda8a4bd7127c17a2799290b91ef1584a6bfe069412","tx_index":9}',0,'SEND'); INSERT INTO messages VALUES(63,310008,'parse','transactions','{"supported":true,"tx_hash":"843e6f7712b7847099502bda8a4bd7127c17a2799290b91ef1584a6bfe069412","tx_index":9}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(64,310008,'parse','blocks','{"block_index":310008,"ledger_hash":"8c44f15f5606b6fe984a9fa7df8d7d5381fe87a6c8b634469804328885668569","messages_hash":"2a03aeebd37f31a3ceea8c2e86ce7d0d4038ac74a3bbca363253aef81e1acac3","txlist_hash":"81714583a99f97b5cefc10510f507567e02f380bdb5741e2b5ef037816e8be17"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(65,310009,'insert','blocks','{"block_hash":"4d474992b141620bf3753863db7ee5e8af26cadfbba27725911f44fa657bc1c0","block_index":310009,"block_time":310009000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(65,310008,'insert','blocks','{"block_hash":"4d474992b141620bf3753863db7ee5e8af26cadfbba27725911f44fa657bc1c0","block_index":310009,"block_time":310009000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(66,310009,'insert','transactions','{"block_hash":"4d474992b141620bf3753863db7ee5e8af26cadfbba27725911f44fa657bc1c0","block_index":310009,"block_time":310009000,"btc_amount":0,"data":"00000032000000000000025800000000000047670000000000000001","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"42ae2fd7f3a18f84334bc37aa88283e79d6bff0b234dbf97e788695957d75518","tx_index":10}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(67,310009,'insert','debits','{"action":"dividend","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310009,"event":"42ae2fd7f3a18f84334bc37aa88283e79d6bff0b234dbf97e788695957d75518","quantity":24,"tx_index":10}',0,'DEBIT'); INSERT INTO messages VALUES(68,310009,'insert','debits','{"action":"dividend fee","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310009,"event":"42ae2fd7f3a18f84334bc37aa88283e79d6bff0b234dbf97e788695957d75518","quantity":20000,"tx_index":10}',0,'DEBIT'); @@ -538,7 +538,7 @@ INSERT INTO messages VALUES(69,310009,'insert','credits','{"address":"mtQheFaSfW INSERT INTO messages VALUES(70,310009,'insert','dividends','{"asset":"BBBB","block_index":310009,"dividend_asset":"XCP","fee_paid":20000,"quantity_per_unit":600,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"42ae2fd7f3a18f84334bc37aa88283e79d6bff0b234dbf97e788695957d75518","tx_index":10}',0,'ASSET_DIVIDEND'); INSERT INTO messages VALUES(71,310009,'parse','transactions','{"supported":true,"tx_hash":"42ae2fd7f3a18f84334bc37aa88283e79d6bff0b234dbf97e788695957d75518","tx_index":10}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(72,310009,'parse','blocks','{"block_index":310009,"ledger_hash":"ba378e9192f290d3f9d3dd1e46aeef3a185bd5aff1be809c8974fca8dc142987","messages_hash":"1b8f265cb1ec72a091317f293c1c6a2bd31d7dbb066e093c66b55d40cb966266","txlist_hash":"9395234af8a78eb91afe7dd45a6701032af9926cba3e126e01f06547ffcb2e08"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(73,310010,'insert','blocks','{"block_hash":"a58162dff81a32e6a29b075be759dbb9fa9b8b65303e69c78fb4d7b0acc37042","block_index":310010,"block_time":310010000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(73,310009,'insert','blocks','{"block_hash":"a58162dff81a32e6a29b075be759dbb9fa9b8b65303e69c78fb4d7b0acc37042","block_index":310010,"block_time":310010000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(74,310010,'insert','transactions','{"block_hash":"a58162dff81a32e6a29b075be759dbb9fa9b8b65303e69c78fb4d7b0acc37042","block_index":310010,"block_time":310010000,"btc_amount":0,"data":"00000032000000000000032000000000000047680000000000000001","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"201123e1ddbc4dab954fed0043a29fca770a9bd4268714354bb7991f01133c10","tx_index":11}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(75,310010,'insert','debits','{"action":"dividend","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310010,"event":"201123e1ddbc4dab954fed0043a29fca770a9bd4268714354bb7991f01133c10","quantity":420800,"tx_index":11}',0,'DEBIT'); INSERT INTO messages VALUES(76,310010,'insert','debits','{"action":"dividend fee","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310010,"event":"201123e1ddbc4dab954fed0043a29fca770a9bd4268714354bb7991f01133c10","quantity":20000,"tx_index":11}',0,'DEBIT'); @@ -546,18 +546,18 @@ INSERT INTO messages VALUES(77,310010,'insert','credits','{"address":"mtQheFaSfW INSERT INTO messages VALUES(78,310010,'insert','dividends','{"asset":"BBBC","block_index":310010,"dividend_asset":"XCP","fee_paid":20000,"quantity_per_unit":800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"201123e1ddbc4dab954fed0043a29fca770a9bd4268714354bb7991f01133c10","tx_index":11}',0,'ASSET_DIVIDEND'); INSERT INTO messages VALUES(79,310010,'parse','transactions','{"supported":true,"tx_hash":"201123e1ddbc4dab954fed0043a29fca770a9bd4268714354bb7991f01133c10","tx_index":11}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(80,310010,'parse','blocks','{"block_index":310010,"ledger_hash":"64f78f9eedce2931aedfe413b4f4bdeb728752e1c897e0bd44c7db665976a723","messages_hash":"1a9855c2f2e4ee940e81ba585d2e0a4fa9269d38b7ca9e8fe5aea128de067d77","txlist_hash":"09624bd24bdd3d945e0a75450915715fa9e9a077db33aa5bdb275b0c76e7f9e8"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(81,310011,'insert','blocks','{"block_hash":"8042cc2ef293fd73d050f283fbd075c79dd4c49fdcca054dc0714fc3a50dc1bb","block_index":310011,"block_time":310011000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(81,310010,'insert','blocks','{"block_hash":"8042cc2ef293fd73d050f283fbd075c79dd4c49fdcca054dc0714fc3a50dc1bb","block_index":310011,"block_time":310011000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(82,310011,'insert','transactions','{"block_hash":"8042cc2ef293fd73d050f283fbd075c79dd4c49fdcca054dc0714fc3a50dc1bb","block_index":310011,"block_time":310011000,"btc_amount":0,"data":"0000001e52bb3300405900000000000005f5e0ff09556e69742054657374","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"1afa4fa28e1ef63b2b67c288e078cfeb109a2b236558ab5544eedc7f171e0a84","tx_index":12}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(83,310011,'insert','broadcasts','{"block_index":310011,"fee_fraction_int":99999999,"locked":false,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","text":"Unit Test","timestamp":1388000000,"tx_hash":"1afa4fa28e1ef63b2b67c288e078cfeb109a2b236558ab5544eedc7f171e0a84","tx_index":12,"value":100.0}',0,'BROADCAST'); INSERT INTO messages VALUES(84,310011,'parse','transactions','{"supported":true,"tx_hash":"1afa4fa28e1ef63b2b67c288e078cfeb109a2b236558ab5544eedc7f171e0a84","tx_index":12}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(85,310011,'parse','blocks','{"block_index":310011,"ledger_hash":"671a1b4e1edd1f96dcfcc96d521fb2125ae5b9d2d01a76fc66686b7ed20c5662","messages_hash":"54da84d0982b7a0b58767098bfc307fa45569f0ed925f0d0557b22b7b38401fe","txlist_hash":"aa59f74f7d3eeee95415b1bca4a090036cd9a2efb187880f7c72c69dc1bfc059"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(86,310012,'insert','blocks','{"block_hash":"cdba329019d93a67b31b79d05f76ce1b7791d430ea0d6c1c2168fe78d2f67677","block_index":310012,"block_time":310012000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(86,310011,'insert','blocks','{"block_hash":"cdba329019d93a67b31b79d05f76ce1b7791d430ea0d6c1c2168fe78d2f67677","block_index":310012,"block_time":310012000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(87,310012,'insert','transactions','{"block_hash":"cdba329019d93a67b31b79d05f76ce1b7791d430ea0d6c1c2168fe78d2f67677","block_index":310012,"block_time":310012000,"btc_amount":5430,"data":"00000028000052bb33640000000002faf08000000000017d7840000000000000000000003b100000000a","destination":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"7025ded3ba412d1285be69c8aaa02773b8f4e2504310832c99a9b171b7e07e81","tx_index":13}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(88,310012,'insert','debits','{"action":"bet","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310012,"event":"7025ded3ba412d1285be69c8aaa02773b8f4e2504310832c99a9b171b7e07e81","quantity":50000000,"tx_index":13}',0,'DEBIT'); INSERT INTO messages VALUES(89,310012,'insert','bets','{"bet_type":0,"block_index":310012,"counterwager_quantity":25000000,"counterwager_remaining":25000000,"deadline":1388000100,"expiration":10,"expire_index":310022,"fee_fraction_int":99999999.0,"feed_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","leverage":15120,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"open","target_value":0.0,"tx_hash":"7025ded3ba412d1285be69c8aaa02773b8f4e2504310832c99a9b171b7e07e81","tx_index":13,"wager_quantity":50000000,"wager_remaining":50000000}',0,'OPEN_BET'); INSERT INTO messages VALUES(90,310012,'parse','transactions','{"supported":true,"tx_hash":"7025ded3ba412d1285be69c8aaa02773b8f4e2504310832c99a9b171b7e07e81","tx_index":13}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(91,310012,'parse','blocks','{"block_index":310012,"ledger_hash":"1f5b502c341699b5a59b87566c0fc02b7db5c657919f014e41a00303aa53efc8","messages_hash":"f145d04f53c877a372423f6cce9f84d253d3f307b334882be758636caedf7fcc","txlist_hash":"ba55fd791587dad14742ad66d1515992a076eefbd54d1215806aa9db3811cf50"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(92,310013,'insert','blocks','{"block_hash":"0425e5e832e4286757dc0228cd505b8d572081007218abd3a0983a3bcd502a61","block_index":310013,"block_time":310013000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(92,310012,'insert','blocks','{"block_hash":"0425e5e832e4286757dc0228cd505b8d572081007218abd3a0983a3bcd502a61","block_index":310013,"block_time":310013000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(93,310013,'insert','transactions','{"block_hash":"0425e5e832e4286757dc0228cd505b8d572081007218abd3a0983a3bcd502a61","block_index":310013,"block_time":310013000,"btc_amount":5430,"data":"00000028000152bb336400000000017d78400000000002793d60000000000000000000003b100000000a","destination":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42","tx_index":14}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(94,310013,'update','orders','{"status":"expired","tx_hash":"6bdb2ef465e9fc04060f58ced26c159dc983a616cb121c5e7954e66833444c59"}',0,'ORDER_UPDATE'); INSERT INTO messages VALUES(95,310013,'insert','order_expirations','{"block_index":310013,"order_hash":"6bdb2ef465e9fc04060f58ced26c159dc983a616cb121c5e7954e66833444c59","source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc"}',0,'ORDER_EXPIRATION'); @@ -566,10 +566,10 @@ INSERT INTO messages VALUES(97,310013,'insert','bets','{"bet_type":1,"block_inde INSERT INTO messages VALUES(98,310013,'update','bets','{"counterwager_remaining":4250000,"status":"open","tx_hash":"7025ded3ba412d1285be69c8aaa02773b8f4e2504310832c99a9b171b7e07e81","wager_remaining":8500000}',0,'BET_UPDATE'); INSERT INTO messages VALUES(99,310013,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310013,"calling_function":"filled","event":"e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42","quantity":4250000,"tx_index":14}',0,'CREDIT'); INSERT INTO messages VALUES(100,310013,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42","wager_remaining":4250000}',0,'BET_UPDATE'); -INSERT INTO messages VALUES(101,310012,'insert','bet_matches','{"backward_quantity":20750000,"block_index":310012,"deadline":1388000100,"fee_fraction_int":99999999,"feed_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","forward_quantity":41500000,"id":"7025ded3ba412d1285be69c8aaa02773b8f4e2504310832c99a9b171b7e07e81_e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42","initial_value":100.0,"leverage":15120,"match_expire_index":310022,"status":"pending","target_value":0.0,"tx0_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","tx0_bet_type":0,"tx0_block_index":310012,"tx0_expiration":10,"tx0_hash":"7025ded3ba412d1285be69c8aaa02773b8f4e2504310832c99a9b171b7e07e81","tx0_index":13,"tx1_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","tx1_bet_type":1,"tx1_block_index":310013,"tx1_expiration":10,"tx1_hash":"e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42","tx1_index":14}',0,'BET_MATCH'); +INSERT INTO messages VALUES(101,310013,'insert','bet_matches','{"backward_quantity":20750000,"block_index":310012,"deadline":1388000100,"fee_fraction_int":99999999,"feed_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","forward_quantity":41500000,"id":"7025ded3ba412d1285be69c8aaa02773b8f4e2504310832c99a9b171b7e07e81_e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42","initial_value":100.0,"leverage":15120,"match_expire_index":310022,"status":"pending","target_value":0.0,"tx0_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","tx0_bet_type":0,"tx0_block_index":310012,"tx0_expiration":10,"tx0_hash":"7025ded3ba412d1285be69c8aaa02773b8f4e2504310832c99a9b171b7e07e81","tx0_index":13,"tx1_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","tx1_bet_type":1,"tx1_block_index":310013,"tx1_expiration":10,"tx1_hash":"e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42","tx1_index":14}',0,'BET_MATCH'); INSERT INTO messages VALUES(102,310013,'parse','transactions','{"supported":true,"tx_hash":"e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42","tx_index":14}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(103,310013,'parse','blocks','{"block_index":310013,"ledger_hash":"cd0cfff6de5dd4381301929c740015d5910339ba915a83eb4229ecb91ae84c17","messages_hash":"7386c24d72b2b17bfb3baa53dbc6b04cadbc19bcccb00a1a99fc9e014f594533","txlist_hash":"6c03bbdc682356647ad229247ed9d4000c2ffd03696695e0277c43b4e4d8fed8"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(104,310014,'insert','blocks','{"block_hash":"85b28d413ebda2968ed82ae53643677338650151b997ed1e4656158005b9f65f","block_index":310014,"block_time":310014000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(104,310013,'insert','blocks','{"block_hash":"85b28d413ebda2968ed82ae53643677338650151b997ed1e4656158005b9f65f","block_index":310014,"block_time":310014000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(105,310014,'insert','transactions','{"block_hash":"85b28d413ebda2968ed82ae53643677338650151b997ed1e4656158005b9f65f","block_index":310014,"block_time":310014000,"btc_amount":5430,"data":"00000028000052bb33640000000008f0d1800000000014dc93800000000000000000000013b00000000a","destination":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"3d3ae119aa3891770b7ae1e1ce34062b7a850593f39a96b6df19d69960d4a76a","tx_index":15}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(106,310014,'update','orders','{"status":"expired","tx_hash":"36d00f8c35a9c6ecc7dd0a64610b1c39a71110d1a95face6a2486a6a7a1ff83c"}',0,'ORDER_UPDATE'); INSERT INTO messages VALUES(107,310014,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310014,"calling_function":"cancel order","event":"36d00f8c35a9c6ecc7dd0a64610b1c39a71110d1a95face6a2486a6a7a1ff83c","quantity":5000000,"tx_index":0}',0,'CREDIT'); @@ -578,7 +578,7 @@ INSERT INTO messages VALUES(109,310014,'insert','debits','{"action":"bet","addre INSERT INTO messages VALUES(110,310014,'insert','bets','{"bet_type":0,"block_index":310014,"counterwager_quantity":350000000,"counterwager_remaining":350000000,"deadline":1388000100,"expiration":10,"expire_index":310024,"fee_fraction_int":99999999.0,"feed_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","leverage":5040,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"open","target_value":0.0,"tx_hash":"3d3ae119aa3891770b7ae1e1ce34062b7a850593f39a96b6df19d69960d4a76a","tx_index":15,"wager_quantity":150000000,"wager_remaining":150000000}',0,'OPEN_BET'); INSERT INTO messages VALUES(111,310014,'parse','transactions','{"supported":true,"tx_hash":"3d3ae119aa3891770b7ae1e1ce34062b7a850593f39a96b6df19d69960d4a76a","tx_index":15}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(112,310014,'parse','blocks','{"block_index":310014,"ledger_hash":"5012d84065c7a39b5563f4fadeaf30670b47df3856f43d40fda74de663753e4e","messages_hash":"a34442f144f48eda8ed839bddf2280067bb9831e7fc5f8012fa257cceef0f77c","txlist_hash":"99b41cf441ebd1ad46c14b34a3da79586aee124ae643f196f23f0eadb9fbe50d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(113,310015,'insert','blocks','{"block_hash":"4cf77d688f18f0c68c077db882f62e49f31859dfa6144372457cd73b29223922","block_index":310015,"block_time":310015000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(113,310014,'insert','blocks','{"block_hash":"4cf77d688f18f0c68c077db882f62e49f31859dfa6144372457cd73b29223922","block_index":310015,"block_time":310015000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(114,310015,'insert','transactions','{"block_hash":"4cf77d688f18f0c68c077db882f62e49f31859dfa6144372457cd73b29223922","block_index":310015,"block_time":310015000,"btc_amount":5430,"data":"00000028000152bb33640000000014dc93800000000008f0d1800000000000000000000013b00000000a","destination":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"a73843f1c9197674ba45e3aa92ed0671062c8acd8955e6b1e4d10dd149f40bc8","tx_index":16}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(115,310015,'insert','debits','{"action":"bet","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310015,"event":"a73843f1c9197674ba45e3aa92ed0671062c8acd8955e6b1e4d10dd149f40bc8","quantity":350000000,"tx_index":16}',0,'DEBIT'); INSERT INTO messages VALUES(116,310015,'insert','bets','{"bet_type":1,"block_index":310015,"counterwager_quantity":150000000,"counterwager_remaining":150000000,"deadline":1388000100,"expiration":10,"expire_index":310025,"fee_fraction_int":99999999.0,"feed_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","leverage":5040,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"open","target_value":0.0,"tx_hash":"a73843f1c9197674ba45e3aa92ed0671062c8acd8955e6b1e4d10dd149f40bc8","tx_index":16,"wager_quantity":350000000,"wager_remaining":350000000}',0,'OPEN_BET'); @@ -586,16 +586,16 @@ INSERT INTO messages VALUES(117,310015,'insert','credits','{"address":"mn6q3dS2E INSERT INTO messages VALUES(118,310015,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"3d3ae119aa3891770b7ae1e1ce34062b7a850593f39a96b6df19d69960d4a76a","wager_remaining":0}',0,'BET_UPDATE'); INSERT INTO messages VALUES(119,310015,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310015,"calling_function":"filled","event":"a73843f1c9197674ba45e3aa92ed0671062c8acd8955e6b1e4d10dd149f40bc8","quantity":0,"tx_index":16}',0,'CREDIT'); INSERT INTO messages VALUES(120,310015,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"a73843f1c9197674ba45e3aa92ed0671062c8acd8955e6b1e4d10dd149f40bc8","wager_remaining":0}',0,'BET_UPDATE'); -INSERT INTO messages VALUES(121,310014,'insert','bet_matches','{"backward_quantity":350000000,"block_index":310014,"deadline":1388000100,"fee_fraction_int":99999999,"feed_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","forward_quantity":150000000,"id":"3d3ae119aa3891770b7ae1e1ce34062b7a850593f39a96b6df19d69960d4a76a_a73843f1c9197674ba45e3aa92ed0671062c8acd8955e6b1e4d10dd149f40bc8","initial_value":100.0,"leverage":5040,"match_expire_index":310024,"status":"pending","target_value":0.0,"tx0_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","tx0_bet_type":0,"tx0_block_index":310014,"tx0_expiration":10,"tx0_hash":"3d3ae119aa3891770b7ae1e1ce34062b7a850593f39a96b6df19d69960d4a76a","tx0_index":15,"tx1_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","tx1_bet_type":1,"tx1_block_index":310015,"tx1_expiration":10,"tx1_hash":"a73843f1c9197674ba45e3aa92ed0671062c8acd8955e6b1e4d10dd149f40bc8","tx1_index":16}',0,'BET_MATCH'); +INSERT INTO messages VALUES(121,310015,'insert','bet_matches','{"backward_quantity":350000000,"block_index":310014,"deadline":1388000100,"fee_fraction_int":99999999,"feed_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","forward_quantity":150000000,"id":"3d3ae119aa3891770b7ae1e1ce34062b7a850593f39a96b6df19d69960d4a76a_a73843f1c9197674ba45e3aa92ed0671062c8acd8955e6b1e4d10dd149f40bc8","initial_value":100.0,"leverage":5040,"match_expire_index":310024,"status":"pending","target_value":0.0,"tx0_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","tx0_bet_type":0,"tx0_block_index":310014,"tx0_expiration":10,"tx0_hash":"3d3ae119aa3891770b7ae1e1ce34062b7a850593f39a96b6df19d69960d4a76a","tx0_index":15,"tx1_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","tx1_bet_type":1,"tx1_block_index":310015,"tx1_expiration":10,"tx1_hash":"a73843f1c9197674ba45e3aa92ed0671062c8acd8955e6b1e4d10dd149f40bc8","tx1_index":16}',0,'BET_MATCH'); INSERT INTO messages VALUES(122,310015,'parse','transactions','{"supported":true,"tx_hash":"a73843f1c9197674ba45e3aa92ed0671062c8acd8955e6b1e4d10dd149f40bc8","tx_index":16}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(123,310015,'parse','blocks','{"block_index":310015,"ledger_hash":"0356494d376b2b65b9f4b066b9d2baf2ae90d82369b87914bb58a67927ced5af","messages_hash":"971f87fb66232464062c83cdec0c175d6e326e973598324ff2c2fbac8e081b2e","txlist_hash":"c6fff3cf22683f773cf2941f0eb9b5ed84647569c76d40cba61ca444852fceb6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(124,310016,'insert','blocks','{"block_hash":"99dc7d2627efb4e5e618a53b9898b4ca39c70e98fe9bf39f68a6c980f5b64ef9","block_index":310016,"block_time":310016000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(124,310015,'insert','blocks','{"block_hash":"99dc7d2627efb4e5e618a53b9898b4ca39c70e98fe9bf39f68a6c980f5b64ef9","block_index":310016,"block_time":310016000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(125,310016,'insert','transactions','{"block_hash":"99dc7d2627efb4e5e618a53b9898b4ca39c70e98fe9bf39f68a6c980f5b64ef9","block_index":310016,"block_time":310016000,"btc_amount":5430,"data":"00000028000252bb33c8000000002cb417800000000026be36803ff0000000000000000013b00000000a","destination":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"194a87d56aecedf43bb9724b6f20f10626c26c00267fd108db843772e5ee41f5","tx_index":17}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(126,310016,'insert','debits','{"action":"bet","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310016,"event":"194a87d56aecedf43bb9724b6f20f10626c26c00267fd108db843772e5ee41f5","quantity":750000000,"tx_index":17}',0,'DEBIT'); INSERT INTO messages VALUES(127,310016,'insert','bets','{"bet_type":2,"block_index":310016,"counterwager_quantity":650000000,"counterwager_remaining":650000000,"deadline":1388000200,"expiration":10,"expire_index":310026,"fee_fraction_int":99999999.0,"feed_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","leverage":5040,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"open","target_value":1.0,"tx_hash":"194a87d56aecedf43bb9724b6f20f10626c26c00267fd108db843772e5ee41f5","tx_index":17,"wager_quantity":750000000,"wager_remaining":750000000}',0,'OPEN_BET'); INSERT INTO messages VALUES(128,310016,'parse','transactions','{"supported":true,"tx_hash":"194a87d56aecedf43bb9724b6f20f10626c26c00267fd108db843772e5ee41f5","tx_index":17}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(129,310016,'parse','blocks','{"block_index":310016,"ledger_hash":"c90ff439bd04970ed9e6e25cbfce32160450925a37ba3360f40df8854529b52d","messages_hash":"1e6547529c58138a1970ef457d8c2296c1742e41976424215f7606176301cc02","txlist_hash":"16e32aeb7155ac1b89e47925bb2367269d4fc81e9da0558266ad9722843202fd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(130,310017,'insert','blocks','{"block_hash":"8a4fedfbf734b91a5c5761a7bcb3908ea57169777a7018148c51ff611970e4a3","block_index":310017,"block_time":310017000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(130,310016,'insert','blocks','{"block_hash":"8a4fedfbf734b91a5c5761a7bcb3908ea57169777a7018148c51ff611970e4a3","block_index":310017,"block_time":310017000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(131,310017,'insert','transactions','{"block_hash":"8a4fedfbf734b91a5c5761a7bcb3908ea57169777a7018148c51ff611970e4a3","block_index":310017,"block_time":310017000,"btc_amount":5430,"data":"00000028000352bb33c80000000026be3680000000002cb417803ff0000000000000000013b00000000a","destination":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"72baa141e136cbafc08ee2f6c8e5841076c7573d5d5cd619f45149bf84a6a207","tx_index":18}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(132,310017,'insert','debits','{"action":"bet","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310017,"event":"72baa141e136cbafc08ee2f6c8e5841076c7573d5d5cd619f45149bf84a6a207","quantity":650000000,"tx_index":18}',0,'DEBIT'); INSERT INTO messages VALUES(133,310017,'insert','bets','{"bet_type":3,"block_index":310017,"counterwager_quantity":750000000,"counterwager_remaining":750000000,"deadline":1388000200,"expiration":10,"expire_index":310027,"fee_fraction_int":99999999.0,"feed_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","leverage":5040,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"open","target_value":1.0,"tx_hash":"72baa141e136cbafc08ee2f6c8e5841076c7573d5d5cd619f45149bf84a6a207","tx_index":18,"wager_quantity":650000000,"wager_remaining":650000000}',0,'OPEN_BET'); @@ -603,10 +603,10 @@ INSERT INTO messages VALUES(134,310017,'insert','credits','{"address":"mn6q3dS2E INSERT INTO messages VALUES(135,310017,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"194a87d56aecedf43bb9724b6f20f10626c26c00267fd108db843772e5ee41f5","wager_remaining":0}',0,'BET_UPDATE'); INSERT INTO messages VALUES(136,310017,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310017,"calling_function":"filled","event":"72baa141e136cbafc08ee2f6c8e5841076c7573d5d5cd619f45149bf84a6a207","quantity":0,"tx_index":18}',0,'CREDIT'); INSERT INTO messages VALUES(137,310017,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"72baa141e136cbafc08ee2f6c8e5841076c7573d5d5cd619f45149bf84a6a207","wager_remaining":0}',0,'BET_UPDATE'); -INSERT INTO messages VALUES(138,310016,'insert','bet_matches','{"backward_quantity":650000000,"block_index":310016,"deadline":1388000200,"fee_fraction_int":99999999,"feed_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","forward_quantity":750000000,"id":"194a87d56aecedf43bb9724b6f20f10626c26c00267fd108db843772e5ee41f5_72baa141e136cbafc08ee2f6c8e5841076c7573d5d5cd619f45149bf84a6a207","initial_value":100.0,"leverage":5040,"match_expire_index":310026,"status":"pending","target_value":1.0,"tx0_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","tx0_bet_type":2,"tx0_block_index":310016,"tx0_expiration":10,"tx0_hash":"194a87d56aecedf43bb9724b6f20f10626c26c00267fd108db843772e5ee41f5","tx0_index":17,"tx1_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","tx1_bet_type":3,"tx1_block_index":310017,"tx1_expiration":10,"tx1_hash":"72baa141e136cbafc08ee2f6c8e5841076c7573d5d5cd619f45149bf84a6a207","tx1_index":18}',0,'BET_MATCH'); +INSERT INTO messages VALUES(138,310017,'insert','bet_matches','{"backward_quantity":650000000,"block_index":310016,"deadline":1388000200,"fee_fraction_int":99999999,"feed_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","forward_quantity":750000000,"id":"194a87d56aecedf43bb9724b6f20f10626c26c00267fd108db843772e5ee41f5_72baa141e136cbafc08ee2f6c8e5841076c7573d5d5cd619f45149bf84a6a207","initial_value":100.0,"leverage":5040,"match_expire_index":310026,"status":"pending","target_value":1.0,"tx0_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","tx0_bet_type":2,"tx0_block_index":310016,"tx0_expiration":10,"tx0_hash":"194a87d56aecedf43bb9724b6f20f10626c26c00267fd108db843772e5ee41f5","tx0_index":17,"tx1_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","tx1_bet_type":3,"tx1_block_index":310017,"tx1_expiration":10,"tx1_hash":"72baa141e136cbafc08ee2f6c8e5841076c7573d5d5cd619f45149bf84a6a207","tx1_index":18}',0,'BET_MATCH'); INSERT INTO messages VALUES(139,310017,'parse','transactions','{"supported":true,"tx_hash":"72baa141e136cbafc08ee2f6c8e5841076c7573d5d5cd619f45149bf84a6a207","tx_index":18}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(140,310017,'parse','blocks','{"block_index":310017,"ledger_hash":"19cf18f708dab6a983a2642802deb38d25b6fc205ea663059a0569fa38bdaf8d","messages_hash":"9b869953cdad0502b038662de44f11fccffc976ad21182d94af502409754f6c8","txlist_hash":"94709d5f6bcb8df437947be80ac95e2e716a92645f3eec2d915cb7c088504f1c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(141,310018,'insert','blocks','{"block_hash":"35c06f9e3de39e4e56ceb1d1a22008f52361c50dd0d251c0acbe2e3c2dba8ed3","block_index":310018,"block_time":310018000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(141,310017,'insert','blocks','{"block_hash":"35c06f9e3de39e4e56ceb1d1a22008f52361c50dd0d251c0acbe2e3c2dba8ed3","block_index":310018,"block_time":310018000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(142,310018,'insert','transactions','{"block_hash":"35c06f9e3de39e4e56ceb1d1a22008f52361c50dd0d251c0acbe2e3c2dba8ed3","block_index":310018,"block_time":310018000,"btc_amount":0,"data":"0000001e52bb33324058f7256ffc115e004c4b4009556e69742054657374","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"065de641fd87c0b3ef893130ef4a3dca7643b7a35f6d18c721f34a7a36a5992f","tx_index":19}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(143,310018,'insert','broadcasts','{"block_index":310018,"fee_fraction_int":5000000,"locked":false,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","text":"Unit Test","timestamp":1388000050,"tx_hash":"065de641fd87c0b3ef893130ef4a3dca7643b7a35f6d18c721f34a7a36a5992f","tx_index":19,"value":99.86166}',0,'BROADCAST'); INSERT INTO messages VALUES(144,310018,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310018,"calling_function":"bet settled: liquidated for bear","event":"065de641fd87c0b3ef893130ef4a3dca7643b7a35f6d18c721f34a7a36a5992f","quantity":59137500,"tx_index":19}',0,'CREDIT'); @@ -615,7 +615,7 @@ INSERT INTO messages VALUES(146,310018,'insert','bet_match_resolutions','{"bear_ INSERT INTO messages VALUES(147,310018,'update','bet_matches','{"id":"7025ded3ba412d1285be69c8aaa02773b8f4e2504310832c99a9b171b7e07e81_e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42","status":"settled: liquidated for bear"}',0,'BET_MATCH_UPDATE'); INSERT INTO messages VALUES(148,310018,'parse','transactions','{"supported":true,"tx_hash":"065de641fd87c0b3ef893130ef4a3dca7643b7a35f6d18c721f34a7a36a5992f","tx_index":19}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(149,310018,'parse','blocks','{"block_index":310018,"ledger_hash":"d9ac565fbe7bf18c1d899dab8e0c98e070880e36fa51710382017d46ddf837cf","messages_hash":"b7b696036883d92a4d4bab709ff2b1d82ea9894f5a3c74be752b7616c7a2f68c","txlist_hash":"e3e2ebfcee41e92d855051b2c2e4344600646ac3ac5b335084d5f5a23e872f3b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(150,310019,'insert','blocks','{"block_hash":"114affa0c4f34b1ebf8e2778c9477641f60b5b9e8a69052158041d4c41893294","block_index":310019,"block_time":310019000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(150,310018,'insert','blocks','{"block_hash":"114affa0c4f34b1ebf8e2778c9477641f60b5b9e8a69052158041d4c41893294","block_index":310019,"block_time":310019000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(151,310019,'insert','transactions','{"block_hash":"114affa0c4f34b1ebf8e2778c9477641f60b5b9e8a69052158041d4c41893294","block_index":310019,"block_time":310019000,"btc_amount":0,"data":"0000001e52bb3365405915f3b645a1cb004c4b4009556e69742054657374","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"7cc015005c559686a8e10294015ca1773c0bcd9f4d7d9768deb4bb94cdd4a69e","tx_index":20}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(152,310019,'insert','broadcasts','{"block_index":310019,"fee_fraction_int":5000000,"locked":false,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","text":"Unit Test","timestamp":1388000101,"tx_hash":"7cc015005c559686a8e10294015ca1773c0bcd9f4d7d9768deb4bb94cdd4a69e","tx_index":20,"value":100.343}',0,'BROADCAST'); INSERT INTO messages VALUES(153,310019,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310019,"calling_function":"bet settled","event":"7cc015005c559686a8e10294015ca1773c0bcd9f4d7d9768deb4bb94cdd4a69e","quantity":159300000,"tx_index":20}',0,'CREDIT'); @@ -625,7 +625,7 @@ INSERT INTO messages VALUES(156,310019,'insert','bet_match_resolutions','{"bear_ INSERT INTO messages VALUES(157,310019,'update','bet_matches','{"id":"3d3ae119aa3891770b7ae1e1ce34062b7a850593f39a96b6df19d69960d4a76a_a73843f1c9197674ba45e3aa92ed0671062c8acd8955e6b1e4d10dd149f40bc8","status":"settled"}',0,'BET_MATCH_UPDATE'); INSERT INTO messages VALUES(158,310019,'parse','transactions','{"supported":true,"tx_hash":"7cc015005c559686a8e10294015ca1773c0bcd9f4d7d9768deb4bb94cdd4a69e","tx_index":20}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(159,310019,'parse','blocks','{"block_index":310019,"ledger_hash":"b66661deef419a50557d171cc1bcae04f5bc260ed1f5ff56cf08ef39158617a1","messages_hash":"1cefa71f85a09e70ef26efc854fc288f669f4b098fa553f7be0f448703900bf4","txlist_hash":"c89d7fa5df5eab9ac8a57f00c6cc2b9d75244ce412e12eb842c6a43297ee41a6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(160,310020,'insert','blocks','{"block_hash":"d93c79920e4a42164af74ecb5c6b903ff6055cdc007376c74dfa692c8d85ebc9","block_index":310020,"block_time":310020000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(160,310019,'insert','blocks','{"block_hash":"d93c79920e4a42164af74ecb5c6b903ff6055cdc007376c74dfa692c8d85ebc9","block_index":310020,"block_time":310020000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(161,310020,'insert','transactions','{"block_hash":"d93c79920e4a42164af74ecb5c6b903ff6055cdc007376c74dfa692c8d85ebc9","block_index":310020,"block_time":310020000,"btc_amount":0,"data":"0000001e52bb33c94000000000000000004c4b4009556e69742054657374","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"0899b8bccef3403252fd7d37ec550eea3350845dca098368b84bf4c3c48d3fc9","tx_index":21}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(162,310020,'insert','broadcasts','{"block_index":310020,"fee_fraction_int":5000000,"locked":false,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","text":"Unit Test","timestamp":1388000201,"tx_hash":"0899b8bccef3403252fd7d37ec550eea3350845dca098368b84bf4c3c48d3fc9","tx_index":21,"value":2.0}',0,'BROADCAST'); INSERT INTO messages VALUES(163,310020,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310020,"calling_function":"bet settled: for notequal","event":"0899b8bccef3403252fd7d37ec550eea3350845dca098368b84bf4c3c48d3fc9","quantity":1330000000,"tx_index":21}',0,'CREDIT'); @@ -634,18 +634,18 @@ INSERT INTO messages VALUES(165,310020,'insert','bet_match_resolutions','{"bear_ INSERT INTO messages VALUES(166,310020,'update','bet_matches','{"id":"194a87d56aecedf43bb9724b6f20f10626c26c00267fd108db843772e5ee41f5_72baa141e136cbafc08ee2f6c8e5841076c7573d5d5cd619f45149bf84a6a207","status":"settled: for notequal"}',0,'BET_MATCH_UPDATE'); INSERT INTO messages VALUES(167,310020,'parse','transactions','{"supported":true,"tx_hash":"0899b8bccef3403252fd7d37ec550eea3350845dca098368b84bf4c3c48d3fc9","tx_index":21}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(168,310020,'parse','blocks','{"block_index":310020,"ledger_hash":"57a6c53e41338011cb06cd60118961dcec0e800f62a2c4b1e9381c666319680f","messages_hash":"df81bfb67fb3c30f1d0a6d73b72cb9bbdec225725b5b3f43ddcdc575b89e5400","txlist_hash":"5d8f062b1b5c6740eed53d90f4cd10a23f273237bda588f42fa35653a9fe5feb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(169,310021,'insert','blocks','{"block_hash":"7c2460bb32c5749c856486393239bf7a0ac789587ac71f32e7237910da8097f2","block_index":310021,"block_time":310021000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(169,310020,'insert','blocks','{"block_hash":"7c2460bb32c5749c856486393239bf7a0ac789587ac71f32e7237910da8097f2","block_index":310021,"block_time":310021000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(170,310021,'insert','transactions','{"block_hash":"7c2460bb32c5749c856486393239bf7a0ac789587ac71f32e7237910da8097f2","block_index":310021,"block_time":310021000,"btc_amount":0,"data":"0000000a00000000000047670000000002faf08000000000000000010000000002faf080000a0000000000000000","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"eb5953f4e1dec30f0bf4741cb2044c11b6e1c3be20fef2111461f69d989b852a","tx_index":22}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(171,310021,'insert','debits','{"action":"open order","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"BBBB","block_index":310021,"event":"eb5953f4e1dec30f0bf4741cb2044c11b6e1c3be20fef2111461f69d989b852a","quantity":50000000,"tx_index":22}',0,'DEBIT'); INSERT INTO messages VALUES(172,310021,'insert','orders','{"block_index":310021,"expiration":10,"expire_index":310031,"fee_provided":6800,"fee_provided_remaining":6800,"fee_required":0,"fee_required_remaining":0,"get_asset":"XCP","get_quantity":50000000,"get_remaining":50000000,"give_asset":"BBBB","give_quantity":50000000,"give_remaining":50000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"open","tx_hash":"eb5953f4e1dec30f0bf4741cb2044c11b6e1c3be20fef2111461f69d989b852a","tx_index":22}',0,'OPEN_ORDER'); INSERT INTO messages VALUES(173,310021,'parse','transactions','{"supported":true,"tx_hash":"eb5953f4e1dec30f0bf4741cb2044c11b6e1c3be20fef2111461f69d989b852a","tx_index":22}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(174,310021,'parse','blocks','{"block_index":310021,"ledger_hash":"66c16af10125f298796da828f1a6c2b43123cda38e3dfc57ccc25b00f3da17f8","messages_hash":"0a49d35ea7c0d8d382b303f2462c1c8a78725dfeb8f1e374cc7fe8222111987f","txlist_hash":"94b751bb8af2f91fb1933dfae1edaa636836fe1f9100edc5c6b8bc793fea4b47"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(175,310022,'insert','blocks','{"block_hash":"44435f9a99a0aa12a9bfabdc4cb8119f6ea6a6e1350d2d65445fb66a456db5fc","block_index":310022,"block_time":310022000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(175,310021,'insert','blocks','{"block_hash":"44435f9a99a0aa12a9bfabdc4cb8119f6ea6a6e1350d2d65445fb66a456db5fc","block_index":310022,"block_time":310022000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(176,310022,'insert','transactions','{"block_hash":"44435f9a99a0aa12a9bfabdc4cb8119f6ea6a6e1350d2d65445fb66a456db5fc","block_index":310022,"block_time":310022000,"btc_amount":100000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":10150,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"c3f73d02e630cb2824f044e6d91f47b1ce351feff0339ea7b85652d24d8ff6bc","tx_index":23}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(177,310022,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310022,"calling_function":"burn","event":"c3f73d02e630cb2824f044e6d91f47b1ce351feff0339ea7b85652d24d8ff6bc","quantity":56999887262,"tx_index":23}',0,'CREDIT'); INSERT INTO messages VALUES(178,310022,'insert','burns','{"block_index":310022,"burned":38000000,"earned":56999887262,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"c3f73d02e630cb2824f044e6d91f47b1ce351feff0339ea7b85652d24d8ff6bc","tx_index":23}',0,'BURN'); INSERT INTO messages VALUES(179,310022,'parse','blocks','{"block_index":310022,"ledger_hash":"43b6213cad601a389aed2a4e912be118dfab6cca5358d86bac03f4bee6765493","messages_hash":"5a7e3ebeb25bf887ea951d37c55d30b5461d52e45a8cd40e9cc3abd15c1e8b86","txlist_hash":"fcb847408d5ee30ef86a94a0495f53670b1157d4f33d627b62ebd84fb1321cf5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(180,310023,'insert','blocks','{"block_hash":"d8cf5bec1bbcab8ca4f495352afde3b6572b7e1d61b3976872ebb8e9d30ccb08","block_index":310023,"block_time":310023000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(180,310022,'insert','blocks','{"block_hash":"d8cf5bec1bbcab8ca4f495352afde3b6572b7e1d61b3976872ebb8e9d30ccb08","block_index":310023,"block_time":310023000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(181,310023,'insert','transactions','{"block_hash":"d8cf5bec1bbcab8ca4f495352afde3b6572b7e1d61b3976872ebb8e9d30ccb08","block_index":310023,"block_time":310023000,"btc_amount":5430,"data":"0000000000000000000047680000000000002710","destination":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"58b89d056b539d2cf9ddac4518ccca6744495127e0ce893eb71da2599cbf85ab","tx_index":24}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(182,310023,'update','bets','{"status":"expired","tx_hash":"7025ded3ba412d1285be69c8aaa02773b8f4e2504310832c99a9b171b7e07e81"}',0,'BET_UPDATE'); INSERT INTO messages VALUES(183,310023,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310023,"calling_function":"recredit wager remaining","event":"7025ded3ba412d1285be69c8aaa02773b8f4e2504310832c99a9b171b7e07e81","quantity":8500000,"tx_index":0}',0,'CREDIT'); @@ -655,164 +655,164 @@ INSERT INTO messages VALUES(186,310023,'insert','credits','{"address":"mtQheFaSf INSERT INTO messages VALUES(187,310023,'insert','sends','{"asset":"BBBC","block_index":310023,"destination":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","quantity":10000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"58b89d056b539d2cf9ddac4518ccca6744495127e0ce893eb71da2599cbf85ab","tx_index":24}',0,'SEND'); INSERT INTO messages VALUES(188,310023,'parse','transactions','{"supported":true,"tx_hash":"58b89d056b539d2cf9ddac4518ccca6744495127e0ce893eb71da2599cbf85ab","tx_index":24}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(189,310023,'parse','blocks','{"block_index":310023,"ledger_hash":"8a9758963891bbfbdcb6515d8d3e49c941fedba7de82038776e9f8ed65e803c1","messages_hash":"7aa46117102c62f460f667fd79f116bda42b266f0e384f209527d60b56753299","txlist_hash":"d21109a870f8542e8ef40f6d72e36fb0bb5ac4ad1e7b3232ba1b2bdcc735810e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(190,310024,'insert','blocks','{"block_hash":"b03042b4e18a222b4c8d1e9e1970d93e6e2a2d41686d227ff8ecf0a839223dc5","block_index":310024,"block_time":310024000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(190,310023,'insert','blocks','{"block_hash":"b03042b4e18a222b4c8d1e9e1970d93e6e2a2d41686d227ff8ecf0a839223dc5","block_index":310024,"block_time":310024000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(191,310024,'parse','blocks','{"block_index":310024,"ledger_hash":"cb034ab4a3e252fdfe9973a672e208295741a52634c9332b1501d612e0012e19","messages_hash":"d42bf4e0b63695149ee35307cdcdda6613234dfa95fc4f90385fb4cb964d013c","txlist_hash":"52bcbfb439bfc9cf14e38d39a9d6c401a8798a20fe64238f070125e8e7905151"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(192,310025,'insert','blocks','{"block_hash":"a872e560766832cc3b4f7f222228cb6db882ce3c54f6459f62c71d5cd6e90666","block_index":310025,"block_time":310025000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(192,310024,'insert','blocks','{"block_hash":"a872e560766832cc3b4f7f222228cb6db882ce3c54f6459f62c71d5cd6e90666","block_index":310025,"block_time":310025000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(193,310025,'parse','blocks','{"block_index":310025,"ledger_hash":"5addc8253469d5c729cdffc1c637b75d9e8886a633d4406dedf2b1c16ba5b92a","messages_hash":"6c12fc7540de124823bc0fc2e03f016f02bb33a7679f87335857baf740946816","txlist_hash":"e2d8891737534dde276dd1f7f51d42558b9ad60d88baada83f75951905e6f174"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(194,310026,'insert','blocks','{"block_hash":"6c96350f6f2f05810f19a689de235eff975338587194a36a70dfd0fcd490941a","block_index":310026,"block_time":310026000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(194,310025,'insert','blocks','{"block_hash":"6c96350f6f2f05810f19a689de235eff975338587194a36a70dfd0fcd490941a","block_index":310026,"block_time":310026000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(195,310026,'parse','blocks','{"block_index":310026,"ledger_hash":"8620bd0283c320330631185d1b2351718f174732bd099324a0880719cdfc18c7","messages_hash":"6ffccd6d55f048c0116fab0af2d249ba002a1146517b4232f6ad1079c7cea9bd","txlist_hash":"e7b6699c8b2b5857b60004dec9aa8aeda30ef42483ca16bc79e4ecdc1c0b4ce7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(196,310027,'insert','blocks','{"block_hash":"d7acfac66df393c4482a14c189742c0571b89442eb7f817b34415a560445699e","block_index":310027,"block_time":310027000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(196,310026,'insert','blocks','{"block_hash":"d7acfac66df393c4482a14c189742c0571b89442eb7f817b34415a560445699e","block_index":310027,"block_time":310027000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(197,310027,'parse','blocks','{"block_index":310027,"ledger_hash":"96960e09478184f4f0ad38d1fc03f0c0240e58715a0a29745a6dc58c40003249","messages_hash":"78a07b4b6cad61df9c669c30ce670f65df7c9520e3889073a1ccfd229b1bc60f","txlist_hash":"a7e32b5f0b6568eff793a1d12d32ab594f3886b417a6491b6ec641d15e906e9e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(198,310028,'insert','blocks','{"block_hash":"02409fcf8fa06dafcb7f11e38593181d9c42cc9d5e2ddc304d098f990bd9530b","block_index":310028,"block_time":310028000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(198,310027,'insert','blocks','{"block_hash":"02409fcf8fa06dafcb7f11e38593181d9c42cc9d5e2ddc304d098f990bd9530b","block_index":310028,"block_time":310028000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(199,310028,'parse','blocks','{"block_index":310028,"ledger_hash":"2f556d2528abe1c4e9d31f6ed70d400d94633d4dfb54c9a4f250e1b054f9a384","messages_hash":"5cebc5467f3918ed4d618643a8e6201bce7803ceb72b833fceae513c79551fa1","txlist_hash":"8b22bfc6153a2e742e843a5263194ffcf3ab985d934e212266ca400ed568e710"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(200,310029,'insert','blocks','{"block_hash":"3c739fa8b40c118d5547ea356ee8d10ee2898871907643ec02e5db9d00f03cc6","block_index":310029,"block_time":310029000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(200,310028,'insert','blocks','{"block_hash":"3c739fa8b40c118d5547ea356ee8d10ee2898871907643ec02e5db9d00f03cc6","block_index":310029,"block_time":310029000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(201,310029,'parse','blocks','{"block_index":310029,"ledger_hash":"be195b1f7b7b55dcefb83907d954736d4bf059a9e32055131efd16602d7761d6","messages_hash":"faec53519d22e82c65d28effff3bba8236d89b38ac79edb3c808102bc6682658","txlist_hash":"ad8654356f0a1ffb669528bf4c3625e9d43ce08d9dda7f1adc2e962b65d20b55"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(202,310030,'insert','blocks','{"block_hash":"d5071cddedf89765ee0fd58f209c1c7d669ba8ea66200a57587da8b189b9e4f5","block_index":310030,"block_time":310030000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(202,310029,'insert','blocks','{"block_hash":"d5071cddedf89765ee0fd58f209c1c7d669ba8ea66200a57587da8b189b9e4f5","block_index":310030,"block_time":310030000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(203,310030,'parse','blocks','{"block_index":310030,"ledger_hash":"d3a25656dbb63eecf1c89820581fcab193d750f3a09ca8ab34a5008c8d89051d","messages_hash":"1e3c12ea29a0c893e4cd24e7d743153d6f2d8dce1850c750a8a654950836ac73","txlist_hash":"f9a6fb698ab5cf74c1d334f2bc3fc258738c330a5bf3614b8951c6f2d90263a1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(204,310031,'insert','blocks','{"block_hash":"0b02b10f41380fff27c543ea8891ecb845bf7a003ac5c87e15932aff3bfcf689","block_index":310031,"block_time":310031000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(204,310030,'insert','blocks','{"block_hash":"0b02b10f41380fff27c543ea8891ecb845bf7a003ac5c87e15932aff3bfcf689","block_index":310031,"block_time":310031000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(205,310031,'parse','blocks','{"block_index":310031,"ledger_hash":"0edb535f8c6a40062a86e4ea327cf7fb70310b6d55a6654d5a23e54498aa3159","messages_hash":"1f7c139549d1628bd43d4ad4f882cf1ab4959aae732600941290d49df8258d47","txlist_hash":"52c64812c82695720461525033471afc39749f788156239b06f72c7887206fa4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(206,310032,'insert','blocks','{"block_hash":"66346be81e6ba04544f2ae643b76c2b7b1383f038fc2636e02e49dc7ec144074","block_index":310032,"block_time":310032000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(206,310031,'insert','blocks','{"block_hash":"66346be81e6ba04544f2ae643b76c2b7b1383f038fc2636e02e49dc7ec144074","block_index":310032,"block_time":310032000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(207,310032,'update','orders','{"status":"expired","tx_hash":"eb5953f4e1dec30f0bf4741cb2044c11b6e1c3be20fef2111461f69d989b852a"}',0,'ORDER_UPDATE'); INSERT INTO messages VALUES(208,310032,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"BBBB","block_index":310032,"calling_function":"cancel order","event":"eb5953f4e1dec30f0bf4741cb2044c11b6e1c3be20fef2111461f69d989b852a","quantity":50000000,"tx_index":0}',0,'CREDIT'); INSERT INTO messages VALUES(209,310032,'insert','order_expirations','{"block_index":310032,"order_hash":"eb5953f4e1dec30f0bf4741cb2044c11b6e1c3be20fef2111461f69d989b852a","source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc"}',0,'ORDER_EXPIRATION'); INSERT INTO messages VALUES(210,310032,'parse','blocks','{"block_index":310032,"ledger_hash":"a9208a1b7f782852d652e5089c6485744031176b4d285ea985bbc1df0ccf49c0","messages_hash":"50cf00394dc4dc4028f5373e81809d11afad9da1ac790b78371850b3e4f09484","txlist_hash":"4089c5ee6e83c7fdb9d8f0df917268b807801e7f0fb477b6a7fb4b9f931601f0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(211,310033,'insert','blocks','{"block_hash":"999c65df9661f73e8c01f1da1afda09ac16788b72834f0ff5ea3d1464afb4707","block_index":310033,"block_time":310033000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(211,310032,'insert','blocks','{"block_hash":"999c65df9661f73e8c01f1da1afda09ac16788b72834f0ff5ea3d1464afb4707","block_index":310033,"block_time":310033000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(212,310033,'parse','blocks','{"block_index":310033,"ledger_hash":"c8a973eb6bdd28dcab4f1b2a5e29e104944745e57a54e6d87b370aafb2e589f6","messages_hash":"57617659dfd3672b306a544fbf3419b2a77525588d83fdafcf27f133cd8cc027","txlist_hash":"28e9816084711e62a27a7d33af7a023d9c375d67c6d7dd4fbe840d511d114fbb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(213,310034,'insert','blocks','{"block_hash":"f552edd2e0a648230f3668e72ddf0ddfb1e8ac0f4c190f91b89c1a8c2e357208","block_index":310034,"block_time":310034000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(213,310033,'insert','blocks','{"block_hash":"f552edd2e0a648230f3668e72ddf0ddfb1e8ac0f4c190f91b89c1a8c2e357208","block_index":310034,"block_time":310034000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(214,310034,'parse','blocks','{"block_index":310034,"ledger_hash":"0d7b5809b7a5aa5ff854cfe141490a78c9b33e16f8102a8e804dbf0a0a8c0842","messages_hash":"918e7a686526c32d037a4a5634c04a4bc527d1e94261b300278950cc47c56831","txlist_hash":"37532a1b8cba78b522775b2feabd9dc786b259b49ae54af0279fd84061fcaf90"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(215,310035,'insert','blocks','{"block_hash":"a13cbb016f3044207a46967a4ba1c87dab411f78c55c1179f2336653c2726ae2","block_index":310035,"block_time":310035000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(215,310034,'insert','blocks','{"block_hash":"a13cbb016f3044207a46967a4ba1c87dab411f78c55c1179f2336653c2726ae2","block_index":310035,"block_time":310035000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(216,310035,'parse','blocks','{"block_index":310035,"ledger_hash":"6b4c99289086445a7bf575110172a661c1cd37c418b70afd8ef3be0982041f5e","messages_hash":"923e8dfd3279b7777a65ef4a0d31253cf092b52467d725ffa578114ee5707e1d","txlist_hash":"6d74b1faad84274944078e3fa21083b3776e37da614acfc8d61987a1a48db51e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(217,310036,'insert','blocks','{"block_hash":"158648a98f1e1bd1875584ce8449eb15a4e91a99a923bbb24c4210135cef0c76","block_index":310036,"block_time":310036000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(217,310035,'insert','blocks','{"block_hash":"158648a98f1e1bd1875584ce8449eb15a4e91a99a923bbb24c4210135cef0c76","block_index":310036,"block_time":310036000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(218,310036,'parse','blocks','{"block_index":310036,"ledger_hash":"f20b81389b2f4c9c9be4442b3c68f87da881406f1490637c7d93d63539155a7e","messages_hash":"b4119937e540d23b8c91810b6a3a712e123b010ba64f6d0ec2e7513965677c80","txlist_hash":"246e6cb136a8e79ad87ccc6a2318361c689d4720a9000c1a404f3556dced1bfb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(219,310037,'insert','blocks','{"block_hash":"563acfd6d991ce256d5655de2e9429975c8dceeb221e76d5ec6e9e24a2c27c07","block_index":310037,"block_time":310037000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(219,310036,'insert','blocks','{"block_hash":"563acfd6d991ce256d5655de2e9429975c8dceeb221e76d5ec6e9e24a2c27c07","block_index":310037,"block_time":310037000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(220,310037,'parse','blocks','{"block_index":310037,"ledger_hash":"52d554e6b53b853066a3a8f931fc37779f3596c4388e277a9f66a95e001a09eb","messages_hash":"08a26261dd5a60bd70efbc193b8c7541642b38853e7e7fc5b85e8fdf8b94ecf8","txlist_hash":"c4474243bf31bccb8aa11963c477e3d40bbdbf6c604edd86429c37b59d83b427"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(221,310038,'insert','blocks','{"block_hash":"b44b4cad12431c32df27940e18d51f63897c7472b70950d18454edfd640490b2","block_index":310038,"block_time":310038000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(221,310037,'insert','blocks','{"block_hash":"b44b4cad12431c32df27940e18d51f63897c7472b70950d18454edfd640490b2","block_index":310038,"block_time":310038000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(222,310038,'parse','blocks','{"block_index":310038,"ledger_hash":"08a949af614ff73a79313a5a949908b368efe1f8c131eeeb51ed610baf65ac46","messages_hash":"d699fba6e49edfd28c3f42448a0452645ea3d48b2a6ee315c189f6164f9167bd","txlist_hash":"791f23628ed99486b93754ee4e7a3717d2deee1ae60d4b80dd79c614e874c94a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(223,310039,'insert','blocks','{"block_hash":"5fa1ae9c5e8a599247458987b006ad3a57f686df1f7cc240bf119e911b56c347","block_index":310039,"block_time":310039000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(223,310038,'insert','blocks','{"block_hash":"5fa1ae9c5e8a599247458987b006ad3a57f686df1f7cc240bf119e911b56c347","block_index":310039,"block_time":310039000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(224,310039,'parse','blocks','{"block_index":310039,"ledger_hash":"7ff8b2408ee1124a5ee573d31023660aabcdb21599bdcfb4a3bc1895d7910094","messages_hash":"4e1fc5d2adfa955670023a3171caba56bc9a487487e735661d2b8fef0b009829","txlist_hash":"019a41a08fe760b6ca07f10cdb763ebd41d76a7a458f81023dacd0bb000221d6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(225,310040,'insert','blocks','{"block_hash":"7200ded406675453eadddfbb2d14c2a4526c7dc2b5de14bd48b29243df5e1aa3","block_index":310040,"block_time":310040000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(225,310039,'insert','blocks','{"block_hash":"7200ded406675453eadddfbb2d14c2a4526c7dc2b5de14bd48b29243df5e1aa3","block_index":310040,"block_time":310040000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(226,310040,'parse','blocks','{"block_index":310040,"ledger_hash":"c687e753c01711e94cfcad1f16d2976a12ef5d6c3731c64db26f969c988fe7c3","messages_hash":"175073928f9c483e28ef0153f7552bc8a8886a35a6cad614a381e866b390a27a","txlist_hash":"81bf654cee844b048e68c07fdbb561865156f77769d686aba7666d51bfc529b0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(227,310041,'insert','blocks','{"block_hash":"5db592ff9ba5fac1e030cf22d6c13b70d330ba397f415340086ee7357143b359","block_index":310041,"block_time":310041000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(227,310040,'insert','blocks','{"block_hash":"5db592ff9ba5fac1e030cf22d6c13b70d330ba397f415340086ee7357143b359","block_index":310041,"block_time":310041000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(228,310041,'parse','blocks','{"block_index":310041,"ledger_hash":"66f493ec8b5cf8140d1f627f008c50624d3069f56828df90286b53a2d6cbf47e","messages_hash":"7c38a2bc3583e8a0b36e349b2f7c8eb08a73cb2cdc26cd574e42d5f6f1819792","txlist_hash":"87461d03ba2d32213a73f526b81f1decb96b112a012ada6f9fc089032720798c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(229,310042,'insert','blocks','{"block_hash":"826fd4701ef2824e9559b069517cd3cb990aff6a4690830f78fc845ab77fa3e4","block_index":310042,"block_time":310042000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(229,310041,'insert','blocks','{"block_hash":"826fd4701ef2824e9559b069517cd3cb990aff6a4690830f78fc845ab77fa3e4","block_index":310042,"block_time":310042000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(230,310042,'parse','blocks','{"block_index":310042,"ledger_hash":"33acd319bde452aa81b589435a31ee3add742870a928ef2c15a7a447b4b4e0fa","messages_hash":"9308dd7bc118848b1dfa1514c65622002c8ce8b09f8d3f383cd921acae7fb6f5","txlist_hash":"c1fd057575646ab25fc055b10cb7cc9cc4d4d05f0ddbacfaa462fc9ac32d975e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(231,310043,'insert','blocks','{"block_hash":"2254a12ada208f1dd57bc17547ecaf3c44720323c47bc7d4b1262477cb7f3c51","block_index":310043,"block_time":310043000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(231,310042,'insert','blocks','{"block_hash":"2254a12ada208f1dd57bc17547ecaf3c44720323c47bc7d4b1262477cb7f3c51","block_index":310043,"block_time":310043000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(232,310043,'parse','blocks','{"block_index":310043,"ledger_hash":"83997825aa2597adb0292e265f01e937f621cc75d8cc18e23a4bd0c1fb0920c7","messages_hash":"584d88bef1b341c7a46c693cabbe0fcc603df58d4a425f64b9edf31f5204a6c4","txlist_hash":"86e036eb2032af487a2c3ccd6a6d8b3073c155164cda4bead96f92da996fd4be"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(233,310044,'insert','blocks','{"block_hash":"3346d24118d8af0b3c6bcc42f8b85792e7a2e7036ebf6e4c25f4f6723c78e46b","block_index":310044,"block_time":310044000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(233,310043,'insert','blocks','{"block_hash":"3346d24118d8af0b3c6bcc42f8b85792e7a2e7036ebf6e4c25f4f6723c78e46b","block_index":310044,"block_time":310044000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(234,310044,'parse','blocks','{"block_index":310044,"ledger_hash":"9890bca86442f329b2abf1b3bbf4d94e8ab54d10dfa7823a53f02fcfef030d88","messages_hash":"8518f19efe134acf8d55da0bd9512363de63bb14d06a1f51e4315f113c0c9430","txlist_hash":"a839b90852909b1e21b4461debe100d578abe34e3a46837b444a92db3eab8d97"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(235,310045,'insert','blocks','{"block_hash":"7bba0ab243839e91ad1a45a762bf074011f8a9883074d68203c6d1b46fffde98","block_index":310045,"block_time":310045000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(235,310044,'insert','blocks','{"block_hash":"7bba0ab243839e91ad1a45a762bf074011f8a9883074d68203c6d1b46fffde98","block_index":310045,"block_time":310045000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(236,310045,'parse','blocks','{"block_index":310045,"ledger_hash":"a909f658a8f405ef1f5cd8bbab03cbd865235544ae1c2f4dc20e2a4393181efc","messages_hash":"bf1f9d352187f8252ae400baf7b361897cb58d056f00685357a03159e48b9e43","txlist_hash":"a55dd67a02d97f49eb1ce9cbdf94b201a0320065e63aaccca1d14fc856a167b1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(237,310046,'insert','blocks','{"block_hash":"47db6788c38f2d6d712764979e41346b55e78cbb4969e0ef5c4336faf18993a6","block_index":310046,"block_time":310046000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(237,310045,'insert','blocks','{"block_hash":"47db6788c38f2d6d712764979e41346b55e78cbb4969e0ef5c4336faf18993a6","block_index":310046,"block_time":310046000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(238,310046,'parse','blocks','{"block_index":310046,"ledger_hash":"713d2ccc66a1aa7797ea9b6af18b04245478c7582a8aee76cf2c7f3f3060df3a","messages_hash":"5d5cc15d98b43e5689b2b23418e1a8c60c7466b75fce6a9eb34f2c2df59d8ef3","txlist_hash":"c7bdbef0fecf54c6d2f1dde171123487c95ccea2cb80743633a8bbdb3c3b9d35"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(239,310047,'insert','blocks','{"block_hash":"a9ccabcc2a098a7d25e4ab8bda7c4e66807eefa42e29890dcd88149a10de7075","block_index":310047,"block_time":310047000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(239,310046,'insert','blocks','{"block_hash":"a9ccabcc2a098a7d25e4ab8bda7c4e66807eefa42e29890dcd88149a10de7075","block_index":310047,"block_time":310047000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(240,310047,'parse','blocks','{"block_index":310047,"ledger_hash":"534500ae61a04841771193d57384d27b54fa2bb92c0698beaa46509b3d39eb1c","messages_hash":"9e57cfc8a170d8d502a7fd3a7837ab20035e29915f70982b1335f1b208241e96","txlist_hash":"8c7d8f1273c82696c80fa325a3dde05ee4ad5f719f6890b3d93907c91302cf7d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(241,310048,'insert','blocks','{"block_hash":"610bf3935a85b05a98556c55493c6de45bed4d7b3b6c8553a984718765796309","block_index":310048,"block_time":310048000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(241,310047,'insert','blocks','{"block_hash":"610bf3935a85b05a98556c55493c6de45bed4d7b3b6c8553a984718765796309","block_index":310048,"block_time":310048000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(242,310048,'parse','blocks','{"block_index":310048,"ledger_hash":"48c8e5d9ab1887f092731ba2881a330d22d4f03f601dccc096fa5147042a3d55","messages_hash":"cde2ec1e7c733c02935331d6137bb1effe396ea7dc82e4ded69543ceb6aedfb4","txlist_hash":"4c724447d400c30336cda4523a84f5cfe86849086f98367e5821a0bdddf68f7b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(243,310049,'insert','blocks','{"block_hash":"4ad2761923ad49ad2b283b640f1832522a2a5d6964486b21591b71df6b33be3c","block_index":310049,"block_time":310049000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(243,310048,'insert','blocks','{"block_hash":"4ad2761923ad49ad2b283b640f1832522a2a5d6964486b21591b71df6b33be3c","block_index":310049,"block_time":310049000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(244,310049,'parse','blocks','{"block_index":310049,"ledger_hash":"6c5ec3d2b7d8a724175559db977cb9ab78eecd39b9239688b30d6d3350cb01fe","messages_hash":"d0b0d19e3dfea993fe9e8b5b047f701fea2363b86e371e33388db2879acb485a","txlist_hash":"8f0ee591c9f8165289f106091ac0cc19dbaf813bf1134c3ad2cf302bdba0e8c7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(245,310050,'insert','blocks','{"block_hash":"8cfeb60a14a4cec6e9be13d699694d49007d82a31065a17890383e262071e348","block_index":310050,"block_time":310050000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(245,310049,'insert','blocks','{"block_hash":"8cfeb60a14a4cec6e9be13d699694d49007d82a31065a17890383e262071e348","block_index":310050,"block_time":310050000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(246,310050,'parse','blocks','{"block_index":310050,"ledger_hash":"817dc86594b3820de76f1d2bc2400d702475d558d6ee5bef4313fc154bbdaca2","messages_hash":"c31cc75c52571b2f31eb550b4441955777b3dda8f609ff0e896e6cc11a19c748","txlist_hash":"9ff934d29741af663537dc45d552b6c01cc8ba577af1fc2ddbbcb7259477bab8"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(247,310051,'insert','blocks','{"block_hash":"b53c90385dd808306601350920c6af4beb717518493fd23b5c730eea078f33e6","block_index":310051,"block_time":310051000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(247,310050,'insert','blocks','{"block_hash":"b53c90385dd808306601350920c6af4beb717518493fd23b5c730eea078f33e6","block_index":310051,"block_time":310051000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(248,310051,'parse','blocks','{"block_index":310051,"ledger_hash":"00916e6bac2f648f953c8d6dff21438a6ec53ad198b33f90667e8d4564e00e78","messages_hash":"969b1eef7e73c6c7440a6e1821ff57d9be96c399da6d25222c8761f031ec3966","txlist_hash":"3074814e0ba9b6e99b6af70ecee2f1cd072d760d921d13f04a5064342636da4e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(249,310052,'insert','blocks','{"block_hash":"0acdacf4e4b6fca756479cb055191b367b1fa433aa558956f5f08fa5b7b394e2","block_index":310052,"block_time":310052000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(249,310051,'insert','blocks','{"block_hash":"0acdacf4e4b6fca756479cb055191b367b1fa433aa558956f5f08fa5b7b394e2","block_index":310052,"block_time":310052000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(250,310052,'parse','blocks','{"block_index":310052,"ledger_hash":"959df962b9bc7ef215f1530b886613404adaf81552d6eeb4b1401ea265ad5f4f","messages_hash":"305f357468bc4c4030f71a370d6396a58e1724e218a6e6190966203721f71494","txlist_hash":"c792d99e376babe180a99ebe9c20a7925a74fb919ccab28a600d200caad6c0e3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(251,310053,'insert','blocks','{"block_hash":"68348f01b6dc49b2cb30fe92ac43e527aa90d859093d3bf7cd695c64d2ef744f","block_index":310053,"block_time":310053000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(251,310052,'insert','blocks','{"block_hash":"68348f01b6dc49b2cb30fe92ac43e527aa90d859093d3bf7cd695c64d2ef744f","block_index":310053,"block_time":310053000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(252,310053,'parse','blocks','{"block_index":310053,"ledger_hash":"d76b639ebddd434e5269de084de0b502e7f0eaff71b4e99de2d4ebdd1fc61380","messages_hash":"844c2635c132ed421e7747be6908cf50a926150d5bc27296f37f73fa03500faa","txlist_hash":"ca53cd5d8d4e90481a6099af39825f25e7b5325fd586693362d9e7302e72fc3a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(253,310054,'insert','blocks','{"block_hash":"a8b5f253df293037e49b998675620d5477445c51d5ec66596e023282bb9cd305","block_index":310054,"block_time":310054000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(253,310053,'insert','blocks','{"block_hash":"a8b5f253df293037e49b998675620d5477445c51d5ec66596e023282bb9cd305","block_index":310054,"block_time":310054000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(254,310054,'parse','blocks','{"block_index":310054,"ledger_hash":"525e8cabfc993080d128faf38a5e5c9e9afa61423a5f20a90d68cdcacc96b59b","messages_hash":"3ea2df17ab88adc76330690ca7dd681fd80f522375155867c73bb6d1298c3bf8","txlist_hash":"1bfbc68852f429756bdfb76508d3f044ecc24704e437259c23107470f1edec74"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(255,310055,'insert','blocks','{"block_hash":"4b069152e2dc82e96ed8a3c3547c162e8c3aceeb2a4ac07972f8321a535b9356","block_index":310055,"block_time":310055000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(255,310054,'insert','blocks','{"block_hash":"4b069152e2dc82e96ed8a3c3547c162e8c3aceeb2a4ac07972f8321a535b9356","block_index":310055,"block_time":310055000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(256,310055,'parse','blocks','{"block_index":310055,"ledger_hash":"155ffdc74a2077a3da7d5c068833468c7d0758dfb525a799f910cdb1543beadb","messages_hash":"115a3d942d7134aa1fd1e06de6be36a489076b6b89363d0d9ca8574a52192a47","txlist_hash":"86186f38b173c755554117ee448b6935fd6ec6ca9f464438d659ad6be767d481"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(257,310056,'insert','blocks','{"block_hash":"7603eaed418971b745256742f9d2ba70b2c2b2f69f61de6cc70e61ce0336f9d3","block_index":310056,"block_time":310056000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(257,310055,'insert','blocks','{"block_hash":"7603eaed418971b745256742f9d2ba70b2c2b2f69f61de6cc70e61ce0336f9d3","block_index":310056,"block_time":310056000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(258,310056,'parse','blocks','{"block_index":310056,"ledger_hash":"4f6fe786e34af90927bcd888b4b2a8fc69d3ccdfe4c4bb37edb2007901ce234a","messages_hash":"6c10c2e39604750e0fc0a2246c30cfc268ba9c93cd8b7f0418da56fa1e2081a7","txlist_hash":"822b518b20b4f136877f2dfb4f4a9299a4ef7c26441791e986677396405ee03f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(259,310057,'insert','blocks','{"block_hash":"4a5fdc84f2d66ecb6ee3e3646aad20751ce8694e64e348d3c8aab09d33a3e411","block_index":310057,"block_time":310057000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(259,310056,'insert','blocks','{"block_hash":"4a5fdc84f2d66ecb6ee3e3646aad20751ce8694e64e348d3c8aab09d33a3e411","block_index":310057,"block_time":310057000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(260,310057,'parse','blocks','{"block_index":310057,"ledger_hash":"30978d87fd8e32d9d27c92a0d4ca19d179b515ed95410fa96bf496b4cd8aa5e2","messages_hash":"10c89c95b6fa528a5aa068809e5f735c5e3680d75ef1882bb2584f8cedba1bf5","txlist_hash":"79032221c81d77f7dd7e35d46a314b21b17df32357b606ecb7402e5976473b19"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(261,310058,'insert','blocks','{"block_hash":"a6eef3089896f0cae0bfe9423392e45c48f4efe4310b14d8cfbdb1fea613635f","block_index":310058,"block_time":310058000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(261,310057,'insert','blocks','{"block_hash":"a6eef3089896f0cae0bfe9423392e45c48f4efe4310b14d8cfbdb1fea613635f","block_index":310058,"block_time":310058000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(262,310058,'parse','blocks','{"block_index":310058,"ledger_hash":"a0760bc5d2f04b381cc46aca84aa3788e8e3fbc833379a26ae812807d3a04fc5","messages_hash":"7e9860fb7b394ee7801f90330d53db116b7e3c4cdea3483eba351da8c9c81e8b","txlist_hash":"8f56034a75de70a679a8bd2515b5982dcebc5b2a6c468203ee8922f7e12aca4f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(263,310059,'insert','blocks','{"block_hash":"ab505de874c43f97c90be1c26a769e6c5cb140405c993b4a6cc7afc795f156a9","block_index":310059,"block_time":310059000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(263,310058,'insert','blocks','{"block_hash":"ab505de874c43f97c90be1c26a769e6c5cb140405c993b4a6cc7afc795f156a9","block_index":310059,"block_time":310059000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(264,310059,'parse','blocks','{"block_index":310059,"ledger_hash":"26dcef9e54b1a34b6024f8402ddebb6e9449cd90c270e3db75354a001484b1a1","messages_hash":"6d87ea5d117406693fa50f178d4d6bfb51d016387b65178d773d94f5f03a91b4","txlist_hash":"d645719f82c5029a7fe5eba356e16c17eb676e0848ac2e03b4d98df0106ae95c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(265,310060,'insert','blocks','{"block_hash":"974ad5fbef621e0a38eab811608dc9afaf10c8ecc85fed913075ba1a145e889b","block_index":310060,"block_time":310060000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(265,310059,'insert','blocks','{"block_hash":"974ad5fbef621e0a38eab811608dc9afaf10c8ecc85fed913075ba1a145e889b","block_index":310060,"block_time":310060000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(266,310060,'parse','blocks','{"block_index":310060,"ledger_hash":"810ebcdb63a08af5a26d1fd4e7a3604afd03bd06ff620d6a86c665e1c81116d2","messages_hash":"acc09ca7d6d46a31e5219a5fe711c3115dc935eae8b9f76de341d8ffc1251367","txlist_hash":"de75a174069eec13deaa318cf1429ed15d775816b7ffe6f46c7db0e252584271"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(267,310061,'insert','blocks','{"block_hash":"35d267d21ad386e7b7632292af1c422b0310dde7ca49a82f9577525a29c138cf","block_index":310061,"block_time":310061000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(267,310060,'insert','blocks','{"block_hash":"35d267d21ad386e7b7632292af1c422b0310dde7ca49a82f9577525a29c138cf","block_index":310061,"block_time":310061000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(268,310061,'parse','blocks','{"block_index":310061,"ledger_hash":"1edfc24d186c7e7267b11c03b0a29e57926e9ab25f668231a18a499cbd08c702","messages_hash":"31ef09c9d9085307840329344f77997686024ff642eb7fd66d1bb8ccba72772d","txlist_hash":"4f5fb29442a7bfe7928dfd0a30bc730b2ee0a0bfee963e20f8da2eeb0bc3d6d6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(269,310062,'insert','blocks','{"block_hash":"b31a0054145319ef9de8c1cb19df5bcf4dc8a1ece20053aa494e5d3a00a2852f","block_index":310062,"block_time":310062000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(269,310061,'insert','blocks','{"block_hash":"b31a0054145319ef9de8c1cb19df5bcf4dc8a1ece20053aa494e5d3a00a2852f","block_index":310062,"block_time":310062000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(270,310062,'parse','blocks','{"block_index":310062,"ledger_hash":"b0de9503f019c9548a97bd198e6b1b58b57d6a7c231ace2d72adb0421b29e9b7","messages_hash":"9e1443459f5d65d8a563c386ba81aafdbb7d8edec0b851cac2954bceca9a915f","txlist_hash":"99f2cacd3f24f7f8cf40d0c6a3c50413a243d886a381f432dc4398b06dd0003e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(271,310063,'insert','blocks','{"block_hash":"0cbcbcd5b7f2dc288e3a34eab3d4212463a5a56e886804fb4f9f1cf929eadebe","block_index":310063,"block_time":310063000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(271,310062,'insert','blocks','{"block_hash":"0cbcbcd5b7f2dc288e3a34eab3d4212463a5a56e886804fb4f9f1cf929eadebe","block_index":310063,"block_time":310063000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(272,310063,'parse','blocks','{"block_index":310063,"ledger_hash":"62e41caff168eb4b15eb67ab2130510ba3f17ac186f8516cf5b5c6f168988345","messages_hash":"120e6e7664ae78686c77d35bf4d699256954f01fb3136f6b57daf14c7f8c4c2c","txlist_hash":"6436ea453d46084d34e4af17b844a1312a3a3f0d95234921dffa50c3bb86a8da"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(273,310064,'insert','blocks','{"block_hash":"e2db8065a195e85cde9ddb868a17d39893a60fb2b1255aa5f0c88729de7cbf30","block_index":310064,"block_time":310064000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(273,310063,'insert','blocks','{"block_hash":"e2db8065a195e85cde9ddb868a17d39893a60fb2b1255aa5f0c88729de7cbf30","block_index":310064,"block_time":310064000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(274,310064,'parse','blocks','{"block_index":310064,"ledger_hash":"a444b1535d27bb2917478019c4c59abf9474e87128f9ec1e44c20eea1f014f3c","messages_hash":"bc4110a8a69c3c5b68a220d18914bfc2b775f4505fae4905a056ab1129a18759","txlist_hash":"4a7b7ac0f91d282190236dd238b33f7b76b40c1f5151c25117d7fffe014a1995"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(275,310065,'insert','blocks','{"block_hash":"8a7bc7a77c831ac4fd11b8a9d22d1b6a0661b07cef05c2e600c7fb683b861d2a","block_index":310065,"block_time":310065000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(275,310064,'insert','blocks','{"block_hash":"8a7bc7a77c831ac4fd11b8a9d22d1b6a0661b07cef05c2e600c7fb683b861d2a","block_index":310065,"block_time":310065000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(276,310065,'parse','blocks','{"block_index":310065,"ledger_hash":"0ad978671f587f99e5e1c1b6f68ac3d18bb03a3bd7ea9afb63590bcef25160c8","messages_hash":"9db614ad9f148242e8d381964ed1f060344570c654494d6f28a1d54748783c82","txlist_hash":"a7373340d9f43d4256f8a9063b32c415ca44e5964abc500cb3daa631ab92a311"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(277,310066,'insert','blocks','{"block_hash":"b6959be51eb084747d301f7ccaf9e75f2292c9404633b1532e3692659939430d","block_index":310066,"block_time":310066000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(277,310065,'insert','blocks','{"block_hash":"b6959be51eb084747d301f7ccaf9e75f2292c9404633b1532e3692659939430d","block_index":310066,"block_time":310066000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(278,310066,'parse','blocks','{"block_index":310066,"ledger_hash":"a6bb36829770b24fa0b960b85566a0138360a60b52cec62d94d7df8cb0b8f8b4","messages_hash":"22c378a039a5d54dc936e50a2b439d325bebf2499797ce6af9ee8d04c984a701","txlist_hash":"3f137eaa77970ba242a8bd0709970f7045ae79ca9f3cc172882577ee3ed34e9d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(279,310067,'insert','blocks','{"block_hash":"8b08eae98d7193c9c01863fac6effb9162bda010daeacf9e0347112f233b8577","block_index":310067,"block_time":310067000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(279,310066,'insert','blocks','{"block_hash":"8b08eae98d7193c9c01863fac6effb9162bda010daeacf9e0347112f233b8577","block_index":310067,"block_time":310067000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(280,310067,'parse','blocks','{"block_index":310067,"ledger_hash":"9b8ceda9b170429d8b9ed517f0db95487b3058397e20d7e786577c8e46b389b8","messages_hash":"e2199f8f8010ed9d80b755628f7b92539f0a7eff814045b5cb0c4b71ff693506","txlist_hash":"a8c54e9c41e6d694d38a6cb9bb9cea881609c013ef9bf4909fbcb0090168e263"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(281,310068,'insert','blocks','{"block_hash":"9280e7297ef6313341bc81787a36acfc9af58f83a415afff5e3154f126cf52b5","block_index":310068,"block_time":310068000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(281,310067,'insert','blocks','{"block_hash":"9280e7297ef6313341bc81787a36acfc9af58f83a415afff5e3154f126cf52b5","block_index":310068,"block_time":310068000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(282,310068,'parse','blocks','{"block_index":310068,"ledger_hash":"cee2e41baf86f1af24d555e9ab4a0c023b5f1ab2b054707d4434b4f60d31862a","messages_hash":"26a0fcab0e3f7ba3cb0b2d78b72c11ad6355647501cead5c427e1d23d4e3f3ad","txlist_hash":"bc2a5bfc7f1a8181b7b04970a8287b498f096bc08acf106f6a8e0a0ac5ca3723"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(283,310069,'insert','blocks','{"block_hash":"486351f0655bf594ffaab1980cff17353b640b63e9c27239109addece189a6f7","block_index":310069,"block_time":310069000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(283,310068,'insert','blocks','{"block_hash":"486351f0655bf594ffaab1980cff17353b640b63e9c27239109addece189a6f7","block_index":310069,"block_time":310069000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(284,310069,'parse','blocks','{"block_index":310069,"ledger_hash":"cbfd7ff728f05ba3f1db5972f1449618a79d3fd0d76bf7fe990aed2eb2316a38","messages_hash":"0a0c5631c11c33f5ccf3a0d4e537469fd887b0493a9395cce6f5cecec4525b98","txlist_hash":"73e3b8838f74134d3db985de53446f88c3bb86a8cec53bf773c10dd89fc2d709"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(285,310070,'insert','blocks','{"block_hash":"8739e99f4dee8bebf1332f37f49a125348b40b93b74fe35579dd52bfba4fa7e5","block_index":310070,"block_time":310070000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(285,310069,'insert','blocks','{"block_hash":"8739e99f4dee8bebf1332f37f49a125348b40b93b74fe35579dd52bfba4fa7e5","block_index":310070,"block_time":310070000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(286,310070,'parse','blocks','{"block_index":310070,"ledger_hash":"9af85cd995c83b5a5f0cac66351cabdf9dc9faecfee080638fc76019663faaa6","messages_hash":"0243ca02e41d763a7dc643fc9353613ee3eda717381cf1cc92d27833652bc9aa","txlist_hash":"5e951c9dc5201f32b7e8b9e72702984a2ff13c011cec35ef4ddbcf5b1e7e3111"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(287,310071,'insert','blocks','{"block_hash":"7a099aa1bba0ead577f1e44f35263a1f115ed6a868c98d4dd71609072ae7f80b","block_index":310071,"block_time":310071000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(287,310070,'insert','blocks','{"block_hash":"7a099aa1bba0ead577f1e44f35263a1f115ed6a868c98d4dd71609072ae7f80b","block_index":310071,"block_time":310071000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(288,310071,'parse','blocks','{"block_index":310071,"ledger_hash":"a3c547e84db6b29630b87fa566e37796e0632ba616dd6d521d558632c3b55370","messages_hash":"260cbb371e6bedd2e668b53e65b1938ddac82a976c4642e5931ef3c637aa0a2a","txlist_hash":"c72261d02c311085af66e2c66b8bcef2833d05716f067de2327442b92d219adf"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(289,310072,'insert','blocks','{"block_hash":"7b17ecedc07552551b8129e068ae67cb176ca766ea3f6df74b597a94e3a7fc8a","block_index":310072,"block_time":310072000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(289,310071,'insert','blocks','{"block_hash":"7b17ecedc07552551b8129e068ae67cb176ca766ea3f6df74b597a94e3a7fc8a","block_index":310072,"block_time":310072000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(290,310072,'parse','blocks','{"block_index":310072,"ledger_hash":"a0170d8a72a0f8642c0863899bf034e754596e3fd8ddffefa91e7e9a7addf944","messages_hash":"f251df0e4b0cd81f4f5be1d0847f2313327c5d3fcde55f54dc97da0c030338c5","txlist_hash":"df4f5afac7aa5bdd2e580979d13c750f4990c5f7e8dacaec6d751f4b1e3c690e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(291,310073,'insert','blocks','{"block_hash":"ee0fe3cc9b3a48a2746b6090b63b442b97ea6055d48edcf4b2288396764c6943","block_index":310073,"block_time":310073000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(291,310072,'insert','blocks','{"block_hash":"ee0fe3cc9b3a48a2746b6090b63b442b97ea6055d48edcf4b2288396764c6943","block_index":310073,"block_time":310073000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(292,310073,'parse','blocks','{"block_index":310073,"ledger_hash":"e0179a21342fcf35fa169567f1ef35bd6b0b1b048a98e90c049fdf3ee58e9da4","messages_hash":"8766382520f4e2f1cd434333e1b0f694679e3389938ad90cb27a806f1b10bc1f","txlist_hash":"c5cc010dd34b520a733ad2e109b4b2b8cc84b48e412c43ac688a57f99147c164"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(293,310074,'insert','blocks','{"block_hash":"ceab38dfde01f711a187601731ad575d67cfe0b7dbc61dcd4f15baaef72089fb","block_index":310074,"block_time":310074000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(293,310073,'insert','blocks','{"block_hash":"ceab38dfde01f711a187601731ad575d67cfe0b7dbc61dcd4f15baaef72089fb","block_index":310074,"block_time":310074000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(294,310074,'parse','blocks','{"block_index":310074,"ledger_hash":"8855ace296b0b078d90aa24fcd30ca9f9cccf9d3961f3dba4985a3ff187a02ac","messages_hash":"57d4af8c7a15f1318317e9c5904245edf53331c9f4ecffc1ba4d5043e62d8af4","txlist_hash":"eac5c44840751fb1009274a20657bc544e855ff1a49533c9fc43c0b6e66b7402"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(295,310075,'insert','blocks','{"block_hash":"ef547198c6e36d829f117cfd7077ccde45158e3c545152225fa24dba7a26847b","block_index":310075,"block_time":310075000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(295,310074,'insert','blocks','{"block_hash":"ef547198c6e36d829f117cfd7077ccde45158e3c545152225fa24dba7a26847b","block_index":310075,"block_time":310075000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(296,310075,'parse','blocks','{"block_index":310075,"ledger_hash":"bde3a6c6cc31b96d58f466d3ce0361cc6366c8c239778f21b696d4063cf6d89e","messages_hash":"2a1c11729dfc8b114a93a4d00c864898433dca5405b147a551ab342eee18d6ea","txlist_hash":"40cde00e42632bcc0477dc071b9acfa0745283dc2a9d2d28e230f939832abbac"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(297,310076,'insert','blocks','{"block_hash":"3b0499c2e8e8f0252c7288d4ecf66efc426ca37aad3524424d14c8bc6f8b0d92","block_index":310076,"block_time":310076000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(297,310075,'insert','blocks','{"block_hash":"3b0499c2e8e8f0252c7288d4ecf66efc426ca37aad3524424d14c8bc6f8b0d92","block_index":310076,"block_time":310076000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(298,310076,'parse','blocks','{"block_index":310076,"ledger_hash":"f562851b32a7005ee02b9e2491c0195dddce451e8fecb428209d087e69345303","messages_hash":"c5208e94a5cf8b81912e897627778a7b87b6cda084714bcf17dcbbfe471ff09a","txlist_hash":"dc3ab137a2d7430196ec3d25456e09e8e63d815c8e4b246e95e7e63d4e3a9c75"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(299,310077,'insert','blocks','{"block_hash":"d2adeefa9024ab3ff2822bc36acf19b6c647cea118cf15b86c6bc00c3322e7dd","block_index":310077,"block_time":310077000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(299,310076,'insert','blocks','{"block_hash":"d2adeefa9024ab3ff2822bc36acf19b6c647cea118cf15b86c6bc00c3322e7dd","block_index":310077,"block_time":310077000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(300,310077,'parse','blocks','{"block_index":310077,"ledger_hash":"996cda7b65e623747deef936d61491cedd0159f44faa1e3536de1b6d6c474097","messages_hash":"f6755e4b9a0aac05188b3556704027627d5429557332b9f836605544254ed43b","txlist_hash":"a957a0c28f2a0beb967ef0ac9519e9207e37415af3018f1a5cb998169f3b6005"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(301,310078,'insert','blocks','{"block_hash":"f6c17115ef0efe489c562bcda4615892b4d4b39db0c9791fe193d4922bd82cd6","block_index":310078,"block_time":310078000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(301,310077,'insert','blocks','{"block_hash":"f6c17115ef0efe489c562bcda4615892b4d4b39db0c9791fe193d4922bd82cd6","block_index":310078,"block_time":310078000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(302,310078,'parse','blocks','{"block_index":310078,"ledger_hash":"c8286f73cc3a070f4251b7c59bb485e611437a1916fd39ffac831dc78df54ecd","messages_hash":"1796d3f485d4ca5c7fbfeabc6b1428703afd47c721400cdc2acdaeadb9d26482","txlist_hash":"3cf1b57600853e04513ad74089e344f9e5af742e1d4aaad0c9e51c0ebc6e77d5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(303,310079,'insert','blocks','{"block_hash":"f2fbd2074d804e631db44cb0fb2e1db3fdc367e439c21ffc40d73104c4d7069c","block_index":310079,"block_time":310079000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(303,310078,'insert','blocks','{"block_hash":"f2fbd2074d804e631db44cb0fb2e1db3fdc367e439c21ffc40d73104c4d7069c","block_index":310079,"block_time":310079000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(304,310079,'parse','blocks','{"block_index":310079,"ledger_hash":"ef9dab42700918027fac849f2088d2248a6291dc7bc24be583b556f37739631b","messages_hash":"e5aed9b39fa7515afa96939dd322b29380c52591b7dc6ed6a62d1e7153f69889","txlist_hash":"6cf1d5147d5c6523c275384d404b4f7a750dab987def5846979bc5d14233a44b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(305,310080,'insert','blocks','{"block_hash":"42943b914d9c367000a78b78a544cc4b84b1df838aadde33fe730964a89a3a6c","block_index":310080,"block_time":310080000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(305,310079,'insert','blocks','{"block_hash":"42943b914d9c367000a78b78a544cc4b84b1df838aadde33fe730964a89a3a6c","block_index":310080,"block_time":310080000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(306,310080,'parse','blocks','{"block_index":310080,"ledger_hash":"c6bbc52f1e8f907b2d66378f4352f41ae3d354985aaab5f16d737d75a7e6b1d8","messages_hash":"08636b4a9a1b1ef795ea50198a555762e9a7b1b2e9bf12428b223b2dae49cd3c","txlist_hash":"091641bdce3f527a8a3da393068fca3534e8209fba337b7b79bf22f2a6bc5dec"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(307,310081,'insert','blocks','{"block_hash":"6554f9d307976249e7b7e260e08046b3b55d318f8b6af627fed5be3063f123c4","block_index":310081,"block_time":310081000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(307,310080,'insert','blocks','{"block_hash":"6554f9d307976249e7b7e260e08046b3b55d318f8b6af627fed5be3063f123c4","block_index":310081,"block_time":310081000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(308,310081,'parse','blocks','{"block_index":310081,"ledger_hash":"66f7b7ff8f0217ed62938a5931d4a6a232546e5d58e09dfd3ba5a792c35fa560","messages_hash":"fbe957e0c70cf6dd4ebc7b0f46adf107bc92354eba58205ef447e3daf6bc8db6","txlist_hash":"8a955c5c1a5c9f8c82553803172cc961e61b2e2e19b9c87cad6dec24512ee351"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(309,310082,'insert','blocks','{"block_hash":"4f1ef91b1dcd575f8ac2e66a67715500cbca154bd6f3b8148bb7015a6aa6c644","block_index":310082,"block_time":310082000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(309,310081,'insert','blocks','{"block_hash":"4f1ef91b1dcd575f8ac2e66a67715500cbca154bd6f3b8148bb7015a6aa6c644","block_index":310082,"block_time":310082000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(310,310082,'parse','blocks','{"block_index":310082,"ledger_hash":"2b26c6d901ca9790987331432372046d9620d10ea163f4824208d6b23e8e7a35","messages_hash":"df11ad31e79548a8591fbd90d30ad79ce85da37dfb146a48ec4bb648737ebff6","txlist_hash":"482bf498868976d12ae17fc38bc847d8c7398c96fad5df9f1d2719197fa038e6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(311,310083,'insert','blocks','{"block_hash":"9b1f6fd6ff9b0dc4e37603cfb0625f49067c775b99e12492afd85392d3c8d850","block_index":310083,"block_time":310083000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(311,310082,'insert','blocks','{"block_hash":"9b1f6fd6ff9b0dc4e37603cfb0625f49067c775b99e12492afd85392d3c8d850","block_index":310083,"block_time":310083000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(312,310083,'parse','blocks','{"block_index":310083,"ledger_hash":"0d6d774dce93e94e870835005b0e8b04f010fb25158aa69a0fa0321d1577e987","messages_hash":"06753394ba61e21576857c2bea779ed38eed2fb104134102a6ee6f4075acf676","txlist_hash":"ed1021dde8c16263483f3a50091a2df2105977a7aab9217b78af58833433853c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(313,310084,'insert','blocks','{"block_hash":"1e0972523e80306441b9f4157f171716199f1428db2e818a7f7817ccdc8859e3","block_index":310084,"block_time":310084000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(313,310083,'insert','blocks','{"block_hash":"1e0972523e80306441b9f4157f171716199f1428db2e818a7f7817ccdc8859e3","block_index":310084,"block_time":310084000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(314,310084,'parse','blocks','{"block_index":310084,"ledger_hash":"9dbd171e3606b1662f6b576339b1e9aaa3da8a9f8a246bab905af255add4a762","messages_hash":"0da963e6f910b4d732b4b5142c237cd3fc3cc77ffdd8a7566ee849b827f93e59","txlist_hash":"e5ea123c86cd7147d8cd8d9866006e1da8528bb32c8005a998ca9f6ee917c2ba"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(315,310085,'insert','blocks','{"block_hash":"c5b6e9581831e3bc5848cd7630c499bca26d9ece5156d36579bdb72d54817e34","block_index":310085,"block_time":310085000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(315,310084,'insert','blocks','{"block_hash":"c5b6e9581831e3bc5848cd7630c499bca26d9ece5156d36579bdb72d54817e34","block_index":310085,"block_time":310085000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(316,310085,'parse','blocks','{"block_index":310085,"ledger_hash":"db67b5dc6b0c0ddec22d0e716b72aa8cb6fa9702316f2a8e12659ee229094c16","messages_hash":"0e49e187d7c89228e2592780e408c2a4add307095076272d84e2b55f4ecf29e9","txlist_hash":"a25387e650e60dbb003c5ef16c46a8d8464013d81bdb49508c2935368d4ae9c0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(317,310086,'insert','blocks','{"block_hash":"080c1dc55a4ecf4824cf9840602498cfc35b5f84099f50b71b45cb63834c7a78","block_index":310086,"block_time":310086000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(317,310085,'insert','blocks','{"block_hash":"080c1dc55a4ecf4824cf9840602498cfc35b5f84099f50b71b45cb63834c7a78","block_index":310086,"block_time":310086000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(318,310086,'parse','blocks','{"block_index":310086,"ledger_hash":"7cf70b5298dbb36efbec2fb880b76e2514e3bad9d5200875fa3eb3ceb7719ee8","messages_hash":"99d27abfd96c4b9202fc101ca8795378da7adb442693a8dd2ee01755c3a5aa5d","txlist_hash":"f5028a37d6395b533cf60e6ce9f0bf574a0a7beb2cebd2f545b5183e5362aaf3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(319,310087,'insert','blocks','{"block_hash":"4ec8cb1c38b22904e8087a034a6406b896eff4dd28e7620601c6bddf82e2738c","block_index":310087,"block_time":310087000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(319,310086,'insert','blocks','{"block_hash":"4ec8cb1c38b22904e8087a034a6406b896eff4dd28e7620601c6bddf82e2738c","block_index":310087,"block_time":310087000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(320,310087,'parse','blocks','{"block_index":310087,"ledger_hash":"27106f400fe1ee93bde42f3bf3cf39737fb856bbf0df3f90fe0838cf7d38798c","messages_hash":"eb249a817d3a77ab509de6ec126d1adb66ba7cb5b061b8bc1b6bbd8fb97fa2d8","txlist_hash":"f336b56eb2aab91aaacef9df8159627bafc67b497482abcec9ad6786710da7ec"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(321,310088,'insert','blocks','{"block_hash":"e945c815c433cbddd0bf8e66c5c23b51072483492acda98f5c2c201020a8c5b3","block_index":310088,"block_time":310088000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(321,310087,'insert','blocks','{"block_hash":"e945c815c433cbddd0bf8e66c5c23b51072483492acda98f5c2c201020a8c5b3","block_index":310088,"block_time":310088000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(322,310088,'parse','blocks','{"block_index":310088,"ledger_hash":"28c9833eded6d68967f206e5884616f83bb9ad16b9d7a507031b96480aecc799","messages_hash":"717ede78db478693f58863ed85316b1a70c505f7d7288b783eb30c9e6aafbdbe","txlist_hash":"c51f9cf9cd60f836bf4ae7ee0cd982829f6f7cbb2503eafef3bb167a285cf9a9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(323,310089,'insert','blocks','{"block_hash":"0382437f895ef3e7e38bf025fd4f606fd44d4bbd6aea71dbdc4ed11a7cd46f33","block_index":310089,"block_time":310089000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(323,310088,'insert','blocks','{"block_hash":"0382437f895ef3e7e38bf025fd4f606fd44d4bbd6aea71dbdc4ed11a7cd46f33","block_index":310089,"block_time":310089000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(324,310089,'parse','blocks','{"block_index":310089,"ledger_hash":"cdac6435934ea6e67a311495325c85237158ef30c009ea44c562c2127d79e696","messages_hash":"1bfad3f02446c2eaf5d92214a3dace565861afd1cfcb75b12087f88c542c82e8","txlist_hash":"b6749729423101ee337b7fbf0362191ba34102f01db03b225ac0d6c52de2a6fb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(325,310090,'insert','blocks','{"block_hash":"b756db71dc037b5a4582de354a3347371267d31ebda453e152f0a13bb2fae969","block_index":310090,"block_time":310090000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(325,310089,'insert','blocks','{"block_hash":"b756db71dc037b5a4582de354a3347371267d31ebda453e152f0a13bb2fae969","block_index":310090,"block_time":310090000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(326,310090,'parse','blocks','{"block_index":310090,"ledger_hash":"cb33e420348e7969a2310445a6c17c79e647d3c6f3106d4fd0c0a1249e11ed6f","messages_hash":"e7f8143dcc493803ee016f2318c91d7ec9cfee932596858f77c96b9572c24ad1","txlist_hash":"544bc0db1dbb1d22a05e5f81de7520ef990df5b897b9f9e60d98f102fef86568"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(327,310091,'insert','blocks','{"block_hash":"734a9aa485f36399d5efb74f3b9c47f8b5f6fd68c9967f134b14cfe7e2d7583c","block_index":310091,"block_time":310091000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(327,310090,'insert','blocks','{"block_hash":"734a9aa485f36399d5efb74f3b9c47f8b5f6fd68c9967f134b14cfe7e2d7583c","block_index":310091,"block_time":310091000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(328,310091,'parse','blocks','{"block_index":310091,"ledger_hash":"dda2531cf7db78a3f27c1ce70189b3f6efb69ddd24b61639f9deff42566bba2a","messages_hash":"ee5b11297364b892749812f46908976dbf0df6fed5083470bddd3cbd0f443688","txlist_hash":"217908d5688f0d9797f04ee9c3cd03ae93c20f4e5801fd809d3c37154e55b7b6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(329,310092,'insert','blocks','{"block_hash":"56386beb65f9228740d4ad43a1c575645f6daf59e0dd9f22551c59215b5e8c3d","block_index":310092,"block_time":310092000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(329,310091,'insert','blocks','{"block_hash":"56386beb65f9228740d4ad43a1c575645f6daf59e0dd9f22551c59215b5e8c3d","block_index":310092,"block_time":310092000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(330,310092,'parse','blocks','{"block_index":310092,"ledger_hash":"9ca7d9e1da0c6e4465d9e1c76990b6c48e62ee3a0b3b83189dc7a0f2c03a3006","messages_hash":"0d714f5b1aeb7850a37e62304533be483e870cf8a93c842499e7fb8f426a278a","txlist_hash":"6e31995ac19f2ff3fdfe5d2ba7a49f4b018b132d2aae92a4c664a97d6a6b3b6b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(331,310093,'insert','blocks','{"block_hash":"a74a2425f2f4be24bb5f715173e6756649e1cbf1b064aeb1ef60e0b94b418ddc","block_index":310093,"block_time":310093000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(331,310092,'insert','blocks','{"block_hash":"a74a2425f2f4be24bb5f715173e6756649e1cbf1b064aeb1ef60e0b94b418ddc","block_index":310093,"block_time":310093000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(332,310093,'parse','blocks','{"block_index":310093,"ledger_hash":"c6fc005e874909cf0393ac1bee7267f66cc5355c549d8657234a0ed6b429c869","messages_hash":"35654c3d2b3f82e783d329180c97ed5e933a36e01e19a4d46f75372f411bdc4c","txlist_hash":"d7d3f23d0014f40f3ac6a00fbb59e95653d22e11360783fe4116be9ecf360149"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(333,310094,'insert','blocks','{"block_hash":"2a8f976f20c4e89ff01071915ac96ee35192d54df3a246bf61fd4a0cccfb5b23","block_index":310094,"block_time":310094000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(333,310093,'insert','blocks','{"block_hash":"2a8f976f20c4e89ff01071915ac96ee35192d54df3a246bf61fd4a0cccfb5b23","block_index":310094,"block_time":310094000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(334,310094,'parse','blocks','{"block_index":310094,"ledger_hash":"14dacaec0b37ca20f271e500d0ec1837a63006eb464728c067107738ad3167c6","messages_hash":"e84c649434ab608ebf4f88162e34f824e244c76f4af22913f0efb6ae6e21c94f","txlist_hash":"7a1a9bf5515019b99c1c35abaa4a2003c6291018e090c26ec03c5c951f853f82"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(335,310095,'insert','blocks','{"block_hash":"bed0fa40c9981223fb40b3be8124ca619edc9dd34d0c907369477ea92e5d2cd2","block_index":310095,"block_time":310095000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(335,310094,'insert','blocks','{"block_hash":"bed0fa40c9981223fb40b3be8124ca619edc9dd34d0c907369477ea92e5d2cd2","block_index":310095,"block_time":310095000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(336,310095,'parse','blocks','{"block_index":310095,"ledger_hash":"05bd680c082185147e83785e7464d8890908d1550359b4fac79018b510475e01","messages_hash":"604cde079938595e2eaafe98115d964d3d7760de6727133ce55a0aaf3c09ebda","txlist_hash":"40b9134941fbe6312e3a7dca4b1f5114c3b7ab73f6ab84ba96aa101097111168"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(337,310096,'insert','blocks','{"block_hash":"306aeec3db435fabffdf88c2f26ee83caa4c2426375a33daa2be041dbd27ea2f","block_index":310096,"block_time":310096000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(337,310095,'insert','blocks','{"block_hash":"306aeec3db435fabffdf88c2f26ee83caa4c2426375a33daa2be041dbd27ea2f","block_index":310096,"block_time":310096000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(338,310096,'parse','blocks','{"block_index":310096,"ledger_hash":"b50805d750ebd26f8dbced919948118f1f97ce7d117aa1760e7a3c4895f51e13","messages_hash":"a9cb685942d115aef7c6cbedb261c04ae6a2b7a8106749ebbaa5c80a0abd3aeb","txlist_hash":"4e1fd0382baffd66852d64c667941808ebeb08a17309ccfe91be8e16046ad266"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(339,310097,'insert','blocks','{"block_hash":"13e8e16e67c7cdcc80d477491e554b43744f90e8e1a9728439a11fab42cefadf","block_index":310097,"block_time":310097000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(339,310096,'insert','blocks','{"block_hash":"13e8e16e67c7cdcc80d477491e554b43744f90e8e1a9728439a11fab42cefadf","block_index":310097,"block_time":310097000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(340,310097,'parse','blocks','{"block_index":310097,"ledger_hash":"dde96405c241e1d57334670e4eff7ed8db92056e6867cae10475a9bc30ba4619","messages_hash":"ace214c70fd988ebaa5d2cbb97ea3015c50819efbc2bc788840a984fa721de41","txlist_hash":"8e635d69a6a40df5c3849e1811ee551c32a57a3496fe8e4b97846b9592a9ebde"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(341,310098,'insert','blocks','{"block_hash":"ca5bca4b5ec4fa6183e05176abe921cff884c4e20910fab55b603cef48dc3bca","block_index":310098,"block_time":310098000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(341,310097,'insert','blocks','{"block_hash":"ca5bca4b5ec4fa6183e05176abe921cff884c4e20910fab55b603cef48dc3bca","block_index":310098,"block_time":310098000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(342,310098,'parse','blocks','{"block_index":310098,"ledger_hash":"613d78fbabba246a4d1cd9d50317e732795a59812df8395472347e15cec1ee9b","messages_hash":"ea310679cec41d4ecfbc9e8293090ecfc50d42603aeead40f8578f1c67325499","txlist_hash":"c96db41449a579ffc6b459375569230e88bdfd51c10578c60f8d252eff630fd3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(343,310099,'insert','blocks','{"block_hash":"3c4c2279cd7de0add5ec469648a845875495a7d54ebfb5b012dcc5a197b7992a","block_index":310099,"block_time":310099000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(343,310098,'insert','blocks','{"block_hash":"3c4c2279cd7de0add5ec469648a845875495a7d54ebfb5b012dcc5a197b7992a","block_index":310099,"block_time":310099000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(344,310099,'parse','blocks','{"block_index":310099,"ledger_hash":"e535ca5960d2ce7508bd2157dd0cac3ea1f9ab14532a40884d522b4bba0d4979","messages_hash":"42229b9e7e27e8ef79ad7116e9c90af0ead5a28b5330d482c82975fe22e0fc0b","txlist_hash":"710369d2e677643b7ab8f2bbcebf0f13017052ff7fd9adfd6ffac4e6fff83f8c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(345,310100,'insert','blocks','{"block_hash":"96925c05b3c7c80c716f5bef68d161c71d044252c766ca0e3f17f255764242cb","block_index":310100,"block_time":310100000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(345,310099,'insert','blocks','{"block_hash":"96925c05b3c7c80c716f5bef68d161c71d044252c766ca0e3f17f255764242cb","block_index":310100,"block_time":310100000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(346,310100,'parse','blocks','{"block_index":310100,"ledger_hash":"970865291b7a6d8173d6ad2ae97335cb2e89d80cbbb7a79bb2328cf6c67fa6cd","messages_hash":"7a2883d5bee08691b501606fb32234a6e9e72187d20393de23126819cbed81a8","txlist_hash":"9deae420c2b87043e6e18db077634a1d65ae60b38f604ce56f0899ed3a561347"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(347,310101,'insert','blocks','{"block_hash":"369472409995ca1a2ebecbad6bf9dab38c378ab1e67e1bdf13d4ce1346731cd6","block_index":310101,"block_time":310101000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(347,310100,'insert','blocks','{"block_hash":"369472409995ca1a2ebecbad6bf9dab38c378ab1e67e1bdf13d4ce1346731cd6","block_index":310101,"block_time":310101000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(348,310101,'parse','blocks','{"block_index":310101,"ledger_hash":"0741e57ad88cdada65134c9f131ff5bfd9498cb054378d829e34715e8db2aa6d","messages_hash":"d445cfe17527660e016649cfd9b00ee76b41728d084d1064e30859cda37eb244","txlist_hash":"4bd0054addc71915293b8f040ed3c6c64d0aaf8ad27647d1887e16d55604523c"}',0,'BLOCK_PARSED'); -- Triggers and indices on messages CREATE TRIGGER block_update_messages diff --git a/counterparty-core/counterpartycore/test/fixtures/scenarios/unittest_fixture.sql b/counterparty-core/counterpartycore/test/fixtures/scenarios/unittest_fixture.sql index ab03a0a42a..83e705eb0d 100644 --- a/counterparty-core/counterpartycore/test/fixtures/scenarios/unittest_fixture.sql +++ b/counterparty-core/counterpartycore/test/fixtures/scenarios/unittest_fixture.sql @@ -964,14 +964,14 @@ CREATE TABLE messages( bindings TEXT, timestamp INTEGER, event TEXT); -INSERT INTO messages VALUES(0,309999,'insert','blocks','{"block_hash":"8b3bef249cb3b0fa23a4936c1249b6bd41daeadc848c8d2e409ea1cbc10adfe7","block_index":309999,"block_time":309999000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(0,0,'insert','blocks','{"block_hash":"8b3bef249cb3b0fa23a4936c1249b6bd41daeadc848c8d2e409ea1cbc10adfe7","block_index":309999,"block_time":309999000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1,309999,'parse','blocks','{"block_index":309999,"ledger_hash":"63f0fef31d02da85fa779e9a0e1b585b1a6a4e59e14564249e288e074e91c223","messages_hash":"63f0fef31d02da85fa779e9a0e1b585b1a6a4e59e14564249e288e074e91c223","txlist_hash":"63f0fef31d02da85fa779e9a0e1b585b1a6a4e59e14564249e288e074e91c223"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(2,310000,'insert','blocks','{"block_hash":"505d8d82c4ced7daddef7ed0b05ba12ecc664176887b938ef56c6af276f3b30c","block_index":310000,"block_time":310000000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(2,309999,'insert','blocks','{"block_hash":"505d8d82c4ced7daddef7ed0b05ba12ecc664176887b938ef56c6af276f3b30c","block_index":310000,"block_time":310000000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(3,310000,'insert','transactions','{"block_hash":"505d8d82c4ced7daddef7ed0b05ba12ecc664176887b938ef56c6af276f3b30c","block_index":310000,"block_time":310000000,"btc_amount":62000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":5625,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"6dc5b0a33d4d4297e0f5cc2d23ae307951d32aab2d86b7fa147b385219f3a597","tx_index":1}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(4,310000,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310000,"calling_function":"burn","event":"6dc5b0a33d4d4297e0f5cc2d23ae307951d32aab2d86b7fa147b385219f3a597","quantity":93000000000,"tx_index":1}',0,'CREDIT'); INSERT INTO messages VALUES(5,310000,'insert','burns','{"block_index":310000,"burned":62000000,"earned":93000000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"6dc5b0a33d4d4297e0f5cc2d23ae307951d32aab2d86b7fa147b385219f3a597","tx_index":1}',0,'BURN'); INSERT INTO messages VALUES(6,310000,'parse','blocks','{"block_index":310000,"ledger_hash":"cf0ea1d313e22ba5f413075b88e07dffc5c00e59f95eeb6d6dec935bd77f5ae4","messages_hash":"9e7dd13f1ecb4ec6481076dc9bb5fda1bdb9103747455f9de9ab516748201ef0","txlist_hash":"f06c23e6040a063ed59693baa0d63492dce64e1debc7455b22f5535c9dfbdc67"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(7,310001,'insert','blocks','{"block_hash":"3c9f6a9c6cac46a9273bd3db39ad775acd5bc546378ec2fb0587e06e112cc78e","block_index":310001,"block_time":310001000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(7,310000,'insert','blocks','{"block_hash":"3c9f6a9c6cac46a9273bd3db39ad775acd5bc546378ec2fb0587e06e112cc78e","block_index":310001,"block_time":310001000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(8,310001,'insert','transactions','{"block_hash":"3c9f6a9c6cac46a9273bd3db39ad775acd5bc546378ec2fb0587e06e112cc78e","block_index":310001,"block_time":310001000,"btc_amount":0,"data":"00000014000000a25be34b66000000174876e800010000000000000000000f446976697369626c65206173736574","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"1fc2e5a57f584b2f2edd05676e75c33d03eed1d3098cc0550ea33474e3ec9db1","tx_index":2}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(9,310001,'insert','debits','{"action":"issuance fee","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310001,"event":"1fc2e5a57f584b2f2edd05676e75c33d03eed1d3098cc0550ea33474e3ec9db1","quantity":50000000,"tx_index":2}',0,'DEBIT'); INSERT INTO messages VALUES(10,310001,'insert','assets','{"asset_id":"697326324582","asset_longname":null,"asset_name":"DIVISIBLE","block_index":310001}',0,'ASSET_CREATION'); @@ -979,7 +979,7 @@ INSERT INTO messages VALUES(11,310001,'insert','issuances','{"asset":"DIVISIBLE" INSERT INTO messages VALUES(12,310001,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"DIVISIBLE","block_index":310001,"calling_function":"issuance","event":"1fc2e5a57f584b2f2edd05676e75c33d03eed1d3098cc0550ea33474e3ec9db1","quantity":100000000000,"tx_index":2}',0,'CREDIT'); INSERT INTO messages VALUES(13,310001,'parse','transactions','{"supported":true,"tx_hash":"1fc2e5a57f584b2f2edd05676e75c33d03eed1d3098cc0550ea33474e3ec9db1","tx_index":2}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(14,310001,'parse','blocks','{"block_index":310001,"ledger_hash":"11461f972c4cd85c87b5abfedb3cee589d09e945570d34564dcde6f4df9d2b57","messages_hash":"73d038390ff24d64df88c69d45b46bbc90f6b77f68cbbe2081dbe1e556a65e5e","txlist_hash":"ff8358e8c8b2cb9a1765deadb77bdfc6eae05a844831a0a8c8820d416d54446e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(15,310002,'insert','blocks','{"block_hash":"fbb60f1144e1f7d4dc036a4a158a10ea6dea2ba6283a723342a49b8eb5cc9964","block_index":310002,"block_time":310002000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(15,310001,'insert','blocks','{"block_hash":"fbb60f1144e1f7d4dc036a4a158a10ea6dea2ba6283a723342a49b8eb5cc9964","block_index":310002,"block_time":310002000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(16,310002,'insert','transactions','{"block_hash":"fbb60f1144e1f7d4dc036a4a158a10ea6dea2ba6283a723342a49b8eb5cc9964","block_index":310002,"block_time":310002000,"btc_amount":0,"data":"000000140006cad8dc7f0b6600000000000003e800000000000000000000124e6f20646976697369626c65206173736574","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"7b1bf5144346279271b1ff78664f118224fe27fd8679d6c1519345f9c6c54584","tx_index":3}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(17,310002,'insert','debits','{"action":"issuance fee","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310002,"event":"7b1bf5144346279271b1ff78664f118224fe27fd8679d6c1519345f9c6c54584","quantity":50000000,"tx_index":3}',0,'DEBIT'); INSERT INTO messages VALUES(18,310002,'insert','assets','{"asset_id":"1911882621324134","asset_longname":null,"asset_name":"NODIVISIBLE","block_index":310002}',0,'ASSET_CREATION'); @@ -987,7 +987,7 @@ INSERT INTO messages VALUES(19,310002,'insert','issuances','{"asset":"NODIVISIBL INSERT INTO messages VALUES(20,310002,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"NODIVISIBLE","block_index":310002,"calling_function":"issuance","event":"7b1bf5144346279271b1ff78664f118224fe27fd8679d6c1519345f9c6c54584","quantity":1000,"tx_index":3}',0,'CREDIT'); INSERT INTO messages VALUES(21,310002,'parse','transactions','{"supported":true,"tx_hash":"7b1bf5144346279271b1ff78664f118224fe27fd8679d6c1519345f9c6c54584","tx_index":3}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(22,310002,'parse','blocks','{"block_index":310002,"ledger_hash":"355d92f841de89a1d97c3b2ea7623959ea4494bb62ea7e67ad359beb68caca8c","messages_hash":"a180177bd180e7945ff4ce61b48c12cb0fd21535f71e943ffc25ff67a770e0f0","txlist_hash":"b17176b511fdea4cd899cfaf83f2e12193a4c92d1b199f18f590eb4fed90fa25"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(23,310003,'insert','blocks','{"block_hash":"d50825dcb32bcf6f69994d616eba18de7718d3d859497e80751b2cb67e333e8a","block_index":310003,"block_time":310003000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(23,310002,'insert','blocks','{"block_hash":"d50825dcb32bcf6f69994d616eba18de7718d3d859497e80751b2cb67e333e8a","block_index":310003,"block_time":310003000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(24,310003,'insert','transactions','{"block_hash":"d50825dcb32bcf6f69994d616eba18de7718d3d859497e80751b2cb67e333e8a","block_index":310003,"block_time":310003000,"btc_amount":0,"data":"0000001400000003c58e5c5600000000000003e8010000000000000000000e43616c6c61626c65206173736574","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"c26f3a0c4e57e41919ff27aae95a9a9d4d65d34c6da6f1893884a17c8d407140","tx_index":4}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(25,310003,'insert','debits','{"action":"issuance fee","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310003,"event":"c26f3a0c4e57e41919ff27aae95a9a9d4d65d34c6da6f1893884a17c8d407140","quantity":50000000,"tx_index":4}',0,'DEBIT'); INSERT INTO messages VALUES(26,310003,'insert','assets','{"asset_id":"16199343190","asset_longname":null,"asset_name":"CALLABLE","block_index":310003}',0,'ASSET_CREATION'); @@ -995,7 +995,7 @@ INSERT INTO messages VALUES(27,310003,'insert','issuances','{"asset":"CALLABLE", INSERT INTO messages VALUES(28,310003,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"CALLABLE","block_index":310003,"calling_function":"issuance","event":"c26f3a0c4e57e41919ff27aae95a9a9d4d65d34c6da6f1893884a17c8d407140","quantity":1000,"tx_index":4}',0,'CREDIT'); INSERT INTO messages VALUES(29,310003,'parse','transactions','{"supported":true,"tx_hash":"c26f3a0c4e57e41919ff27aae95a9a9d4d65d34c6da6f1893884a17c8d407140","tx_index":4}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(30,310003,'parse','blocks','{"block_index":310003,"ledger_hash":"edcd7e344fb5cca16999f025594890b8b54543555e61eb3807406bb4204677f2","messages_hash":"424e7f569243bc71c70002dce988e93e6b19cfb7f859c2a5195533147d099d87","txlist_hash":"b6dffe5b8c1f483c3c20832d23dddd7b530afe7ac1f3f57f433da59d83b48f06"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(31,310004,'insert','blocks','{"block_hash":"60cdc0ac0e3121ceaa2c3885f21f5789f49992ffef6e6ff99f7da80e36744615","block_index":310004,"block_time":310004000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(31,310003,'insert','blocks','{"block_hash":"60cdc0ac0e3121ceaa2c3885f21f5789f49992ffef6e6ff99f7da80e36744615","block_index":310004,"block_time":310004000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(32,310004,'insert','transactions','{"block_hash":"60cdc0ac0e3121ceaa2c3885f21f5789f49992ffef6e6ff99f7da80e36744615","block_index":310004,"block_time":310004000,"btc_amount":0,"data":"0000001400000000082c82e300000000000003e8010000000000000000000c4c6f636b6564206173736574","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"90b5734be98b0f2a0bd4b6a269c8db3368e2e387bb890ade239951d05423b4da","tx_index":5}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(33,310004,'insert','debits','{"action":"issuance fee","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310004,"event":"90b5734be98b0f2a0bd4b6a269c8db3368e2e387bb890ade239951d05423b4da","quantity":50000000,"tx_index":5}',0,'DEBIT'); INSERT INTO messages VALUES(34,310004,'insert','assets','{"asset_id":"137134819","asset_longname":null,"asset_name":"LOCKED","block_index":310004}',0,'ASSET_CREATION'); @@ -1003,78 +1003,78 @@ INSERT INTO messages VALUES(35,310004,'insert','issuances','{"asset":"LOCKED","a INSERT INTO messages VALUES(36,310004,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"LOCKED","block_index":310004,"calling_function":"issuance","event":"90b5734be98b0f2a0bd4b6a269c8db3368e2e387bb890ade239951d05423b4da","quantity":1000,"tx_index":5}',0,'CREDIT'); INSERT INTO messages VALUES(37,310004,'parse','transactions','{"supported":true,"tx_hash":"90b5734be98b0f2a0bd4b6a269c8db3368e2e387bb890ade239951d05423b4da","tx_index":5}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(38,310004,'parse','blocks','{"block_index":310004,"ledger_hash":"abd71a31bc1f8a072761b23a5bc2976731ebdf305d1d7d33922e93573f308129","messages_hash":"e47e38f99b22b4e486fc05ee95352ec049c4d7e9e4b67082cadc62e928a2a9e7","txlist_hash":"3da72b0c813432f47a3a70887dfd29350d270e9ebaca9875ed6304c91888e387"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(39,310005,'insert','blocks','{"block_hash":"8005c2926b7ecc50376642bc661a49108b6dc62636463a5c492b123e2184cd9a","block_index":310005,"block_time":310005000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(39,310004,'insert','blocks','{"block_hash":"8005c2926b7ecc50376642bc661a49108b6dc62636463a5c492b123e2184cd9a","block_index":310005,"block_time":310005000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(40,310005,'insert','transactions','{"block_hash":"8005c2926b7ecc50376642bc661a49108b6dc62636463a5c492b123e2184cd9a","block_index":310005,"block_time":310005000,"btc_amount":0,"data":"0000001400000000082c82e3000000000000000001000000000000000000044c4f434b","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"344dcc8909ca3a137630726d0071dfd2df4f7c855bac150c7d3a8367835c90bc","tx_index":6}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(41,310005,'insert','debits','{"action":"issuance fee","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310005,"event":"344dcc8909ca3a137630726d0071dfd2df4f7c855bac150c7d3a8367835c90bc","quantity":0,"tx_index":6}',0,'DEBIT'); INSERT INTO messages VALUES(42,310005,'insert','issuances','{"asset":"LOCKED","asset_longname":null,"block_index":310005,"call_date":0,"call_price":0.0,"callable":false,"description":"Locked asset","divisible":true,"fee_paid":0,"issuer":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","locked":true,"quantity":0,"reset":false,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","transfer":false,"tx_hash":"344dcc8909ca3a137630726d0071dfd2df4f7c855bac150c7d3a8367835c90bc","tx_index":6}',0,'ASSET_ISSUANCE'); INSERT INTO messages VALUES(43,310005,'parse','transactions','{"supported":true,"tx_hash":"344dcc8909ca3a137630726d0071dfd2df4f7c855bac150c7d3a8367835c90bc","tx_index":6}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(44,310005,'parse','blocks','{"block_index":310005,"ledger_hash":"0c3914f9676e506a96e6db793f15200ef33087cd47de4d27628849013a391daa","messages_hash":"b5346d07ec8d18e36cbabc930ea2dc452d5fc26b12af0d060f7fb7ff46b8f99d","txlist_hash":"2d59f139907859f9108360f7fa4695101a6b5ef0b7dd0e56c2dd41641e58e9af"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(45,310006,'insert','blocks','{"block_hash":"bdad69d1669eace68b9f246de113161099d4f83322e2acf402c42defef3af2bb","block_index":310006,"block_time":310006000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(45,310005,'insert','blocks','{"block_hash":"bdad69d1669eace68b9f246de113161099d4f83322e2acf402c42defef3af2bb","block_index":310006,"block_time":310006000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(46,310006,'insert','transactions','{"block_hash":"bdad69d1669eace68b9f246de113161099d4f83322e2acf402c42defef3af2bb","block_index":310006,"block_time":310006000,"btc_amount":0,"data":"0000000a00000000000000010000000005f5e100000000a25be34b660000000005f5e10007d00000000000000000","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"4f0433ba841038e2e16328445930dd7bca35309b14b0da4451c8f94c631368b8","tx_index":7}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(47,310006,'insert','debits','{"action":"open order","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310006,"event":"4f0433ba841038e2e16328445930dd7bca35309b14b0da4451c8f94c631368b8","quantity":100000000,"tx_index":7}',0,'DEBIT'); INSERT INTO messages VALUES(48,310006,'insert','orders','{"block_index":310006,"expiration":2000,"expire_index":312006,"fee_provided":6800,"fee_provided_remaining":6800,"fee_required":0,"fee_required_remaining":0,"get_asset":"DIVISIBLE","get_quantity":100000000,"get_remaining":100000000,"give_asset":"XCP","give_quantity":100000000,"give_remaining":100000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"open","tx_hash":"4f0433ba841038e2e16328445930dd7bca35309b14b0da4451c8f94c631368b8","tx_index":7}',0,'OPEN_ORDER'); INSERT INTO messages VALUES(49,310006,'parse','transactions','{"supported":true,"tx_hash":"4f0433ba841038e2e16328445930dd7bca35309b14b0da4451c8f94c631368b8","tx_index":7}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(50,310006,'parse','blocks','{"block_index":310006,"ledger_hash":"57ff5f34a9e418b179db9003414c5f3bdfa7feeb538f24071b23d024a3d05df0","messages_hash":"2490d17814a7fac90af178d960f9e277e98bf005b8d3f076bc7c5d58634fc271","txlist_hash":"a4a6fb433e6c49968fded16954502c472b0d21b74c6cce8d08c8c53c00f2781e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(51,310007,'insert','blocks','{"block_hash":"10a642b96d60091d08234d17dfdecf3025eca41e4fc8e3bbe71a91c5a457cb4b","block_index":310007,"block_time":310007000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(51,310006,'insert','blocks','{"block_hash":"10a642b96d60091d08234d17dfdecf3025eca41e4fc8e3bbe71a91c5a457cb4b","block_index":310007,"block_time":310007000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(52,310007,'insert','transactions','{"block_hash":"10a642b96d60091d08234d17dfdecf3025eca41e4fc8e3bbe71a91c5a457cb4b","block_index":310007,"block_time":310007000,"btc_amount":5430,"data":"00000000000000a25be34b660000000005f5e100","destination":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"6e91ae23de2035e3e28c3322712212333592a1f666bcff9dd91aec45d5ea2753","tx_index":8}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(53,310007,'insert','debits','{"action":"send","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"DIVISIBLE","block_index":310007,"event":"6e91ae23de2035e3e28c3322712212333592a1f666bcff9dd91aec45d5ea2753","quantity":100000000,"tx_index":8}',0,'DEBIT'); INSERT INTO messages VALUES(54,310007,'insert','credits','{"address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","asset":"DIVISIBLE","block_index":310007,"calling_function":"send","event":"6e91ae23de2035e3e28c3322712212333592a1f666bcff9dd91aec45d5ea2753","quantity":100000000,"tx_index":8}',0,'CREDIT'); INSERT INTO messages VALUES(55,310007,'insert','sends','{"asset":"DIVISIBLE","block_index":310007,"destination":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","quantity":100000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"6e91ae23de2035e3e28c3322712212333592a1f666bcff9dd91aec45d5ea2753","tx_index":8}',0,'SEND'); INSERT INTO messages VALUES(56,310007,'parse','transactions','{"supported":true,"tx_hash":"6e91ae23de2035e3e28c3322712212333592a1f666bcff9dd91aec45d5ea2753","tx_index":8}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(57,310007,'parse','blocks','{"block_index":310007,"ledger_hash":"bfed530458339aab02ff75ad76738569dc6997c7a35d4452351678b04e022f68","messages_hash":"8147e6b42edd71153d880649a4b7b75c3e2fc59f122de054ebacf5204abee406","txlist_hash":"ce20264c332892b0a5e0c3e2d4b63d02c901fa2c3f8c5171b2896b50c82ea0af"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(58,310008,'insert','blocks','{"block_hash":"47d0e3acbdc6916aeae95e987f9cfa16209b3df1e67bb38143b3422b32322c33","block_index":310008,"block_time":310008000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(58,310007,'insert','blocks','{"block_hash":"47d0e3acbdc6916aeae95e987f9cfa16209b3df1e67bb38143b3422b32322c33","block_index":310008,"block_time":310008000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(59,310008,'insert','transactions','{"block_hash":"47d0e3acbdc6916aeae95e987f9cfa16209b3df1e67bb38143b3422b32322c33","block_index":310008,"block_time":310008000,"btc_amount":5430,"data":"0000000000000000000000010000000005f5e100","destination":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"4fd55abadfdbe77c3bda2431749cca934a29994a179620a62c1b57f28bd62a43","tx_index":9}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(60,310008,'insert','debits','{"action":"send","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310008,"event":"4fd55abadfdbe77c3bda2431749cca934a29994a179620a62c1b57f28bd62a43","quantity":100000000,"tx_index":9}',0,'DEBIT'); INSERT INTO messages VALUES(61,310008,'insert','credits','{"address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","asset":"XCP","block_index":310008,"calling_function":"send","event":"4fd55abadfdbe77c3bda2431749cca934a29994a179620a62c1b57f28bd62a43","quantity":100000000,"tx_index":9}',0,'CREDIT'); INSERT INTO messages VALUES(62,310008,'insert','sends','{"asset":"XCP","block_index":310008,"destination":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","quantity":100000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"4fd55abadfdbe77c3bda2431749cca934a29994a179620a62c1b57f28bd62a43","tx_index":9}',0,'SEND'); INSERT INTO messages VALUES(63,310008,'parse','transactions','{"supported":true,"tx_hash":"4fd55abadfdbe77c3bda2431749cca934a29994a179620a62c1b57f28bd62a43","tx_index":9}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(64,310008,'parse','blocks','{"block_index":310008,"ledger_hash":"d4feec997754d11a1502e5351ed62fcfbfcafb770e19a37da41d1d88b7b45ed4","messages_hash":"d573b3b22e23c8e7ced1388219033e4b3a1c7711944acfb2926abfdbdd63b44b","txlist_hash":"d25c9f48fbbe2010a62cad729d45b658a2caf9a7c9abc65a30e2a7fc47bc83e5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(65,310009,'insert','blocks','{"block_hash":"4d474992b141620bf3753863db7ee5e8af26cadfbba27725911f44fa657bc1c0","block_index":310009,"block_time":310009000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(65,310008,'insert','blocks','{"block_hash":"4d474992b141620bf3753863db7ee5e8af26cadfbba27725911f44fa657bc1c0","block_index":310009,"block_time":310009000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(66,310009,'insert','transactions','{"block_hash":"4d474992b141620bf3753863db7ee5e8af26cadfbba27725911f44fa657bc1c0","block_index":310009,"block_time":310009000,"btc_amount":0,"data":"0000000a00000000000000010000000005f5e100000000a25be34b660000000005f5e10007d00000000000000000","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"21460d5c07284f9be9baf824927d0d4e4eb790e297f3162305841607b672349b","tx_index":10}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(67,310009,'insert','debits','{"action":"open order","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310009,"event":"21460d5c07284f9be9baf824927d0d4e4eb790e297f3162305841607b672349b","quantity":100000000,"tx_index":10}',0,'DEBIT'); INSERT INTO messages VALUES(68,310009,'insert','orders','{"block_index":310009,"expiration":2000,"expire_index":312009,"fee_provided":6800,"fee_provided_remaining":6800,"fee_required":0,"fee_required_remaining":0,"get_asset":"DIVISIBLE","get_quantity":100000000,"get_remaining":100000000,"give_asset":"XCP","give_quantity":100000000,"give_remaining":100000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"open","tx_hash":"21460d5c07284f9be9baf824927d0d4e4eb790e297f3162305841607b672349b","tx_index":10}',0,'OPEN_ORDER'); INSERT INTO messages VALUES(69,310009,'parse','transactions','{"supported":true,"tx_hash":"21460d5c07284f9be9baf824927d0d4e4eb790e297f3162305841607b672349b","tx_index":10}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(70,310009,'parse','blocks','{"block_index":310009,"ledger_hash":"4ab5ff9e71bbc83956557fb5abec98372fa38e5580838fb258b2d831bfc4d9ea","messages_hash":"54c64b7338e79af0bc6b238eb91692ac0331345cbd6278ef27aa3f6a7351e35e","txlist_hash":"173e769e0b4fa951ef0267c7e218f3a473d9a5857b0880d654a2181f244c92e2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(71,310010,'insert','blocks','{"block_hash":"a58162dff81a32e6a29b075be759dbb9fa9b8b65303e69c78fb4d7b0acc37042","block_index":310010,"block_time":310010000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(71,310009,'insert','blocks','{"block_hash":"a58162dff81a32e6a29b075be759dbb9fa9b8b65303e69c78fb4d7b0acc37042","block_index":310010,"block_time":310010000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(72,310010,'insert','transactions','{"block_hash":"a58162dff81a32e6a29b075be759dbb9fa9b8b65303e69c78fb4d7b0acc37042","block_index":310010,"block_time":310010000,"btc_amount":0,"data":"0000000a00000000000000010000000005f5e100000000000000000000000000000f424007d000000000000dbba0","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"1899b2e6ec36ba4bc9d035e6640b0a62b08c3a147c77c89183a77d9ed9081b3a","tx_index":11}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(73,310010,'insert','debits','{"action":"open order","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310010,"event":"1899b2e6ec36ba4bc9d035e6640b0a62b08c3a147c77c89183a77d9ed9081b3a","quantity":100000000,"tx_index":11}',0,'DEBIT'); INSERT INTO messages VALUES(74,310010,'insert','orders','{"block_index":310010,"expiration":2000,"expire_index":312010,"fee_provided":6800,"fee_provided_remaining":6800,"fee_required":900000,"fee_required_remaining":900000,"get_asset":"BTC","get_quantity":1000000,"get_remaining":1000000,"give_asset":"XCP","give_quantity":100000000,"give_remaining":100000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"open","tx_hash":"1899b2e6ec36ba4bc9d035e6640b0a62b08c3a147c77c89183a77d9ed9081b3a","tx_index":11}',0,'OPEN_ORDER'); INSERT INTO messages VALUES(75,310010,'parse','transactions','{"supported":true,"tx_hash":"1899b2e6ec36ba4bc9d035e6640b0a62b08c3a147c77c89183a77d9ed9081b3a","tx_index":11}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(76,310010,'parse','blocks','{"block_index":310010,"ledger_hash":"1909ef40a24263776cb9e0d52a690048b50728855a0fe4b0e1ba3834a9e401c1","messages_hash":"895d6cc5aa14f7618cc66b2593b43d0223387fd11f1b2b017c9f22140613afcc","txlist_hash":"7d1ef03dad99c4bdf7a8e5af7209a136c8ac392922dd3afdbcc0446ea1f5f604"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(77,310011,'insert','blocks','{"block_hash":"8042cc2ef293fd73d050f283fbd075c79dd4c49fdcca054dc0714fc3a50dc1bb","block_index":310011,"block_time":310011000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(77,310010,'insert','blocks','{"block_hash":"8042cc2ef293fd73d050f283fbd075c79dd4c49fdcca054dc0714fc3a50dc1bb","block_index":310011,"block_time":310011000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(78,310011,'insert','transactions','{"block_hash":"8042cc2ef293fd73d050f283fbd075c79dd4c49fdcca054dc0714fc3a50dc1bb","block_index":310011,"block_time":310011000,"btc_amount":0,"data":"0000000a000000000000000000000000000a2c2b00000000000000010000000005f5e10007d00000000000000000","destination":"","fee":1000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"a1768d7db2db3b9732b26df8c04db4b9a8535a1e5cf684a680e81e7c06f394b6","tx_index":12}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(79,310011,'insert','orders','{"block_index":310011,"expiration":2000,"expire_index":312011,"fee_provided":1000000,"fee_provided_remaining":1000000,"fee_required":0,"fee_required_remaining":0,"get_asset":"XCP","get_quantity":100000000,"get_remaining":100000000,"give_asset":"BTC","give_quantity":666667,"give_remaining":666667,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"open","tx_hash":"a1768d7db2db3b9732b26df8c04db4b9a8535a1e5cf684a680e81e7c06f394b6","tx_index":12}',0,'OPEN_ORDER'); INSERT INTO messages VALUES(80,310011,'parse','transactions','{"supported":true,"tx_hash":"a1768d7db2db3b9732b26df8c04db4b9a8535a1e5cf684a680e81e7c06f394b6","tx_index":12}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(81,310011,'parse','blocks','{"block_index":310011,"ledger_hash":"c3d51a5f2df90c089844ba4de7d5541f6051490aa1389e5945a7bb91d49e3589","messages_hash":"9603465a786c9b927cdf36078b09eed3481d863a390eb52cf617fab895f6be65","txlist_hash":"86ebe5be8b9443f411adcd49e7443a34941979c0c6bf40136a3b44193024abfc"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(82,310012,'insert','blocks','{"block_hash":"cdba329019d93a67b31b79d05f76ce1b7791d430ea0d6c1c2168fe78d2f67677","block_index":310012,"block_time":310012000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(82,310011,'insert','blocks','{"block_hash":"cdba329019d93a67b31b79d05f76ce1b7791d430ea0d6c1c2168fe78d2f67677","block_index":310012,"block_time":310012000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(83,310012,'insert','transactions','{"block_hash":"cdba329019d93a67b31b79d05f76ce1b7791d430ea0d6c1c2168fe78d2f67677","block_index":310012,"block_time":310012000,"btc_amount":1000,"data":"0000000000000000000000010000000011e1a300","destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"698e97e507da8623cf38ab42701853443c8f7fe0d93b4674aabb42f9800ee9d6","tx_index":13}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(84,310012,'insert','debits','{"action":"send","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310012,"event":"698e97e507da8623cf38ab42701853443c8f7fe0d93b4674aabb42f9800ee9d6","quantity":300000000,"tx_index":13}',0,'DEBIT'); INSERT INTO messages VALUES(85,310012,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"XCP","block_index":310012,"calling_function":"send","event":"698e97e507da8623cf38ab42701853443c8f7fe0d93b4674aabb42f9800ee9d6","quantity":300000000,"tx_index":13}',0,'CREDIT'); INSERT INTO messages VALUES(86,310012,'insert','sends','{"asset":"XCP","block_index":310012,"destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","quantity":300000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"698e97e507da8623cf38ab42701853443c8f7fe0d93b4674aabb42f9800ee9d6","tx_index":13}',0,'SEND'); INSERT INTO messages VALUES(87,310012,'parse','transactions','{"supported":true,"tx_hash":"698e97e507da8623cf38ab42701853443c8f7fe0d93b4674aabb42f9800ee9d6","tx_index":13}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(88,310012,'parse','blocks','{"block_index":310012,"ledger_hash":"a9dc31556d38b118eeb0bcbb3a374a0ed79adec4eb23e00c80c0599ba97c9a7a","messages_hash":"f064f5cc3b48464bef3b6aa9b77a01adf3fb99168888a5615a369d1bcf125ec2","txlist_hash":"5a729b250068fe7b175a540b66a30326344514e357023184540ef97bae5e16e7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(89,310013,'insert','blocks','{"block_hash":"0425e5e832e4286757dc0228cd505b8d572081007218abd3a0983a3bcd502a61","block_index":310013,"block_time":310013000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(89,310012,'insert','blocks','{"block_hash":"0425e5e832e4286757dc0228cd505b8d572081007218abd3a0983a3bcd502a61","block_index":310013,"block_time":310013000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(90,310013,'insert','transactions','{"block_hash":"0425e5e832e4286757dc0228cd505b8d572081007218abd3a0983a3bcd502a61","block_index":310013,"block_time":310013000,"btc_amount":1000,"data":"00000000000000a25be34b66000000003b9aca00","destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"0cfeeb559ed794d067557df0376a6c213b48b174b80cdb2c3c6d365cf538e132","tx_index":14}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(91,310013,'insert','debits','{"action":"send","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"DIVISIBLE","block_index":310013,"event":"0cfeeb559ed794d067557df0376a6c213b48b174b80cdb2c3c6d365cf538e132","quantity":1000000000,"tx_index":14}',0,'DEBIT'); INSERT INTO messages VALUES(92,310013,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"DIVISIBLE","block_index":310013,"calling_function":"send","event":"0cfeeb559ed794d067557df0376a6c213b48b174b80cdb2c3c6d365cf538e132","quantity":1000000000,"tx_index":14}',0,'CREDIT'); INSERT INTO messages VALUES(93,310013,'insert','sends','{"asset":"DIVISIBLE","block_index":310013,"destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","quantity":1000000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"0cfeeb559ed794d067557df0376a6c213b48b174b80cdb2c3c6d365cf538e132","tx_index":14}',0,'SEND'); INSERT INTO messages VALUES(94,310013,'parse','transactions','{"supported":true,"tx_hash":"0cfeeb559ed794d067557df0376a6c213b48b174b80cdb2c3c6d365cf538e132","tx_index":14}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(95,310013,'parse','blocks','{"block_index":310013,"ledger_hash":"e72be5070d0a5853631d902d334e8b88eddf6e79616373311babc4a0a27dd3d8","messages_hash":"9c164d38483ae1923ddc825d301d86d8a71548f2a1edcfad8311e4111cc3e34a","txlist_hash":"1294e3d0871b0c2297d9980ed46bfa3563b33b202b426949dadeeba7075b4bc7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(96,310014,'insert','blocks','{"block_hash":"85b28d413ebda2968ed82ae53643677338650151b997ed1e4656158005b9f65f","block_index":310014,"block_time":310014000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(96,310013,'insert','blocks','{"block_hash":"85b28d413ebda2968ed82ae53643677338650151b997ed1e4656158005b9f65f","block_index":310014,"block_time":310014000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(97,310014,'insert','transactions','{"block_hash":"85b28d413ebda2968ed82ae53643677338650151b997ed1e4656158005b9f65f","block_index":310014,"block_time":310014000,"btc_amount":5430,"data":"000000000006cad8dc7f0b660000000000000005","destination":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a","tx_index":15}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(98,310014,'insert','debits','{"action":"send","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"NODIVISIBLE","block_index":310014,"event":"1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a","quantity":5,"tx_index":15}',0,'DEBIT'); INSERT INTO messages VALUES(99,310014,'insert','credits','{"address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","asset":"NODIVISIBLE","block_index":310014,"calling_function":"send","event":"1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a","quantity":5,"tx_index":15}',0,'CREDIT'); INSERT INTO messages VALUES(100,310014,'insert','sends','{"asset":"NODIVISIBLE","block_index":310014,"destination":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","quantity":5,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a","tx_index":15}',0,'SEND'); INSERT INTO messages VALUES(101,310014,'parse','transactions','{"supported":true,"tx_hash":"1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a","tx_index":15}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(102,310014,'parse','blocks','{"block_index":310014,"ledger_hash":"cb0962222af917dbac2a11465c22cd80770c0b3cdb8bdc0870c99a8116745c9e","messages_hash":"81a62b796cd9dbf6eaecf4053b5896e384cf08135dd7aef545c48feadfbd6936","txlist_hash":"d5431af170b331497d8967969820632880473d06dae0d06fa7ffc93a0cb90180"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(103,310015,'insert','blocks','{"block_hash":"4cf77d688f18f0c68c077db882f62e49f31859dfa6144372457cd73b29223922","block_index":310015,"block_time":310015000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(103,310014,'insert','blocks','{"block_hash":"4cf77d688f18f0c68c077db882f62e49f31859dfa6144372457cd73b29223922","block_index":310015,"block_time":310015000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(104,310015,'insert','transactions','{"block_hash":"4cf77d688f18f0c68c077db882f62e49f31859dfa6144372457cd73b29223922","block_index":310015,"block_time":310015000,"btc_amount":1000,"data":"000000000006cad8dc7f0b66000000000000000a","destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c","tx_index":16}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(105,310015,'insert','debits','{"action":"send","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"NODIVISIBLE","block_index":310015,"event":"e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c","quantity":10,"tx_index":16}',0,'DEBIT'); INSERT INTO messages VALUES(106,310015,'insert','credits','{"address":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","asset":"NODIVISIBLE","block_index":310015,"calling_function":"send","event":"e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c","quantity":10,"tx_index":16}',0,'CREDIT'); INSERT INTO messages VALUES(107,310015,'insert','sends','{"asset":"NODIVISIBLE","block_index":310015,"destination":"1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2","quantity":10,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c","tx_index":16}',0,'SEND'); INSERT INTO messages VALUES(108,310015,'parse','transactions','{"supported":true,"tx_hash":"e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c","tx_index":16}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(109,310015,'parse','blocks','{"block_index":310015,"ledger_hash":"6ff899433f22546c41a15f20b4c66913c747931500fee10d58c4a17b9e2f0c88","messages_hash":"ea46fd7c1ff0ff2b73dc503b3ba507ab43442ffac120f56b5fd0803d27db4b9c","txlist_hash":"b77c1d69b3ac7348e336cce9948f982efafa1cb56cbdde85fe9f49a73871ba3b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(110,310016,'insert','blocks','{"block_hash":"99dc7d2627efb4e5e618a53b9898b4ca39c70e98fe9bf39f68a6c980f5b64ef9","block_index":310016,"block_time":310016000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(110,310015,'insert','blocks','{"block_hash":"99dc7d2627efb4e5e618a53b9898b4ca39c70e98fe9bf39f68a6c980f5b64ef9","block_index":310016,"block_time":310016000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(111,310016,'insert','transactions','{"block_hash":"99dc7d2627efb4e5e618a53b9898b4ca39c70e98fe9bf39f68a6c980f5b64ef9","block_index":310016,"block_time":310016000,"btc_amount":0,"data":"000000140000000000033a3e7fffffffffffffff01000000000000000000104d6178696d756d207175616e74697479","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"bd4e9cbbe69c2db893cd32182a2d315c89c45ba4e31aa5775d1fe42d841cea39","tx_index":17}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(112,310016,'insert','debits','{"action":"issuance fee","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310016,"event":"bd4e9cbbe69c2db893cd32182a2d315c89c45ba4e31aa5775d1fe42d841cea39","quantity":50000000,"tx_index":17}',0,'DEBIT'); INSERT INTO messages VALUES(113,310016,'insert','assets','{"asset_id":"211518","asset_longname":null,"asset_name":"MAXI","block_index":310016}',0,'ASSET_CREATION'); @@ -1082,23 +1082,23 @@ INSERT INTO messages VALUES(114,310016,'insert','issuances','{"asset":"MAXI","as INSERT INTO messages VALUES(115,310016,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"MAXI","block_index":310016,"calling_function":"issuance","event":"bd4e9cbbe69c2db893cd32182a2d315c89c45ba4e31aa5775d1fe42d841cea39","quantity":9223372036854775807,"tx_index":17}',0,'CREDIT'); INSERT INTO messages VALUES(116,310016,'parse','transactions','{"supported":true,"tx_hash":"bd4e9cbbe69c2db893cd32182a2d315c89c45ba4e31aa5775d1fe42d841cea39","tx_index":17}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(117,310016,'parse','blocks','{"block_index":310016,"ledger_hash":"ec66a06cde401b66917c6d1d4e1ee8893405cfbf0474560d9997d6960c8af710","messages_hash":"32d216ca6a80cb867f8963ab1ddde2bd07a969e095d67c80aecd0950a01a6218","txlist_hash":"6d3d469ad1b72a67ee50d8a7c6c57069da3a0e2e9d12a23a30bbf4f2ccc64cb6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(118,310017,'insert','blocks','{"block_hash":"8a4fedfbf734b91a5c5761a7bcb3908ea57169777a7018148c51ff611970e4a3","block_index":310017,"block_time":310017000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(118,310016,'insert','blocks','{"block_hash":"8a4fedfbf734b91a5c5761a7bcb3908ea57169777a7018148c51ff611970e4a3","block_index":310017,"block_time":310017000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(119,310017,'insert','transactions','{"block_hash":"8a4fedfbf734b91a5c5761a7bcb3908ea57169777a7018148c51ff611970e4a3","block_index":310017,"block_time":310017000,"btc_amount":0,"data":"0000001e52bb33003ff0000000000000004c4b4009556e69742054657374","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"d14388b74b63d93e4477b1fe8426028bb8ab20656703e3ce8deeb23c2fe0b8af","tx_index":18}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(120,310017,'insert','broadcasts','{"block_index":310017,"fee_fraction_int":5000000,"locked":false,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","text":"Unit Test","timestamp":1388000000,"tx_hash":"d14388b74b63d93e4477b1fe8426028bb8ab20656703e3ce8deeb23c2fe0b8af","tx_index":18,"value":1.0}',0,'BROADCAST'); INSERT INTO messages VALUES(121,310017,'parse','transactions','{"supported":true,"tx_hash":"d14388b74b63d93e4477b1fe8426028bb8ab20656703e3ce8deeb23c2fe0b8af","tx_index":18}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(122,310017,'parse','blocks','{"block_index":310017,"ledger_hash":"b2053109bff06dae1705fc32ab0712f38bf9d206fa3517fbf0a938d1b5f33bad","messages_hash":"720dfe78fccdb0831b951f79905c945a3c7abb6f13c3e258e7c3b8b7ddbfae36","txlist_hash":"223e10a8e23e4435e635f1dda533a0662dff9f0e3fb86b72a22b2c191f731a80"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(123,310018,'insert','blocks','{"block_hash":"35c06f9e3de39e4e56ceb1d1a22008f52361c50dd0d251c0acbe2e3c2dba8ed3","block_index":310018,"block_time":310018000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(123,310017,'insert','blocks','{"block_hash":"35c06f9e3de39e4e56ceb1d1a22008f52361c50dd0d251c0acbe2e3c2dba8ed3","block_index":310018,"block_time":310018000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(124,310018,'insert','transactions','{"block_hash":"35c06f9e3de39e4e56ceb1d1a22008f52361c50dd0d251c0acbe2e3c2dba8ed3","block_index":310018,"block_time":310018000,"btc_amount":0,"data":"0000001e4cc552003ff000000000000000000000046c6f636b","destination":"","fee":6800,"source":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","supported":true,"tx_hash":"f9e0527c85a9084d7eda91fc30a49993370d029efea031a8ccccdf846146a660","tx_index":19}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(125,310018,'insert','broadcasts','{"block_index":310018,"fee_fraction_int":null,"locked":true,"source":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","status":"valid","text":null,"timestamp":0,"tx_hash":"f9e0527c85a9084d7eda91fc30a49993370d029efea031a8ccccdf846146a660","tx_index":19,"value":null}',0,'BROADCAST'); INSERT INTO messages VALUES(126,310018,'parse','transactions','{"supported":true,"tx_hash":"f9e0527c85a9084d7eda91fc30a49993370d029efea031a8ccccdf846146a660","tx_index":19}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(127,310018,'parse','blocks','{"block_index":310018,"ledger_hash":"d7051de4d03fb31bfedf215b407b1edc12789c1f2748abb5a72257ad8f5113ce","messages_hash":"260724f92886f32a80da2705559eda171d2bd55724a534c72740e05b348c1874","txlist_hash":"9eb6f4683bebb675467829573cd2f7e3ab613d21398c5aef31ed389a40f3c48d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(128,310019,'insert','blocks','{"block_hash":"114affa0c4f34b1ebf8e2778c9477641f60b5b9e8a69052158041d4c41893294","block_index":310019,"block_time":310019000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(128,310018,'insert','blocks','{"block_hash":"114affa0c4f34b1ebf8e2778c9477641f60b5b9e8a69052158041d4c41893294","block_index":310019,"block_time":310019000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(129,310019,'insert','transactions','{"block_hash":"114affa0c4f34b1ebf8e2778c9477641f60b5b9e8a69052158041d4c41893294","block_index":310019,"block_time":310019000,"btc_amount":5430,"data":"00000028000152bb3301000000000000000900000000000000090000000000000000000013b000000064","destination":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"2a2169991597036b6dad687ea1feffd55465a204466f40c35cbba811cb3109b1","tx_index":20}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(130,310019,'insert','debits','{"action":"bet","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310019,"event":"2a2169991597036b6dad687ea1feffd55465a204466f40c35cbba811cb3109b1","quantity":9,"tx_index":20}',0,'DEBIT'); INSERT INTO messages VALUES(131,310019,'insert','bets','{"bet_type":1,"block_index":310019,"counterwager_quantity":9,"counterwager_remaining":9,"deadline":1388000001,"expiration":100,"expire_index":310119,"fee_fraction_int":5000000.0,"feed_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","leverage":5040,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"open","target_value":0.0,"tx_hash":"2a2169991597036b6dad687ea1feffd55465a204466f40c35cbba811cb3109b1","tx_index":20,"wager_quantity":9,"wager_remaining":9}',0,'OPEN_BET'); INSERT INTO messages VALUES(132,310019,'parse','transactions','{"supported":true,"tx_hash":"2a2169991597036b6dad687ea1feffd55465a204466f40c35cbba811cb3109b1","tx_index":20}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(133,310019,'parse','blocks','{"block_index":310019,"ledger_hash":"35c95a70193ded2f9ee18254a91ce5d4834bb162fc3cca85dd432339257539b8","messages_hash":"10830661175f7d2bf48585647709d277e5a895b536f58f83672c14d5026992e8","txlist_hash":"88220e5f48660f8b9e339c3afb65ffbad83d632164f1df8e22af2ee6fc18826e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(134,310020,'insert','blocks','{"block_hash":"d93c79920e4a42164af74ecb5c6b903ff6055cdc007376c74dfa692c8d85ebc9","block_index":310020,"block_time":310020000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(134,310019,'insert','blocks','{"block_hash":"d93c79920e4a42164af74ecb5c6b903ff6055cdc007376c74dfa692c8d85ebc9","block_index":310020,"block_time":310020000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(135,310020,'insert','transactions','{"block_hash":"d93c79920e4a42164af74ecb5c6b903ff6055cdc007376c74dfa692c8d85ebc9","block_index":310020,"block_time":310020000,"btc_amount":5430,"data":"00000028000052bb3301000000000000000900000000000000090000000000000000000013b000000064","destination":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","fee":7650,"source":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","supported":true,"tx_hash":"5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93","tx_index":21}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(136,310020,'insert','debits','{"action":"bet","address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","asset":"XCP","block_index":310020,"event":"5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93","quantity":9,"tx_index":21}',0,'DEBIT'); INSERT INTO messages VALUES(137,310020,'insert','bets','{"bet_type":0,"block_index":310020,"counterwager_quantity":9,"counterwager_remaining":9,"deadline":1388000001,"expiration":100,"expire_index":310120,"fee_fraction_int":5000000.0,"feed_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","leverage":5040,"source":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","status":"open","target_value":0.0,"tx_hash":"5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93","tx_index":21,"wager_quantity":9,"wager_remaining":9}',0,'OPEN_BET'); @@ -1106,176 +1106,176 @@ INSERT INTO messages VALUES(138,310020,'insert','credits','{"address":"mn6q3dS2E INSERT INTO messages VALUES(139,310020,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"2a2169991597036b6dad687ea1feffd55465a204466f40c35cbba811cb3109b1","wager_remaining":0}',0,'BET_UPDATE'); INSERT INTO messages VALUES(140,310020,'insert','credits','{"address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","asset":"XCP","block_index":310020,"calling_function":"filled","event":"5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93","quantity":0,"tx_index":21}',0,'CREDIT'); INSERT INTO messages VALUES(141,310020,'update','bets','{"counterwager_remaining":0,"status":"filled","tx_hash":"5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93","wager_remaining":0}',0,'BET_UPDATE'); -INSERT INTO messages VALUES(142,310019,'insert','bet_matches','{"backward_quantity":9,"block_index":310019,"deadline":1388000001,"fee_fraction_int":5000000,"feed_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","forward_quantity":9,"id":"2a2169991597036b6dad687ea1feffd55465a204466f40c35cbba811cb3109b1_5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93","initial_value":1.0,"leverage":5040,"match_expire_index":310119,"status":"pending","target_value":0.0,"tx0_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","tx0_bet_type":1,"tx0_block_index":310019,"tx0_expiration":100,"tx0_hash":"2a2169991597036b6dad687ea1feffd55465a204466f40c35cbba811cb3109b1","tx0_index":20,"tx1_address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","tx1_bet_type":0,"tx1_block_index":310020,"tx1_expiration":100,"tx1_hash":"5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93","tx1_index":21}',0,'BET_MATCH'); +INSERT INTO messages VALUES(142,310020,'insert','bet_matches','{"backward_quantity":9,"block_index":310019,"deadline":1388000001,"fee_fraction_int":5000000,"feed_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","forward_quantity":9,"id":"2a2169991597036b6dad687ea1feffd55465a204466f40c35cbba811cb3109b1_5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93","initial_value":1.0,"leverage":5040,"match_expire_index":310119,"status":"pending","target_value":0.0,"tx0_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","tx0_bet_type":1,"tx0_block_index":310019,"tx0_expiration":100,"tx0_hash":"2a2169991597036b6dad687ea1feffd55465a204466f40c35cbba811cb3109b1","tx0_index":20,"tx1_address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","tx1_bet_type":0,"tx1_block_index":310020,"tx1_expiration":100,"tx1_hash":"5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93","tx1_index":21}',0,'BET_MATCH'); INSERT INTO messages VALUES(143,310020,'parse','transactions','{"supported":true,"tx_hash":"5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93","tx_index":21}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(144,310020,'parse','blocks','{"block_index":310020,"ledger_hash":"8315de64ee1051c333687ba9fae6244287b85bcc1e3a4b67f3fe7d51b931378b","messages_hash":"dd333107fc51c883a23785c8e2176bc01fc1bf8d52ff8d37ee925e9991b03a7a","txlist_hash":"087de9b1715dfdac7372489fc615b597c9575c9520eb1ad5f7435a2641388621"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(145,310021,'insert','blocks','{"block_hash":"7c2460bb32c5749c856486393239bf7a0ac789587ac71f32e7237910da8097f2","block_index":310021,"block_time":310021000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(145,310020,'insert','blocks','{"block_hash":"7c2460bb32c5749c856486393239bf7a0ac789587ac71f32e7237910da8097f2","block_index":310021,"block_time":310021000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(146,310021,'parse','blocks','{"block_index":310021,"ledger_hash":"c2d646bd3f54eec73cd9da6f5da4bc159d0c64e8fb9ad4095dfa58850e65c7b1","messages_hash":"45bb0c5dd432a2d7313fbf6185637260877da537b18334604280a29539e73205","txlist_hash":"e5f36761a4755ebc133389b9bc01a085c585a24fa346c784123f3dd5a125ad27"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(147,310022,'insert','blocks','{"block_hash":"44435f9a99a0aa12a9bfabdc4cb8119f6ea6a6e1350d2d65445fb66a456db5fc","block_index":310022,"block_time":310022000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(147,310021,'insert','blocks','{"block_hash":"44435f9a99a0aa12a9bfabdc4cb8119f6ea6a6e1350d2d65445fb66a456db5fc","block_index":310022,"block_time":310022000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(148,310022,'parse','blocks','{"block_index":310022,"ledger_hash":"619367fb7657e0fb4800acd385eb5593d085ce5cbfbfb098dafa98612d9fd445","messages_hash":"0b5b6279634c98137b3ebd37b0e31af63b183c0f8ae6942df3aec9e0b6ef725f","txlist_hash":"e62992a5e4f80347f92c512e1bd47df4c2f4e9fa0c38b7ca73befd39fd181d54"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(149,310023,'insert','blocks','{"block_hash":"d8cf5bec1bbcab8ca4f495352afde3b6572b7e1d61b3976872ebb8e9d30ccb08","block_index":310023,"block_time":310023000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(149,310022,'insert','blocks','{"block_hash":"d8cf5bec1bbcab8ca4f495352afde3b6572b7e1d61b3976872ebb8e9d30ccb08","block_index":310023,"block_time":310023000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(150,310023,'parse','blocks','{"block_index":310023,"ledger_hash":"ba865dbc8263aaf153d7264dfc6a580bebe9391ca0551f15a1c822c6cbe2b8de","messages_hash":"41612e674a216f80e46263c28770962c5cacf632df3151fee409c0f9eef3a498","txlist_hash":"e62acd9368da6141ddf435bd919fe0e124bd77646207d69a2544790107ab88a5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(151,310024,'insert','blocks','{"block_hash":"b03042b4e18a222b4c8d1e9e1970d93e6e2a2d41686d227ff8ecf0a839223dc5","block_index":310024,"block_time":310024000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(151,310023,'insert','blocks','{"block_hash":"b03042b4e18a222b4c8d1e9e1970d93e6e2a2d41686d227ff8ecf0a839223dc5","block_index":310024,"block_time":310024000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(152,310024,'parse','blocks','{"block_index":310024,"ledger_hash":"368e948cbf42de80aca51abe75d09ec78196924453719182ccc86419df5da2db","messages_hash":"5cc0e229526c00f288c81848c45d12cc6a24fc0ba84e8d78041d84b8e28fbf88","txlist_hash":"2c65dfdc0d371025c6d497e087b8548633238d6049242fa411383fcce72b096e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(153,310025,'insert','blocks','{"block_hash":"a872e560766832cc3b4f7f222228cb6db882ce3c54f6459f62c71d5cd6e90666","block_index":310025,"block_time":310025000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(153,310024,'insert','blocks','{"block_hash":"a872e560766832cc3b4f7f222228cb6db882ce3c54f6459f62c71d5cd6e90666","block_index":310025,"block_time":310025000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(154,310025,'parse','blocks','{"block_index":310025,"ledger_hash":"9f7132c808936f580d4fb1dc5791541a5a3d23532d1093c20d434007f8dde54c","messages_hash":"cc0a82636125f077fd262e62ce5e60bd457154376ba685a771a4b92388324420","txlist_hash":"ca60850f73099aabc38d1521a94d611cc02f4539620a17488d1e9a445087104f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(155,310026,'insert','blocks','{"block_hash":"6c96350f6f2f05810f19a689de235eff975338587194a36a70dfd0fcd490941a","block_index":310026,"block_time":310026000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(155,310025,'insert','blocks','{"block_hash":"6c96350f6f2f05810f19a689de235eff975338587194a36a70dfd0fcd490941a","block_index":310026,"block_time":310026000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(156,310026,'parse','blocks','{"block_index":310026,"ledger_hash":"074ea6f10a5290cff31f7b21483f7b2248723c8d1b5bc060c31219f66f37def7","messages_hash":"33266041a43b151330c149d5536ca098c595054d54d88c2a06bfb257f64c4c06","txlist_hash":"21db77ad7cd241752184fa9fd61ab9cf670cd40105d7d9b887d8df62f25e5cfc"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(157,310027,'insert','blocks','{"block_hash":"d7acfac66df393c4482a14c189742c0571b89442eb7f817b34415a560445699e","block_index":310027,"block_time":310027000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(157,310026,'insert','blocks','{"block_hash":"d7acfac66df393c4482a14c189742c0571b89442eb7f817b34415a560445699e","block_index":310027,"block_time":310027000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(158,310027,'parse','blocks','{"block_index":310027,"ledger_hash":"a3ade2b2e5bc701996f511f3e85d596b60f882a3254fd975769c0f38b3b14cb3","messages_hash":"df932138bd7a19f61e98148cbc5ef645be2d4e05674258fb5f1659bc0be276ca","txlist_hash":"9469f4c4b4f208f2a46569234006846d18ae108ca6a98600ab70bac1ef1ad633"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(159,310028,'insert','blocks','{"block_hash":"02409fcf8fa06dafcb7f11e38593181d9c42cc9d5e2ddc304d098f990bd9530b","block_index":310028,"block_time":310028000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(159,310027,'insert','blocks','{"block_hash":"02409fcf8fa06dafcb7f11e38593181d9c42cc9d5e2ddc304d098f990bd9530b","block_index":310028,"block_time":310028000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(160,310028,'parse','blocks','{"block_index":310028,"ledger_hash":"3bf124a34825b5c487c94dd79b1ea4f25e657294966879f1c10b56b37a3d29b5","messages_hash":"647074e7d5c71b584b7661d02f6f5cac0ea9a0a9fd13ae78d4d2bf4c76793d2d","txlist_hash":"55de4927d0ba81d336f143b08224af9fe9a862bf0ed4d39fbe242e9c5946bcf4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(161,310029,'insert','blocks','{"block_hash":"3c739fa8b40c118d5547ea356ee8d10ee2898871907643ec02e5db9d00f03cc6","block_index":310029,"block_time":310029000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(161,310028,'insert','blocks','{"block_hash":"3c739fa8b40c118d5547ea356ee8d10ee2898871907643ec02e5db9d00f03cc6","block_index":310029,"block_time":310029000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(162,310029,'parse','blocks','{"block_index":310029,"ledger_hash":"e502eb7b282e0bd4940d8f75ef51d677a641f3d55304adcb015bc249c97892bf","messages_hash":"bfe4c7d60e0cca63ba44a61e12c48e2d840faf4a0aa92ba197a9d4fb17f7ddcc","txlist_hash":"3d879f96d783e70a75f71c2b44ae4c5601bc8f1192b828f1b35400b8c99aa0f2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(163,310030,'insert','blocks','{"block_hash":"d5071cddedf89765ee0fd58f209c1c7d669ba8ea66200a57587da8b189b9e4f5","block_index":310030,"block_time":310030000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(163,310029,'insert','blocks','{"block_hash":"d5071cddedf89765ee0fd58f209c1c7d669ba8ea66200a57587da8b189b9e4f5","block_index":310030,"block_time":310030000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(164,310030,'parse','blocks','{"block_index":310030,"ledger_hash":"d64b5eb04ddfb5600be40142b1fd27c308387a35942a6e8a6916407bbc1313b1","messages_hash":"96e13c2a5517d1740fdd2dd5c805a13a37104bc0470eebf6ab1ee5f6edc49343","txlist_hash":"c859356c985f3c051d5b01424759e66e9ec7c2eac055eb9fc2b0ad7323253a6a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(165,310031,'insert','blocks','{"block_hash":"0b02b10f41380fff27c543ea8891ecb845bf7a003ac5c87e15932aff3bfcf689","block_index":310031,"block_time":310031000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(165,310030,'insert','blocks','{"block_hash":"0b02b10f41380fff27c543ea8891ecb845bf7a003ac5c87e15932aff3bfcf689","block_index":310031,"block_time":310031000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(166,310031,'parse','blocks','{"block_index":310031,"ledger_hash":"e9c97dd7adb1b22d4ed0238607faeb2d14c090fbd7d685275ee802ab23b4b740","messages_hash":"92abe74beca9968adb2f2952a4eb710fefe4df33f4cf2ea0319a0d36c93b8bec","txlist_hash":"4cdafec839c7abdda11f10437d890c952b3416929ff6e715f44e8c57412437af"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(167,310032,'insert','blocks','{"block_hash":"66346be81e6ba04544f2ae643b76c2b7b1383f038fc2636e02e49dc7ec144074","block_index":310032,"block_time":310032000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(167,310031,'insert','blocks','{"block_hash":"66346be81e6ba04544f2ae643b76c2b7b1383f038fc2636e02e49dc7ec144074","block_index":310032,"block_time":310032000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(168,310032,'parse','blocks','{"block_index":310032,"ledger_hash":"2544ffced9af1aabd84ab51fb78c56c9beac03dcb286aebd4202938dfa0754ea","messages_hash":"49f3542309f554440ef13516ddc8e88ae079b92a2c7c8eb97765a6ed6ac6cd10","txlist_hash":"2fc6c250a775ac70976d371540df4a7af608ca1b106b7efb7bc5a820ff505bdb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(169,310033,'insert','blocks','{"block_hash":"999c65df9661f73e8c01f1da1afda09ac16788b72834f0ff5ea3d1464afb4707","block_index":310033,"block_time":310033000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(169,310032,'insert','blocks','{"block_hash":"999c65df9661f73e8c01f1da1afda09ac16788b72834f0ff5ea3d1464afb4707","block_index":310033,"block_time":310033000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(170,310033,'parse','blocks','{"block_index":310033,"ledger_hash":"4355d3ebb95187fec36b1847a4c3777d8e1d5541bd1d9ff8461b8ac5b9881261","messages_hash":"ceb14a6637c8a5764c7f33049973a6101daa056d265b46c248c3b8363c919c6c","txlist_hash":"d99b155e06fb50de6e7e6b646c641e3862d3d6df0ab9aec3e360fba0fcb54776"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(171,310034,'insert','blocks','{"block_hash":"f552edd2e0a648230f3668e72ddf0ddfb1e8ac0f4c190f91b89c1a8c2e357208","block_index":310034,"block_time":310034000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(171,310033,'insert','blocks','{"block_hash":"f552edd2e0a648230f3668e72ddf0ddfb1e8ac0f4c190f91b89c1a8c2e357208","block_index":310034,"block_time":310034000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(172,310034,'parse','blocks','{"block_index":310034,"ledger_hash":"c7fcb5134bd8131c035d65b5eeef8a3cd214348822563232a992f3f703c6b0b9","messages_hash":"4ca5dd8e74223684d3d8c28a79b4e872787788fcae088ab3e3066788ffca65af","txlist_hash":"826d7b750bb4ad8fabd67c825c81f840b7a7a264489a9263410a5cb204d3309f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(173,310035,'insert','blocks','{"block_hash":"a13cbb016f3044207a46967a4ba1c87dab411f78c55c1179f2336653c2726ae2","block_index":310035,"block_time":310035000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(173,310034,'insert','blocks','{"block_hash":"a13cbb016f3044207a46967a4ba1c87dab411f78c55c1179f2336653c2726ae2","block_index":310035,"block_time":310035000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(174,310035,'parse','blocks','{"block_index":310035,"ledger_hash":"c41c280498ce05d6073fc6e89be2684dc68c345c1c43c00b9a3f9041954fce26","messages_hash":"b500c7812d872ff80b668ed88d7a8898df99b0a2ef8d4ba16b85597fa3e1cd0e","txlist_hash":"f96598e2169d42d81b91ba03e7403dbd25a61399290f358022a998e4375fe2b9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(175,310036,'insert','blocks','{"block_hash":"158648a98f1e1bd1875584ce8449eb15a4e91a99a923bbb24c4210135cef0c76","block_index":310036,"block_time":310036000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(175,310035,'insert','blocks','{"block_hash":"158648a98f1e1bd1875584ce8449eb15a4e91a99a923bbb24c4210135cef0c76","block_index":310036,"block_time":310036000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(176,310036,'parse','blocks','{"block_index":310036,"ledger_hash":"86c67fd234ca9d2406080018b2677386990fac477db8008c0092d40a398203ed","messages_hash":"1c2819e818ad5ef4ef1d5eb2b9e7630930a559a1cffa880ad0d34fc482b4063d","txlist_hash":"ae7fdf3e9388811e96d470070db9ac45b5b19754bb4ad424aade40fede3c9cf9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(177,310037,'insert','blocks','{"block_hash":"563acfd6d991ce256d5655de2e9429975c8dceeb221e76d5ec6e9e24a2c27c07","block_index":310037,"block_time":310037000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(177,310036,'insert','blocks','{"block_hash":"563acfd6d991ce256d5655de2e9429975c8dceeb221e76d5ec6e9e24a2c27c07","block_index":310037,"block_time":310037000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(178,310037,'parse','blocks','{"block_index":310037,"ledger_hash":"3ae6272437eb0758a779d68785c41e119d1204dd5421c78e03b9d12eba64804b","messages_hash":"b39a9f69fbe9c498602609f3c6bf9bb18e6b97f83519c743afbc14e99d9cb95a","txlist_hash":"aa9600ce32fd7c1d6e963a51648eaae043685d3369413785517172d1f94d551b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(179,310038,'insert','blocks','{"block_hash":"b44b4cad12431c32df27940e18d51f63897c7472b70950d18454edfd640490b2","block_index":310038,"block_time":310038000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(179,310037,'insert','blocks','{"block_hash":"b44b4cad12431c32df27940e18d51f63897c7472b70950d18454edfd640490b2","block_index":310038,"block_time":310038000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(180,310038,'parse','blocks','{"block_index":310038,"ledger_hash":"18f7552567b898f6c2cfe8c829903912445de5dbf05b56a13bf9b402a24fdc11","messages_hash":"49205a5e8db239c4c785868b103864f8727376c7188a58544537cdb035ce153f","txlist_hash":"46ce886f050bf7a80355da9cb15b35f5d38809ef2ec1a25250f057b63f51cdfc"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(181,310039,'insert','blocks','{"block_hash":"5fa1ae9c5e8a599247458987b006ad3a57f686df1f7cc240bf119e911b56c347","block_index":310039,"block_time":310039000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(181,310038,'insert','blocks','{"block_hash":"5fa1ae9c5e8a599247458987b006ad3a57f686df1f7cc240bf119e911b56c347","block_index":310039,"block_time":310039000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(182,310039,'parse','blocks','{"block_index":310039,"ledger_hash":"85f2255f9256a5faf59ddec1c58b1d3bc12c91bc2c62ead61b48e1f94ea2888d","messages_hash":"b4d3737b40df8aecdb8f755b92db906b8f215641fd79326bb4700d1f662b2f36","txlist_hash":"23a26edddf0c8662b055ed992c75c706221b59ce9a7aa45b757a3d5158772e8c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(183,310040,'insert','blocks','{"block_hash":"7200ded406675453eadddfbb2d14c2a4526c7dc2b5de14bd48b29243df5e1aa3","block_index":310040,"block_time":310040000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(183,310039,'insert','blocks','{"block_hash":"7200ded406675453eadddfbb2d14c2a4526c7dc2b5de14bd48b29243df5e1aa3","block_index":310040,"block_time":310040000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(184,310040,'parse','blocks','{"block_index":310040,"ledger_hash":"b799477db184351df5503f8d15d5461a0483ea35142c003b7e640429663ad943","messages_hash":"d5348f656d30e6e4b55706ba5a4a6dfdf262d8ed36d57c5f2fc71f8766d72af6","txlist_hash":"163682e05a9a10f3e3240420c932a7f3f2172484de30dbcac0319ac23a4726f1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(185,310041,'insert','blocks','{"block_hash":"5db592ff9ba5fac1e030cf22d6c13b70d330ba397f415340086ee7357143b359","block_index":310041,"block_time":310041000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(185,310040,'insert','blocks','{"block_hash":"5db592ff9ba5fac1e030cf22d6c13b70d330ba397f415340086ee7357143b359","block_index":310041,"block_time":310041000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(186,310041,'parse','blocks','{"block_index":310041,"ledger_hash":"efa9cd46741b59e74263d6d348584f1a61e8ba32163c09fc3ff2e41a5431a483","messages_hash":"440373118703e7f53afd682abe5514d489a78722a600c1067430e7fec5f5fab0","txlist_hash":"a159868ce28207aa243e7ecc50f188e8e34e5ddb5d801b645b1c16a596e060ed"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(187,310042,'insert','blocks','{"block_hash":"826fd4701ef2824e9559b069517cd3cb990aff6a4690830f78fc845ab77fa3e4","block_index":310042,"block_time":310042000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(187,310041,'insert','blocks','{"block_hash":"826fd4701ef2824e9559b069517cd3cb990aff6a4690830f78fc845ab77fa3e4","block_index":310042,"block_time":310042000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(188,310042,'parse','blocks','{"block_index":310042,"ledger_hash":"f3159919f381d46a3e1341703e55192a02a36519e71fc2675285a3a14c4ee04d","messages_hash":"7611f3db3529dd5fbd5cf9a5ca7affc454536e57455b1b0ea043751c9437a89c","txlist_hash":"52bca7ccb83bfe83d8693ebc4c5b1ce518b2ae472dfc81f2c2940dc2460eeeab"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(189,310043,'insert','blocks','{"block_hash":"2254a12ada208f1dd57bc17547ecaf3c44720323c47bc7d4b1262477cb7f3c51","block_index":310043,"block_time":310043000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(189,310042,'insert','blocks','{"block_hash":"2254a12ada208f1dd57bc17547ecaf3c44720323c47bc7d4b1262477cb7f3c51","block_index":310043,"block_time":310043000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(190,310043,'parse','blocks','{"block_index":310043,"ledger_hash":"961c79ea2b7dcc2d7489c423b568fb978631e71732d6b998bcc0657aa4d19194","messages_hash":"110ad00303e1a01d59989b5ab6e4f166edff24c1a49e06b41cba8d56778e844e","txlist_hash":"1fa2eb6aa4c8b5efd093c6e484dddb85eabfa0de55edc929e04487ce65e73608"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(191,310044,'insert','blocks','{"block_hash":"3346d24118d8af0b3c6bcc42f8b85792e7a2e7036ebf6e4c25f4f6723c78e46b","block_index":310044,"block_time":310044000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(191,310043,'insert','blocks','{"block_hash":"3346d24118d8af0b3c6bcc42f8b85792e7a2e7036ebf6e4c25f4f6723c78e46b","block_index":310044,"block_time":310044000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(192,310044,'parse','blocks','{"block_index":310044,"ledger_hash":"d674c39010fd4554efa487d97a3d9cae278ed9b4aff0ce57db33bd881beeb3e3","messages_hash":"f7708c99c134b071aa3981d012c773e12738ece583c1b2b2908abc6a31556ea9","txlist_hash":"ddc2517e1efddbe56185e00d77333ef9f2f2ad6c59e042d65a8f4d8c2b323e5e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(193,310045,'insert','blocks','{"block_hash":"7bba0ab243839e91ad1a45a762bf074011f8a9883074d68203c6d1b46fffde98","block_index":310045,"block_time":310045000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(193,310044,'insert','blocks','{"block_hash":"7bba0ab243839e91ad1a45a762bf074011f8a9883074d68203c6d1b46fffde98","block_index":310045,"block_time":310045000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(194,310045,'parse','blocks','{"block_index":310045,"ledger_hash":"9ba70a032ae92672174421689c0845784f0cef7374e88b2f5258260191864bf1","messages_hash":"15f23755cf1bc0aff99c1a9ed38462d951ed3ea24168c18786d71207390ca4c1","txlist_hash":"3b1d5cd9cb8e7b753233ac0dac5e697226ae372bff3813852434d96996e78fac"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(195,310046,'insert','blocks','{"block_hash":"47db6788c38f2d6d712764979e41346b55e78cbb4969e0ef5c4336faf18993a6","block_index":310046,"block_time":310046000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(195,310045,'insert','blocks','{"block_hash":"47db6788c38f2d6d712764979e41346b55e78cbb4969e0ef5c4336faf18993a6","block_index":310046,"block_time":310046000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(196,310046,'parse','blocks','{"block_index":310046,"ledger_hash":"114a6ab930fbdf8531431620ed219db3756a634c5b99af6ce1ee66d527d277ff","messages_hash":"5796f08f5f53035af580104f79cebd606ff66c38b88361325289010a7a470268","txlist_hash":"becb4b0241accefb95aee137e58d406e15e87c28ed3f051938b4fc02e249b21c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(197,310047,'insert','blocks','{"block_hash":"a9ccabcc2a098a7d25e4ab8bda7c4e66807eefa42e29890dcd88149a10de7075","block_index":310047,"block_time":310047000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(197,310046,'insert','blocks','{"block_hash":"a9ccabcc2a098a7d25e4ab8bda7c4e66807eefa42e29890dcd88149a10de7075","block_index":310047,"block_time":310047000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(198,310047,'parse','blocks','{"block_index":310047,"ledger_hash":"5356512c94ea2c77623d874a927aae8c3dce287a34dfd27a617abfa57142c7f3","messages_hash":"645ba6137d35e81be31cf45092ab0838b241755dd9d33aec134c20c08cd6b091","txlist_hash":"6e06ce8a113de9e8b1a88516a512671aa2cdef60168a40d91742caa281417634"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(199,310048,'insert','blocks','{"block_hash":"610bf3935a85b05a98556c55493c6de45bed4d7b3b6c8553a984718765796309","block_index":310048,"block_time":310048000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(199,310047,'insert','blocks','{"block_hash":"610bf3935a85b05a98556c55493c6de45bed4d7b3b6c8553a984718765796309","block_index":310048,"block_time":310048000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(200,310048,'parse','blocks','{"block_index":310048,"ledger_hash":"0902ca0868560d05049c983bca3ab91cdd5eafc46ab0a948d702abcbc4010582","messages_hash":"98854c5467b3003c63ec7e208c6c8282f461bb8a9a65e2dd39927a09b44a108a","txlist_hash":"67a2fb81ebb42dc6781746a403d81b4e7603f82f02724074541d42380d7269fe"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(201,310049,'insert','blocks','{"block_hash":"4ad2761923ad49ad2b283b640f1832522a2a5d6964486b21591b71df6b33be3c","block_index":310049,"block_time":310049000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(201,310048,'insert','blocks','{"block_hash":"4ad2761923ad49ad2b283b640f1832522a2a5d6964486b21591b71df6b33be3c","block_index":310049,"block_time":310049000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(202,310049,'parse','blocks','{"block_index":310049,"ledger_hash":"978794628fc95756032cb7fb4e9d5ed286373d84fafbcfceec9af71d18c4c0be","messages_hash":"7524187fdd1244a0d1e4ea4ab1c5cdf5fdd2e1582e30a0d5b7af81ca0805ab76","txlist_hash":"ac68aa21454eb2a2ca973b5451523fc6d2a4df6906b9472891cf8e06087e130c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(203,310050,'insert','blocks','{"block_hash":"8cfeb60a14a4cec6e9be13d699694d49007d82a31065a17890383e262071e348","block_index":310050,"block_time":310050000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(203,310049,'insert','blocks','{"block_hash":"8cfeb60a14a4cec6e9be13d699694d49007d82a31065a17890383e262071e348","block_index":310050,"block_time":310050000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(204,310050,'parse','blocks','{"block_index":310050,"ledger_hash":"ff16abeb1d35e0e422f165e206b0d69e0b9ff48b68fc6656c1af74801908b92d","messages_hash":"0b5471a5d2323a894a74d6332822f0f216a0745089ac58a694b1c61a4094454f","txlist_hash":"720d553ed03860df12ab60af34cfec86b9d7ec80275f6d8815e3f61166e3af88"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(205,310051,'insert','blocks','{"block_hash":"b53c90385dd808306601350920c6af4beb717518493fd23b5c730eea078f33e6","block_index":310051,"block_time":310051000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(205,310050,'insert','blocks','{"block_hash":"b53c90385dd808306601350920c6af4beb717518493fd23b5c730eea078f33e6","block_index":310051,"block_time":310051000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(206,310051,'parse','blocks','{"block_index":310051,"ledger_hash":"556ff900993e70cabefd05ddd5dbe3e8e10bb5c9ada7913b75d84af067004ed5","messages_hash":"ebed9381df6057bd322c0652f404116bcc77e4a0c6acf142d5faec47d4baab45","txlist_hash":"656a21084dc8f46455fd2a42ebbdb0efd5c879ccb16e9b1532a6ab5323debdb4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(207,310052,'insert','blocks','{"block_hash":"0acdacf4e4b6fca756479cb055191b367b1fa433aa558956f5f08fa5b7b394e2","block_index":310052,"block_time":310052000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(207,310051,'insert','blocks','{"block_hash":"0acdacf4e4b6fca756479cb055191b367b1fa433aa558956f5f08fa5b7b394e2","block_index":310052,"block_time":310052000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(208,310052,'parse','blocks','{"block_index":310052,"ledger_hash":"15af3a616a2974aa70b7b58f88132051f335af299473db925b619fda8be1afc7","messages_hash":"95629a91ab0bd8a87878f7f65e9d02d6114e7e6ca7b0a0fcb36aacd89f0eeae9","txlist_hash":"3f90b36b7ebc9a2daea1e498bb44100f12f35c9df04260448bd38b23375b16be"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(209,310053,'insert','blocks','{"block_hash":"68348f01b6dc49b2cb30fe92ac43e527aa90d859093d3bf7cd695c64d2ef744f","block_index":310053,"block_time":310053000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(209,310052,'insert','blocks','{"block_hash":"68348f01b6dc49b2cb30fe92ac43e527aa90d859093d3bf7cd695c64d2ef744f","block_index":310053,"block_time":310053000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(210,310053,'parse','blocks','{"block_index":310053,"ledger_hash":"ed0ed3b480b38929a425c2b61c86582495764624e020cb86b3a95fc7d59c692c","messages_hash":"80cb6a5ce7cc7a796965d8351977fed0a4655f702f72c3fec64ec6dc92d23f13","txlist_hash":"67427731be09b73755cd460d142686c903b819b7b8af48297d460ab91fde3609"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(211,310054,'insert','blocks','{"block_hash":"a8b5f253df293037e49b998675620d5477445c51d5ec66596e023282bb9cd305","block_index":310054,"block_time":310054000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(211,310053,'insert','blocks','{"block_hash":"a8b5f253df293037e49b998675620d5477445c51d5ec66596e023282bb9cd305","block_index":310054,"block_time":310054000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(212,310054,'parse','blocks','{"block_index":310054,"ledger_hash":"f012825d2d549910910ad6b7e4ac2373d095b53869f0793709684f0ff05bb108","messages_hash":"d8dfbd478fa699dc45d2432bbb29ce342b54fb22abf175d13bb6da5c2d3abcf3","txlist_hash":"c5e4ba3e2011e7fbf238285525a544de3cc0fe9360a3451392a4c03acd508690"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(213,310055,'insert','blocks','{"block_hash":"4b069152e2dc82e96ed8a3c3547c162e8c3aceeb2a4ac07972f8321a535b9356","block_index":310055,"block_time":310055000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(213,310054,'insert','blocks','{"block_hash":"4b069152e2dc82e96ed8a3c3547c162e8c3aceeb2a4ac07972f8321a535b9356","block_index":310055,"block_time":310055000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(214,310055,'parse','blocks','{"block_index":310055,"ledger_hash":"90c08144277fe622573282349edaf9e59289b716b5b4e368d88ac25e67e788d1","messages_hash":"8797bf8b7fa1c772c7c44e3301c80e0f723de397db4b8a2f809c096609242cf3","txlist_hash":"5e4a8aee5f04d75d9ffcc85e8344c445b5facfc838f39a77b6b0d5acf6cd8213"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(215,310056,'insert','blocks','{"block_hash":"7603eaed418971b745256742f9d2ba70b2c2b2f69f61de6cc70e61ce0336f9d3","block_index":310056,"block_time":310056000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(215,310055,'insert','blocks','{"block_hash":"7603eaed418971b745256742f9d2ba70b2c2b2f69f61de6cc70e61ce0336f9d3","block_index":310056,"block_time":310056000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(216,310056,'parse','blocks','{"block_index":310056,"ledger_hash":"c888ae590b64fa4514ed7f94ba785b12e881052185cc4702b598cf6e48cbb3ba","messages_hash":"8e16d14f35b8d9caa018a8a40be0d0850c5ae513906d5b4638c692a6b764909a","txlist_hash":"1cb780a12bb6040055fa694822a4f39c340a18a858f0b65a8b227a6fd6fb4f31"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(217,310057,'insert','blocks','{"block_hash":"4a5fdc84f2d66ecb6ee3e3646aad20751ce8694e64e348d3c8aab09d33a3e411","block_index":310057,"block_time":310057000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(217,310056,'insert','blocks','{"block_hash":"4a5fdc84f2d66ecb6ee3e3646aad20751ce8694e64e348d3c8aab09d33a3e411","block_index":310057,"block_time":310057000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(218,310057,'parse','blocks','{"block_index":310057,"ledger_hash":"e68c9a569fda6f1e1e59502953c9735857a0ee158a76397722436466df24708e","messages_hash":"930ff03b64e3b4d399933ba76354b1d9291112c0593dba85d763c8300db1913f","txlist_hash":"2e175f240928edbbd5a5c6c5f3fbacd9516a36c7e99501703e9d1b19999b2029"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(219,310058,'insert','blocks','{"block_hash":"a6eef3089896f0cae0bfe9423392e45c48f4efe4310b14d8cfbdb1fea613635f","block_index":310058,"block_time":310058000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(219,310057,'insert','blocks','{"block_hash":"a6eef3089896f0cae0bfe9423392e45c48f4efe4310b14d8cfbdb1fea613635f","block_index":310058,"block_time":310058000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(220,310058,'parse','blocks','{"block_index":310058,"ledger_hash":"9f6607682f4a6274c2a45895f849816aec83ff0820709ba781634b84518eb05d","messages_hash":"0fbc130a453f3284eb9ec9c847ffbf5ff216ef3bffc06037190267cc2025e835","txlist_hash":"cca92bb672e368c0c1e5b4674a48e150a870f56a67339cbd74926d541ae2a4e4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(221,310059,'insert','blocks','{"block_hash":"ab505de874c43f97c90be1c26a769e6c5cb140405c993b4a6cc7afc795f156a9","block_index":310059,"block_time":310059000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(221,310058,'insert','blocks','{"block_hash":"ab505de874c43f97c90be1c26a769e6c5cb140405c993b4a6cc7afc795f156a9","block_index":310059,"block_time":310059000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(222,310059,'parse','blocks','{"block_index":310059,"ledger_hash":"49b10a5c390f603e7be0d405bf1fcae95fd15682ef2e41a3b2fcf713d271e541","messages_hash":"fef609d5eaabd31efa0317a33730438569163fbab3fc09b9eff59a7b555fc4a5","txlist_hash":"12b8b50b634cb6843258f1c130df1cae60898c902d3e66ad00e1303fde4d8724"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(223,310060,'insert','blocks','{"block_hash":"974ad5fbef621e0a38eab811608dc9afaf10c8ecc85fed913075ba1a145e889b","block_index":310060,"block_time":310060000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(223,310059,'insert','blocks','{"block_hash":"974ad5fbef621e0a38eab811608dc9afaf10c8ecc85fed913075ba1a145e889b","block_index":310060,"block_time":310060000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(224,310060,'parse','blocks','{"block_index":310060,"ledger_hash":"1d6cea34d6f7042ced3a5211da80de88fa77c900af5526f3033b715e4f68df17","messages_hash":"c29369e9d69fcd23979ef58b8cfabc2d6041efe31c810e33bd62b46c8d7866e8","txlist_hash":"40fa40a1a2c02ca514f309fe27268e9e493374bf3edfca8de66e3d46efa32ba6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(225,310061,'insert','blocks','{"block_hash":"35d267d21ad386e7b7632292af1c422b0310dde7ca49a82f9577525a29c138cf","block_index":310061,"block_time":310061000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(225,310060,'insert','blocks','{"block_hash":"35d267d21ad386e7b7632292af1c422b0310dde7ca49a82f9577525a29c138cf","block_index":310061,"block_time":310061000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(226,310061,'parse','blocks','{"block_index":310061,"ledger_hash":"0c43668fdc3d6cc6ec84fee99c68f0eff21650a618db35bc20e428550eae9b0c","messages_hash":"38aef8af21f94ace651d152fbadb529721e3cc64959566388d348d249b226d68","txlist_hash":"4aa0becfc939793d7dccbb0b19881889a20c801e6c627be8ab8a2ffbd8cee8de"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(227,310062,'insert','blocks','{"block_hash":"b31a0054145319ef9de8c1cb19df5bcf4dc8a1ece20053aa494e5d3a00a2852f","block_index":310062,"block_time":310062000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(227,310061,'insert','blocks','{"block_hash":"b31a0054145319ef9de8c1cb19df5bcf4dc8a1ece20053aa494e5d3a00a2852f","block_index":310062,"block_time":310062000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(228,310062,'parse','blocks','{"block_index":310062,"ledger_hash":"cf03a34b29d3a8f8ea5fadb017426f2843c6ab2e785032b6dec70d7aba7bce4a","messages_hash":"e0764773525602d47d332abe4c68dd8c32d8c4585fe47587ecd218a7bc49ebc6","txlist_hash":"3317013c1e6464e0296f5aa7f50208ede42ff9051e4e3ce2da92584cb80a3079"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(229,310063,'insert','blocks','{"block_hash":"0cbcbcd5b7f2dc288e3a34eab3d4212463a5a56e886804fb4f9f1cf929eadebe","block_index":310063,"block_time":310063000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(229,310062,'insert','blocks','{"block_hash":"0cbcbcd5b7f2dc288e3a34eab3d4212463a5a56e886804fb4f9f1cf929eadebe","block_index":310063,"block_time":310063000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(230,310063,'parse','blocks','{"block_index":310063,"ledger_hash":"e145dfc2c7f053a1ba4c8a41d042b40c0748eefcf9e56c5e906ad4b12f3653eb","messages_hash":"c20c09edd2f2235e7287d0439fe2c6c46abfe7ea5a04fa35260840400f54b201","txlist_hash":"b58f95d06b31f7bb5c6f6bd5c5c4460ef4e4ce0e1d154b8557a18cb73f36d432"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(231,310064,'insert','blocks','{"block_hash":"e2db8065a195e85cde9ddb868a17d39893a60fb2b1255aa5f0c88729de7cbf30","block_index":310064,"block_time":310064000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(231,310063,'insert','blocks','{"block_hash":"e2db8065a195e85cde9ddb868a17d39893a60fb2b1255aa5f0c88729de7cbf30","block_index":310064,"block_time":310064000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(232,310064,'parse','blocks','{"block_index":310064,"ledger_hash":"ebc34184623da16251782c82098c7fcfda42f95b155eadfacab2a53e3b34333e","messages_hash":"cbc39bca2b7f961cd5c661f187d4dfa1b5dcb55eba9dec87327cea7eadbbe663","txlist_hash":"e33ac70126559506de70ca420f152dcb639fd0e841d0d7259c0136d518fd4f39"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(233,310065,'insert','blocks','{"block_hash":"8a7bc7a77c831ac4fd11b8a9d22d1b6a0661b07cef05c2e600c7fb683b861d2a","block_index":310065,"block_time":310065000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(233,310064,'insert','blocks','{"block_hash":"8a7bc7a77c831ac4fd11b8a9d22d1b6a0661b07cef05c2e600c7fb683b861d2a","block_index":310065,"block_time":310065000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(234,310065,'parse','blocks','{"block_index":310065,"ledger_hash":"db746a9e0ad8f37c14ef14180dd1bc562ae757a6d4d042a517bb8953f34c6958","messages_hash":"24ca6fdcbb7bdd7358b565ac84d2f14c2314fed7857544359d0c850996e6b151","txlist_hash":"9d52ca0b8859777bcbe84606017ec53961075699eff51b34b80e5a6ed33b137f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(235,310066,'insert','blocks','{"block_hash":"b6959be51eb084747d301f7ccaf9e75f2292c9404633b1532e3692659939430d","block_index":310066,"block_time":310066000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(235,310065,'insert','blocks','{"block_hash":"b6959be51eb084747d301f7ccaf9e75f2292c9404633b1532e3692659939430d","block_index":310066,"block_time":310066000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(236,310066,'parse','blocks','{"block_index":310066,"ledger_hash":"cc71a63314b770e4e010bc7c66d8ab808451b6401e6df8558455a2bfc9bb4882","messages_hash":"9d96fefa3d3e1d197e765fcaf64952ec79b419ced4edf858fed794419153b848","txlist_hash":"5122312265a8305639f6490bc51fb025626dbcd38c5735ce85cd652348f2e86e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(237,310067,'insert','blocks','{"block_hash":"8b08eae98d7193c9c01863fac6effb9162bda010daeacf9e0347112f233b8577","block_index":310067,"block_time":310067000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(237,310066,'insert','blocks','{"block_hash":"8b08eae98d7193c9c01863fac6effb9162bda010daeacf9e0347112f233b8577","block_index":310067,"block_time":310067000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(238,310067,'parse','blocks','{"block_index":310067,"ledger_hash":"a5812c0f3a37b04d5105bca6b0c4819a41beeedf5b0f314f476ab55d6c31235d","messages_hash":"bd447b29f603c6d56257ce8a559c137dfe2fdad10acdacce2bb003e391655225","txlist_hash":"764477c3a233cd407804695f42948d3017951e90b7474cfcc24ef81ee49fdad9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(239,310068,'insert','blocks','{"block_hash":"9280e7297ef6313341bc81787a36acfc9af58f83a415afff5e3154f126cf52b5","block_index":310068,"block_time":310068000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(239,310067,'insert','blocks','{"block_hash":"9280e7297ef6313341bc81787a36acfc9af58f83a415afff5e3154f126cf52b5","block_index":310068,"block_time":310068000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(240,310068,'parse','blocks','{"block_index":310068,"ledger_hash":"14f065751896a2724251b6ca6d0297b344986980075fb72ad058ad0b5bedcd3c","messages_hash":"61dfcc035dbabe08298144762a6ab94589e14668d412ea20a79a0070437fb202","txlist_hash":"866fceb74e8e97d663493f3546519b01f51e1a3cb25bde4b0f3c2e960d2eda85"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(241,310069,'insert','blocks','{"block_hash":"486351f0655bf594ffaab1980cff17353b640b63e9c27239109addece189a6f7","block_index":310069,"block_time":310069000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(241,310068,'insert','blocks','{"block_hash":"486351f0655bf594ffaab1980cff17353b640b63e9c27239109addece189a6f7","block_index":310069,"block_time":310069000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(242,310069,'parse','blocks','{"block_index":310069,"ledger_hash":"a7dd17b4760fb65ac58be1b1653f7cb0e90574c47f70c61ff9f940ad15ad3658","messages_hash":"0eae6329012b77e96a46de6c909ecdfd0887599361884a84a9218aa70665be21","txlist_hash":"9e0565827fcf295ae2149bfcf5e0db29237f447760832083baf94de145bdb531"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(243,310070,'insert','blocks','{"block_hash":"8739e99f4dee8bebf1332f37f49a125348b40b93b74fe35579dd52bfba4fa7e5","block_index":310070,"block_time":310070000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(243,310069,'insert','blocks','{"block_hash":"8739e99f4dee8bebf1332f37f49a125348b40b93b74fe35579dd52bfba4fa7e5","block_index":310070,"block_time":310070000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(244,310070,'parse','blocks','{"block_index":310070,"ledger_hash":"8068a6bcc5d1fc1a78562f0f3165423b45b4674e55f21c4c09948fb65ee632c0","messages_hash":"4419538295a5c394523a396ad0cef24f72972618b2108e4cd084f0bbbf6a7cd6","txlist_hash":"03f84e0f0838204a53ce54e3cfecde00b2e5741ed08aab0c0d9ed99513ab4655"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(245,310071,'insert','blocks','{"block_hash":"7a099aa1bba0ead577f1e44f35263a1f115ed6a868c98d4dd71609072ae7f80b","block_index":310071,"block_time":310071000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(245,310070,'insert','blocks','{"block_hash":"7a099aa1bba0ead577f1e44f35263a1f115ed6a868c98d4dd71609072ae7f80b","block_index":310071,"block_time":310071000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(246,310071,'parse','blocks','{"block_index":310071,"ledger_hash":"af86ffad4b8dd68a0f18142935bbb18623cc5ce2e9e0c02f04c0e7a5dd974e17","messages_hash":"6a299b36e4ccfd1e32f81f91009e367cacc30aedaccbcefbd0273e351b94305f","txlist_hash":"9b3e1c7af0bb119e69813161c19aeac4dd5a594ece5f67f21ffb55b8edaa111f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(247,310072,'insert','blocks','{"block_hash":"7b17ecedc07552551b8129e068ae67cb176ca766ea3f6df74b597a94e3a7fc8a","block_index":310072,"block_time":310072000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(247,310071,'insert','blocks','{"block_hash":"7b17ecedc07552551b8129e068ae67cb176ca766ea3f6df74b597a94e3a7fc8a","block_index":310072,"block_time":310072000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(248,310072,'parse','blocks','{"block_index":310072,"ledger_hash":"36de48518d1446b33f2230c5eee7d18e040db543fe03dca001174f8382c209ee","messages_hash":"180ff6f6092c485217d79b3c5510f9d8e0664d09c882fd164ae3a49cb8a6a356","txlist_hash":"33fccfbad1dd91d9102b82f11b7c97883bc5d5fdfd44584cca6c40fbd04ce2d8"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(249,310073,'insert','blocks','{"block_hash":"ee0fe3cc9b3a48a2746b6090b63b442b97ea6055d48edcf4b2288396764c6943","block_index":310073,"block_time":310073000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(249,310072,'insert','blocks','{"block_hash":"ee0fe3cc9b3a48a2746b6090b63b442b97ea6055d48edcf4b2288396764c6943","block_index":310073,"block_time":310073000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(250,310073,'parse','blocks','{"block_index":310073,"ledger_hash":"4374f567cbc460b73e74d6190db353c3ee86b92c3f99e392beae3caeb264eb5f","messages_hash":"0e4b56334021fa1fb190d62b5c33fd7f37c126d28ef7a61a80d84eb1b7f833e5","txlist_hash":"7544980dbaa8029ae36d883e3079bcc82f2d140072d4dd65cb3384510692ff45"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(251,310074,'insert','blocks','{"block_hash":"ceab38dfde01f711a187601731ad575d67cfe0b7dbc61dcd4f15baaef72089fb","block_index":310074,"block_time":310074000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(251,310073,'insert','blocks','{"block_hash":"ceab38dfde01f711a187601731ad575d67cfe0b7dbc61dcd4f15baaef72089fb","block_index":310074,"block_time":310074000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(252,310074,'parse','blocks','{"block_index":310074,"ledger_hash":"54fd95cdf7f9374d1687590f2860276afe67a265ddd9216e5b63fb06c5bd569e","messages_hash":"ec24c8cf2685cb4750e7e3da65223b72da2e8afff49e12f36b795105d7dd89c9","txlist_hash":"1efba9ea6a8d2e7ee6ee2070b84b497feb66e3387e05c1e4f4989f086e5e02a2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(253,310075,'insert','blocks','{"block_hash":"ef547198c6e36d829f117cfd7077ccde45158e3c545152225fa24dba7a26847b","block_index":310075,"block_time":310075000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(253,310074,'insert','blocks','{"block_hash":"ef547198c6e36d829f117cfd7077ccde45158e3c545152225fa24dba7a26847b","block_index":310075,"block_time":310075000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(254,310075,'parse','blocks','{"block_index":310075,"ledger_hash":"2b42e23b43d30f91fe7705a01f0c8ec86d6230815b587704bcc70b91b5ae87b8","messages_hash":"2178b64331b1afaf3a8d650a93f6173ab0729b9d776b5f4c552970e79db18a0f","txlist_hash":"a370830ef1758c18c88e6d9fcc5803fc15f1dbdad0f2d6a0773f902d86ad7c97"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(255,310076,'insert','blocks','{"block_hash":"3b0499c2e8e8f0252c7288d4ecf66efc426ca37aad3524424d14c8bc6f8b0d92","block_index":310076,"block_time":310076000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(255,310075,'insert','blocks','{"block_hash":"3b0499c2e8e8f0252c7288d4ecf66efc426ca37aad3524424d14c8bc6f8b0d92","block_index":310076,"block_time":310076000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(256,310076,'parse','blocks','{"block_index":310076,"ledger_hash":"577092728a4dc81cd9a06fcf6d2b058f0e4ce8bcb395819a704d6b4144f041dc","messages_hash":"29783a12523c7d590f0c9aa3b71f221de0359f61a368924800b80919084823a2","txlist_hash":"05ce95f07d03f4417a2fd15224418c8ba4ae196e9ec6f3192f5324c028363641"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(257,310077,'insert','blocks','{"block_hash":"d2adeefa9024ab3ff2822bc36acf19b6c647cea118cf15b86c6bc00c3322e7dd","block_index":310077,"block_time":310077000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(257,310076,'insert','blocks','{"block_hash":"d2adeefa9024ab3ff2822bc36acf19b6c647cea118cf15b86c6bc00c3322e7dd","block_index":310077,"block_time":310077000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(258,310077,'parse','blocks','{"block_index":310077,"ledger_hash":"d1ba60181f3061673c64ecd0b92abbc19b1a6e69a927dfefdfd8b8c74171ecd2","messages_hash":"821a8fad56889c6609d97cdd7e6bc8b6ecc68d54318986551c747ac45e22cd54","txlist_hash":"6c9e35feb56fb01c37fce04a1e6dc5f7747a6d26ee2f39ac584f11e8359dce71"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(259,310078,'insert','blocks','{"block_hash":"f6c17115ef0efe489c562bcda4615892b4d4b39db0c9791fe193d4922bd82cd6","block_index":310078,"block_time":310078000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(259,310077,'insert','blocks','{"block_hash":"f6c17115ef0efe489c562bcda4615892b4d4b39db0c9791fe193d4922bd82cd6","block_index":310078,"block_time":310078000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(260,310078,'parse','blocks','{"block_index":310078,"ledger_hash":"c0a9270d15793e68cfd1cf445315d737bed7052914da6def4f014c21f0c9e0c5","messages_hash":"c765bfd546685684c2bfacdbbb248478a115f88dda12b4df64efb0b336362540","txlist_hash":"d59b48425061f0965947dd025cfa0fba8855e997f376572c585db72203b9a80a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(261,310079,'insert','blocks','{"block_hash":"f2fbd2074d804e631db44cb0fb2e1db3fdc367e439c21ffc40d73104c4d7069c","block_index":310079,"block_time":310079000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(261,310078,'insert','blocks','{"block_hash":"f2fbd2074d804e631db44cb0fb2e1db3fdc367e439c21ffc40d73104c4d7069c","block_index":310079,"block_time":310079000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(262,310079,'parse','blocks','{"block_index":310079,"ledger_hash":"74eaddecbf5ab6608c1e95c1c313c13f2af2b649512cc8c7016717d21e93f815","messages_hash":"b38c60aa1982b330713c16d5572143e5970e4b0273ef5461473e237be5133a8b","txlist_hash":"d3f32df02f0e7cd7c2163b47b3ff73d175046599ed626ab343647e1a04525e3c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(263,310080,'insert','blocks','{"block_hash":"42943b914d9c367000a78b78a544cc4b84b1df838aadde33fe730964a89a3a6c","block_index":310080,"block_time":310080000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(263,310079,'insert','blocks','{"block_hash":"42943b914d9c367000a78b78a544cc4b84b1df838aadde33fe730964a89a3a6c","block_index":310080,"block_time":310080000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(264,310080,'parse','blocks','{"block_index":310080,"ledger_hash":"a759e3aac1b015e28b8b524106a74b943b215faac8d5079384ec7351b2239bde","messages_hash":"059af64961a1fef76aafd5d22aedd13466299a9727bd9b21072794674b02c140","txlist_hash":"f588a6cf255e710d9ee481d53f8bc0fc0e1567d58ee701f1b77f0848db881f5f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(265,310081,'insert','blocks','{"block_hash":"6554f9d307976249e7b7e260e08046b3b55d318f8b6af627fed5be3063f123c4","block_index":310081,"block_time":310081000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(265,310080,'insert','blocks','{"block_hash":"6554f9d307976249e7b7e260e08046b3b55d318f8b6af627fed5be3063f123c4","block_index":310081,"block_time":310081000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(266,310081,'parse','blocks','{"block_index":310081,"ledger_hash":"71622e25e8497db6fa222e33c60ea582698e72ca5789a52c9252bf51191cadaa","messages_hash":"f6134380063f36dde912c04787580d3c40a8c8393a595178165f0ff57b5ad90b","txlist_hash":"9a2e169d5fa3721f9bb8852c93ca8ed5dfbcccef05cba99ed3f1c61c937f4366"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(267,310082,'insert','blocks','{"block_hash":"4f1ef91b1dcd575f8ac2e66a67715500cbca154bd6f3b8148bb7015a6aa6c644","block_index":310082,"block_time":310082000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(267,310081,'insert','blocks','{"block_hash":"4f1ef91b1dcd575f8ac2e66a67715500cbca154bd6f3b8148bb7015a6aa6c644","block_index":310082,"block_time":310082000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(268,310082,'parse','blocks','{"block_index":310082,"ledger_hash":"47e9d8fbcbafcee2b4c145ce651333ce49812533d13f7f9a0e9a448f51cfbacd","messages_hash":"21d4d5920b914ea36e3c7065dd7f0af4b294454030688c44e1a011835ef8a49b","txlist_hash":"c2cd395566e0a7b16c76cc0ead2c2cc87a684d5a499c76b2370afffe4b408ad1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(269,310083,'insert','blocks','{"block_hash":"9b1f6fd6ff9b0dc4e37603cfb0625f49067c775b99e12492afd85392d3c8d850","block_index":310083,"block_time":310083000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(269,310082,'insert','blocks','{"block_hash":"9b1f6fd6ff9b0dc4e37603cfb0625f49067c775b99e12492afd85392d3c8d850","block_index":310083,"block_time":310083000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(270,310083,'parse','blocks','{"block_index":310083,"ledger_hash":"e61148e7a8125f7225a6b6e1d77786f8b28b0b8a74e60fef3f75fa4de8f7d882","messages_hash":"b3e7328b23a6af5e3df01bb9bea68d2a8445820c50c2adf3b13bf79c3c4f9d54","txlist_hash":"21fb4596655071cca486c2e6988ec980799a9827e2e5f169033a45d21b3c7a75"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(271,310084,'insert','blocks','{"block_hash":"1e0972523e80306441b9f4157f171716199f1428db2e818a7f7817ccdc8859e3","block_index":310084,"block_time":310084000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(271,310083,'insert','blocks','{"block_hash":"1e0972523e80306441b9f4157f171716199f1428db2e818a7f7817ccdc8859e3","block_index":310084,"block_time":310084000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(272,310084,'parse','blocks','{"block_index":310084,"ledger_hash":"20fb450589ddc6c904fbb61cca8588e85e865635c12402ce7ae72995ab884c14","messages_hash":"3101e4813e73498cef2ec786023347dc13fb29aaf1407bbfee16d04f86ff6ac1","txlist_hash":"feb3992f370b8465a732bc4d90691b99db691f44e1697ad2775a6df216d93b13"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(273,310085,'insert','blocks','{"block_hash":"c5b6e9581831e3bc5848cd7630c499bca26d9ece5156d36579bdb72d54817e34","block_index":310085,"block_time":310085000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(273,310084,'insert','blocks','{"block_hash":"c5b6e9581831e3bc5848cd7630c499bca26d9ece5156d36579bdb72d54817e34","block_index":310085,"block_time":310085000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(274,310085,'parse','blocks','{"block_index":310085,"ledger_hash":"9cea37d548308505f80dc438d5183bac6c6ca424ea4dd9c85d883b05d67cdc92","messages_hash":"a10a734ce80faabca0177b12746f0483692fd13256d7d75af28e615b2324e682","txlist_hash":"277205c28e54078d55ce1641fed64ff4b409b686fbe4aa3a018cead2f969c501"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(275,310086,'insert','blocks','{"block_hash":"080c1dc55a4ecf4824cf9840602498cfc35b5f84099f50b71b45cb63834c7a78","block_index":310086,"block_time":310086000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(275,310085,'insert','blocks','{"block_hash":"080c1dc55a4ecf4824cf9840602498cfc35b5f84099f50b71b45cb63834c7a78","block_index":310086,"block_time":310086000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(276,310086,'parse','blocks','{"block_index":310086,"ledger_hash":"e11bab5fba2d038086c65030b90ce1cbc988314d0c9846aa7ddac4fd357bd01a","messages_hash":"54ccdfdb8690395f13bf11d70244d69052acdb3f9948e8238c0d4bede54c899b","txlist_hash":"ef3ac1de31e29795732b362218bd244945bea4183273512ff6974ecd0c0a7aef"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(277,310087,'insert','blocks','{"block_hash":"4ec8cb1c38b22904e8087a034a6406b896eff4dd28e7620601c6bddf82e2738c","block_index":310087,"block_time":310087000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(277,310086,'insert','blocks','{"block_hash":"4ec8cb1c38b22904e8087a034a6406b896eff4dd28e7620601c6bddf82e2738c","block_index":310087,"block_time":310087000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(278,310087,'parse','blocks','{"block_index":310087,"ledger_hash":"777873e7ebd0ec3052be65197ec0db8bd72e46d2053badb0f37be1f6e84ae0b3","messages_hash":"96a8a5d4606f2e77f429e6ae8f54576e51e1159969612a14739e69e4121e0fb1","txlist_hash":"3bec931f7207a5b03e5a7d390787cd737e598d04025a1514c7654ef34fd1aedc"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(279,310088,'insert','blocks','{"block_hash":"e945c815c433cbddd0bf8e66c5c23b51072483492acda98f5c2c201020a8c5b3","block_index":310088,"block_time":310088000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(279,310087,'insert','blocks','{"block_hash":"e945c815c433cbddd0bf8e66c5c23b51072483492acda98f5c2c201020a8c5b3","block_index":310088,"block_time":310088000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(280,310088,'parse','blocks','{"block_index":310088,"ledger_hash":"85a5ea57af33dfddddbcbe1a1c87994efe5a21a645713aa164f19e19bfb23c64","messages_hash":"20fbc6981fcb9ff9aea35590a435ac2c7d1513bb4a038a8f62602632b6bee622","txlist_hash":"4030ee911aec8ebfbbeecede9cfb977088fb591b20cf52d5340e5aa13e41c7f7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(281,310089,'insert','blocks','{"block_hash":"0382437f895ef3e7e38bf025fd4f606fd44d4bbd6aea71dbdc4ed11a7cd46f33","block_index":310089,"block_time":310089000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(281,310088,'insert','blocks','{"block_hash":"0382437f895ef3e7e38bf025fd4f606fd44d4bbd6aea71dbdc4ed11a7cd46f33","block_index":310089,"block_time":310089000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(282,310089,'parse','blocks','{"block_index":310089,"ledger_hash":"bdf3b6e7a14a3aa22d42a7d69f2f96b0993f1eef2952a7d74313c37e1b407523","messages_hash":"3e376fad3e36d13f5c50f8bac968fba251f8192e0661df0dec9266d0de986838","txlist_hash":"255675a022762a349d44af6315173e05c685f351f2b3b770e0ec80e128969a4b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(283,310090,'insert','blocks','{"block_hash":"b756db71dc037b5a4582de354a3347371267d31ebda453e152f0a13bb2fae969","block_index":310090,"block_time":310090000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(283,310089,'insert','blocks','{"block_hash":"b756db71dc037b5a4582de354a3347371267d31ebda453e152f0a13bb2fae969","block_index":310090,"block_time":310090000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(284,310090,'parse','blocks','{"block_index":310090,"ledger_hash":"9b3ee688c5786ecc438ec9c843ba5f898fe1ab1a8bc3903ad7789aaf6b0c0bf0","messages_hash":"c61c461272d69c03c027a144418a877a6122dba7ba9f2376000d53656037ce75","txlist_hash":"7d658801ab6fbe73231469da5204c5e1c73d290b83449187ec5eec71b846616d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(285,310091,'insert','blocks','{"block_hash":"734a9aa485f36399d5efb74f3b9c47f8b5f6fd68c9967f134b14cfe7e2d7583c","block_index":310091,"block_time":310091000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(285,310090,'insert','blocks','{"block_hash":"734a9aa485f36399d5efb74f3b9c47f8b5f6fd68c9967f134b14cfe7e2d7583c","block_index":310091,"block_time":310091000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(286,310091,'parse','blocks','{"block_index":310091,"ledger_hash":"25578ac389a77dbf9589b23c5470f3199016ac66a415540ae03efac29dfe7adc","messages_hash":"48792e4348415165ef24cbfadfe83934dfd900c8f2a0bf47251604ad1f9819b5","txlist_hash":"1cb14bc9f998c85e670e2e291cde3a2debe9b4013840c0c060417f509c7210ea"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(287,310092,'insert','blocks','{"block_hash":"56386beb65f9228740d4ad43a1c575645f6daf59e0dd9f22551c59215b5e8c3d","block_index":310092,"block_time":310092000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(287,310091,'insert','blocks','{"block_hash":"56386beb65f9228740d4ad43a1c575645f6daf59e0dd9f22551c59215b5e8c3d","block_index":310092,"block_time":310092000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(288,310092,'parse','blocks','{"block_index":310092,"ledger_hash":"bb9109ba299c99cb104ebf2ef6e75141c50264d701d27119525ab5d0a54c1a40","messages_hash":"44a37e3c8140c5d6cc507bae93571af20c9cf4b48e8404edfa4e55c8e5e82931","txlist_hash":"889afcda8b6e0848c7d43014beb0e181c78fa69d3aedec508f4bc0eb8a416029"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(289,310093,'insert','blocks','{"block_hash":"a74a2425f2f4be24bb5f715173e6756649e1cbf1b064aeb1ef60e0b94b418ddc","block_index":310093,"block_time":310093000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(289,310092,'insert','blocks','{"block_hash":"a74a2425f2f4be24bb5f715173e6756649e1cbf1b064aeb1ef60e0b94b418ddc","block_index":310093,"block_time":310093000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(290,310093,'parse','blocks','{"block_index":310093,"ledger_hash":"cdb21362b3eb4fc10ba3c6bf3aba41bfc5bd0bf2475f742c1069cb4383be7b95","messages_hash":"b0166f95f4cf48193827d3b5423889419477c07e9a041c41b72df8229e46adee","txlist_hash":"dec762d55ba88cb2c043f627b2a8b26c920cce9d4dc2746065c0bcf2795c2d99"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(291,310094,'insert','blocks','{"block_hash":"2a8f976f20c4e89ff01071915ac96ee35192d54df3a246bf61fd4a0cccfb5b23","block_index":310094,"block_time":310094000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(291,310093,'insert','blocks','{"block_hash":"2a8f976f20c4e89ff01071915ac96ee35192d54df3a246bf61fd4a0cccfb5b23","block_index":310094,"block_time":310094000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(292,310094,'parse','blocks','{"block_index":310094,"ledger_hash":"b82568de09fe4ea06f3dca053dbcbcc61dbe5e44dd300a4301c995ba180f894d","messages_hash":"34ba529a171f062f8e18bd65ef967158d21a63f907c90ff79f00381c1d9836e9","txlist_hash":"625beebc3c34fa3276e022a37c79137c8f09af21454e8171cce7ab7a04453047"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(293,310095,'insert','blocks','{"block_hash":"bed0fa40c9981223fb40b3be8124ca619edc9dd34d0c907369477ea92e5d2cd2","block_index":310095,"block_time":310095000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(293,310094,'insert','blocks','{"block_hash":"bed0fa40c9981223fb40b3be8124ca619edc9dd34d0c907369477ea92e5d2cd2","block_index":310095,"block_time":310095000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(294,310095,'parse','blocks','{"block_index":310095,"ledger_hash":"513c4a041ee80ba72d1d8428605c682e3485fa45341460bc33fae6540dffb571","messages_hash":"108e625c8ae24f372335196ec1678080f2f5d211a7e47de3eb1da4817dfecd5e","txlist_hash":"b7794e7c8dfe3947ab8d256b94af8bc43acb9ca11f696a81cf9ad98062372959"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(295,310096,'insert','blocks','{"block_hash":"306aeec3db435fabffdf88c2f26ee83caa4c2426375a33daa2be041dbd27ea2f","block_index":310096,"block_time":310096000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(295,310095,'insert','blocks','{"block_hash":"306aeec3db435fabffdf88c2f26ee83caa4c2426375a33daa2be041dbd27ea2f","block_index":310096,"block_time":310096000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(296,310096,'parse','blocks','{"block_index":310096,"ledger_hash":"3e8ff43c8d671159355b2d40a995fb8f6d84f6216fa8326fa80ae39aa9d15d03","messages_hash":"d68fba6521389577f6303af99b28050b6cbceb05908bd85de1dacd982537db4c","txlist_hash":"8117c5400c1cfdb97456cf3b79e8572aecf23c29d1c336d5543979d0e81cc158"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(297,310097,'insert','blocks','{"block_hash":"13e8e16e67c7cdcc80d477491e554b43744f90e8e1a9728439a11fab42cefadf","block_index":310097,"block_time":310097000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(297,310096,'insert','blocks','{"block_hash":"13e8e16e67c7cdcc80d477491e554b43744f90e8e1a9728439a11fab42cefadf","block_index":310097,"block_time":310097000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(298,310097,'parse','blocks','{"block_index":310097,"ledger_hash":"19d91de7be12136737d3f8990e7a4a793912c952e71e017d723d750118e849c6","messages_hash":"3f04ffa37371d7689609be3f5e65a6986553bf2e0c9db51e8ac815dbf61b01df","txlist_hash":"1e2f99bf2c03b8c915bd23c94431002d3801a13caf40d9b42f22001c2faf305a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(299,310098,'insert','blocks','{"block_hash":"ca5bca4b5ec4fa6183e05176abe921cff884c4e20910fab55b603cef48dc3bca","block_index":310098,"block_time":310098000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(299,310097,'insert','blocks','{"block_hash":"ca5bca4b5ec4fa6183e05176abe921cff884c4e20910fab55b603cef48dc3bca","block_index":310098,"block_time":310098000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(300,310098,'parse','blocks','{"block_index":310098,"ledger_hash":"be75df2e5aff3faaebfc0ce4ab5134790fa728f84500e6989739dddc058738de","messages_hash":"cc3e49edd68887f1f34db7c81e3125f9f76ba0c45aae70a5a4e4f7f8a85baf4d","txlist_hash":"7f692426eab57621527d12cc4a49aa85841de9856cd46ad6992a658ed5c15fb1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(301,310099,'insert','blocks','{"block_hash":"3c4c2279cd7de0add5ec469648a845875495a7d54ebfb5b012dcc5a197b7992a","block_index":310099,"block_time":310099000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(301,310098,'insert','blocks','{"block_hash":"3c4c2279cd7de0add5ec469648a845875495a7d54ebfb5b012dcc5a197b7992a","block_index":310099,"block_time":310099000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(302,310099,'parse','blocks','{"block_index":310099,"ledger_hash":"9090b8a4a26ea7dff75658317ce2c6ab828b3b42684922e44debfd1bf8330b8d","messages_hash":"274d30a0808c4740b2fad528bf374e4b65e3bdfa17247e7e1c924bda16be9794","txlist_hash":"c3b0869da7bd7abbda54895e6de81cffd2febe007e1f7085da8cc657512278e6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(303,310100,'insert','blocks','{"block_hash":"96925c05b3c7c80c716f5bef68d161c71d044252c766ca0e3f17f255764242cb","block_index":310100,"block_time":310100000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(303,310099,'insert','blocks','{"block_hash":"96925c05b3c7c80c716f5bef68d161c71d044252c766ca0e3f17f255764242cb","block_index":310100,"block_time":310100000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(304,310100,'parse','blocks','{"block_index":310100,"ledger_hash":"d48d30db433bcee44d87153fb3db17d37fbe3534f23eb16ac853b3420d86d80e","messages_hash":"33ba6fe2f691128379ebff991b818614c4665fd09e4c54b61619d2d2ed54c0ce","txlist_hash":"793627f8b7de24827faca4a19ce374f39c90b74e278b83a599cb637877bd6388"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(305,310101,'insert','blocks','{"block_hash":"369472409995ca1a2ebecbad6bf9dab38c378ab1e67e1bdf13d4ce1346731cd6","block_index":310101,"block_time":310101000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(305,310100,'insert','blocks','{"block_hash":"369472409995ca1a2ebecbad6bf9dab38c378ab1e67e1bdf13d4ce1346731cd6","block_index":310101,"block_time":310101000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(306,310101,'insert','transactions','{"block_hash":"369472409995ca1a2ebecbad6bf9dab38c378ab1e67e1bdf13d4ce1346731cd6","block_index":310101,"block_time":310101000,"btc_amount":5430,"data":"00000028000352bb33c8000000000000000a000000000000000a0000000000000000000013b0000003e8","destination":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","fee":7650,"source":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","supported":true,"tx_hash":"db4ea092bea6036e3d1e5f6ec863db9b900252b4f4d6d9faa6165323f433c51e","tx_index":102}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(307,310101,'insert','debits','{"action":"bet","address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","asset":"XCP","block_index":310101,"event":"db4ea092bea6036e3d1e5f6ec863db9b900252b4f4d6d9faa6165323f433c51e","quantity":10,"tx_index":102}',0,'DEBIT'); INSERT INTO messages VALUES(308,310101,'insert','bets','{"bet_type":3,"block_index":310101,"counterwager_quantity":10,"counterwager_remaining":10,"deadline":1388000200,"expiration":1000,"expire_index":311101,"fee_fraction_int":5000000.0,"feed_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","leverage":5040,"source":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","status":"open","target_value":0.0,"tx_hash":"db4ea092bea6036e3d1e5f6ec863db9b900252b4f4d6d9faa6165323f433c51e","tx_index":102,"wager_quantity":10,"wager_remaining":10}',0,'OPEN_BET'); INSERT INTO messages VALUES(309,310101,'parse','transactions','{"supported":true,"tx_hash":"db4ea092bea6036e3d1e5f6ec863db9b900252b4f4d6d9faa6165323f433c51e","tx_index":102}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(310,310101,'parse','blocks','{"block_index":310101,"ledger_hash":"53c6f9247cd255c86a69c05c4463ab94f9a3277496c155398c38dc6f7121fe9b","messages_hash":"f3689c9c1663d8e96f34d9e34442f1db962b00725c617592ebad5a5b1338cae4","txlist_hash":"7388dcdfb1f5a54a0d4a4d3e50d486b24a662cef04f054a582e2d5b0bcf3ca28"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(311,310102,'insert','blocks','{"block_hash":"11e25883fd0479b78ddb1953ef67e3c3d1ffc82bd1f9e918a75c2194f7137f99","block_index":310102,"block_time":310102000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(311,310101,'insert','blocks','{"block_hash":"11e25883fd0479b78ddb1953ef67e3c3d1ffc82bd1f9e918a75c2194f7137f99","block_index":310102,"block_time":310102000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(312,310102,'insert','transactions','{"block_hash":"11e25883fd0479b78ddb1953ef67e3c3d1ffc82bd1f9e918a75c2194f7137f99","block_index":310102,"block_time":310102000,"btc_amount":0,"data":"0000001e52bb33023ff0000000000000004c4b4009556e69742054657374","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"16462eac6c795cea6e5985ee063867d8c61ae24373df02048186d28118d25bae","tx_index":103}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(313,310102,'insert','broadcasts','{"block_index":310102,"fee_fraction_int":5000000,"locked":false,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","text":"Unit Test","timestamp":1388000002,"tx_hash":"16462eac6c795cea6e5985ee063867d8c61ae24373df02048186d28118d25bae","tx_index":103,"value":1.0}',0,'BROADCAST'); INSERT INTO messages VALUES(314,310102,'insert','credits','{"address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","asset":"XCP","block_index":310102,"calling_function":"bet settled","event":"16462eac6c795cea6e5985ee063867d8c61ae24373df02048186d28118d25bae","quantity":9,"tx_index":103}',0,'CREDIT'); @@ -1285,38 +1285,38 @@ INSERT INTO messages VALUES(317,310102,'insert','bet_match_resolutions','{"bear_ INSERT INTO messages VALUES(318,310102,'update','bet_matches','{"id":"2a2169991597036b6dad687ea1feffd55465a204466f40c35cbba811cb3109b1_5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93","status":"settled"}',0,'BET_MATCH_UPDATE'); INSERT INTO messages VALUES(319,310102,'parse','transactions','{"supported":true,"tx_hash":"16462eac6c795cea6e5985ee063867d8c61ae24373df02048186d28118d25bae","tx_index":103}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(320,310102,'parse','blocks','{"block_index":310102,"ledger_hash":"b225c48fb4c40b2e0695991251f6d69217df6e00c01613e0a20f6a3e34f50d5b","messages_hash":"c3f16c9c50b71969ea4e21819eaf214b1e40316e91af4a3f3964a91b35808e6b","txlist_hash":"7d553f87ef9f2beea74631e2e6ec107522b9f4756f041e2ee40fa3946909b3dd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(321,310103,'insert','blocks','{"block_hash":"559a208afea6dd27b8bfeb031f1bd8f57182dcab6cf55c4089a6c49fb4744f17","block_index":310103,"block_time":310103000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(321,310102,'insert','blocks','{"block_hash":"559a208afea6dd27b8bfeb031f1bd8f57182dcab6cf55c4089a6c49fb4744f17","block_index":310103,"block_time":310103000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(322,310103,'insert','transactions','{"block_hash":"559a208afea6dd27b8bfeb031f1bd8f57182dcab6cf55c4089a6c49fb4744f17","block_index":310103,"block_time":310103000,"btc_amount":62000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":-99994375,"source":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","supported":true,"tx_hash":"65d4048700fb8ae03f321be93c6669b8497f506a1f43920f96d994f43358c35b","tx_index":104}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(323,310103,'insert','credits','{"address":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","asset":"XCP","block_index":310103,"calling_function":"burn","event":"65d4048700fb8ae03f321be93c6669b8497f506a1f43920f96d994f43358c35b","quantity":92999138821,"tx_index":104}',0,'CREDIT'); INSERT INTO messages VALUES(324,310103,'insert','burns','{"block_index":310103,"burned":62000000,"earned":92999138821,"source":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","status":"valid","tx_hash":"65d4048700fb8ae03f321be93c6669b8497f506a1f43920f96d994f43358c35b","tx_index":104}',0,'BURN'); INSERT INTO messages VALUES(325,310103,'parse','blocks','{"block_index":310103,"ledger_hash":"fc2a8ce8efc122e5cbd631998e611dc8707cfe0b8d3f6a531fe5bcc21c17feae","messages_hash":"d57ce83db250acc25efe3e0193a3ae93aa5e521eaf0063a745f538e82e0b6c3d","txlist_hash":"ece7991721b8e94950e2a9f41b9285b34be716340a7621b1c1528f8065e9ac28"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(326,310104,'insert','blocks','{"block_hash":"55b82e631b61d22a8524981ff3b5e3ab4ad7b732b7d1a06191064334b8f2dfd2","block_index":310104,"block_time":310104000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(326,310103,'insert','blocks','{"block_hash":"55b82e631b61d22a8524981ff3b5e3ab4ad7b732b7d1a06191064334b8f2dfd2","block_index":310104,"block_time":310104000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(327,310104,'insert','transactions','{"block_hash":"55b82e631b61d22a8524981ff3b5e3ab4ad7b732b7d1a06191064334b8f2dfd2","block_index":310104,"block_time":310104000,"btc_amount":62000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":-99994375,"source":"munimLLHjPhGeSU5rYB2HN79LJa8bRZr5b","supported":true,"tx_hash":"95332a7e3e2b04f2c10e3027327bfc31b686947fb05381e28903e3ff569bd4ff","tx_index":105}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(328,310104,'insert','credits','{"address":"munimLLHjPhGeSU5rYB2HN79LJa8bRZr5b","asset":"XCP","block_index":310104,"calling_function":"burn","event":"95332a7e3e2b04f2c10e3027327bfc31b686947fb05381e28903e3ff569bd4ff","quantity":92999130460,"tx_index":105}',0,'CREDIT'); INSERT INTO messages VALUES(329,310104,'insert','burns','{"block_index":310104,"burned":62000000,"earned":92999130460,"source":"munimLLHjPhGeSU5rYB2HN79LJa8bRZr5b","status":"valid","tx_hash":"95332a7e3e2b04f2c10e3027327bfc31b686947fb05381e28903e3ff569bd4ff","tx_index":105}',0,'BURN'); INSERT INTO messages VALUES(330,310104,'parse','blocks','{"block_index":310104,"ledger_hash":"b1a7115902d371d13889008320e52473cd5b34591bd657e372c0048df020012e","messages_hash":"b04d2d8cf335c953fa24a5e17662783dcc80794e937589a0dded13744a9c69ba","txlist_hash":"66dacde33bddb633552c94d9107669297fe26ccdcf482f9098f1e6c05f3d01e6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(331,310105,'insert','blocks','{"block_hash":"1d72cdf6c4a02a5f973e6eaa53c28e9e13014b4f5bb13f91621a911b27fe936a","block_index":310105,"block_time":310105000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(331,310104,'insert','blocks','{"block_hash":"1d72cdf6c4a02a5f973e6eaa53c28e9e13014b4f5bb13f91621a911b27fe936a","block_index":310105,"block_time":310105000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(332,310105,'insert','transactions','{"block_hash":"1d72cdf6c4a02a5f973e6eaa53c28e9e13014b4f5bb13f91621a911b27fe936a","block_index":310105,"block_time":310105000,"btc_amount":62000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":-99994375,"source":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","supported":true,"tx_hash":"e062d1ebf4cb71bd22d80c949b956f5286080838a7607ccf87945b2b3abfcafa","tx_index":106}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(333,310105,'insert','credits','{"address":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","asset":"XCP","block_index":310105,"calling_function":"burn","event":"e062d1ebf4cb71bd22d80c949b956f5286080838a7607ccf87945b2b3abfcafa","quantity":92999122099,"tx_index":106}',0,'CREDIT'); INSERT INTO messages VALUES(334,310105,'insert','burns','{"block_index":310105,"burned":62000000,"earned":92999122099,"source":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","status":"valid","tx_hash":"e062d1ebf4cb71bd22d80c949b956f5286080838a7607ccf87945b2b3abfcafa","tx_index":106}',0,'BURN'); INSERT INTO messages VALUES(335,310105,'parse','blocks','{"block_index":310105,"ledger_hash":"b5fcda12415e713fc81278b95515fe86ecc6beb5810e4f80eb9645f09870dab0","messages_hash":"2e336a7a4575cfab7289b78ebf57f67f09e3efa3a4bdeb2c9b9397deb3701c77","txlist_hash":"656d27bdbf841c33dd3c11253159dc5d8a6d7885db3174f4f9c6a8382d6a7209"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(336,310106,'insert','blocks','{"block_hash":"9d39cbe8c8a5357fc56e5c2f95bf132382ddad14cbc8abd54e549d58248140ff","block_index":310106,"block_time":310106000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(336,310105,'insert','blocks','{"block_hash":"9d39cbe8c8a5357fc56e5c2f95bf132382ddad14cbc8abd54e549d58248140ff","block_index":310106,"block_time":310106000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(337,310106,'insert','transactions','{"block_hash":"9d39cbe8c8a5357fc56e5c2f95bf132382ddad14cbc8abd54e549d58248140ff","block_index":310106,"block_time":310106000,"btc_amount":10000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":5625,"source":"mrPk7hTeZWjjSCrMTC2ET4SAUThQt7C4uK","supported":true,"tx_hash":"bbf0b9f6992755a3e371fb0c0b72f6828831e81c6f7ada6f95ba1104fb901ac3","tx_index":107}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(338,310106,'insert','credits','{"address":"mrPk7hTeZWjjSCrMTC2ET4SAUThQt7C4uK","asset":"XCP","block_index":310106,"calling_function":"burn","event":"bbf0b9f6992755a3e371fb0c0b72f6828831e81c6f7ada6f95ba1104fb901ac3","quantity":14999857,"tx_index":107}',0,'CREDIT'); INSERT INTO messages VALUES(339,310106,'insert','burns','{"block_index":310106,"burned":10000,"earned":14999857,"source":"mrPk7hTeZWjjSCrMTC2ET4SAUThQt7C4uK","status":"valid","tx_hash":"bbf0b9f6992755a3e371fb0c0b72f6828831e81c6f7ada6f95ba1104fb901ac3","tx_index":107}',0,'BURN'); INSERT INTO messages VALUES(340,310106,'parse','blocks','{"block_index":310106,"ledger_hash":"f3c98c954cf939951d8b24a257bc6b1bc152a6a0bcf6b580ac281c26bbf16499","messages_hash":"79e48332abdd115517204c76fc873417fc8a3da56e255bade91e6f8842c4f192","txlist_hash":"6138a4e92289d72dab6e43906e545dcc3d1475102b7f33195118de74a53fe576"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(341,310107,'insert','blocks','{"block_hash":"51cc04005e49fa49e661946a0e147240b0e5aac174252c96481ab7ddd5487435","block_index":310107,"block_time":310107000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(341,310106,'insert','blocks','{"block_hash":"51cc04005e49fa49e661946a0e147240b0e5aac174252c96481ab7ddd5487435","block_index":310107,"block_time":310107000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(342,310107,'insert','transactions','{"block_hash":"51cc04005e49fa49e661946a0e147240b0e5aac174252c96481ab7ddd5487435","block_index":310107,"block_time":310107000,"btc_amount":0,"data":"0000000c000000000000000100000000000000640000000000000064000000000000006400","destination":"","fee":6150,"source":"munimLLHjPhGeSU5rYB2HN79LJa8bRZr5b","supported":true,"tx_hash":"9834219d2825b4d85ca7ee0d75a5372d9d42ce75eb9144951fca1af5a25915ec","tx_index":108}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(343,310107,'insert','debits','{"action":"open dispenser","address":"munimLLHjPhGeSU5rYB2HN79LJa8bRZr5b","asset":"XCP","block_index":310107,"event":"9834219d2825b4d85ca7ee0d75a5372d9d42ce75eb9144951fca1af5a25915ec","quantity":100,"tx_index":108}',0,'DEBIT'); INSERT INTO messages VALUES(344,310107,'insert','dispensers','{"asset":"XCP","block_index":310107,"dispense_count":0,"escrow_quantity":100,"give_quantity":100,"give_remaining":100,"oracle_address":null,"origin":"munimLLHjPhGeSU5rYB2HN79LJa8bRZr5b","satoshirate":100,"source":"munimLLHjPhGeSU5rYB2HN79LJa8bRZr5b","status":0,"tx_hash":"9834219d2825b4d85ca7ee0d75a5372d9d42ce75eb9144951fca1af5a25915ec","tx_index":108}',0,'OPEN_DISPENSER'); INSERT INTO messages VALUES(345,310107,'parse','transactions','{"supported":true,"tx_hash":"9834219d2825b4d85ca7ee0d75a5372d9d42ce75eb9144951fca1af5a25915ec","tx_index":108}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(346,310107,'parse','blocks','{"block_index":310107,"ledger_hash":"a550df26b8dee075bee82fc59c44ce5cbf65fe9df10c60f3f3009faa2791c783","messages_hash":"110dd70ced22e1a1c91201c1c1ce0afc628885b2f2b3c785624b851983a71dc6","txlist_hash":"b30d22c6d7e8bf574e3b3e11d08bcb73c5853ba348e8688a25670a861d3f4e3a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(347,310108,'insert','blocks','{"block_hash":"8f2d3861aa42f8e75dc14a23d6046bd89feef0d81996b6e1adc2a2828fbc8b34","block_index":310108,"block_time":310108000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(347,310107,'insert','blocks','{"block_hash":"8f2d3861aa42f8e75dc14a23d6046bd89feef0d81996b6e1adc2a2828fbc8b34","block_index":310108,"block_time":310108000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(348,310108,'insert','transactions','{"block_hash":"8f2d3861aa42f8e75dc14a23d6046bd89feef0d81996b6e1adc2a2828fbc8b34","block_index":310108,"block_time":310108000,"btc_amount":31000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":5625,"source":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","supported":true,"tx_hash":"93c6d2499a0536c31c77a3db3fc9fc8456fbd0726c45b8f716af16f938727a73","tx_index":109}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(349,310108,'insert','credits','{"address":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","asset":"XCP","block_index":310108,"calling_function":"burn","event":"93c6d2499a0536c31c77a3db3fc9fc8456fbd0726c45b8f716af16f938727a73","quantity":46499548508,"tx_index":109}',0,'CREDIT'); INSERT INTO messages VALUES(350,310108,'insert','burns','{"block_index":310108,"burned":31000000,"earned":46499548508,"source":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","status":"valid","tx_hash":"93c6d2499a0536c31c77a3db3fc9fc8456fbd0726c45b8f716af16f938727a73","tx_index":109}',0,'BURN'); INSERT INTO messages VALUES(351,310108,'parse','blocks','{"block_index":310108,"ledger_hash":"e1d8c345c74760010223a823895471d3ad6a2db5c6a70b13850d5cd977414518","messages_hash":"fdaa97987f607fff62cd0459e4d261ba764a7ed75ea6ab1afb3ece06277216dd","txlist_hash":"d03bdcdbb4980ea415ab73c8e91a7fca7099c8c176d6bb4c2fdf72b6873175ae"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(352,310109,'insert','blocks','{"block_hash":"d23aaaae55e6a912eaaa8d20fe2a9ad4819fe9dc1ed58977265af58fad89d8f9","block_index":310109,"block_time":310109000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(352,310108,'insert','blocks','{"block_hash":"d23aaaae55e6a912eaaa8d20fe2a9ad4819fe9dc1ed58977265af58fad89d8f9","block_index":310109,"block_time":310109000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(353,310109,'insert','transactions','{"block_hash":"d23aaaae55e6a912eaaa8d20fe2a9ad4819fe9dc1ed58977265af58fad89d8f9","block_index":310109,"block_time":310109000,"btc_amount":0,"data":"0000001400078a8fe2e5e44100000000000003e8000000000000000000001050534820697373756564206173736574","destination":"","fee":6800,"source":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","supported":true,"tx_hash":"e8baf787b9e4636a3cad0ffeb62992ad7abb160dc6506af0546f566dc178de7e","tx_index":110}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(354,310109,'insert','debits','{"action":"issuance fee","address":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","asset":"XCP","block_index":310109,"event":"e8baf787b9e4636a3cad0ffeb62992ad7abb160dc6506af0546f566dc178de7e","quantity":50000000,"tx_index":110}',0,'DEBIT'); INSERT INTO messages VALUES(355,310109,'insert','assets','{"asset_id":"2122675428648001","asset_longname":null,"asset_name":"PAYTOSCRIPT","block_index":310109}',0,'ASSET_CREATION'); @@ -1324,25 +1324,25 @@ INSERT INTO messages VALUES(356,310109,'insert','issuances','{"asset":"PAYTOSCRI INSERT INTO messages VALUES(357,310109,'insert','credits','{"address":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","asset":"PAYTOSCRIPT","block_index":310109,"calling_function":"issuance","event":"e8baf787b9e4636a3cad0ffeb62992ad7abb160dc6506af0546f566dc178de7e","quantity":1000,"tx_index":110}',0,'CREDIT'); INSERT INTO messages VALUES(358,310109,'parse','transactions','{"supported":true,"tx_hash":"e8baf787b9e4636a3cad0ffeb62992ad7abb160dc6506af0546f566dc178de7e","tx_index":110}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(359,310109,'parse','blocks','{"block_index":310109,"ledger_hash":"8fb63d8460a222163d15eab76a61e383ffa251a175c16f209648d6782c304059","messages_hash":"bf0b49028ffbb1d91272975e819dd6ecba7847dafe7def099bb7119e99ee357b","txlist_hash":"cff81539539169771000a550581dbdf4d4d1fdabecfb9032342269ff5f100b61"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(360,310110,'insert','blocks','{"block_hash":"cecc8e4791bd3081995bd9fd67acb6b97415facfd2b68f926a70b22d9a258382","block_index":310110,"block_time":310110000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(360,310109,'insert','blocks','{"block_hash":"cecc8e4791bd3081995bd9fd67acb6b97415facfd2b68f926a70b22d9a258382","block_index":310110,"block_time":310110000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(361,310110,'insert','transactions','{"block_hash":"cecc8e4791bd3081995bd9fd67acb6b97415facfd2b68f926a70b22d9a258382","block_index":310110,"block_time":310110000,"btc_amount":5430,"data":"00000000000000a25be34b660000000005f5e100","destination":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","fee":7650,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"f6a0f819e899b407cbfa07b4eff3d58902af3899abfbaa47d5f31d5b398e76e7","tx_index":111}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(362,310110,'insert','debits','{"action":"send","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"DIVISIBLE","block_index":310110,"event":"f6a0f819e899b407cbfa07b4eff3d58902af3899abfbaa47d5f31d5b398e76e7","quantity":100000000,"tx_index":111}',0,'DEBIT'); INSERT INTO messages VALUES(363,310110,'insert','credits','{"address":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","asset":"DIVISIBLE","block_index":310110,"calling_function":"send","event":"f6a0f819e899b407cbfa07b4eff3d58902af3899abfbaa47d5f31d5b398e76e7","quantity":100000000,"tx_index":111}',0,'CREDIT'); INSERT INTO messages VALUES(364,310110,'insert','sends','{"asset":"DIVISIBLE","block_index":310110,"destination":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","quantity":100000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"f6a0f819e899b407cbfa07b4eff3d58902af3899abfbaa47d5f31d5b398e76e7","tx_index":111}',0,'SEND'); INSERT INTO messages VALUES(365,310110,'parse','transactions','{"supported":true,"tx_hash":"f6a0f819e899b407cbfa07b4eff3d58902af3899abfbaa47d5f31d5b398e76e7","tx_index":111}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(366,310110,'parse','blocks','{"block_index":310110,"ledger_hash":"250f7b5c6f00bf06c9cd4de8dea0b8166e2decf093910ea32eabd615b910e7e6","messages_hash":"9bb53822ba08d1625a3eacd2e25ddb87d578d63c081b96395b39a13322c581b4","txlist_hash":"d6853c803a38efdd5190401e94244333cb4f46752a2868d4a03e6d7d6c8c2bad"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(367,310111,'insert','blocks','{"block_hash":"fde71b9756d5ba0b6d8b230ee885af01f9c4461a55dbde8678279166a21b20ae","block_index":310111,"block_time":310111000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(367,310110,'insert','blocks','{"block_hash":"fde71b9756d5ba0b6d8b230ee885af01f9c4461a55dbde8678279166a21b20ae","block_index":310111,"block_time":310111000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(368,310111,'insert','transactions','{"block_hash":"fde71b9756d5ba0b6d8b230ee885af01f9c4461a55dbde8678279166a21b20ae","block_index":310111,"block_time":310111000,"btc_amount":0,"data":"0000001e52bb33023ff0000000000000004c4b4009556e69742054657374","destination":"","fee":5975,"source":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","supported":true,"tx_hash":"510f6feb902159622d83f64eae590a4fec88989869a20caf5804c313aa5e0186","tx_index":112}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(369,310111,'insert','broadcasts','{"block_index":310111,"fee_fraction_int":5000000,"locked":false,"source":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","status":"valid","text":"Unit Test","timestamp":1388000002,"tx_hash":"510f6feb902159622d83f64eae590a4fec88989869a20caf5804c313aa5e0186","tx_index":112,"value":1.0}',0,'BROADCAST'); INSERT INTO messages VALUES(370,310111,'parse','transactions','{"supported":true,"tx_hash":"510f6feb902159622d83f64eae590a4fec88989869a20caf5804c313aa5e0186","tx_index":112}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(371,310111,'parse','blocks','{"block_index":310111,"ledger_hash":"0c3c3d099bf08803f67c2a77d0d67779674d1063cc72d8794b8fe62a55049d75","messages_hash":"65d2ccd2975d2480ed63306ab9054ffdbb76fc442ed4c7dad2aac7428d2506e4","txlist_hash":"9cab90baa72446a36a7c176e82eed32ce968f96b0f29067b240a10a71ed95808"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(372,310112,'insert','blocks','{"block_hash":"5b06f69bfdde1083785cf68ebc2211b464839033c30a099d3227b490bf3ab251","block_index":310112,"block_time":310112000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(372,310111,'insert','blocks','{"block_hash":"5b06f69bfdde1083785cf68ebc2211b464839033c30a099d3227b490bf3ab251","block_index":310112,"block_time":310112000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(373,310112,'insert','transactions','{"block_hash":"5b06f69bfdde1083785cf68ebc2211b464839033c30a099d3227b490bf3ab251","block_index":310112,"block_time":310112000,"btc_amount":5430,"data":"00000028000352bb33c8000000000000000a000000000000000a0000000000000000000013b0000003e8","destination":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","fee":7124,"source":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","supported":true,"tx_hash":"d79b590e4ec3e74cbc3eb4d0f956ce7abb0e3af2ccac85ff90ed8acf13f2e048","tx_index":113}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(374,310112,'insert','debits','{"action":"bet","address":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","asset":"XCP","block_index":310112,"event":"d79b590e4ec3e74cbc3eb4d0f956ce7abb0e3af2ccac85ff90ed8acf13f2e048","quantity":10,"tx_index":113}',0,'DEBIT'); INSERT INTO messages VALUES(375,310112,'insert','bets','{"bet_type":3,"block_index":310112,"counterwager_quantity":10,"counterwager_remaining":10,"deadline":1388000200,"expiration":1000,"expire_index":311112,"fee_fraction_int":5000000.0,"feed_address":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","leverage":5040,"source":"2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy","status":"open","target_value":0.0,"tx_hash":"d79b590e4ec3e74cbc3eb4d0f956ce7abb0e3af2ccac85ff90ed8acf13f2e048","tx_index":113,"wager_quantity":10,"wager_remaining":10}',0,'OPEN_BET'); INSERT INTO messages VALUES(376,310112,'parse','transactions','{"supported":true,"tx_hash":"d79b590e4ec3e74cbc3eb4d0f956ce7abb0e3af2ccac85ff90ed8acf13f2e048","tx_index":113}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(377,310112,'parse','blocks','{"block_index":310112,"ledger_hash":"557fdd1240793f8607a2b4c638ce800d5260c2adb294aac95d6c5eab7e98c3a9","messages_hash":"8600ea90c90218d55e9aec3aedcfb652432fc0f8c2bfde19ca62f768d1653101","txlist_hash":"4fc0df4832258d430e645f1950407e19e72ea27d28b8ae1851333e8e8718086b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(378,310113,'insert','blocks','{"block_hash":"63914cf376d3076b697b9234810dfc084ed5a885d5cd188dd5462560da25d5e7","block_index":310113,"block_time":310113000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(378,310112,'insert','blocks','{"block_hash":"63914cf376d3076b697b9234810dfc084ed5a885d5cd188dd5462560da25d5e7","block_index":310113,"block_time":310113000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(379,310113,'insert','transactions','{"block_hash":"63914cf376d3076b697b9234810dfc084ed5a885d5cd188dd5462560da25d5e7","block_index":310113,"block_time":310113000,"btc_amount":0,"data":"00000014000038fedf6d2c6900000000000003e8010000000000000000000c4c6f636b6564206173736574","destination":"","fee":6800,"source":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","supported":true,"tx_hash":"34bce6f409758b3d6fd13282a99b277ef1fdf44a1025d2901075cac0249dbc63","tx_index":114}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(380,310113,'insert','debits','{"action":"issuance fee","address":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","asset":"XCP","block_index":310113,"event":"34bce6f409758b3d6fd13282a99b277ef1fdf44a1025d2901075cac0249dbc63","quantity":50000000,"tx_index":114}',0,'DEBIT'); INSERT INTO messages VALUES(381,310113,'insert','assets','{"asset_id":"62667321322601","asset_longname":null,"asset_name":"LOCKEDPREV","block_index":310113}',0,'ASSET_CREATION'); @@ -1350,804 +1350,804 @@ INSERT INTO messages VALUES(382,310113,'insert','issuances','{"asset":"LOCKEDPRE INSERT INTO messages VALUES(383,310113,'insert','credits','{"address":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","asset":"LOCKEDPREV","block_index":310113,"calling_function":"issuance","event":"34bce6f409758b3d6fd13282a99b277ef1fdf44a1025d2901075cac0249dbc63","quantity":1000,"tx_index":114}',0,'CREDIT'); INSERT INTO messages VALUES(384,310113,'parse','transactions','{"supported":true,"tx_hash":"34bce6f409758b3d6fd13282a99b277ef1fdf44a1025d2901075cac0249dbc63","tx_index":114}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(385,310113,'parse','blocks','{"block_index":310113,"ledger_hash":"4ecad4a5c8e9b54101c4a037d6c86a7eb36d3cf0503e60a1bf13c5a4196c5989","messages_hash":"aaf7654cbbdd946eeec20b756019f62d012569d28e633380b50e501ea11d37d9","txlist_hash":"baf1f86b3145fd8dc33aa2fcb2e882cf69ffadee81e8412ed2092c634934709c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(386,310114,'insert','blocks','{"block_hash":"24fc2dded4f811eff58b32cda85d90fb5773e81b9267e9a03c359bc730d82283","block_index":310114,"block_time":310114000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(386,310113,'insert','blocks','{"block_hash":"24fc2dded4f811eff58b32cda85d90fb5773e81b9267e9a03c359bc730d82283","block_index":310114,"block_time":310114000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(387,310114,'insert','transactions','{"block_hash":"24fc2dded4f811eff58b32cda85d90fb5773e81b9267e9a03c359bc730d82283","block_index":310114,"block_time":310114000,"btc_amount":0,"data":"00000014000038fedf6d2c69000000000000000001000000000000000000044c4f434b","destination":"","fee":6800,"source":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","supported":true,"tx_hash":"025b810fce7735c5869b90846007e5f604f60c1beda4c1695f1c7fbec3d44bc2","tx_index":115}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(388,310114,'insert','debits','{"action":"issuance fee","address":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","asset":"XCP","block_index":310114,"event":"025b810fce7735c5869b90846007e5f604f60c1beda4c1695f1c7fbec3d44bc2","quantity":0,"tx_index":115}',0,'DEBIT'); INSERT INTO messages VALUES(389,310114,'insert','issuances','{"asset":"LOCKEDPREV","asset_longname":null,"block_index":310114,"call_date":0,"call_price":0.0,"callable":false,"description":"Locked asset","divisible":true,"fee_paid":0,"issuer":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","locked":true,"quantity":0,"reset":false,"source":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","status":"valid","transfer":false,"tx_hash":"025b810fce7735c5869b90846007e5f604f60c1beda4c1695f1c7fbec3d44bc2","tx_index":115}',0,'ASSET_ISSUANCE'); INSERT INTO messages VALUES(390,310114,'parse','transactions','{"supported":true,"tx_hash":"025b810fce7735c5869b90846007e5f604f60c1beda4c1695f1c7fbec3d44bc2","tx_index":115}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(391,310114,'parse','blocks','{"block_index":310114,"ledger_hash":"00380ec3118a5e8f9cab403d10870dd5bc339421297fcb6196a3112d70541ecd","messages_hash":"1dce35ef471c90ab925590429d3bc5d7c2987aedf5acc0ea1b3be46e88f0158e","txlist_hash":"22e3851c91f780c0152549b24228d0dab3542c2632b633995c0d8dcfd8e26601"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(392,310115,'insert','blocks','{"block_hash":"a632d67ff5f832fe9c3c675f855f08a4969c6d78c0211e71b2a24fe04be5656a","block_index":310115,"block_time":310115000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(392,310114,'insert','blocks','{"block_hash":"a632d67ff5f832fe9c3c675f855f08a4969c6d78c0211e71b2a24fe04be5656a","block_index":310115,"block_time":310115000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(393,310115,'insert','transactions','{"block_hash":"a632d67ff5f832fe9c3c675f855f08a4969c6d78c0211e71b2a24fe04be5656a","block_index":310115,"block_time":310115000,"btc_amount":0,"data":"00000014000038fedf6d2c69000000000000000001000000000000000000076368616e676564","destination":"","fee":6800,"source":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","supported":true,"tx_hash":"4ab1a24283c1dbfc710be7b215d64e8a4510ee97af019e210049c25773b50beb","tx_index":116}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(394,310115,'insert','debits','{"action":"issuance fee","address":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","asset":"XCP","block_index":310115,"event":"4ab1a24283c1dbfc710be7b215d64e8a4510ee97af019e210049c25773b50beb","quantity":0,"tx_index":116}',0,'DEBIT'); INSERT INTO messages VALUES(395,310115,'insert','issuances','{"asset":"LOCKEDPREV","asset_longname":null,"block_index":310115,"call_date":0,"call_price":0.0,"callable":false,"description":"changed","divisible":true,"fee_paid":0,"issuer":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","locked":false,"quantity":0,"reset":false,"source":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","status":"valid","transfer":false,"tx_hash":"4ab1a24283c1dbfc710be7b215d64e8a4510ee97af019e210049c25773b50beb","tx_index":116}',0,'ASSET_ISSUANCE'); INSERT INTO messages VALUES(396,310115,'parse','transactions','{"supported":true,"tx_hash":"4ab1a24283c1dbfc710be7b215d64e8a4510ee97af019e210049c25773b50beb","tx_index":116}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(397,310115,'parse','blocks','{"block_index":310115,"ledger_hash":"0acd3a07c5df54e883ff9871852c961b00771d3f4afccb3b1941d0b1c7b300cc","messages_hash":"2d466dd469c4531675c2190d0e4d9fb2daad5b33426b3d22058ed9770cdae63f","txlist_hash":"cf921f50b98df4ec37f2a9803315a798198507adcbfd8fd54e6a9bc539cc8f41"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(398,310116,'insert','blocks','{"block_hash":"8495ba36b331473c4f3529681a118a4cc4fa4d51cd9b8dccb1f13e5ef841dd84","block_index":310116,"block_time":310116000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(398,310115,'insert','blocks','{"block_hash":"8495ba36b331473c4f3529681a118a4cc4fa4d51cd9b8dccb1f13e5ef841dd84","block_index":310116,"block_time":310116000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(399,310116,'insert','transactions','{"block_hash":"8495ba36b331473c4f3529681a118a4cc4fa4d51cd9b8dccb1f13e5ef841dd84","block_index":310116,"block_time":310116000,"btc_amount":62000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":5625,"source":"tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx","supported":true,"tx_hash":"27929c4fcad307a76ea7da34dd2691084f678a22ee43ce7f3842b78730ee08f9","tx_index":117}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(400,310116,'insert','credits','{"address":"tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx","asset":"XCP","block_index":310116,"calling_function":"burn","event":"27929c4fcad307a76ea7da34dd2691084f678a22ee43ce7f3842b78730ee08f9","quantity":92999030129,"tx_index":117}',0,'CREDIT'); INSERT INTO messages VALUES(401,310116,'insert','burns','{"block_index":310116,"burned":62000000,"earned":92999030129,"source":"tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx","status":"valid","tx_hash":"27929c4fcad307a76ea7da34dd2691084f678a22ee43ce7f3842b78730ee08f9","tx_index":117}',0,'BURN'); INSERT INTO messages VALUES(402,310116,'parse','blocks','{"block_index":310116,"ledger_hash":"6c6845d3be70cbe9a71c33227983f695c96877aac6d3a8d6a6839760b4691d25","messages_hash":"c94709a97d76eda00339d8b9313c132c7124fedcbb4f13f7fc65521eec5fd63e","txlist_hash":"a7e01a910cc919588be3b0c19c4bb7c36499b0a9b0347834d40fbb54fdf05fb6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(403,310117,'insert','blocks','{"block_hash":"978a3eac44917b82d009332797e2b6fe64c7ce313c0f15bfd9b7bb68e4f35a71","block_index":310117,"block_time":310117000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(403,310116,'insert','blocks','{"block_hash":"978a3eac44917b82d009332797e2b6fe64c7ce313c0f15bfd9b7bb68e4f35a71","block_index":310117,"block_time":310117000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(404,310117,'parse','blocks','{"block_index":310117,"ledger_hash":"0465a90ff545d58e69c07c204160360bcc6fba5cc60fb81d7e6e389d9ff8133e","messages_hash":"d882f745bd8f7edc17b13d0807c8d3cfccfbd9dd6678913bd354e2fe5334507f","txlist_hash":"1100b7084683079d36f9ec6e4cb1ec457ae4c45941cdbaa0f4d53bc458e2fa9f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(405,310118,'insert','blocks','{"block_hash":"02487d8bd4dadabd06a44fdeb67616e6830c3556ec10faad40a42416039f4723","block_index":310118,"block_time":310118000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(405,310117,'insert','blocks','{"block_hash":"02487d8bd4dadabd06a44fdeb67616e6830c3556ec10faad40a42416039f4723","block_index":310118,"block_time":310118000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(406,310118,'parse','blocks','{"block_index":310118,"ledger_hash":"011ed3df8ae72a02b686e98aa8db07c973e1e12c2ac09891ba90d783ae63161f","messages_hash":"aefb56011c816cb6b5e7a388a109f991957fd957de7ecf9c4f0ea8f7758098db","txlist_hash":"7ed056a59c2b15a2d082f75c8728ee1e7f9b0eea6cb56b37f41319b115e39771"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(407,310119,'insert','blocks','{"block_hash":"6d6be3478c874c27f5d354c9375884089511b1aaaa3cc3421759d8e3aaeb5481","block_index":310119,"block_time":310119000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(407,310118,'insert','blocks','{"block_hash":"6d6be3478c874c27f5d354c9375884089511b1aaaa3cc3421759d8e3aaeb5481","block_index":310119,"block_time":310119000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(408,310119,'parse','blocks','{"block_index":310119,"ledger_hash":"a6620b1b6a5b1f54fe6a8076fc35f0f3ce15315e9f549f5ff3fa0f5b6094919f","messages_hash":"0bb1e98956bc350cf8101125e6147253e60978ddeef6b931e13c772056153ce6","txlist_hash":"1312871691c685ced39676d4d4bd8825d2109587d1ec36f2dadc50f68b4d9cca"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(409,310120,'insert','blocks','{"block_hash":"2bba7fd459ea76fe54d6d7faf437c31af8253438d5685e803c71484c53887deb","block_index":310120,"block_time":310120000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(409,310119,'insert','blocks','{"block_hash":"2bba7fd459ea76fe54d6d7faf437c31af8253438d5685e803c71484c53887deb","block_index":310120,"block_time":310120000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(410,310120,'parse','blocks','{"block_index":310120,"ledger_hash":"e38e2aa0bf8831b90e69b40c78d4b7d41bc564527451b5f9b332bb0beb54c923","messages_hash":"7b105baade40f901ef31f2f73cd8503ee209f79db870e9bd51502f7260c074f8","txlist_hash":"1901f4d80a526969a544b68b1a695f07aa078ad719b8803c0b7543fcb4a974d6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(411,310121,'insert','blocks','{"block_hash":"9b3ea991d6c2fe58906bdc75ba6a2095dcb7f00cfdd6108ac75c938f93c94ee7","block_index":310121,"block_time":310121000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(411,310120,'insert','blocks','{"block_hash":"9b3ea991d6c2fe58906bdc75ba6a2095dcb7f00cfdd6108ac75c938f93c94ee7","block_index":310121,"block_time":310121000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(412,310121,'parse','blocks','{"block_index":310121,"ledger_hash":"5b988c8ad133bb5ff5ac1ee4ad0a6a4fd431247db373e43c9be2a020520f438b","messages_hash":"124d2805fa3144fd091b2ef1c80ce44f9895f9ec4a44e8c7b48237f1282b1e35","txlist_hash":"9921b651b8ca004602b16f95d76b2ea76f03456d9a978abb02bb340f360df7a7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(413,310122,'insert','blocks','{"block_hash":"d31b927c46e8f9ba2ccfb02f11a72179e08474bdd1b60dd3dcfd2e91a9ea2932","block_index":310122,"block_time":310122000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(413,310121,'insert','blocks','{"block_hash":"d31b927c46e8f9ba2ccfb02f11a72179e08474bdd1b60dd3dcfd2e91a9ea2932","block_index":310122,"block_time":310122000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(414,310122,'parse','blocks','{"block_index":310122,"ledger_hash":"70ddab8f1d6283ce5a054650dbcd02d7ad4ca9c35de7bed920c2f266bc092070","messages_hash":"eeac27ff4665134ac9db123eed51a6ebeb9f66b830282684cf14b80fa9ad4018","txlist_hash":"a45cd1eea6626efa3af3dcd3c89782c50cc3b683c1b22249dc67d288e56aeb17"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(415,310123,'insert','blocks','{"block_hash":"be6d35019a923fcef1125a27387d27237755c136f4926c5eddbf150402ea2bbd","block_index":310123,"block_time":310123000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(415,310122,'insert','blocks','{"block_hash":"be6d35019a923fcef1125a27387d27237755c136f4926c5eddbf150402ea2bbd","block_index":310123,"block_time":310123000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(416,310123,'parse','blocks','{"block_index":310123,"ledger_hash":"3670feebcf979edce175ad5b296a4c88fd7fc6bdc251dda84d487b1b092e41dd","messages_hash":"0d89c488b635238845ad30bdc78ec4191561296f57240b2728a3396900f69949","txlist_hash":"78c648296fcc7856757b990a92cf9512c61d180b08d451b63ed4e796d051d338"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(417,310124,'insert','blocks','{"block_hash":"0984b4a908f1a7dac9dcd94da1ee451e367cc6f3216ee8cdee15eae5d0700810","block_index":310124,"block_time":310124000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(417,310123,'insert','blocks','{"block_hash":"0984b4a908f1a7dac9dcd94da1ee451e367cc6f3216ee8cdee15eae5d0700810","block_index":310124,"block_time":310124000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(418,310124,'parse','blocks','{"block_index":310124,"ledger_hash":"9883fff318e7cf9021fb4cc39261840f682e8adabb934549dbae2a10d2a71de3","messages_hash":"6df82c4ffb3e630f9abd9b4f4577221f22a669a0bd985620fec81c585f654797","txlist_hash":"c58aaf910fe01fd9ba6a892ea421c0933f4cebec80c6d2d556accc81102428d3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(419,310125,'insert','blocks','{"block_hash":"cc28d39365904b2f91276d09fae040adb1bbbfd4d37d8c329fced276dc52c6a6","block_index":310125,"block_time":310125000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(419,310124,'insert','blocks','{"block_hash":"cc28d39365904b2f91276d09fae040adb1bbbfd4d37d8c329fced276dc52c6a6","block_index":310125,"block_time":310125000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(420,310125,'parse','blocks','{"block_index":310125,"ledger_hash":"1840685242f9090297d4b432e305e4a093f90faa0b673953b648fbed948f31b6","messages_hash":"8cb8ff5c4c38c9c0fba5186c78e3c57041831ddc55b169a74995edce686de946","txlist_hash":"3d1e4c3a02456d7f79402a89f6a39dcb235fde15b275a762197b70e643d29e25"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(421,310126,'insert','blocks','{"block_hash":"c9d6c2bd3eeb87f3f1033a13de8255a56445341c920a6a0ee2fb030877106797","block_index":310126,"block_time":310126000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(421,310125,'insert','blocks','{"block_hash":"c9d6c2bd3eeb87f3f1033a13de8255a56445341c920a6a0ee2fb030877106797","block_index":310126,"block_time":310126000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(422,310126,'parse','blocks','{"block_index":310126,"ledger_hash":"1a83f417c18439cd3c6269626c44b480317290f0c27a9b9f883a01653de69272","messages_hash":"9fd0630d7ebf232470cd1a8c7e051bbcdb752b88598aa90bec029fb7f118a128","txlist_hash":"7cde633cf5f7bc1176a3faa6ad03a449d3fb0d21dcce5885d2a37b81448a2ca5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(423,310127,'insert','blocks','{"block_hash":"c952f369e2b3317725b4b73ba1922b84af881bd59054be94406a5d9bbb106904","block_index":310127,"block_time":310127000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(423,310126,'insert','blocks','{"block_hash":"c952f369e2b3317725b4b73ba1922b84af881bd59054be94406a5d9bbb106904","block_index":310127,"block_time":310127000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(424,310127,'parse','blocks','{"block_index":310127,"ledger_hash":"094c53dfd00b5004d074987dba90a6c9c47841d01041d0aeb61923c48315d1bb","messages_hash":"fc7ec51fc69f7284dbd6df219ff906253036d1696f5518d346fe5a1997bbd05c","txlist_hash":"0ac0ddcc5c45d4d709d9070814832bfa2339eaf5edbed98232cda4b1731e5478"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(425,310128,'insert','blocks','{"block_hash":"990b0d3575caf5909286b9701ece586338067fbd35357fec7d6a54c6a6120079","block_index":310128,"block_time":310128000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(425,310127,'insert','blocks','{"block_hash":"990b0d3575caf5909286b9701ece586338067fbd35357fec7d6a54c6a6120079","block_index":310128,"block_time":310128000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(426,310128,'parse','blocks','{"block_index":310128,"ledger_hash":"28ad1365daaadc866e79b6b1a555fa31bd804a85827d958cebb9d29511f78e19","messages_hash":"c726eba0cec90d465a44ede024b1f8dc58063711870de6e82d1424ffa23f4081","txlist_hash":"aa9a25819899fc8948c4906673cfc8128c0a98417db8fe659098d28ca12e3786"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(427,310129,'insert','blocks','{"block_hash":"fa8a7d674a9a3e4b40053cf3b819385a71831eec2f119a0f0640c6870ca1dddc","block_index":310129,"block_time":310129000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(427,310128,'insert','blocks','{"block_hash":"fa8a7d674a9a3e4b40053cf3b819385a71831eec2f119a0f0640c6870ca1dddc","block_index":310129,"block_time":310129000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(428,310129,'parse','blocks','{"block_index":310129,"ledger_hash":"61587f9b5d05f8f553f0a4f580f38a140edcf7d9facb13c542865f5ec586a32c","messages_hash":"f0bfe24dec959d07b2b68a79c3c85caf68911d384ef64b4244b61fb86aa21eb3","txlist_hash":"ca3752868d963f0c165166928139cb078aefd0ebcbd9ab8f182c631ff941a56b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(429,310130,'insert','blocks','{"block_hash":"d3046e8e8ab77a67bf0629a3bab0bea4975631d52099d2ddc9c9fa0860522721","block_index":310130,"block_time":310130000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(429,310129,'insert','blocks','{"block_hash":"d3046e8e8ab77a67bf0629a3bab0bea4975631d52099d2ddc9c9fa0860522721","block_index":310130,"block_time":310130000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(430,310130,'parse','blocks','{"block_index":310130,"ledger_hash":"1ee8c39657890ac946e2aac5409147cdbf1b0004db1f00d997cf45452596f781","messages_hash":"c9d741a97b59ad670227903d4a4b5f63048712721e6ee4a59e6593e3a06a4514","txlist_hash":"bb38c9be1ef6ce22f1f14319cb3e1385d70fc63f7d0b2d80789c9af018baaa71"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(431,310131,'insert','blocks','{"block_hash":"d6b4357496bc2c42b58a7d1260a3615bfdb86e2ce68cd20914ef3dd3c0cdd34d","block_index":310131,"block_time":310131000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(431,310130,'insert','blocks','{"block_hash":"d6b4357496bc2c42b58a7d1260a3615bfdb86e2ce68cd20914ef3dd3c0cdd34d","block_index":310131,"block_time":310131000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(432,310131,'parse','blocks','{"block_index":310131,"ledger_hash":"aee45272e68725a2746582f1847582eb9808289d3deca144f8c6cb43bc4f42e6","messages_hash":"eb64baddde8b82bc629227449b9f5ac4cc4adab4b387ad9a2812591de19d6703","txlist_hash":"69fba2b86abed1e740d45d33ec1bed7d2bf7de0f3bd9633959bfe77a21dd7aeb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(433,310132,'insert','blocks','{"block_hash":"1b95a691bf4abf92f0dde901e1152cc5bd87a792d4b42613655e4046a57ab818","block_index":310132,"block_time":310132000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(433,310131,'insert','blocks','{"block_hash":"1b95a691bf4abf92f0dde901e1152cc5bd87a792d4b42613655e4046a57ab818","block_index":310132,"block_time":310132000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(434,310132,'parse','blocks','{"block_index":310132,"ledger_hash":"a3fe51c1d168ed726a78b72db61175f2abb07ea6c614b2886f3054cdd1a858fe","messages_hash":"ff03eb6a337397b372d03eed981a03eb5f3f9565f66bb943bc1e9fb931a3a298","txlist_hash":"352b00e4db389d411377c2302ecf272f97268e953c30d0976a5d12bffc5a17f7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(435,310133,'insert','blocks','{"block_hash":"1029c14051faabf90641371a82f9e2352eaa3d6b1da66737fcf447568ca4ec51","block_index":310133,"block_time":310133000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(435,310132,'insert','blocks','{"block_hash":"1029c14051faabf90641371a82f9e2352eaa3d6b1da66737fcf447568ca4ec51","block_index":310133,"block_time":310133000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(436,310133,'parse','blocks','{"block_index":310133,"ledger_hash":"626743e51b462163f23f22079d672379def21382fd88f9155ddd453ca3d633ef","messages_hash":"5fe7e9c01410af91855efed43e8f9a44d9eb0ef53d2fe80c1d88581285c86df0","txlist_hash":"1a7a1af397c6619b629eba7fdef0f0ea2d737e673d182fe985421dee61d0c63a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(437,310134,'insert','blocks','{"block_hash":"1748478069b32162affa59105257d81ef9d78aee27c626e7b24d11beb2831398","block_index":310134,"block_time":310134000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(437,310133,'insert','blocks','{"block_hash":"1748478069b32162affa59105257d81ef9d78aee27c626e7b24d11beb2831398","block_index":310134,"block_time":310134000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(438,310134,'parse','blocks','{"block_index":310134,"ledger_hash":"4b6e3202cae46fa80222e3ddec001213062ab76b8848eaaf4ab73f44bd84ac55","messages_hash":"33874759d6fdcf012b2fc2b57d21fa0226cb3e18d14194500f282f3b11280f76","txlist_hash":"855a47de54b979a3d958a921c2679825084193b9f1eb0fa56393e0186fb1b440"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(439,310135,'insert','blocks','{"block_hash":"d128d3469b1a5f8fb43e64b40f8a394945d1eb2f19ccbac2603f7044a4097e4f","block_index":310135,"block_time":310135000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(439,310134,'insert','blocks','{"block_hash":"d128d3469b1a5f8fb43e64b40f8a394945d1eb2f19ccbac2603f7044a4097e4f","block_index":310135,"block_time":310135000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(440,310135,'parse','blocks','{"block_index":310135,"ledger_hash":"e32784cedeadac39bb292da2c5eaffc983f416e0bf387978691e4c0fa5b1715a","messages_hash":"359ed3a20d949167d5d711db7a275c8e9a410f5edcc76a0bc1e277d1eb563216","txlist_hash":"80e68a8a303975543781e760be8d8b151206fb0335d3e0f5c2821d3e482b0ef0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(441,310136,'insert','blocks','{"block_hash":"6ec490aaffe2c222a9d6876a18d1c3d385c742ff4c12d1334613a54042a543a5","block_index":310136,"block_time":310136000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(441,310135,'insert','blocks','{"block_hash":"6ec490aaffe2c222a9d6876a18d1c3d385c742ff4c12d1334613a54042a543a5","block_index":310136,"block_time":310136000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(442,310136,'parse','blocks','{"block_index":310136,"ledger_hash":"93c67fdabd991708d1e35dabbdf7acb4e928763eeb817b32a79cd0bdb414fd2a","messages_hash":"d8091e8da964d953066d4973a4212788f9ca3b47788454f693a9a9557d8370f0","txlist_hash":"5fd1f9311646bed047ec4ac1d5aa5c74d68d26ddf6bdec14f2f53f4cb9c1f6b1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(443,310137,'insert','blocks','{"block_hash":"7b44f07e233498303a57e5350f366b767809f1a3426d57b1b754dc16aba76900","block_index":310137,"block_time":310137000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(443,310136,'insert','blocks','{"block_hash":"7b44f07e233498303a57e5350f366b767809f1a3426d57b1b754dc16aba76900","block_index":310137,"block_time":310137000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(444,310137,'parse','blocks','{"block_index":310137,"ledger_hash":"8a43d01155ba47b8b1311c41d5a57112198857701c2970d0fd373da04ef4e585","messages_hash":"2cd10f30db70185a0aa3a4e3b085a99f9b68ddedea747d25a09fe43085873fd7","txlist_hash":"d1f1a4a5fb78621aa1be58d32795feef8ac82572c34a694bf6b0b8c3c73ba7d6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(445,310138,'insert','blocks','{"block_hash":"d2d658ccbf9baa89c32659e8b6c25b640af4b9b2f28f9d40baae840206402ab5","block_index":310138,"block_time":310138000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(445,310137,'insert','blocks','{"block_hash":"d2d658ccbf9baa89c32659e8b6c25b640af4b9b2f28f9d40baae840206402ab5","block_index":310138,"block_time":310138000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(446,310138,'parse','blocks','{"block_index":310138,"ledger_hash":"4acf0244f3188f60152acc8ca30dcaeadf12e6669b15377c81b7e6dc3c8892b6","messages_hash":"0eb29408989eb9c5a38a5a2ef7808a99f649cd05a3d641f6e2d652732884d6d7","txlist_hash":"645be1bed53d63c268cd21d99a914aa4268b5a357dafa57f706075a66e42f948"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(447,310139,'insert','blocks','{"block_hash":"b2c6fb61f2ae0b9d75d18fce4c52a53b1d24772b1ad66c51ca51090210527d46","block_index":310139,"block_time":310139000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(447,310138,'insert','blocks','{"block_hash":"b2c6fb61f2ae0b9d75d18fce4c52a53b1d24772b1ad66c51ca51090210527d46","block_index":310139,"block_time":310139000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(448,310139,'parse','blocks','{"block_index":310139,"ledger_hash":"2d77bdd47ed1b3be1c2edf41473bd5eb707d06dab33717b01c4a227f9855d73d","messages_hash":"86088a65b7c10dc88153276f05db07d1fb4f6d4ad707c5a4a9875e739782e2cc","txlist_hash":"c1e0ab9fe21f807be3431a5d28c048b7f5c49ee5cfba7b9a0a837d1fa5c90f4c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(449,310140,'insert','blocks','{"block_hash":"edddddea90e07a466298219fd7f5a88975f1213289f7c434ed47152af6b68ebb","block_index":310140,"block_time":310140000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(449,310139,'insert','blocks','{"block_hash":"edddddea90e07a466298219fd7f5a88975f1213289f7c434ed47152af6b68ebb","block_index":310140,"block_time":310140000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(450,310140,'parse','blocks','{"block_index":310140,"ledger_hash":"277c0c6dd1c505dc6f9a222c737296396569d8e007c4b9a42582f108e90fa624","messages_hash":"5ff093890b48f2b0ad5d1b99f633fccab79c3014a7f47729399d07e595cdfd45","txlist_hash":"ab9a8224e0e3f8f728b56fd3ff40d960d9d336b2743932053b2419423223f2ac"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(451,310141,'insert','blocks','{"block_hash":"b5b71d2a271bd638561c56f4ffbe94d6086debaaa86bfeb02ef0d71339310709","block_index":310141,"block_time":310141000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(451,310140,'insert','blocks','{"block_hash":"b5b71d2a271bd638561c56f4ffbe94d6086debaaa86bfeb02ef0d71339310709","block_index":310141,"block_time":310141000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(452,310141,'parse','blocks','{"block_index":310141,"ledger_hash":"f5d0edff3f22b2e025c884b7c738abe641bca9110a6b9a7b90de179fd6e5d2dc","messages_hash":"89b97705896f32061405c10278c072dc4fa495e92c935ba0c57c5d54cf4473bb","txlist_hash":"d272db9ecd97edb037736fe46ab9585397f38a6d1c1d9455e64b8439811ebe4f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(453,310142,'insert','blocks','{"block_hash":"a98ae174c41ab8fc575d9c8d53d8e02d8e446b8c6c0d98a20ff234eba082b143","block_index":310142,"block_time":310142000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(453,310141,'insert','blocks','{"block_hash":"a98ae174c41ab8fc575d9c8d53d8e02d8e446b8c6c0d98a20ff234eba082b143","block_index":310142,"block_time":310142000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(454,310142,'parse','blocks','{"block_index":310142,"ledger_hash":"a9f00ec826a30e66820ab2920cf9573244a24dacd63d48c080b9e80b1c5e05b7","messages_hash":"3e036c1c3d33d8075922c286510d7fe6bf687cd7b6b2ca54bc183e36856266c0","txlist_hash":"0c2ddacd61856ee0743eca9125326981ab9f5711982f53874a0f8153089a8d97"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(455,310143,'insert','blocks','{"block_hash":"8ba2f7feb302a5f9ec3e8c7fc718b02379df4698f6387d00858005b8f01e062f","block_index":310143,"block_time":310143000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(455,310142,'insert','blocks','{"block_hash":"8ba2f7feb302a5f9ec3e8c7fc718b02379df4698f6387d00858005b8f01e062f","block_index":310143,"block_time":310143000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(456,310143,'parse','blocks','{"block_index":310143,"ledger_hash":"b5765899f770fdb6cf1120535d85826c6b0ae44b16b8d5a619c5cd12c98783ea","messages_hash":"02e0bd55a0bda5403762446e66a13753ebaa5a514c1cd66c7f04ef46ef4df738","txlist_hash":"39ef998b6c6130f79df8dcb5abff84c18a485915f1088b36a10de30da8c6f9c6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(457,310144,'insert','blocks','{"block_hash":"879ffa05ae6b24b236591c1f1537909179ed1245a27c5fdadd2218ab2193cdb9","block_index":310144,"block_time":310144000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(457,310143,'insert','blocks','{"block_hash":"879ffa05ae6b24b236591c1f1537909179ed1245a27c5fdadd2218ab2193cdb9","block_index":310144,"block_time":310144000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(458,310144,'parse','blocks','{"block_index":310144,"ledger_hash":"1a80f48136e5938b33f817a7cc1cb60aaf6d628b7811abd43e38cc807a18072a","messages_hash":"807eaade814d710f7f74b556d926b294fff13c105e326d6955b02a4bc5d6d29c","txlist_hash":"0b547c8db7446cd3f26dd0d8b88d533c1361fa5dfae6127b85e87095b42ab66b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(459,310145,'insert','blocks','{"block_hash":"175449ef0aa4580593ad4a7d0c5a9b117e1549ea772af00caa4ccdc9b1bf7a6e","block_index":310145,"block_time":310145000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(459,310144,'insert','blocks','{"block_hash":"175449ef0aa4580593ad4a7d0c5a9b117e1549ea772af00caa4ccdc9b1bf7a6e","block_index":310145,"block_time":310145000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(460,310145,'parse','blocks','{"block_index":310145,"ledger_hash":"fce2f084c1776fcb36b3ae3e0c952893934e24672ffa0d3dac72bb1278af8264","messages_hash":"170f6971eaafb88ec0895d5d9af3ed34bbb3eee703117b5b0e6cf8d8deafe0f1","txlist_hash":"bcef3d9f5eb82fb2198d268e442edfca029d5aa3ccff5e5306f0a1a8cf43b30c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(461,310146,'insert','blocks','{"block_hash":"e954ab6a110455d745503f7cc8df9d92c1a800fafdd151e7b1912830a9cb7184","block_index":310146,"block_time":310146000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(461,310145,'insert','blocks','{"block_hash":"e954ab6a110455d745503f7cc8df9d92c1a800fafdd151e7b1912830a9cb7184","block_index":310146,"block_time":310146000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(462,310146,'parse','blocks','{"block_index":310146,"ledger_hash":"9a98eb971580a0a69fceafc5fd41f398f1908b626c47df57965d1863e9a24b84","messages_hash":"e103e1f0ee51b5fa86d61f8b8ddd9b7918e0d047727daa43c66ad3d13d7b3c12","txlist_hash":"036b1784841e65e5905b012f2b74c70e1d9c33b769603c01387d13e693343411"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(463,310147,'insert','blocks','{"block_hash":"7650c95eba7bf1cad81575ed12f32a8cc36281a6f41bef13afe1dfc1b03a7e83","block_index":310147,"block_time":310147000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(463,310146,'insert','blocks','{"block_hash":"7650c95eba7bf1cad81575ed12f32a8cc36281a6f41bef13afe1dfc1b03a7e83","block_index":310147,"block_time":310147000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(464,310147,'parse','blocks','{"block_index":310147,"ledger_hash":"336a89d3d137810d3220d2de432f72e3b3ccd2ada2b746da3859c77dbb89d6a3","messages_hash":"c671dd04015cf20b8cc8fce97e40ed1f31df42f7e42a0989eee0a9b49044554c","txlist_hash":"184e1861a82afa97634e0ad72cff532220a37d75f8eb5e1265039188124f6ad6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(465,310148,'insert','blocks','{"block_hash":"77c29785877724be924f965215eb50ffe916e3b6b3a2beaea3e3ae4796545a7e","block_index":310148,"block_time":310148000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(465,310147,'insert','blocks','{"block_hash":"77c29785877724be924f965215eb50ffe916e3b6b3a2beaea3e3ae4796545a7e","block_index":310148,"block_time":310148000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(466,310148,'parse','blocks','{"block_index":310148,"ledger_hash":"f904794337dd67d356981d2623b8c3d1d78ba584cd98a8c1db939951d3102612","messages_hash":"35a58ace6733dd96d89ffe8486a3d595754aae5271e3584aabedd6f8cb1076e2","txlist_hash":"c75b4218153bfdf3baf44f22f99523f7c54d957994ee838c05c08dd52d98c06f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(467,310149,'insert','blocks','{"block_hash":"526b3c4a74c2663fc04ed5234c86974bffddb7235c8736d76860778c30207b3c","block_index":310149,"block_time":310149000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(467,310148,'insert','blocks','{"block_hash":"526b3c4a74c2663fc04ed5234c86974bffddb7235c8736d76860778c30207b3c","block_index":310149,"block_time":310149000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(468,310149,'parse','blocks','{"block_index":310149,"ledger_hash":"c2972fbd048790f54d9ecef4e18aedec8ae7aa28227d1d43bd19cd71b4feff85","messages_hash":"ecb6a27a09df864cd864d610a210593ec26988d4132f30f63c8607b6323e4c22","txlist_hash":"8dac7e6494cc67fc5c186e74b08d9fc8bc92cf71af9b0e1d919c48e9fecf7660"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(469,310150,'insert','blocks','{"block_hash":"cdd141f7463967dbeb78bf69dc1cd8e12489f58c4ea0a5dc9c5c01ec4fcea333","block_index":310150,"block_time":310150000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(469,310149,'insert','blocks','{"block_hash":"cdd141f7463967dbeb78bf69dc1cd8e12489f58c4ea0a5dc9c5c01ec4fcea333","block_index":310150,"block_time":310150000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(470,310150,'parse','blocks','{"block_index":310150,"ledger_hash":"88b999e4ae34386b826b0f3b315953b5eeda8d9ef496af051498bfce6d8737fc","messages_hash":"6c18380805d06f23f130503ad7148ef1a215c0b217199995496a7670aad67c52","txlist_hash":"db25206ba3a052c622c6a5063359308d04fc2a031d6509447d838cf96a0632d1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(471,310151,'insert','blocks','{"block_hash":"a0f31cc6e12ec86e65e999e806ab3bfa18f4f1084e4aeb4fbd699b4fe284b330","block_index":310151,"block_time":310151000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(471,310150,'insert','blocks','{"block_hash":"a0f31cc6e12ec86e65e999e806ab3bfa18f4f1084e4aeb4fbd699b4fe284b330","block_index":310151,"block_time":310151000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(472,310151,'parse','blocks','{"block_index":310151,"ledger_hash":"b7c176a2eff86655f8b0b71cc8bd3bab3a92ba203d4ccd911d63f3d2ce7fdc25","messages_hash":"86d5f32768df40dbbc112f75dde5f7aef0aa1904a689cce3d24be58fc793bfb6","txlist_hash":"c6868100e51f390d57b2da8324915c9751aa3882b6e102055fcfe229d1abfc85"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(473,310152,'insert','blocks','{"block_hash":"89c8cc3a0938c63a35e89d039aa84318a0fc4e13afac6beb849ac37140132c67","block_index":310152,"block_time":310152000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(473,310151,'insert','blocks','{"block_hash":"89c8cc3a0938c63a35e89d039aa84318a0fc4e13afac6beb849ac37140132c67","block_index":310152,"block_time":310152000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(474,310152,'parse','blocks','{"block_index":310152,"ledger_hash":"3f9471c393bc2bf144b17a5febea88c42982ae746fd700a5903c0e6e541e2b09","messages_hash":"206690aa73f071c14545eea0cb0c8838abdfbc8ebd64c0fd097cc2e2a254d481","txlist_hash":"ff691488593add72ffd8fb9c8eab2b2c6f92dc2082615b3829f4b84fc8a81f88"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(475,310153,'insert','blocks','{"block_hash":"d1121dfa68f4a1de4f97c123d2d2a41a102971a44b34927a78cd539ad8dca482","block_index":310153,"block_time":310153000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(475,310152,'insert','blocks','{"block_hash":"d1121dfa68f4a1de4f97c123d2d2a41a102971a44b34927a78cd539ad8dca482","block_index":310153,"block_time":310153000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(476,310153,'parse','blocks','{"block_index":310153,"ledger_hash":"c6bc81e7b7e6758bbbfe10fa0e688b09e679fb74a18134639e172c18c6e017a7","messages_hash":"ed1c7beb196128167ad8b9d03f1b9a1b7b5d70cd7add306919cd658bc32f0d87","txlist_hash":"6c303c21dd9de15f2a265d88e04a2c110f32718da29a06294ebafe9ed91d4441"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(477,310154,'insert','blocks','{"block_hash":"ba982ea2e99d3bc5f574897c85485f89430ae38cf4ab49b7716ed466afa506d6","block_index":310154,"block_time":310154000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(477,310153,'insert','blocks','{"block_hash":"ba982ea2e99d3bc5f574897c85485f89430ae38cf4ab49b7716ed466afa506d6","block_index":310154,"block_time":310154000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(478,310154,'parse','blocks','{"block_index":310154,"ledger_hash":"b3e07f9de85ab67e88042b1bb52302c6eb16b7ff45d5be6a49700f115ed396d4","messages_hash":"977e7ff9f1e5f0c1f756e802013a6e72299de42a6e2bafad94b57bfdee7a6632","txlist_hash":"b21fe34642b2c9ff09e65be86103f1c3390a01eb51b4d8b98456558639ef6e1f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(479,310155,'insert','blocks','{"block_hash":"cefb3b87c7b75a0eb8f062a0cde8e1073774ae035d176e9769fc87071c12d137","block_index":310155,"block_time":310155000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(479,310154,'insert','blocks','{"block_hash":"cefb3b87c7b75a0eb8f062a0cde8e1073774ae035d176e9769fc87071c12d137","block_index":310155,"block_time":310155000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(480,310155,'parse','blocks','{"block_index":310155,"ledger_hash":"27014841a468e23bcb70c718919745eadcded4310031a7be90a4732c96509404","messages_hash":"a171b8e9e9879ede2f4c1fd42173d0b0ae0a07fc4d1e7f2f58ba50855fd986f6","txlist_hash":"0e5f0bfae3a6ced9c6498cbe95b8bcb56c76530830baa61345b8072aa6e28ff3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(481,310156,'insert','blocks','{"block_hash":"6e3811e65cb02434f9fde0445a7a2b03fe796041458737d0afcc52208f988a83","block_index":310156,"block_time":310156000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(481,310155,'insert','blocks','{"block_hash":"6e3811e65cb02434f9fde0445a7a2b03fe796041458737d0afcc52208f988a83","block_index":310156,"block_time":310156000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(482,310156,'parse','blocks','{"block_index":310156,"ledger_hash":"5597aaadb8cc75848219f9fde3f5d76bb5592689c72068db59922732e89eef9d","messages_hash":"e06a1bce3d693147d3df5c1a5ad3b7b421d526213ced3eec59be44220aa6c2c1","txlist_hash":"ff3319c50ddd9bbd558542bdde3d612a475b543d6a34ea76738d929b5e05a380"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(483,310157,'insert','blocks','{"block_hash":"51dd192502fe797c55287b04c403cc63c087020a01c974a565dd4038db82f94a","block_index":310157,"block_time":310157000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(483,310156,'insert','blocks','{"block_hash":"51dd192502fe797c55287b04c403cc63c087020a01c974a565dd4038db82f94a","block_index":310157,"block_time":310157000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(484,310157,'parse','blocks','{"block_index":310157,"ledger_hash":"cc1ae27fef286424e40204f6b575e9e079e1f7a5ccf6cc356729a7c4a7f83eb8","messages_hash":"e9ab5031997634f6ad74021f5adf3d5a62388fd55401a584464d7bd1c7edd44c","txlist_hash":"9b4884eaca300843017c2732aa8d09815eee4701cff996cc8b6ca6d62af4055d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(485,310158,'insert','blocks','{"block_hash":"749395af0c3221b8652d31b4c4410c19b10404d941c7e78d765b865f853559d2","block_index":310158,"block_time":310158000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(485,310157,'insert','blocks','{"block_hash":"749395af0c3221b8652d31b4c4410c19b10404d941c7e78d765b865f853559d2","block_index":310158,"block_time":310158000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(486,310158,'parse','blocks','{"block_index":310158,"ledger_hash":"6d80d98e778b30c124b0255b3e72620f432245d0f841f6bd62a0fcff44843bf0","messages_hash":"be1d3efb0c59cb3610c20487d20907179398843322cf4a26681010bc89d3032a","txlist_hash":"03a33d54ece86ab81f4f6e1cb337b07b6fc105a580a4ff82496885c7671939a4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(487,310159,'insert','blocks','{"block_hash":"fc0e9f7b6ae99080bc41625588cef73b59c8a9f7a21d7f9f1bf96192ba631c12","block_index":310159,"block_time":310159000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(487,310158,'insert','blocks','{"block_hash":"fc0e9f7b6ae99080bc41625588cef73b59c8a9f7a21d7f9f1bf96192ba631c12","block_index":310159,"block_time":310159000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(488,310159,'parse','blocks','{"block_index":310159,"ledger_hash":"d8ab8bb14092afea6cc675d2f50891318e3169bf9dbe2d07e80c4db95f0f2033","messages_hash":"4c81d40dc2e7cbc7e47272cbc8fd00b3b88fc7743ae9127216c8fd3cf0a29440","txlist_hash":"c292a08eda8cb807f0c11947fc08c748353bf545596d8c6c03a4a734d25461a6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(489,310160,'insert','blocks','{"block_hash":"163a82beeba44b4cb83a31764047880455a94a03e859dc050da782ed89c5fa8b","block_index":310160,"block_time":310160000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(489,310159,'insert','blocks','{"block_hash":"163a82beeba44b4cb83a31764047880455a94a03e859dc050da782ed89c5fa8b","block_index":310160,"block_time":310160000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(490,310160,'parse','blocks','{"block_index":310160,"ledger_hash":"2d76a042d062b73b7dd956d5cff0ee397f068c04eae6cf5b9522d3d55e88cee9","messages_hash":"4091dc7273cdb5d4bd19145a422394d0ce18572cbc6665e32274bff761d04c62","txlist_hash":"df1e1e18b65c4322284ab36204d9f4397c0dade89bf25486c8b84f6358e0f18e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(491,310161,'insert','blocks','{"block_hash":"609c983d412a23c693e666abdea3f672e256674bf9ee55df89b5d9777c9264d8","block_index":310161,"block_time":310161000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(491,310160,'insert','blocks','{"block_hash":"609c983d412a23c693e666abdea3f672e256674bf9ee55df89b5d9777c9264d8","block_index":310161,"block_time":310161000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(492,310161,'parse','blocks','{"block_index":310161,"ledger_hash":"beb3496742415027bcc0d59f3385809523c8783cd91a5670f2fb6fec3230e980","messages_hash":"54055d0c951f4ca0806dec96cde66848cbb36f6bc836d96cd98db0ff9e4b38cb","txlist_hash":"e61374e297180716eee972376d16b85266342dfcee4f383ba9061360f7c0a425"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(493,310162,'insert','blocks','{"block_hash":"043e9645e019f0b6a019d54c5fef5eebee8ce2da1273a21283c517da126fc804","block_index":310162,"block_time":310162000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(493,310161,'insert','blocks','{"block_hash":"043e9645e019f0b6a019d54c5fef5eebee8ce2da1273a21283c517da126fc804","block_index":310162,"block_time":310162000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(494,310162,'parse','blocks','{"block_index":310162,"ledger_hash":"066a2b93df863300741145cd6a4f1a9ea616bc787861cb8ab809f59d47a6fa1f","messages_hash":"2acaead0979ed14161b7b6665b5431098d5544d1415a8539f20bc27e880790d3","txlist_hash":"bc115f6ddeebabd3e0ea592604ff679267b755376e509c4760cfa394e86498df"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(495,310163,'insert','blocks','{"block_hash":"959e0a858a81922d2edf84d1fbb49d7c7e897a8f49f70bd5b066744b77836353","block_index":310163,"block_time":310163000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(495,310162,'insert','blocks','{"block_hash":"959e0a858a81922d2edf84d1fbb49d7c7e897a8f49f70bd5b066744b77836353","block_index":310163,"block_time":310163000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(496,310163,'parse','blocks','{"block_index":310163,"ledger_hash":"460c271269ccdd8775925b511705207baed8fc212caa7e74fc08a80be600a38a","messages_hash":"4616d2ff3ac7feec157408f1a40dda3e96b3ecbd1fd7977a5d89c40936b1d188","txlist_hash":"d16b6243e4c0718a2adca941956564325985750a9a0833aaa35635335cb504ea"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(497,310164,'insert','blocks','{"block_hash":"781b7188be61c98d864d75954cf412b2a181364cc1046de45266ccc8cdb730e2","block_index":310164,"block_time":310164000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(497,310163,'insert','blocks','{"block_hash":"781b7188be61c98d864d75954cf412b2a181364cc1046de45266ccc8cdb730e2","block_index":310164,"block_time":310164000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(498,310164,'parse','blocks','{"block_index":310164,"ledger_hash":"19a7948cd1bc4a89a427d48bb01330dadff848e2b32ec8b8abe342872850b268","messages_hash":"a86e2d86f493fa42f842b5ae85a42f41a97740d844cdcba66dbe64a7aa48872c","txlist_hash":"54068fbe0e385c8ae2df5cb2c601397e15c019c732e37ed484573f07106741e3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(499,310165,'insert','blocks','{"block_hash":"a75081e4143fa95d4aa29618fea17fc3fabd85e84059cc45c96a73473fc32599","block_index":310165,"block_time":310165000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(499,310164,'insert','blocks','{"block_hash":"a75081e4143fa95d4aa29618fea17fc3fabd85e84059cc45c96a73473fc32599","block_index":310165,"block_time":310165000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(500,310165,'parse','blocks','{"block_index":310165,"ledger_hash":"97f0a48a26daf011a8c7b22bb772228a0c8a920eccd011e713956100c9fbdf33","messages_hash":"85a9f6ce9e41a035f7077c6f53371fbaf823985fb3e4aa88c8ab3f917b06014e","txlist_hash":"0783c9e3d99f4f95b64b38b92c4e8b7d257f325d10cd83bc86d684378b9ebbd6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(501,310166,'insert','blocks','{"block_hash":"a440d426adaa83fa9bb7e3d4a04b4fa06e896fc2813f5966941f1ad1f28cfb41","block_index":310166,"block_time":310166000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(501,310165,'insert','blocks','{"block_hash":"a440d426adaa83fa9bb7e3d4a04b4fa06e896fc2813f5966941f1ad1f28cfb41","block_index":310166,"block_time":310166000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(502,310166,'parse','blocks','{"block_index":310166,"ledger_hash":"edbd00e1229c673f4f15b3ac7bbe020f54b5f3a61b1d158658471076a55c77b0","messages_hash":"b45d7ccd18ec37708371b786d993d4f6cd880a42087093d0651432d357acee0c","txlist_hash":"683f4ab00ee1ff495bf452c511c1582100191ef7b575139b9d2f102c852018c8"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(503,310167,'insert','blocks','{"block_hash":"ab4293dbea81fedacca1a0d5230fe85a230afc9490d895aa6963acc216125f66","block_index":310167,"block_time":310167000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(503,310166,'insert','blocks','{"block_hash":"ab4293dbea81fedacca1a0d5230fe85a230afc9490d895aa6963acc216125f66","block_index":310167,"block_time":310167000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(504,310167,'parse','blocks','{"block_index":310167,"ledger_hash":"e118e0f3aad5be73080f4d1892517e8fd2c4575589ccdfadf980edebb9a66a14","messages_hash":"6cd15a6b0104e8343a928946b3bd0dc4ba7062b599e63576a456f9bcbdad2c64","txlist_hash":"d2be4356643047c7bd04eede767d4f6853885f408827f3bec8c54ceb2b7fd71b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(505,310168,'insert','blocks','{"block_hash":"a12b36a88c2b0ed41f1419a29cc118fae4ecd2f70003de77848bf4a9b2b72dc9","block_index":310168,"block_time":310168000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(505,310167,'insert','blocks','{"block_hash":"a12b36a88c2b0ed41f1419a29cc118fae4ecd2f70003de77848bf4a9b2b72dc9","block_index":310168,"block_time":310168000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(506,310168,'parse','blocks','{"block_index":310168,"ledger_hash":"267f48eb4e3b0925f4f472d8ce6ec57ec5039911b13a14ff2884a41a9cafd7b1","messages_hash":"696d4a61ff5e1174d4f20bdb76941ea081a4d2f3189ea334c4e95224f8c8c8a6","txlist_hash":"ad748b661aad47fa8963b43999846ef9bd00ea2595747f835710360afed16797"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(507,310169,'insert','blocks','{"block_hash":"204809a85ead8ba63f981fc1db8ae95afe92015f003eaebbec166021867421f3","block_index":310169,"block_time":310169000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(507,310168,'insert','blocks','{"block_hash":"204809a85ead8ba63f981fc1db8ae95afe92015f003eaebbec166021867421f3","block_index":310169,"block_time":310169000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(508,310169,'parse','blocks','{"block_index":310169,"ledger_hash":"df394a6f3b2a9b9dded6019dce9f3d3214db1f30019faffbdc2ce614f629b25a","messages_hash":"cdfd35fa4c56e13b5d326dd331f4ebf61f85518bbbcbade10dc40b1af4a15431","txlist_hash":"3a92e2c7808a00a0ff2b2fb4695b225acf6262c57753023334bcf3de8e1c7ace"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(509,310170,'insert','blocks','{"block_hash":"b38b0345a20a367dfe854e455e5752f63ac2d9be8de33eab264a29e87f94d119","block_index":310170,"block_time":310170000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(509,310169,'insert','blocks','{"block_hash":"b38b0345a20a367dfe854e455e5752f63ac2d9be8de33eab264a29e87f94d119","block_index":310170,"block_time":310170000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(510,310170,'parse','blocks','{"block_index":310170,"ledger_hash":"3081081c2ab6d8280ef721c5836d0fb7e89eb3d747a4e4522d2e22f5a6b153a2","messages_hash":"a771c459fa5e0cc21787d85a9b38e8ec396e77cc95362ddfa73ec9fb454495fc","txlist_hash":"f4ada9df3e82d94ba52292e829c4c814b3f0d04f0e3f8606a90fed651634fafd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(511,310171,'insert','blocks','{"block_hash":"b8ba5ae8d97900ce37dd451e8c6d8b3a0e2664bb1c103bf697355bf3b1de2d2d","block_index":310171,"block_time":310171000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(511,310170,'insert','blocks','{"block_hash":"b8ba5ae8d97900ce37dd451e8c6d8b3a0e2664bb1c103bf697355bf3b1de2d2d","block_index":310171,"block_time":310171000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(512,310171,'parse','blocks','{"block_index":310171,"ledger_hash":"e6a4017e4f7d9da50bb3817990c3e115d5035443de8824dc01b5380a5b4c52a9","messages_hash":"c31dfeb0e49cd9b9f45143ca853172c4f8d3ee88427c3e98f7cc8dd874355392","txlist_hash":"e335e773387256c016b82649c44647ce0355aa108249413f02117fe14f39c56d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(513,310172,'insert','blocks','{"block_hash":"b17fda199c609ab4cc2d85194dd53fa51ba960212f3964a9d2fe2cfe0bb57055","block_index":310172,"block_time":310172000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(513,310171,'insert','blocks','{"block_hash":"b17fda199c609ab4cc2d85194dd53fa51ba960212f3964a9d2fe2cfe0bb57055","block_index":310172,"block_time":310172000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(514,310172,'parse','blocks','{"block_index":310172,"ledger_hash":"89e90622bf8363bcee5cd7ab6d48b6d06ce4cbd067f9985e35e67fc683f4c103","messages_hash":"7d8b260c7351e40751ff111c6c06d7c8aa885428710b3d1e1f0994c35e2f9643","txlist_hash":"d03bfc2a16d240505e3413ce267b263a0ddde5b3f8a04acb6a67d33a89434996"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(515,310173,'insert','blocks','{"block_hash":"f2dcdc5ffc0aca2e71e6e0466391b388870229398a1f3c57dec646b806a65016","block_index":310173,"block_time":310173000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(515,310172,'insert','blocks','{"block_hash":"f2dcdc5ffc0aca2e71e6e0466391b388870229398a1f3c57dec646b806a65016","block_index":310173,"block_time":310173000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(516,310173,'parse','blocks','{"block_index":310173,"ledger_hash":"35ceee6a23757fa49e7f5c34ccf0fd034731e95d564257b443ebfdee7cd294d3","messages_hash":"af128c2ba7c50382bbe8e3b428f19fcd80958bc2e5d4c33be43712d47d435a70","txlist_hash":"73c9dd3d2f5390d0d4379cc8f5e195ba4a0b4d280d3fe663db3940d4a42108ef"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(517,310174,'insert','blocks','{"block_hash":"fa6f46af9e3664353a473f6fffce56fa295e07985018bface8141b4bf7924679","block_index":310174,"block_time":310174000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(517,310173,'insert','blocks','{"block_hash":"fa6f46af9e3664353a473f6fffce56fa295e07985018bface8141b4bf7924679","block_index":310174,"block_time":310174000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(518,310174,'parse','blocks','{"block_index":310174,"ledger_hash":"101dedf34bc0788c0589c8e2b1d7da4ec65f6eab2e3c5523c0903db685cab017","messages_hash":"c963441968e83c301e8f29f28765581cc5f14e6623c040c3350dc589eea57da6","txlist_hash":"71d9279604a4ac7dbd49f6672ec6cd19ba59b62302eb1b1bd78ecd3b6d4a5263"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(519,310175,'insert','blocks','{"block_hash":"f71e79fe5f03c3bc7f1360febc5d8f79fc2768ce0ff1872cf27a829b49017333","block_index":310175,"block_time":310175000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(519,310174,'insert','blocks','{"block_hash":"f71e79fe5f03c3bc7f1360febc5d8f79fc2768ce0ff1872cf27a829b49017333","block_index":310175,"block_time":310175000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(520,310175,'parse','blocks','{"block_index":310175,"ledger_hash":"67de4a0a9e52d9ae06caf62b3412d0bf2c10a6b24716210b21212d75be75ad6c","messages_hash":"dfee8971396dc54217e263b98b1ee284fabc170a53cf0fa2d123a1f9cbd14d64","txlist_hash":"90b52df6f0427a7dc695fa0e17a7bf3e59d788cf4016bb65c451a151c38f121b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(521,310176,'insert','blocks','{"block_hash":"67cd1d81f2998f615602346065e37f9ceb8916abb74b5762ead317d5e26453c6","block_index":310176,"block_time":310176000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(521,310175,'insert','blocks','{"block_hash":"67cd1d81f2998f615602346065e37f9ceb8916abb74b5762ead317d5e26453c6","block_index":310176,"block_time":310176000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(522,310176,'parse','blocks','{"block_index":310176,"ledger_hash":"a90bd400e15727fada1a27be4a6e228bd91a15f0dbd0fb7de3b6779a8bf89e4c","messages_hash":"493da573a8f068a577690df0b951ad995a49bbbdca22029102fa286d1d633269","txlist_hash":"b870ef1dabda015a561f74122039890b1c9c98e2c4c547dea34ed296fc99e8e1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(523,310177,'insert','blocks','{"block_hash":"6856b1971121b91c907aaf7aed286648a6074f0bd1f66bd55da2b03116192a52","block_index":310177,"block_time":310177000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(523,310176,'insert','blocks','{"block_hash":"6856b1971121b91c907aaf7aed286648a6074f0bd1f66bd55da2b03116192a52","block_index":310177,"block_time":310177000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(524,310177,'parse','blocks','{"block_index":310177,"ledger_hash":"bac315d07dee18e27336a46ff3ffeed58aaf8eb1eb702e98a93c06303c937716","messages_hash":"e54ad17218ff9f1d0ac02978bc5b0ec884a467ccd1417779043860b108dc7e74","txlist_hash":"80b0eed7b842a9779b358c5293771470290876f3acb617d85e1a97e786a73092"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(525,310178,'insert','blocks','{"block_hash":"8094fdc6e549c4fab18c62e4a9be5583990c4167721a7e72f46eaf1e4e04d816","block_index":310178,"block_time":310178000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(525,310177,'insert','blocks','{"block_hash":"8094fdc6e549c4fab18c62e4a9be5583990c4167721a7e72f46eaf1e4e04d816","block_index":310178,"block_time":310178000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(526,310178,'parse','blocks','{"block_index":310178,"ledger_hash":"186ea0ece84d21ee21889ff13c98959dfc1842063a970e0c095552f0ca86515e","messages_hash":"bb17de70c734bbc12be97953357cba4c749de77aed7ff5e0a5a7c95e02a48bec","txlist_hash":"79d67c9aecc8676b0743ebc9af6b78c6f40d264b54bcb510b0028715fc1ca4bd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(527,310179,'insert','blocks','{"block_hash":"d1528027cd25a1530cdc32c4eaff3751a851c947ddc748d99a7d3026a5e581a7","block_index":310179,"block_time":310179000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(527,310178,'insert','blocks','{"block_hash":"d1528027cd25a1530cdc32c4eaff3751a851c947ddc748d99a7d3026a5e581a7","block_index":310179,"block_time":310179000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(528,310179,'parse','blocks','{"block_index":310179,"ledger_hash":"0200402ef08256efa0adc85b2b4b15fb7448b5107b65fafbcc7985d809e84bc8","messages_hash":"2e03fe798f0a5c1f8dedb60d153f4fbb5c461b6df84a5427c4c5fc568c247632","txlist_hash":"3bbcd82428f094a7089c7c9a5c74be0e400e4a03181ea95faea8681323851d43"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(529,310180,'insert','blocks','{"block_hash":"f2f401a5e3141a8387aaf9799e8fef92eb0fc68370dae1e27622893406d685c1","block_index":310180,"block_time":310180000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(529,310179,'insert','blocks','{"block_hash":"f2f401a5e3141a8387aaf9799e8fef92eb0fc68370dae1e27622893406d685c1","block_index":310180,"block_time":310180000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(530,310180,'parse','blocks','{"block_index":310180,"ledger_hash":"13829eeaf9bdc54f87366e35616c5a57cd836c63db8a9ba7d117d02377ef43e1","messages_hash":"de94fa7ca96ff9c889cdfda64f41e136ecdec886443ac534d48cab345400fdf0","txlist_hash":"2398e91ec31dc2810a4648946a85f5af7df71cae0b678f99aaa17e97d215785b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(531,310181,'insert','blocks','{"block_hash":"bd59318cdba0e511487d1e4e093b146b0f362c875d35ab5251592b3d9fed7145","block_index":310181,"block_time":310181000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(531,310180,'insert','blocks','{"block_hash":"bd59318cdba0e511487d1e4e093b146b0f362c875d35ab5251592b3d9fed7145","block_index":310181,"block_time":310181000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(532,310181,'parse','blocks','{"block_index":310181,"ledger_hash":"81b4d83a623a55019ad720c1bd3ecef100d8ca49deda91b8ba6ffe9802764df7","messages_hash":"f62a4c12fb1ef9e3f82035ca00f8b419baa84c536d23f127a552b9c3d9df6e3f","txlist_hash":"82cb247f5dfeeb31342861a77bceb74957ceb62932de536d837988a2f471f599"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(533,310182,'insert','blocks','{"block_hash":"a7e66b4671a11af2743889a10b19d4af09ec873e2b8eb36949d710d22e1d768f","block_index":310182,"block_time":310182000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(533,310181,'insert','blocks','{"block_hash":"a7e66b4671a11af2743889a10b19d4af09ec873e2b8eb36949d710d22e1d768f","block_index":310182,"block_time":310182000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(534,310182,'parse','blocks','{"block_index":310182,"ledger_hash":"935e40f93195d450b292481aac481f445d2de8786d04d26263f4adc5a348704c","messages_hash":"454c2009be61a3954687ce793fe7cb30490d41edd77bd9d62006622440df901d","txlist_hash":"1a48f71be7c5f3baa68d68c393a6c68d63596c561005ac7c6df457584fc18c6a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(535,310183,'insert','blocks','{"block_hash":"85318afb50dc77cf9edfef4d6192f7203415e93be43f19b15ca53e170b0477bb","block_index":310183,"block_time":310183000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(535,310182,'insert','blocks','{"block_hash":"85318afb50dc77cf9edfef4d6192f7203415e93be43f19b15ca53e170b0477bb","block_index":310183,"block_time":310183000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(536,310183,'parse','blocks','{"block_index":310183,"ledger_hash":"268bf841be40615472bf4c60b5306d0763ed50510fbb55c47a6a0ac726e8701f","messages_hash":"6a772e172863a0a850489c0ebce5b7c5467d17a50bb1b04f9ba949dba19ca8b6","txlist_hash":"82d2641b1ab0cdf057e8e68b0cd7824ff8c60222f8d4e23125d68beacf2b3293"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(537,310184,'insert','blocks','{"block_hash":"042a898e29c2ebf0fdbb4156d29d9ba1a5935e7ed707928cb21824c76dd53bfc","block_index":310184,"block_time":310184000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(537,310183,'insert','blocks','{"block_hash":"042a898e29c2ebf0fdbb4156d29d9ba1a5935e7ed707928cb21824c76dd53bfc","block_index":310184,"block_time":310184000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(538,310184,'parse','blocks','{"block_index":310184,"ledger_hash":"64323488ca4d32a1f548842db4ac772b750599ce6222020ef6149b4a0e54a935","messages_hash":"c5850f7e42e373ad7c980eac188fc4c1d93c1b70fa5113498aa6a50a7e583a95","txlist_hash":"9a7f77be4828adcfee8ea1f106ecbcb55ae758d5098a6fa1aa3a494af957f7cb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(539,310185,'insert','blocks','{"block_hash":"bd78c092ae353c78798482830c007aac1be07e9bc8e52855f620a3d48f46811f","block_index":310185,"block_time":310185000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(539,310184,'insert','blocks','{"block_hash":"bd78c092ae353c78798482830c007aac1be07e9bc8e52855f620a3d48f46811f","block_index":310185,"block_time":310185000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(540,310185,'parse','blocks','{"block_index":310185,"ledger_hash":"8946baadef2e19c5e4e4b2d771b36982a217486dcb0f95097b41ce633e61da94","messages_hash":"d67a467f3facea45d03afbe61753a922cd38f8de8c4b23e064a530e2592412aa","txlist_hash":"8956f030f917aa87d9b309bd845b59cb37ba2265184ff1f67bfa4b61e32d43c3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(541,310186,'insert','blocks','{"block_hash":"e30a3a92cc2e5ad0133e5cee1f789a1a28bea620974f9ab8fa663da53e5bf707","block_index":310186,"block_time":310186000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(541,310185,'insert','blocks','{"block_hash":"e30a3a92cc2e5ad0133e5cee1f789a1a28bea620974f9ab8fa663da53e5bf707","block_index":310186,"block_time":310186000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(542,310186,'parse','blocks','{"block_index":310186,"ledger_hash":"e68b5525927cfee15fefee02a16fd700abf6b6e7b4e32e57df7d324fae7ae090","messages_hash":"de219598994c08d7db8fa07ab2a525349193cf9995b12bdebf550efc116f6d3d","txlist_hash":"137a7a7a1ae71a317f7c3c48f7f84e4a782a515fa2096c2abe2c1adeab4e8256"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(543,310187,'insert','blocks','{"block_hash":"fc6402c86b66b6e953d23ed33d149faa0988fa90aa9f7434e2863e33da2f3414","block_index":310187,"block_time":310187000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(543,310186,'insert','blocks','{"block_hash":"fc6402c86b66b6e953d23ed33d149faa0988fa90aa9f7434e2863e33da2f3414","block_index":310187,"block_time":310187000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(544,310187,'parse','blocks','{"block_index":310187,"ledger_hash":"c42efa24d48339fc341908a30c6679beeadc9f5918d8d3e62d5c4b06fec845d5","messages_hash":"d102dd65505ea26b381ebc87971f3346b7bc5caf341923fe94dcb249d69b4e30","txlist_hash":"cc587cfca94dbe30e6670dbfc4a5e3ec46732731f5c66aab9c7ef9028b05c22a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(545,310188,'insert','blocks','{"block_hash":"85694a80e534a53d921b5d2c6b789b747aa73bf5556b91eeed2df148e2ada917","block_index":310188,"block_time":310188000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(545,310187,'insert','blocks','{"block_hash":"85694a80e534a53d921b5d2c6b789b747aa73bf5556b91eeed2df148e2ada917","block_index":310188,"block_time":310188000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(546,310188,'parse','blocks','{"block_index":310188,"ledger_hash":"13de1d9b569d5d2525ecfa39b1eda69f9fd474683b6e34554b1a755125e96e5d","messages_hash":"b8c7ce7442aa512c5eb00e3c222fd2ce668afb4ef43d20af4592755faedf27b0","txlist_hash":"2fcc160068a4eb52ac410937237ec3813bfee52750bd8cef939738b81c8ac30b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(547,310189,'insert','blocks','{"block_hash":"7c036dadf19348348edbe0abe84861f03370415ed2fec991b9374dbb0ca19a06","block_index":310189,"block_time":310189000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(547,310188,'insert','blocks','{"block_hash":"7c036dadf19348348edbe0abe84861f03370415ed2fec991b9374dbb0ca19a06","block_index":310189,"block_time":310189000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(548,310189,'parse','blocks','{"block_index":310189,"ledger_hash":"582b8b3d3a226d3f6df497cb933ed5f42e1e992c0c25372ec15de424c0a33368","messages_hash":"51aa347c9fde3d01458f08a73c430406fd712a905ebc897c477ab43297fb57c4","txlist_hash":"ae81616b5fd77e3672318a0a5ef1b20106afc3ce7d730c8beef848d73ba53a0f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(549,310190,'insert','blocks','{"block_hash":"d6ef65299fb9dfc165284015ff2b23804ffef0b5c8baf6e5fa631211a2edbd8d","block_index":310190,"block_time":310190000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(549,310189,'insert','blocks','{"block_hash":"d6ef65299fb9dfc165284015ff2b23804ffef0b5c8baf6e5fa631211a2edbd8d","block_index":310190,"block_time":310190000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(550,310190,'parse','blocks','{"block_index":310190,"ledger_hash":"d4c49d5e3aaf21e6fe1c30663d0ba93f7dc9ddb03611e3751fba9aac8d382ac4","messages_hash":"badc62331f35d2d438ef5ac0d918e29d750aae86f1275164354eac7a7e7f5254","txlist_hash":"48c70376450aa80a2a920e4b871d27d1efe703b377ba446a262e06c9a6677611"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(551,310191,'insert','blocks','{"block_hash":"5987ffecb8d4a70887a7ce2b7acb9a326f176cca3ccf270f6040219590329139","block_index":310191,"block_time":310191000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(551,310190,'insert','blocks','{"block_hash":"5987ffecb8d4a70887a7ce2b7acb9a326f176cca3ccf270f6040219590329139","block_index":310191,"block_time":310191000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(552,310191,'parse','blocks','{"block_index":310191,"ledger_hash":"23d340ff3f1979a43bd1336c9c882b5ee01c646cd104060feacdb5db78025cca","messages_hash":"88f7d700b8ff35da0dbaf70bc08d827586f42dd7e817ae603c2f81058850c9d1","txlist_hash":"704b02ead8ed3e4e6505225fc620073993e9c3b13209bff9b5f638d5f21ce23b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(553,310192,'insert','blocks','{"block_hash":"31b7be43784f8cc2ce7bc982d29a48ff93ef95ba18f82380881c901c50cd0caa","block_index":310192,"block_time":310192000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(553,310191,'insert','blocks','{"block_hash":"31b7be43784f8cc2ce7bc982d29a48ff93ef95ba18f82380881c901c50cd0caa","block_index":310192,"block_time":310192000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(554,310192,'parse','blocks','{"block_index":310192,"ledger_hash":"cd18860851bceba4a0174480ccdc0f6ddc47b31ce71af8ec8500cb07f75d9da9","messages_hash":"b3ed38fcef537adc2756596562698c24287abe616870b22853ea834aed2a0bf7","txlist_hash":"17018479e73908fd235313691ed8464b93a0a5db774d3608294e23fba918c672"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(555,310193,'insert','blocks','{"block_hash":"ff3bb9c107f3a6e138440dee2d60c65e342dfbf216e1872c7cdb45f2a4d8852a","block_index":310193,"block_time":310193000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(555,310192,'insert','blocks','{"block_hash":"ff3bb9c107f3a6e138440dee2d60c65e342dfbf216e1872c7cdb45f2a4d8852a","block_index":310193,"block_time":310193000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(556,310193,'parse','blocks','{"block_index":310193,"ledger_hash":"391e97ae7ccf5bc38ac72e7ad1256f24c28297c625bd9a789cba8231a5ade046","messages_hash":"62ffa442b4f5a7835ddc82c0f5b5362aa3c97ecb66b039670ee22893b6891ad9","txlist_hash":"d08696a916e09e242fd20a9f8314cd4fb6305e991b506c53e3ef3f77e2d1d6dd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(557,310194,'insert','blocks','{"block_hash":"d1d8f8c242a06005f59d3c4f85983f1fa5d5edcc65eb48e7b75ed7165558434a","block_index":310194,"block_time":310194000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(557,310193,'insert','blocks','{"block_hash":"d1d8f8c242a06005f59d3c4f85983f1fa5d5edcc65eb48e7b75ed7165558434a","block_index":310194,"block_time":310194000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(558,310194,'parse','blocks','{"block_index":310194,"ledger_hash":"9141c9b38087c7cf2b8c11ffd55c2eabcb3bb09f132ac0baf9c3779f628dd42b","messages_hash":"015c140f5d377fa59b3c9d8b1c572565f35cd73b230f7530d42d7bf3e84cf41f","txlist_hash":"d5f418ef4569bb977ff73ab64235b3697d0f7f326f95696e6f63c56cdd180d6d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(559,310195,'insert','blocks','{"block_hash":"0b2f1f57c9a7546faac835cbe43243473fa6533b6e4d8bf8d13b8e3c710faf53","block_index":310195,"block_time":310195000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(559,310194,'insert','blocks','{"block_hash":"0b2f1f57c9a7546faac835cbe43243473fa6533b6e4d8bf8d13b8e3c710faf53","block_index":310195,"block_time":310195000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(560,310195,'parse','blocks','{"block_index":310195,"ledger_hash":"705918f002db29e7b3dfbfd6378f79d53e33c6ffa3948b2e3b5c85f85009bbde","messages_hash":"86c493dd15da412115cf100f1ae5090054ecc5c70899504cd8d28b4341c6b2f4","txlist_hash":"d0165e09e04c2049de1d8582291e623c80477499203b702e46fb829390ed64c0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(561,310196,'insert','blocks','{"block_hash":"280e7f4c9d1457e116b27f6fc2b806d3787002fe285826e468e07f4a0e3bd2e6","block_index":310196,"block_time":310196000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(561,310195,'insert','blocks','{"block_hash":"280e7f4c9d1457e116b27f6fc2b806d3787002fe285826e468e07f4a0e3bd2e6","block_index":310196,"block_time":310196000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(562,310196,'parse','blocks','{"block_index":310196,"ledger_hash":"59e12df19e3c0e3e23a5d1e9783c75e236a000774a038553312919a0f46b8227","messages_hash":"06521b1a530800f4e086530f29d38e8068690ef94e073c38fe834876aa7f9917","txlist_hash":"57dc6e1a18ce4910ba32e109820e8e0630070251ec745e63557c98ce71dedd80"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(563,310197,'insert','blocks','{"block_hash":"68de4c7fd020395a407ef59ea267412bbd2f19b0a654f09c0dafbc7c9ada4467","block_index":310197,"block_time":310197000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(563,310196,'insert','blocks','{"block_hash":"68de4c7fd020395a407ef59ea267412bbd2f19b0a654f09c0dafbc7c9ada4467","block_index":310197,"block_time":310197000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(564,310197,'parse','blocks','{"block_index":310197,"ledger_hash":"a0e1817dfc258180fa1629710ff3b6026181a9042fecd2c8b0b5e38118199e07","messages_hash":"0e8eacaff59da1d2ba48a95aeb66456f4e3bed48ee495cea9ec2e0ffb98db2ba","txlist_hash":"58d18f5f2362b4bfbf155b16fc4e8868b311286b25365f3b4b1a9bf73fab69b4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(565,310198,'insert','blocks','{"block_hash":"30340d4b655879e82543773117d72017a546630ceac29f591d514f37dd5b1cc2","block_index":310198,"block_time":310198000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(565,310197,'insert','blocks','{"block_hash":"30340d4b655879e82543773117d72017a546630ceac29f591d514f37dd5b1cc2","block_index":310198,"block_time":310198000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(566,310198,'parse','blocks','{"block_index":310198,"ledger_hash":"ff51bfc670b1387bfce53781750e35a3bf69d907167cf9cf57e15613cc0ff3b2","messages_hash":"47e506e747a98d1964596e6c438825affd74e81533b2f48e21eb4e5a90262f55","txlist_hash":"1443d1c76f64272d6ea00fb8f78913e72c617c515a162c9f1c213be02d48008a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(567,310199,'insert','blocks','{"block_hash":"494ebe4ce57d53dc0f51e1281f7e335c7315a6a064e982c3852b7179052a4613","block_index":310199,"block_time":310199000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(567,310198,'insert','blocks','{"block_hash":"494ebe4ce57d53dc0f51e1281f7e335c7315a6a064e982c3852b7179052a4613","block_index":310199,"block_time":310199000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(568,310199,'parse','blocks','{"block_index":310199,"ledger_hash":"e5f8f8f00de32f0d8d2b62eba27218edcee77563960fe074da5ae86bf5b553f1","messages_hash":"fe470b47af5b3f99bbbcec04aa4e304ac0b2890d03f6432c9f9a3cb6ac22e474","txlist_hash":"87fca2825c48b9ec9db31e2d6e8e8354a0ceff7fa3df299dc2868c7d616a9599"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(569,310200,'insert','blocks','{"block_hash":"d5169d7b23c44e02a5322e91039ccc7959b558608cf164328cd63dbaf9c81a03","block_index":310200,"block_time":310200000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(569,310199,'insert','blocks','{"block_hash":"d5169d7b23c44e02a5322e91039ccc7959b558608cf164328cd63dbaf9c81a03","block_index":310200,"block_time":310200000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(570,310200,'parse','blocks','{"block_index":310200,"ledger_hash":"fd8fb664576868d4f1c843b28efc7ee028417034a33d6f5635238bd13c701b2a","messages_hash":"9eee9c3e3b358fdbfb78813b40b67c9b33bbaf1512e3d7d27f6c05e61d0bf6ea","txlist_hash":"a88ca1fa9d0dfccf2e49323a500ebdfab7ba13b60dc9011c6b510741148dbf54"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(571,310201,'insert','blocks','{"block_hash":"8842bf23ded504bb28765128c0097e1de47d135f01c5cf47680b3bcf5720ad95","block_index":310201,"block_time":310201000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(571,310200,'insert','blocks','{"block_hash":"8842bf23ded504bb28765128c0097e1de47d135f01c5cf47680b3bcf5720ad95","block_index":310201,"block_time":310201000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(572,310201,'parse','blocks','{"block_index":310201,"ledger_hash":"7e2dbbf14c0620ac0fd4e0e676857e2d055fff80cadfe2d9d0dfe07d36738722","messages_hash":"a22e94319ba0331541ae9446e6313faa1ff5e579294f0a4e73d5a4cbf1368ae2","txlist_hash":"f20074cd00170edae909606eb1bd3937afaa3711590eb7d788c564ddbdc6600f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(573,310202,'insert','blocks','{"block_hash":"95fa18eecbc0905377a70b3ccd48636528d5131ccfa0126ed4639bc60d0003d8","block_index":310202,"block_time":310202000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(573,310201,'insert','blocks','{"block_hash":"95fa18eecbc0905377a70b3ccd48636528d5131ccfa0126ed4639bc60d0003d8","block_index":310202,"block_time":310202000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(574,310202,'parse','blocks','{"block_index":310202,"ledger_hash":"084c24e81842ec8edc4144ad64df9f12377318fe4dc491b307b7d377f3f81b2b","messages_hash":"96cba00eb5b84fe3634ae0c4ab0bc5544b5f9a703f20e0c34c3877aa97769071","txlist_hash":"76c57648e216c5f191f04b79d2a1149d273b2a58a6b4956eb1d077abd2cfc113"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(575,310203,'insert','blocks','{"block_hash":"ab15c43e5ac0b9d4bd7da5a14b8030b55b83d5d1855d9174364adbebf42432f8","block_index":310203,"block_time":310203000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(575,310202,'insert','blocks','{"block_hash":"ab15c43e5ac0b9d4bd7da5a14b8030b55b83d5d1855d9174364adbebf42432f8","block_index":310203,"block_time":310203000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(576,310203,'parse','blocks','{"block_index":310203,"ledger_hash":"4b0b8d82a5a2c8600a09b1050eed4440d9e0f2d817498f3e32ba27ebcfbaf6d5","messages_hash":"36c279295138f4a6da31842ab3a843f35fdc05807920bb9909042562e3f72a83","txlist_hash":"3e49b55d1309646ffce3b91d3cc3c53c488377518fe30cf6397c0d3c2aec45f4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(577,310204,'insert','blocks','{"block_hash":"18996fb47d68e7f4ae140dc1eb80df3e5aba513a344a949fd7c3b4f7cd4d64cb","block_index":310204,"block_time":310204000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(577,310203,'insert','blocks','{"block_hash":"18996fb47d68e7f4ae140dc1eb80df3e5aba513a344a949fd7c3b4f7cd4d64cb","block_index":310204,"block_time":310204000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(578,310204,'parse','blocks','{"block_index":310204,"ledger_hash":"9f81657142f7523c01595bef4e9008d8525c2337f6d90140e05abad619d94416","messages_hash":"689909b859f925743226073e922bf8f21ca99caade631f6a1dd49b16dff9fce8","txlist_hash":"89015233602aeb77d2097a328f2a5a065245131ac88ec6ac2d2b9b056e7764b6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(579,310205,'insert','blocks','{"block_hash":"5363526ff34a35e018d1a18544ad865352a9abf4c801c50aa55742e71630c13a","block_index":310205,"block_time":310205000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(579,310204,'insert','blocks','{"block_hash":"5363526ff34a35e018d1a18544ad865352a9abf4c801c50aa55742e71630c13a","block_index":310205,"block_time":310205000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(580,310205,'parse','blocks','{"block_index":310205,"ledger_hash":"fd1cdea0193ed914cc408968efa42377d7c69453aa9bdf8bdf0731d4b1501b01","messages_hash":"4457523f49ff3994beb0520d8f8c96387bcaec1e3dad5d4e414c0118768e1f67","txlist_hash":"1ea101d94c29967a141d71d3b8b15b278f3530c4c16c7e0219b892072d89f8f6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(581,310206,'insert','blocks','{"block_hash":"0615d9fca5bdf694dca2b255fb9e9256f316aa6b8a9fc700aa63e769189b0518","block_index":310206,"block_time":310206000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(581,310205,'insert','blocks','{"block_hash":"0615d9fca5bdf694dca2b255fb9e9256f316aa6b8a9fc700aa63e769189b0518","block_index":310206,"block_time":310206000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(582,310206,'parse','blocks','{"block_index":310206,"ledger_hash":"5845d6bedf81fba710999bf2954b3c1f3f9ca007a09d812ccae8e2a6d3b9bb07","messages_hash":"643bb31e7baa89d28efcee7755e727165c26c6160da6e474bf0361ca45d4c928","txlist_hash":"e26d49ceb523c99c2583e7bec1b4bbe1f8686c2bd009626fa4c8966c642a1bb8"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(583,310207,'insert','blocks','{"block_hash":"533b4ece95c58d080f958b3982cbd4d964e95f789d0beffe4dd3c67c50f62585","block_index":310207,"block_time":310207000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(583,310206,'insert','blocks','{"block_hash":"533b4ece95c58d080f958b3982cbd4d964e95f789d0beffe4dd3c67c50f62585","block_index":310207,"block_time":310207000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(584,310207,'parse','blocks','{"block_index":310207,"ledger_hash":"b65cf7069a0eb909357cd5d45129b70c576eeabc0cb13404029d088e24a2be34","messages_hash":"7a0ee60726734da2812a9d04529425ae59ac22f6598b536a399f77428e3acb66","txlist_hash":"596206790b52de9f791b99f7e71e3543cec87d4c3b9439ded8b7cbcd182b08e6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(585,310208,'insert','blocks','{"block_hash":"26c1535b00852aec245bac47ad0167b3fa76f6e661fc96534b1c5e7fdc752f44","block_index":310208,"block_time":310208000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(585,310207,'insert','blocks','{"block_hash":"26c1535b00852aec245bac47ad0167b3fa76f6e661fc96534b1c5e7fdc752f44","block_index":310208,"block_time":310208000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(586,310208,'parse','blocks','{"block_index":310208,"ledger_hash":"aa54dc010fec8a0ef3871c91667c45e88ffac08ee2fc93274d7ad1b2b5b28102","messages_hash":"66543655288b9354381b07bd124c91433357babb742999fdf19b7c5928ebb9ac","txlist_hash":"3414e0af132ec9df1da5a4304a3c94529bd915631443d34b759a017ad166863a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(587,310209,'insert','blocks','{"block_hash":"23827b94762c64225d218fa3070a3ea1efce392e3a47a1663d894b8ff8a429bf","block_index":310209,"block_time":310209000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(587,310208,'insert','blocks','{"block_hash":"23827b94762c64225d218fa3070a3ea1efce392e3a47a1663d894b8ff8a429bf","block_index":310209,"block_time":310209000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(588,310209,'parse','blocks','{"block_index":310209,"ledger_hash":"c7866cb2098c87c1333da5b3dce4c84bdeb620c9f1898456b7cceb23e4027df0","messages_hash":"78c91e8e991f4e18fd9b2a200fdbceba6644c5baa7150ab48a55a06378fa2731","txlist_hash":"56dce3d0e9dfa62c44e422f41ecc1517bc98302341496db287adf309f666d3bb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(589,310210,'insert','blocks','{"block_hash":"70b24078df58ecc8f7370b73229d39e52bbadcf539814deccb98948ebd86ccc0","block_index":310210,"block_time":310210000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(589,310209,'insert','blocks','{"block_hash":"70b24078df58ecc8f7370b73229d39e52bbadcf539814deccb98948ebd86ccc0","block_index":310210,"block_time":310210000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(590,310210,'parse','blocks','{"block_index":310210,"ledger_hash":"207a1c90d1658d55fa0fc2e1507fce98521647ab5c4d11099c2742279cc92b3f","messages_hash":"b8d234858f912396a71c45ebae9b3a21bace1a8dda0827b9e8a9b82a47cea34d","txlist_hash":"ecd4bb45bef1d8b395add25118bbeedc8d96f818a471bd7606554946a023b151"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(591,310211,'insert','blocks','{"block_hash":"4acb44225e022e23c7fdea483db5b1f2e04069431a29c682604fe97d270c926d","block_index":310211,"block_time":310211000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(591,310210,'insert','blocks','{"block_hash":"4acb44225e022e23c7fdea483db5b1f2e04069431a29c682604fe97d270c926d","block_index":310211,"block_time":310211000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(592,310211,'parse','blocks','{"block_index":310211,"ledger_hash":"dfc7fe172f9bc77148a1bfad5d441a3688f718b4985406d0cefd4c4dcd926208","messages_hash":"03209d67b7b17a0027728b8940661ea37594bc07cfc6780033aa44c481f48af6","txlist_hash":"f999268e3400907f85a0448d124df4d139b228327721fad7ad29ef595b0d16c9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(593,310212,'insert','blocks','{"block_hash":"6ef5229ec6ea926e99bf4467b0ed49d444eedb652cc792d2b8968b1e9f3b0547","block_index":310212,"block_time":310212000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(593,310211,'insert','blocks','{"block_hash":"6ef5229ec6ea926e99bf4467b0ed49d444eedb652cc792d2b8968b1e9f3b0547","block_index":310212,"block_time":310212000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(594,310212,'parse','blocks','{"block_index":310212,"ledger_hash":"32a39bff0606ec93454a2cb144c0bbd1939bf2be6a2ae369b885afc0b5ef33c9","messages_hash":"079f23e8476ed4f50d9aa11b1dbc3ef842c51bc46b622f75c06b06a62388e701","txlist_hash":"2e46422b38cddef2d8a10b343115c5e587b5456480fb1a019f0a5d541e90afb8"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(595,310213,'insert','blocks','{"block_hash":"17673a8aeff01a8cdc80528df2bd87cdd4a748fcb36d44f3a6d221a6cbddcbe7","block_index":310213,"block_time":310213000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(595,310212,'insert','blocks','{"block_hash":"17673a8aeff01a8cdc80528df2bd87cdd4a748fcb36d44f3a6d221a6cbddcbe7","block_index":310213,"block_time":310213000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(596,310213,'parse','blocks','{"block_index":310213,"ledger_hash":"15968873880e97e849e59971d4ef19881b1c11c3148dba966f51d986c59ccf36","messages_hash":"36a8bd5e1cd13df3238cc21da9490b545e51981845daccd2d7c0f3e7476e9f69","txlist_hash":"fa1e7562a89ee572607e6cdbf26c80d4ee1aac2bcd45374d166e2e993f8672cb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(597,310214,'insert','blocks','{"block_hash":"4393b639990f6f7cd47b56da62c3470dcbb31ef37094b76f53829fc12d313454","block_index":310214,"block_time":310214000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(597,310213,'insert','blocks','{"block_hash":"4393b639990f6f7cd47b56da62c3470dcbb31ef37094b76f53829fc12d313454","block_index":310214,"block_time":310214000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(598,310214,'parse','blocks','{"block_index":310214,"ledger_hash":"dcbdc463154fe49a7f22611fcb53e5ca78501424ba741040d89cac9db0a03ac4","messages_hash":"2e5d68dcda983499b5f291e65d92baaf171cc830e18385d212e6c66e5c8c7da5","txlist_hash":"5928d3221dd0bd142368585dc56f9f8a68885be95b7ad46c35bc37fbc61f651f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(599,310215,'insert','blocks','{"block_hash":"c26253deaf7e8df5d62b158ea4290fc9e92a4a689dadc36915650679743a74c7","block_index":310215,"block_time":310215000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(599,310214,'insert','blocks','{"block_hash":"c26253deaf7e8df5d62b158ea4290fc9e92a4a689dadc36915650679743a74c7","block_index":310215,"block_time":310215000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(600,310215,'parse','blocks','{"block_index":310215,"ledger_hash":"6047855f1c691f27ade1cc4c587f1c11ff68f5f5bd7959a23f801e5da7773eed","messages_hash":"0b8f5bc09af225c25136f886347723693fd43c83b4a0602747803579bd4fe100","txlist_hash":"b6410b25a5d6f17a5431f621d6226491bcb2ed97dac543c06e832cdaa8853d5a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(601,310216,'insert','blocks','{"block_hash":"6b77673d16911635a36fe55575d26d58cda818916ef008415fa58076eb15b524","block_index":310216,"block_time":310216000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(601,310215,'insert','blocks','{"block_hash":"6b77673d16911635a36fe55575d26d58cda818916ef008415fa58076eb15b524","block_index":310216,"block_time":310216000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(602,310216,'parse','blocks','{"block_index":310216,"ledger_hash":"a12fbb09858868de79095c8e3222f6fa179f2f00bc3c97c8205fd9367ae05aef","messages_hash":"58b268d9c7d1747b50ef4a6424d3e57365ce66afa440b9b365126437c676d3cc","txlist_hash":"f8b3b6d36fcb97071d826e68d2e6e5bc60f982c470e68644d94a6ec1342d0148"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(603,310217,'insert','blocks','{"block_hash":"0e09244f49225d1115a2a0382365b5728adbf04f997067ea17df89e84f9c13a8","block_index":310217,"block_time":310217000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(603,310216,'insert','blocks','{"block_hash":"0e09244f49225d1115a2a0382365b5728adbf04f997067ea17df89e84f9c13a8","block_index":310217,"block_time":310217000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(604,310217,'parse','blocks','{"block_index":310217,"ledger_hash":"419d8dc096dd58523cd4822748754158f0c11945bbb62100cb5268cd802580a8","messages_hash":"03e581edbb659df8a0b7a2996d0ce6b97f1f9dff6d10a7d1e9443f5b20836521","txlist_hash":"a61fb813a69ed40eae923918a73a8dfe51dd6fa14f5426ada1a5a543ab7bb0ce"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(605,310218,'insert','blocks','{"block_hash":"3eb26381d8c93399926bb83c146847bfe0b69024220cb145fe6601f6dda957d9","block_index":310218,"block_time":310218000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(605,310217,'insert','blocks','{"block_hash":"3eb26381d8c93399926bb83c146847bfe0b69024220cb145fe6601f6dda957d9","block_index":310218,"block_time":310218000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(606,310218,'parse','blocks','{"block_index":310218,"ledger_hash":"a36c07f7fdfaf7878d73baf14aee58b42220b2b2411fd1864450ec6ce1fbd173","messages_hash":"9c7ecbd39c0967b83ae38062d7674b5fc87e4330253c78da3d19d7c1d8e12fe2","txlist_hash":"dc1d785fe75a506a691f0eccaf752017fbaf5ce2b7225bdde3fb538281698e4e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(607,310219,'insert','blocks','{"block_hash":"60da40e38967aadf08696641d44ee5372586b884929974e1cbd5c347dc5befbf","block_index":310219,"block_time":310219000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(607,310218,'insert','blocks','{"block_hash":"60da40e38967aadf08696641d44ee5372586b884929974e1cbd5c347dc5befbf","block_index":310219,"block_time":310219000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(608,310219,'parse','blocks','{"block_index":310219,"ledger_hash":"7958aa94088ecf0384a9a6b0569e9507d208e009e9ce139c823960e40996a47e","messages_hash":"128105377e3c494bd2ddebf06d4f7b341d300abbae44e42233771cbdb8f6b2f0","txlist_hash":"c9aa622e3b372ba0c76efe97c1443cb89f2dfbcf8ff5e28dedf9b3abab3d6384"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(609,310220,'insert','blocks','{"block_hash":"d78c428ac4d622ab4b4554aa87aeee013d58f428422b35b0ba0f736d491392ef","block_index":310220,"block_time":310220000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(609,310219,'insert','blocks','{"block_hash":"d78c428ac4d622ab4b4554aa87aeee013d58f428422b35b0ba0f736d491392ef","block_index":310220,"block_time":310220000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(610,310220,'parse','blocks','{"block_index":310220,"ledger_hash":"00907c4368c2dc76d1ef98a0ba3c86bc4746ed2734b0c10f3797e0af70714240","messages_hash":"f43ab6ee98113914d6107f8950d5f6fb8affc0764a4723aa3da76bb60462ebe6","txlist_hash":"d0c3959f899232cdb5fed61bac2c09e45254959e8bc1a076acb3ba5e3ee63e65"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(611,310221,'insert','blocks','{"block_hash":"cf5263e382afd268e6059b28dc5862285632efe8d36ba218930765e633d48f2d","block_index":310221,"block_time":310221000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(611,310220,'insert','blocks','{"block_hash":"cf5263e382afd268e6059b28dc5862285632efe8d36ba218930765e633d48f2d","block_index":310221,"block_time":310221000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(612,310221,'parse','blocks','{"block_index":310221,"ledger_hash":"2e42f882087dc2158036592298321113f1b34e15b414efa6d43364c06d368540","messages_hash":"36833c9b3c6ada300b80182e1b9e78ba57b16030c2350a98ae24f85212a8d1c6","txlist_hash":"cf40107f8d11aa8ba96b03912967f88c44e69e20d7105f497d5418fc08aa5800"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(613,310222,'insert','blocks','{"block_hash":"1519f6ec801bf490282065f5299d631be6553af4b0883df344e7f7e5f49c4993","block_index":310222,"block_time":310222000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(613,310221,'insert','blocks','{"block_hash":"1519f6ec801bf490282065f5299d631be6553af4b0883df344e7f7e5f49c4993","block_index":310222,"block_time":310222000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(614,310222,'parse','blocks','{"block_index":310222,"ledger_hash":"00c4a5d41dd629bd0973c03152e4519214dce68498999c8dddc1f7a1cad28a82","messages_hash":"9436a06f0aa4299d6d9dd6eeb34a34763dc1571873ec7d801504482f84e0453f","txlist_hash":"6a012ee8e82d8d24b0a24d4bbab74cbe226afea1a9c1e129aceccd1d7591a107"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(615,310223,'insert','blocks','{"block_hash":"af208e2029fa49c19aa4770e582e32e0802d0baac463b00393a7a668fa2ea047","block_index":310223,"block_time":310223000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(615,310222,'insert','blocks','{"block_hash":"af208e2029fa49c19aa4770e582e32e0802d0baac463b00393a7a668fa2ea047","block_index":310223,"block_time":310223000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(616,310223,'parse','blocks','{"block_index":310223,"ledger_hash":"41c7a0fa22ebee9d55f2a3b118314293d155c349ba01069a23ddff76dc842955","messages_hash":"1dd11ae205fb0e3cd0e40f6b38f828c87984aee77d866a89459b419bc35c8b91","txlist_hash":"1080406ec3ccb84490487860bdd507637fa8fbdc68fc886d082bfcdf9ac835e7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(617,310224,'insert','blocks','{"block_hash":"5b57815583a5333b14beb50b4a35aeb108375492ee452feeeeb7c4a96cfd6e4c","block_index":310224,"block_time":310224000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(617,310223,'insert','blocks','{"block_hash":"5b57815583a5333b14beb50b4a35aeb108375492ee452feeeeb7c4a96cfd6e4c","block_index":310224,"block_time":310224000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(618,310224,'parse','blocks','{"block_index":310224,"ledger_hash":"66c268462442b69efb56b29e08aae1a404d3543e0a20711e8998a31af45ee929","messages_hash":"2959b2278c2b1ec51545610be3ffe8558ee5b8d21654226a04e99fbfad17cb5d","txlist_hash":"1d5188bf347d72bc66239f3b4c709ecca24141c5474755c567f4176293f275af"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(619,310225,'insert','blocks','{"block_hash":"0c2992fc10b2ce8d6d08e018397d366c94231d3a05953e79f2db00605c82e41c","block_index":310225,"block_time":310225000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(619,310224,'insert','blocks','{"block_hash":"0c2992fc10b2ce8d6d08e018397d366c94231d3a05953e79f2db00605c82e41c","block_index":310225,"block_time":310225000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(620,310225,'parse','blocks','{"block_index":310225,"ledger_hash":"cf39fb28a7e4d4db7657bb11a30d592a15c049000d7ac86d4fb3d942bf879b95","messages_hash":"efd4e825c77a27f6c0d8b18c54f144166479fb35ad75dbab439122b908f4d0b5","txlist_hash":"61dccc2a6cdf50b56700c893611fac0dd6cccadcd672cd438452ebd30852ccf7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(621,310226,'insert','blocks','{"block_hash":"b3f6cd212aee8c17ae964536852e7a53c69433bef01e212425a5e99ec0b7e1cb","block_index":310226,"block_time":310226000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(621,310225,'insert','blocks','{"block_hash":"b3f6cd212aee8c17ae964536852e7a53c69433bef01e212425a5e99ec0b7e1cb","block_index":310226,"block_time":310226000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(622,310226,'parse','blocks','{"block_index":310226,"ledger_hash":"cb622a4d04645ad96d3e0006f2b7632e8b82e44206d6c1cb75212b059fe18de5","messages_hash":"07a2801c71185f1fd03a4372433bc536c79aaf46ed374209a41a1fce2d0e9ff8","txlist_hash":"2c131ef357cdc433dce05cf915be1b2c243e51208c877852a19c67968caddca4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(623,310227,'insert','blocks','{"block_hash":"ea8386e130dd4e84669dc8b2ef5f4818e2f5f35403f2dc1696dba072af2bc552","block_index":310227,"block_time":310227000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(623,310226,'insert','blocks','{"block_hash":"ea8386e130dd4e84669dc8b2ef5f4818e2f5f35403f2dc1696dba072af2bc552","block_index":310227,"block_time":310227000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(624,310227,'parse','blocks','{"block_index":310227,"ledger_hash":"60ae4209347248a3f7ad39b6436627f06e45433f6b6dd89cfd3383d68974a41c","messages_hash":"d652cb4035428a7d0c6ff73d8f6b3bc341ebcfefbd5129f45d77d9a4c63648a3","txlist_hash":"200ccbec2ba0927612c50a1ce2a58f856ecbda876943bfc2d3404724fff1927a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(625,310228,'insert','blocks','{"block_hash":"8ab465399d5feb5b7933f3e55539a2f53495277dd0780b7bf15f9338560efc7b","block_index":310228,"block_time":310228000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(625,310227,'insert','blocks','{"block_hash":"8ab465399d5feb5b7933f3e55539a2f53495277dd0780b7bf15f9338560efc7b","block_index":310228,"block_time":310228000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(626,310228,'parse','blocks','{"block_index":310228,"ledger_hash":"798206ee77c9e2fc8fe943f9bf2074c9c2560f534e3304b944e2ed3c89ce8bcb","messages_hash":"03298834b11f7cf4a87e5717022fea72055bc47a6e8d0f62e4a9810f4cb96b82","txlist_hash":"c8c9a18e8420e274c98c528e0d0636aba20f5a6c983135a61e9cd47d60123185"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(627,310229,'insert','blocks','{"block_hash":"d0ccca58f131c8a12ef375dc70951c3aa79c638b4c4d371c7f720c9c784f3297","block_index":310229,"block_time":310229000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(627,310228,'insert','blocks','{"block_hash":"d0ccca58f131c8a12ef375dc70951c3aa79c638b4c4d371c7f720c9c784f3297","block_index":310229,"block_time":310229000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(628,310229,'parse','blocks','{"block_index":310229,"ledger_hash":"becad39a4d1bc8d73a856fa1d2bfa251f29b23fec9448a91932dc610243fd8df","messages_hash":"959fc4e9bdfff5818ca84c2a68c31868f6d3bff79e7dcc5df9da122959332a11","txlist_hash":"1d817cb41854bebc85173e6c6c0a8e6ae5a1bdbbd1077a64265ec4c96d60ca45"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(629,310230,'insert','blocks','{"block_hash":"f126b9318ad8e2d5812d3703ce083a43e179775615b03bd379dae5db46362f35","block_index":310230,"block_time":310230000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(629,310229,'insert','blocks','{"block_hash":"f126b9318ad8e2d5812d3703ce083a43e179775615b03bd379dae5db46362f35","block_index":310230,"block_time":310230000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(630,310230,'parse','blocks','{"block_index":310230,"ledger_hash":"e08eac4daa7d7bc70f2f47a835bb80993d6d6db06d8d8986101b717db1c62ed6","messages_hash":"b540fdab5cebac778cf187ae4e15720474ada921e9ceaa1393176bd2a4b8a3ac","txlist_hash":"d37fa640132bf2595891bfaa5d1d562495c780569e2a5d4f8863fd60d6396d95"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(631,310231,'insert','blocks','{"block_hash":"8667a5b933b6a43dab53858e76e4b9f24c3ac83d3f10b97bb20fde902abd4ceb","block_index":310231,"block_time":310231000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(631,310230,'insert','blocks','{"block_hash":"8667a5b933b6a43dab53858e76e4b9f24c3ac83d3f10b97bb20fde902abd4ceb","block_index":310231,"block_time":310231000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(632,310231,'parse','blocks','{"block_index":310231,"ledger_hash":"a761c29e76c9d5090cd1d6424beb91d0a9fd9546c67ecaa6d4879177b6745b59","messages_hash":"c5044aaa4b6c6310e113ab4b8d4a06108a09e57b6f082589aa84210ff6ef74eb","txlist_hash":"7bdcbdcc058e4c3d39751316b39bc65594624dc79fc8556e2847c94fb5986200"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(633,310232,'insert','blocks','{"block_hash":"813813cec50fd01b6d28277785f9e0ae81f3f0ca4cdee9c4a4415d3719c294e8","block_index":310232,"block_time":310232000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(633,310231,'insert','blocks','{"block_hash":"813813cec50fd01b6d28277785f9e0ae81f3f0ca4cdee9c4a4415d3719c294e8","block_index":310232,"block_time":310232000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(634,310232,'parse','blocks','{"block_index":310232,"ledger_hash":"5da469b7e21ad8ec4fe7cc2f426dcaeb18a3a4a3c44385d529a8b252c77a9e43","messages_hash":"64b6eb076323d0a896145203b0c7c201c2b57511c3d85d7b546395d75ed44a53","txlist_hash":"721ab1fecac8b537de1c90225f23a62d02a6e8b392f5211a8e020d9169dc75f6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(635,310233,'insert','blocks','{"block_hash":"79a443f726c2a7464817deb2c737a264c10488cac02c001fd1a4d1a76de411d6","block_index":310233,"block_time":310233000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(635,310232,'insert','blocks','{"block_hash":"79a443f726c2a7464817deb2c737a264c10488cac02c001fd1a4d1a76de411d6","block_index":310233,"block_time":310233000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(636,310233,'parse','blocks','{"block_index":310233,"ledger_hash":"d8531834d572acc01591997cac000185facc033e1ab72f8218a70d0ae3898914","messages_hash":"d9f33ce31a6349baf6626faf215023a0dcaa381fbbc85519a36790adea83a30c","txlist_hash":"a0b57a1491335a2fde88223b77d7c8a248101187be0b71894b6c56c426603867"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(637,310234,'insert','blocks','{"block_hash":"662e70a85ddc71d3feae92864315e63c2e1be0db715bb5d8432c21a0c14a63cd","block_index":310234,"block_time":310234000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(637,310233,'insert','blocks','{"block_hash":"662e70a85ddc71d3feae92864315e63c2e1be0db715bb5d8432c21a0c14a63cd","block_index":310234,"block_time":310234000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(638,310234,'parse','blocks','{"block_index":310234,"ledger_hash":"0ac6803ab61e14bb08fd8051424565086ab11b4d33faef077f5a0732eec6f766","messages_hash":"9174a71d733b2d1bf9fe8554ee25a8f90b8316b6c4bf8f93a290c8bcd96d7482","txlist_hash":"b719ec81bc5245492809b946a86c76c121148d506292a4ae125b368f1a24b72a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(639,310235,'insert','blocks','{"block_hash":"66915fa9ef2878c38eaf21c50df95d87669f63b40da7bdf30e3c72c6b1fba38e","block_index":310235,"block_time":310235000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(639,310234,'insert','blocks','{"block_hash":"66915fa9ef2878c38eaf21c50df95d87669f63b40da7bdf30e3c72c6b1fba38e","block_index":310235,"block_time":310235000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(640,310235,'parse','blocks','{"block_index":310235,"ledger_hash":"5f7de1c7fe45858dcc844604a77051d55de3b9dbb5f5d9910ead8bd0f3af48d8","messages_hash":"26bcd4fe3cc5d852b6ee428aa6d8fed7ac29d4870aa3765afb64a7f606f34f98","txlist_hash":"8d81c116619e760608161facac457bb00d4e816c049afbe42f6e0f7d7f1d09cd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(641,310236,'insert','blocks','{"block_hash":"d47fadd733c145ad1a3f4b00e03016697ad6e83b15bd6a781589a3a574de23e4","block_index":310236,"block_time":310236000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(641,310235,'insert','blocks','{"block_hash":"d47fadd733c145ad1a3f4b00e03016697ad6e83b15bd6a781589a3a574de23e4","block_index":310236,"block_time":310236000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(642,310236,'parse','blocks','{"block_index":310236,"ledger_hash":"c0437ca60921bb73516c31a74f78d2fb48d2c628b629c8f55c8fbb0060718d76","messages_hash":"a90b36102b9796577c3433977637279f790986193da640ed70d16c82dbcb1697","txlist_hash":"1c50aa16f8543f1eee5c2585aa8f7ee373bdb58648b430189ef4d8c9b0b767db"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(643,310237,'insert','blocks','{"block_hash":"2561400b16b93cfbb1eaba0f10dfaa1b06d70d9a4d560639d1bcc7759e012095","block_index":310237,"block_time":310237000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(643,310236,'insert','blocks','{"block_hash":"2561400b16b93cfbb1eaba0f10dfaa1b06d70d9a4d560639d1bcc7759e012095","block_index":310237,"block_time":310237000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(644,310237,'parse','blocks','{"block_index":310237,"ledger_hash":"4340ab34a083b38dbca477b6cc2479e6d70ffd6d6b9b75772068674297abadff","messages_hash":"387939cbc42aadf395163de49936ffa63ea379a764238cedc0a52ecb280a8810","txlist_hash":"2f23795147dfb09a113607e442cdc926222a2b9c3dc173b9e92ab8560de20c9f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(645,310238,'insert','blocks','{"block_hash":"43420903497d2735dc3077f4d4a2227c29e6fc2fa1c8fd5d55e7ba88782d3d55","block_index":310238,"block_time":310238000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(645,310237,'insert','blocks','{"block_hash":"43420903497d2735dc3077f4d4a2227c29e6fc2fa1c8fd5d55e7ba88782d3d55","block_index":310238,"block_time":310238000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(646,310238,'parse','blocks','{"block_index":310238,"ledger_hash":"6a76891c10ff0f9416ae1a024b985d621154918bd8ab545980b57fd2d18c4af7","messages_hash":"12bb025b6e426c682d70a6ae543622d706b596d8d1848c61b0fd456113766738","txlist_hash":"31d5717812d8f7e54ac8b7a000c7b599e2123a1de205cef6559b3930c466b961"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(647,310239,'insert','blocks','{"block_hash":"065efefe89eadd92ef1d12b092fd891690da79eec79f96b969fbaa9166cd6ef1","block_index":310239,"block_time":310239000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(647,310238,'insert','blocks','{"block_hash":"065efefe89eadd92ef1d12b092fd891690da79eec79f96b969fbaa9166cd6ef1","block_index":310239,"block_time":310239000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(648,310239,'parse','blocks','{"block_index":310239,"ledger_hash":"1128bb89562fc3b112da425a3dee67adaf741a8021ee378bdfeb44af3b1b1fac","messages_hash":"c501a04f979e29b0f67e8c4b2ab0cd68bcc610b98eba76d64c28e426e9162334","txlist_hash":"82b7482bdf98200b43d483dc7725ea9069ab96d897fa88dfafd73334132d362e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(649,310240,'insert','blocks','{"block_hash":"50aac88bb1fa76530134b6826a6cc0d056b0f4c784f86744aae3cfc487eeeb26","block_index":310240,"block_time":310240000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(649,310239,'insert','blocks','{"block_hash":"50aac88bb1fa76530134b6826a6cc0d056b0f4c784f86744aae3cfc487eeeb26","block_index":310240,"block_time":310240000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(650,310240,'parse','blocks','{"block_index":310240,"ledger_hash":"be05624b84b2e76794f065f36b4e98d6c6c120f1d8a5db91957bbe7008ce3240","messages_hash":"d0dc75e494d5935319620e47fe5aced48a36185547557d7ecdf4105ce3865810","txlist_hash":"bfd037773e4ad5fedd072183d19e824c36cf21549c374f7d7dab3ac313a1542b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(651,310241,'insert','blocks','{"block_hash":"792d50a3f8c22ddafe63fa3ba9a0a39dd0e358ba4e2ebcd853ca12941e85bee4","block_index":310241,"block_time":310241000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(651,310240,'insert','blocks','{"block_hash":"792d50a3f8c22ddafe63fa3ba9a0a39dd0e358ba4e2ebcd853ca12941e85bee4","block_index":310241,"block_time":310241000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(652,310241,'parse','blocks','{"block_index":310241,"ledger_hash":"5abfdfb1aa42fb80ca4538062d152d965b6a7a56bd1e170a7a109409a4606b7a","messages_hash":"021d83e2bcd0861be9bda8a7c6543a42d5cb2b1cad18986155556c784420bae3","txlist_hash":"e0bccb8ee5ac848700b228d8d21970f33fcc7a2c091e4b1d1f7f71c09404ecbe"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(653,310242,'insert','blocks','{"block_hash":"85dda4f2d80069b72728c9e6af187e79f486254666604137533cbfe216c5ea93","block_index":310242,"block_time":310242000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(653,310241,'insert','blocks','{"block_hash":"85dda4f2d80069b72728c9e6af187e79f486254666604137533cbfe216c5ea93","block_index":310242,"block_time":310242000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(654,310242,'parse','blocks','{"block_index":310242,"ledger_hash":"5f354f767df3256aa6a23544a7164160b9fabe481c85d1891f5250b3026dd7b8","messages_hash":"f20bae6583a51b6e9170deca1b35559f7a93dde4f14718fba8d132d3fe0e6322","txlist_hash":"a9b87a1cd3146663579bf192b97136602806865bb60ca2d464e3111872b61b7f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(655,310243,'insert','blocks','{"block_hash":"a1f51c9370b0c1171b5be282b5b4892000d8e932d5d41963e28e5d55436ba1bd","block_index":310243,"block_time":310243000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(655,310242,'insert','blocks','{"block_hash":"a1f51c9370b0c1171b5be282b5b4892000d8e932d5d41963e28e5d55436ba1bd","block_index":310243,"block_time":310243000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(656,310243,'parse','blocks','{"block_index":310243,"ledger_hash":"ea3acc31b3c298237fa11ca4400c65ee46732c96e0b7fac5a183dd49d938e730","messages_hash":"d9519ac42fde29980b3bc45cb459ee7e430192d8b5780930877da95a6510c14e","txlist_hash":"b7226a87411a48bc0b25e014f2929d63979a297600f51723a0c9bb89fef120b0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(657,310244,'insert','blocks','{"block_hash":"46e98809a8af5158ede4dfaa5949f5be35578712d59a9f4f1de995a6342c58df","block_index":310244,"block_time":310244000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(657,310243,'insert','blocks','{"block_hash":"46e98809a8af5158ede4dfaa5949f5be35578712d59a9f4f1de995a6342c58df","block_index":310244,"block_time":310244000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(658,310244,'parse','blocks','{"block_index":310244,"ledger_hash":"07ad792741a48d5a7b657e6c4dc83e3534c79bd1e7da7044139516124adc8f80","messages_hash":"004314c5aec356c4085a994e40d6e7af4228da1e3ad37071c58a406c9d79ea21","txlist_hash":"baab169058840f62c00af1dc51ee0a77fb964dd27c6241463650fdb6c77d3b6a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(659,310245,'insert','blocks','{"block_hash":"59f634832088aced78462dd164efd7081148062a63fd5b669af422f4fb55b7ae","block_index":310245,"block_time":310245000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(659,310244,'insert','blocks','{"block_hash":"59f634832088aced78462dd164efd7081148062a63fd5b669af422f4fb55b7ae","block_index":310245,"block_time":310245000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(660,310245,'parse','blocks','{"block_index":310245,"ledger_hash":"d36a618af8e92da03b373ab0137ded666db6cef906a6b2c0cb8c71057a1a5903","messages_hash":"f256e29cac9ed8fd9084d5ba5c67dcf17a9cfdbf448002b4d23be878f8f6c431","txlist_hash":"18cf40a1489af6f99dc454630c35dddf20acacbf979d47acb30a5831e55f920e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(661,310246,'insert','blocks','{"block_hash":"6f3d690448b1bd04aaf01cd2a8e7016d0618a61088f2b226b442360d02b2e4cd","block_index":310246,"block_time":310246000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(661,310245,'insert','blocks','{"block_hash":"6f3d690448b1bd04aaf01cd2a8e7016d0618a61088f2b226b442360d02b2e4cd","block_index":310246,"block_time":310246000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(662,310246,'parse','blocks','{"block_index":310246,"ledger_hash":"a34e154571ee585a839053a851a007d6d433d3efd2b3e923a9c4ec4bb0dc9d98","messages_hash":"92054cd8a49ac6948cac199791828d3caddd81f90d220fc2da94230f776c98b1","txlist_hash":"a2103af3fa84dc4015979f3a629c46e2234f534f86d7c5a403275a8eae144ba7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(663,310247,'insert','blocks','{"block_hash":"fce808e867645071dc8c198bc9a3757536948b972292f743b1e14d2d8283ed66","block_index":310247,"block_time":310247000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(663,310246,'insert','blocks','{"block_hash":"fce808e867645071dc8c198bc9a3757536948b972292f743b1e14d2d8283ed66","block_index":310247,"block_time":310247000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(664,310247,'parse','blocks','{"block_index":310247,"ledger_hash":"ee94fcb9210718095ccdf63f30ab081f45dff765a9ca4f5c86b1b0d98973ef90","messages_hash":"5498543f7056d1878b53eee6bbfbfc859729deff6215caaf7b228b90c2ae0716","txlist_hash":"39cff977657fdbe649c601531383548a3922cde40dd998c355c201cb6deee9f6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(665,310248,'insert','blocks','{"block_hash":"26c05bbcfef8bcd00d0967e804903d340c337b9d9f3a3e3e5a9773363c3e9275","block_index":310248,"block_time":310248000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(665,310247,'insert','blocks','{"block_hash":"26c05bbcfef8bcd00d0967e804903d340c337b9d9f3a3e3e5a9773363c3e9275","block_index":310248,"block_time":310248000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(666,310248,'parse','blocks','{"block_index":310248,"ledger_hash":"029884a5273466fa45cdfbd91ae3aaca50af0771d22f6b55af6367348c2802e2","messages_hash":"a48928b613ea6f3f01d29fdf8a6627a62af3454eeb3fd706201264e41ad28e71","txlist_hash":"6951bec53cc30ad6d9dd3f38f5fa8e4b876cdb1637595d38614ff3e42b53edce"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(667,310249,'insert','blocks','{"block_hash":"93f5a32167b07030d75400af321ca5009a2cf9fce0e97ea763b92593b8133617","block_index":310249,"block_time":310249000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(667,310248,'insert','blocks','{"block_hash":"93f5a32167b07030d75400af321ca5009a2cf9fce0e97ea763b92593b8133617","block_index":310249,"block_time":310249000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(668,310249,'parse','blocks','{"block_index":310249,"ledger_hash":"dc10674812c5249c693ab7b148d048439a0d77266014f3afc1810a6260838f02","messages_hash":"1e5bb681e064d631c8fdaee31e42df684856a141bb47c387a509b4c888a83644","txlist_hash":"2f53ae50e27194404c5b85dab55335582b2961c6997393a9c48e6708bab8f1dc"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(669,310250,'insert','blocks','{"block_hash":"4364d780ef6a5e11c1bf2e36374e848dbbd8d041cde763f9a2f3b85f5bb017a2","block_index":310250,"block_time":310250000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(669,310249,'insert','blocks','{"block_hash":"4364d780ef6a5e11c1bf2e36374e848dbbd8d041cde763f9a2f3b85f5bb017a2","block_index":310250,"block_time":310250000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(670,310250,'parse','blocks','{"block_index":310250,"ledger_hash":"a0fd49b46ff0000e83d4c56281dfe2be1bbfc924c75969726754b05bf7107641","messages_hash":"58fe2492038e1061f1da22695198180f159b434c09fe8184abb758bfde7dd8ed","txlist_hash":"5148416db7a3e45edd128f1b9b5c61b916ce94f25638cc90a8d73f60afe64176"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(671,310251,'insert','blocks','{"block_hash":"63a3897d988330d59b8876ff13aa9eac968de3807f1800b343bd246571f0dca7","block_index":310251,"block_time":310251000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(671,310250,'insert','blocks','{"block_hash":"63a3897d988330d59b8876ff13aa9eac968de3807f1800b343bd246571f0dca7","block_index":310251,"block_time":310251000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(672,310251,'parse','blocks','{"block_index":310251,"ledger_hash":"bdef6a6203d28d314dc087e539a9cdad19d123b605824f0a66f13bf5f72de9b8","messages_hash":"dc119235a0d3348db073f20e5edd73ba7886d07bd928c6593c8b531697a2e8c3","txlist_hash":"6742a15406482537d29722db3302d492647e4c7487d840fc8e7d74d0806c3bee"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(673,310252,'insert','blocks','{"block_hash":"768d65dfb67d6b976279cbfcf5927bb082fad08037bc0c72127fab0ebab7bc43","block_index":310252,"block_time":310252000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(673,310251,'insert','blocks','{"block_hash":"768d65dfb67d6b976279cbfcf5927bb082fad08037bc0c72127fab0ebab7bc43","block_index":310252,"block_time":310252000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(674,310252,'parse','blocks','{"block_index":310252,"ledger_hash":"8da11bec0d58b196ddb073d3aba0def98f01f83da654765fcae21cae6046214e","messages_hash":"b91883ba3c87f07f7f3075cedc509a164fc69cccb3f7b4955263f0a427fa2555","txlist_hash":"2c11848ca51ba429a094ef40b1aa019c132cd9fd6f954139dab5324d77eb7125"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(675,310253,'insert','blocks','{"block_hash":"bc167428ff6b39acf39fa56f5ca83db24493d8dd2ada59b02b45f59a176dbe9e","block_index":310253,"block_time":310253000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(675,310252,'insert','blocks','{"block_hash":"bc167428ff6b39acf39fa56f5ca83db24493d8dd2ada59b02b45f59a176dbe9e","block_index":310253,"block_time":310253000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(676,310253,'parse','blocks','{"block_index":310253,"ledger_hash":"2efa2c5781899d213741e795ca62fbee9d3ddf53792ce002db7484adc66bfbd4","messages_hash":"8c30b4215455a7b5c4fb35ff4b675702192cf87e37cf3a89be543fd46109e8ca","txlist_hash":"1036976d6406322c4c0afb2c6be13d6b89cfb2feb30306c9df8a499330d5489f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(677,310254,'insert','blocks','{"block_hash":"ebda5a4932d24f6cf250ffbb9232913ae47af84d0f0317c12ae6506c05db26e0","block_index":310254,"block_time":310254000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(677,310253,'insert','blocks','{"block_hash":"ebda5a4932d24f6cf250ffbb9232913ae47af84d0f0317c12ae6506c05db26e0","block_index":310254,"block_time":310254000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(678,310254,'parse','blocks','{"block_index":310254,"ledger_hash":"d062ec468e76421d3769a99eb3c8b2cbf4bf393d109ba13b3bce128613fff547","messages_hash":"12b9c9f7b4c06692d2e1c8ccad20ac1ad2be2bea92cbffd939f4ab8d28374fbe","txlist_hash":"098200d06ee21c916a203065eae3cffe8e2c80e32bce890f96e6bee400cf16ee"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(679,310255,'insert','blocks','{"block_hash":"cf36803c1789a98e8524f7bcaff084101d4bc98593ef3c9b9ad1a75d2961f8f4","block_index":310255,"block_time":310255000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(679,310254,'insert','blocks','{"block_hash":"cf36803c1789a98e8524f7bcaff084101d4bc98593ef3c9b9ad1a75d2961f8f4","block_index":310255,"block_time":310255000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(680,310255,'parse','blocks','{"block_index":310255,"ledger_hash":"5c531dc8a7461e9e7a2ead654509d76c9be3427b1d2b75c0ac7ae0e03126c49a","messages_hash":"0ad73b9f29a65b6006fab73449dce8503f1afb74b31cc14d7cbb873df28c48d6","txlist_hash":"b9c0f364e8694264c33b7d993ed45f645410820dd0ff39704b79f6aaa64a46c4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(681,310256,'insert','blocks','{"block_hash":"d0b4cf4e77cbbaee784767f3c75675ab1bf50e733db73fa337aa20edefdd5619","block_index":310256,"block_time":310256000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(681,310255,'insert','blocks','{"block_hash":"d0b4cf4e77cbbaee784767f3c75675ab1bf50e733db73fa337aa20edefdd5619","block_index":310256,"block_time":310256000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(682,310256,'parse','blocks','{"block_index":310256,"ledger_hash":"8da9f0162e15e33e14e5e1e22c2fd847055a65b99eec519dd069a83bb9006b51","messages_hash":"58e3369f4b854d4dcf2b03cebb0d9c22eb74381bf8c4f77e46527f6db4ff9205","txlist_hash":"fbb34ac53fa4a19bb467c92b87291aeafd8bf8c43be49c7d487f962df5c50d21"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(683,310257,'insert','blocks','{"block_hash":"0f42e304acaa582130b496647aa41dcb6b76b5700f7c43dd74b8275c35565f34","block_index":310257,"block_time":310257000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(683,310256,'insert','blocks','{"block_hash":"0f42e304acaa582130b496647aa41dcb6b76b5700f7c43dd74b8275c35565f34","block_index":310257,"block_time":310257000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(684,310257,'parse','blocks','{"block_index":310257,"ledger_hash":"0cf6657db5f3145587a466c05f237289b639668d844abfd8d46430c090b54913","messages_hash":"35b3a89b3adf80381946f70c49cf74fd946b88eb9d243217623c04c645c6be63","txlist_hash":"71c115bc32aefb584d499c054cd09d0ea58ea0cc11d187bd5add8f261f43f055"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(685,310258,'insert','blocks','{"block_hash":"3a0156dd7512738a0a7adba8eeac1815fac224f49312f75b19a36afb744c579f","block_index":310258,"block_time":310258000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(685,310257,'insert','blocks','{"block_hash":"3a0156dd7512738a0a7adba8eeac1815fac224f49312f75b19a36afb744c579f","block_index":310258,"block_time":310258000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(686,310258,'parse','blocks','{"block_index":310258,"ledger_hash":"e340defe4bd84e788f9c5b083849e6aa1d5c7f33123ebe62d7abe04b8a9e312e","messages_hash":"c2f31d665dead39ac346bfc8a6459ef003c35ebe858bf2273cc3a532df345a5a","txlist_hash":"0725d989aaa9e8f1a5604f1807ec8f5aa2db518ec2397479e7e6c48c4d2b04ca"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(687,310259,'insert','blocks','{"block_hash":"e5ed3cdaaf637dd7aa2a7db134253afe716ffdf153e05672df3159b71f8538a9","block_index":310259,"block_time":310259000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(687,310258,'insert','blocks','{"block_hash":"e5ed3cdaaf637dd7aa2a7db134253afe716ffdf153e05672df3159b71f8538a9","block_index":310259,"block_time":310259000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(688,310259,'parse','blocks','{"block_index":310259,"ledger_hash":"03ca0cbce5a5b50988c19c0d4e754240f50821695dca767d1169f8c7f5c1fdcc","messages_hash":"27744046c69e0650cb385182b7b1518085f196c8c2fb11baf13661d2229f4a9c","txlist_hash":"19e343fb3645b7ae94a299eb13691ea02d054e8acef0484a95a4079e42e487b1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(689,310260,'insert','blocks','{"block_hash":"8717ddcc837032ad1dc0bb148ddc0f6a561ed0d483b81abb0c493c5c82ec33cd","block_index":310260,"block_time":310260000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(689,310259,'insert','blocks','{"block_hash":"8717ddcc837032ad1dc0bb148ddc0f6a561ed0d483b81abb0c493c5c82ec33cd","block_index":310260,"block_time":310260000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(690,310260,'parse','blocks','{"block_index":310260,"ledger_hash":"83a3b43e01f4f25ba05b527415baa3e8b8adba319628c245988136bd8fcdfcfe","messages_hash":"d37ff480b33c750eb958bcd17e37f77d69e5ea91ba2cd0fc5bb3368e788691c6","txlist_hash":"de3dee5cacbf5af3aaf1dac7cae860b06af7a2ba227f2bd81840d149354a05db"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(691,310261,'insert','blocks','{"block_hash":"a2a9d8c28ea41df606e81bf99cddb84b593bf5ed1e68743d38d63a7b49a50232","block_index":310261,"block_time":310261000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(691,310260,'insert','blocks','{"block_hash":"a2a9d8c28ea41df606e81bf99cddb84b593bf5ed1e68743d38d63a7b49a50232","block_index":310261,"block_time":310261000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(692,310261,'parse','blocks','{"block_index":310261,"ledger_hash":"e61c12005d60870fee947fff469631ee540b1a0d6b8aa67614cfacc0a9f65ec0","messages_hash":"5656eb27fedc0aa95a07805caadab9816feac61e3a7e97cb67cdfebfef2d3714","txlist_hash":"58b8a751b3daa23993a773073b44d4bb2715075dbe3cc1738f3138383646504e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(693,310262,'insert','blocks','{"block_hash":"e8ebcee80fbf5afb735db18419a68d61a5ffdde1b3f189e51967155c559ee4ce","block_index":310262,"block_time":310262000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(693,310261,'insert','blocks','{"block_hash":"e8ebcee80fbf5afb735db18419a68d61a5ffdde1b3f189e51967155c559ee4ce","block_index":310262,"block_time":310262000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(694,310262,'parse','blocks','{"block_index":310262,"ledger_hash":"c21ac4906d435af5b9ef5576da6bce454f65ef16099b7ee03219a4ae1851bb91","messages_hash":"df2d34002ae7a0a83629c3023a29af627de3da68afd4369cae55737968d1ce5f","txlist_hash":"a1e30e203c037b242cb1a41e5fd948828da8192a5db70453602961183a00d36d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(695,310263,'insert','blocks','{"block_hash":"f5a2d8d77ac9aac8f0c9218eecbb814e4dd0032ec764f15c11407072e037b3c2","block_index":310263,"block_time":310263000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(695,310262,'insert','blocks','{"block_hash":"f5a2d8d77ac9aac8f0c9218eecbb814e4dd0032ec764f15c11407072e037b3c2","block_index":310263,"block_time":310263000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(696,310263,'parse','blocks','{"block_index":310263,"ledger_hash":"676f6c532ff23839fef228a9fac7719e77a3c20efdc17f3cb2d13035c78820e8","messages_hash":"a5e5e3d49738214545b92d1afd827fb69c457af8294d891460eb14ef72bbae9e","txlist_hash":"ca47834be7a15554ab2dd401462d7d5c14f3f5f9ef9ba715488b1b3704de15ab"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(697,310264,'insert','blocks','{"block_hash":"ae968fb818cd631d3e3774d176c24ae6a035de4510b133f0a0dd135dc0ae7416","block_index":310264,"block_time":310264000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(697,310263,'insert','blocks','{"block_hash":"ae968fb818cd631d3e3774d176c24ae6a035de4510b133f0a0dd135dc0ae7416","block_index":310264,"block_time":310264000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(698,310264,'parse','blocks','{"block_index":310264,"ledger_hash":"258854505b1d3067bf360f3d0dcb369ed7a90fec8744578d3dde51a79db72c25","messages_hash":"d06a0daa493d2c5c4a16315a0c4e43447a5cefd995df309dcf6709a2631f1fcf","txlist_hash":"21f8b38aa107a9c6fbd6439244ce85a8a6abd12fde211c4569d28353cad5b8bd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(699,310265,'insert','blocks','{"block_hash":"41b50a1dfd10119afd4f288c89aad1257b22471a7d2177facb328157ed6346a1","block_index":310265,"block_time":310265000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(699,310264,'insert','blocks','{"block_hash":"41b50a1dfd10119afd4f288c89aad1257b22471a7d2177facb328157ed6346a1","block_index":310265,"block_time":310265000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(700,310265,'parse','blocks','{"block_index":310265,"ledger_hash":"72ab32c420a7dcac0e7c36c4d9ca81e237955b4d8bc57c87078ba292923ce98d","messages_hash":"f1bc84e08951dedc768f03db9aec057ac21d9a3eedbd644018defb10dfdd028c","txlist_hash":"9685f9791c085e79a3c298dfe4f49fd1dbf8b4bdacf45e1d25e7d18382ca0e7c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(701,310266,'insert','blocks','{"block_hash":"1c7c8fa2dc51e8f3cecd776435e68c10d0da238032ebba29cbd4e18b6c299431","block_index":310266,"block_time":310266000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(701,310265,'insert','blocks','{"block_hash":"1c7c8fa2dc51e8f3cecd776435e68c10d0da238032ebba29cbd4e18b6c299431","block_index":310266,"block_time":310266000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(702,310266,'parse','blocks','{"block_index":310266,"ledger_hash":"b81386d19aac285fee4e39a818cb0442e378372f7d55f92e6028b37f974e4a61","messages_hash":"31341dfe24064025c6a6fe45b2443ca21d461280708f8070481a46a096880844","txlist_hash":"578600253e06f32b4ee4a312df8213ea7cf12f841858bdf6123b0169cb4bd42e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(703,310267,'insert','blocks','{"block_hash":"c0aa0f7d4b7bb6842bf9f86f1ff7f028831ee7e7e2d7e495cc85623e5ad39199","block_index":310267,"block_time":310267000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(703,310266,'insert','blocks','{"block_hash":"c0aa0f7d4b7bb6842bf9f86f1ff7f028831ee7e7e2d7e495cc85623e5ad39199","block_index":310267,"block_time":310267000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(704,310267,'parse','blocks','{"block_index":310267,"ledger_hash":"ea8fef9e82e451d9650777b051f19fe5e34b8976f1bcc1880b6eebe5feda34d5","messages_hash":"f153cb888d8bbdf63f4eb45b9cc3b87d6e5ab845eb202deaa48c9d57ab78f23f","txlist_hash":"face84fc0aa45f7b072d73d4930b32e223cc4c22a620c39334fc836e16b2fb5c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(705,310268,'insert','blocks','{"block_hash":"b476840cc1ce090f6cf61d31a01807864e0a18dc117d60793d34df4f748189af","block_index":310268,"block_time":310268000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(705,310267,'insert','blocks','{"block_hash":"b476840cc1ce090f6cf61d31a01807864e0a18dc117d60793d34df4f748189af","block_index":310268,"block_time":310268000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(706,310268,'parse','blocks','{"block_index":310268,"ledger_hash":"1545d381812f0f0caa827a237f145838276fe058b05af4808615738ca9910bf1","messages_hash":"f5a8f5bd5e8cae447a96b75fc4b9a0d70e818a9654206cb23ad8d5ea07e92831","txlist_hash":"ee67f9fcd6ce50ee98da722352a917a46d3c71d2e5ea50294a55c613817e77dd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(707,310269,'insert','blocks','{"block_hash":"37460a2ed5ecbad3303fd73e0d9a0b7ba1ab91b552a022d5f300b4da1b14e21e","block_index":310269,"block_time":310269000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(707,310268,'insert','blocks','{"block_hash":"37460a2ed5ecbad3303fd73e0d9a0b7ba1ab91b552a022d5f300b4da1b14e21e","block_index":310269,"block_time":310269000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(708,310269,'parse','blocks','{"block_index":310269,"ledger_hash":"fd9cf61ac6e1fba409e4220a141ed6c89c18c893c7a752af53d5f7608bc04a67","messages_hash":"c30fd1c2fa3af21d093e353716fc4c1e8cde49854002a411d98e2a0e76211911","txlist_hash":"6d1424cf68a5b1dfddbbafb260989c5b27c060a40026e829476d979cbd8f4412"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(709,310270,'insert','blocks','{"block_hash":"a534f448972c42450ad7b7a7b91a084cf1e9ad08863107ef5abc2b2b4997395d","block_index":310270,"block_time":310270000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(709,310269,'insert','blocks','{"block_hash":"a534f448972c42450ad7b7a7b91a084cf1e9ad08863107ef5abc2b2b4997395d","block_index":310270,"block_time":310270000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(710,310270,'parse','blocks','{"block_index":310270,"ledger_hash":"1d34c8c0dfdb4733a7b589647abb0e6a08f8de93a5c86fbab786f6d9d1500785","messages_hash":"bba3fcf5f4baf2b28664137cb7ac723d03999e9a17eebe6e564e15300415e455","txlist_hash":"fc2696c78afd3051d10ea3ecc56280d2633b732a7c755b9057aa30fb11f58f53"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(711,310271,'insert','blocks','{"block_hash":"67e6efb2226a2489d4c1d7fd5dd4c38531aca8e3d687062d2274aa5348363b0b","block_index":310271,"block_time":310271000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(711,310270,'insert','blocks','{"block_hash":"67e6efb2226a2489d4c1d7fd5dd4c38531aca8e3d687062d2274aa5348363b0b","block_index":310271,"block_time":310271000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(712,310271,'parse','blocks','{"block_index":310271,"ledger_hash":"cf38baabc6e8a082eba1bd8ca2f72af5eb01cb76bd3c9eb101b27080a3a70d17","messages_hash":"2d5aba60683d839b1579c2b69089c00819349fc4f4b6abc5a48f665230f67c91","txlist_hash":"b28638da352abf83f2250bbc2da0f75b14483d7d4c69c93636484e9e3aaa326a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(713,310272,'insert','blocks','{"block_hash":"6015ede3e28e642cbcf60bc8d397d066316935adbce5d27673ea95e8c7b78eea","block_index":310272,"block_time":310272000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(713,310271,'insert','blocks','{"block_hash":"6015ede3e28e642cbcf60bc8d397d066316935adbce5d27673ea95e8c7b78eea","block_index":310272,"block_time":310272000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(714,310272,'parse','blocks','{"block_index":310272,"ledger_hash":"2b2763fa5ab2962582c303062da8b8da7280274e615b3e37f93a32e44793ccc8","messages_hash":"52e5adc7e30dfef0bcb7404f93c28177366b172a8f5c8713aa69c712f479b5fb","txlist_hash":"329d5096486b8dc452e2a1ee0a36d9a17ddd5bbb3149ddeee2bdb4989a7a3a35"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(715,310273,'insert','blocks','{"block_hash":"625dad04c47f3f1d7f0794fe98d80122c7621284d0c3cf4a110a2e4f2153c96a","block_index":310273,"block_time":310273000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(715,310272,'insert','blocks','{"block_hash":"625dad04c47f3f1d7f0794fe98d80122c7621284d0c3cf4a110a2e4f2153c96a","block_index":310273,"block_time":310273000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(716,310273,'parse','blocks','{"block_index":310273,"ledger_hash":"ff9df73d4f92b7557c36f20d8f622923dda225a1ae2871e60f16ee2dfdf5b9d8","messages_hash":"a4460c33d3af7eaf48cff39abbffd1b68bba521b1e1f814f0add5c91b00fdb27","txlist_hash":"f79f73097410b602df3a98901e26ed37d07f1da95249cf0e3a62c811d4f7de3a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(717,310274,'insert','blocks','{"block_hash":"925266253df52bed8dc44148f22bbd85648840f83baee19a9c1ab0a4ce8003b6","block_index":310274,"block_time":310274000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(717,310273,'insert','blocks','{"block_hash":"925266253df52bed8dc44148f22bbd85648840f83baee19a9c1ab0a4ce8003b6","block_index":310274,"block_time":310274000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(718,310274,'parse','blocks','{"block_index":310274,"ledger_hash":"ece29ec2cd160d7634009f41cc2d0f13330d53ec6971c019d69dfa4367f86646","messages_hash":"4daa321a8062e35b68c85d63c6c71cba86af28cad34ce1ae7a4a971f34addfcf","txlist_hash":"bf01b445bc208b9efcb314f1cfa1ea4300fc152ad46a973044abf56dc74e9c62"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(719,310275,'insert','blocks','{"block_hash":"85adc228e31fb99c910e291e36e3c6eafdfd7dcaebf5609a6e017269a6c705c9","block_index":310275,"block_time":310275000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(719,310274,'insert','blocks','{"block_hash":"85adc228e31fb99c910e291e36e3c6eafdfd7dcaebf5609a6e017269a6c705c9","block_index":310275,"block_time":310275000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(720,310275,'parse','blocks','{"block_index":310275,"ledger_hash":"23738d6d8dbf8b44b481f6c0eade991987c84e8025fe1f484c7acd3ead7f4163","messages_hash":"3e156c57def9f6dcf24682ed855311663d61079a0422522c3b660d80a4e88430","txlist_hash":"c0f70c46688ecb9eccaa94bdcbb3fc54eaf3af76cc450b62dfd7a9513bbbd50f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(721,310276,'insert','blocks','{"block_hash":"ba172f268e6d1a966075623814c8403796b4eab22ef9885345c7b59ab973cc77","block_index":310276,"block_time":310276000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(721,310275,'insert','blocks','{"block_hash":"ba172f268e6d1a966075623814c8403796b4eab22ef9885345c7b59ab973cc77","block_index":310276,"block_time":310276000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(722,310276,'parse','blocks','{"block_index":310276,"ledger_hash":"a241e1cb19bfbebb3bbb09c6471760b8379ddc73a67d69b4d84fd1d21dfb7034","messages_hash":"f42264c5306769fc6bd1bd6f1955900113ec16b625e06d62ff3001b2e6b69707","txlist_hash":"99d32cb4d9b52ec0726c907330b2a60d7cf8380c8012f804cf8838bee1b0ecec"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(723,310277,'insert','blocks','{"block_hash":"c74bd3d505a05204eb020119b72a291a2684f5a849682632e4f24b73e9524f93","block_index":310277,"block_time":310277000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(723,310276,'insert','blocks','{"block_hash":"c74bd3d505a05204eb020119b72a291a2684f5a849682632e4f24b73e9524f93","block_index":310277,"block_time":310277000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(724,310277,'parse','blocks','{"block_index":310277,"ledger_hash":"0efa57fd462031a87831832a789ed7751aac5f6c19a23767555b3f7145d87532","messages_hash":"236d34af3aa5893e9aecc8fb65c1efedc4f4e38874a2b20b933c973da4b4691e","txlist_hash":"08e71c5246f1225a02a00c8b52bb7a92c6937da9c9659129a5dcd2981069bbb3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(725,310278,'insert','blocks','{"block_hash":"7945512bca68961325e5e1054df4d02ee87a0bc60ac4e1306be3d95479bada05","block_index":310278,"block_time":310278000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(725,310277,'insert','blocks','{"block_hash":"7945512bca68961325e5e1054df4d02ee87a0bc60ac4e1306be3d95479bada05","block_index":310278,"block_time":310278000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(726,310278,'parse','blocks','{"block_index":310278,"ledger_hash":"0045189a4da126b22e91e4bc2a7ac37dc90ec0869b7fcbc927919fca4cce5259","messages_hash":"a70fb335be86478d6730dbcbcc8d738e5e3f55608f445b5a033f9f5800951167","txlist_hash":"6e3580c7af675e8fdd1c5366a7af2e387f8d8d9192589794883a28ad2ce6a499"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(727,310279,'insert','blocks','{"block_hash":"1a9417f9adc7551b82a8c9e1e79c0639476ed9329e0233e7f0d6499618d04b4f","block_index":310279,"block_time":310279000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(727,310278,'insert','blocks','{"block_hash":"1a9417f9adc7551b82a8c9e1e79c0639476ed9329e0233e7f0d6499618d04b4f","block_index":310279,"block_time":310279000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(728,310279,'parse','blocks','{"block_index":310279,"ledger_hash":"442b7d4dee025b81c298ca0f6a5b9dbdf17ed0087fc36eab7f0671d5a19c9a2c","messages_hash":"7244980c44845ce8bd26268b39a1204f014f6c18f968f57dd2e765193b71dcb2","txlist_hash":"04f51f4c3de467be5cfb32cccba5cd482eb14657d7f67a60820204fa22afaa41"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(729,310280,'insert','blocks','{"block_hash":"bf2195835108e32903e4b57c8dd7e25b4d15dd96b4b000d3dbb62f609f800142","block_index":310280,"block_time":310280000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(729,310279,'insert','blocks','{"block_hash":"bf2195835108e32903e4b57c8dd7e25b4d15dd96b4b000d3dbb62f609f800142","block_index":310280,"block_time":310280000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(730,310280,'parse','blocks','{"block_index":310280,"ledger_hash":"38d7f98ae9cfb8e3938032dc33899e2e3e5a88e9037571cdddf8ed4709fc8225","messages_hash":"0b2884e47006914acf505e50ea5272ffeef43e2a646cf0b1c57afc47bf943c5d","txlist_hash":"d25ed55e962a45fbade2012c35ef507dd76fa0c67553343bb6568569bf1c08ca"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(731,310281,'insert','blocks','{"block_hash":"4499b9f7e17fc1ecc7dc54c0c77e57f3dc2c9ea55593361acbea0e456be8830f","block_index":310281,"block_time":310281000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(731,310280,'insert','blocks','{"block_hash":"4499b9f7e17fc1ecc7dc54c0c77e57f3dc2c9ea55593361acbea0e456be8830f","block_index":310281,"block_time":310281000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(732,310281,'parse','blocks','{"block_index":310281,"ledger_hash":"51237cee3b85f1636e336259b115fad87acc830c71e13ca79e344efb7c308ecc","messages_hash":"ff50d8f5f8dcce283b687ce2aff46b5b1250eb43a11bb5996164444879dffb31","txlist_hash":"77eb5540b9f1e2f80cd3cb8572ee80bc112391e0236b560749aaf9952fb6705b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(733,310282,'insert','blocks','{"block_hash":"51a29336aa32e5b121b40d4eba0beb0fd337c9f622dacb50372990e5f5134e6f","block_index":310282,"block_time":310282000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(733,310281,'insert','blocks','{"block_hash":"51a29336aa32e5b121b40d4eba0beb0fd337c9f622dacb50372990e5f5134e6f","block_index":310282,"block_time":310282000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(734,310282,'parse','blocks','{"block_index":310282,"ledger_hash":"73adccef91b5c738e8810d4781a38edf98d2aa0a8cb619d575e9bdeda979f1fb","messages_hash":"02e7b49dd579b3355aa9063b38bec6e6e749b3cb5882483d3b15886e176f0610","txlist_hash":"889f3e1047c8ca362c1ce4749d1c7ad167dab1e5f85e509d114b1ba1bac8f240"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(735,310283,'insert','blocks','{"block_hash":"df8565428e67e93a62147b440477386758da778364deb9fd0c81496e0321cf49","block_index":310283,"block_time":310283000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(735,310282,'insert','blocks','{"block_hash":"df8565428e67e93a62147b440477386758da778364deb9fd0c81496e0321cf49","block_index":310283,"block_time":310283000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(736,310283,'parse','blocks','{"block_index":310283,"ledger_hash":"5853e60a1b79d4f154cc1f3dc8b0a4d6130ac07784bac16f257f92b9ef294144","messages_hash":"25008bffd8cec7dc2c3ae13ac7c9e868129e3b9203911aa0fa3db14f5fc89a9b","txlist_hash":"1ce62f0a42cb7ecd8c35436253e8234b83e81ba5abc757965b5041400139eee2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(737,310284,'insert','blocks','{"block_hash":"f9d05d83d3fa7bb3f3c79b8c554301d20f12fbb953f82616ac4aad6e6cc0abe7","block_index":310284,"block_time":310284000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(737,310283,'insert','blocks','{"block_hash":"f9d05d83d3fa7bb3f3c79b8c554301d20f12fbb953f82616ac4aad6e6cc0abe7","block_index":310284,"block_time":310284000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(738,310284,'parse','blocks','{"block_index":310284,"ledger_hash":"ce33194cb67aa0a5facd788cc24706ef249bcecc95a9965f91065146b33e464b","messages_hash":"4bb8f22e461d70d953ff1b9f0ced8b1cb143ab1b8dc38bd3a1fe3fc803ccd40a","txlist_hash":"c354cfcb046ca331ae57c00f64b56defd034278e5616ef7d1f3e559dc538bf0a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(739,310285,'insert','blocks','{"block_hash":"8cef48dbc69cd0a07a5acd4f4190aa199ebce996c47e24ecc44f17de5e3c285a","block_index":310285,"block_time":310285000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(739,310284,'insert','blocks','{"block_hash":"8cef48dbc69cd0a07a5acd4f4190aa199ebce996c47e24ecc44f17de5e3c285a","block_index":310285,"block_time":310285000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(740,310285,'parse','blocks','{"block_index":310285,"ledger_hash":"3af35e85e98aebe1a9c778570c730bf80e085a08ca707c1a5d44b50f2579e71c","messages_hash":"509ae7a1014f0442bec8eb032d144c64dc8a11e6970d0e32a5ecc4d41fe68760","txlist_hash":"35e84bd8780b8efbdc3207b9fef22e12ff71798477971a50088b9c8def3c77ed"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(741,310286,'insert','blocks','{"block_hash":"d4e01fb028cc6f37497f2231ebf6c00125b12e5353e65bdbf5b2ce40691d47d0","block_index":310286,"block_time":310286000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(741,310285,'insert','blocks','{"block_hash":"d4e01fb028cc6f37497f2231ebf6c00125b12e5353e65bdbf5b2ce40691d47d0","block_index":310286,"block_time":310286000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(742,310286,'parse','blocks','{"block_index":310286,"ledger_hash":"4b09b627adda46ee7cf7116102a330ba2aa1ce714b2fa133f7952af34a52ede9","messages_hash":"a7bcd9f0ef4a4deb4603c21e799e2c9418c9a085af6aee86082d3c79a7b4d880","txlist_hash":"5a868b89444476076be22e42526c4462c5b865012d9970b917376c5342750311"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(743,310287,'insert','blocks','{"block_hash":"a78514aa15a5096e4d4af3755e090390727cfa628168f1d35e8ac1d179fb51f4","block_index":310287,"block_time":310287000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(743,310286,'insert','blocks','{"block_hash":"a78514aa15a5096e4d4af3755e090390727cfa628168f1d35e8ac1d179fb51f4","block_index":310287,"block_time":310287000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(744,310287,'parse','blocks','{"block_index":310287,"ledger_hash":"67786e4ffab15cb78c7bb44ef160d1e5d99b599eecb5ff4f906a6599d744d410","messages_hash":"a0940fad3e49fdf8668dcb4c9d773e1a5eca6fd5ef23fcdf4be0ccd1cbbfe405","txlist_hash":"791a49e50583660824bb3ec141a54951c2fd737ed963b1e65b653c22a4fc4a84"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(745,310288,'insert','blocks','{"block_hash":"2a5c5b3406a944a9ae2615f97064de9af5da07b0258d58c1d6949e95501249e7","block_index":310288,"block_time":310288000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(745,310287,'insert','blocks','{"block_hash":"2a5c5b3406a944a9ae2615f97064de9af5da07b0258d58c1d6949e95501249e7","block_index":310288,"block_time":310288000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(746,310288,'parse','blocks','{"block_index":310288,"ledger_hash":"600716d2696160b3ba290636180f2afa24bf8d24435022b4539a4cc965c18dfc","messages_hash":"4dd23e9dbda9e5647e194648a2be3ef8597c5f9c4c0e5c58448d4195599de8c8","txlist_hash":"3a1e3da301643f22a9b2719922a4621879b2c2d8b790e646f135bc3b5d165e65"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(747,310289,'insert','blocks','{"block_hash":"dda3dc28762969f5b068768d52ddf73f04674ffeddb1cc4f6a684961ecca8f75","block_index":310289,"block_time":310289000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(747,310288,'insert','blocks','{"block_hash":"dda3dc28762969f5b068768d52ddf73f04674ffeddb1cc4f6a684961ecca8f75","block_index":310289,"block_time":310289000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(748,310289,'parse','blocks','{"block_index":310289,"ledger_hash":"cd6d4b17759152edbf25fd72dce9b9126ea31a2bb1a5435636801e0ee4be1158","messages_hash":"b406c7ad8001546298d16bfa1f0e77b3396787dc2324be51ce33e9cae0c6fd5a","txlist_hash":"26aeba5ab63445ebd419a02915a835d8d6a0bc25bac49dd799e356325687c8f8"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(749,310290,'insert','blocks','{"block_hash":"fe962fe98ce9f3ee1ed1e71dbffce93735d8004e7a9b95804fb456f18501a370","block_index":310290,"block_time":310290000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(749,310289,'insert','blocks','{"block_hash":"fe962fe98ce9f3ee1ed1e71dbffce93735d8004e7a9b95804fb456f18501a370","block_index":310290,"block_time":310290000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(750,310290,'parse','blocks','{"block_index":310290,"ledger_hash":"04a9135f416dc041d3c1c0216a84fd780d133213c3369691fbf5e8848af9d14f","messages_hash":"dcb7aa5f99cbb70b4d70bf3a360be2c4a5756261a8792856828a6cc1f282a644","txlist_hash":"74c57c7e7db040f0974be44dae944c978ed2ddb01390d616c9bfaa6816ed198e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(751,310291,'insert','blocks','{"block_hash":"1eeb72097fd0bce4c2377160926b25bf8166dfd6e99402570bf506e153e25aa2","block_index":310291,"block_time":310291000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(751,310290,'insert','blocks','{"block_hash":"1eeb72097fd0bce4c2377160926b25bf8166dfd6e99402570bf506e153e25aa2","block_index":310291,"block_time":310291000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(752,310291,'parse','blocks','{"block_index":310291,"ledger_hash":"50f556e01b9e8c135b20187bf863839e651a0d0bf4cfd1008b446531776f7917","messages_hash":"0b50391ad17533ea1807be4941305ee75a013a8a5330139e36818f60a9f7d8ef","txlist_hash":"13ede25257044f3bd98c6905c216bed45b0d054951d2c5e86a3cf4707699a279"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(753,310292,'insert','blocks','{"block_hash":"9c87d12effe7e07dcaf3f71074c0a4f9f8a23c2ed49bf2634dc83e286ba3131d","block_index":310292,"block_time":310292000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(753,310291,'insert','blocks','{"block_hash":"9c87d12effe7e07dcaf3f71074c0a4f9f8a23c2ed49bf2634dc83e286ba3131d","block_index":310292,"block_time":310292000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(754,310292,'parse','blocks','{"block_index":310292,"ledger_hash":"9d4bf4b1c5dba1132a9cbfd78c1d94cbaf15d7648da80c8bc1a8dce12a79eac0","messages_hash":"24b3947f5fbed58b6a9c47ab51ef2e654114be20f84935eaa908c9544e275514","txlist_hash":"1b761ed985b1e55c95598c5c0f37df4a1e06dfd26c17792b1020cf0d28fa9a56"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(755,310293,'insert','blocks','{"block_hash":"bc18127444c7aebf0cdc5d9d30a3108b25dd3f29bf28d904176c986fa5433712","block_index":310293,"block_time":310293000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(755,310292,'insert','blocks','{"block_hash":"bc18127444c7aebf0cdc5d9d30a3108b25dd3f29bf28d904176c986fa5433712","block_index":310293,"block_time":310293000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(756,310293,'parse','blocks','{"block_index":310293,"ledger_hash":"a51a3f9af39175cc9d142eff67811307ad8f51cdd8161aaf0d98af9e2be28efa","messages_hash":"1db78c9abe493106e75d3629d221d046e1d6194e44df8f882be38b521d33ab53","txlist_hash":"2fd7a38fbb17d7b0eec35f2f03a28c4aee7f579d7f42e3ab124cf5eca07869eb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(757,310294,'insert','blocks','{"block_hash":"4d6ee08b06c8a11b88877b941282dc679e83712880591213fb51c2bf1838cd4d","block_index":310294,"block_time":310294000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(757,310293,'insert','blocks','{"block_hash":"4d6ee08b06c8a11b88877b941282dc679e83712880591213fb51c2bf1838cd4d","block_index":310294,"block_time":310294000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(758,310294,'parse','blocks','{"block_index":310294,"ledger_hash":"3e9858caa8e835295aa7e78505ea34ce0726e3f5f6cf9fbc6dc4393a28724a25","messages_hash":"b6d94000a7b7dc674d610bf89faf7c0d43bdc3e8f391f6089ded1557f7f0f286","txlist_hash":"36566c7c396ecf454c6fa6d3b27dd7ad2c138a85edd74672f2e7d9791e77f0b6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(759,310295,'insert','blocks','{"block_hash":"66b8b169b98858de4ceefcb4cbf3a89383e72180a86aeb2694d4f3467a654a53","block_index":310295,"block_time":310295000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(759,310294,'insert','blocks','{"block_hash":"66b8b169b98858de4ceefcb4cbf3a89383e72180a86aeb2694d4f3467a654a53","block_index":310295,"block_time":310295000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(760,310295,'parse','blocks','{"block_index":310295,"ledger_hash":"bf48715799c46d629641ba5b72405f6e6cf0500886da94fcc6fddd306a86b02a","messages_hash":"cc57c30a8b34a715c886a444cedd81ccf2c8be145642f2df64d376d0acf1e1f3","txlist_hash":"2d6b79733125c81413a3e70acf597a11e986893264588da74e9b8a0d5d46e1da"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(761,310296,'insert','blocks','{"block_hash":"75ceb8b7377c650147612384601cf512e27db7b70503d816b392b941531b5916","block_index":310296,"block_time":310296000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(761,310295,'insert','blocks','{"block_hash":"75ceb8b7377c650147612384601cf512e27db7b70503d816b392b941531b5916","block_index":310296,"block_time":310296000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(762,310296,'parse','blocks','{"block_index":310296,"ledger_hash":"08e2361ae4b98387ee43fd7230ea8b296dee677b337f0e211527e3cf29a64e9b","messages_hash":"b77e2a71e0857e990c1cfbb021c0a04fb17b64ec9ba48c60d49e3dd8ecc6b0ac","txlist_hash":"517c81a10cc4219c38e3f947dd862f6983a4a2eb22459dba31f1a656bdf4eeff"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(763,310297,'insert','blocks','{"block_hash":"d8ccb0c27b1ee885d882ab6314a294b2fb13068b877e35539a51caa46171b650","block_index":310297,"block_time":310297000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(763,310296,'insert','blocks','{"block_hash":"d8ccb0c27b1ee885d882ab6314a294b2fb13068b877e35539a51caa46171b650","block_index":310297,"block_time":310297000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(764,310297,'parse','blocks','{"block_index":310297,"ledger_hash":"cfefc3138983a33686dd1fc37f06fa1d7e01d9b218f7242cdd59005633c0ded8","messages_hash":"edcb77f23eb738d688c1ea5732a945d76279766c4a1ee1effd190bf3f726c05b","txlist_hash":"85ae0c384a76e7c93b29204df759293f7a488fc71edf6b4abaea1944fa3a85d7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(765,310298,'insert','blocks','{"block_hash":"8ca08f7c45e9de5dfc053183c3ee5fadfb1a85c9e5ca2570e2480ef05175547a","block_index":310298,"block_time":310298000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(765,310297,'insert','blocks','{"block_hash":"8ca08f7c45e9de5dfc053183c3ee5fadfb1a85c9e5ca2570e2480ef05175547a","block_index":310298,"block_time":310298000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(766,310298,'parse','blocks','{"block_index":310298,"ledger_hash":"25254257d6f6724161b2b73f94d28d3fd40594b4846699b8a2d5f45d205b1fec","messages_hash":"5dc738e17243a84b37564b261267924bce9c6cce7595c74d8808f0cf03432a89","txlist_hash":"0633d67a69ae2c0ea1e7d3c349cfe1f3b753e387446787987c50782ee4601b68"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(767,310299,'insert','blocks','{"block_hash":"a1cdac6a49a5b71bf5802df800a97310bbf964d53e6464563e5490a0b6fef5e9","block_index":310299,"block_time":310299000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(767,310298,'insert','blocks','{"block_hash":"a1cdac6a49a5b71bf5802df800a97310bbf964d53e6464563e5490a0b6fef5e9","block_index":310299,"block_time":310299000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(768,310299,'parse','blocks','{"block_index":310299,"ledger_hash":"756acb1055ec75df8fa70f80e23d75f2b47e75035bfd68802e68308785a2ee14","messages_hash":"f3c6ab9d0253858a08da5dfe893c8266a32c796eb2e4a6c4f64ebd4263f9250d","txlist_hash":"299d47f0c18c1629003069df0afd0bb877b45f06b5609ec171c7b87ae65a0be0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(769,310300,'insert','blocks','{"block_hash":"395b0b4d289c02416af743d28fb7516486dea87844309ebef2663dc21b76dcb2","block_index":310300,"block_time":310300000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(769,310299,'insert','blocks','{"block_hash":"395b0b4d289c02416af743d28fb7516486dea87844309ebef2663dc21b76dcb2","block_index":310300,"block_time":310300000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(770,310300,'parse','blocks','{"block_index":310300,"ledger_hash":"e30027ca81176dc1e79a0ab3a5afbb839a3338dbe9ea6057aebcd383ed884c1d","messages_hash":"40541eb5a9dfd5c5a299a13aac804fb1b87e790891c55b66e9b36b1838dc8dfd","txlist_hash":"8338432f3d159dd15129a269d1cf3866cc7cda8c3845ab349ee6cc240ecd7020"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(771,310301,'insert','blocks','{"block_hash":"52f13163068f40428b55ccb8496653d0e63e3217ce1dbea8deda8407b7810e8a","block_index":310301,"block_time":310301000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(771,310300,'insert','blocks','{"block_hash":"52f13163068f40428b55ccb8496653d0e63e3217ce1dbea8deda8407b7810e8a","block_index":310301,"block_time":310301000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(772,310301,'parse','blocks','{"block_index":310301,"ledger_hash":"4c2bcffc796af76a2607a978289942241e63a6387e0a2ae8fc3d02c6b5519fb0","messages_hash":"7273cf6a0294acc31eea0e0a9af603500f59a9f115b3c5acd5cca992f185f061","txlist_hash":"676af2de3d30fc26112e65d493b9c2401f93822c8e414cc5e7231e60b728e6e0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(773,310302,'insert','blocks','{"block_hash":"ca03ebc1453dbb1b52c8cc1bc6b343d76ef4c1eaac321a0837c6028384b8d5aa","block_index":310302,"block_time":310302000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(773,310301,'insert','blocks','{"block_hash":"ca03ebc1453dbb1b52c8cc1bc6b343d76ef4c1eaac321a0837c6028384b8d5aa","block_index":310302,"block_time":310302000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(774,310302,'parse','blocks','{"block_index":310302,"ledger_hash":"a39fdd7f84d2f6e29b613a8a724bc0902d9abd2d6b4d2f46c3b0512928d69b3f","messages_hash":"b26574ea33e8a4ca0bd958b82248a9fc9fdfe403aa717a9e0ef31474bcc32e58","txlist_hash":"ef3dfc32bc5b72ec279a0229af8bf6548bfb5bf4ed717e3e81ccb7710f802021"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(775,310303,'insert','blocks','{"block_hash":"d4e6600c553f0f1e3c3af36dd9573352a25033920d7b1e9912e7daae3058dcca","block_index":310303,"block_time":310303000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(775,310302,'insert','blocks','{"block_hash":"d4e6600c553f0f1e3c3af36dd9573352a25033920d7b1e9912e7daae3058dcca","block_index":310303,"block_time":310303000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(776,310303,'parse','blocks','{"block_index":310303,"ledger_hash":"23f307ef560a02210f4aae5fe605c6d8af9317ab17f1e1ef0944038a3515da49","messages_hash":"8076e1b2af994482a8868a28ad8b5d41a5fbe2ccb349d65404e7c0dc59c6dd2e","txlist_hash":"d1c0461baeac24d356af8ba5283753c778f8ab0fa222c51b753758268f1e7fa4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(777,310304,'insert','blocks','{"block_hash":"b698b0c6cb64ca397b3616ce0c4297ca94b20a5332dcc2e2b85d43f5b69a4f1c","block_index":310304,"block_time":310304000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(777,310303,'insert','blocks','{"block_hash":"b698b0c6cb64ca397b3616ce0c4297ca94b20a5332dcc2e2b85d43f5b69a4f1c","block_index":310304,"block_time":310304000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(778,310304,'parse','blocks','{"block_index":310304,"ledger_hash":"6baa2ac646d3725fa01111959753844d22181cbbd1801cb12c4208be3709a3a3","messages_hash":"3862df7b71134b605229146563a78a5ca695a37c4d6da4b65d21876129c80f1b","txlist_hash":"96ea912eae3265566ab229e5d5a25354c0713471d73d866b9a09c9b2954d53e5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(779,310305,'insert','blocks','{"block_hash":"cfba0521675f1e08aef4ecdbc2848fe031e47f8b41014bcd4b5934c1aa483c5b","block_index":310305,"block_time":310305000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(779,310304,'insert','blocks','{"block_hash":"cfba0521675f1e08aef4ecdbc2848fe031e47f8b41014bcd4b5934c1aa483c5b","block_index":310305,"block_time":310305000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(780,310305,'parse','blocks','{"block_index":310305,"ledger_hash":"c366fd009860a090c632131eae9380820e512009bbbaa6f7bc5529afab7a88c1","messages_hash":"3b6505bd17f14fef0f06cf95c6bd3d3d759479674824f738b1c7fecc151b9b44","txlist_hash":"35584be5484303aa263d746735209b04d92a6baa6045e2d684496ff5dabe59ef"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(781,310306,'insert','blocks','{"block_hash":"a88a07c577a6f2f137f686036411a866cae27ff8af4e1dfb8290606780ec722a","block_index":310306,"block_time":310306000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(781,310305,'insert','blocks','{"block_hash":"a88a07c577a6f2f137f686036411a866cae27ff8af4e1dfb8290606780ec722a","block_index":310306,"block_time":310306000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(782,310306,'parse','blocks','{"block_index":310306,"ledger_hash":"fd12969b828d689063b4885a0356fc17e5207794d1f5b6a17bdeb8d584815a79","messages_hash":"c052edd088e829c9ac4ae5ca349da7067bfd5dcb8dfec11c4ec1a635d3c8c9e0","txlist_hash":"df65a3a9f318fd30166869a3d5d6eabb9c84399f15a7a50f39422a05ff851997"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(783,310307,'insert','blocks','{"block_hash":"bc5ccf771903eb94e336daf54b134459e1f9dd4465dec9eaa66a8ee0e76d426c","block_index":310307,"block_time":310307000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(783,310306,'insert','blocks','{"block_hash":"bc5ccf771903eb94e336daf54b134459e1f9dd4465dec9eaa66a8ee0e76d426c","block_index":310307,"block_time":310307000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(784,310307,'parse','blocks','{"block_index":310307,"ledger_hash":"e168094d31f56d36e4c3863fe719e6064b08ccc6f3c2adb490b1359360026aee","messages_hash":"3bd3565fc83516439eab9db5ac6d85d8763d16c16bff122cc6e70b5c48246030","txlist_hash":"272ae60ff5120848055f08303e13a982fc66959f3e3b72f7d7461c7f91252944"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(785,310308,'insert','blocks','{"block_hash":"2291ffd9650760ff861660a70403252d078c677bb037a38e9d4a506b10ee2a30","block_index":310308,"block_time":310308000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(785,310307,'insert','blocks','{"block_hash":"2291ffd9650760ff861660a70403252d078c677bb037a38e9d4a506b10ee2a30","block_index":310308,"block_time":310308000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(786,310308,'parse','blocks','{"block_index":310308,"ledger_hash":"523b3bba7b02e2c4e588f21ed14b7b4f6630f887cc89f9361487b581d7e633b5","messages_hash":"4b488ffd95c4d443b431c66d9d4442621cfcb3831e920f8f1d291501e2d3eba9","txlist_hash":"30df282ad2859208c35204fe5e2d395734e041bd9644b8b8626678fdd64058c1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(787,310309,'insert','blocks','{"block_hash":"ca3ca8819aa3e5fc4238d80e5f06f74ca0c0980adbbf5e2be0076243e7731737","block_index":310309,"block_time":310309000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(787,310308,'insert','blocks','{"block_hash":"ca3ca8819aa3e5fc4238d80e5f06f74ca0c0980adbbf5e2be0076243e7731737","block_index":310309,"block_time":310309000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(788,310309,'parse','blocks','{"block_index":310309,"ledger_hash":"effe1a68917014086da3bf8696f6c13f3cf2cb5cbd6c18b80ed622e476cff017","messages_hash":"5b336477cd043069fc94aaa9efeec573f8ea2f1915382602469f2ab6bed6d717","txlist_hash":"197a65735f9d06d433abdd01f29f44ec697ba537ead9107ebe9cd889393a053c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(789,310310,'insert','blocks','{"block_hash":"07cd7252e3e172168e33a1265b396c3708ae43b761d02448add81e476b1bcb2c","block_index":310310,"block_time":310310000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(789,310309,'insert','blocks','{"block_hash":"07cd7252e3e172168e33a1265b396c3708ae43b761d02448add81e476b1bcb2c","block_index":310310,"block_time":310310000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(790,310310,'parse','blocks','{"block_index":310310,"ledger_hash":"968fb8a7409531a27ffb52af484e7c1076f05b58f9a51bf9cf3d5a7d83b12002","messages_hash":"d4b6b0de6209af38f0a99ee7cc1e629039233cba66bbd546aa874c9b5ec949fd","txlist_hash":"b9b9eef5f4c1720522286ce5f6375613c267684ac330210ab664e29219065cc0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(791,310311,'insert','blocks','{"block_hash":"2842937eabfdd890e3f233d11c030bed6144b884d3a9029cd2252126221caf36","block_index":310311,"block_time":310311000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(791,310310,'insert','blocks','{"block_hash":"2842937eabfdd890e3f233d11c030bed6144b884d3a9029cd2252126221caf36","block_index":310311,"block_time":310311000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(792,310311,'parse','blocks','{"block_index":310311,"ledger_hash":"8c69639a757d0195594fa1da3f6b35a0e8c62b8df7f95db81e26d496b8c9dd72","messages_hash":"9f34557e605c362c267d01a10c0e1230b96311675cf37ac22fefef3e348f90e6","txlist_hash":"86b9b4356e26ab703e29060a4ff1be0c5cad328b2490d983eae10c24369a1649"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(793,310312,'insert','blocks','{"block_hash":"8168511cdfdc0018672bf22f3c6808af709430dd0757609abe10fcd0c3aabfd7","block_index":310312,"block_time":310312000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(793,310311,'insert','blocks','{"block_hash":"8168511cdfdc0018672bf22f3c6808af709430dd0757609abe10fcd0c3aabfd7","block_index":310312,"block_time":310312000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(794,310312,'parse','blocks','{"block_index":310312,"ledger_hash":"8d839bac01b9aae5e554f691ae0ee42cee072f9367fcc2811d4b3f65640cfcad","messages_hash":"06ab0afed2be45271b993ebf500b3fca4df8e920441577bcb1842206129b58f2","txlist_hash":"802b3d153e101c2772b1c96c851efab754f77fd3fd7eb59848d510f8994a9d86"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(795,310313,'insert','blocks','{"block_hash":"7c1b734c019c4f3e27e8d5cbee28e64aa6c66bb041d2a450e03537e3fac8e7e5","block_index":310313,"block_time":310313000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(795,310312,'insert','blocks','{"block_hash":"7c1b734c019c4f3e27e8d5cbee28e64aa6c66bb041d2a450e03537e3fac8e7e5","block_index":310313,"block_time":310313000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(796,310313,'parse','blocks','{"block_index":310313,"ledger_hash":"1377f4255bfd7ff6638734733a4b8faec97fd62aeb954e42b477c875ccc50b73","messages_hash":"471dc3888257e83dc49fb7acb75a3d327ccfc572fa4c2a597f68e97ced7b706c","txlist_hash":"e96392425727ab5eb4e16a61aef7d28cd0826ad7bc1d8266b3c187bb22bb5d51"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(797,310314,'insert','blocks','{"block_hash":"1ce78314eee22e87ccae74ff129b1803115a953426a5b807f2c55fb10fb63dc8","block_index":310314,"block_time":310314000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(797,310313,'insert','blocks','{"block_hash":"1ce78314eee22e87ccae74ff129b1803115a953426a5b807f2c55fb10fb63dc8","block_index":310314,"block_time":310314000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(798,310314,'parse','blocks','{"block_index":310314,"ledger_hash":"8ed80d44f0d6ad01a30611d94b91f735ef3a166cf0dfa7531492a3e4ac7c29f1","messages_hash":"d0edc182ab52e7db475d67edfa4b8d9b4d4bfaa79351ab7c7d0a93cc1e63e465","txlist_hash":"17d9134674657a9958c43efaea302df438762233e7e5d57811b71378e3d62695"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(799,310315,'insert','blocks','{"block_hash":"bd356b1bce263f7933fb4b64cf8298d2f085ca1480975d6346a8f5dab0db72cb","block_index":310315,"block_time":310315000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(799,310314,'insert','blocks','{"block_hash":"bd356b1bce263f7933fb4b64cf8298d2f085ca1480975d6346a8f5dab0db72cb","block_index":310315,"block_time":310315000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(800,310315,'parse','blocks','{"block_index":310315,"ledger_hash":"24b5905cf0d5349b7031870af9677916892e3292fa61455a75e84c1605a398ba","messages_hash":"f96452fa9d526175036d137afc49a849f0839c4338d29815ee3eac02e3df6f91","txlist_hash":"d8bad5e8a6ab63c8e0394c200e6b90cb2a1feabe3f58dc0faaaab59bb0b82654"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(801,310316,'insert','blocks','{"block_hash":"ea9e5e747996c8d8741877afdcf296413126e2b45c693f3abdb602a5dae3fa44","block_index":310316,"block_time":310316000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(801,310315,'insert','blocks','{"block_hash":"ea9e5e747996c8d8741877afdcf296413126e2b45c693f3abdb602a5dae3fa44","block_index":310316,"block_time":310316000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(802,310316,'parse','blocks','{"block_index":310316,"ledger_hash":"a191657253ca159739403f35417ef74637b053db49c7db62465fde4c54e69239","messages_hash":"cf505f0c309fbaecae7d9e525557f8d1501a3a08d66bb8a7abc8d2a8db721add","txlist_hash":"daf2edaf9fb8e7f718f56cff9e570869297ce6bd350794501b05e02a541e1c84"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(803,310317,'insert','blocks','{"block_hash":"aa8a533edd243f1484917951e45f0b7681446747cebcc54d43c78eda68134d63","block_index":310317,"block_time":310317000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(803,310316,'insert','blocks','{"block_hash":"aa8a533edd243f1484917951e45f0b7681446747cebcc54d43c78eda68134d63","block_index":310317,"block_time":310317000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(804,310317,'parse','blocks','{"block_index":310317,"ledger_hash":"bf6d880b9fa42b0e38523c00c92a898093afd068450be504a0a56bafd69ed647","messages_hash":"af696ec589d2b95f36e16039d388a57c38eafee5f3de5596a97f3c823c77f892","txlist_hash":"740737c2cd6ffb9a5e89e2ae0d34afe5f0bb48d120ae482802b76d07100b6153"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(805,310318,'insert','blocks','{"block_hash":"c1be6c211fbad07a10b96ac7e6850a90c43ba2a38e05d53225d913cc2cf60b03","block_index":310318,"block_time":310318000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(805,310317,'insert','blocks','{"block_hash":"c1be6c211fbad07a10b96ac7e6850a90c43ba2a38e05d53225d913cc2cf60b03","block_index":310318,"block_time":310318000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(806,310318,'parse','blocks','{"block_index":310318,"ledger_hash":"6422eb2cab5937adb9ca2194c025d0dce63cd62e18d7ebd63220207957c942ee","messages_hash":"ff573059e90f4aade75d1f2d950dcf046ef2c1217b589d0bf2fc9c38c6c42012","txlist_hash":"3cb46a2e5b1a3ef3dd37dbe0cc429962982812eb9c7f87b5282a77a4a7f6185c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(807,310319,'insert','blocks','{"block_hash":"f7fc6204a576c37295d0c65aac3d8202db94b6a4fa879fff63510d470dcefa71","block_index":310319,"block_time":310319000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(807,310318,'insert','blocks','{"block_hash":"f7fc6204a576c37295d0c65aac3d8202db94b6a4fa879fff63510d470dcefa71","block_index":310319,"block_time":310319000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(808,310319,'parse','blocks','{"block_index":310319,"ledger_hash":"efb625496aa4365f5ac198a82833c880a60cd5f86d04689463216619cd7d96b8","messages_hash":"73a44e99dcb39be095771e34c74ee4b6a7a0819207807821d621545ca4b6a91f","txlist_hash":"ed69cef0ba9e4a9371deca76209629cc988257493a69006504b96a99b3da4222"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(809,310320,'insert','blocks','{"block_hash":"fd34ebe6ba298ba423d860a62c566c05372521438150e8341c430116824e7e0b","block_index":310320,"block_time":310320000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(809,310319,'insert','blocks','{"block_hash":"fd34ebe6ba298ba423d860a62c566c05372521438150e8341c430116824e7e0b","block_index":310320,"block_time":310320000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(810,310320,'parse','blocks','{"block_index":310320,"ledger_hash":"8c3938d7b3c0a822ebee67f1ecf21b1db6496e19471cf1f2cd00f30325d0c88a","messages_hash":"3abdeb2a4902cacc07440c8f176576963d48190c3e66bce2ccd97cc15d79f752","txlist_hash":"b87169ed018fdc8251d14b58f8d0e09001e45ab5dd76eb2408ab625d34ec584b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(811,310321,'insert','blocks','{"block_hash":"f74be89e9ceb0779f3c7f97c34fb97cd7c51942244cbc2018d17a3f423dd3ae5","block_index":310321,"block_time":310321000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(811,310320,'insert','blocks','{"block_hash":"f74be89e9ceb0779f3c7f97c34fb97cd7c51942244cbc2018d17a3f423dd3ae5","block_index":310321,"block_time":310321000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(812,310321,'parse','blocks','{"block_index":310321,"ledger_hash":"21e4c3a7afd02f183cbb69709fc6c006ab3d38fef3466de1a1870232d1c891bd","messages_hash":"0d0c1c139a2f9304f5111dab26862dd88c97f061ee9ec716cfdfa8f101cf9f2a","txlist_hash":"77ef24833ac345e51eeb48fa9adbb111e31ffa3739298ce12a18d2f581c9a79a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(813,310322,'insert','blocks','{"block_hash":"ce0b1afb355e6fd897e74b556a9441f202e3f2b524d1d88bc54e18f860b57668","block_index":310322,"block_time":310322000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(813,310321,'insert','blocks','{"block_hash":"ce0b1afb355e6fd897e74b556a9441f202e3f2b524d1d88bc54e18f860b57668","block_index":310322,"block_time":310322000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(814,310322,'parse','blocks','{"block_index":310322,"ledger_hash":"01b3b28c4d8eb796827267c06e6362206884e44f40c3f72d9b5c9d1e6cdfb29a","messages_hash":"a803ff9c9a83a885463f0f41b774b09c5dad9ef8827579499cd94cc6ff218858","txlist_hash":"3833d915749baf7aa33484d7a6b6b28e4acf0d78ee0f1b4e8ab44b22d756a3e3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(815,310323,'insert','blocks','{"block_hash":"df82040c0cbd905e7991a88786090b93606168a7248c8b099d6b9c166c7e80fd","block_index":310323,"block_time":310323000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(815,310322,'insert','blocks','{"block_hash":"df82040c0cbd905e7991a88786090b93606168a7248c8b099d6b9c166c7e80fd","block_index":310323,"block_time":310323000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(816,310323,'parse','blocks','{"block_index":310323,"ledger_hash":"a362da58df0d31eeaa93a25c91c17bec62f9cad6ff0c31420584ce293ecafdbc","messages_hash":"fe10c5d1f27a192d9c72377818077b94ff7fee46c54b8bc52cbbca50743ccb56","txlist_hash":"2d41c7286053cb2256526ce42c03ab1288dfa066720e9ae5e5dac4532d512de4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(817,310324,'insert','blocks','{"block_hash":"367d0ac107cbc7f93857d79e6fa96d47b1c98f88b3fdda97c51f9163e2366826","block_index":310324,"block_time":310324000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(817,310323,'insert','blocks','{"block_hash":"367d0ac107cbc7f93857d79e6fa96d47b1c98f88b3fdda97c51f9163e2366826","block_index":310324,"block_time":310324000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(818,310324,'parse','blocks','{"block_index":310324,"ledger_hash":"d1b353ac97e000471c66df8ee04d7b0c25f7eead2414e5648cd2ef334881bad6","messages_hash":"c654695d92ff853e15ec8399c1e5fd6b552b8a2e4da3167f792e2325b21fefa0","txlist_hash":"051b158e05c22a326dd8becd27d142b52477b9209f369599db5c5e25484af157"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(819,310325,'insert','blocks','{"block_hash":"60d50997f57a876b2f9291e1ae19c776df95b2e46c14fe6574fb0e4ce8021eac","block_index":310325,"block_time":310325000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(819,310324,'insert','blocks','{"block_hash":"60d50997f57a876b2f9291e1ae19c776df95b2e46c14fe6574fb0e4ce8021eac","block_index":310325,"block_time":310325000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(820,310325,'parse','blocks','{"block_index":310325,"ledger_hash":"7734300dc764c67fde935dd4432396de4a31cedc2901f3fc70bf1576797cf7b0","messages_hash":"0d9072553790491007aa13b4d406831506f7f770f8ac7fea5ad42db6b6cd2b68","txlist_hash":"7671d8cfff3601fc44132a6d274c1ab1fb0b4fb712041d86eb28157667682251"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(821,310326,'insert','blocks','{"block_hash":"d6f210a1617e1a8eb819fc0e9ef06bd135e15ae65af407e7413f0901f5996573","block_index":310326,"block_time":310326000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(821,310325,'insert','blocks','{"block_hash":"d6f210a1617e1a8eb819fc0e9ef06bd135e15ae65af407e7413f0901f5996573","block_index":310326,"block_time":310326000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(822,310326,'parse','blocks','{"block_index":310326,"ledger_hash":"ebe859a722587fd456695c6a46af7f0bf54c03e940bdbb5424520a8c1fe70617","messages_hash":"e0a3b19fce605701f1ce2ed25cde785ddef37c8ae11a1af97f32f89a9faef45b","txlist_hash":"72884e56565b442c37cbbc572fa762c7b7b3c549c396037393463be7afb089fa"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(823,310327,'insert','blocks','{"block_hash":"9fa4076881b482d234c2085a93526b057ead3c73a6e73c1ed1cdee1a59af8adc","block_index":310327,"block_time":310327000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(823,310326,'insert','blocks','{"block_hash":"9fa4076881b482d234c2085a93526b057ead3c73a6e73c1ed1cdee1a59af8adc","block_index":310327,"block_time":310327000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(824,310327,'parse','blocks','{"block_index":310327,"ledger_hash":"8ced7a546ee2c746d4dc3f0ecd2fb4eaa62c65c4e98be74545d8de22c03526e6","messages_hash":"f2ce43aa9e6374f95a9c5d5b55de0396da45be6575dc5223742c2d70369bd00e","txlist_hash":"ccbabd4fc70b15ebb6f28afa6f96e4a1f0af08e6a3cdfb518ae008432b908739"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(825,310328,'insert','blocks','{"block_hash":"c7ffd388714d8d0fc77e92d05145e6845c72e6bfd32aeb61845515eca2fa2daf","block_index":310328,"block_time":310328000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(825,310327,'insert','blocks','{"block_hash":"c7ffd388714d8d0fc77e92d05145e6845c72e6bfd32aeb61845515eca2fa2daf","block_index":310328,"block_time":310328000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(826,310328,'parse','blocks','{"block_index":310328,"ledger_hash":"bb5d3479e492f52a0b3b69d29852faefdff645f9b113eae82594f57e8aa40b5d","messages_hash":"cb79907543638b77555fac7568f2f744f22ce989dc0e7654fd49e132eb7666c8","txlist_hash":"42fa2df2e053f97e86881395e5d66de912e59bf73eb5be322ab170b06fabd344"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(827,310329,'insert','blocks','{"block_hash":"67fb2e77f8d77924c877a58c1af13e1e16b9df425340ed30e9816a9553fd5a30","block_index":310329,"block_time":310329000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(827,310328,'insert','blocks','{"block_hash":"67fb2e77f8d77924c877a58c1af13e1e16b9df425340ed30e9816a9553fd5a30","block_index":310329,"block_time":310329000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(828,310329,'parse','blocks','{"block_index":310329,"ledger_hash":"4ad2c9d802db762537be19143ef5eca474cd9f749bbbc661cb95bcf1dcb0b02b","messages_hash":"02047850f93eb91d0d83851054da00ed66f6f6c0fea04d627866f6355be4273c","txlist_hash":"a5336a1818452ca9888d582bb5ad8182e00ec37723d42e6769b001069f96232a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(829,310330,'insert','blocks','{"block_hash":"b62c222ad5a41084eb4d779e36f635c922ff8fe275df41a9259f9a54b9adcc0c","block_index":310330,"block_time":310330000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(829,310329,'insert','blocks','{"block_hash":"b62c222ad5a41084eb4d779e36f635c922ff8fe275df41a9259f9a54b9adcc0c","block_index":310330,"block_time":310330000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(830,310330,'parse','blocks','{"block_index":310330,"ledger_hash":"4a9a6b59d56f6b7cf867095d939f9bddbf779141177feda470df3759b7d48be3","messages_hash":"3d6595616fc996c9fd880bc5b227a7e2d436bf27f6f06ab15cd456c4322fffb6","txlist_hash":"263932b9bd949d4b0557a7fcd5597a0c607c722b34e644f9795e4f08713a4436"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(831,310331,'insert','blocks','{"block_hash":"52fb4d803a141f02b12a603244801e2e555a2dffb13a76c93f9ce13f9cf9b21e","block_index":310331,"block_time":310331000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(831,310330,'insert','blocks','{"block_hash":"52fb4d803a141f02b12a603244801e2e555a2dffb13a76c93f9ce13f9cf9b21e","block_index":310331,"block_time":310331000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(832,310331,'parse','blocks','{"block_index":310331,"ledger_hash":"c676b9c31e0e3d74d005ad0a52a18ba34688b6002da5d269bcea0f789a4f8e91","messages_hash":"ba499b294c5cb3d50626ad04df807602e4f3fa955ca6b35795202f437182fd6b","txlist_hash":"646197318fca63f2c8068c0a119f122d02cfea4a5c95201d6cc2eada9ba276a6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(833,310332,'insert','blocks','{"block_hash":"201086b0aab856c8b9c7b57d40762e907746fea722dbed8efb518f4bfd0dfdf2","block_index":310332,"block_time":310332000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(833,310331,'insert','blocks','{"block_hash":"201086b0aab856c8b9c7b57d40762e907746fea722dbed8efb518f4bfd0dfdf2","block_index":310332,"block_time":310332000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(834,310332,'parse','blocks','{"block_index":310332,"ledger_hash":"cf0b702c03ecff4bda1254dd5e96ca580b69d5d02d1f233725fccbe1f5f32000","messages_hash":"a57bfcc468c3f5d57b1b178ea7cc8c1af55f42867d0ba5d88d4e55b2bc79fe02","txlist_hash":"8197afee90f808a95bd5a3dbc9c41618e3a07a3039dc2e2539a94cb023e54a0b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(835,310333,'insert','blocks','{"block_hash":"b7476114e72d4a38d0bebb0b388444619c6f1b62f97b598fed2e1ec7cd08ee82","block_index":310333,"block_time":310333000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(835,310332,'insert','blocks','{"block_hash":"b7476114e72d4a38d0bebb0b388444619c6f1b62f97b598fed2e1ec7cd08ee82","block_index":310333,"block_time":310333000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(836,310333,'parse','blocks','{"block_index":310333,"ledger_hash":"b40359eb197db65549946d93a39b2a732e0694d21b8d0138b9bfce4f5a87ae5b","messages_hash":"7694e14e12a15ab6aa8143f1e9fcaae46b1746f51398d79a4f6be6c3137d6c89","txlist_hash":"c8b269f3fb117e7ea3a9592a023787d886ffc388f91fd651618f807c017c9a67"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(837,310334,'insert','blocks','{"block_hash":"a39eb839c62b127287ea01dd087b2fc3ad59107ef012decae298e40c1dec52cd","block_index":310334,"block_time":310334000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(837,310333,'insert','blocks','{"block_hash":"a39eb839c62b127287ea01dd087b2fc3ad59107ef012decae298e40c1dec52cd","block_index":310334,"block_time":310334000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(838,310334,'parse','blocks','{"block_index":310334,"ledger_hash":"7cb471ec146f9ec1e4d1b93184ea641f7b8088807dedcd1c0be4ca5ba99e80e1","messages_hash":"226e74766ac5ef3a15e7d38c05990871f92ef80cddf954d17759d2ad2ea59d02","txlist_hash":"24eb770852273754585985a5fed612de801663408db3703bb9771d5bcf518cb9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(839,310335,'insert','blocks','{"block_hash":"23bd6092da66032357b13b95206e6527a8d22e6637a097d696d7a96c8858cc89","block_index":310335,"block_time":310335000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(839,310334,'insert','blocks','{"block_hash":"23bd6092da66032357b13b95206e6527a8d22e6637a097d696d7a96c8858cc89","block_index":310335,"block_time":310335000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(840,310335,'parse','blocks','{"block_index":310335,"ledger_hash":"47de747ec20cbec96a6bc4b71f67ea827c7a5a1ab0d3541fd539efac7442d644","messages_hash":"fe3fa4d5ea7f9f18f6564a1857c7ce23e418e46aa5b63b3365d6cf73ab930e07","txlist_hash":"ba840a499b9de3ae457db93220ebb7bf61560f33660b8e7b980178325d114cec"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(841,310336,'insert','blocks','{"block_hash":"ec4b8d0968dbae28789be96ffa5a7e27c3846064683acd7c3eb86f1f0cc58199","block_index":310336,"block_time":310336000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(841,310335,'insert','blocks','{"block_hash":"ec4b8d0968dbae28789be96ffa5a7e27c3846064683acd7c3eb86f1f0cc58199","block_index":310336,"block_time":310336000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(842,310336,'parse','blocks','{"block_index":310336,"ledger_hash":"c216588e623d2b3d03499c7e9f817106b20a8c98765979987633f1e4e50d9594","messages_hash":"1eff4c9279cff57e13e005fad48c92f7f5bd928e4b5a3d7eb102bfd0bccf353a","txlist_hash":"a6c20cca4d22fa5b8357fae640f1a90e3e656f9015eb5db289ef6da17b597f1c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(843,310337,'insert','blocks','{"block_hash":"055247d24ba9860eb2eadf9ec7ea966b86794a0e3727e6ffbcba0af38f2bc34a","block_index":310337,"block_time":310337000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(843,310336,'insert','blocks','{"block_hash":"055247d24ba9860eb2eadf9ec7ea966b86794a0e3727e6ffbcba0af38f2bc34a","block_index":310337,"block_time":310337000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(844,310337,'parse','blocks','{"block_index":310337,"ledger_hash":"a558b47328f54b79a5ad9f7737af0e4df07e13e20f150296370e111879c09c2e","messages_hash":"61eeadd7e8f4c94b41e9f3c67bad3ff29cc1d19f580114b3ca3c2a929596c036","txlist_hash":"15c9f81424d97e28fc5d40b9f74edee6bed3f68f8c81dcf572cbd786626ff353"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(845,310338,'insert','blocks','{"block_hash":"97944272a7e86b716c6587d0da0d2094b6f7e29714daa00fec8677205a049bcd","block_index":310338,"block_time":310338000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(845,310337,'insert','blocks','{"block_hash":"97944272a7e86b716c6587d0da0d2094b6f7e29714daa00fec8677205a049bcd","block_index":310338,"block_time":310338000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(846,310338,'parse','blocks','{"block_index":310338,"ledger_hash":"31bea50c6481fa982eace70df5fc13d2981f1af13962809e3492b493a0dd4905","messages_hash":"0b46e8c3b291dbc65e5a2ba99739bea530eeed734b7cbd0248c3b0ab06e3d817","txlist_hash":"ee8efb364c79aae62d48d0198d7ca348d71f312eaef01daf906fec89d2fe9166"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(847,310339,'insert','blocks','{"block_hash":"99d59ea38842e00c8ba156276582ff67c5fc8c3d3c6929246623d8f51239a052","block_index":310339,"block_time":310339000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(847,310338,'insert','blocks','{"block_hash":"99d59ea38842e00c8ba156276582ff67c5fc8c3d3c6929246623d8f51239a052","block_index":310339,"block_time":310339000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(848,310339,'parse','blocks','{"block_index":310339,"ledger_hash":"6605ca3db3c509fbc8574f2e10a3f981e2ff17b2812946ec8f2b1e49ba44f220","messages_hash":"5771cf30f52a621216658854604973564d9a3a5b659986d3f5ab042a8a4a2674","txlist_hash":"af5e50fc6a529fb06423c8ad7beed13c6e1de1c3f746f53dcedb7af76e0d95ff"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(849,310340,'insert','blocks','{"block_hash":"f7a193f14949aaae1167aebf7a6814c44712d2b19f6bf802e72be5f97dd7f5a0","block_index":310340,"block_time":310340000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(849,310339,'insert','blocks','{"block_hash":"f7a193f14949aaae1167aebf7a6814c44712d2b19f6bf802e72be5f97dd7f5a0","block_index":310340,"block_time":310340000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(850,310340,'parse','blocks','{"block_index":310340,"ledger_hash":"7db1ad1952cac2dda86fff6e5f939010bb30a1da26af438d354e17f423d5bf1f","messages_hash":"9b0c7bd03815d2708a3d6038b3783da0dd241e75b6de17402e89a05ec76e5222","txlist_hash":"f42c5c43148a61dace7d50127d905f236ad738774c20d4f874fc3b824b58cf92"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(851,310341,'insert','blocks','{"block_hash":"6c468431e0169b7df175afd661bc21a66f6b4353160f7a6c9df513a6b1788a7f","block_index":310341,"block_time":310341000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(851,310340,'insert','blocks','{"block_hash":"6c468431e0169b7df175afd661bc21a66f6b4353160f7a6c9df513a6b1788a7f","block_index":310341,"block_time":310341000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(852,310341,'parse','blocks','{"block_index":310341,"ledger_hash":"1a1eef01250d2c53a1b34a8ee5b1e8fce984c3d47d28c544c6e162493b51225b","messages_hash":"d0116b9fb089a2865d1425244075ef65425ce9e5f0f1b70fe7cf97e5ce6b8f47","txlist_hash":"5fcdf7ababadc89a26c3833bc8b819642466504b58323cded8cdb8a904239ce6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(853,310342,'insert','blocks','{"block_hash":"48669c2cb8e6bf2ca7f8e4846816d35396cbc88c349a8d1318ded0598a30edf7","block_index":310342,"block_time":310342000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(853,310341,'insert','blocks','{"block_hash":"48669c2cb8e6bf2ca7f8e4846816d35396cbc88c349a8d1318ded0598a30edf7","block_index":310342,"block_time":310342000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(854,310342,'parse','blocks','{"block_index":310342,"ledger_hash":"3c85c0b825985b04b42137da7e59fb3daaaf9e65b871b79390a4d8b31be5da92","messages_hash":"2a6b0c1cd6ba6cb2fc95fa6fb0ce6369b7959d73680cfa1a09697626bb48f4bb","txlist_hash":"b165c708026f386ddc7206518e594fcef7b5782fa0db77db6ce5b02e3b563145"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(855,310343,'insert','blocks','{"block_hash":"41a1030c13ae11f5565e0045c73d15edc583a1ff6f3a8f5eac94ffcfaf759e11","block_index":310343,"block_time":310343000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(855,310342,'insert','blocks','{"block_hash":"41a1030c13ae11f5565e0045c73d15edc583a1ff6f3a8f5eac94ffcfaf759e11","block_index":310343,"block_time":310343000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(856,310343,'parse','blocks','{"block_index":310343,"ledger_hash":"26f4ea323dd31b715c7a7f4ab8f1feabb199333a8494449ed538ff13215bb3b2","messages_hash":"af3dd05b7f7751705f9bc0aaf099568289d0cc8a62b80cb8cf957b67ae9ccdc0","txlist_hash":"37808f9fb4ad766c671be7e9703aa7c7ea53991fa838400536d25f304ebe8090"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(857,310344,'insert','blocks','{"block_hash":"97b74842207c7cd27160b23d74d7deb603882e4e5e61e2899c96a39b079b3977","block_index":310344,"block_time":310344000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(857,310343,'insert','blocks','{"block_hash":"97b74842207c7cd27160b23d74d7deb603882e4e5e61e2899c96a39b079b3977","block_index":310344,"block_time":310344000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(858,310344,'parse','blocks','{"block_index":310344,"ledger_hash":"444314748cb1fa1c836b3b4de65c3920c7fe446741193e5f77843affe3bee908","messages_hash":"071a2af66f03d51498ea342dce8d818d4b2df9e2e5fb7ca9344988ae7676b0e7","txlist_hash":"52dd50744ce4773a3db8dcf016a392a133ff7ebbeaf293d4ecb4a32fcc575a19"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(859,310345,'insert','blocks','{"block_hash":"0bda7b13d1bc2ba4c3c72e0f27157067677595264d6430038f0b227118de8c65","block_index":310345,"block_time":310345000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(859,310344,'insert','blocks','{"block_hash":"0bda7b13d1bc2ba4c3c72e0f27157067677595264d6430038f0b227118de8c65","block_index":310345,"block_time":310345000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(860,310345,'parse','blocks','{"block_index":310345,"ledger_hash":"d1775816bb104187076be74e78e87fc6d367c3cb31d372329aec2b635002ca2e","messages_hash":"54a59c638ed8ad1a8b9d72d0f9afef9616f7ee9c77b1cce9793ec14119c819dc","txlist_hash":"15f4f9eb55ff5d2b8efb40a57193f253470889b1fb2f532f02b66d236bc902bf"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(861,310346,'insert','blocks','{"block_hash":"0635503844de474dd694ecbcfb93e578268f77a80230a29986dfa7eeade15b16","block_index":310346,"block_time":310346000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(861,310345,'insert','blocks','{"block_hash":"0635503844de474dd694ecbcfb93e578268f77a80230a29986dfa7eeade15b16","block_index":310346,"block_time":310346000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(862,310346,'parse','blocks','{"block_index":310346,"ledger_hash":"3244eed1df8ec4ae0ddb04f9f6e59e54244ca3df10dc21fc89c99c74ba734781","messages_hash":"ed53197fade3b880a6bcd70a41112b83879f5a1b2733dcd044a152f6e06966a1","txlist_hash":"58faa47bcd277d0d52d39a46473882adc797797cf2c30967418fb4ae832dc21d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(863,310347,'insert','blocks','{"block_hash":"f3f6b7e7a27c8da4318f9f2f694f37aaa9255bbdad260cb46f319a4755a1a84d","block_index":310347,"block_time":310347000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(863,310346,'insert','blocks','{"block_hash":"f3f6b7e7a27c8da4318f9f2f694f37aaa9255bbdad260cb46f319a4755a1a84d","block_index":310347,"block_time":310347000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(864,310347,'parse','blocks','{"block_index":310347,"ledger_hash":"6fd1802c269750b69ec04df457d47cd6b44c261340ebd5b4da61f06ede6aa166","messages_hash":"f9b1e1152ba3fd730692c61dc7b897b74290425148717cb0c7d26ddb2b066764","txlist_hash":"716162f3fea6641e6ac697eb11880c5b39903de4ab30fa24e899e363d5c1d9cd"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(865,310348,'insert','blocks','{"block_hash":"c912af0d57982701bcda4293ad1ff3456299fd9e4a1da939d8d94bcb86634412","block_index":310348,"block_time":310348000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(865,310347,'insert','blocks','{"block_hash":"c912af0d57982701bcda4293ad1ff3456299fd9e4a1da939d8d94bcb86634412","block_index":310348,"block_time":310348000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(866,310348,'parse','blocks','{"block_index":310348,"ledger_hash":"668330e80a23f499c0e91b01c4c51aab393813b840f81b6b672611e391699faf","messages_hash":"95410fcf3fc291907a1969f9cdc8646a55fd0979f748332a10a298ed1914b4c7","txlist_hash":"8c169d593d4c922ef7d3f530f6de4da37c01716f19ea19b48b122a6135f3e293"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(867,310349,'insert','blocks','{"block_hash":"ca911c788add2e16726f4e194137f595823092482e48ff8dd3bdbe56c203523c","block_index":310349,"block_time":310349000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(867,310348,'insert','blocks','{"block_hash":"ca911c788add2e16726f4e194137f595823092482e48ff8dd3bdbe56c203523c","block_index":310349,"block_time":310349000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(868,310349,'parse','blocks','{"block_index":310349,"ledger_hash":"32b36035ac1684e93126657ecd9711feb689672f64cceb03d220a8089dfacf12","messages_hash":"650e904e246fbaccd362968543bd414fe4e03941d96f0a8c1c7d509fc260b738","txlist_hash":"8d54849ce08f65fd3dd06baf845e5a3132b84c960e6f316c4bbbbe5a3d2b7b01"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(869,310350,'insert','blocks','{"block_hash":"c20d54368c4e558c44e2fbaa0765d3aecc8c9f01d456e3ff219508b5d06bd69d","block_index":310350,"block_time":310350000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(869,310349,'insert','blocks','{"block_hash":"c20d54368c4e558c44e2fbaa0765d3aecc8c9f01d456e3ff219508b5d06bd69d","block_index":310350,"block_time":310350000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(870,310350,'parse','blocks','{"block_index":310350,"ledger_hash":"dbe70bf3b8e4b74ac25c1b6737b6a760e6a06a4f96ee83a5ca728c8501d4af05","messages_hash":"33bc524f9a329407e3509a4623d89f6d2c3e00616c4314b86bab1d1b802a4a6c","txlist_hash":"1e46f66542896fa2ff6048472d49feed3065a6fffaad639da03027b00ce377bf"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(871,310351,'insert','blocks','{"block_hash":"656bd69a59329dbea94b8b22cfdaaec8de9ab50204868f006494d78e7f88e26f","block_index":310351,"block_time":310351000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(871,310350,'insert','blocks','{"block_hash":"656bd69a59329dbea94b8b22cfdaaec8de9ab50204868f006494d78e7f88e26f","block_index":310351,"block_time":310351000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(872,310351,'parse','blocks','{"block_index":310351,"ledger_hash":"89bb7ea865a221a3646f78ea774a7cf1e15e8d65b85ddcfbdf87773145904151","messages_hash":"dbbc0a977c9bf6385e4652c94f97702965df6eae2863730b9930e7aafd8d6c84","txlist_hash":"f99c452388cd3d8aa59f7c75fa06770a116b5f69263dddbb7b5fdcffc7ffc524"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(873,310352,'insert','blocks','{"block_hash":"fb97d2f766a23acb9644fef833e0257fdb74546e50d9e2303cf88d2e82b71a50","block_index":310352,"block_time":310352000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(873,310351,'insert','blocks','{"block_hash":"fb97d2f766a23acb9644fef833e0257fdb74546e50d9e2303cf88d2e82b71a50","block_index":310352,"block_time":310352000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(874,310352,'parse','blocks','{"block_index":310352,"ledger_hash":"fdbf27d576a72b046776be0e5c0a91d060619778aadef3df1d30f1a7785a0fdb","messages_hash":"b2a4a9c315f66980a2a3525b322adf6ff4a47e60649559bd2e7dffb68b58c29a","txlist_hash":"1d2f391bb7990954e14c69c9429b54b9f5a88791ec4b2fba2facb464152417f4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(875,310353,'insert','blocks','{"block_hash":"2d3e451f189fc2f29704b1b09820278dd1eeb347fef11352d7a680c9aecc13b8","block_index":310353,"block_time":310353000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(875,310352,'insert','blocks','{"block_hash":"2d3e451f189fc2f29704b1b09820278dd1eeb347fef11352d7a680c9aecc13b8","block_index":310353,"block_time":310353000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(876,310353,'parse','blocks','{"block_index":310353,"ledger_hash":"73429d323376209447edc6d2ddbfd51f0bcde21736ea6dad61dc96b6984a1fa1","messages_hash":"a73650310ecd6b53b89787e20449de8e844aa747b6211dcc0b33aa389b3a5d72","txlist_hash":"8ad1adee999dd851e81025b31920d1f0f66c1e56433e7b2b110d03cfccd7a141"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(877,310354,'insert','blocks','{"block_hash":"437d9635e1702247e0d9330347cc6e339e3678be89a760ba9bf79dd2cd8803e0","block_index":310354,"block_time":310354000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(877,310353,'insert','blocks','{"block_hash":"437d9635e1702247e0d9330347cc6e339e3678be89a760ba9bf79dd2cd8803e0","block_index":310354,"block_time":310354000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(878,310354,'parse','blocks','{"block_index":310354,"ledger_hash":"b2bbcbb6a7db94b2a5681c6e380ac13480bb49c29a3fbb3c7c1eb740f70f8324","messages_hash":"b31bc14fc3a9af3b1b3977100c36b1465781bdbe9390ff267afdc51d57caae39","txlist_hash":"8d6870632f2336908828a72e7445c9d8ecbec3d420b234dad2b17ae06c0a709c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(879,310355,'insert','blocks','{"block_hash":"ea80897a4f9167bfc775e4e43840d9ea6f839f3571c7ab4433f1e082f4bbe37d","block_index":310355,"block_time":310355000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(879,310354,'insert','blocks','{"block_hash":"ea80897a4f9167bfc775e4e43840d9ea6f839f3571c7ab4433f1e082f4bbe37d","block_index":310355,"block_time":310355000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(880,310355,'parse','blocks','{"block_index":310355,"ledger_hash":"ccbd3ea41587c3c1d92f355979b49c5340a0a90060f07c228c22d6ff76b25579","messages_hash":"f1f4e9f44d7cec303a3ff0e9014c66741e8463d2e1e2644edff38a7a06ae19d3","txlist_hash":"8dfb02eb42bf84a085d150a0dc3fb2effa201594da47639e8f77fea0a7084eea"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(881,310356,'insert','blocks','{"block_hash":"68088305f7eba74c1d50458e5e5ca5a849f0b4a4e9935709d8ee56877b1b55c4","block_index":310356,"block_time":310356000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(881,310355,'insert','blocks','{"block_hash":"68088305f7eba74c1d50458e5e5ca5a849f0b4a4e9935709d8ee56877b1b55c4","block_index":310356,"block_time":310356000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(882,310356,'parse','blocks','{"block_index":310356,"ledger_hash":"06a95d39e110e40ba318320d50984096cbec88c680f426f721154555efc2561f","messages_hash":"cc0cc378fba640609764042b3a71687c5ea7085f9fd3528fc22cb4a0f33c535a","txlist_hash":"3516c2e9b180883b3526ee0a028c6d22b2a8a028b896423eb71db31cc284d566"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(883,310357,'insert','blocks','{"block_hash":"4572f7f4ad467ef78212e9e08fa2ce3f01f2acc28c0b8ca9d1479380726bab1f","block_index":310357,"block_time":310357000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(883,310356,'insert','blocks','{"block_hash":"4572f7f4ad467ef78212e9e08fa2ce3f01f2acc28c0b8ca9d1479380726bab1f","block_index":310357,"block_time":310357000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(884,310357,'parse','blocks','{"block_index":310357,"ledger_hash":"443f947352e853367d1c10d25771c7d78eec22fac19c5bace6f96b8f949e264b","messages_hash":"1a17b268e299c081550e6b708d3a67c8e9e5da464a248c07bd7ff2d37521aaf6","txlist_hash":"af4dd2cd8426ceb8c7dacc24b30d4d48e1152340a5a81f32b745878558969f4a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(885,310358,'insert','blocks','{"block_hash":"d5eae5513f1264d00d8c83fe9271e984774526d89b03ecd78d62d4d95ec1dea6","block_index":310358,"block_time":310358000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(885,310357,'insert','blocks','{"block_hash":"d5eae5513f1264d00d8c83fe9271e984774526d89b03ecd78d62d4d95ec1dea6","block_index":310358,"block_time":310358000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(886,310358,'parse','blocks','{"block_index":310358,"ledger_hash":"c2cd71dc9e7d5ccb5d5e9d6b55c47010c9db6a573d01820da1c8960970fd571f","messages_hash":"8994641c9faf9510eb6dc0cafb53c9ddd941fb6c7f628361bc30a57b70d1c635","txlist_hash":"635f90dc6b705e3e5928101d6ffc32a247088fd8965e0e372358b35ba822df31"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(887,310359,'insert','blocks','{"block_hash":"4fa301160e7e0be18a33065475b1511e859475f390133857a803de0692a9b74f","block_index":310359,"block_time":310359000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(887,310358,'insert','blocks','{"block_hash":"4fa301160e7e0be18a33065475b1511e859475f390133857a803de0692a9b74f","block_index":310359,"block_time":310359000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(888,310359,'parse','blocks','{"block_index":310359,"ledger_hash":"5b7646bafc6b11eb1554ea1e02221883043b435ae973c3678505fa2128aadfb7","messages_hash":"f65b2c8ae6adc575a288d4f042f90176bd007350206178e62c024584d6ed287c","txlist_hash":"eeec8a86b03a3973bdf5215e1789277ab7aa4c47f4e9f05a44a312c01e0ccf0d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(889,310360,'insert','blocks','{"block_hash":"cc852c3c20dbb58466f9a3c9f6df59ef1c3584f849272e100823a95b7a3c79f0","block_index":310360,"block_time":310360000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(889,310359,'insert','blocks','{"block_hash":"cc852c3c20dbb58466f9a3c9f6df59ef1c3584f849272e100823a95b7a3c79f0","block_index":310360,"block_time":310360000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(890,310360,'parse','blocks','{"block_index":310360,"ledger_hash":"b0e937568a47c244e3b29cfb3a5e7196c171acc1565c44020345c715b7774658","messages_hash":"0f246fe11fc2b9fc1d2b8f7517473f6a7eb91915d765779783e7898a8bd3d5bc","txlist_hash":"32f4991609b3d8cbddbee2fe5e7aff49e7d4f5334ba0d283893733f19d3f448b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(891,310361,'insert','blocks','{"block_hash":"636110c0af5c76ada1a19fa5cd012e3ee796723f8a7b3a5457d8cb81d6c57019","block_index":310361,"block_time":310361000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(891,310360,'insert','blocks','{"block_hash":"636110c0af5c76ada1a19fa5cd012e3ee796723f8a7b3a5457d8cb81d6c57019","block_index":310361,"block_time":310361000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(892,310361,'parse','blocks','{"block_index":310361,"ledger_hash":"fd5b67bb571f4e9c0c37c6a5c9e1181133c301e05f4f97a41bd827eda7a6db3c","messages_hash":"6fac343e1053a7a48346243c906493f98c138355761619bdc0677a0b3d7c697d","txlist_hash":"4ad763ba9a9de4e6fd2f48d1342b9c2b4f87224fe591cddcf0ea3aab19187ab3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(893,310362,'insert','blocks','{"block_hash":"6199591a598e9b2159adb828ab26d48c37c26b784f8467a6bb55d51d7b6390f2","block_index":310362,"block_time":310362000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(893,310361,'insert','blocks','{"block_hash":"6199591a598e9b2159adb828ab26d48c37c26b784f8467a6bb55d51d7b6390f2","block_index":310362,"block_time":310362000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(894,310362,'parse','blocks','{"block_index":310362,"ledger_hash":"38382cc090b349809c4798c3c83b485f8ff682fd5b5b2568357d62ef30f7c046","messages_hash":"7208036024f6c4e6557619b9625abd7275a52a91f6bf0d62fbd20736138665f4","txlist_hash":"2eed1cb542570837b9e34c5ef140428d09c132369e5073061d9b1580338fad97"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(895,310363,'insert','blocks','{"block_hash":"a31967b730f72da6ad20f563df18c081c13e3537ba7ea5ab5d01db40e02647e6","block_index":310363,"block_time":310363000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(895,310362,'insert','blocks','{"block_hash":"a31967b730f72da6ad20f563df18c081c13e3537ba7ea5ab5d01db40e02647e6","block_index":310363,"block_time":310363000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(896,310363,'parse','blocks','{"block_index":310363,"ledger_hash":"82911a691937d87629bc14e5294f68a25ff2fc6512370db032834b85a623d5c3","messages_hash":"f2e9a33842fc7f9a1482b1c985a2a6058b8b56535c2a508fcd3e3dba930e46be","txlist_hash":"baa8c23f6f8bbed9640382166a4fa59eba156a3c94b645334124a57ad886136d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(897,310364,'insert','blocks','{"block_hash":"67025b6f69e33546f3309b229ea1ae22ed12b0544b48e202f5387e08d13be0c9","block_index":310364,"block_time":310364000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(897,310363,'insert','blocks','{"block_hash":"67025b6f69e33546f3309b229ea1ae22ed12b0544b48e202f5387e08d13be0c9","block_index":310364,"block_time":310364000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(898,310364,'parse','blocks','{"block_index":310364,"ledger_hash":"cc362ce4c2142e539057430e2dd6402b985c62fefa4e4ad33afe1305f53af8a4","messages_hash":"6de02c61011ad812328b595e95dfd62a2a21ed94bcf59d87fc87c758a9ccd48e","txlist_hash":"973037f8124687eaeba2e9f3e301cb20b9370bef4acd3f2c86eedf595b792b73"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(899,310365,'insert','blocks','{"block_hash":"b65b578ed93a85ea5f5005ec957765e2d41e741480adde6968315fe09784c409","block_index":310365,"block_time":310365000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(899,310364,'insert','blocks','{"block_hash":"b65b578ed93a85ea5f5005ec957765e2d41e741480adde6968315fe09784c409","block_index":310365,"block_time":310365000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(900,310365,'parse','blocks','{"block_index":310365,"ledger_hash":"49e41f95f081b70e3f540fa22864cc4f229ceabfdfd54f2da112f1fd35466617","messages_hash":"800333a93bd7fa0dda3e2ba69ae3e54849f6eada89153cb172fd950470da26cf","txlist_hash":"aa3e39acb1dc1a955f579a9a40961a80319c5dd484ddf322ca6edc6b67cec932"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(901,310366,'insert','blocks','{"block_hash":"a7843440b110ab26327672e3d65125a1b9efd838671422b6ede6c85890352440","block_index":310366,"block_time":310366000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(901,310365,'insert','blocks','{"block_hash":"a7843440b110ab26327672e3d65125a1b9efd838671422b6ede6c85890352440","block_index":310366,"block_time":310366000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(902,310366,'parse','blocks','{"block_index":310366,"ledger_hash":"687c5f3e381d164499126ff90785e3635c825db3808267d4de2ec0e37cc7c597","messages_hash":"b33be7191d7e1afb1140f19fd44bb07daf83897c2fa1af45fc75c15bc85307a0","txlist_hash":"610fbd2d8f4dad57d7efca0772534da791785cb2c45de1906a9b282792faa9f8"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(903,310367,'insert','blocks','{"block_hash":"326c7e51165800a892b48909d105ff5ea572ff408d56d1623ad66d3dfeeb4f47","block_index":310367,"block_time":310367000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(903,310366,'insert','blocks','{"block_hash":"326c7e51165800a892b48909d105ff5ea572ff408d56d1623ad66d3dfeeb4f47","block_index":310367,"block_time":310367000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(904,310367,'parse','blocks','{"block_index":310367,"ledger_hash":"d7fe976a4b2cca2e23d082a703ef4f4739e110ce1e0a373e76064f6186856ff7","messages_hash":"78fd0206e26ec2c77965dec55fa417738c919261b8a436e69574a786d313dc65","txlist_hash":"531453a70483611396ce5bacc17e22125b1b61f61d56c110fb72a929b95deb9a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(905,310368,'insert','blocks','{"block_hash":"f7bfee2feb32c2bfd998dc0f6bff5e5994a3131808b912d692c3089528b4e006","block_index":310368,"block_time":310368000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(905,310367,'insert','blocks','{"block_hash":"f7bfee2feb32c2bfd998dc0f6bff5e5994a3131808b912d692c3089528b4e006","block_index":310368,"block_time":310368000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(906,310368,'parse','blocks','{"block_index":310368,"ledger_hash":"97f0a0f9e6f355dd179aa2941412decc1b0a06de0dc14dce8538aed6e35d41ba","messages_hash":"a75962c77a91893bfe4fce4d8e9b6e6f85d863b7f2b30060f7eb61b913c8f988","txlist_hash":"289eb338000f45b4d7e143a08a490fbee8d307eb0975f5a2ed62586c2f625e0e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(907,310369,'insert','blocks','{"block_hash":"0f836b76eb06019a6bb01776e80bc10dac9fb77002262c80d6683fd42dbfc8da","block_index":310369,"block_time":310369000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(907,310368,'insert','blocks','{"block_hash":"0f836b76eb06019a6bb01776e80bc10dac9fb77002262c80d6683fd42dbfc8da","block_index":310369,"block_time":310369000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(908,310369,'parse','blocks','{"block_index":310369,"ledger_hash":"1b5d9ec9bd918c84a5f9b6882c94a739cc1ad1362dedfbdf7b2009fd42251d66","messages_hash":"9f6da7f4b88f3abd9705318ff6a1d23ee9bcfb11c16f6de7a1dfc5c160c8f5bc","txlist_hash":"a9122294ce4ccd606d3fa1787fb9c44f25811fb2fe486c9d58b407b5da50dd8b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(909,310370,'insert','blocks','{"block_hash":"9eb8f1f6cc0ed3d2a77c5b2c66965150c8ceb26d357b9844e19674d8221fef67","block_index":310370,"block_time":310370000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(909,310369,'insert','blocks','{"block_hash":"9eb8f1f6cc0ed3d2a77c5b2c66965150c8ceb26d357b9844e19674d8221fef67","block_index":310370,"block_time":310370000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(910,310370,'parse','blocks','{"block_index":310370,"ledger_hash":"578b039ed2b9a25e1c75ad9a5242c5962d6645616dc53fb08386602e40f14486","messages_hash":"7e1fc55016a8c1f7d8aeb507891febc3d2ff083d15a8386cb151eeed36126902","txlist_hash":"d61d958644caab04dc236d04d3654abeb1fd625dd7b9cdc01ca5caeae9b41f58"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(911,310371,'insert','blocks','{"block_hash":"7404cb31a39887a9841c2c27309d8c50b88748ed5fa8a3e5ba4cc3fc18310154","block_index":310371,"block_time":310371000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(911,310370,'insert','blocks','{"block_hash":"7404cb31a39887a9841c2c27309d8c50b88748ed5fa8a3e5ba4cc3fc18310154","block_index":310371,"block_time":310371000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(912,310371,'parse','blocks','{"block_index":310371,"ledger_hash":"473d21b8218a2b02f7fa0d5daf114fa988e4a3d97c33aebe97e51a8d22252492","messages_hash":"0c1a84220c5740d841e1019b76849a49f2760d82afac404c46ac333840724478","txlist_hash":"8abb7bf5c66895fd9e9de804ed8e35b3b1d12054a4e45ab3df6cd41194d836e6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(913,310372,'insert','blocks','{"block_hash":"d3a790f6f5f85e2662a9d5fcd94a38bfe9f318ffd695f4770b6ea0770e1ae18d","block_index":310372,"block_time":310372000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(913,310371,'insert','blocks','{"block_hash":"d3a790f6f5f85e2662a9d5fcd94a38bfe9f318ffd695f4770b6ea0770e1ae18d","block_index":310372,"block_time":310372000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(914,310372,'parse','blocks','{"block_index":310372,"ledger_hash":"0c306eb25702d190ce32cac521b1fac9b8a7cbcf441fd74be8de2e002b4ce14c","messages_hash":"c4f885c7acac670739975c95af4f377eecfb635a112cc87b6881d6972cf46374","txlist_hash":"ad3d52b024093fcc5b88b7a3176c4117468f0f675fd9e908c727ebedc5e2eff3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(915,310373,'insert','blocks','{"block_hash":"c192bec419937220c2705ce8a260ba0922940af116e10a2bc9db94f7497cf9c0","block_index":310373,"block_time":310373000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(915,310372,'insert','blocks','{"block_hash":"c192bec419937220c2705ce8a260ba0922940af116e10a2bc9db94f7497cf9c0","block_index":310373,"block_time":310373000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(916,310373,'parse','blocks','{"block_index":310373,"ledger_hash":"48d14b17f9074ce1f75ab32581e8f6fe7d518ebd669af6508e5d986d97c92b3d","messages_hash":"95024e723544b65f52242f2c4ec5e71264a1aceb8e4a02136a0772be1c7d60fe","txlist_hash":"b60270d322c86c6452289e0968be64c2217ebeec34944e43aef908e119f838ea"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(917,310374,'insert','blocks','{"block_hash":"f541273d293a084509916c10aec0de40092c7695888ec7510f23e0c7bb405f8e","block_index":310374,"block_time":310374000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(917,310373,'insert','blocks','{"block_hash":"f541273d293a084509916c10aec0de40092c7695888ec7510f23e0c7bb405f8e","block_index":310374,"block_time":310374000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(918,310374,'parse','blocks','{"block_index":310374,"ledger_hash":"aee93917f6fe0046069aaff48d5d1875a9c4451acec6562a377428bfb1184cd4","messages_hash":"015375f1837c56f1921aed0b6297ce0ed5279663bb9bca13ede1392abbf17d81","txlist_hash":"46decb141683d0bf4c52e4f756b955c923bfb3995025d0f19a8ef7cac1dd2b60"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(919,310375,'insert','blocks','{"block_hash":"da666e1886212e20c154aba9d6b617e471106ddc9b8c8a28e9860baf82a17458","block_index":310375,"block_time":310375000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(919,310374,'insert','blocks','{"block_hash":"da666e1886212e20c154aba9d6b617e471106ddc9b8c8a28e9860baf82a17458","block_index":310375,"block_time":310375000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(920,310375,'parse','blocks','{"block_index":310375,"ledger_hash":"2b0d74911bba5c9530b69c04fec512fe4c5df25458e5237db884586a221fa30b","messages_hash":"9f74f2c9fc67e4d2364b85c8d975f11c53dd96dbb33512d3718fa815b5fa070a","txlist_hash":"9349961eeb706cf083d6ef1fff69cc871def662dd23fd7854135c1b0dc1a78fb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(921,310376,'insert','blocks','{"block_hash":"5dc483d7d1697eb823cba64bb8d6c0aded59d00ea37067de0caeebf3ea4ea7dc","block_index":310376,"block_time":310376000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(921,310375,'insert','blocks','{"block_hash":"5dc483d7d1697eb823cba64bb8d6c0aded59d00ea37067de0caeebf3ea4ea7dc","block_index":310376,"block_time":310376000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(922,310376,'parse','blocks','{"block_index":310376,"ledger_hash":"a6f84afe2845ba2fa4e5e7377b1d4474dbde6dfc9c4bed050e6d10cc80025e82","messages_hash":"53b6ffb8648293f11adb26d10dce89a55dc0b6645c74bac3b8841421a2715476","txlist_hash":"a5f607569f31beb9ba2a0496a9eb2eb40a6926df4b174161b73f53719ad04767"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(923,310377,'insert','blocks','{"block_hash":"f8d1cac1fef3fa6e7ad1c44ff6ae2c6920985bad74e77a6868612ee81f16b0b3","block_index":310377,"block_time":310377000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(923,310376,'insert','blocks','{"block_hash":"f8d1cac1fef3fa6e7ad1c44ff6ae2c6920985bad74e77a6868612ee81f16b0b3","block_index":310377,"block_time":310377000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(924,310377,'parse','blocks','{"block_index":310377,"ledger_hash":"e006e13691719e4fce65e72c692d3affeae8ae465de2a3b285a1bed4eb518a70","messages_hash":"318599633adc13ffcdc8228c39103c9f25eff9a3b1d1b1fc308d10bb41d7f9f0","txlist_hash":"4dd3a5ae07e934557005871e7c72351077b1092580eadda11fcd3501bb000579"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(925,310378,'insert','blocks','{"block_hash":"fec994dd24e213aa78f166ca315c90cb74ee871295a252723dd269c13fc614ce","block_index":310378,"block_time":310378000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(925,310377,'insert','blocks','{"block_hash":"fec994dd24e213aa78f166ca315c90cb74ee871295a252723dd269c13fc614ce","block_index":310378,"block_time":310378000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(926,310378,'parse','blocks','{"block_index":310378,"ledger_hash":"607ffa4928577b82f275750353fcecc2e50098d227f18bb8ea95ac2bbb10eea6","messages_hash":"bc105cb041223f0dd3c20019e8a7a9aeb127d6fddec1560d606cd5b8af23279c","txlist_hash":"49533405fa36a389e0d8cac965389e23eb421da5833d625d160f75fa9defdeab"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(927,310379,'insert','blocks','{"block_hash":"d86cdb36616976eafb054477058de5670a02194f3ee27911df1822ff1c26f19c","block_index":310379,"block_time":310379000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(927,310378,'insert','blocks','{"block_hash":"d86cdb36616976eafb054477058de5670a02194f3ee27911df1822ff1c26f19c","block_index":310379,"block_time":310379000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(928,310379,'parse','blocks','{"block_index":310379,"ledger_hash":"9f17e8d662dbbfc12a56dc36172b3154bc9b05a87885d1411826481e1ca4f6ea","messages_hash":"902cbbb20d2a0003f4c579bfbedb04e787a2a5ef5a8c485a269c215c9628db32","txlist_hash":"4514a78a69d0987ff60976334f70d0533a1c5726099ae73d93be187a57f25f44"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(929,310380,'insert','blocks','{"block_hash":"292dba1b887326f0719fe00caf9863afc613fc1643e041ba7678a325cf2b6aae","block_index":310380,"block_time":310380000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(929,310379,'insert','blocks','{"block_hash":"292dba1b887326f0719fe00caf9863afc613fc1643e041ba7678a325cf2b6aae","block_index":310380,"block_time":310380000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(930,310380,'parse','blocks','{"block_index":310380,"ledger_hash":"d617e30e1a32ed1cf269a190fd4c843755413492827546a0b3ed14278f817532","messages_hash":"1c8bc40c48e73b0993830fb4073e2f2ae056111b5bd5d22a87831c4b88d32973","txlist_hash":"77038e6b75820a64c9fc9530b3d2c8411cc4da649fc69a3d235424c2dd5500c5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(931,310381,'insert','blocks','{"block_hash":"6726e0171d41e8b03e8c7a245ef69477b44506b651efe999e892e1e6d9d4cf38","block_index":310381,"block_time":310381000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(931,310380,'insert','blocks','{"block_hash":"6726e0171d41e8b03e8c7a245ef69477b44506b651efe999e892e1e6d9d4cf38","block_index":310381,"block_time":310381000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(932,310381,'parse','blocks','{"block_index":310381,"ledger_hash":"8af8d819f02927de4a74d3d37dcecf6e5124d53be37603764b1b1adad13b0d7a","messages_hash":"910afea0bf4129dd27c06428bafaab6c8c8bbf95ec371466640072a26eb129e5","txlist_hash":"48b66540bea91d2c2d216d5c13e88dfd9c1f1a36cae2ec721253034041e63af6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(933,310382,'insert','blocks','{"block_hash":"0be33004c34938cedd0901b03c95e55d91590aa2fec6c5f6e44aec5366a0e7d8","block_index":310382,"block_time":310382000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(933,310381,'insert','blocks','{"block_hash":"0be33004c34938cedd0901b03c95e55d91590aa2fec6c5f6e44aec5366a0e7d8","block_index":310382,"block_time":310382000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(934,310382,'parse','blocks','{"block_index":310382,"ledger_hash":"809d5c20335bbefe8e4f3552e24b24d96f6ee4ab12f3bfc9e74898371cf69797","messages_hash":"9cdf0d22a1b690bfb2f542326c53e25e0f1d2b83c434bdc8294ce03959faeba6","txlist_hash":"159e8434abde33d3a97a4e7701cafec884a6d0d7ad78852ee7db449a18c5e23f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(935,310383,'insert','blocks','{"block_hash":"992ff9a3b2f4e303854514d4cad554ff333c1f3f84961aa5a6b570af44a74508","block_index":310383,"block_time":310383000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(935,310382,'insert','blocks','{"block_hash":"992ff9a3b2f4e303854514d4cad554ff333c1f3f84961aa5a6b570af44a74508","block_index":310383,"block_time":310383000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(936,310383,'parse','blocks','{"block_index":310383,"ledger_hash":"d8ec301994a5333f8efe7cc547a833d26c6766deb0b39c4fc18d1bdb470ee903","messages_hash":"4b565f4fd6c07a96002f87eccb7e693fe8d7cc6d8a81cb85cc6b06fb071069c4","txlist_hash":"aecbe5619daf47a60ab2765502725a284224c0985e91993b212c50c3449d197a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(937,310384,'insert','blocks','{"block_hash":"d518c696796401d77956d878cbdc247e207f03198eabc2749d61ebeadee87e5e","block_index":310384,"block_time":310384000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(937,310383,'insert','blocks','{"block_hash":"d518c696796401d77956d878cbdc247e207f03198eabc2749d61ebeadee87e5e","block_index":310384,"block_time":310384000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(938,310384,'parse','blocks','{"block_index":310384,"ledger_hash":"fe47a03993cb9079a6e72810552d631fe838bcfaba3b34c73c9948af77266df2","messages_hash":"8e77a1836fdc196b50c2a525208fb5ff587c38486d1dce443a2fb1a7227119f2","txlist_hash":"e69bc390fb0a624f6d33512a55e9732857afee1b114df97761186ac648f63111"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(939,310385,'insert','blocks','{"block_hash":"2aa6a491a03a1a16adbc5f5e795c97ec338345cfdf10ff711ffb7ac3a0e26e28","block_index":310385,"block_time":310385000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(939,310384,'insert','blocks','{"block_hash":"2aa6a491a03a1a16adbc5f5e795c97ec338345cfdf10ff711ffb7ac3a0e26e28","block_index":310385,"block_time":310385000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(940,310385,'parse','blocks','{"block_index":310385,"ledger_hash":"6114e98e0004cf0f9472fce6bfa6bb99ae38e57214c8b134f30da1d62399f6ef","messages_hash":"7668443002aeaae041ff7859c252f642fd930c4d51a616247a798f47942f97ae","txlist_hash":"d3e6a4df9ff34518f8fe243dc87c981aef0cc7b89ff9ca466269a19493aeaecb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(941,310386,'insert','blocks','{"block_hash":"9d19a754b48a180fd5ebb0ae63e96fa9f4a67e475aeefa41f8f4f8420e677eda","block_index":310386,"block_time":310386000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(941,310385,'insert','blocks','{"block_hash":"9d19a754b48a180fd5ebb0ae63e96fa9f4a67e475aeefa41f8f4f8420e677eda","block_index":310386,"block_time":310386000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(942,310386,'parse','blocks','{"block_index":310386,"ledger_hash":"4c52d59ade1bd2068e3b75b8b3cd1d23c6a94b6437f7966d10f5a07bf8f630ff","messages_hash":"1fd22e6bf448e0771f8c7da5c0829614f5f45612bd6592104c369b001fcfd266","txlist_hash":"1c250ef18892c191c535562bb35bb1c8bd4f515ab00bc4cf0b564436b2bd33ee"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(943,310387,'insert','blocks','{"block_hash":"b4cac00f59c626206e193575b3ba9bfddd83bbfc374ebeb2838acd25e34a6c2b","block_index":310387,"block_time":310387000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(943,310386,'insert','blocks','{"block_hash":"b4cac00f59c626206e193575b3ba9bfddd83bbfc374ebeb2838acd25e34a6c2b","block_index":310387,"block_time":310387000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(944,310387,'parse','blocks','{"block_index":310387,"ledger_hash":"327e9a842233568888998ec1456b6f78c093b47639707d44e6336b2bc18d955f","messages_hash":"194a4ec47379a92f7ad3ef8b24e797fe33173d2036b687596fa534356c07a672","txlist_hash":"d7de64dd98a65b478518d909b1f0f2860f6a0b8e5e530f23ee55caffbaf1a545"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(945,310388,'insert','blocks','{"block_hash":"41a04637694ea47a57b76fb52d3e8cfe67ee28e3e8744218f652166abe833284","block_index":310388,"block_time":310388000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(945,310387,'insert','blocks','{"block_hash":"41a04637694ea47a57b76fb52d3e8cfe67ee28e3e8744218f652166abe833284","block_index":310388,"block_time":310388000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(946,310388,'parse','blocks','{"block_index":310388,"ledger_hash":"6efaab188a5cae39ef547a804f61bcbc2be4881e0569f49d7622b407f6860401","messages_hash":"5de4d26d0f94ec5c143e465eb509d22bbd2016bf9068ffb5e5c6949384a648e1","txlist_hash":"4916559fdc472a474aa4c652c85b0db143744daed0d98d7f2fddd1dba32be88e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(947,310389,'insert','blocks','{"block_hash":"3ec95ae011161c6752f308d28bde892b2846e96a96de164e5f3394744d0aa607","block_index":310389,"block_time":310389000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(947,310388,'insert','blocks','{"block_hash":"3ec95ae011161c6752f308d28bde892b2846e96a96de164e5f3394744d0aa607","block_index":310389,"block_time":310389000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(948,310389,'parse','blocks','{"block_index":310389,"ledger_hash":"89c686d5d973691a7281268c867f837b86b140a05f16f12302a3cdeb3b6a0ee9","messages_hash":"232a974e8b60494567216ff9b2b8744fbd48c5328d04a63b29c671a8274df924","txlist_hash":"b2e0098e42f81a8a9369d510b17be67446feb3e5da1b1eb37acd9f0b33b29fce"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(949,310390,'insert','blocks','{"block_hash":"f05a916c6be28909fa19d176e0232f704d8108f73083dded5365d05b306ddf1a","block_index":310390,"block_time":310390000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(949,310389,'insert','blocks','{"block_hash":"f05a916c6be28909fa19d176e0232f704d8108f73083dded5365d05b306ddf1a","block_index":310390,"block_time":310390000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(950,310390,'parse','blocks','{"block_index":310390,"ledger_hash":"2c4eceebb94d0c7a7702478d9547d1afbb42ab5ecb5ae6271a3f69942bd77e50","messages_hash":"bf9827228ad31a03a85dacfd3a333afbbfe662611550bd431077abd226c87845","txlist_hash":"8e3a48b160083860b0928dd97150477980da9097945c4ae3ee144c505f131b86"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(951,310391,'insert','blocks','{"block_hash":"fc26112b7fdd8aaf333645607dabc9781eac067d4468d63bb46628623e122952","block_index":310391,"block_time":310391000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(951,310390,'insert','blocks','{"block_hash":"fc26112b7fdd8aaf333645607dabc9781eac067d4468d63bb46628623e122952","block_index":310391,"block_time":310391000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(952,310391,'parse','blocks','{"block_index":310391,"ledger_hash":"06397124ee2a1bcb9104899469394855d4ecccd1a08626d650bdf3169e227831","messages_hash":"7eb2b6f227e5550b5d0d75c21818c58263a4e86dd6b160b0b1638dda017d3062","txlist_hash":"b1b4f0fc9ba54527ea0902192a61158bb5383f1959f187915c07f88bdf11caaa"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(953,310392,'insert','blocks','{"block_hash":"f7022ecab2f2179c398580460f50c643b10d4b6869e5519db6ef5d5a27d84a1d","block_index":310392,"block_time":310392000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(953,310391,'insert','blocks','{"block_hash":"f7022ecab2f2179c398580460f50c643b10d4b6869e5519db6ef5d5a27d84a1d","block_index":310392,"block_time":310392000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(954,310392,'parse','blocks','{"block_index":310392,"ledger_hash":"44974b5fec0be3a2958d39f2d6824a2e82733f873a404ec9887178c620843149","messages_hash":"3341d9abb5324b460d6a80df5fd0b9c4003b38dffab3a503c27cfd21a3cd60df","txlist_hash":"97a039be078662ac5b1a275d5618224c1a90886c79b9fb651dfcb14481da8e8a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(955,310393,'insert','blocks','{"block_hash":"e6aeef89ab079721e7eae02f7b197acfb37c2de587d35a5cf4dd1e3c54d68308","block_index":310393,"block_time":310393000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(955,310392,'insert','blocks','{"block_hash":"e6aeef89ab079721e7eae02f7b197acfb37c2de587d35a5cf4dd1e3c54d68308","block_index":310393,"block_time":310393000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(956,310393,'parse','blocks','{"block_index":310393,"ledger_hash":"1863677c0e552344607b1af3eb8ef8f4fc6b2a73d63eebb3e9928302c887970f","messages_hash":"7e02c72085143c68bf4ec2f0d7f9cc74a5bdd0bbaf28d7c441401a8990e64fc7","txlist_hash":"c488dd61c64182cdc779e96a2b312463d42ff9829d1d518c8a9daa1a4cb26de3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(957,310394,'insert','blocks','{"block_hash":"2a944743c3beb3bf1b530bd6a210682a0a0e9b0e6a9ff938d9be856236779a6f","block_index":310394,"block_time":310394000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(957,310393,'insert','blocks','{"block_hash":"2a944743c3beb3bf1b530bd6a210682a0a0e9b0e6a9ff938d9be856236779a6f","block_index":310394,"block_time":310394000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(958,310394,'parse','blocks','{"block_index":310394,"ledger_hash":"3838ba6e84376ed8dffb3fee9b5928d903952c0d8a8ad41ab63a9651a1c8c770","messages_hash":"b386b65006170bb4b28bbe1a8235f9fc7104ea3e9e34d51d86eee06326571d99","txlist_hash":"e329db30a579327664d135ce9c3661a259378dcc12e179232599e0186c7bfe91"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(959,310395,'insert','blocks','{"block_hash":"19eb891ce70b82db2f2745e1d60e0cf445363aaff4e96335f9014d92312d20e4","block_index":310395,"block_time":310395000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(959,310394,'insert','blocks','{"block_hash":"19eb891ce70b82db2f2745e1d60e0cf445363aaff4e96335f9014d92312d20e4","block_index":310395,"block_time":310395000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(960,310395,'parse','blocks','{"block_index":310395,"ledger_hash":"872367d61f81cddeb555da5f9c4f46a8ac57c24629ab073094e407a4555a8555","messages_hash":"5f9db4e525ecff94de73118f2cb2ffaf872fe2692c4c35ab221fe89adc13b28d","txlist_hash":"2234b36f4187eb0da9ed6a633aa2e15075d5efb23f154963885e7fd42495e4a5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(961,310396,'insert','blocks','{"block_hash":"aea407729ac8d8e9221efd9d70106d14df6aaf9f2f87dc6f490835a9caadf08e","block_index":310396,"block_time":310396000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(961,310395,'insert','blocks','{"block_hash":"aea407729ac8d8e9221efd9d70106d14df6aaf9f2f87dc6f490835a9caadf08e","block_index":310396,"block_time":310396000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(962,310396,'parse','blocks','{"block_index":310396,"ledger_hash":"b9a9eaaf1cf6cfa4ae5b0f314812a9a2346209da0b7ce57e16010d2a01c0092a","messages_hash":"9e0597d4190ec3e829b62fe7ccc8020109369dbf72ab2b14ea115da386330813","txlist_hash":"25946162b9af068438633980c75eaf9e508144f603f7a913de56cc11a7a482f6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(963,310397,'insert','blocks','{"block_hash":"7c429e56a19e884a8a77a759b52334a4b79404081b976270114043ba94d7985c","block_index":310397,"block_time":310397000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(963,310396,'insert','blocks','{"block_hash":"7c429e56a19e884a8a77a759b52334a4b79404081b976270114043ba94d7985c","block_index":310397,"block_time":310397000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(964,310397,'parse','blocks','{"block_index":310397,"ledger_hash":"b61f36bcc934a18fdccf7806d41482684ca129801d0b9ce7815dcd488fc49a66","messages_hash":"b55fadb9aadb55ad049079769711016434ca942454f5bc39d9f6dc4417b24dab","txlist_hash":"e697fb2f445f03a1d895b904be58a554af4c26ed74a65eb0e52c98e490efbd44"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(965,310398,'insert','blocks','{"block_hash":"55c046db86dee1d63c0e46e6df79b5b77dfd4ab2ff5da79e6360ce77dd98335e","block_index":310398,"block_time":310398000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(965,310397,'insert','blocks','{"block_hash":"55c046db86dee1d63c0e46e6df79b5b77dfd4ab2ff5da79e6360ce77dd98335e","block_index":310398,"block_time":310398000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(966,310398,'parse','blocks','{"block_index":310398,"ledger_hash":"9446476e123e5dd354682c60591cab8b712c30df9080dde756246eef45e21df5","messages_hash":"f56692ed7d8f224a45a3c2563e2441b55626f8845abb6879fd1364cfa442c189","txlist_hash":"0d20ba449b95f7d128c8b78ef2a37ec390e6177b2041a2b035a72cb8e6062ba9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(967,310399,'insert','blocks','{"block_hash":"765abc449b3127d71ab971e0c2ae69c570284e0c5dacf4c3c07f2e4eca180e7a","block_index":310399,"block_time":310399000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(967,310398,'insert','blocks','{"block_hash":"765abc449b3127d71ab971e0c2ae69c570284e0c5dacf4c3c07f2e4eca180e7a","block_index":310399,"block_time":310399000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(968,310399,'parse','blocks','{"block_index":310399,"ledger_hash":"50d288bca09d446f56544fb1ec50d613bdf156488468ac92d433425a3cab0804","messages_hash":"b64321d63d483d9e7c09026e749bf3e9ab67e14d2e6c09363728bfa02c102d09","txlist_hash":"82214bf1638d82e5b66919990e24d3960eb02a423bb3f36bcdd730b17267e340"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(969,310400,'insert','blocks','{"block_hash":"925bc6f6f45fe2fb2d494e852aaf667d8623e5dae2e92fdffa80f15661f04218","block_index":310400,"block_time":310400000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(969,310399,'insert','blocks','{"block_hash":"925bc6f6f45fe2fb2d494e852aaf667d8623e5dae2e92fdffa80f15661f04218","block_index":310400,"block_time":310400000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(970,310400,'parse','blocks','{"block_index":310400,"ledger_hash":"349a24fd446727bb1793ccf88fc569d20eb680c10e506fc25b281ce6ec3fd7bd","messages_hash":"fee9df29e116470c1165c090931eb1bd7e45795f53350fa87da5042ce529edef","txlist_hash":"e7ce5e8c9c4160590dcdaba04bc866267a9784f99fe68bebd337da16768e8f18"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(971,310401,'insert','blocks','{"block_hash":"f7b9af2e2cd16c478eed4a34021f2009944dbc9b757bf8fe4fc03f9d900e0351","block_index":310401,"block_time":310401000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(971,310400,'insert','blocks','{"block_hash":"f7b9af2e2cd16c478eed4a34021f2009944dbc9b757bf8fe4fc03f9d900e0351","block_index":310401,"block_time":310401000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(972,310401,'parse','blocks','{"block_index":310401,"ledger_hash":"52c06b68cad19608420b73476a73b411d0327382b92bd454cadf1b8616eb17a5","messages_hash":"05538970685115a9ddaf41d458a3cce59ecf7b9b6a888729efadce1014e7a899","txlist_hash":"6ff1e13b2110c6ee69e86818bd32bacdffa6f4e91fd2d8c2b09b5db35062be81"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(973,310402,'insert','blocks','{"block_hash":"1404f1826cd93e1861dd92ca3f3b05c65e8578b88626577a3cbad1e771b96e44","block_index":310402,"block_time":310402000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(973,310401,'insert','blocks','{"block_hash":"1404f1826cd93e1861dd92ca3f3b05c65e8578b88626577a3cbad1e771b96e44","block_index":310402,"block_time":310402000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(974,310402,'parse','blocks','{"block_index":310402,"ledger_hash":"8bf64213a454c62dd4b0dcd7dfa298da0244a6aa7ae6fff98be6f49d50d259ab","messages_hash":"21985f293ab45f0cc41e2760cd3cd2c3e5fe8788ad16c5008b1853869e574790","txlist_hash":"3e776187716a384a84170b2e7dbbb5c152d98535351c1f5b4b00c7bf5ea7ff33"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(975,310403,'insert','blocks','{"block_hash":"f7426dbd4a0808148b5fc3eb66df4a8ad606c97888c175850f65099286c7581c","block_index":310403,"block_time":310403000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(975,310402,'insert','blocks','{"block_hash":"f7426dbd4a0808148b5fc3eb66df4a8ad606c97888c175850f65099286c7581c","block_index":310403,"block_time":310403000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(976,310403,'parse','blocks','{"block_index":310403,"ledger_hash":"fb2a365372522d1442792cb38e1a4167eda2612ef442c776749097a3d541a827","messages_hash":"e0e319bb5d4189cd952e021faaf0146e2872b62dcf137856d61959adf81724a4","txlist_hash":"1fad731787bca55d4102d8d355ccb9625590baaccd0ae63490320efbf5aaf90f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(977,310404,'insert','blocks','{"block_hash":"401c327424b39a6d908f1a2f2202208a7893a5bedc2b9aff8e7eda0b64040040","block_index":310404,"block_time":310404000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(977,310403,'insert','blocks','{"block_hash":"401c327424b39a6d908f1a2f2202208a7893a5bedc2b9aff8e7eda0b64040040","block_index":310404,"block_time":310404000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(978,310404,'parse','blocks','{"block_index":310404,"ledger_hash":"47f96d798df9cad17667be908ebb063ab9f79d947784a78189d247e626864a5f","messages_hash":"64c5499c7eef627a35277d801a7480aeb4a1e845ae368475da0c2edac597968c","txlist_hash":"10b2cfe8ebe45dac311048b4aa8d15d7c59ae17f5c1a0c132cfb675d893de8d5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(979,310405,'insert','blocks','{"block_hash":"4f6928561724e0f6aab2fc40719f591823ca7e57e42d1589a943f8c55400430a","block_index":310405,"block_time":310405000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(979,310404,'insert','blocks','{"block_hash":"4f6928561724e0f6aab2fc40719f591823ca7e57e42d1589a943f8c55400430a","block_index":310405,"block_time":310405000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(980,310405,'parse','blocks','{"block_index":310405,"ledger_hash":"185780205a9ab241bb0656799fd0d5942c1e3e5854abd1d06573da550b04b096","messages_hash":"dc4339e5e79750da2e11a43ccf76b285e85e50187e81bf14237084c2a3c414b2","txlist_hash":"8cbd52dd97944b34f080d675a51360dafcd38183cb08633e6ea247d2c5074435"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(981,310406,'insert','blocks','{"block_hash":"6784365c24e32a1dd59043f89283c7f4ac8ceb3ef75310414ded9903a9967b97","block_index":310406,"block_time":310406000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(981,310405,'insert','blocks','{"block_hash":"6784365c24e32a1dd59043f89283c7f4ac8ceb3ef75310414ded9903a9967b97","block_index":310406,"block_time":310406000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(982,310406,'parse','blocks','{"block_index":310406,"ledger_hash":"367b9de2313c5f7fce0c2dc2b4a8e2bc059f6881bc924f7315e8e2ca61728a59","messages_hash":"29eac43bd800bb93099e696e1f4cfe1bb7dfbce8316e65459c5e7780d32488c7","txlist_hash":"0d104d4ce44d11e581f51e5a33ec9e35a994b2b992842b173fb8a2756412b4b2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(983,310407,'insert','blocks','{"block_hash":"84396eb206e0ec366059d9e60aefdb381bca5082d58bffb3d2a7e7b6227fc01e","block_index":310407,"block_time":310407000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(983,310406,'insert','blocks','{"block_hash":"84396eb206e0ec366059d9e60aefdb381bca5082d58bffb3d2a7e7b6227fc01e","block_index":310407,"block_time":310407000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(984,310407,'parse','blocks','{"block_index":310407,"ledger_hash":"2bdbd79575aa2ff52ba0cce3fc1a1aac6120d598a8ab0ff3925e1395e6cad2d1","messages_hash":"b570ec3ca500cb58c1388584391c16e4ff5061ac434b7bcfd8185a121f318207","txlist_hash":"a3407057dc90723c90ed8f2df5af7840e50daa4c4bdedd47181c17a1e8563934"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(985,310408,'insert','blocks','{"block_hash":"4827c178805e2abae5cb6625605623b3260622b364b7b6be455060deaaec2cda","block_index":310408,"block_time":310408000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(985,310407,'insert','blocks','{"block_hash":"4827c178805e2abae5cb6625605623b3260622b364b7b6be455060deaaec2cda","block_index":310408,"block_time":310408000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(986,310408,'parse','blocks','{"block_index":310408,"ledger_hash":"fcd0edef8c4ae9517a6e793a2742c598de38c122829b7a7aa265310417ac92c3","messages_hash":"91b0efd57597544fe96539dbab912ef18d57dc237a42ee5245dd95c59eafd375","txlist_hash":"3ee1e7949bdb395a4e481f94344fccb2781abcb3f5d1fea2bbadb9de9228a426"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(987,310409,'insert','blocks','{"block_hash":"01a719656ad1140e975b2bdc8eebb1e7395905fd814b30690ab0a7abd4f76bba","block_index":310409,"block_time":310409000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(987,310408,'insert','blocks','{"block_hash":"01a719656ad1140e975b2bdc8eebb1e7395905fd814b30690ab0a7abd4f76bba","block_index":310409,"block_time":310409000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(988,310409,'parse','blocks','{"block_index":310409,"ledger_hash":"5b663c40873af21ebc721f2689e2c57a2c787fff579c58f033bba75910a64837","messages_hash":"7b6bfcc602b144da1f9c12773523114a4a54267eca14f4c8f255a9ce8b2e85c4","txlist_hash":"68fbf3a110ed24946d1594f5a4de1dae9c4b6f0394188a71ab89996e9fb4e55b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(989,310410,'insert','blocks','{"block_hash":"247a0070ac1ab6a3bd3ec5e73f802d9fbdcfa7ee562eaeeb21193f487ec4d348","block_index":310410,"block_time":310410000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(989,310409,'insert','blocks','{"block_hash":"247a0070ac1ab6a3bd3ec5e73f802d9fbdcfa7ee562eaeeb21193f487ec4d348","block_index":310410,"block_time":310410000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(990,310410,'parse','blocks','{"block_index":310410,"ledger_hash":"93c5a33931b2a33933bc286d6987b34730c0677460e4875d5c032ae86c2e01f0","messages_hash":"ca813e8e604e5ac2adf5fa18e2776ddf48ef3b2f34a1471fe71fb80ff73769d1","txlist_hash":"bd755bf0718d5a0423ec41a8ac84b1554751ff8f0a3f63d87e7e0f58aaa31008"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(991,310411,'insert','blocks','{"block_hash":"26cae3289bb171773e9e876faa3e45f0ccc992380bb4d00c3a01d087ef537ae2","block_index":310411,"block_time":310411000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(991,310410,'insert','blocks','{"block_hash":"26cae3289bb171773e9e876faa3e45f0ccc992380bb4d00c3a01d087ef537ae2","block_index":310411,"block_time":310411000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(992,310411,'parse','blocks','{"block_index":310411,"ledger_hash":"8d98498f89619a2e334e9ac69bf8ff37251af6431d9bb6d1ea8bbc404c5e560d","messages_hash":"6be534a6fddd54f6813f4f6247e6c47bb0eddda08e28edbafa132bf8115f390f","txlist_hash":"103563dcfc7b9f149b6efdad7cae17b090d4a8232fd4c37fac7bcf942d784b55"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(993,310412,'insert','blocks','{"block_hash":"ab84ad5a3df5cfdce9f90b8d251eb6f68b55e6976a980de6de5bcda148b0cd20","block_index":310412,"block_time":310412000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(993,310411,'insert','blocks','{"block_hash":"ab84ad5a3df5cfdce9f90b8d251eb6f68b55e6976a980de6de5bcda148b0cd20","block_index":310412,"block_time":310412000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(994,310412,'parse','blocks','{"block_index":310412,"ledger_hash":"a16a650c4b63ed783e7229980be1177da867c188a5039ed5c58b9717f6ccf634","messages_hash":"a3b69de49ae3569129f96bc994fd0566acfc5cf6ea0c346e7297aea967283636","txlist_hash":"4daa6f0799529346ba4ee87e2aed1450447921dfa92e785378fae39c234a7c8f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(995,310413,'insert','blocks','{"block_hash":"21c33c9fd432343b549f0036c3620754565c3ad99f19f91f4e42344f10ec79bf","block_index":310413,"block_time":310413000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(995,310412,'insert','blocks','{"block_hash":"21c33c9fd432343b549f0036c3620754565c3ad99f19f91f4e42344f10ec79bf","block_index":310413,"block_time":310413000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(996,310413,'parse','blocks','{"block_index":310413,"ledger_hash":"768577c1a7c2cf2cc19cd8dbe823f1bdb8a222daee4c7ac7b5ead6633040c283","messages_hash":"f8ffa3c414d806885764c093a7a8d362aa78d68751e710cfc89e2e318d59817b","txlist_hash":"7ae9815341dccd2d1bff8dbcfdbcce4e52b4aac8f2fdd421348ed9f44cd19e38"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(997,310414,'insert','blocks','{"block_hash":"8cff03c07fd2a899c3bcf6ac93e05840e00de3133da14a413e9807304db854b6","block_index":310414,"block_time":310414000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(997,310413,'insert','blocks','{"block_hash":"8cff03c07fd2a899c3bcf6ac93e05840e00de3133da14a413e9807304db854b6","block_index":310414,"block_time":310414000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(998,310414,'parse','blocks','{"block_index":310414,"ledger_hash":"906c491f164877c31002da41233c237d0d4a945a0072406a7b7d13df74be7eec","messages_hash":"94b9e9f9260a35300ea27a15a0a9493350c2a6db704bc0d4ee0e78a5818cebdd","txlist_hash":"807cd64b4d8ee3d91a5cbc651e42feeacd5248b6572310472743ca71a9f24621"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(999,310415,'insert','blocks','{"block_hash":"dd0facbd37cca09870f6054d95710d5d97528ed3d1faf2557914b61a1fc9c1cc","block_index":310415,"block_time":310415000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(999,310414,'insert','blocks','{"block_hash":"dd0facbd37cca09870f6054d95710d5d97528ed3d1faf2557914b61a1fc9c1cc","block_index":310415,"block_time":310415000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1000,310415,'parse','blocks','{"block_index":310415,"ledger_hash":"d27f99b4a67dfc910d3b932f97b7299779f245e95f871140d3c90f13cc6e506e","messages_hash":"8146c8dfac8c08e8d1a7fd45ace0cbc146f928616343c082603dea1dbe0375ee","txlist_hash":"67fe947c260b3d8748887e94f68c3725664bb6dbd72187e9312ee48a42770ec3"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1001,310416,'insert','blocks','{"block_hash":"7302158055327843ded75203f7cf9320c8719b9d1a044207d2a97f09791a5b6b","block_index":310416,"block_time":310416000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1001,310415,'insert','blocks','{"block_hash":"7302158055327843ded75203f7cf9320c8719b9d1a044207d2a97f09791a5b6b","block_index":310416,"block_time":310416000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1002,310416,'parse','blocks','{"block_index":310416,"ledger_hash":"90fcd04c508a9821e0ba0ed36cd7cfadd1d3c95116e3f52ad69f98d3d14de571","messages_hash":"dca1d2b95f7f534e3dea2e7a2019838753efb31c5ced981701f50940f3cf0d26","txlist_hash":"1041a17c5c146181a56da6ef17386814299be8a22c76a2b2f8a4a2768b2b531c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1003,310417,'insert','blocks','{"block_hash":"2fef6d72654cbd4ea08e0989c18c32f2fe22de70a4c2d863c1778086b0449002","block_index":310417,"block_time":310417000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1003,310416,'insert','blocks','{"block_hash":"2fef6d72654cbd4ea08e0989c18c32f2fe22de70a4c2d863c1778086b0449002","block_index":310417,"block_time":310417000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1004,310417,'parse','blocks','{"block_index":310417,"ledger_hash":"19cbb26c6d24df5b110a5aae9b53a911a61b2086dde926273a1b0f66c1049e6b","messages_hash":"827cc7c36c8f51da81c980c10003c324cfab26a15e2e7d5698ae323deff752c6","txlist_hash":"920154e272608daa3c501588cf0eee50c2c45a385d30f42711657ae4a6de3bf5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1005,310418,'insert','blocks','{"block_hash":"fc27f87607fd57cb02ce54d83cec184cf7d196738f52a8eb9c91b1ea7d071509","block_index":310418,"block_time":310418000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1005,310417,'insert','blocks','{"block_hash":"fc27f87607fd57cb02ce54d83cec184cf7d196738f52a8eb9c91b1ea7d071509","block_index":310418,"block_time":310418000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1006,310418,'parse','blocks','{"block_index":310418,"ledger_hash":"2dc971d2db4e92e2d5dcef124bf9cdad33c41a71d6ae3db80297cb2257911f0d","messages_hash":"85d72f558c2926cf357f739ea311de5aa840cbe82c35beee417a1520860d7a59","txlist_hash":"290826e9c72e49636370d0dad56ba1c2c9209d888b993e030838f84300c0225a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1007,310419,'insert','blocks','{"block_hash":"9df404f5ce813fe6eb0541203c108bc7a0a2bac341a69d607c6641c140e21c8e","block_index":310419,"block_time":310419000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1007,310418,'insert','blocks','{"block_hash":"9df404f5ce813fe6eb0541203c108bc7a0a2bac341a69d607c6641c140e21c8e","block_index":310419,"block_time":310419000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1008,310419,'parse','blocks','{"block_index":310419,"ledger_hash":"7ad2bf141622a0db4b27b1f4dab4857d1595e3f746a4113992850a680ebf1f37","messages_hash":"77ebc95e7c6af80280c5d7915ec2b599d700151c4160dbc5a8d5b2a109bbe05c","txlist_hash":"d06653b493d120dd288637d530cd3f6efa1c8f5c252bb275572c1948ff0f3539"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1009,310420,'insert','blocks','{"block_hash":"138b3f1773159c0dd265a2d32dd2141202d174c2e52a4aeac3588224a3558372","block_index":310420,"block_time":310420000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1009,310419,'insert','blocks','{"block_hash":"138b3f1773159c0dd265a2d32dd2141202d174c2e52a4aeac3588224a3558372","block_index":310420,"block_time":310420000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1010,310420,'parse','blocks','{"block_index":310420,"ledger_hash":"3602b26268d1bd3fc5f08f170e9767ff07c91f6976a1c342dc6b24f7ee98c509","messages_hash":"1107a47b26211af98233b1c5293451ae5bb9349c73368b513ecd337ad2a64d3e","txlist_hash":"ae8e61a57232c10bd15c655bb8c76007dcef394ba64d1619157ca58990e18c25"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1011,310421,'insert','blocks','{"block_hash":"71fe2b0e02c5cad8588636016483ddd97a4ef0737283b5fd4ab6ea5dc5c56b9a","block_index":310421,"block_time":310421000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1011,310420,'insert','blocks','{"block_hash":"71fe2b0e02c5cad8588636016483ddd97a4ef0737283b5fd4ab6ea5dc5c56b9a","block_index":310421,"block_time":310421000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1012,310421,'parse','blocks','{"block_index":310421,"ledger_hash":"1c1facfa3852b33c173a08d06450335a2b230541c60973a154e8dd864f3c3c8b","messages_hash":"1a47a0616e0d7d4153e694dc20509140325be90d30203a496bff146da7aadaef","txlist_hash":"01bfd609f878bb6149779f6377d7868d5b7fa3b831f68cd757967b982cd09ad4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1013,310422,'insert','blocks','{"block_hash":"cd40260541b9ed20abaac53b8f601d01cd972c34f28d91718854f1f3a4026158","block_index":310422,"block_time":310422000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1013,310421,'insert','blocks','{"block_hash":"cd40260541b9ed20abaac53b8f601d01cd972c34f28d91718854f1f3a4026158","block_index":310422,"block_time":310422000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1014,310422,'parse','blocks','{"block_index":310422,"ledger_hash":"e788123aefd1129554fa2c166dbd06ce68f913730183ca73cf248c1f5284eba4","messages_hash":"a6aca492da14b2a2a5911a1eb9fc2b94007ac2618d18c7141e0c917af583b09d","txlist_hash":"6577ad9a9e3889fb5eeac7fc9039af8d4537a8fc28b4a9de85e230f5d9da3583"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1015,310423,'insert','blocks','{"block_hash":"6ca0d6d246108b2df3de62a4dd454ff940e1945f194ba72566089f98ad72f4db","block_index":310423,"block_time":310423000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1015,310422,'insert','blocks','{"block_hash":"6ca0d6d246108b2df3de62a4dd454ff940e1945f194ba72566089f98ad72f4db","block_index":310423,"block_time":310423000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1016,310423,'parse','blocks','{"block_index":310423,"ledger_hash":"ad445e5351af8739b2f74cbba8b44201c20ab55ad1db064402614fb97f35c375","messages_hash":"d52d5b979c57d1fc9b43ab2133ffe65f383646105c22be971c618325a4e295a3","txlist_hash":"dd7b66518e8ec22359df2d8ad4c0349fe4ab3a74620aaf2ef4bdc93a4c7e2d92"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1017,310424,'insert','blocks','{"block_hash":"ed42fe6896e4ba9ded6ea352a1e7e02f3d786bfc9379780daba4e7aa049668ad","block_index":310424,"block_time":310424000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1017,310423,'insert','blocks','{"block_hash":"ed42fe6896e4ba9ded6ea352a1e7e02f3d786bfc9379780daba4e7aa049668ad","block_index":310424,"block_time":310424000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1018,310424,'parse','blocks','{"block_index":310424,"ledger_hash":"e89872ed802fe4421844882958fe6384cf21a85a6dcf10db761e2bb4a77ed24e","messages_hash":"0ba84d839fea22ea4634d16617df4437859805e6ef3fcecbf9319648152c959d","txlist_hash":"bb05836e569bc4c85141c5b4d2832efa5a83ad519260e96d92f6ee16fe4a0c80"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1019,310425,'insert','blocks','{"block_hash":"73f4be91e41a2ccd1c4d836a5cea28aea906ac9ede7773d9cd51dff5936f1ba7","block_index":310425,"block_time":310425000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1019,310424,'insert','blocks','{"block_hash":"73f4be91e41a2ccd1c4d836a5cea28aea906ac9ede7773d9cd51dff5936f1ba7","block_index":310425,"block_time":310425000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1020,310425,'parse','blocks','{"block_index":310425,"ledger_hash":"29e595e9ac7717013cfc8d12255496192234abbddd8a66762a5eaff0c49f3750","messages_hash":"7f501e4f4dad5fc70bb3c56d1378bf4b292259188c56b5d5e53a3c5206c9700a","txlist_hash":"2cedf78c9d13e32fde5792907f2ac9f409fe701740533b94ceab6b8087f790b1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1021,310426,'insert','blocks','{"block_hash":"9d28065325bb70b8e272f6bee3bc2cd5ea4ea4d36e293075096e204cb53dc415","block_index":310426,"block_time":310426000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1021,310425,'insert','blocks','{"block_hash":"9d28065325bb70b8e272f6bee3bc2cd5ea4ea4d36e293075096e204cb53dc415","block_index":310426,"block_time":310426000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1022,310426,'parse','blocks','{"block_index":310426,"ledger_hash":"9b9509ce7b7bf380f4d030604810a755c71fabe27152be990997a6a9db37ff15","messages_hash":"25fa3569e346dfc876bba62b9d23783c146a543cbdeec50fc6e18332122fb2b7","txlist_hash":"c037094c1947835fceefa8a25a81724d9c88191d5f5199d3a59339bd44407289"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1023,310427,'insert','blocks','{"block_hash":"d08e8bc7035bbf08ec91bf42839eccb3d7e489d68f85a0be426f95709a976a2a","block_index":310427,"block_time":310427000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1023,310426,'insert','blocks','{"block_hash":"d08e8bc7035bbf08ec91bf42839eccb3d7e489d68f85a0be426f95709a976a2a","block_index":310427,"block_time":310427000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1024,310427,'parse','blocks','{"block_index":310427,"ledger_hash":"f1b834e2a380f1b9a78c592acbe78ec809220c620e15f296ab8d7ecea6cd392e","messages_hash":"a139b9e0838217dba78ff8d8503ed732bc0a94ca9a5aa75ab8938c99edee297a","txlist_hash":"81d439d9d368279e97c8739243efb01c7027be218d831d93127364fa247aed95"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1025,310428,'insert','blocks','{"block_hash":"2eef4e1784ee12bcb13628f2c0dc7c008db6aaf55930d5de09513425f55658a2","block_index":310428,"block_time":310428000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1025,310427,'insert','blocks','{"block_hash":"2eef4e1784ee12bcb13628f2c0dc7c008db6aaf55930d5de09513425f55658a2","block_index":310428,"block_time":310428000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1026,310428,'parse','blocks','{"block_index":310428,"ledger_hash":"9e963a17fbc4a5c20d48094f1459959033520f92d7a8bc044b71bbffb8dd173d","messages_hash":"3162a5d50ea03633b8b2d947cc3c52a5df9593e245376bf80756f48e7c1fc2d7","txlist_hash":"002b7ac255f66476970512e50d7ca9cb5da695bea9763bf0379f8d8e6c77a71c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1027,310429,'insert','blocks','{"block_hash":"086bfbba799c6d66a39d90a810b8dd6753f2904a48e2c01590845adda214cf8d","block_index":310429,"block_time":310429000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1027,310428,'insert','blocks','{"block_hash":"086bfbba799c6d66a39d90a810b8dd6753f2904a48e2c01590845adda214cf8d","block_index":310429,"block_time":310429000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1028,310429,'parse','blocks','{"block_index":310429,"ledger_hash":"ac8cfd965b9c53f32731a3e0fcdb6df5746d646b02c88b5201a674125e37eed5","messages_hash":"fcea4b97a5fe73cf70e2d0263371e1e00e099bf1cf6ec7db042b3bea048a265c","txlist_hash":"4b68376b50d77145ada0ebc72c3eb43b54b4743b538dbc9fa2c914515882dbb7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1029,310430,'insert','blocks','{"block_hash":"870cf1829f84d1f29c231190205fe2e961738240fc16477c7de24da037763048","block_index":310430,"block_time":310430000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1029,310429,'insert','blocks','{"block_hash":"870cf1829f84d1f29c231190205fe2e961738240fc16477c7de24da037763048","block_index":310430,"block_time":310430000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1030,310430,'parse','blocks','{"block_index":310430,"ledger_hash":"33654e32dfd41ff3a5744b57fd2483a08a2b4729c18ca54c3ac5d95a1bf0ef21","messages_hash":"1b3b759f56da231657bf1c579b3186abe1a28fba2c262a9e872f7ee83aaa4e26","txlist_hash":"3323c2d01e777caaca3eeaf6f2af8299cee1622589cbaf08f4d245356642d2f2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1031,310431,'insert','blocks','{"block_hash":"20b72324e40ffc43a49569b560d6245c679e638b9d20404fc1e3386992d63648","block_index":310431,"block_time":310431000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1031,310430,'insert','blocks','{"block_hash":"20b72324e40ffc43a49569b560d6245c679e638b9d20404fc1e3386992d63648","block_index":310431,"block_time":310431000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1032,310431,'parse','blocks','{"block_index":310431,"ledger_hash":"ba8837c811ae87981cc37cb49438d958fa58dfc5a95824040f2fd088465406d1","messages_hash":"23d2c60e160ae68a16ab609dccdb9b78f1b7d3feeaee2c97c7dedceb13c02eee","txlist_hash":"67aadda0a565f4f5e2786b5007e56e2d10077e87e7d3acc216fe0803365b7b81"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1033,310432,'insert','blocks','{"block_hash":"c81811aca423aa2ccb3fd717b54a24a990611365c360667687dc723e9208ad93","block_index":310432,"block_time":310432000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1033,310431,'insert','blocks','{"block_hash":"c81811aca423aa2ccb3fd717b54a24a990611365c360667687dc723e9208ad93","block_index":310432,"block_time":310432000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1034,310432,'parse','blocks','{"block_index":310432,"ledger_hash":"7864019cb0cbbcd895154421183d6acb932b1d64441103b913d52469f656655f","messages_hash":"51e2478b9f02aba026af477be07173549dba6acf715620c3080db983d5818ae4","txlist_hash":"c12942ffa02a5f8eaddf3e8e55ad0ea03f29cebd9e822e00c504c162cddd0471"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1035,310433,'insert','blocks','{"block_hash":"997e4a145d638ad3dcdb2865f8b8fd95242cbc4a4359407791f421f129b1d725","block_index":310433,"block_time":310433000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1035,310432,'insert','blocks','{"block_hash":"997e4a145d638ad3dcdb2865f8b8fd95242cbc4a4359407791f421f129b1d725","block_index":310433,"block_time":310433000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1036,310433,'parse','blocks','{"block_index":310433,"ledger_hash":"a6da92ef0df7d092de09f2f8d2c99ff65ad74e2a0bd2ea25f8335614372f5279","messages_hash":"9d406a162538d5a0b083ddf1edbc2af4da4772e3dfafeb471757019b03f07860","txlist_hash":"f0eefd9f81db595b07fe719a41e67e54fdb987e177f05d37040237db3be2a8a5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1037,310434,'insert','blocks','{"block_hash":"61df9508e53a7fe477f063e0ff7e86fbb0aef80ff2ddedc556236a38f49ac4d8","block_index":310434,"block_time":310434000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1037,310433,'insert','blocks','{"block_hash":"61df9508e53a7fe477f063e0ff7e86fbb0aef80ff2ddedc556236a38f49ac4d8","block_index":310434,"block_time":310434000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1038,310434,'parse','blocks','{"block_index":310434,"ledger_hash":"e288db28ac6a42822f85fd042f65b57378bc6cc2f8616edfa88143d7b1c9ddcc","messages_hash":"216849b38a9a9bf850733296d6a14b539b2c2261354e26019a723dd7403ad006","txlist_hash":"173f8b7d2c581e9f088b3fb6e96ad2af597b172717d8f8732fd5857997f0f3d7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1039,310435,'insert','blocks','{"block_hash":"f24cf5e1296952a47556ac80a455a2c45da5c0dc2b388b51d235a3f741793d5f","block_index":310435,"block_time":310435000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1039,310434,'insert','blocks','{"block_hash":"f24cf5e1296952a47556ac80a455a2c45da5c0dc2b388b51d235a3f741793d5f","block_index":310435,"block_time":310435000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1040,310435,'parse','blocks','{"block_index":310435,"ledger_hash":"e87af314e8d7a5f2315ccc559d7c2255c008ba63aff017696201db69344d423f","messages_hash":"c974a643a40e5993fd5ecf85e7a627f6ed4c7d32da8d2bb27528e99f226d5efa","txlist_hash":"a4dd5a36f1aeee54e99bb23095b64707fc0b3fde5f64e33135429a100e4ea558"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1041,310436,'insert','blocks','{"block_hash":"a5e341ba92bdf9b3938691cd3aab87731eba5428bb61a804cecf9178c8da0c19","block_index":310436,"block_time":310436000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1041,310435,'insert','blocks','{"block_hash":"a5e341ba92bdf9b3938691cd3aab87731eba5428bb61a804cecf9178c8da0c19","block_index":310436,"block_time":310436000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1042,310436,'parse','blocks','{"block_index":310436,"ledger_hash":"82327b93bd3ffcdf797bc2f6470b9c8c5101e54b924ec5f141a31356aa8865c7","messages_hash":"6c8edec3773ad66f3ef89d20d5190b2c19318ef48bf3752e7f482a7671b006c3","txlist_hash":"c6b0f05a847c30dd3f2d3f8cb7c26a84f1d005b4720a553f9dd8b717185d7f05"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1043,310437,'insert','blocks','{"block_hash":"9e18d0ffff2cb464c664cefc76e32d35752c9e639045542a73746f5ec2f3b002","block_index":310437,"block_time":310437000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1043,310436,'insert','blocks','{"block_hash":"9e18d0ffff2cb464c664cefc76e32d35752c9e639045542a73746f5ec2f3b002","block_index":310437,"block_time":310437000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1044,310437,'parse','blocks','{"block_index":310437,"ledger_hash":"70d86f9ef8df495474de06b94e1857693c73d9ca3528356b82553a52fdce0dda","messages_hash":"64193ef0680fb09096cf55f02405bf8e2a133b12bd8e1453330143d72700f164","txlist_hash":"809d60564fefff56688616b7fb96378d4eb425e5c8de36b34f0c9070935dac26"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1045,310438,'insert','blocks','{"block_hash":"36be4b3470275ff5e23ed4be8f380d6e034eb827ebe9143218d6e4689ea5a9fc","block_index":310438,"block_time":310438000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1045,310437,'insert','blocks','{"block_hash":"36be4b3470275ff5e23ed4be8f380d6e034eb827ebe9143218d6e4689ea5a9fc","block_index":310438,"block_time":310438000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1046,310438,'parse','blocks','{"block_index":310438,"ledger_hash":"44b90478e32373205462f0fb212da636b31db6dfb99a2b56923beb97a3a64722","messages_hash":"65151ecc33ae384e013535fc1f6cda04494809cdedb5a2cdb891f0f38035bd3f","txlist_hash":"2cf7695a3cea08358af8bd9378b1d6ad6c7223cbac01589042ace6c3cb312196"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1047,310439,'insert','blocks','{"block_hash":"4f2449fce22be0edb4d2aefac6f35ce5a47b871623d07c2a8c166363112b2877","block_index":310439,"block_time":310439000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1047,310438,'insert','blocks','{"block_hash":"4f2449fce22be0edb4d2aefac6f35ce5a47b871623d07c2a8c166363112b2877","block_index":310439,"block_time":310439000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1048,310439,'parse','blocks','{"block_index":310439,"ledger_hash":"66b791b9deb7d2fc8b075f41d712e300ffa9c46ca9d6f4e7cec6429ca6a65163","messages_hash":"01d3ab7b218d6bfef3c5b6b6db851297e951cebfdf60b8d4835a44a665e163ca","txlist_hash":"41f11f77910c12535fa183e819b36a0dda32eaafe0ae8016e2ce7c23d5c1d67d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1049,310440,'insert','blocks','{"block_hash":"89d6bd4cdac1cae08c704490406c41fbc5e1efa6c2d7f161e9175149175ef12a","block_index":310440,"block_time":310440000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1049,310439,'insert','blocks','{"block_hash":"89d6bd4cdac1cae08c704490406c41fbc5e1efa6c2d7f161e9175149175ef12a","block_index":310440,"block_time":310440000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1050,310440,'parse','blocks','{"block_index":310440,"ledger_hash":"5baa10e1659182ba4511f87f08deda38d5de3501c63efd376604cc199140d27c","messages_hash":"d8b0a242ba1e6003bbdaf0bf2369b95d39c736ab52e66be2a9113941655e698a","txlist_hash":"c6762d7334806b6b62c3cee84f65346d1121493d3bc3f890af174c4abe4710ae"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1051,310441,'insert','blocks','{"block_hash":"2df1dc53d6481a1ce3a6fee51ad4adcce95f702606fee7c43feda4965cf9ee15","block_index":310441,"block_time":310441000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1051,310440,'insert','blocks','{"block_hash":"2df1dc53d6481a1ce3a6fee51ad4adcce95f702606fee7c43feda4965cf9ee15","block_index":310441,"block_time":310441000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1052,310441,'parse','blocks','{"block_index":310441,"ledger_hash":"2d490229fead1b15a8350da7bcc83c483dae06e4a2f574c6e8fde248acd449d6","messages_hash":"18ff66422cca18b8b49392bae2d93ece152f47035c44ef71dda8cbd5a2cd7f96","txlist_hash":"f9fcb16a928c44b86ab2af7407a2ca269455b144694a80927b9213bf8e7ac710"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1053,310442,'insert','blocks','{"block_hash":"50844c48722edb7681c5d0095c524113415106691e71db34acc44dbc6462bfec","block_index":310442,"block_time":310442000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1053,310441,'insert','blocks','{"block_hash":"50844c48722edb7681c5d0095c524113415106691e71db34acc44dbc6462bfec","block_index":310442,"block_time":310442000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1054,310442,'parse','blocks','{"block_index":310442,"ledger_hash":"a3728bacfbdd289b7af24248b9bdacd5643bd5412bb993f5380278631eabb9e9","messages_hash":"d7bba011aeaf59c39a79cc90a4d40f11c86d3a44c12b722cdab3f2d32b96b430","txlist_hash":"5d2600af95413d101a9e3d98b2d9f5ea02cf1cf6a28bf7e96870e167638a7be9"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1055,310443,'insert','blocks','{"block_hash":"edc940455632270b7deda409a3489b19b147be89c4d8f434c284e326b749c79a","block_index":310443,"block_time":310443000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1055,310442,'insert','blocks','{"block_hash":"edc940455632270b7deda409a3489b19b147be89c4d8f434c284e326b749c79a","block_index":310443,"block_time":310443000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1056,310443,'parse','blocks','{"block_index":310443,"ledger_hash":"d829da764f6397b22a6b97ef396b363ef2cf071990df2dc9c0d03806db6a46b5","messages_hash":"fc88f701c65c71e2d90d31fbdc10378ea284a88543543af540b49d970da6e1b3","txlist_hash":"4c595c9a60ccc98d2f6cd75c92c28333174c618337457f9c5ccf362252732081"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1057,310444,'insert','blocks','{"block_hash":"68c9efab28e78e0ef8d316239612f918408ce66be09e8c03428049a6ee3d32e4","block_index":310444,"block_time":310444000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1057,310443,'insert','blocks','{"block_hash":"68c9efab28e78e0ef8d316239612f918408ce66be09e8c03428049a6ee3d32e4","block_index":310444,"block_time":310444000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1058,310444,'parse','blocks','{"block_index":310444,"ledger_hash":"ef53249bf0f13e1f2073b815c8d8da3ab744b6d277b29ddbc0bd68bd006af34b","messages_hash":"0e2148899b497e6e1edd0f0401e2b364cd863d67a16b2d2ba01575249fa44e61","txlist_hash":"5ec6d64106ac1c65cd1dd2129c786aca3cf426c7a1b5f6a966b6684b37755293"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1059,310445,'insert','blocks','{"block_hash":"22a2e3896f1c56aefb2d27032a234ea38d93edf2b6331e72e7b4e3952f0234ef","block_index":310445,"block_time":310445000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1059,310444,'insert','blocks','{"block_hash":"22a2e3896f1c56aefb2d27032a234ea38d93edf2b6331e72e7b4e3952f0234ef","block_index":310445,"block_time":310445000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1060,310445,'parse','blocks','{"block_index":310445,"ledger_hash":"7e731cda90932b2b4844abdbc3ff60683173104e6c72ed81c65d9a17fd4872dc","messages_hash":"a4956f7cb1d7911fe8b00ccee3a92b01db13f0bd2b28ebc66db307c0307c8632","txlist_hash":"6da5abcb8ff2a77c33c7c43061754d9fe8e587157a98e194157faf534d2ee9c6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1061,310446,'insert','blocks','{"block_hash":"e8b0856eff3efce5f5114d6378a4e5c9e69e972825bc55cc00c26954cd1c8837","block_index":310446,"block_time":310446000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1061,310445,'insert','blocks','{"block_hash":"e8b0856eff3efce5f5114d6378a4e5c9e69e972825bc55cc00c26954cd1c8837","block_index":310446,"block_time":310446000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1062,310446,'parse','blocks','{"block_index":310446,"ledger_hash":"db55bac8025e95a567ba984f36dcb09357aa3e9b8706bb594e669b628d4e7204","messages_hash":"cb0858f2c2d1df41d5fce1f8f312d4f31646e876d82754898046d94166f86988","txlist_hash":"e8efb64e8f5f867f1c0db99afa9f9a3e3a06d0e1d55e16e9639ca36c3bda5cd4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1063,310447,'insert','blocks','{"block_hash":"3f4bc894c0bc04ee24ed1e34849af9f719f55df50c8bc36dc059ec5fa0e1c8a8","block_index":310447,"block_time":310447000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1063,310446,'insert','blocks','{"block_hash":"3f4bc894c0bc04ee24ed1e34849af9f719f55df50c8bc36dc059ec5fa0e1c8a8","block_index":310447,"block_time":310447000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1064,310447,'parse','blocks','{"block_index":310447,"ledger_hash":"5cc4fa447cc291ffcce7be3c4f8fc70041bf8af5c2dd591136d4a449095d2570","messages_hash":"8e43ba092a6ba21408ff40f8248c07d7eb27a7deac290ea2d4161bf16d1e21c4","txlist_hash":"026eb6a7315302879ca62afb071da788deb5759eb3de89cf68fec00ec638d9f0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1065,310448,'insert','blocks','{"block_hash":"6a6c7c07ba5b579abd81a7e888bd36fc0e02a2bcfb69dbfa061b1b64bfa1bd10","block_index":310448,"block_time":310448000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1065,310447,'insert','blocks','{"block_hash":"6a6c7c07ba5b579abd81a7e888bd36fc0e02a2bcfb69dbfa061b1b64bfa1bd10","block_index":310448,"block_time":310448000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1066,310448,'parse','blocks','{"block_index":310448,"ledger_hash":"ce49854f4493c163bc891888f920fbc6dd8855c30870beb757df69b33de52633","messages_hash":"0423502422f1719bb57b16c22d7155922a4e57dd46c10c67443ce901fabace72","txlist_hash":"e47cc99299a82c9be619633effff5b9cace113215d7f71aa7d2327e69d3ca3bb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1067,310449,'insert','blocks','{"block_hash":"9e256a436ff8dae9ff77ed4cac4c3bfbbf026681548265a1b62c771d9d8e0779","block_index":310449,"block_time":310449000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1067,310448,'insert','blocks','{"block_hash":"9e256a436ff8dae9ff77ed4cac4c3bfbbf026681548265a1b62c771d9d8e0779","block_index":310449,"block_time":310449000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1068,310449,'parse','blocks','{"block_index":310449,"ledger_hash":"84557595cf2067a95924119b8ed5fea114acd9ca1b0df4dbe4ae5181a739b5d1","messages_hash":"f4202e68bbe225aaf543a2595773a928240b7033f7f920803d1a2281c5e927d8","txlist_hash":"4e3048f5eeba69570f9ffd86a3573e85bdfb46a92acf60d55c04d41f49f7f870"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1069,310450,'insert','blocks','{"block_hash":"2d9b2ccc3ad3a32910295d7f7f0d0e671b074494adc373fc49aa874d575e36a3","block_index":310450,"block_time":310450000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1069,310449,'insert','blocks','{"block_hash":"2d9b2ccc3ad3a32910295d7f7f0d0e671b074494adc373fc49aa874d575e36a3","block_index":310450,"block_time":310450000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1070,310450,'parse','blocks','{"block_index":310450,"ledger_hash":"0e3b252b73fb652f904780da9fc59d1081d712337a9b15cf1a56ea72fbe96c73","messages_hash":"fd5af776d6a38d7d8789a15aa9d76e6d304a94a4d5ffdd2943345da446b6ea80","txlist_hash":"c98b9428cf94077169705f3961816f87293eb89bc840167b1ed8ffb074aef48e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1071,310451,'insert','blocks','{"block_hash":"55731a82b9b28b1aa82445a9e351c9df3a58420f1c2f6b1c9db1874483277296","block_index":310451,"block_time":310451000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1071,310450,'insert','blocks','{"block_hash":"55731a82b9b28b1aa82445a9e351c9df3a58420f1c2f6b1c9db1874483277296","block_index":310451,"block_time":310451000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1072,310451,'parse','blocks','{"block_index":310451,"ledger_hash":"790eccd04e24e5f10f843d63bbdc1538cf1aabb0e8e6c862104be0ef845f603f","messages_hash":"7d18be6c377428f660ba384eec7a473fa7e44627922722cd5b3721c81452432d","txlist_hash":"3fda9e8b7ebc417311c9f14e61c9dca2e490702c1c796eeb1df156f174d52cb5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1073,310452,'insert','blocks','{"block_hash":"016abbaa1163348d8b6bc497cc487880d469f9300374a72ecb793a03d64572aa","block_index":310452,"block_time":310452000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1073,310451,'insert','blocks','{"block_hash":"016abbaa1163348d8b6bc497cc487880d469f9300374a72ecb793a03d64572aa","block_index":310452,"block_time":310452000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1074,310452,'parse','blocks','{"block_index":310452,"ledger_hash":"30962129b060b63050fe8f249592587d74cdabc4ebb5680230a280da880c8586","messages_hash":"c5922e3df1d54ca1fceb420ba9ed3538aa432da592b8d11ed98dd577bbfd7973","txlist_hash":"a1bf92fe5ae4df49a6059263dfd3a9ed105ec24ae02cb9127c0408f7330d962c"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1075,310453,'insert','blocks','{"block_hash":"610be2f49623d3fe8c86eacf3620347ed1dc53194bf01e77393b83541ba5d776","block_index":310453,"block_time":310453000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1075,310452,'insert','blocks','{"block_hash":"610be2f49623d3fe8c86eacf3620347ed1dc53194bf01e77393b83541ba5d776","block_index":310453,"block_time":310453000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1076,310453,'parse','blocks','{"block_index":310453,"ledger_hash":"56f4aa1086d8985a00cc295cf9618d976e69ba426b0c3d103bea6b47b58e4355","messages_hash":"8e306a9c943a812c6f52865d39d2964eb365fae7b17b0329b4c251f8dacaaea1","txlist_hash":"a81de51b7b56cc68f599e592be22e11c2f0b51ca27c027f13b58f05b2229a8e1"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1077,310454,'insert','blocks','{"block_hash":"baea6ad71f16d05b37bb30ca881c73bc48fd931f4bf3ac908a28d7681e976ee9","block_index":310454,"block_time":310454000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1077,310453,'insert','blocks','{"block_hash":"baea6ad71f16d05b37bb30ca881c73bc48fd931f4bf3ac908a28d7681e976ee9","block_index":310454,"block_time":310454000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1078,310454,'parse','blocks','{"block_index":310454,"ledger_hash":"38d14a206003b812cbaf5f200235dbe12aa6a674e5f3379cb186a781cb5a5654","messages_hash":"f28d86ee84fa30a79a74e3205d45c40c3525c6ea58f9201dc6b5c79fdb526dd3","txlist_hash":"022e8475ba7e68c75b4a00387ae431b7bdaa4d125dcd1b19d08e9c431d3e6057"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1079,310455,'insert','blocks','{"block_hash":"31a375541362b0037245816d50628b0428a28255ff6eddd3dd92ef0262a0a744","block_index":310455,"block_time":310455000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1079,310454,'insert','blocks','{"block_hash":"31a375541362b0037245816d50628b0428a28255ff6eddd3dd92ef0262a0a744","block_index":310455,"block_time":310455000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1080,310455,'parse','blocks','{"block_index":310455,"ledger_hash":"b2ff303a67c05bc12fcdfdb774ea4ddc690434c3371428b3416d38105f265f28","messages_hash":"70550cc53729dedacfd7599305a6ba24dbd67d5349e610da1b3aeedbbdb670e2","txlist_hash":"91a1dc2fe8dd56e137b210136966950c79b4badcdf787b4b9fafa7985847192a"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1081,310456,'insert','blocks','{"block_hash":"5fee45c5019669a46a049142c0c4b6cf382e06127211e822f5f6f7320b6b50fa","block_index":310456,"block_time":310456000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1081,310455,'insert','blocks','{"block_hash":"5fee45c5019669a46a049142c0c4b6cf382e06127211e822f5f6f7320b6b50fa","block_index":310456,"block_time":310456000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1082,310456,'parse','blocks','{"block_index":310456,"ledger_hash":"6cc16b442fd7758ed7bae9f50367fa60debdb5d81bffc5abccda044573aeaf15","messages_hash":"48b0c3451909c475fc3273ac84abf136b6b81e2cd6e7022018711a1a8a46abf7","txlist_hash":"5125d7f8718a5a26aed1e1db2ce80e8d2eb4d96bbc91277bace52f571b7f8c26"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1083,310457,'insert','blocks','{"block_hash":"9ce5a2673739be824552754ce60fd5098cf954729bb18be1078395f0c437cce9","block_index":310457,"block_time":310457000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1083,310456,'insert','blocks','{"block_hash":"9ce5a2673739be824552754ce60fd5098cf954729bb18be1078395f0c437cce9","block_index":310457,"block_time":310457000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1084,310457,'parse','blocks','{"block_index":310457,"ledger_hash":"8fa0401d245b1b1e8b40760a54f331564d8597e242462ec412878e36a9b06800","messages_hash":"9cb1f06768f23821c73219929b52fb339a5aac8a1f60e905bbe974759b296606","txlist_hash":"061dc1962f44d4da9de8ad6bff4d96650058f5d444951e9c808b901db8717c81"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1085,310458,'insert','blocks','{"block_hash":"deca40ba154ebc8c6268668b69a447e35ad292db4504d196e8a91abdc5312aac","block_index":310458,"block_time":310458000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1085,310457,'insert','blocks','{"block_hash":"deca40ba154ebc8c6268668b69a447e35ad292db4504d196e8a91abdc5312aac","block_index":310458,"block_time":310458000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1086,310458,'parse','blocks','{"block_index":310458,"ledger_hash":"520f92700e31b8a35260a280ae11bf8668b0e09d34795a9d88678f2977e19f7c","messages_hash":"da021b6ace7610144fdb7bbee83fdf5f617508c18b3b28d111e9abb6719d510d","txlist_hash":"b0208287d25e4ca6a1856236b4d4c7a3608533f0a47a9c673806d5d3baeb2297"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1087,310459,'insert','blocks','{"block_hash":"839c15fa5eea10c91851e160a73a6a8ee273a31ab5385fe5bd71920cbc08b565","block_index":310459,"block_time":310459000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1087,310458,'insert','blocks','{"block_hash":"839c15fa5eea10c91851e160a73a6a8ee273a31ab5385fe5bd71920cbc08b565","block_index":310459,"block_time":310459000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1088,310459,'parse','blocks','{"block_index":310459,"ledger_hash":"d7f728b78228a914b8767a6caeaf2267e9dbd50490a27f6c23bd96060eab8ee0","messages_hash":"464f88651f885a9c3604bd83352de75252aa4a53b40a94e55cf04cba3860b315","txlist_hash":"21a24d787b30434a230cae77e281636855ff40a8fb4aaaad35eb034835f63e97"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1089,310460,'insert','blocks','{"block_hash":"9b5f351a5c85aaaa737b6a55f20ebf04cafdf36013cdee73c4aaac376ad4562b","block_index":310460,"block_time":310460000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1089,310459,'insert','blocks','{"block_hash":"9b5f351a5c85aaaa737b6a55f20ebf04cafdf36013cdee73c4aaac376ad4562b","block_index":310460,"block_time":310460000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1090,310460,'parse','blocks','{"block_index":310460,"ledger_hash":"33c2b4c6d22888448a2458ff2ce6a1cfae5e858acae2a57e4cc0232980f8fa4a","messages_hash":"626b13a5e856517c5e8246032184d39a3b70a8d63b9abd7a56d824ec3573e3cb","txlist_hash":"2ae25ed250bd603684d0affe8b14af5a1b8d1554beaed08aa8f723cc3c66cf8d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1091,310461,'insert','blocks','{"block_hash":"8131c823f11c22066362517f8c80d93bfc4c3b0a12890bdd51a0e5a043d26b7b","block_index":310461,"block_time":310461000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1091,310460,'insert','blocks','{"block_hash":"8131c823f11c22066362517f8c80d93bfc4c3b0a12890bdd51a0e5a043d26b7b","block_index":310461,"block_time":310461000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1092,310461,'parse','blocks','{"block_index":310461,"ledger_hash":"22426912d3317922912326da552af284677c9b76b6416b6c056668f27ae4f19f","messages_hash":"34e034a1eace1f9cc331b124f20bf9b02b06e9920c860d5258bc846afa59be6d","txlist_hash":"13b7774cf2a5a0f3d65031cd5f9ee498eaeee5c1e0e8ecbd346e0427d847a5c0"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1093,310462,'insert','blocks','{"block_hash":"16f8fad8c21560b9d7f88c3b22293192c24f5264c964d2de303a0c742c27d146","block_index":310462,"block_time":310462000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1093,310461,'insert','blocks','{"block_hash":"16f8fad8c21560b9d7f88c3b22293192c24f5264c964d2de303a0c742c27d146","block_index":310462,"block_time":310462000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1094,310462,'parse','blocks','{"block_index":310462,"ledger_hash":"74225b62e696aaeafbd4d6db40b41081c7493d9cc44984729d8619ff9450ce32","messages_hash":"c842b12fd725cba9dda8fba23d55154a026780bc6af2b0a8193126e35560c1b3","txlist_hash":"4f23d4da0bbe4b8bb7e00b6b746b4180356013c63f7a6f9b3eee479380b04e4f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1095,310463,'insert','blocks','{"block_hash":"bf919937d8d1b5d5f421b9f59e5893ecb9e77861c6ab6ffe6d2722f52483bd94","block_index":310463,"block_time":310463000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1095,310462,'insert','blocks','{"block_hash":"bf919937d8d1b5d5f421b9f59e5893ecb9e77861c6ab6ffe6d2722f52483bd94","block_index":310463,"block_time":310463000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1096,310463,'parse','blocks','{"block_index":310463,"ledger_hash":"b970979bfe0d44ae2f21f7d98bdcc4ae37287b93cad9fa51f32a62337ceba0c1","messages_hash":"f79b69008dcbe3c3362ee21d19da76108039cb558761d4dcf9e1cdb946bcee10","txlist_hash":"7b9a9095733a9d870b33aef4bb15767c32b012c27b52de8731358178b87bfb50"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1097,310464,'insert','blocks','{"block_hash":"91f08dec994751a6057753945249e9c11964b98b654704e585d9239462bc6f60","block_index":310464,"block_time":310464000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1097,310463,'insert','blocks','{"block_hash":"91f08dec994751a6057753945249e9c11964b98b654704e585d9239462bc6f60","block_index":310464,"block_time":310464000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1098,310464,'parse','blocks','{"block_index":310464,"ledger_hash":"00007a158b003fcca20c9fcaa8d73a556f0206bc9a7ab3e5c566ea1bda8648cb","messages_hash":"ad018c29e0f488918c6a134fe27ae637509d72341a28725cf82d74bae0b2fe75","txlist_hash":"28d7eceb69efcc6736dd64c65ed218dae2e8d0e9d4d7284b0572a5d1065a9d52"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1099,310465,'insert','blocks','{"block_hash":"5686aaff2718a688b9a69411e237912869699f756c3eb7bf7c3cf2b9e3756b3d","block_index":310465,"block_time":310465000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1099,310464,'insert','blocks','{"block_hash":"5686aaff2718a688b9a69411e237912869699f756c3eb7bf7c3cf2b9e3756b3d","block_index":310465,"block_time":310465000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1100,310465,'parse','blocks','{"block_index":310465,"ledger_hash":"09c407870b056db90148a9e4cb8ada003898ff28c584bec6a5be90514758a851","messages_hash":"1de15ad33c8b345fe1ad52110c252cdbda801e4fa7fb749dfba0dac2dd773497","txlist_hash":"7a4f4ed76efc69ddb5fc13abe258656d6a5e4a845203b5f3f9133716093d7f6d"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1101,310466,'insert','blocks','{"block_hash":"8a68637850c014116da671bb544fb5deddda7682223055a58bdcf7b2e79501fc","block_index":310466,"block_time":310466000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1101,310465,'insert','blocks','{"block_hash":"8a68637850c014116da671bb544fb5deddda7682223055a58bdcf7b2e79501fc","block_index":310466,"block_time":310466000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1102,310466,'parse','blocks','{"block_index":310466,"ledger_hash":"23bcfdbb44d8fc2ae6a86ea073ab080158014f04516b256a70d846399e7383cd","messages_hash":"39f1eb92ac050aa56760fcdcc747dccdcadc1bc359632b6dd57cecb59d485378","txlist_hash":"57124a566cf1e863b27fa19e3c982fe4a5115119ffb745624697380ad8d5f900"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1103,310467,'insert','blocks','{"block_hash":"d455a803e714bb6bd9e582edc34e624e7e3d80ee6c7b42f7207d763fff5c2bd3","block_index":310467,"block_time":310467000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1103,310466,'insert','blocks','{"block_hash":"d455a803e714bb6bd9e582edc34e624e7e3d80ee6c7b42f7207d763fff5c2bd3","block_index":310467,"block_time":310467000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1104,310467,'parse','blocks','{"block_index":310467,"ledger_hash":"a43abeddb61ad99d57f208cb0c6cc3e0b05a200009e6d90641a2bc7aac707adf","messages_hash":"a2889082db39a64176b16ba1a33377440b0f45dfb7d30b36265477d98bd5a95b","txlist_hash":"fb3b1ef99d2f323e1bdd6998b78b6044c8c7328fafad6b9fea1de7bd0244a265"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1105,310468,'insert','blocks','{"block_hash":"d84dfd2fcf6d8005aeeac01e03b287af788c81955612375510e37a4ab5766891","block_index":310468,"block_time":310468000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1105,310467,'insert','blocks','{"block_hash":"d84dfd2fcf6d8005aeeac01e03b287af788c81955612375510e37a4ab5766891","block_index":310468,"block_time":310468000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1106,310468,'parse','blocks','{"block_index":310468,"ledger_hash":"fc909facd6ba38fa0908fd49a6e2f25bd8284de5265ef761497b8a2d595344b3","messages_hash":"91296f5df4dff2e619fbe8e9d6d94a1e3b196062fc936ed6f07f72b95d912b3e","txlist_hash":"5c84a33365a6954fe639a1c2b1df030b8728d5d331df5ea1ef4a60f976cfa5d2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1107,310469,'insert','blocks','{"block_hash":"2fbbf2724f537d539b675acb6a479e530c7aac5f93b4045f4356ea4b0f8a8755","block_index":310469,"block_time":310469000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1107,310468,'insert','blocks','{"block_hash":"2fbbf2724f537d539b675acb6a479e530c7aac5f93b4045f4356ea4b0f8a8755","block_index":310469,"block_time":310469000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1108,310469,'parse','blocks','{"block_index":310469,"ledger_hash":"09f0d1c9bde8cdd63544fbb5eab46c2954654d32f3736f9975cf860588aa65cf","messages_hash":"8d17e3a799c3ca2be1da35c1c75644f696843093177564b37431e1e40030c925","txlist_hash":"38083f12891b03e2f089b02f7cb6b7fc7b6cb7091613e1d299051717eef6748b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1109,310470,'insert','blocks','{"block_hash":"ebb7c8e3fbe0b123a456d753b85b8c123ca3b315da14a00379ebd34784b28921","block_index":310470,"block_time":310470000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1109,310469,'insert','blocks','{"block_hash":"ebb7c8e3fbe0b123a456d753b85b8c123ca3b315da14a00379ebd34784b28921","block_index":310470,"block_time":310470000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1110,310470,'parse','blocks','{"block_index":310470,"ledger_hash":"41832b12459e778621b8f576e597b9f639390338605b30e5be28423b016b199a","messages_hash":"758117c9999addb364c604cc287e6dc9e51cbe5e326f2690d70ce87a81407597","txlist_hash":"bc0a8227d8698655c56004a73150eb92144469fd22d4ce8bf0f48c27084e99ae"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1111,310471,'insert','blocks','{"block_hash":"fc6f8162c55ecffeaabb09f70f071fd0cb7a9ef1bccaafaf27fe9a936defb739","block_index":310471,"block_time":310471000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1111,310470,'insert','blocks','{"block_hash":"fc6f8162c55ecffeaabb09f70f071fd0cb7a9ef1bccaafaf27fe9a936defb739","block_index":310471,"block_time":310471000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1112,310471,'parse','blocks','{"block_index":310471,"ledger_hash":"bf701017153742cb597353349c90ec66f790f222dd98d617d98a0117f1de3274","messages_hash":"b6b19c84723ff33624fbd5154bbf60083c48b83caeea4ceb6667ecce4bd710bb","txlist_hash":"d912707e01e39b078d3cee49df85af32019d7367d199543259bc98864c3ddae5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1113,310472,'insert','blocks','{"block_hash":"57ee5dec5e95b3d9c65a21c407294a32ed538658a6910b16124f18020f16bdf7","block_index":310472,"block_time":310472000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1113,310471,'insert','blocks','{"block_hash":"57ee5dec5e95b3d9c65a21c407294a32ed538658a6910b16124f18020f16bdf7","block_index":310472,"block_time":310472000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1114,310472,'parse','blocks','{"block_index":310472,"ledger_hash":"2a162bbd5a20f89a39156995658fd0c4715881bc130922d0edf95b60ece60b9c","messages_hash":"2f940bbc941844d4dd73837ff7f6c96ce80efcf385e2d44a1ce5f68d545da057","txlist_hash":"c9f21a9ff022fd95423d3eb56017f4f6f8ad56a9fde974c5d08b37f01a0d0f13"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1115,310473,'insert','blocks','{"block_hash":"33994c8f6d06134f886b47e14cb4b5af8fc0fd66e6bd60b3a71986622483e095","block_index":310473,"block_time":310473000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1115,310472,'insert','blocks','{"block_hash":"33994c8f6d06134f886b47e14cb4b5af8fc0fd66e6bd60b3a71986622483e095","block_index":310473,"block_time":310473000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1116,310473,'parse','blocks','{"block_index":310473,"ledger_hash":"1ce10996ec9e37d8ddc204f038542c6781da88d2d45bae1952a88ab993b81e88","messages_hash":"6559100889b99c05398948cc0d47d0cde899cd6ac3006ac5fc344a0847a87940","txlist_hash":"ad410d51bae82f8322d110d7b2270a1ff74c0ca64dfc31c5d293cfee7dbbb459"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1117,310474,'insert','blocks','{"block_hash":"312ee99e9526e9c240d76e3c3d1fe4c0a21f58156a15f2789605b3e7f7794a09","block_index":310474,"block_time":310474000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1117,310473,'insert','blocks','{"block_hash":"312ee99e9526e9c240d76e3c3d1fe4c0a21f58156a15f2789605b3e7f7794a09","block_index":310474,"block_time":310474000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1118,310474,'parse','blocks','{"block_index":310474,"ledger_hash":"5ae424c24ca30aad5aca8298a13ae9371f55b15bc789c7731d833c6e7c7cb04e","messages_hash":"9666d2dbbeea540ac615ae637bb58d5e2199bf937a396750d2a877fb8f55c75d","txlist_hash":"b091eceeb4b263d9fa55bd5595cd298ff8b335e03007d62339033cd884137d48"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1119,310475,'insert','blocks','{"block_hash":"bb9289bcd79075962117aef1161b333dbc403efebd593d93fc315146a2f040eb","block_index":310475,"block_time":310475000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1119,310474,'insert','blocks','{"block_hash":"bb9289bcd79075962117aef1161b333dbc403efebd593d93fc315146a2f040eb","block_index":310475,"block_time":310475000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1120,310475,'parse','blocks','{"block_index":310475,"ledger_hash":"b9b257efe76a36c340629ceb265822dd10449a08eadc69667a8ea05af5c052f8","messages_hash":"a4d05b2dd9af6d5ba804421e6043f4ccf727eec75ee10a002baafaed45bc772d","txlist_hash":"345c94c7b237efaf2b4e92802125b7d783e456e36ab6868d1f4126698361ba89"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1121,310476,'insert','blocks','{"block_hash":"3712e1ebd195749e0dc92f32f7f451dd76f499bf16d709462309ce358a9370d0","block_index":310476,"block_time":310476000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1121,310475,'insert','blocks','{"block_hash":"3712e1ebd195749e0dc92f32f7f451dd76f499bf16d709462309ce358a9370d0","block_index":310476,"block_time":310476000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1122,310476,'parse','blocks','{"block_index":310476,"ledger_hash":"070c06b36f3a77c04fb4bcc3ab1045e95f198f3f970846e59c35db0d03cdaf2c","messages_hash":"1e684aaf8da9104bf057a078360bf99b878290991bb14c8747d8be386a536095","txlist_hash":"014e01dabe6dd8db8e0477f9b12d4f4e3589e41223ec8c9ca5035b942524ca41"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1123,310477,'insert','blocks','{"block_hash":"7381973c554ac2bbdc849e8ea8c4a0ecbb46e7967d322446d0d83c3f9deab918","block_index":310477,"block_time":310477000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1123,310476,'insert','blocks','{"block_hash":"7381973c554ac2bbdc849e8ea8c4a0ecbb46e7967d322446d0d83c3f9deab918","block_index":310477,"block_time":310477000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1124,310477,'parse','blocks','{"block_index":310477,"ledger_hash":"4954596dd44d112fd0407c215be3c9534a348d6f708ae4a1e66527d1ac2830b1","messages_hash":"8cb254cdf81022602324076922901e7d7c4675bebc066252bd20a7e83c23b76c","txlist_hash":"1351438c8ea21d9619f81e51cfd188dbefd6a4816fe3c30b68210ac160890e9b"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1125,310478,'insert','blocks','{"block_hash":"c09ee871af7f2a611d43e6130aed171e301c23c5d1a29d183d40bf15898b4fa0","block_index":310478,"block_time":310478000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1125,310477,'insert','blocks','{"block_hash":"c09ee871af7f2a611d43e6130aed171e301c23c5d1a29d183d40bf15898b4fa0","block_index":310478,"block_time":310478000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1126,310478,'parse','blocks','{"block_index":310478,"ledger_hash":"d9cac2e29863569bc96aaf022437906a534968a17bf965c54bf59931cd92e590","messages_hash":"fceb7400129cbad4ae34656a15a35d8e625e515fdaf78a9f644c43f1da3f836b","txlist_hash":"cbec4d277b86a587fd0463340a8990600046f6f166f6fde0b6ec1ee817ab12bb"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1127,310479,'insert','blocks','{"block_hash":"f3d691ce35f62df56d142160b6e2cdcba19d4995c01f802da6ce30bfe8d30030","block_index":310479,"block_time":310479000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1127,310478,'insert','blocks','{"block_hash":"f3d691ce35f62df56d142160b6e2cdcba19d4995c01f802da6ce30bfe8d30030","block_index":310479,"block_time":310479000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1128,310479,'parse','blocks','{"block_index":310479,"ledger_hash":"2e48a89a55b6f368745e1c022683e93c20bdd920011518f18fd936f2190ac5e0","messages_hash":"b878bf2f4f70e1c15eb60535887db7ba9e9414ec524d0f426bbde5a459a56bb9","txlist_hash":"81d4ab55e022000a1bb3fbe758e497425c5196951c3e7896d3c641d54b4f2db6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1129,310480,'insert','blocks','{"block_hash":"2694e89a62b3abd03a38dfd318c05eb5871f1be00a6e1bf06826fd54d142e681","block_index":310480,"block_time":310480000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1129,310479,'insert','blocks','{"block_hash":"2694e89a62b3abd03a38dfd318c05eb5871f1be00a6e1bf06826fd54d142e681","block_index":310480,"block_time":310480000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1130,310480,'parse','blocks','{"block_index":310480,"ledger_hash":"aa54124d86e74bebd14ea481ac2a5a5186236ffe214747f1af11ac370565525c","messages_hash":"855cd018f577fe76942fe9837dc27d3be5e71bf378b611f25cdd6381b04ed703","txlist_hash":"8d7e0f8a6f052692155e23eb612c02468830485938e7cb77a91e0c2061611385"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1131,310481,'insert','blocks','{"block_hash":"db37d8f98630ebc61767736ae2c523e4e930095bf54259c01de4d36fd60b6f4a","block_index":310481,"block_time":310481000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1131,310480,'insert','blocks','{"block_hash":"db37d8f98630ebc61767736ae2c523e4e930095bf54259c01de4d36fd60b6f4a","block_index":310481,"block_time":310481000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1132,310481,'insert','transactions','{"block_hash":"db37d8f98630ebc61767736ae2c523e4e930095bf54259c01de4d36fd60b6f4a","block_index":310481,"block_time":310481000,"btc_amount":0,"data":"0000000200000000000000010000000005f5e1006f8d6ae8a3b381663118b4e1eff4cfc7d0954dd6ec68656c6c6f","destination":"","fee":6375,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"b00bdf03402d81a2cbdbeac4b0df90cff5ab6bf9688f653383d49fe42b8422a5","tx_index":482}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1133,310481,'insert','debits','{"action":"send","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310481,"event":"b00bdf03402d81a2cbdbeac4b0df90cff5ab6bf9688f653383d49fe42b8422a5","quantity":100000000,"tx_index":482}',0,'DEBIT'); INSERT INTO messages VALUES(1134,310481,'insert','credits','{"address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","asset":"XCP","block_index":310481,"calling_function":"send","event":"b00bdf03402d81a2cbdbeac4b0df90cff5ab6bf9688f653383d49fe42b8422a5","quantity":100000000,"tx_index":482}',0,'CREDIT'); INSERT INTO messages VALUES(1135,310481,'insert','sends','{"asset":"XCP","block_index":310481,"destination":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","memo":"68656c6c6f","quantity":100000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"valid","tx_hash":"b00bdf03402d81a2cbdbeac4b0df90cff5ab6bf9688f653383d49fe42b8422a5","tx_index":482}',0,'ENHANCED_SEND'); INSERT INTO messages VALUES(1136,310481,'parse','transactions','{"supported":true,"tx_hash":"b00bdf03402d81a2cbdbeac4b0df90cff5ab6bf9688f653383d49fe42b8422a5","tx_index":482}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1137,310481,'parse','blocks','{"block_index":310481,"ledger_hash":"fbbe1266bb773e5a3f5b48e82566ff75bc74bfea9424f81f670952565db15c59","messages_hash":"7b058d359a23326a73d98644d5cb0312360ee69f98c85814b2d574408f8d442d","txlist_hash":"8bc755d288d8d6525d9161e5d5072631a72e46d2373de37c7851aa10f3479ed5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1138,310482,'insert','blocks','{"block_hash":"2e27db87dfb6439c006637734e876cc662d1ca74c717756f90f0e535df0787d6","block_index":310482,"block_time":310482000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1138,310481,'insert','blocks','{"block_hash":"2e27db87dfb6439c006637734e876cc662d1ca74c717756f90f0e535df0787d6","block_index":310482,"block_time":310482000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1139,310482,'insert','transactions','{"block_hash":"2e27db87dfb6439c006637734e876cc662d1ca74c717756f90f0e535df0787d6","block_index":310482,"block_time":310482000,"btc_amount":0,"data":"0000000200000000000000010000000005f5e1006f4838d8b3588c4c7ba7c1d06f866e9b3739c63037fade0001","destination":"","fee":6350,"source":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","supported":true,"tx_hash":"c8716524f33646b9af94d6f5e52494ff3b34466497094b1db2ab920e4f79bc34","tx_index":483}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1140,310482,'insert','debits','{"action":"send","address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","asset":"XCP","block_index":310482,"event":"c8716524f33646b9af94d6f5e52494ff3b34466497094b1db2ab920e4f79bc34","quantity":100000000,"tx_index":483}',0,'DEBIT'); INSERT INTO messages VALUES(1141,310482,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310482,"calling_function":"send","event":"c8716524f33646b9af94d6f5e52494ff3b34466497094b1db2ab920e4f79bc34","quantity":100000000,"tx_index":483}',0,'CREDIT'); INSERT INTO messages VALUES(1142,310482,'insert','sends','{"asset":"XCP","block_index":310482,"destination":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","memo":"fade0001","quantity":100000000,"source":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","status":"valid","tx_hash":"c8716524f33646b9af94d6f5e52494ff3b34466497094b1db2ab920e4f79bc34","tx_index":483}',0,'ENHANCED_SEND'); INSERT INTO messages VALUES(1143,310482,'parse','transactions','{"supported":true,"tx_hash":"c8716524f33646b9af94d6f5e52494ff3b34466497094b1db2ab920e4f79bc34","tx_index":483}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1144,310482,'parse','blocks','{"block_index":310482,"ledger_hash":"bd28a97e90054319c4c301c3e99d68aaa5e1bf5a145a8f2c4529040bb8137209","messages_hash":"222ce836127c79d43fc5847a1cc427f7218fe84d23c2454ae1fd35585c9234dc","txlist_hash":"838486910c9c7722fb3afbac7b0514cdd94126486f6671697423b34164b9906f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1145,310483,'insert','blocks','{"block_hash":"013bac61f8e33c8d8d0f60f5e6a4ec3de9b16696703dea9802f64a258601c460","block_index":310483,"block_time":310483000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1145,310482,'insert','blocks','{"block_hash":"013bac61f8e33c8d8d0f60f5e6a4ec3de9b16696703dea9802f64a258601c460","block_index":310483,"block_time":310483000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1146,310483,'parse','blocks','{"block_index":310483,"ledger_hash":"fbbeacec99c9ed99a7fc37cdd5673fe8bdce08eba7fcb25b696e262af29ca5d8","messages_hash":"14e0c00fe389f298230aabba0e084ff09875e49dba8b5259fcb99a3604081345","txlist_hash":"2be6ebe515877a76a7b83b1929ca2ef77be1df3aa3d6766c0c47450898ad7adf"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1147,310484,'insert','blocks','{"block_hash":"7cac2b3630c31b592fa0497792bed58d3c41120c009471c348b16b5578b3aa2b","block_index":310484,"block_time":310484000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1147,310483,'insert','blocks','{"block_hash":"7cac2b3630c31b592fa0497792bed58d3c41120c009471c348b16b5578b3aa2b","block_index":310484,"block_time":310484000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1148,310484,'parse','blocks','{"block_index":310484,"ledger_hash":"310bc7c61c1325ee3f97e888658fd74e1fe4adccef4924abb6978150fe6f3dad","messages_hash":"00e1362b924985f5761ae514112cc30c143a610d15e936fd909a52e8735eaaa1","txlist_hash":"ec800faf2b61e7b1c2c85157d09b058f59defc14ffbe64d82dffea2a0368ade2"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1149,310485,'insert','blocks','{"block_hash":"eab5febc9668cd438178496417b22da5f77ceaed5bb6e01fc0f04bef1f5b4478","block_index":310485,"block_time":310485000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1149,310484,'insert','blocks','{"block_hash":"eab5febc9668cd438178496417b22da5f77ceaed5bb6e01fc0f04bef1f5b4478","block_index":310485,"block_time":310485000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1150,310485,'parse','blocks','{"block_index":310485,"ledger_hash":"b7f66db9ea5838b65286422d0cac262f6b81bbd5a7397adf7b8d85b21354dbcd","messages_hash":"f424a423cf7f105c5f1000cbbc4552b83589f70e959c2a062eca313f5713271d","txlist_hash":"c2c0301119eb8f6e5ee8f72a4f93366a7c2b9f327f087a5aabff7d73892ca74f"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1151,310486,'insert','blocks','{"block_hash":"d4fbe610cc60987f2d1d35c7d8ad3ce32156ee5fe36ef8cc4f08b46836388862","block_index":310486,"block_time":310486000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1151,310485,'insert','blocks','{"block_hash":"d4fbe610cc60987f2d1d35c7d8ad3ce32156ee5fe36ef8cc4f08b46836388862","block_index":310486,"block_time":310486000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1152,310486,'insert','transactions','{"block_hash":"d4fbe610cc60987f2d1d35c7d8ad3ce32156ee5fe36ef8cc4f08b46836388862","block_index":310486,"block_time":310486000,"btc_amount":0,"data":"0000001e52bb33003ff0000000000000004c4b4009556e69742054657374","destination":"","fee":6800,"source":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","supported":true,"tx_hash":"3b95e07a2194174ac020de27e8b2b6ee24d5fc120f118df516ba28495657cf14","tx_index":487}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1153,310486,'insert','broadcasts','{"block_index":310486,"fee_fraction_int":5000000,"locked":false,"source":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","status":"valid","text":"Unit Test","timestamp":1388000000,"tx_hash":"3b95e07a2194174ac020de27e8b2b6ee24d5fc120f118df516ba28495657cf14","tx_index":487,"value":1.0}',0,'BROADCAST'); INSERT INTO messages VALUES(1154,310486,'parse','transactions','{"supported":true,"tx_hash":"3b95e07a2194174ac020de27e8b2b6ee24d5fc120f118df516ba28495657cf14","tx_index":487}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1155,310486,'parse','blocks','{"block_index":310486,"ledger_hash":"0f829769e4da773089d7b05047a499db5f6d1b17795d4fba912882caee9813e0","messages_hash":"3c08e19ebcb07664b7679a724ed18c73d7c8c7698a56f85f2fec5e7eb5a3ebd8","txlist_hash":"ea66c7d9251a0eb884fef48de05cb58bbcf3a9e08319f01c96f180aeb0de9bab"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1156,310487,'insert','blocks','{"block_hash":"32aa1b132d0643350bbb62dbd5f38ae0c270d8f491a2012c83b99158d58e464f","block_index":310487,"block_time":310487000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1156,310486,'insert','blocks','{"block_hash":"32aa1b132d0643350bbb62dbd5f38ae0c270d8f491a2012c83b99158d58e464f","block_index":310487,"block_time":310487000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1157,310487,'insert','transactions','{"block_hash":"32aa1b132d0643350bbb62dbd5f38ae0c270d8f491a2012c83b99158d58e464f","block_index":310487,"block_time":310487000,"btc_amount":5430,"data":"00000028000152bb3301000000000000000900000000000000090000000000000000000013b000000064","destination":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","fee":7650,"source":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","supported":true,"tx_hash":"41e821ae1c6b553d0fa5d5a807b2e7e9ffaec5d62706d9d2a59c6e65a3ed9cef","tx_index":488}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1158,310487,'insert','debits','{"action":"bet","address":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","asset":"XCP","block_index":310487,"event":"41e821ae1c6b553d0fa5d5a807b2e7e9ffaec5d62706d9d2a59c6e65a3ed9cef","quantity":9,"tx_index":488}',0,'DEBIT'); INSERT INTO messages VALUES(1159,310487,'insert','bets','{"bet_type":1,"block_index":310487,"counterwager_quantity":9,"counterwager_remaining":9,"deadline":1388000001,"expiration":100,"expire_index":310587,"fee_fraction_int":5000000.0,"feed_address":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","leverage":5040,"source":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","status":"open","target_value":0.0,"tx_hash":"41e821ae1c6b553d0fa5d5a807b2e7e9ffaec5d62706d9d2a59c6e65a3ed9cef","tx_index":488,"wager_quantity":9,"wager_remaining":9}',0,'OPEN_BET'); INSERT INTO messages VALUES(1160,310487,'parse','transactions','{"supported":true,"tx_hash":"41e821ae1c6b553d0fa5d5a807b2e7e9ffaec5d62706d9d2a59c6e65a3ed9cef","tx_index":488}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1161,310487,'parse','blocks','{"block_index":310487,"ledger_hash":"4b4d7a79843342e96e5d9d71bbc49690245b3098be75e7b86f273021d526216d","messages_hash":"900c8266900450b11b7b896e61baaea9e7f4677b5e722ac78cf07985c65a2e5b","txlist_hash":"76fbd411c43f3f67c8bf61138c5672de0cfda2d98f112a6e50b3a5d084d7cc72"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1162,310488,'insert','blocks','{"block_hash":"80b8dd5d7ce2e4886e6721095b892a39fb699980fe2bc1c17e747f822f4c4b1b","block_index":310488,"block_time":310488000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1162,310487,'insert','blocks','{"block_hash":"80b8dd5d7ce2e4886e6721095b892a39fb699980fe2bc1c17e747f822f4c4b1b","block_index":310488,"block_time":310488000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1163,310488,'insert','transactions','{"block_hash":"80b8dd5d7ce2e4886e6721095b892a39fb699980fe2bc1c17e747f822f4c4b1b","block_index":310488,"block_time":310488000,"btc_amount":0,"data":"0000001e52bb33023ff000000000000000000000096f7074696f6e732030","destination":"","fee":6800,"source":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","supported":true,"tx_hash":"870fb08b373705423f31ccd91fdbcabe135ad92d74e709a959dfa2e12f9a6638","tx_index":489}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1164,310488,'insert','broadcasts','{"block_index":310488,"fee_fraction_int":0,"locked":false,"source":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","status":"valid","text":"options 0","timestamp":1388000002,"tx_hash":"870fb08b373705423f31ccd91fdbcabe135ad92d74e709a959dfa2e12f9a6638","tx_index":489,"value":1.0}',0,'BROADCAST'); INSERT INTO messages VALUES(1165,310488,'parse','transactions','{"supported":true,"tx_hash":"870fb08b373705423f31ccd91fdbcabe135ad92d74e709a959dfa2e12f9a6638","tx_index":489}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1166,310488,'parse','blocks','{"block_index":310488,"ledger_hash":"2d7e59026ea4c8933e9c7474936931ca49d4af91f9b9985f3c76085fb3a69104","messages_hash":"7ea198be8ae7e7f46844b1f34a4021ac5612d6dce70b354a5bedb8e8d2ff7762","txlist_hash":"78e801f2d1968c860ac2563e9cc912c18cb8e5f95996011e84c289833fbd46da"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1167,310489,'insert','blocks','{"block_hash":"2efdb36f986b3e3ccc6cc9b0c1c3cdcb07429fb43cbc0cc3b6c87d1b33f258b6","block_index":310489,"block_time":310489000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1167,310488,'insert','blocks','{"block_hash":"2efdb36f986b3e3ccc6cc9b0c1c3cdcb07429fb43cbc0cc3b6c87d1b33f258b6","block_index":310489,"block_time":310489000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1168,310489,'insert','transactions','{"block_hash":"2efdb36f986b3e3ccc6cc9b0c1c3cdcb07429fb43cbc0cc3b6c87d1b33f258b6","block_index":310489,"block_time":310489000,"btc_amount":0,"data":"0000001e52bb33033ff000000000000000000000046c6f636b","destination":"","fee":6800,"source":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","supported":true,"tx_hash":"685d7f99fa76a05201c3239a4e0d9060ea53307b171f6ad7d482a26c73e9c0d1","tx_index":490}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1169,310489,'insert','broadcasts','{"block_index":310489,"fee_fraction_int":null,"locked":true,"source":"myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM","status":"valid","text":null,"timestamp":0,"tx_hash":"685d7f99fa76a05201c3239a4e0d9060ea53307b171f6ad7d482a26c73e9c0d1","tx_index":490,"value":null}',0,'BROADCAST'); INSERT INTO messages VALUES(1170,310489,'parse','transactions','{"supported":true,"tx_hash":"685d7f99fa76a05201c3239a4e0d9060ea53307b171f6ad7d482a26c73e9c0d1","tx_index":490}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1171,310489,'parse','blocks','{"block_index":310489,"ledger_hash":"716354a370f344980e98785a444b56b21188bc699e7fbd0c877b6f2fabf35efc","messages_hash":"d9a37c0bf78624a6bb7630e8f1223f2157df34407341d9813e9ccbc807acf5db","txlist_hash":"23d9af03e6aa29fbab29c8e2a5a0419680053bba19594105cc8ef4d3db05d418"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1172,310490,'insert','blocks','{"block_hash":"e2cb04b8a7368c95359c9d5ff33e64209200fb606de0d64b7c0f67bb1cb8d87c","block_index":310490,"block_time":310490000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1172,310489,'insert','blocks','{"block_hash":"e2cb04b8a7368c95359c9d5ff33e64209200fb606de0d64b7c0f67bb1cb8d87c","block_index":310490,"block_time":310490000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1173,310490,'insert','transactions','{"block_hash":"e2cb04b8a7368c95359c9d5ff33e64209200fb606de0d64b7c0f67bb1cb8d87c","block_index":310490,"block_time":310490000,"btc_amount":0,"data":"0000001e52bb33043ff000000000000000000000096f7074696f6e732031","destination":"","fee":6800,"source":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","supported":true,"tx_hash":"7c437705c315212315c85c0b8ba09d358679c91be20b54f30929c5a6052426af","tx_index":491}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1174,310490,'insert','broadcasts','{"block_index":310490,"fee_fraction_int":0,"locked":false,"source":"mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42","status":"valid","text":"options 1","timestamp":1388000004,"tx_hash":"7c437705c315212315c85c0b8ba09d358679c91be20b54f30929c5a6052426af","tx_index":491,"value":1.0}',0,'BROADCAST'); INSERT INTO messages VALUES(1175,310490,'parse','transactions','{"supported":true,"tx_hash":"7c437705c315212315c85c0b8ba09d358679c91be20b54f30929c5a6052426af","tx_index":491}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1176,310490,'parse','blocks','{"block_index":310490,"ledger_hash":"906a38f4256f50312891119c99721537992438af85421e317574ce1810e2b909","messages_hash":"d25fc5c1d965de9ba7a2e9642ee91920b982ee9304bc4b5f3b9a9a7da965706a","txlist_hash":"5f934032dce4102cd1d72d3f887526e78baa4a78991bc43cf0a1ebefe08fdec7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1177,310491,'insert','blocks','{"block_hash":"811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16","block_index":310491,"block_time":310491000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1177,310490,'insert','blocks','{"block_hash":"811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16","block_index":310491,"block_time":310491000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1178,310491,'insert','transactions','{"block_hash":"811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16","block_index":310491,"block_time":310491000,"btc_amount":0,"data":"0000000a00000000000000010000000005f5e100000000000000000000000000000c350007d000000000000dbba0","destination":"","fee":6800,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498","tx_index":492}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1179,310491,'insert','debits','{"action":"open order","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310491,"event":"74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498","quantity":100000000,"tx_index":492}',0,'DEBIT'); INSERT INTO messages VALUES(1180,310491,'insert','orders','{"block_index":310491,"expiration":2000,"expire_index":312491,"fee_provided":6800,"fee_provided_remaining":6800,"fee_required":900000,"fee_required_remaining":900000,"get_asset":"BTC","get_quantity":800000,"get_remaining":800000,"give_asset":"XCP","give_quantity":100000000,"give_remaining":100000000,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","status":"open","tx_hash":"74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498","tx_index":492}',0,'OPEN_ORDER'); INSERT INTO messages VALUES(1181,310491,'parse','transactions','{"supported":true,"tx_hash":"74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498","tx_index":492}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1182,310491,'parse','blocks','{"block_index":310491,"ledger_hash":"3114d8091cfcaa9944c6fab49d51950535c4ef269877d58c372ed80b2b472ec6","messages_hash":"9671cfedb3124b67ed996c547cb26a32e95490009ad56065c79be54a28c45994","txlist_hash":"f065728a3544adc085fae976759c0d040a34ca0a8ddd39260b55f0262cd5baa8"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1183,310492,'insert','blocks','{"block_hash":"8a09b2faf0a7ad67eb4ab5c948b9769fc87eb2ec5e16108f2cde8bd9e6cf7607","block_index":310492,"block_time":310492000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1183,310491,'insert','blocks','{"block_hash":"8a09b2faf0a7ad67eb4ab5c948b9769fc87eb2ec5e16108f2cde8bd9e6cf7607","block_index":310492,"block_time":310492000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1184,310492,'insert','transactions','{"block_hash":"8a09b2faf0a7ad67eb4ab5c948b9769fc87eb2ec5e16108f2cde8bd9e6cf7607","block_index":310492,"block_time":310492000,"btc_amount":0,"data":"0000000a000000000000000000000000000c350000000000000000010000000005f5e10007d00000000000000000","destination":"","fee":1000000,"source":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","supported":true,"tx_hash":"1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81","tx_index":493}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1185,310492,'insert','orders','{"block_index":310492,"expiration":2000,"expire_index":312492,"fee_provided":1000000,"fee_provided_remaining":1000000,"fee_required":0,"fee_required_remaining":0,"get_asset":"XCP","get_quantity":100000000,"get_remaining":100000000,"give_asset":"BTC","give_quantity":800000,"give_remaining":800000,"source":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","status":"open","tx_hash":"1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81","tx_index":493}',0,'OPEN_ORDER'); INSERT INTO messages VALUES(1186,310492,'update','orders','{"fee_provided_remaining":6800,"fee_required_remaining":892800,"get_remaining":0,"give_remaining":0,"status":"open","tx_hash":"74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498"}',0,'ORDER_UPDATE'); @@ -2155,12 +2155,12 @@ INSERT INTO messages VALUES(1187,310492,'update','orders','{"fee_provided_remain INSERT INTO messages VALUES(1188,310492,'insert','order_matches','{"backward_asset":"BTC","backward_quantity":800000,"block_index":310492,"fee_paid":7200,"forward_asset":"XCP","forward_quantity":100000000,"id":"74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498_1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81","match_expire_index":310512,"status":"pending","tx0_address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","tx0_block_index":310491,"tx0_expiration":2000,"tx0_hash":"74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498","tx0_index":492,"tx1_address":"mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns","tx1_block_index":310492,"tx1_expiration":2000,"tx1_hash":"1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81","tx1_index":493}',0,'ORDER_MATCH'); INSERT INTO messages VALUES(1189,310492,'parse','transactions','{"supported":true,"tx_hash":"1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81","tx_index":493}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1190,310492,'parse','blocks','{"block_index":310492,"ledger_hash":"98af18583618fdeed545347c013763d068e8294405d265911cc5e1bc420bc740","messages_hash":"0d34fbc26126add5a57b7e8f6f71bad150d7232abf046f3fa9b1fc72b10d61b2","txlist_hash":"daf4d2c1a1ad5206abcf7744bdd06fae99c442fb2607a843dcabb5727d02916e"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1191,310493,'insert','blocks','{"block_hash":"c19e2915b750279b2be4b52e57e5ce29f63dffb4e14d9aad30c9e820affc0cbf","block_index":310493,"block_time":310493000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1191,310492,'insert','blocks','{"block_hash":"c19e2915b750279b2be4b52e57e5ce29f63dffb4e14d9aad30c9e820affc0cbf","block_index":310493,"block_time":310493000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1192,310493,'insert','transactions','{"block_hash":"c19e2915b750279b2be4b52e57e5ce29f63dffb4e14d9aad30c9e820affc0cbf","block_index":310493,"block_time":310493000,"btc_amount":62000000,"data":"","destination":"mvCounterpartyXXXXXXXXXXXXXXW24Hef","fee":5625,"source":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","supported":true,"tx_hash":"c0733e1287afb1bb3d2fdacd1db7c74ea84f14362f3a8d1c038e662e1d0b1b1a","tx_index":494}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1193,310493,'insert','credits','{"address":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","asset":"XCP","block_index":310493,"calling_function":"burn","event":"c0733e1287afb1bb3d2fdacd1db7c74ea84f14362f3a8d1c038e662e1d0b1b1a","quantity":92995878046,"tx_index":494}',0,'CREDIT'); INSERT INTO messages VALUES(1194,310493,'insert','burns','{"block_index":310493,"burned":62000000,"earned":92995878046,"source":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","status":"valid","tx_hash":"c0733e1287afb1bb3d2fdacd1db7c74ea84f14362f3a8d1c038e662e1d0b1b1a","tx_index":494}',0,'BURN'); INSERT INTO messages VALUES(1195,310493,'parse','blocks','{"block_index":310493,"ledger_hash":"29119cd30a4733916fbfd0551506eaa16f7bb1bdfbdf8d17ac4e5bb20d1cb09c","messages_hash":"53a339feb73df3a98bc4acc84af77e111d4780533c8f5a26cf250594d9613cf2","txlist_hash":"7ec4cfa94544900c8e8732ad51be7cee6452aa1884ea940cd5c98862fb4aaba6"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1196,310494,'insert','blocks','{"block_hash":"7dda1d3e12785313d5651ee5314d0aecf17588196f9150b10c55695dbaebee5d","block_index":310494,"block_time":310494000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1196,310493,'insert','blocks','{"block_hash":"7dda1d3e12785313d5651ee5314d0aecf17588196f9150b10c55695dbaebee5d","block_index":310494,"block_time":310494000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1197,310494,'insert','transactions','{"block_hash":"7dda1d3e12785313d5651ee5314d0aecf17588196f9150b10c55695dbaebee5d","block_index":310494,"block_time":310494000,"btc_amount":0,"data":"00000014000000063e985ffd00000000000000640100000000000000000000","destination":"","fee":6800,"source":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","supported":true,"tx_hash":"321bed395482e034f2ce0a4dbf28d1f800592a658e26ea91ae9c5b0928204503","tx_index":495}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1198,310494,'insert','debits','{"action":"issuance fee","address":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","asset":"XCP","block_index":310494,"event":"321bed395482e034f2ce0a4dbf28d1f800592a658e26ea91ae9c5b0928204503","quantity":50000000,"tx_index":495}',0,'DEBIT'); INSERT INTO messages VALUES(1199,310494,'insert','assets','{"asset_id":"26819977213","asset_longname":null,"asset_name":"DIVIDEND","block_index":310494}',0,'ASSET_CREATION'); @@ -2168,21 +2168,21 @@ INSERT INTO messages VALUES(1200,310494,'insert','issuances','{"asset":"DIVIDEND INSERT INTO messages VALUES(1201,310494,'insert','credits','{"address":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","asset":"DIVIDEND","block_index":310494,"calling_function":"issuance","event":"321bed395482e034f2ce0a4dbf28d1f800592a658e26ea91ae9c5b0928204503","quantity":100,"tx_index":495}',0,'CREDIT'); INSERT INTO messages VALUES(1202,310494,'parse','transactions','{"supported":true,"tx_hash":"321bed395482e034f2ce0a4dbf28d1f800592a658e26ea91ae9c5b0928204503","tx_index":495}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1203,310494,'parse','blocks','{"block_index":310494,"ledger_hash":"72d71bd72263699ea9f2b097ad141be5bc394f49d8b0b0a6b2ff6a87b0ee3919","messages_hash":"0d3c87692d49dc033eed975eb8b8ee17ff2f0f877c8ed5a5866f73ce63bf8715","txlist_hash":"9350c3ba33d0546d1194c5fa767ced28834b26246aedc56d89b1d48ec4f26014"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1204,310495,'insert','blocks','{"block_hash":"4769aa7030f28a05a137a85ef4ee0c1765c37013773212b93ec90f1227168b67","block_index":310495,"block_time":310495000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1204,310494,'insert','blocks','{"block_hash":"4769aa7030f28a05a137a85ef4ee0c1765c37013773212b93ec90f1227168b67","block_index":310495,"block_time":310495000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1205,310495,'insert','transactions','{"block_hash":"4769aa7030f28a05a137a85ef4ee0c1765c37013773212b93ec90f1227168b67","block_index":310495,"block_time":310495000,"btc_amount":5430,"data":"00000000000000063e985ffd000000000000000a","destination":"mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj","fee":7650,"source":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","supported":true,"tx_hash":"02156b9a1f643fb48330396274a37620c8abbbe5eddb2f8b53dadd135f5d2e2e","tx_index":496}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1206,310495,'insert','debits','{"action":"send","address":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","asset":"DIVIDEND","block_index":310495,"event":"02156b9a1f643fb48330396274a37620c8abbbe5eddb2f8b53dadd135f5d2e2e","quantity":10,"tx_index":496}',0,'DEBIT'); INSERT INTO messages VALUES(1207,310495,'insert','credits','{"address":"mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj","asset":"DIVIDEND","block_index":310495,"calling_function":"send","event":"02156b9a1f643fb48330396274a37620c8abbbe5eddb2f8b53dadd135f5d2e2e","quantity":10,"tx_index":496}',0,'CREDIT'); INSERT INTO messages VALUES(1208,310495,'insert','sends','{"asset":"DIVIDEND","block_index":310495,"destination":"mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj","quantity":10,"source":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","status":"valid","tx_hash":"02156b9a1f643fb48330396274a37620c8abbbe5eddb2f8b53dadd135f5d2e2e","tx_index":496}',0,'SEND'); INSERT INTO messages VALUES(1209,310495,'parse','transactions','{"supported":true,"tx_hash":"02156b9a1f643fb48330396274a37620c8abbbe5eddb2f8b53dadd135f5d2e2e","tx_index":496}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1210,310495,'parse','blocks','{"block_index":310495,"ledger_hash":"5a7e5a36882466373d576bb5f4ccd1bc72ecaf548b9589baa803a7275a7a24cd","messages_hash":"56518bc9abc11bf108188834058bb9c51c9b8dc3b6276116c5b786b07c797fab","txlist_hash":"09e9db121649cacd979fd18bbaa35e519361e727e7e072e2f2f86291160cdb29"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1211,310496,'insert','blocks','{"block_hash":"65884816927e8c566655e85c07bc2bc2c7ee26e625742f219939d43238fb31f8","block_index":310496,"block_time":310496000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1211,310495,'insert','blocks','{"block_hash":"65884816927e8c566655e85c07bc2bc2c7ee26e625742f219939d43238fb31f8","block_index":310496,"block_time":310496000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1212,310496,'insert','transactions','{"block_hash":"65884816927e8c566655e85c07bc2bc2c7ee26e625742f219939d43238fb31f8","block_index":310496,"block_time":310496000,"btc_amount":5430,"data":"00000000000000000000000100000015a4018c1e","destination":"mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj","fee":7650,"source":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","supported":true,"tx_hash":"a35ab1736565aceddbd1d71f92fc7f39d1361006aa9099f731e54e762964d5ba","tx_index":497}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1213,310496,'insert','debits','{"action":"send","address":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","asset":"XCP","block_index":310496,"event":"a35ab1736565aceddbd1d71f92fc7f39d1361006aa9099f731e54e762964d5ba","quantity":92945878046,"tx_index":497}',0,'DEBIT'); INSERT INTO messages VALUES(1214,310496,'insert','credits','{"address":"mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj","asset":"XCP","block_index":310496,"calling_function":"send","event":"a35ab1736565aceddbd1d71f92fc7f39d1361006aa9099f731e54e762964d5ba","quantity":92945878046,"tx_index":497}',0,'CREDIT'); INSERT INTO messages VALUES(1215,310496,'insert','sends','{"asset":"XCP","block_index":310496,"destination":"mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj","quantity":92945878046,"source":"mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH","status":"valid","tx_hash":"a35ab1736565aceddbd1d71f92fc7f39d1361006aa9099f731e54e762964d5ba","tx_index":497}',0,'SEND'); INSERT INTO messages VALUES(1216,310496,'parse','transactions','{"supported":true,"tx_hash":"a35ab1736565aceddbd1d71f92fc7f39d1361006aa9099f731e54e762964d5ba","tx_index":497}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1217,310496,'parse','blocks','{"block_index":310496,"ledger_hash":"7ac6121c624b634f44695172761830926afe76bb18c4cc9195773f3a26966941","messages_hash":"1b1ed76f99d39b36f4d0737299ce15b21fed9e077d0476658c023b09819853a7","txlist_hash":"9eda85cce745579122ba9c6e24b63cd83f2e5161031a34e6ee9bf08b80823cb4"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1218,310497,'insert','blocks','{"block_hash":"f1118591fe79b8bf52ccf0c5de9826bfd266b1fdc24b44676cf22bbcc76d464e","block_index":310497,"block_time":310497000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1218,310496,'insert','blocks','{"block_hash":"f1118591fe79b8bf52ccf0c5de9826bfd266b1fdc24b44676cf22bbcc76d464e","block_index":310497,"block_time":310497000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1219,310497,'insert','transactions','{"block_hash":"f1118591fe79b8bf52ccf0c5de9826bfd266b1fdc24b44676cf22bbcc76d464e","block_index":310497,"block_time":310497000,"btc_amount":0,"data":"00000014000000000aa4097d0000000005f5e100010000000000000000000c506172656e74206173736574","destination":"","fee":6300,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"076ae3d8eeb7fb40d2ae27692340157c746d9832806766b0dac5adb1526dc78f","tx_index":498}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1220,310497,'insert','debits','{"action":"issuance fee","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310497,"event":"076ae3d8eeb7fb40d2ae27692340157c746d9832806766b0dac5adb1526dc78f","quantity":50000000,"tx_index":498}',0,'DEBIT'); INSERT INTO messages VALUES(1221,310497,'insert','assets','{"asset_id":"178522493","asset_longname":null,"asset_name":"PARENT","block_index":310497}',0,'ASSET_CREATION'); @@ -2190,7 +2190,7 @@ INSERT INTO messages VALUES(1222,310497,'insert','issuances','{"asset":"PARENT", INSERT INTO messages VALUES(1223,310497,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"PARENT","block_index":310497,"calling_function":"issuance","event":"076ae3d8eeb7fb40d2ae27692340157c746d9832806766b0dac5adb1526dc78f","quantity":100000000,"tx_index":498}',0,'CREDIT'); INSERT INTO messages VALUES(1224,310497,'parse','transactions','{"supported":true,"tx_hash":"076ae3d8eeb7fb40d2ae27692340157c746d9832806766b0dac5adb1526dc78f","tx_index":498}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1225,310497,'parse','blocks','{"block_index":310497,"ledger_hash":"28c6e92b2299b9cbbb5953f8b7ff3de0fe962d15642ba27e43faa64e1935e819","messages_hash":"ac8d8759fbddc8f92ad8b5d8b4637a63b8d21a04ba1a4126baf2b42a87edfce3","txlist_hash":"ff8136601b9e0138a999d1f0467af6e8535a2bcdd2b622af7be0178a083b9519"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1226,310498,'insert','blocks','{"block_hash":"b7058b6d1ddc325a10bf33144937e06ce6025215b416518ae120da9440ae279e","block_index":310498,"block_time":310498000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1226,310497,'insert','blocks','{"block_hash":"b7058b6d1ddc325a10bf33144937e06ce6025215b416518ae120da9440ae279e","block_index":310498,"block_time":310498000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1227,310498,'insert','transactions','{"block_hash":"b7058b6d1ddc325a10bf33144937e06ce6025215b416518ae120da9440ae279e","block_index":310498,"block_time":310498000,"btc_amount":0,"data":"0000001501530821671b10650000000005f5e10001108e90a57dba9967c422e83080f22f0c684368696c64206f6620706172656e74","destination":"","fee":6550,"source":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","supported":true,"tx_hash":"0abfce2662c05852fd8b181a60900678643cedad47b23a853b8c4eda82cb2cbf","tx_index":499}',0,'NEW_TRANSACTION'); INSERT INTO messages VALUES(1228,310498,'insert','debits','{"action":"issuance fee","address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"XCP","block_index":310498,"event":"0abfce2662c05852fd8b181a60900678643cedad47b23a853b8c4eda82cb2cbf","quantity":25000000,"tx_index":499}',0,'DEBIT'); INSERT INTO messages VALUES(1229,310498,'insert','assets','{"asset_id":"95428956661682277","asset_longname":"PARENT.already.issued","asset_name":"A95428956661682277","block_index":310498}',0,'ASSET_CREATION'); @@ -2198,9 +2198,9 @@ INSERT INTO messages VALUES(1230,310498,'insert','issuances','{"asset":"A9542895 INSERT INTO messages VALUES(1231,310498,'insert','credits','{"address":"mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc","asset":"A95428956661682277","block_index":310498,"calling_function":"issuance","event":"0abfce2662c05852fd8b181a60900678643cedad47b23a853b8c4eda82cb2cbf","quantity":100000000,"tx_index":499}',0,'CREDIT'); INSERT INTO messages VALUES(1232,310498,'parse','transactions','{"supported":true,"tx_hash":"0abfce2662c05852fd8b181a60900678643cedad47b23a853b8c4eda82cb2cbf","tx_index":499}',0,'TRANSACTION_PARSED'); INSERT INTO messages VALUES(1233,310498,'parse','blocks','{"block_index":310498,"ledger_hash":"5fe6cdb0828379bf240fad99c68bba34e1889bbc19605ce5c297b82352264414","messages_hash":"113207bd13dda56b5e5edf305f70a56e62cc861184e1e95a64e79ce100462c98","txlist_hash":"b488f6f0e6c233f202ee17c0843236d464144e79c870af88bae56355ae9372b7"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1234,310499,'insert','blocks','{"block_hash":"1950e1a4d7fc820ed9603f6df6819c3c953c277c726340dec2a4253e261a1764","block_index":310499,"block_time":310499000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1234,310498,'insert','blocks','{"block_hash":"1950e1a4d7fc820ed9603f6df6819c3c953c277c726340dec2a4253e261a1764","block_index":310499,"block_time":310499000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1235,310499,'parse','blocks','{"block_index":310499,"ledger_hash":"b9fcbdafddd46fdda061f6e9f8744b426b6ca37e32b315df1098cbc7899ae9b9","messages_hash":"d6aedacd4f81520d86ae47c9c776d17a213c706a5cf7c91203a4299261d1648c","txlist_hash":"032166892f568bb97f4f69ef5bdf49cc1b15cc9f8c7f6c1f3e1f9d54816ad7e5"}',0,'BLOCK_PARSED'); -INSERT INTO messages VALUES(1236,310500,'insert','blocks','{"block_hash":"54aeaf47d5387964e2d51617bf3af50520a0449410e0d096cf8c2aa9dad5550b","block_index":310500,"block_time":310500000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); +INSERT INTO messages VALUES(1236,310499,'insert','blocks','{"block_hash":"54aeaf47d5387964e2d51617bf3af50520a0449410e0d096cf8c2aa9dad5550b","block_index":310500,"block_time":310500000,"difficulty":null,"ledger_hash":null,"previous_block_hash":null,"txlist_hash":null}',0,'NEW_BLOCK'); INSERT INTO messages VALUES(1237,310500,'parse','blocks','{"block_index":310500,"ledger_hash":"5ffefc7a2724be6bd697796bb82638ec913c5cbb73627153d1a13b48c7a6c02d","messages_hash":"45f296a535c13129cb1aaeb4e28a03e04ad902917891c39ae59ea2894e9f868f","txlist_hash":"35f4a33840d002ab4e0e44f11c1749ae95b41376927fb346140508b32518edd1"}',0,'BLOCK_PARSED'); -- Triggers and indices on messages CREATE TRIGGER block_update_messages From 779d34c8eb74c7b6512bc6852539776b5310532b Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sat, 20 Apr 2024 18:10:46 +0200 Subject: [PATCH 068/280] Close telemetry db connection --- counterparty-core/counterpartycore/lib/sentry.py | 2 +- .../counterpartycore/lib/telemetry/collector.py | 3 +++ .../counterpartycore/lib/telemetry/daemon.py | 13 ++++++++++++- counterparty-core/counterpartycore/server.py | 1 + 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/sentry.py b/counterparty-core/counterpartycore/lib/sentry.py index aecccb2671..7bf66cb681 100644 --- a/counterparty-core/counterpartycore/lib/sentry.py +++ b/counterparty-core/counterpartycore/lib/sentry.py @@ -17,8 +17,8 @@ def send_exception(exception): def before_send(event, _hint): db = database.get_connection(read_only=True) - data = TelemetryCollectorLive(db).collect() + db.close() event["tags"] = event.get("tags", {}) diff --git a/counterparty-core/counterpartycore/lib/telemetry/collector.py b/counterparty-core/counterpartycore/lib/telemetry/collector.py index 2d53b88eae..d5dfd81507 100644 --- a/counterparty-core/counterpartycore/lib/telemetry/collector.py +++ b/counterparty-core/counterpartycore/lib/telemetry/collector.py @@ -63,3 +63,6 @@ def is_running_in_docker(self): def __read_config_with_default(self, key, default): return getattr(config, key, default) + + def close(self): + self.db.close() diff --git a/counterparty-core/counterpartycore/lib/telemetry/daemon.py b/counterparty-core/counterpartycore/lib/telemetry/daemon.py index 3ca3077865..b88d045ce2 100644 --- a/counterparty-core/counterpartycore/lib/telemetry/daemon.py +++ b/counterparty-core/counterpartycore/lib/telemetry/daemon.py @@ -1,11 +1,16 @@ import threading # noqa: I001 import time +import logging from .collector import TelemetryCollectorI from .client import TelemetryClientI +from counterpartycore.lib import config + DEFAULT_INTERVAL = 60 +logger = logging.getLogger(config.LOGGER_NAME) + class TelemetryDaemon: def __init__( @@ -26,11 +31,17 @@ def start(self): self.thread.start() def _run(self): + last_run = time.time() while self.is_running: + if time.time() - last_run < self.interval: + time.sleep(0.5) + continue data = self.collector.collect() self.client.send(data) - time.sleep(self.interval) + last_run = time.time() def stop(self): + logger.info("Stopping telemetry daemon...") self.is_running = False + self.collector.close() self.thread.join() diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index 39ba41f79d..ae5e7e7c3c 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -599,6 +599,7 @@ def start_all(catch_up="normal"): except KeyboardInterrupt: pass finally: + telemetry_daemon.stop() if api_status_poller: api_status_poller.stop() if api_server: From 0739f00bdc6e441560fc0ad0f3c6836ac952e5b0 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sat, 20 Apr 2024 18:20:46 +0200 Subject: [PATCH 069/280] fix test --- counterparty-core/counterpartycore/lib/telemetry/daemon.py | 2 +- counterparty-core/counterpartycore/test/telemetry_test.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/telemetry/daemon.py b/counterparty-core/counterpartycore/lib/telemetry/daemon.py index b88d045ce2..69fd9faced 100644 --- a/counterparty-core/counterpartycore/lib/telemetry/daemon.py +++ b/counterparty-core/counterpartycore/lib/telemetry/daemon.py @@ -23,7 +23,7 @@ def __init__( self.thread.daemon = True self.client = client self.collector = collector - self.interval = interval + self.interval = interval # must be greater than 0.5 self.is_running = False def start(self): diff --git a/counterparty-core/counterpartycore/test/telemetry_test.py b/counterparty-core/counterpartycore/test/telemetry_test.py index 563bb4e526..8b99a4d96b 100644 --- a/counterparty-core/counterpartycore/test/telemetry_test.py +++ b/counterparty-core/counterpartycore/test/telemetry_test.py @@ -25,10 +25,10 @@ def test_init_with_custom_interval(self): def test_send_at_intervals(self): collector = MagicMock() client = MagicMock() - daemon = TelemetryDaemon(collector, client, interval=0.1) + daemon = TelemetryDaemon(collector, client, interval=0.5) daemon.start() assert daemon.is_running == True # noqa: E712 - time.sleep(0.5) + time.sleep(2) daemon.stop() assert daemon.is_running == False # noqa: E712 assert client.send.call_count > 1 From 234f9898763f55d90f19b3deb1cbe1d04820cd62 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 22 Apr 2024 11:30:24 +0200 Subject: [PATCH 070/280] more tests; fixes --- .../counterpartycore/lib/ledger.py | 21 +++++++----- .../counterpartycore/test/api_v2_test.py | 34 ++++++++++++++++--- 2 files changed, 42 insertions(+), 13 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index 42bc31e6e2..7ab0ba2de2 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -87,12 +87,17 @@ def get_events(db, block_index=None, event=None, event_index=None, last=None, li else: limit = "" # no sql injection here - query = f""" + query = """ SELECT message_index AS event_index, event, bindings, block_index, timestamp FROM messages - WHERE ({" AND ".join(where)}) + """ + if len(where) > 0: + query += f""" + WHERE ({" AND ".join(where)}) + """ # nosec B608 # noqa: S608 + query += f""" ORDER BY message_index DESC {limit} - """ # nosec B608 # noqa: S608 + """ cursor.execute(query, tuple(bindings)) events = cursor.fetchall() for i, _ in enumerate(events): @@ -1978,9 +1983,9 @@ def get_resolutions_by_bet(db, tx_hash: str): query = """ SELECT * FROM bet_match_resolutions - WHERE bet_match_id LIKE '%?%' + WHERE bet_match_id LIKE '%:tx_hash%' """ - bindings = (tx_hash,) + bindings = {"tx_hash": tx_hash} cursor.execute(query, bindings) return cursor.fetchall() @@ -2187,10 +2192,10 @@ def get_btcpays_by_order(db, tx_hash: str): cursor = db.cursor() query = """ SELECT * - FROM btc_pays - WHERE order_match_id LIKE '%?%' + FROM btcpays + WHERE order_match_id LIKE '%:tx_hash%' """ - bindings = (tx_hash,) + bindings = {"tx_hash": tx_hash} cursor.execute(query, bindings) return cursor.fetchall() diff --git a/counterparty-core/counterpartycore/test/api_v2_test.py b/counterparty-core/counterpartycore/test/api_v2_test.py index 4bde22dcea..8ae1de76cc 100644 --- a/counterparty-core/counterpartycore/test/api_v2_test.py +++ b/counterparty-core/counterpartycore/test/api_v2_test.py @@ -21,13 +21,37 @@ @pytest.mark.usefixtures("api_server_v2") def test_api_v2(): block_index = 310491 + address = ADDR[0] + asset = "NODIVISIBLE" + tx_hash = "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498" + order_hash = "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498" + bet_hash = "e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42" + dispsenser_hash = "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498" + event = "CREDIT" + event_index = 10 + exclude_routes = ["compose", "unpack", "info", "mempool", "healthz", "backend"] + for route in routes.ROUTES: + if any([exclude in route for exclude in exclude_routes]): + continue + url = f"{API_ROOT}{route}" - if route.startswith("/blocks"): - url = url.replace("", str(block_index)) - # print(url) - result = requests.get(url) # noqa: S113 - assert result.status_code == 200 + url = url.replace("", str(block_index)) + url = url.replace("
", address) + url = url.replace("", asset) + url = url.replace("", event) + url = url.replace("", str(event_index)) + if route.startswith("/orders"): + url = url.replace("", order_hash) + elif route.startswith("/bets"): + url = url.replace("", bet_hash) + elif route.startswith("/dispensers"): + url = url.replace("", dispsenser_hash) + else: + url = url.replace("", tx_hash) + # print(url) + result = requests.get(url) # noqa: S113 + assert result.status_code == 200 @pytest.mark.usefixtures("api_server_v2") From 1ec5960252a13b23815a5be671fe75cc2a4b1da7 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 22 Apr 2024 11:55:56 +0200 Subject: [PATCH 071/280] compare result with fixtures --- .../counterpartycore/test/api_v2_test.py | 16 +- .../counterpartycore/test/conftest.py | 6 + .../test/fixtures/api_v2_fixtures.json | 1398 +++++++++++++++++ 3 files changed, 1419 insertions(+), 1 deletion(-) create mode 100644 counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json diff --git a/counterparty-core/counterpartycore/test/api_v2_test.py b/counterparty-core/counterpartycore/test/api_v2_test.py index 8ae1de76cc..ccb3ad3d8f 100644 --- a/counterparty-core/counterpartycore/test/api_v2_test.py +++ b/counterparty-core/counterpartycore/test/api_v2_test.py @@ -1,3 +1,4 @@ +import json import tempfile import pytest @@ -15,11 +16,12 @@ FIXTURE_SQL_FILE = CURR_DIR + "/fixtures/scenarios/unittest_fixture.sql" FIXTURE_DB = tempfile.gettempdir() + "/fixtures.unittest_fixture.db" +API_V2_FIXTURES = CURR_DIR + "/fixtures/api_v2_fixtures.json" API_ROOT = "http://api:api@localhost:10009" @pytest.mark.usefixtures("api_server_v2") -def test_api_v2(): +def test_api_v2(request): block_index = 310491 address = ADDR[0] asset = "NODIVISIBLE" @@ -30,6 +32,10 @@ def test_api_v2(): event = "CREDIT" event_index = 10 exclude_routes = ["compose", "unpack", "info", "mempool", "healthz", "backend"] + results = {} + fixtures = {} + with open(API_V2_FIXTURES, "r") as f: + fixtures = json.load(f) for route in routes.ROUTES: if any([exclude in route for exclude in exclude_routes]): @@ -49,9 +55,17 @@ def test_api_v2(): url = url.replace("", dispsenser_hash) else: url = url.replace("", tx_hash) + if route.startswith("/events"): + url += "?limit=5" # print(url) result = requests.get(url) # noqa: S113 + results[url] = result.json() assert result.status_code == 200 + assert results[url] == fixtures[url] + + if request.config.getoption("saveapifixtures"): + with open(API_V2_FIXTURES, "w") as f: + f.write(json.dumps(results, indent=4)) @pytest.mark.usefixtures("api_server_v2") diff --git a/counterparty-core/counterpartycore/test/conftest.py b/counterparty-core/counterpartycore/test/conftest.py index 613db5ca3f..f196be1d1a 100644 --- a/counterparty-core/counterpartycore/test/conftest.py +++ b/counterparty-core/counterpartycore/test/conftest.py @@ -179,6 +179,12 @@ def pytest_addoption(parser): parser.addoption( "--testbook", action="store_true", default=False, help="Include testnet test book" ) + parser.addoption( + "--saveapifixtures", + action="store_true", + default=False, + help="Generate api v2 fixtures for tests", + ) @pytest.fixture(scope="function") diff --git a/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json b/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json new file mode 100644 index 0000000000..463f90c33d --- /dev/null +++ b/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json @@ -0,0 +1,1398 @@ +{ + "http://api:api@localhost:10009/blocks": [ + { + "block_index": 310500, + "block_hash": "54aeaf47d5387964e2d51617bf3af50520a0449410e0d096cf8c2aa9dad5550b", + "block_time": 310500000, + "previous_block_hash": null, + "difficulty": null, + "ledger_hash": "5ffefc7a2724be6bd697796bb82638ec913c5cbb73627153d1a13b48c7a6c02d", + "txlist_hash": "35f4a33840d002ab4e0e44f11c1749ae95b41376927fb346140508b32518edd1", + "messages_hash": "45f296a535c13129cb1aaeb4e28a03e04ad902917891c39ae59ea2894e9f868f" + }, + { + "block_index": 310499, + "block_hash": "1950e1a4d7fc820ed9603f6df6819c3c953c277c726340dec2a4253e261a1764", + "block_time": 310499000, + "previous_block_hash": null, + "difficulty": null, + "ledger_hash": "b9fcbdafddd46fdda061f6e9f8744b426b6ca37e32b315df1098cbc7899ae9b9", + "txlist_hash": "032166892f568bb97f4f69ef5bdf49cc1b15cc9f8c7f6c1f3e1f9d54816ad7e5", + "messages_hash": "d6aedacd4f81520d86ae47c9c776d17a213c706a5cf7c91203a4299261d1648c" + }, + { + "block_index": 310498, + "block_hash": "b7058b6d1ddc325a10bf33144937e06ce6025215b416518ae120da9440ae279e", + "block_time": 310498000, + "previous_block_hash": null, + "difficulty": null, + "ledger_hash": "5fe6cdb0828379bf240fad99c68bba34e1889bbc19605ce5c297b82352264414", + "txlist_hash": "b488f6f0e6c233f202ee17c0843236d464144e79c870af88bae56355ae9372b7", + "messages_hash": "113207bd13dda56b5e5edf305f70a56e62cc861184e1e95a64e79ce100462c98" + }, + { + "block_index": 310497, + "block_hash": "f1118591fe79b8bf52ccf0c5de9826bfd266b1fdc24b44676cf22bbcc76d464e", + "block_time": 310497000, + "previous_block_hash": null, + "difficulty": null, + "ledger_hash": "28c6e92b2299b9cbbb5953f8b7ff3de0fe962d15642ba27e43faa64e1935e819", + "txlist_hash": "ff8136601b9e0138a999d1f0467af6e8535a2bcdd2b622af7be0178a083b9519", + "messages_hash": "ac8d8759fbddc8f92ad8b5d8b4637a63b8d21a04ba1a4126baf2b42a87edfce3" + }, + { + "block_index": 310496, + "block_hash": "65884816927e8c566655e85c07bc2bc2c7ee26e625742f219939d43238fb31f8", + "block_time": 310496000, + "previous_block_hash": null, + "difficulty": null, + "ledger_hash": "7ac6121c624b634f44695172761830926afe76bb18c4cc9195773f3a26966941", + "txlist_hash": "9eda85cce745579122ba9c6e24b63cd83f2e5161031a34e6ee9bf08b80823cb4", + "messages_hash": "1b1ed76f99d39b36f4d0737299ce15b21fed9e077d0476658c023b09819853a7" + }, + { + "block_index": 310495, + "block_hash": "4769aa7030f28a05a137a85ef4ee0c1765c37013773212b93ec90f1227168b67", + "block_time": 310495000, + "previous_block_hash": null, + "difficulty": null, + "ledger_hash": "5a7e5a36882466373d576bb5f4ccd1bc72ecaf548b9589baa803a7275a7a24cd", + "txlist_hash": "09e9db121649cacd979fd18bbaa35e519361e727e7e072e2f2f86291160cdb29", + "messages_hash": "56518bc9abc11bf108188834058bb9c51c9b8dc3b6276116c5b786b07c797fab" + }, + { + "block_index": 310494, + "block_hash": "7dda1d3e12785313d5651ee5314d0aecf17588196f9150b10c55695dbaebee5d", + "block_time": 310494000, + "previous_block_hash": null, + "difficulty": null, + "ledger_hash": "72d71bd72263699ea9f2b097ad141be5bc394f49d8b0b0a6b2ff6a87b0ee3919", + "txlist_hash": "9350c3ba33d0546d1194c5fa767ced28834b26246aedc56d89b1d48ec4f26014", + "messages_hash": "0d3c87692d49dc033eed975eb8b8ee17ff2f0f877c8ed5a5866f73ce63bf8715" + }, + { + "block_index": 310493, + "block_hash": "c19e2915b750279b2be4b52e57e5ce29f63dffb4e14d9aad30c9e820affc0cbf", + "block_time": 310493000, + "previous_block_hash": null, + "difficulty": null, + "ledger_hash": "29119cd30a4733916fbfd0551506eaa16f7bb1bdfbdf8d17ac4e5bb20d1cb09c", + "txlist_hash": "7ec4cfa94544900c8e8732ad51be7cee6452aa1884ea940cd5c98862fb4aaba6", + "messages_hash": "53a339feb73df3a98bc4acc84af77e111d4780533c8f5a26cf250594d9613cf2" + }, + { + "block_index": 310492, + "block_hash": "8a09b2faf0a7ad67eb4ab5c948b9769fc87eb2ec5e16108f2cde8bd9e6cf7607", + "block_time": 310492000, + "previous_block_hash": null, + "difficulty": null, + "ledger_hash": "98af18583618fdeed545347c013763d068e8294405d265911cc5e1bc420bc740", + "txlist_hash": "daf4d2c1a1ad5206abcf7744bdd06fae99c442fb2607a843dcabb5727d02916e", + "messages_hash": "0d34fbc26126add5a57b7e8f6f71bad150d7232abf046f3fa9b1fc72b10d61b2" + }, + { + "block_index": 310491, + "block_hash": "811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16", + "block_time": 310491000, + "previous_block_hash": null, + "difficulty": null, + "ledger_hash": "3114d8091cfcaa9944c6fab49d51950535c4ef269877d58c372ed80b2b472ec6", + "txlist_hash": "f065728a3544adc085fae976759c0d040a34ca0a8ddd39260b55f0262cd5baa8", + "messages_hash": "9671cfedb3124b67ed996c547cb26a32e95490009ad56065c79be54a28c45994" + } + ], + "http://api:api@localhost:10009/blocks/310491": { + "block_index": 310491, + "block_hash": "811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16", + "block_time": 310491000, + "previous_block_hash": null, + "difficulty": null, + "ledger_hash": "3114d8091cfcaa9944c6fab49d51950535c4ef269877d58c372ed80b2b472ec6", + "txlist_hash": "f065728a3544adc085fae976759c0d040a34ca0a8ddd39260b55f0262cd5baa8", + "messages_hash": "9671cfedb3124b67ed996c547cb26a32e95490009ad56065c79be54a28c45994" + }, + "http://api:api@localhost:10009/blocks/310491/transactions": [ + { + "tx_index": 492, + "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", + "block_index": 310491, + "block_hash": "811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16", + "block_time": 310491000, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "", + "btc_amount": 0, + "fee": 6800, + "data": "0000000a00000000000000010000000005f5e100000000000000000000000000000c350007d000000000000dbba0", + "supported": 1 + } + ], + "http://api:api@localhost:10009/blocks/310491/events": [ + { + "event_index": 1182, + "event": "BLOCK_PARSED", + "bindings": { + "block_index": 310491, + "ledger_hash": "3114d8091cfcaa9944c6fab49d51950535c4ef269877d58c372ed80b2b472ec6", + "messages_hash": "9671cfedb3124b67ed996c547cb26a32e95490009ad56065c79be54a28c45994", + "txlist_hash": "f065728a3544adc085fae976759c0d040a34ca0a8ddd39260b55f0262cd5baa8" + }, + "block_index": 310491, + "timestamp": 0 + }, + { + "event_index": 1181, + "event": "TRANSACTION_PARSED", + "bindings": { + "supported": true, + "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", + "tx_index": 492 + }, + "block_index": 310491, + "timestamp": 0 + }, + { + "event_index": 1180, + "event": "OPEN_ORDER", + "bindings": { + "block_index": 310491, + "expiration": 2000, + "expire_index": 312491, + "fee_provided": 6800, + "fee_provided_remaining": 6800, + "fee_required": 900000, + "fee_required_remaining": 900000, + "get_asset": "BTC", + "get_quantity": 800000, + "get_remaining": 800000, + "give_asset": "XCP", + "give_quantity": 100000000, + "give_remaining": 100000000, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "status": "open", + "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", + "tx_index": 492 + }, + "block_index": 310491, + "timestamp": 0 + }, + { + "event_index": 1179, + "event": "DEBIT", + "bindings": { + "action": "open order", + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "block_index": 310491, + "event": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", + "quantity": 100000000, + "tx_index": 492 + }, + "block_index": 310491, + "timestamp": 0 + }, + { + "event_index": 1178, + "event": "NEW_TRANSACTION", + "bindings": { + "block_hash": "811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16", + "block_index": 310491, + "block_time": 310491000, + "btc_amount": 0, + "data": "0000000a00000000000000010000000005f5e100000000000000000000000000000c350007d000000000000dbba0", + "destination": "", + "fee": 6800, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "supported": true, + "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", + "tx_index": 492 + }, + "block_index": 310491, + "timestamp": 0 + }, + { + "event_index": 1177, + "event": "NEW_BLOCK", + "bindings": { + "block_hash": "811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16", + "block_index": 310491, + "block_time": 310491000, + "difficulty": null, + "ledger_hash": null, + "previous_block_hash": null, + "txlist_hash": null + }, + "block_index": 310491, + "timestamp": 0 + } + ], + "http://api:api@localhost:10009/blocks/310491/events/counts": [ + { + "event": "BLOCK_PARSED", + "event_count": 1 + }, + { + "event": "DEBIT", + "event_count": 1 + }, + { + "event": "NEW_BLOCK", + "event_count": 1 + }, + { + "event": "NEW_TRANSACTION", + "event_count": 1 + }, + { + "event": "OPEN_ORDER", + "event_count": 1 + }, + { + "event": "TRANSACTION_PARSED", + "event_count": 1 + } + ], + "http://api:api@localhost:10009/blocks/310491/events/CREDIT": [], + "http://api:api@localhost:10009/blocks/310491/credits": [], + "http://api:api@localhost:10009/blocks/310491/debits": [ + { + "block_index": 310491, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 100000000, + "action": "open order", + "event": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", + "tx_index": 492 + } + ], + "http://api:api@localhost:10009/blocks/310491/expirations": [], + "http://api:api@localhost:10009/blocks/310491/cancels": [], + "http://api:api@localhost:10009/blocks/310491/destructions": [], + "http://api:api@localhost:10009/blocks/310491/issuances": [], + "http://api:api@localhost:10009/blocks/310491/sends": [], + "http://api:api@localhost:10009/blocks/310491/dispenses": [], + "http://api:api@localhost:10009/blocks/310491/sweeps": [], + "http://api:api@localhost:10009/transactions/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { + "tx_index": 492, + "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", + "block_index": 310491, + "block_hash": "811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16", + "block_time": 310491000, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "", + "btc_amount": 0, + "fee": 6800, + "data": "0000000a00000000000000010000000005f5e100000000000000000000000000000c350007d000000000000dbba0", + "supported": 1 + }, + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/balances": [ + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "A95428956661682277", + "quantity": 100000000 + }, + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "CALLABLE", + "quantity": 1000 + }, + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "DIVISIBLE", + "quantity": 98800000000 + }, + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "LOCKED", + "quantity": 1000 + }, + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "MAXI", + "quantity": 9223372036854775807 + }, + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "NODIVISIBLE", + "quantity": 985 + }, + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "PARENT", + "quantity": 100000000 + }, + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 91875000000 + } + ], + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/balances/NODIVISIBLE": { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "NODIVISIBLE", + "quantity": 985 + }, + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/credits": [ + { + "block_index": 310000, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 93000000000, + "calling_function": "burn", + "event": "6dc5b0a33d4d4297e0f5cc2d23ae307951d32aab2d86b7fa147b385219f3a597", + "tx_index": 1 + }, + { + "block_index": 310001, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "DIVISIBLE", + "quantity": 100000000000, + "calling_function": "issuance", + "event": "1fc2e5a57f584b2f2edd05676e75c33d03eed1d3098cc0550ea33474e3ec9db1", + "tx_index": 2 + }, + { + "block_index": 310002, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "NODIVISIBLE", + "quantity": 1000, + "calling_function": "issuance", + "event": "7b1bf5144346279271b1ff78664f118224fe27fd8679d6c1519345f9c6c54584", + "tx_index": 3 + }, + { + "block_index": 310003, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "CALLABLE", + "quantity": 1000, + "calling_function": "issuance", + "event": "c26f3a0c4e57e41919ff27aae95a9a9d4d65d34c6da6f1893884a17c8d407140", + "tx_index": 4 + }, + { + "block_index": 310004, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "LOCKED", + "quantity": 1000, + "calling_function": "issuance", + "event": "90b5734be98b0f2a0bd4b6a269c8db3368e2e387bb890ade239951d05423b4da", + "tx_index": 5 + }, + { + "block_index": 310016, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "MAXI", + "quantity": 9223372036854775807, + "calling_function": "issuance", + "event": "bd4e9cbbe69c2db893cd32182a2d315c89c45ba4e31aa5775d1fe42d841cea39", + "tx_index": 17 + }, + { + "block_index": 310020, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 0, + "calling_function": "filled", + "event": "5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93", + "tx_index": 21 + }, + { + "block_index": 310102, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 9, + "calling_function": "bet settled", + "event": "16462eac6c795cea6e5985ee063867d8c61ae24373df02048186d28118d25bae", + "tx_index": 103 + }, + { + "block_index": 310102, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 0, + "calling_function": "feed fee", + "event": "16462eac6c795cea6e5985ee063867d8c61ae24373df02048186d28118d25bae", + "tx_index": 103 + }, + { + "block_index": 310482, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 100000000, + "calling_function": "send", + "event": "c8716524f33646b9af94d6f5e52494ff3b34466497094b1db2ab920e4f79bc34", + "tx_index": 483 + }, + { + "block_index": 310497, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "PARENT", + "quantity": 100000000, + "calling_function": "issuance", + "event": "076ae3d8eeb7fb40d2ae27692340157c746d9832806766b0dac5adb1526dc78f", + "tx_index": 498 + }, + { + "block_index": 310498, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "A95428956661682277", + "quantity": 100000000, + "calling_function": "issuance", + "event": "0abfce2662c05852fd8b181a60900678643cedad47b23a853b8c4eda82cb2cbf", + "tx_index": 499 + } + ], + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/debits": [ + { + "block_index": 310001, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 50000000, + "action": "issuance fee", + "event": "1fc2e5a57f584b2f2edd05676e75c33d03eed1d3098cc0550ea33474e3ec9db1", + "tx_index": 2 + }, + { + "block_index": 310002, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 50000000, + "action": "issuance fee", + "event": "7b1bf5144346279271b1ff78664f118224fe27fd8679d6c1519345f9c6c54584", + "tx_index": 3 + }, + { + "block_index": 310003, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 50000000, + "action": "issuance fee", + "event": "c26f3a0c4e57e41919ff27aae95a9a9d4d65d34c6da6f1893884a17c8d407140", + "tx_index": 4 + }, + { + "block_index": 310004, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 50000000, + "action": "issuance fee", + "event": "90b5734be98b0f2a0bd4b6a269c8db3368e2e387bb890ade239951d05423b4da", + "tx_index": 5 + }, + { + "block_index": 310005, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 0, + "action": "issuance fee", + "event": "344dcc8909ca3a137630726d0071dfd2df4f7c855bac150c7d3a8367835c90bc", + "tx_index": 6 + }, + { + "block_index": 310006, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 100000000, + "action": "open order", + "event": "4f0433ba841038e2e16328445930dd7bca35309b14b0da4451c8f94c631368b8", + "tx_index": 7 + }, + { + "block_index": 310007, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "DIVISIBLE", + "quantity": 100000000, + "action": "send", + "event": "6e91ae23de2035e3e28c3322712212333592a1f666bcff9dd91aec45d5ea2753", + "tx_index": 8 + }, + { + "block_index": 310008, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 100000000, + "action": "send", + "event": "4fd55abadfdbe77c3bda2431749cca934a29994a179620a62c1b57f28bd62a43", + "tx_index": 9 + }, + { + "block_index": 310009, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 100000000, + "action": "open order", + "event": "21460d5c07284f9be9baf824927d0d4e4eb790e297f3162305841607b672349b", + "tx_index": 10 + }, + { + "block_index": 310010, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 100000000, + "action": "open order", + "event": "1899b2e6ec36ba4bc9d035e6640b0a62b08c3a147c77c89183a77d9ed9081b3a", + "tx_index": 11 + }, + { + "block_index": 310012, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 300000000, + "action": "send", + "event": "698e97e507da8623cf38ab42701853443c8f7fe0d93b4674aabb42f9800ee9d6", + "tx_index": 13 + }, + { + "block_index": 310013, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "DIVISIBLE", + "quantity": 1000000000, + "action": "send", + "event": "0cfeeb559ed794d067557df0376a6c213b48b174b80cdb2c3c6d365cf538e132", + "tx_index": 14 + }, + { + "block_index": 310014, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "NODIVISIBLE", + "quantity": 5, + "action": "send", + "event": "1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a", + "tx_index": 15 + }, + { + "block_index": 310015, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "NODIVISIBLE", + "quantity": 10, + "action": "send", + "event": "e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c", + "tx_index": 16 + }, + { + "block_index": 310016, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 50000000, + "action": "issuance fee", + "event": "bd4e9cbbe69c2db893cd32182a2d315c89c45ba4e31aa5775d1fe42d841cea39", + "tx_index": 17 + }, + { + "block_index": 310019, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 9, + "action": "bet", + "event": "2a2169991597036b6dad687ea1feffd55465a204466f40c35cbba811cb3109b1", + "tx_index": 20 + }, + { + "block_index": 310110, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "DIVISIBLE", + "quantity": 100000000, + "action": "send", + "event": "f6a0f819e899b407cbfa07b4eff3d58902af3899abfbaa47d5f31d5b398e76e7", + "tx_index": 111 + }, + { + "block_index": 310481, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 100000000, + "action": "send", + "event": "b00bdf03402d81a2cbdbeac4b0df90cff5ab6bf9688f653383d49fe42b8422a5", + "tx_index": 482 + }, + { + "block_index": 310491, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 100000000, + "action": "open order", + "event": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", + "tx_index": 492 + }, + { + "block_index": 310497, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 50000000, + "action": "issuance fee", + "event": "076ae3d8eeb7fb40d2ae27692340157c746d9832806766b0dac5adb1526dc78f", + "tx_index": 498 + }, + { + "block_index": 310498, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 25000000, + "action": "issuance fee", + "event": "0abfce2662c05852fd8b181a60900678643cedad47b23a853b8c4eda82cb2cbf", + "tx_index": 499 + } + ], + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/bets": [ + { + "tx_index": 102, + "tx_hash": "db4ea092bea6036e3d1e5f6ec863db9b900252b4f4d6d9faa6165323f433c51e", + "block_index": 310101, + "source": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "feed_address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "bet_type": 3, + "deadline": 1388000200, + "wager_quantity": 10, + "wager_remaining": 10, + "counterwager_quantity": 10, + "counterwager_remaining": 10, + "target_value": 0.0, + "leverage": 5040, + "expiration": 1000, + "expire_index": 311101, + "fee_fraction_int": 5000000, + "status": "open" + } + ], + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/broadcasts": [ + { + "tx_index": 103, + "tx_hash": "16462eac6c795cea6e5985ee063867d8c61ae24373df02048186d28118d25bae", + "block_index": 310102, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "timestamp": 1388000002, + "value": 1.0, + "fee_fraction_int": 5000000, + "text": "Unit Test", + "locked": 0, + "status": "valid" + }, + { + "tx_index": 18, + "tx_hash": "d14388b74b63d93e4477b1fe8426028bb8ab20656703e3ce8deeb23c2fe0b8af", + "block_index": 310017, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "timestamp": 1388000000, + "value": 1.0, + "fee_fraction_int": 5000000, + "text": "Unit Test", + "locked": 0, + "status": "valid" + } + ], + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/burns": [ + { + "tx_index": 1, + "tx_hash": "6dc5b0a33d4d4297e0f5cc2d23ae307951d32aab2d86b7fa147b385219f3a597", + "block_index": 310000, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "burned": 62000000, + "earned": 93000000000, + "status": "valid" + } + ], + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sends": [ + { + "tx_index": 8, + "tx_hash": "6e91ae23de2035e3e28c3322712212333592a1f666bcff9dd91aec45d5ea2753", + "block_index": 310007, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "asset": "DIVISIBLE", + "quantity": 100000000, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 9, + "tx_hash": "4fd55abadfdbe77c3bda2431749cca934a29994a179620a62c1b57f28bd62a43", + "block_index": 310008, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "asset": "XCP", + "quantity": 100000000, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 13, + "tx_hash": "698e97e507da8623cf38ab42701853443c8f7fe0d93b4674aabb42f9800ee9d6", + "block_index": 310012, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", + "asset": "XCP", + "quantity": 300000000, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 14, + "tx_hash": "0cfeeb559ed794d067557df0376a6c213b48b174b80cdb2c3c6d365cf538e132", + "block_index": 310013, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", + "asset": "DIVISIBLE", + "quantity": 1000000000, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 15, + "tx_hash": "1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a", + "block_index": 310014, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "asset": "NODIVISIBLE", + "quantity": 5, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 16, + "tx_hash": "e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c", + "block_index": 310015, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", + "asset": "NODIVISIBLE", + "quantity": 10, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 111, + "tx_hash": "f6a0f819e899b407cbfa07b4eff3d58902af3899abfbaa47d5f31d5b398e76e7", + "block_index": 310110, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy", + "asset": "DIVISIBLE", + "quantity": 100000000, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 482, + "tx_hash": "b00bdf03402d81a2cbdbeac4b0df90cff5ab6bf9688f653383d49fe42b8422a5", + "block_index": 310481, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "asset": "XCP", + "quantity": 100000000, + "status": "valid", + "msg_index": 0, + "memo": "68656c6c6f" + } + ], + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/receives": [ + { + "tx_index": 483, + "tx_hash": "c8716524f33646b9af94d6f5e52494ff3b34466497094b1db2ab920e4f79bc34", + "block_index": 310482, + "source": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "destination": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 100000000, + "status": "valid", + "msg_index": 0, + "memo": "fade0001" + } + ], + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sends/NODIVISIBLE": [ + { + "tx_index": 15, + "tx_hash": "1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a", + "block_index": 310014, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "asset": "NODIVISIBLE", + "quantity": 5, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 16, + "tx_hash": "e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c", + "block_index": 310015, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", + "asset": "NODIVISIBLE", + "quantity": 10, + "status": "valid", + "msg_index": 0, + "memo": null + } + ], + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/receives/NODIVISIBLE": [], + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/dispensers": [], + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/dispensers/NODIVISIBLE": [], + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sweeps": [], + "http://api:api@localhost:10009/assets": [ + { + "asset": "A95428956661682277", + "asset_longname": "PARENT.already.issued" + }, + { + "asset": "CALLABLE", + "asset_longname": null + }, + { + "asset": "DIVIDEND", + "asset_longname": null + }, + { + "asset": "DIVISIBLE", + "asset_longname": null + }, + { + "asset": "LOCKED", + "asset_longname": null + }, + { + "asset": "LOCKEDPREV", + "asset_longname": null + }, + { + "asset": "MAXI", + "asset_longname": null + }, + { + "asset": "NODIVISIBLE", + "asset_longname": null + }, + { + "asset": "PARENT", + "asset_longname": null + }, + { + "asset": "PAYTOSCRIPT", + "asset_longname": null + } + ], + "http://api:api@localhost:10009/assets/NODIVISIBLE": { + "asset": "NODIVISIBLE", + "asset_longname": null, + "owner": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "divisible": false, + "locked": false, + "supply": 1000, + "description": "No divisible asset", + "issuer": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "holder_count": 3 + }, + "http://api:api@localhost:10009/assets/NODIVISIBLE/balances": [ + { + "address": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", + "asset": "NODIVISIBLE", + "quantity": 10 + }, + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "NODIVISIBLE", + "quantity": 985 + }, + { + "address": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "asset": "NODIVISIBLE", + "quantity": 5 + } + ], + "http://api:api@localhost:10009/assets/NODIVISIBLE/balances/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc": { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "NODIVISIBLE", + "quantity": 985 + }, + "http://api:api@localhost:10009/assets/NODIVISIBLE/orders": [], + "http://api:api@localhost:10009/assets/NODIVISIBLE/credits": [ + { + "block_index": 310002, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "NODIVISIBLE", + "quantity": 1000, + "calling_function": "issuance", + "event": "7b1bf5144346279271b1ff78664f118224fe27fd8679d6c1519345f9c6c54584", + "tx_index": 3 + }, + { + "block_index": 310014, + "address": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "asset": "NODIVISIBLE", + "quantity": 5, + "calling_function": "send", + "event": "1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a", + "tx_index": 15 + }, + { + "block_index": 310015, + "address": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", + "asset": "NODIVISIBLE", + "quantity": 10, + "calling_function": "send", + "event": "e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c", + "tx_index": 16 + } + ], + "http://api:api@localhost:10009/assets/NODIVISIBLE/debits": [ + { + "block_index": 310014, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "NODIVISIBLE", + "quantity": 5, + "action": "send", + "event": "1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a", + "tx_index": 15 + }, + { + "block_index": 310015, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "NODIVISIBLE", + "quantity": 10, + "action": "send", + "event": "e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c", + "tx_index": 16 + } + ], + "http://api:api@localhost:10009/assets/NODIVISIBLE/dividends": [], + "http://api:api@localhost:10009/assets/NODIVISIBLE/issuances": [ + { + "tx_index": 3, + "tx_hash": "7b1bf5144346279271b1ff78664f118224fe27fd8679d6c1519345f9c6c54584", + "msg_index": 0, + "block_index": 310002, + "asset": "NODIVISIBLE", + "quantity": 1000, + "divisible": 0, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "issuer": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "transfer": 0, + "callable": 0, + "call_date": 0, + "call_price": 0.0, + "description": "No divisible asset", + "fee_paid": 50000000, + "locked": 0, + "status": "valid", + "asset_longname": null, + "reset": 0 + } + ], + "http://api:api@localhost:10009/assets/NODIVISIBLE/sends": [ + { + "tx_index": 15, + "tx_hash": "1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a", + "block_index": 310014, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "asset": "NODIVISIBLE", + "quantity": 5, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 16, + "tx_hash": "e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c", + "block_index": 310015, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", + "asset": "NODIVISIBLE", + "quantity": 10, + "status": "valid", + "msg_index": 0, + "memo": null + } + ], + "http://api:api@localhost:10009/assets/NODIVISIBLE/dispensers": [], + "http://api:api@localhost:10009/assets/NODIVISIBLE/dispensers/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc": [], + "http://api:api@localhost:10009/assets/NODIVISIBLE/holders": [ + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "address_quantity": 985, + "escrow": null + }, + { + "address": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "address_quantity": 5, + "escrow": null + }, + { + "address": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", + "address_quantity": 10, + "escrow": null + } + ], + "http://api:api@localhost:10009/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": [ + { + "tx_index": 492, + "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", + "block_index": 310492, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "give_asset": "XCP", + "give_quantity": 100000000, + "give_remaining": 0, + "get_asset": "BTC", + "get_quantity": 800000, + "get_remaining": 0, + "expiration": 2000, + "expire_index": 312491, + "fee_required": 900000, + "fee_required_remaining": 892800, + "fee_provided": 6800, + "fee_provided_remaining": 6800, + "status": "open" + } + ], + "http://api:api@localhost:10009/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/matches": [ + { + "id": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498_1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81", + "tx0_index": 492, + "tx0_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", + "tx0_address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "tx1_index": 493, + "tx1_hash": "1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81", + "tx1_address": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "forward_asset": "XCP", + "forward_quantity": 100000000, + "backward_asset": "BTC", + "backward_quantity": 800000, + "tx0_block_index": 310491, + "tx1_block_index": 310492, + "block_index": 310492, + "tx0_expiration": 2000, + "tx1_expiration": 2000, + "match_expire_index": 310512, + "fee_paid": 7200, + "status": "pending" + } + ], + "http://api:api@localhost:10009/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/btcpays": [], + "http://api:api@localhost:10009/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42": [], + "http://api:api@localhost:10009/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42/matches": [], + "http://api:api@localhost:10009/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42/resolutions": [], + "http://api:api@localhost:10009/burns": [ + { + "tx_index": 1, + "tx_hash": "6dc5b0a33d4d4297e0f5cc2d23ae307951d32aab2d86b7fa147b385219f3a597", + "block_index": 310000, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "burned": 62000000, + "earned": 93000000000, + "status": "valid" + }, + { + "tx_index": 104, + "tx_hash": "65d4048700fb8ae03f321be93c6669b8497f506a1f43920f96d994f43358c35b", + "block_index": 310103, + "source": "myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM", + "burned": 62000000, + "earned": 92999138821, + "status": "valid" + }, + { + "tx_index": 105, + "tx_hash": "95332a7e3e2b04f2c10e3027327bfc31b686947fb05381e28903e3ff569bd4ff", + "block_index": 310104, + "source": "munimLLHjPhGeSU5rYB2HN79LJa8bRZr5b", + "burned": 62000000, + "earned": 92999130460, + "status": "valid" + }, + { + "tx_index": 106, + "tx_hash": "e062d1ebf4cb71bd22d80c949b956f5286080838a7607ccf87945b2b3abfcafa", + "block_index": 310105, + "source": "mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42", + "burned": 62000000, + "earned": 92999122099, + "status": "valid" + }, + { + "tx_index": 107, + "tx_hash": "bbf0b9f6992755a3e371fb0c0b72f6828831e81c6f7ada6f95ba1104fb901ac3", + "block_index": 310106, + "source": "mrPk7hTeZWjjSCrMTC2ET4SAUThQt7C4uK", + "burned": 10000, + "earned": 14999857, + "status": "valid" + }, + { + "tx_index": 109, + "tx_hash": "93c6d2499a0536c31c77a3db3fc9fc8456fbd0726c45b8f716af16f938727a73", + "block_index": 310108, + "source": "2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy", + "burned": 31000000, + "earned": 46499548508, + "status": "valid" + }, + { + "tx_index": 117, + "tx_hash": "27929c4fcad307a76ea7da34dd2691084f678a22ee43ce7f3842b78730ee08f9", + "block_index": 310116, + "source": "tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx", + "burned": 62000000, + "earned": 92999030129, + "status": "valid" + }, + { + "tx_index": 494, + "tx_hash": "c0733e1287afb1bb3d2fdacd1db7c74ea84f14362f3a8d1c038e662e1d0b1b1a", + "block_index": 310493, + "source": "mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH", + "burned": 62000000, + "earned": 92995878046, + "status": "valid" + } + ], + "http://api:api@localhost:10009/dispensers/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": [], + "http://api:api@localhost:10009/dispensers/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/dispenses": [], + "http://api:api@localhost:10009/events?limit=5": [ + { + "event_index": 1237, + "event": "BLOCK_PARSED", + "bindings": { + "block_index": 310500, + "ledger_hash": "5ffefc7a2724be6bd697796bb82638ec913c5cbb73627153d1a13b48c7a6c02d", + "messages_hash": "45f296a535c13129cb1aaeb4e28a03e04ad902917891c39ae59ea2894e9f868f", + "txlist_hash": "35f4a33840d002ab4e0e44f11c1749ae95b41376927fb346140508b32518edd1" + }, + "block_index": 310500, + "timestamp": 0 + }, + { + "event_index": 1236, + "event": "NEW_BLOCK", + "bindings": { + "block_hash": "54aeaf47d5387964e2d51617bf3af50520a0449410e0d096cf8c2aa9dad5550b", + "block_index": 310500, + "block_time": 310500000, + "difficulty": null, + "ledger_hash": null, + "previous_block_hash": null, + "txlist_hash": null + }, + "block_index": 310500, + "timestamp": 0 + }, + { + "event_index": 1235, + "event": "BLOCK_PARSED", + "bindings": { + "block_index": 310499, + "ledger_hash": "b9fcbdafddd46fdda061f6e9f8744b426b6ca37e32b315df1098cbc7899ae9b9", + "messages_hash": "d6aedacd4f81520d86ae47c9c776d17a213c706a5cf7c91203a4299261d1648c", + "txlist_hash": "032166892f568bb97f4f69ef5bdf49cc1b15cc9f8c7f6c1f3e1f9d54816ad7e5" + }, + "block_index": 310499, + "timestamp": 0 + }, + { + "event_index": 1234, + "event": "NEW_BLOCK", + "bindings": { + "block_hash": "1950e1a4d7fc820ed9603f6df6819c3c953c277c726340dec2a4253e261a1764", + "block_index": 310499, + "block_time": 310499000, + "difficulty": null, + "ledger_hash": null, + "previous_block_hash": null, + "txlist_hash": null + }, + "block_index": 310499, + "timestamp": 0 + }, + { + "event_index": 1233, + "event": "BLOCK_PARSED", + "bindings": { + "block_index": 310498, + "ledger_hash": "5fe6cdb0828379bf240fad99c68bba34e1889bbc19605ce5c297b82352264414", + "messages_hash": "113207bd13dda56b5e5edf305f70a56e62cc861184e1e95a64e79ce100462c98", + "txlist_hash": "b488f6f0e6c233f202ee17c0843236d464144e79c870af88bae56355ae9372b7" + }, + "block_index": 310498, + "timestamp": 0 + } + ], + "http://api:api@localhost:10009/events/10?limit=5": [ + { + "event_index": 10, + "event": "ASSET_CREATION", + "bindings": { + "asset_id": "697326324582", + "asset_longname": null, + "asset_name": "DIVISIBLE", + "block_index": 310001 + }, + "block_index": 310001, + "timestamp": 0 + } + ], + "http://api:api@localhost:10009/events/counts?limit=5": [ + { + "event": "ASSET_CREATION", + "event_count": 10 + }, + { + "event": "ASSET_ISSUANCE", + "event_count": 13 + }, + { + "event": "BET_MATCH", + "event_count": 1 + }, + { + "event": "BET_MATCH_RESOLUTON", + "event_count": 1 + }, + { + "event": "BET_MATCH_UPDATE", + "event_count": 1 + }, + { + "event": "BET_UPDATE", + "event_count": 2 + }, + { + "event": "BLOCK_PARSED", + "event_count": 502 + }, + { + "event": "BROADCAST", + "event_count": 8 + }, + { + "event": "BURN", + "event_count": 8 + }, + { + "event": "CREDIT", + "event_count": 34 + }, + { + "event": "DEBIT", + "event_count": 34 + }, + { + "event": "ENHANCED_SEND", + "event_count": 2 + }, + { + "event": "NEW_BLOCK", + "event_count": 502 + }, + { + "event": "NEW_TRANSACTION", + "event_count": 52 + }, + { + "event": "OPEN_BET", + "event_count": 5 + }, + { + "event": "OPEN_DISPENSER", + "event_count": 1 + }, + { + "event": "OPEN_ORDER", + "event_count": 6 + }, + { + "event": "ORDER_MATCH", + "event_count": 1 + }, + { + "event": "ORDER_UPDATE", + "event_count": 2 + }, + { + "event": "SEND", + "event_count": 9 + }, + { + "event": "TRANSACTION_PARSED", + "event_count": 44 + } + ], + "http://api:api@localhost:10009/events/CREDIT?limit=5": [ + { + "event_index": 1231, + "event": "CREDIT", + "bindings": { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "A95428956661682277", + "block_index": 310498, + "calling_function": "issuance", + "event": "0abfce2662c05852fd8b181a60900678643cedad47b23a853b8c4eda82cb2cbf", + "quantity": 100000000, + "tx_index": 499 + }, + "block_index": 310498, + "timestamp": 0 + }, + { + "event_index": 1223, + "event": "CREDIT", + "bindings": { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "PARENT", + "block_index": 310497, + "calling_function": "issuance", + "event": "076ae3d8eeb7fb40d2ae27692340157c746d9832806766b0dac5adb1526dc78f", + "quantity": 100000000, + "tx_index": 498 + }, + "block_index": 310497, + "timestamp": 0 + }, + { + "event_index": 1214, + "event": "CREDIT", + "bindings": { + "address": "mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj", + "asset": "XCP", + "block_index": 310496, + "calling_function": "send", + "event": "a35ab1736565aceddbd1d71f92fc7f39d1361006aa9099f731e54e762964d5ba", + "quantity": 92945878046, + "tx_index": 497 + }, + "block_index": 310496, + "timestamp": 0 + }, + { + "event_index": 1207, + "event": "CREDIT", + "bindings": { + "address": "mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj", + "asset": "DIVIDEND", + "block_index": 310495, + "calling_function": "send", + "event": "02156b9a1f643fb48330396274a37620c8abbbe5eddb2f8b53dadd135f5d2e2e", + "quantity": 10, + "tx_index": 496 + }, + "block_index": 310495, + "timestamp": 0 + }, + { + "event_index": 1201, + "event": "CREDIT", + "bindings": { + "address": "mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH", + "asset": "DIVIDEND", + "block_index": 310494, + "calling_function": "issuance", + "event": "321bed395482e034f2ce0a4dbf28d1f800592a658e26ea91ae9c5b0928204503", + "quantity": 100, + "tx_index": 495 + }, + "block_index": 310494, + "timestamp": 0 + } + ] +} \ No newline at end of file From 01cf5460be9fc23008c9fe5a973580a991f5fc3e Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 22 Apr 2024 13:46:49 +0200 Subject: [PATCH 072/280] Test and fix unpack route --- .../counterpartycore/lib/transaction.py | 128 ++-- .../counterpartycore/test/api_v2_test.py | 12 + .../test/fixtures/api_v2_unpack_fixtures.json | 710 ++++++++++++++++++ 3 files changed, 788 insertions(+), 62 deletions(-) create mode 100644 counterparty-core/counterpartycore/test/fixtures/api_v2_unpack_fixtures.json diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index 7828404c9f..60613b9bd4 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -1609,68 +1609,72 @@ def unpack(db, datahex: str, block_index: int = None): # Unknown message type message_data = {"error": "Unknown message type"} - # Bet - if message_type_id == messages.bet.ID: - message_type_name = "bet" - message_data = messages.bet.unpack(message, return_dict=True) - # Broadcast - elif message_type_id == messages.broadcast.ID: - message_type_name = "broadcast" - message_data = messages.broadcast.unpack(message, block_index, return_dict=True) - # BTCPay - elif message_type_id == messages.btcpay.ID: - message_type_name = "btcpay" - message_data = messages.btcpay.unpack(message, return_dict=True) - # Cancel - elif message_type_id == messages.cancel.ID: - message_type_name = "cancel" - message_data = messages.cancel.unpack(message, return_dict=True) - # Destroy - elif message_type_id == messages.destroy.ID: - message_type_name = "destroy" - message_data = messages.destroy.unpack(db, message, return_dict=True) - # Dispenser - elif message_type_id == messages.dispenser.ID: - message_type_name = "dispenser" - message_data = messages.dispenser.unpack(message, return_dict=True) - # Dividend - elif message_type_id == messages.dividend.ID: - message_type_name = "dividend" - message_data = messages.dividend.unpack(db, message, block_index, return_dict=True) - # Issuance - elif message_type_id in issuance_ids: - message_type_name = "issuance" - message_data = messages.issuance.unpack( - db, message, message_type_id, block_index, return_dict=True - ) - # Order - elif message_type_id == messages.order.ID: - message_type_name = "order" - message_data = messages.order.unpack(db, message, block_index, return_dict=True) - # Send - elif message_type_id == messages.send.ID: - message_type_name = "send" - message_data = messages.send.unpack(db, message, block_index) - # Enhanced send - elif message_type_id == messages.versions.enhanced_send.ID: - message_type_name = "enhanced_send" - message_data = messages.versions.enhanced_send.unpack(message, block_index) - # MPMA send - elif message_type_id == messages.versions.mpma.ID: - message_type_name = "mpma_send" - message_data = messages.versions.mpma.unpack(message, block_index) - # RPS - elif message_type_id == messages.rps.ID: - message_type_name = "rps" - message_data = messages.rps.unpack(message, return_dict=True) - # RPS Resolve - elif message_type_id == messages.rpsresolve.ID: - message_type_name = "rpsresolve" - message_data = messages.rpsresolve.unpack(message, return_dict=True) - # Sweep - elif message_type_id == messages.sweep.ID: - message_type_name = "sweep" - message_data = messages.sweep.unpack(message) + message_type_name = "unknown" + try: + # Bet + if message_type_id == messages.bet.ID: + message_type_name = "bet" + message_data = messages.bet.unpack(message, return_dict=True) + # Broadcast + elif message_type_id == messages.broadcast.ID: + message_type_name = "broadcast" + message_data = messages.broadcast.unpack(message, block_index, return_dict=True) + # BTCPay + elif message_type_id == messages.btcpay.ID: + message_type_name = "btcpay" + message_data = messages.btcpay.unpack(message, return_dict=True) + # Cancel + elif message_type_id == messages.cancel.ID: + message_type_name = "cancel" + message_data = messages.cancel.unpack(message, return_dict=True) + # Destroy + elif message_type_id == messages.destroy.ID: + message_type_name = "destroy" + message_data = messages.destroy.unpack(db, message, return_dict=True) + # Dispenser + elif message_type_id == messages.dispenser.ID: + message_type_name = "dispenser" + message_data = messages.dispenser.unpack(message, return_dict=True) + # Dividend + elif message_type_id == messages.dividend.ID: + message_type_name = "dividend" + message_data = messages.dividend.unpack(db, message, block_index, return_dict=True) + # Issuance + elif message_type_id in issuance_ids: + message_type_name = "issuance" + message_data = messages.issuance.unpack( + db, message, message_type_id, block_index, return_dict=True + ) + # Order + elif message_type_id == messages.order.ID: + message_type_name = "order" + message_data = messages.order.unpack(db, message, block_index, return_dict=True) + # Send + elif message_type_id == messages.send.ID: + message_type_name = "send" + message_data = messages.send.unpack(db, message, block_index) + # Enhanced send + elif message_type_id == messages.versions.enhanced_send.ID: + message_type_name = "enhanced_send" + message_data = messages.versions.enhanced_send.unpack(message, block_index) + # MPMA send + elif message_type_id == messages.versions.mpma.ID: + message_type_name = "mpma_send" + message_data = messages.versions.mpma.unpack(message, block_index) + # RPS + elif message_type_id == messages.rps.ID: + message_type_name = "rps" + message_data = messages.rps.unpack(message, return_dict=True) + # RPS Resolve + elif message_type_id == messages.rpsresolve.ID: + message_type_name = "rpsresolve" + message_data = messages.rpsresolve.unpack(message, return_dict=True) + # Sweep + elif message_type_id == messages.sweep.ID: + message_type_name = "sweep" + message_data = messages.sweep.unpack(message) + except exceptions.UnpackError as e: + message_data = {"error": str(e)} return { "message_type": message_type_name, diff --git a/counterparty-core/counterpartycore/test/api_v2_test.py b/counterparty-core/counterpartycore/test/api_v2_test.py index ccb3ad3d8f..edb79c6a85 100644 --- a/counterparty-core/counterpartycore/test/api_v2_test.py +++ b/counterparty-core/counterpartycore/test/api_v2_test.py @@ -68,6 +68,18 @@ def test_api_v2(request): f.write(json.dumps(results, indent=4)) +@pytest.mark.usefixtures("api_server_v2") +def test_api_v2_unpack(request, server_db): + with open(CURR_DIR + "/fixtures/api_v2_unpack_fixtures.json", "r") as f: + datas = json.load(f) + url = f"{API_ROOT}/transactions/unpack" + + for data in datas: + result = requests.get(url, params={"datahex": data["datahex"]}) # noqa: S113 + assert result.status_code == 200 + assert result.json() == data["result"] + + @pytest.mark.usefixtures("api_server_v2") def test_new_get_balances_by_address(): alice = ADDR[0] diff --git a/counterparty-core/counterpartycore/test/fixtures/api_v2_unpack_fixtures.json b/counterparty-core/counterpartycore/test/fixtures/api_v2_unpack_fixtures.json new file mode 100644 index 0000000000..dbe15ab232 --- /dev/null +++ b/counterparty-core/counterpartycore/test/fixtures/api_v2_unpack_fixtures.json @@ -0,0 +1,710 @@ +[ + { + "datahex": "00000014000000a25be34b66000000174876e800010000000000000000000f446976697369626c65206173736574", + "result": { + "message_type": "issuance", + "message_type_id": 20, + "message_data": { + "asset_id": 697326324582, + "asset": "DIVISIBLE", + "subasset_longname": null, + "quantity": 100000000000, + "divisible": true, + "lock": null, + "reset": null, + "callable": false, + "call_date": 0, + "call_price": 0.0, + "description": "Divisible asset", + "status": "valid" + } + } + }, + { + "datahex": "000000140006cad8dc7f0b6600000000000003e800000000000000000000124e6f20646976697369626c65206173736574", + "result": { + "message_type": "issuance", + "message_type_id": 20, + "message_data": { + "asset_id": 1911882621324134, + "asset": "NODIVISIBLE", + "subasset_longname": null, + "quantity": 1000, + "divisible": false, + "lock": null, + "reset": null, + "callable": false, + "call_date": 0, + "call_price": 0.0, + "description": "No divisible asset", + "status": "valid" + } + } + }, + { + "datahex": "0000001400000003c58e5c5600000000000003e8010000000000000000000e43616c6c61626c65206173736574", + "result": { + "message_type": "issuance", + "message_type_id": 20, + "message_data": { + "asset_id": 16199343190, + "asset": "CALLABLE", + "subasset_longname": null, + "quantity": 1000, + "divisible": true, + "lock": null, + "reset": null, + "callable": false, + "call_date": 0, + "call_price": 0.0, + "description": "Callable asset", + "status": "valid" + } + } + }, + { + "datahex": "0000001400000000082c82e300000000000003e8010000000000000000000c4c6f636b6564206173736574", + "result": { + "message_type": "issuance", + "message_type_id": 20, + "message_data": { + "asset_id": 137134819, + "asset": "LOCKED", + "subasset_longname": null, + "quantity": 1000, + "divisible": true, + "lock": null, + "reset": null, + "callable": false, + "call_date": 0, + "call_price": 0.0, + "description": "Locked asset", + "status": "valid" + } + } + }, + { + "datahex": "0000001400000000082c82e3000000000000000001000000000000000000044c4f434b", + "result": { + "message_type": "issuance", + "message_type_id": 20, + "message_data": { + "asset_id": 137134819, + "asset": "LOCKED", + "subasset_longname": null, + "quantity": 0, + "divisible": true, + "lock": null, + "reset": null, + "callable": false, + "call_date": 0, + "call_price": 0.0, + "description": "LOCK", + "status": "valid" + } + } + }, + { + "datahex": "0000000a00000000000000010000000005f5e100000000a25be34b660000000005f5e10007d00000000000000000", + "result": { + "message_type": "order", + "message_type_id": 10, + "message_data": { + "give_asset": "XCP", + "give_quantity": 100000000, + "get_asset": "DIVISIBLE", + "get_quantity": 100000000, + "expiration": 2000, + "fee_required": 0, + "status": "open" + } + } + }, + { + "datahex": "00000000000000a25be34b660000000005f5e100", + "result": { + "message_type": "send", + "message_type_id": 0, + "message_data": { + "asset": "DIVISIBLE", + "quantity": 100000000 + } + } + }, + { + "datahex": "0000000000000000000000010000000005f5e100", + "result": { + "message_type": "send", + "message_type_id": 0, + "message_data": { + "asset": "XCP", + "quantity": 100000000 + } + } + }, + { + "datahex": "0000000a00000000000000010000000005f5e100000000a25be34b660000000005f5e10007d00000000000000000", + "result": { + "message_type": "order", + "message_type_id": 10, + "message_data": { + "give_asset": "XCP", + "give_quantity": 100000000, + "get_asset": "DIVISIBLE", + "get_quantity": 100000000, + "expiration": 2000, + "fee_required": 0, + "status": "open" + } + } + }, + { + "datahex": "0000000a00000000000000010000000005f5e100000000000000000000000000000f424007d000000000000dbba0", + "result": { + "message_type": "order", + "message_type_id": 10, + "message_data": { + "give_asset": "XCP", + "give_quantity": 100000000, + "get_asset": "BTC", + "get_quantity": 1000000, + "expiration": 2000, + "fee_required": 900000, + "status": "open" + } + } + }, + { + "datahex": "0000000a000000000000000000000000000a2c2b00000000000000010000000005f5e10007d00000000000000000", + "result": { + "message_type": "order", + "message_type_id": 10, + "message_data": { + "give_asset": "BTC", + "give_quantity": 666667, + "get_asset": "XCP", + "get_quantity": 100000000, + "expiration": 2000, + "fee_required": 0, + "status": "open" + } + } + }, + { + "datahex": "0000000000000000000000010000000011e1a300", + "result": { + "message_type": "send", + "message_type_id": 0, + "message_data": { + "asset": "XCP", + "quantity": 300000000 + } + } + }, + { + "datahex": "00000000000000a25be34b66000000003b9aca00", + "result": { + "message_type": "send", + "message_type_id": 0, + "message_data": { + "asset": "DIVISIBLE", + "quantity": 1000000000 + } + } + }, + { + "datahex": "000000000006cad8dc7f0b660000000000000005", + "result": { + "message_type": "send", + "message_type_id": 0, + "message_data": { + "asset": "NODIVISIBLE", + "quantity": 5 + } + } + }, + { + "datahex": "000000000006cad8dc7f0b66000000000000000a", + "result": { + "message_type": "send", + "message_type_id": 0, + "message_data": { + "asset": "NODIVISIBLE", + "quantity": 10 + } + } + }, + { + "datahex": "000000140000000000033a3e7fffffffffffffff01000000000000000000104d6178696d756d207175616e74697479", + "result": { + "message_type": "issuance", + "message_type_id": 20, + "message_data": { + "asset_id": 211518, + "asset": "MAXI", + "subasset_longname": null, + "quantity": 9223372036854775807, + "divisible": true, + "lock": null, + "reset": null, + "callable": false, + "call_date": 0, + "call_price": 0.0, + "description": "Maximum quantity", + "status": "valid" + } + } + }, + { + "datahex": "0000001e52bb33003ff0000000000000004c4b4009556e69742054657374", + "result": { + "message_type": "broadcast", + "message_type_id": 30, + "message_data": { + "timestamp": 1388000000, + "value": 1.0, + "fee_fraction_int": 5000000, + "text": "Unit Test", + "status": "valid" + } + } + }, + { + "datahex": "0000001e4cc552003ff000000000000000000000046c6f636b", + "result": { + "message_type": "broadcast", + "message_type_id": 30, + "message_data": { + "timestamp": 1288000000, + "value": 1.0, + "fee_fraction_int": 0, + "text": "lock", + "status": "valid" + } + } + }, + { + "datahex": "00000028000152bb3301000000000000000900000000000000090000000000000000000013b000000064", + "result": { + "message_type": "bet", + "message_type_id": 40, + "message_data": { + "bet_type": 1, + "deadline": 1388000001, + "wager_quantity": 9, + "counterwager_quantity": 9, + "target_value": 0.0, + "leverage": 5040, + "expiration": 100, + "status": "open" + } + } + }, + { + "datahex": "00000028000052bb3301000000000000000900000000000000090000000000000000000013b000000064", + "result": { + "message_type": "bet", + "message_type_id": 40, + "message_data": { + "bet_type": 0, + "deadline": 1388000001, + "wager_quantity": 9, + "counterwager_quantity": 9, + "target_value": 0.0, + "leverage": 5040, + "expiration": 100, + "status": "open" + } + } + }, + { + "datahex": "00000028000352bb33c8000000000000000a000000000000000a0000000000000000000013b0000003e8", + "result": { + "message_type": "bet", + "message_type_id": 40, + "message_data": { + "bet_type": 3, + "deadline": 1388000200, + "wager_quantity": 10, + "counterwager_quantity": 10, + "target_value": 0.0, + "leverage": 5040, + "expiration": 1000, + "status": "open" + } + } + }, + { + "datahex": "0000001e52bb33023ff0000000000000004c4b4009556e69742054657374", + "result": { + "message_type": "broadcast", + "message_type_id": 30, + "message_data": { + "timestamp": 1388000002, + "value": 1.0, + "fee_fraction_int": 5000000, + "text": "Unit Test", + "status": "valid" + } + } + }, + { + "datahex": "0000000c000000000000000100000000000000640000000000000064000000000000006400", + "result": { + "message_type": "dispenser", + "message_type_id": 12, + "message_data": { + "asset": "XCP", + "give_quantity": 100, + "escrow_quantity": 100, + "mainchainrate": 100, + "dispenser_status": 0, + "action_address": null, + "oracle_address": null, + "status": "valid" + } + } + }, + { + "datahex": "0000001400078a8fe2e5e44100000000000003e8000000000000000000001050534820697373756564206173736574", + "result": { + "message_type": "issuance", + "message_type_id": 20, + "message_data": { + "asset_id": 2122675428648001, + "asset": "PAYTOSCRIPT", + "subasset_longname": null, + "quantity": 1000, + "divisible": false, + "lock": null, + "reset": null, + "callable": false, + "call_date": 0, + "call_price": 0.0, + "description": "PSH issued asset", + "status": "valid" + } + } + }, + { + "datahex": "00000000000000a25be34b660000000005f5e100", + "result": { + "message_type": "send", + "message_type_id": 0, + "message_data": { + "asset": "DIVISIBLE", + "quantity": 100000000 + } + } + }, + { + "datahex": "0000001e52bb33023ff0000000000000004c4b4009556e69742054657374", + "result": { + "message_type": "broadcast", + "message_type_id": 30, + "message_data": { + "timestamp": 1388000002, + "value": 1.0, + "fee_fraction_int": 5000000, + "text": "Unit Test", + "status": "valid" + } + } + }, + { + "datahex": "00000028000352bb33c8000000000000000a000000000000000a0000000000000000000013b0000003e8", + "result": { + "message_type": "bet", + "message_type_id": 40, + "message_data": { + "bet_type": 3, + "deadline": 1388000200, + "wager_quantity": 10, + "counterwager_quantity": 10, + "target_value": 0.0, + "leverage": 5040, + "expiration": 1000, + "status": "open" + } + } + }, + { + "datahex": "00000014000038fedf6d2c6900000000000003e8010000000000000000000c4c6f636b6564206173736574", + "result": { + "message_type": "issuance", + "message_type_id": 20, + "message_data": { + "asset_id": 62667321322601, + "asset": "LOCKEDPREV", + "subasset_longname": null, + "quantity": 1000, + "divisible": true, + "lock": null, + "reset": null, + "callable": false, + "call_date": 0, + "call_price": 0.0, + "description": "Locked asset", + "status": "valid" + } + } + }, + { + "datahex": "00000014000038fedf6d2c69000000000000000001000000000000000000044c4f434b", + "result": { + "message_type": "issuance", + "message_type_id": 20, + "message_data": { + "asset_id": 62667321322601, + "asset": "LOCKEDPREV", + "subasset_longname": null, + "quantity": 0, + "divisible": true, + "lock": null, + "reset": null, + "callable": false, + "call_date": 0, + "call_price": 0.0, + "description": "LOCK", + "status": "valid" + } + } + }, + { + "datahex": "00000014000038fedf6d2c69000000000000000001000000000000000000076368616e676564", + "result": { + "message_type": "issuance", + "message_type_id": 20, + "message_data": { + "asset_id": 62667321322601, + "asset": "LOCKEDPREV", + "subasset_longname": null, + "quantity": 0, + "divisible": true, + "lock": null, + "reset": null, + "callable": false, + "call_date": 0, + "call_price": 0.0, + "description": "changed", + "status": "valid" + } + } + }, + { + "datahex": "0000000200000000000000010000000005f5e1006f8d6ae8a3b381663118b4e1eff4cfc7d0954dd6ec68656c6c6f", + "result": { + "message_type": "enhanced_send", + "message_type_id": 2, + "message_data": { + "asset": "XCP", + "quantity": 100000000, + "address": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "memo": "68656c6c6f" + } + } + }, + { + "datahex": "0000000200000000000000010000000005f5e1006f4838d8b3588c4c7ba7c1d06f866e9b3739c63037fade0001", + "result": { + "message_type": "enhanced_send", + "message_type_id": 2, + "message_data": { + "asset": "XCP", + "quantity": 100000000, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "memo": "fade0001" + } + } + }, + { + "datahex": "0000001e52bb33003ff0000000000000004c4b4009556e69742054657374", + "result": { + "message_type": "broadcast", + "message_type_id": 30, + "message_data": { + "timestamp": 1388000000, + "value": 1.0, + "fee_fraction_int": 5000000, + "text": "Unit Test", + "status": "valid" + } + } + }, + { + "datahex": "00000028000152bb3301000000000000000900000000000000090000000000000000000013b000000064", + "result": { + "message_type": "bet", + "message_type_id": 40, + "message_data": { + "bet_type": 1, + "deadline": 1388000001, + "wager_quantity": 9, + "counterwager_quantity": 9, + "target_value": 0.0, + "leverage": 5040, + "expiration": 100, + "status": "open" + } + } + }, + { + "datahex": "0000001e52bb33023ff000000000000000000000096f7074696f6e732030", + "result": { + "message_type": "broadcast", + "message_type_id": 30, + "message_data": { + "timestamp": 1388000002, + "value": 1.0, + "fee_fraction_int": 0, + "text": "options 0", + "status": "valid" + } + } + }, + { + "datahex": "0000001e52bb33033ff000000000000000000000046c6f636b", + "result": { + "message_type": "broadcast", + "message_type_id": 30, + "message_data": { + "timestamp": 1388000003, + "value": 1.0, + "fee_fraction_int": 0, + "text": "lock", + "status": "valid" + } + } + }, + { + "datahex": "0000001e52bb33043ff000000000000000000000096f7074696f6e732031", + "result": { + "message_type": "broadcast", + "message_type_id": 30, + "message_data": { + "timestamp": 1388000004, + "value": 1.0, + "fee_fraction_int": 0, + "text": "options 1", + "status": "valid" + } + } + }, + { + "datahex": "0000000a00000000000000010000000005f5e100000000000000000000000000000c350007d000000000000dbba0", + "result": { + "message_type": "order", + "message_type_id": 10, + "message_data": { + "give_asset": "XCP", + "give_quantity": 100000000, + "get_asset": "BTC", + "get_quantity": 800000, + "expiration": 2000, + "fee_required": 900000, + "status": "open" + } + } + }, + { + "datahex": "0000000a000000000000000000000000000c350000000000000000010000000005f5e10007d00000000000000000", + "result": { + "message_type": "order", + "message_type_id": 10, + "message_data": { + "give_asset": "BTC", + "give_quantity": 800000, + "get_asset": "XCP", + "get_quantity": 100000000, + "expiration": 2000, + "fee_required": 0, + "status": "open" + } + } + }, + { + "datahex": "00000014000000063e985ffd00000000000000640100000000000000000000", + "result": { + "message_type": "issuance", + "message_type_id": 20, + "message_data": { + "asset_id": 26819977213, + "asset": "DIVIDEND", + "subasset_longname": null, + "quantity": 100, + "divisible": true, + "lock": null, + "reset": null, + "callable": false, + "call_date": 0, + "call_price": 0.0, + "description": "", + "status": "valid" + } + } + }, + { + "datahex": "00000000000000063e985ffd000000000000000a", + "result": { + "message_type": "send", + "message_type_id": 0, + "message_data": { + "asset": "DIVIDEND", + "quantity": 10 + } + } + }, + { + "datahex": "00000000000000000000000100000015a4018c1e", + "result": { + "message_type": "send", + "message_type_id": 0, + "message_data": { + "asset": "XCP", + "quantity": 92945878046 + } + } + }, + { + "datahex": "00000014000000000aa4097d0000000005f5e100010000000000000000000c506172656e74206173736574", + "result": { + "message_type": "issuance", + "message_type_id": 20, + "message_data": { + "asset_id": 178522493, + "asset": "PARENT", + "subasset_longname": null, + "quantity": 100000000, + "divisible": true, + "lock": null, + "reset": null, + "callable": false, + "call_date": 0, + "call_price": 0.0, + "description": "Parent asset", + "status": "valid" + } + } + }, + { + "datahex": "0000001501530821671b10650000000005f5e10001108e90a57dba9967c422e83080f22f0c684368696c64206f6620706172656e74", + "result": { + "message_type": "issuance", + "message_type_id": 21, + "message_data": { + "asset_id": null, + "asset": null, + "subasset_longname": null, + "quantity": null, + "divisible": null, + "lock": null, + "reset": null, + "callable": null, + "call_date": null, + "call_price": null, + "description": null, + "status": "invalid: could not unpack" + } + } + } +] \ No newline at end of file From c2f5a779f5d09e92f7b0e5cf75a53226b04925d7 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 22 Apr 2024 13:54:59 +0200 Subject: [PATCH 073/280] add content-type header --- counterparty-core/counterpartycore/lib/api/api_server.py | 1 + 1 file changed, 1 insertion(+) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 5e9e496c35..997e31a277 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -90,6 +90,7 @@ def inject_headers(result, return_code=None): response.headers["X-COUNTERPARTY-HEIGHT"] = ledger.CURRENT_BLOCK_INDEX response.headers["X-COUNTERPARTY-READY"] = ledger.CURRENT_BLOCK_INDEX >= BACKEND_HEIGHT response.headers["X-BACKEND-HEIGHT"] = BACKEND_HEIGHT + response.headers["Content-Type"] = "application/json" return response From 4962ead703db23c5fd164799dd89b08ff8e3aa19 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 22 Apr 2024 14:51:11 +0200 Subject: [PATCH 074/280] compose routes return json --- .../counterpartycore/lib/transaction.py | 261 ++++++++++++------ 1 file changed, 170 insertions(+), 91 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index 60613b9bd4..08d755fae6 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -1225,22 +1225,28 @@ def compose_bet( :param leverage: Leverage, as a fraction of 5040 :param expiration: The number of blocks after which the bet expires if it remains unmatched """ - return compose_transaction( + params = { + "source": address, + "feed_address": feed_address, + "bet_type": bet_type, + "deadline": deadline, + "wager_quantity": wager_quantity, + "counterwager_quantity": counterwager_quantity, + "target_value": target_value, + "leverage": leverage, + "expiration": expiration, + } + rawtransaction = compose_transaction( db, name="bet", - params={ - "source": address, - "feed_address": feed_address, - "bet_type": bet_type, - "deadline": deadline, - "wager_quantity": wager_quantity, - "counterwager_quantity": counterwager_quantity, - "target_value": target_value, - "leverage": leverage, - "expiration": expiration, - }, + params=params, **construct_args, ) + return { + "rawtransaction": rawtransaction, + "params": params, + "name": "bet", + } def compose_broadcast( @@ -1254,18 +1260,24 @@ def compose_broadcast( :param fee_fraction: How much of every bet on this feed should go to its operator; a fraction of 1, (i.e. 0.05 is five percent) :param text: The textual part of the broadcast """ - return compose_transaction( + params = { + "source": address, + "timestamp": timestamp, + "value": value, + "fee_fraction": fee_fraction, + "text": text, + } + rawtransaction = compose_transaction( db, name="broadcast", - params={ - "source": address, - "timestamp": timestamp, - "value": value, - "fee_fraction": fee_fraction, - "text": text, - }, + params=params, **construct_args, ) + return { + "rawtransaction": rawtransaction, + "params": params, + "name": "broadcast", + } def compose_btcpay(db, address: str, order_match_id: str, **construct_args): @@ -1274,12 +1286,18 @@ def compose_btcpay(db, address: str, order_match_id: str, **construct_args): :param address: The address that will be sending the payment :param order_match_id: The ID of the order match to pay for """ - return compose_transaction( + params = {"source": address, "order_match_id": order_match_id} + rawtransaction = compose_transaction( db, name="btcpay", - params={"source": address, "order_match_id": order_match_id}, + params=params, **construct_args, ) + return { + "rawtransaction": rawtransaction, + "params": params, + "name": "btcpay", + } def compose_burn(db, address: str, quantity: int, overburn: bool = False, **construct_args): @@ -1289,12 +1307,18 @@ def compose_burn(db, address: str, quantity: int, overburn: bool = False, **cons :param quantity: The quantities of BTC to burn (1 BTC maximum burn per address) :param overburn: Whether to allow the burn to exceed 1 BTC for the address """ - return compose_transaction( + params = {"source": address, "quantity": quantity, "overburn": overburn} + rawtransaction = compose_transaction( db, name="burn", - params={"source": address, "quantity": quantity, "overburn": overburn}, + params=params, **construct_args, ) + return { + "rawtransaction": rawtransaction, + "params": params, + "name": "burn", + } def compose_cancel(db, address: str, offer_hash: str, **construct_args): @@ -1303,12 +1327,18 @@ def compose_cancel(db, address: str, offer_hash: str, **construct_args): :param address: The address that placed the order/bet to be cancelled :param offer_hash: The hash of the order/bet to be cancelled """ - return compose_transaction( + params = {"source": address, "offer_hash": offer_hash} + rawtransaction = compose_transaction( db, name="cancel", - params={"source": address, "offer_hash": offer_hash}, + params=params, **construct_args, ) + return { + "rawtransaction": rawtransaction, + "params": params, + "name": "cancel", + } def compose_destroy(db, address: str, asset: str, quantity: int, tag: str, **construct_args): @@ -1319,12 +1349,18 @@ def compose_destroy(db, address: str, asset: str, quantity: int, tag: str, **con :param quantity: The quantity of the asset to be destroyed :param tag: A tag for the destruction """ - return compose_transaction( + params = {"source": address, "asset": asset, "quantity": quantity, "tag": tag} + rawtransaction = compose_transaction( db, name="destroy", - params={"source": address, "asset": asset, "quantity": quantity, "tag": tag}, + params=params, **construct_args, ) + return { + "rawtransaction": rawtransaction, + "params": params, + "name": "destroy", + } def compose_dispenser( @@ -1350,21 +1386,27 @@ def compose_dispenser( :param open_address: The address that you would like to open the dispenser on :param oracle_address: The address that you would like to use as a price oracle for this dispenser """ - return compose_transaction( + params = { + "source": address, + "asset": asset, + "give_quantity": give_quantity, + "escrow_quantity": escrow_quantity, + "mainchainrate": mainchainrate, + "status": status, + "open_address": open_address, + "oracle_address": oracle_address, + } + rawtransaction = compose_transaction( db, name="dispenser", - params={ - "source": address, - "asset": asset, - "give_quantity": give_quantity, - "escrow_quantity": escrow_quantity, - "mainchainrate": mainchainrate, - "status": status, - "open_address": open_address, - "oracle_address": oracle_address, - }, + params=params, **construct_args, ) + return { + "rawtransaction": rawtransaction, + "params": params, + "name": "dispenser", + } def compose_dividend( @@ -1377,17 +1419,23 @@ def compose_dividend( :param asset: The asset or subasset that the dividends are being rewarded on :param dividend_asset: The asset or subasset that the dividends are paid in """ - return compose_transaction( + params = { + "source": address, + "quantity_per_unit": quantity_per_unit, + "asset": asset, + "dividend_asset": dividend_asset, + } + rawtransaction = compose_transaction( db, name="dividend", - params={ - "source": address, - "quantity_per_unit": quantity_per_unit, - "asset": asset, - "dividend_asset": dividend_asset, - }, + params=params, **construct_args, ) + return { + "rawtransaction": rawtransaction, + "params": params, + "name": "dividend", + } def compose_issuance( @@ -1413,21 +1461,27 @@ def compose_issuance( :param reset: Wether this issuance should reset any existing supply :param description: A textual description for the asset """ - return compose_transaction( + params = { + "source": address, + "asset": asset, + "quantity": quantity, + "transfer_destination": transfer_destination, + "divisible": divisible, + "lock": lock, + "reset": reset, + "description": description, + } + rawtransaction = compose_transaction( db, name="issuance", - params={ - "source": address, - "asset": asset, - "quantity": quantity, - "transfer_destination": transfer_destination, - "divisible": divisible, - "lock": lock, - "reset": reset, - "description": description, - }, + params=params, **construct_args, ) + return { + "rawtransaction": rawtransaction, + "params": params, + "name": "issuance", + } def compose_mpma( @@ -1461,17 +1515,24 @@ def compose_mpma( raise exceptions.ComposeError("Quantity must be an integer") asset_dest_quant_list = list(zip(asset_list, destination_list, quantity_list)) - return compose_transaction( + params = { + "source": source, + "asset_dest_quant_list": asset_dest_quant_list, + "memo": memo, + "memo_is_hex": memo_is_hex, + } + + rawtransaction = compose_transaction( db, name="version.mpma", - params={ - "source": source, - "asset_dest_quant_list": asset_dest_quant_list, - "memo": memo, - "memo_is_hex": memo_is_hex, - }, + params=params, **construct_args, ) + return { + "rawtransaction": rawtransaction, + "params": params, + "name": "mpma", + } def compose_order( @@ -1495,20 +1556,26 @@ def compose_order( :param expiration: The number of blocks for which the order should be valid :param fee_required: The miners’ fee required to be paid by orders for them to match this one; in BTC; required only if buying BTC (may be zero, though) """ - return compose_transaction( + params = { + "source": address, + "give_asset": give_asset, + "give_quantity": give_quantity, + "get_asset": get_asset, + "get_quantity": get_quantity, + "expiration": expiration, + "fee_required": fee_required, + } + rawtransaction = compose_transaction( db, name="order", - params={ - "source": address, - "give_asset": give_asset, - "give_quantity": give_quantity, - "get_asset": get_asset, - "get_quantity": get_quantity, - "expiration": expiration, - "fee_required": fee_required, - }, + params=params, **construct_args, ) + return { + "rawtransaction": rawtransaction, + "params": params, + "name": "order", + } def compose_send( @@ -1532,20 +1599,26 @@ def compose_send( :param memo_is_hex: Whether the memo field is a hexadecimal string :param use_enhanced_send: If this is false, the construct a legacy transaction sending bitcoin dust """ - return compose_transaction( + params = { + "source": address, + "destination": destination, + "asset": asset, + "quantity": quantity, + "memo": memo, + "memo_is_hex": memo_is_hex, + "use_enhanced_send": use_enhanced_send, + } + rawtransaction = compose_transaction( db, name="send", - params={ - "source": address, - "destination": destination, - "asset": asset, - "quantity": quantity, - "memo": memo, - "memo_is_hex": memo_is_hex, - "use_enhanced_send": use_enhanced_send, - }, + params=params, **construct_args, ) + return { + "rawtransaction": rawtransaction, + "params": params, + "name": "send", + } def compose_sweep(db, address: str, destination: str, flags: int, memo: str, **construct_args): @@ -1559,17 +1632,23 @@ def compose_sweep(db, address: str, destination: str, flags: int, memo: str, **c - FLAG_BINARY_MEMO: (integer) 4, specifies that the memo is in binary/hex form. :param memo: The Memo associated with this transaction """ - return compose_transaction( + params = { + "source": address, + "destination": destination, + "flags": flags, + "memo": memo, + } + rawtransaction = compose_transaction( db, name="sweep", - params={ - "source": address, - "destination": destination, - "flags": flags, - "memo": memo, - }, + params=params, **construct_args, ) + return { + "rawtransaction": rawtransaction, + "params": params, + "name": "sweep", + } def info(db, rawtransaction: str, block_index: int = None): From e2dce1220fa1fa7bd3fa8871822ea38b5374ceca Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 22 Apr 2024 14:59:51 +0200 Subject: [PATCH 075/280] /transactions/info returns also unpacked data --- counterparty-core/counterpartycore/lib/transaction.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index 08d755fae6..360529857c 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -1660,13 +1660,17 @@ def info(db, rawtransaction: str, block_index: int = None): source, destination, btc_amount, fee, data, extra = gettxinfo.get_tx_info( db, BlockchainParser().deserialize_tx(rawtransaction), block_index=block_index ) - return { + result = { "source": source, "destination": destination, "btc_amount": btc_amount, "fee": fee, "data": util.hexlify(data) if data else "", } + if data: + result["data"] = util.hexlify(data) + result["unpacked_data"] = unpack(db, result["data"], block_index) + return result def unpack(db, datahex: str, block_index: int = None): From 5b5be3ad69053909f74f61408ad3723e18da809a Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 22 Apr 2024 17:59:41 +0200 Subject: [PATCH 076/280] script to generate blueprint doc --- counterparty-core/tools/genapidoc.py | 36 ++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 counterparty-core/tools/genapidoc.py diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py new file mode 100644 index 0000000000..5aea23480f --- /dev/null +++ b/counterparty-core/tools/genapidoc.py @@ -0,0 +1,36 @@ +import os + +from counterpartycore import server + +CURR_DIR = os.path.dirname(os.path.realpath(__file__)) +API_DOC_FILE = os.path.join(CURR_DIR, "../../../Documentation/docs/advanced/api/rest.md") + +md = """--- +title: REST API V2 +--- + +FORMAT: 1A + +# Counterpaty Core API + +The Counterparty Core API is the recommended way to query the state of a Counterparty node. The following routes are available. +""" + +current_group = None + +for path, route in server.routes.ROUTES.items(): + route_group = path.split("/")[1] + if route_group != current_group: + current_group = route_group + md += f"\n## Group {current_group.capitalize()}\n" + blueprint_path = path.replace("<", "{").replace(">", "}").replace("int:", "") + + title = " ".join([part.capitalize() for part in str(route["function"].__name__).split("_")]) + md += f"\n### {title} [`{blueprint_path}`]\n\n" + md += route["description"] + md += "\n\n+ Parameters\n" + for arg in route["args"]: + md += f" + {arg['name']} ({arg['type']}) - {arg.get('description', '')}\n" + +with open(API_DOC_FILE, "w") as f: + f.write(md) From 1d8812b9948d35fa85237b58feac139622a6b8d2 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 22 Apr 2024 18:19:32 +0200 Subject: [PATCH 077/280] Add required/optional and default value in doc --- counterparty-core/tools/genapidoc.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index 5aea23480f..3665f5d2b3 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -30,7 +30,11 @@ md += route["description"] md += "\n\n+ Parameters\n" for arg in route["args"]: - md += f" + {arg['name']} ({arg['type']}) - {arg.get('description', '')}\n" + required = "required" if arg["required"] else "optional" + md += f" + {arg['name']} ({arg['type']}, {required}) - {arg.get('description', '')}\n" + if not arg["required"]: + md += f"\n + Default: `{arg.get('default', '')}`\n\n" with open(API_DOC_FILE, "w") as f: f.write(md) + print(f"API documentation written to {API_DOC_FILE}") From e9e6ac6457a0e9e32448e0d71c2e259e2410739a Mon Sep 17 00:00:00 2001 From: matt marcello Date: Mon, 22 Apr 2024 14:46:11 -0400 Subject: [PATCH 078/280] initialize sentry explicitly in ApiServer.init --- counterparty-core/counterpartycore/lib/api.py | 3 ++- .../counterpartycore/lib/sentry.py | 24 +++++++++---------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api.py b/counterparty-core/counterpartycore/lib/api.py index f4a6e61cfa..3f9ac5d0f6 100644 --- a/counterparty-core/counterpartycore/lib/api.py +++ b/counterparty-core/counterpartycore/lib/api.py @@ -19,7 +19,7 @@ import requests # noqa: F401 -import counterpartycore.lib.sentry # noqa: F401 +import counterpartycore.lib.sentry as sentry # noqa: F401 D = decimal.Decimal import binascii # noqa: E402 @@ -749,6 +749,7 @@ def __init__(self, db=None): self.server = None self.ctx = None threading.Thread.__init__(self) + sentry.init() def stop(self): logger.info("Stopping API Server...") diff --git a/counterparty-core/counterpartycore/lib/sentry.py b/counterparty-core/counterpartycore/lib/sentry.py index 7bf66cb681..0e241367c1 100644 --- a/counterparty-core/counterpartycore/lib/sentry.py +++ b/counterparty-core/counterpartycore/lib/sentry.py @@ -5,11 +5,6 @@ from counterpartycore.lib import config, database from counterpartycore.lib.telemetry.collector import TelemetryCollectorLive - -def send_exception(exception): - sentry_sdk.capture_exception(exception) - - environment = os.environ.get("SENTRY_ENVIRONMENT", "development") release = os.environ.get("SENTRY_RELEASE", config.__version__) @@ -34,10 +29,15 @@ def before_send(event, _hint): return event -sentry_sdk.init( - dsn=os.environ.get("SENTRY_DSN"), - environment=environment, - release=release, - traces_sample_rate=1.0, - before_send=before_send, -) +def init(): + # No-op if SENTRY_DSN is not set + if not os.environ.get("SENTRY_DSN"): + return + + sentry_sdk.init( + dsn=os.environ.get("SENTRY_DSN"), + environment=environment, + release=release, + traces_sample_rate=1.0, + before_send=before_send, + ) From c0885bda38eec107e6c621c774aa161242fd0215 Mon Sep 17 00:00:00 2001 From: Adam Krellenstein Date: Tue, 23 Apr 2024 09:32:55 +0200 Subject: [PATCH 079/280] Tweak `genapidoc.py` --- counterparty-core/tools/genapidoc.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index 3665f5d2b3..facbca5e11 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -11,9 +11,9 @@ FORMAT: 1A -# Counterpaty Core API +# Counterparty Core API -The Counterparty Core API is the recommended way to query the state of a Counterparty node. The following routes are available. +The Counterparty Core API is the recommended (and only supported) way to query the state of a Counterparty node. The following routes are available: """ current_group = None From 9551a012b94987c50d377b8effd32e7e23039371 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 22 Apr 2024 18:23:33 +0200 Subject: [PATCH 080/280] remove \n --- counterparty-core/tools/genapidoc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index facbca5e11..41e4e7adbd 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -33,7 +33,7 @@ required = "required" if arg["required"] else "optional" md += f" + {arg['name']} ({arg['type']}, {required}) - {arg.get('description', '')}\n" if not arg["required"]: - md += f"\n + Default: `{arg.get('default', '')}`\n\n" + md += f" + Default: `{arg.get('default', '')}`\n" with open(API_DOC_FILE, "w") as f: f.write(md) From 9c12f638481d5ae4b4a286deee6d00acad32df7e Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 23 Apr 2024 12:24:56 +0200 Subject: [PATCH 081/280] Use example args to generate output example --- .../counterpartycore/lib/ledger.py | 4 +-- counterparty-core/tools/genapidoc.py | 35 ++++++++++++++++++- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index 7ab0ba2de2..d4a9ca0445 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -1255,8 +1255,8 @@ def get_all_burns(db, status: str = "valid", offset: int = 0, limit: int = 100): def get_blocks(db, last: int = None, limit: int = 10): """ Returns the list of the last ten blocks - :param int last: The index of the most recent block to return - :param int limit: The number of blocks to return + :param int last: The index of the most recent block to return (e.g. 840000) + :param int limit: The number of blocks to return (e.g. 2) """ cursor = db.cursor() bindings = [] diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index 41e4e7adbd..cc9fba2175 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -1,9 +1,28 @@ +import json import os +import requests from counterpartycore import server CURR_DIR = os.path.dirname(os.path.realpath(__file__)) API_DOC_FILE = os.path.join(CURR_DIR, "../../../Documentation/docs/advanced/api/rest.md") +API_ROOT = "http://api:api@localhost:4000" + + +def get_example_output(path, args): + url_keys = [] + for key, value in args.items(): + if f"{key}>" in path: + path = path.replace(f"<{key}>", value) + path = path.replace(f"", value) + url_keys.append(key) + for key in url_keys: + args.pop(key) + url = f"{API_ROOT}{path}" + print(f"GET {url}") + response = requests.get(url, params=args) # noqa S113 + return response.json() + md = """--- title: REST API V2 @@ -29,11 +48,25 @@ md += f"\n### {title} [`{blueprint_path}`]\n\n" md += route["description"] md += "\n\n+ Parameters\n" + example_args = {} for arg in route["args"]: required = "required" if arg["required"] else "optional" - md += f" + {arg['name']} ({arg['type']}, {required}) - {arg.get('description', '')}\n" + description = arg.get("description", "") + example_arg = "" + if "(e.g. " in description: + desc_arr = description.split("(e.g. ") + description = desc_arr[0] + example_args[arg["name"]] = desc_arr[1].replace(")", "") + example_arg = f": `{example_args[arg['name']]}`" + md += f" + {arg['name']}{example_arg} ({arg['type']}, {required}) - {description}\n" if not arg["required"]: md += f" + Default: `{arg.get('default', '')}`\n" + if example_args != {}: + example_output = get_example_output(path, example_args) + example_output_json = json.dumps(example_output, indent=4) + md += "\n+ Response 200 (application/json)\n\n" + for line in example_output_json.split("\n"): + md += f" {line}\n" with open(API_DOC_FILE, "w") as f: f.write(md) From 064b0cbcb217693a268d4a1de8f7123e386d8734 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 23 Apr 2024 12:31:39 +0200 Subject: [PATCH 082/280] Add quotes for docusaurus --- counterparty-core/counterpartycore/server.py | 2 +- counterparty-core/tools/genapidoc.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index eb34ab5e84..54668d0496 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -31,7 +31,7 @@ ) from counterpartycore.lib import kickstart as kickstarter from counterpartycore.lib.api import api_server as api_v2 -from counterpartycore.lib.api import api_v1 +from counterpartycore.lib.api import api_v1, routes # noqa: F401 from counterpartycore.lib.telemetry.client import TelemetryClientLocal from counterpartycore.lib.telemetry.collector import TelemetryCollectorLive from counterpartycore.lib.telemetry.daemon import TelemetryDaemon diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index cc9fba2175..edc90cb94e 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -65,8 +65,10 @@ def get_example_output(path, args): example_output = get_example_output(path, example_args) example_output_json = json.dumps(example_output, indent=4) md += "\n+ Response 200 (application/json)\n\n" + md += " ```\n" for line in example_output_json.split("\n"): md += f" {line}\n" + md += " ```\n" with open(API_DOC_FILE, "w") as f: f.write(md) From 129c17fe758438d46a5ce334fa4e59936e25d45c Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 23 Apr 2024 12:51:26 +0200 Subject: [PATCH 083/280] progress in example args/output --- .../counterpartycore/lib/ledger.py | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index d4a9ca0445..71cb064268 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -108,8 +108,8 @@ def get_events(db, block_index=None, event=None, event_index=None, last=None, li def get_all_events(db, last: int = None, limit: int = 100): """ Returns all events - :param int last: The last event index to return - :param int limit: The maximum number of events to return + :param int last: The last event index to return (e.g. 10665092) + :param int limit: The maximum number of events to return (e.g. 5) """ return get_events(db, last=last, limit=limit) @@ -117,7 +117,7 @@ def get_all_events(db, last: int = None, limit: int = 100): def get_events_by_block(db, block_index: int): """ Returns the events of a block - :param int block_index: The index of the block to return + :param int block_index: The index of the block to return (e.g. 840464) """ return get_events(db, block_index=block_index) @@ -125,8 +125,8 @@ def get_events_by_block(db, block_index: int): def get_events_by_block_and_event(db, block_index: int, event: str): """ Returns the events of a block filtered by event - :param int block_index: The index of the block to return - :param str event: The event to filter by + :param int block_index: The index of the block to return (e.g. 840464) + :param str event: The event to filter by (e.g. CREDIT) """ if event == "count": return get_events_counts_by_block(db, block_index=block_index) @@ -136,7 +136,7 @@ def get_events_by_block_and_event(db, block_index: int, event: str): def get_event_by_index(db, event_index: int): """ Returns the event of an index - :param int event_index: The index of the event to return + :param int event_index: The index of the event to return (e.g. 10665092) """ return get_events(db, event_index=event_index) @@ -144,9 +144,9 @@ def get_event_by_index(db, event_index: int): def get_events_by_event(db, event: str, last: int = None, limit: int = 100): """ Returns the events filtered by event name - :param str event: The event to return - :param int last: The last event index to return - :param int limit: The maximum number of events to return + :param str event: The event to return (e.g. CREDIT) + :param int last: The last event index to return (e.g. 10665092) + :param int limit: The maximum number of events to return (e.g. 5) """ return get_events(db, event=event, last=last, limit=limit) @@ -180,12 +180,12 @@ def get_all_mempool_events(db): return get_mempool_events(db) -def get_mempool_events_by_event(db, event_name: str): +def get_mempool_events_by_event(db, event: str): """ Returns the mempool events filtered by event name - :param str event_name: The event to return + :param str event: The event to return (e.g. CREDIT) """ - return get_mempool_events(db, event_name=event_name) + return get_mempool_events(db, event_name=event) def get_events_counts(db, block_index=None): @@ -206,7 +206,7 @@ def get_events_counts(db, block_index=None): def get_events_counts_by_block(db, block_index: int): """ Returns the event counts of a block - :param int block_index: The index of the block to return + :param int block_index: The index of the block to return (e.g. 840464) """ return get_events_counts(db, block_index=block_index) @@ -526,7 +526,7 @@ def get_credits(db, address=None, asset=None, block_index=None, tx_index=None): def get_credits_by_block(db, block_index: int): """ Returns the credits of a block - :param int block_index: The index of the block to return + :param int block_index: The index of the block to return (e.g. 840464) """ return get_credits(db, block_index=block_index) @@ -534,7 +534,7 @@ def get_credits_by_block(db, block_index: int): def get_credits_by_address(db, address: str): """ Returns the credits of an address - :param str address: The address to return + :param str address: The address to return (e.g. 1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs) """ return get_credits(db, address=address) @@ -542,7 +542,7 @@ def get_credits_by_address(db, address: str): def get_credits_by_asset(db, asset: str): """ Returns the credits of an asset - :param str asset: The asset to return + :param str asset: The asset to return (e.g. UNNEGOTIABLE) """ return get_credits(db, asset=asset) @@ -554,7 +554,7 @@ def get_debits(db, address=None, asset=None, block_index=None, tx_index=None): def get_debits_by_block(db, block_index: int): """ Returns the debits of a block - :param int block_index: The index of the block to return + :param int block_index: The index of the block to return (e.g. 840464) """ return get_debits(db, block_index=block_index) @@ -562,7 +562,7 @@ def get_debits_by_block(db, block_index: int): def get_debits_by_address(db, address: str): """ Returns the debits of an address - :param str address: The address to return + :param str address: The address to return (e.g. 178etygrwEeeyQso9we85rUqYZbkiqzL4A) """ return get_debits(db, address=address) @@ -570,7 +570,7 @@ def get_debits_by_address(db, address: str): def get_debits_by_asset(db, asset: str): """ Returns the debits of an asset - :param str asset: The asset to return + :param str asset: The asset to return (e.g. UNNEGOTIABLE) """ return get_debits(db, asset=asset) @@ -950,8 +950,8 @@ def get_asset_issued(db, address): def get_asset_balances(db, asset: str, exclude_zero_balances: bool = True): """ Returns the asset balances - :param str asset: The asset to return - :param bool exclude_zero_balances: Whether to exclude zero balances + :param str asset: The asset to return (e.g. UNNEGOTIABLE) + :param bool exclude_zero_balances: Whether to exclude zero balances (e.g. True) """ cursor = db.cursor() query = """ @@ -989,7 +989,7 @@ def get_asset_issuances_quantity(db, asset): def get_asset_info(db, asset: str): """ Returns the asset information - :param str asset: The asset to return + :param str asset: The asset to return (e.g. UNNEGOTIABLE) """ asset_name = resolve_subasset_longname(db, asset) @@ -1275,7 +1275,7 @@ def get_blocks(db, last: int = None, limit: int = 10): def get_block(db, block_index: int): """ Return the information of a block - :param int block_index: The index of the block to return + :param int block_index: The index of the block to return (e.g. 840464) """ blocks = get_blocks(db, last=block_index, limit=1) if blocks: @@ -1286,7 +1286,7 @@ def get_block(db, block_index: int): def get_transactions_by_block(db, block_index: int): """ Returns the transactions of a block - :param int block_index: The index of the block to return + :param int block_index: The index of the block to return (e.g. 840464) """ cursor = db.cursor() query = """ @@ -1329,7 +1329,7 @@ def get_transactions(db, tx_hash=None): def get_transaction(db, tx_hash: str): """ Returns the information of a transaction - :param str tx_hash: The hash of the transaction to return + :param str tx_hash: The hash of the transaction to return (e.g. 876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5) """ transactions = get_transactions(db, tx_hash) if transactions: From becf57c40c7b33a724c75baed546266d27997700 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 23 Apr 2024 17:36:38 +0200 Subject: [PATCH 084/280] All routes with output example except compose and backend; Add some limit and offset param --- .../counterpartycore/lib/api/util.py | 7 +- .../counterpartycore/lib/ledger.py | 246 ++++++++++++------ .../counterpartycore/lib/transaction.py | 4 +- counterparty-core/tools/genapidoc.py | 2 +- 4 files changed, 169 insertions(+), 90 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index c74db6c13a..5c793a5583 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -56,12 +56,15 @@ def healthz(db, check_type="heavy"): def handle_healthz_route(db, check_type: str = "heavy"): """ Health check route. - :param check_type: Type of health check to perform. Options are 'light' and 'heavy'. + :param check_type: Type of health check to perform. Options are 'light' and 'heavy' (e.g. light) """ msg, code = "Healthy", 200 if not healthz(db, check_type): msg, code = "Unhealthy", 503 - return flask.Response(msg, code, mimetype="application/json") + result = {"data": msg, "success": code == 200} + if code != 200: + result["error"] = msg + return flask.Response(to_json(result), code, mimetype="application/json") def remove_rowids(query_result): diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index 71cb064268..57280f5709 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -442,8 +442,8 @@ def get_balance(db, address, asset, raise_error_if_no_balance=False, return_list def get_balance_object(db, address: str, asset: str): """ Returns the balance of an address and asset - :param str address: The address to return - :param str asset: The asset to return + :param str address: The address to return (e.g. 1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs) + :param str asset: The asset to return (e.g. XCP) """ return { "address": address, @@ -455,7 +455,7 @@ def get_balance_object(db, address: str, asset: str): def get_address_balances(db, address: str): """ Returns the balances of an address - :param str address: The address to return + :param str address: The address to return (e.g. 1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs) """ cursor = db.cursor() query = """ @@ -497,7 +497,9 @@ def get_balances_count(db, address): return cursor.fetchall() -def get_credits_or_debits(db, table, address=None, asset=None, block_index=None, tx_index=None): +def get_credits_or_debits( + db, table, address=None, asset=None, block_index=None, tx_index=None, offset=0, limit=None +): cursor = db.cursor() where = [] bindings = [] @@ -513,14 +515,24 @@ def get_credits_or_debits(db, table, address=None, asset=None, block_index=None, if tx_index is not None: where.append("tx_index = ?") bindings.append(tx_index) + query_limit = "" + if limit is not None: + query_limit = "LIMIT ?" + bindings.append(limit) + query_offset = "" + if offset > 0: + query_offset = "OFFSET ?" + bindings.append(offset) # no sql injection here - query = f"""SELECT * FROM {table} WHERE ({" AND ".join(where)})""" # nosec B608 # noqa: S608 + query = f"""SELECT * FROM {table} WHERE ({" AND ".join(where)}) {query_limit} {query_offset}""" # nosec B608 # noqa: S608 cursor.execute(query, tuple(bindings)) return cursor.fetchall() -def get_credits(db, address=None, asset=None, block_index=None, tx_index=None): - return get_credits_or_debits(db, "credits", address, asset, block_index, tx_index) +def get_credits(db, address=None, asset=None, block_index=None, tx_index=None, limit=100, offset=0): + return get_credits_or_debits( + db, "credits", address, asset, block_index, tx_index, limit=limit, offset=offset + ) def get_credits_by_block(db, block_index: int): @@ -531,24 +543,30 @@ def get_credits_by_block(db, block_index: int): return get_credits(db, block_index=block_index) -def get_credits_by_address(db, address: str): +def get_credits_by_address(db, address: str, limit: int = 100, offset: int = 0): """ Returns the credits of an address :param str address: The address to return (e.g. 1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs) + :param int limit: The maximum number of credits to return (e.g. 5) + :param int offset: The offset of the credits to return (e.g. 0) """ - return get_credits(db, address=address) + return get_credits(db, address=address, limit=limit, offset=offset) -def get_credits_by_asset(db, asset: str): +def get_credits_by_asset(db, asset: str, limit: int = 100, offset: int = 0): """ Returns the credits of an asset :param str asset: The asset to return (e.g. UNNEGOTIABLE) + :param int limit: The maximum number of credits to return (e.g. 5) + :param int offset: The offset of the credits to return (e.g. 0) """ - return get_credits(db, asset=asset) + return get_credits(db, asset=asset, limit=limit, offset=offset) -def get_debits(db, address=None, asset=None, block_index=None, tx_index=None): - return get_credits_or_debits(db, "debits", address, asset, block_index, tx_index) +def get_debits(db, address=None, asset=None, block_index=None, tx_index=None, limit=100, offset=0): + return get_credits_or_debits( + db, "debits", address, asset, block_index, tx_index, limit=limit, offset=offset + ) def get_debits_by_block(db, block_index: int): @@ -559,24 +577,35 @@ def get_debits_by_block(db, block_index: int): return get_debits(db, block_index=block_index) -def get_debits_by_address(db, address: str): +def get_debits_by_address(db, address: str, limit: int = 100, offset: int = 0): """ Returns the debits of an address - :param str address: The address to return (e.g. 178etygrwEeeyQso9we85rUqYZbkiqzL4A) + :param str address: The address to return (e.g. bc1q7787j6msqczs58asdtetchl3zwe8ruj57p9r9y) + :param int limit: The maximum number of debits to return (e.g. 5) + :param int offset: The offset of the debits to return (e.g. 0) """ - return get_debits(db, address=address) + return get_debits(db, address=address, limit=limit, offset=offset) -def get_debits_by_asset(db, asset: str): +def get_debits_by_asset(db, asset: str, limit: int = 100, offset: int = 0): """ Returns the debits of an asset - :param str asset: The asset to return (e.g. UNNEGOTIABLE) + :param str asset: The asset to return (e.g. XCP) + :param int limit: The maximum number of debits to return (e.g. 5) + :param int offset: The offset of the debits to return (e.g. 0) """ - return get_debits(db, asset=asset) + return get_debits(db, asset=asset, limit=limit, offset=offset) def get_sends_or_receives( - db, source=None, destination=None, asset=None, block_index=None, status="valid" + db, + source=None, + destination=None, + asset=None, + block_index=None, + status="valid", + limit=None, + offset=0, ): cursor = db.cursor() where = [] @@ -596,72 +625,118 @@ def get_sends_or_receives( if status is not None: where.append("status = ?") bindings.append(status) + query_limit = "" + if limit is not None: + query_limit = "LIMIT ?" + bindings.append(limit) + query_offset = "" + if offset > 0: + query_offset = "OFFSET ?" + bindings.append(offset) # no sql injection here - query = f"""SELECT * FROM sends WHERE ({" AND ".join(where)})""" # nosec B608 # noqa: S608 + query = f"""SELECT * FROM sends WHERE ({" AND ".join(where)}) {query_limit} {query_offset}""" # nosec B608 # noqa: S608 cursor.execute(query, tuple(bindings)) return cursor.fetchall() -def get_sends_or_receives_by_block(db, block_index: int): +def get_sends_or_receives_by_block(db, block_index: int, limit: int = 100, offset: int = 0): """ Returns the sends of a block - :param int block_index: The index of the block to return + :param int block_index: The index of the block to return (e.g. 840459) """ - return get_sends_or_receives(db, block_index=block_index) + return get_sends_or_receives(db, block_index=block_index, limit=limit, offset=offset) -def get_sends_or_receives_by_asset(db, asset: str): +def get_sends_or_receives_by_asset(db, asset: str, limit: int = 100, offset: int = 0): """ Returns the sends of an asset - :param str asset: The asset to return + :param str asset: The asset to return (e.g. XCP) + :param int limit: The maximum number of sends to return (e.g. 5) + :param int offset: The offset of the sends to return (e.g. 0) """ - return get_sends_or_receives(db, asset=asset) + return get_sends_or_receives(db, asset=asset, limit=limit, offset=offset) -def get_sends(db, address=None, asset=None, block_index=None, status="valid"): +def get_sends( + db, + address=None, + asset=None, + block_index=None, + status="valid", + limit: int = 100, + offset: int = 0, +): return get_sends_or_receives( - db, source=address, asset=asset, block_index=block_index, status=status + db, + source=address, + asset=asset, + block_index=block_index, + status=status, + limit=limit, + offset=offset, ) -def get_send_by_address(db, address: str): +def get_send_by_address(db, address: str, limit: int = 100, offset: int = 0): """ Returns the sends of an address - :param str address: The address to return + :param str address: The address to return (e.g. 1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W) + :param int limit: The maximum number of sends to return (e.g. 5) + :param int offset: The offset of the sends to return (e.g. 0) """ - return get_sends(db, address=address) + return get_sends(db, address=address, limit=limit, offset=offset) def get_send_by_address_and_asset(db, address: str, asset: str): """ Returns the sends of an address and asset - :param str address: The address to return - :param str asset: The asset to return + :param str address: The address to return (e.g. 1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W) + :param str asset: The asset to return (e.g. XCP) """ return get_sends(db, address=address, asset=asset) -def get_receives(db, address=None, asset=None, block_index=None, status="valid"): +def get_receives( + db, + address=None, + asset=None, + block_index=None, + status="valid", + limit: int = 100, + offset: int = 0, +): return get_sends_or_receives( - db, destination=address, asset=asset, block_index=block_index, status=status + db, + destination=address, + asset=asset, + block_index=block_index, + status=status, + limit=limit, + offset=offset, ) -def get_receive_by_address(db, address: str): +def get_receive_by_address(db, address: str, limit: int = 100, offset: int = 0): """ Returns the receives of an address - :param str address: The address to return + :param str address: The address to return (e.g. 1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs) + :param int limit: The maximum number of receives to return (e.g. 5) + :param int offset: The offset of the receives to return (e.g. 0) """ - return get_receives(db, address=address) + return get_receives(db, address=address, limit=limit, offset=offset) -def get_receive_by_address_and_asset(db, address: str, asset: str): +def get_receive_by_address_and_asset( + db, address: str, asset: str, limit: int = 100, offset: int = 0 +): """ Returns the receives of an address and asset - :param str address: The address to return - :param str asset: The asset to return + :param str address: The address to return (e.g. 1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs) + :param str asset: The asset to return (e.g. XCP) + :param int limit: The maximum number of receives to return (e.g. 5) + :param int offset: The offset of the receives to return (e.g. 0) """ - return get_receives(db, address=address, asset=asset) + return get_receives(db, address=address, asset=asset, limit=limit, offset=offset) def get_sweeps(db, address=None, block_index=None, status="valid"): @@ -686,7 +761,7 @@ def get_sweeps(db, address=None, block_index=None, status="valid"): def get_sweeps_by_block(db, block_index: int): """ Returns the sweeps of a block - :param int block_index: The index of the block to return + :param int block_index: The index of the block to return (e.g. 836519) """ return get_sweeps(db, block_index=block_index) @@ -694,7 +769,7 @@ def get_sweeps_by_block(db, block_index: int): def get_sweeps_by_address(db, address: str): """ Returns the sweeps of an address - :param str address: The address to return + :param str address: The address to return (e.g. 18szqTVJUWwYrtRHq98Wn4DhCGGiy3jZ87) """ return get_sweeps(db, address=address) @@ -1072,7 +1147,7 @@ def get_issuances( def get_issuances_by_block(db, block_index: int): """ Returns the issuances of a block - :param int block_index: The index of the block to return + :param int block_index: The index of the block to return (e.g. 840464) """ return get_issuances(db, block_index=block_index) @@ -1080,7 +1155,7 @@ def get_issuances_by_block(db, block_index: int): def get_issuances_by_asset(db, asset: str): """ Returns the issuances of an asset - :param str asset: The asset to return + :param str asset: The asset to return (e.g. UNNEGOTIABLE) """ return get_issuances(db, asset=asset) @@ -1099,8 +1174,8 @@ def get_assets_by_longname(db, asset_longname): def get_valid_assets(db, offset: int = 0, limit: int = 100): """ Returns the valid assets - :param int offset: The offset of the assets to return - :param int limit: The limit of the assets to return + :param int offset: The offset of the assets to return (e.g. 0) + :param int limit: The limit of the assets to return (e.g. 5) """ try: int(offset) @@ -1114,15 +1189,16 @@ def get_valid_assets(db, offset: int = 0, limit: int = 100): WHERE status = 'valid' GROUP BY asset ORDER BY asset ASC + LIMIT ? OFFSET ? """ - cursor.execute(query) + cursor.execute(query, (limit, offset)) return cursor.fetchall() def get_dividends(db, asset: str): """ Returns the dividends of an asset - :param str asset: The asset to return + :param str asset: The asset to return (e.g. GMONEYPEPE) """ cursor = db.cursor() query = """ @@ -1172,9 +1248,9 @@ def get_oracle_last_price(db, oracle_address, block_index): def get_broadcasts_by_source(db, address: str, status: str = "valid", order_by: str = "DESC"): """ Returns the broadcasts of a source - :param str address: The address to return - :param str status: The status of the broadcasts to return - :param str order_by: The order of the broadcasts to return + :param str address: The address to return (e.g. 1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk) + :param str status: The status of the broadcasts to return (e.g. valid) + :param str order_by: The order of the broadcasts to return (e.g. ASC) """ if order_by not in ["ASC", "DESC"]: raise exceptions.InvalidArgument("Invalid order_by parameter") @@ -1218,7 +1294,7 @@ def get_burns(db, address: str = None, status: str = "valid"): def get_burns_by_address(db, address: str): """ Returns the burns of an address - :param str address: The address to return + :param str address: The address to return (e.g. 1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W) """ return get_burns(db, address=address) @@ -1226,9 +1302,9 @@ def get_burns_by_address(db, address: str): def get_all_burns(db, status: str = "valid", offset: int = 0, limit: int = 100): """ Returns the burns - :param str status: The status of the burns to return - :param int offset: The offset of the burns to return - :param int limit: The limit of the burns to return + :param str status: The status of the burns to return (e.g. valid) + :param int offset: The offset of the burns to return (e.g. 10) + :param int limit: The limit of the burns to return (e.g. 5) """ try: int(offset) @@ -1361,7 +1437,7 @@ def get_addresses(db, address=None): def get_expirations(db, block_index: int): """ Returns the expirations of a block - :param int block_index: The index of the block to return + :param int block_index: The index of the block to return (e.g. 840356) """ cursor = db.cursor() queries = [ @@ -1399,7 +1475,7 @@ def get_expirations(db, block_index: int): def get_cancels(db, block_index: int): """ Returns the cancels of a block - :param int block_index: The index of the block to return + :param int block_index: The index of the block to return (e.g. 839746) """ cursor = db.cursor() query = """ @@ -1414,7 +1490,7 @@ def get_cancels(db, block_index: int): def get_destructions(db, block_index: int): """ Returns the destructions of a block - :param int block_index: The index of the block to return + :param int block_index: The index of the block to return (e.g. 839988) """ cursor = db.cursor() query = """ @@ -1600,7 +1676,7 @@ def get_dispenser_info(db, tx_hash=None, tx_index=None): def get_dispenser_info_by_tx_hash(db, tx_hash: str): """ Returns the dispenser information by tx_hash - :param str tx_hash: The hash of the dispenser to return + :param str tx_hash: The hash of the dispenser to return (e.g. 753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a) """ return get_dispenser_info(db, tx_hash=tx_hash) @@ -1777,7 +1853,7 @@ def get_dispensers( def get_dispensers_by_address(db, address: str, status: int = 0): """ Returns the dispensers of an address - :param str address: The address to return + :param str address: The address to return (e.g. bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz) """ return get_dispensers(db, address=address, status=status) @@ -1785,7 +1861,7 @@ def get_dispensers_by_address(db, address: str, status: int = 0): def get_dispensers_by_asset(db, asset: str, status: int = 0): """ Returns the dispensers of an asset - :param str asset: The asset to return + :param str asset: The asset to return (e.g. ERYKAHPEPU) """ return get_dispensers(db, asset=asset, status=status) @@ -1793,8 +1869,8 @@ def get_dispensers_by_asset(db, asset: str, status: int = 0): def get_dispensers_by_address_and_asset(db, address: str, asset: str, status: int = 0): """ Returns the dispensers of an address and an asset - :param str address: The address to return - :param str asset: The asset to return + :param str address: The address to return (e.g. bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz) + :param str asset: The asset to return (e.g. ERYKAHPEPU) """ return get_dispensers(db, address=address, asset=asset, status=status) @@ -1818,7 +1894,7 @@ def get_dispenses(db, dispenser_tx_hash=None, block_index=None): def get_dispenses_by_block(db, block_index: int): """ Returns the dispenses of a block - :param int block_index: The index of the block to return + :param int block_index: The index of the block to return (e.g. 840322) """ return get_dispenses(db, block_index=block_index) @@ -1826,7 +1902,7 @@ def get_dispenses_by_block(db, block_index: int): def get_dispenses_by_dispenser(db, tx_hash: str): """ Returns the dispenses of a dispenser - :param str tx_hash: The hash of the dispenser to return + :param str tx_hash: The hash of the dispenser to return (e.g. 753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a) """ return get_dispenses(db, dispenser_tx_hash=tx_hash) @@ -1888,7 +1964,7 @@ def get_bet_matches_to_expire(db, block_time): def get_bet(db, tx_hash: str): """ Returns the information of a bet - :param str tx_hash: The hash of the bet to return + :param str tx_hash: The hash of the bet to return (e.g. 5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed) """ cursor = db.cursor() query = """ @@ -1936,8 +2012,8 @@ def get_matching_bets(db, feed_address, bet_type): def get_bet_by_feed(db, address: str, status: str = "open"): """ Returns the bets of a feed - :param str address: The address of the feed - :param str status: The status of the bet + :param str address: The address of the feed (e.g. 1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk) + :param str status: The status of the bet (e.g. filled) """ cursor = db.cursor() query = """ @@ -1957,8 +2033,8 @@ def get_bet_by_feed(db, address: str, status: str = "open"): def get_bet_matches_by_bet(db, tx_hash: str, status: str = "pending"): """ Returns the bet matches of a bet - :param str tx_hash: The hash of the bet - :param str status: The status of the bet matches + :param str tx_hash: The hash of the bet (e.g. 5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed) + :param str status: The status of the bet matches (e.g. expired) """ cursor = db.cursor() query = """ @@ -1977,15 +2053,15 @@ def get_bet_matches_by_bet(db, tx_hash: str, status: str = "pending"): def get_resolutions_by_bet(db, tx_hash: str): """ Returns the resolutions of a bet - :param str tx_hash: The hash of the bet + :param str tx_hash: The hash of the bet (e.g. 36bbbb7dbd85054dac140a8ad8204eda2ee859545528bd2a9da69ad77c277ace) """ cursor = db.cursor() query = """ SELECT * FROM bet_match_resolutions - WHERE bet_match_id LIKE '%:tx_hash%' + WHERE bet_match_id LIKE ? """ - bindings = {"tx_hash": tx_hash} + bindings = (f"%{tx_hash}%",) cursor.execute(query, bindings) return cursor.fetchall() @@ -2072,7 +2148,7 @@ def get_order_matches_to_expire(db, block_index): def get_order(db, tx_hash: str): """ Returns the information of an order - :param str tx_hash: The hash of the order to return + :param str tx_hash: The hash of the order to return (e.g. 23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776) """ cursor = db.cursor() query = """ @@ -2147,8 +2223,8 @@ def get_matching_orders(db, tx_hash, give_asset, get_asset): def get_orders_by_asset(db, asset: str, status: str = "open"): """ Returns the orders of an asset - :param str asset: The asset to return - :param str status: The status of the orders to return + :param str asset: The asset to return (e.g. NEEDPEPE) + :param str status: The status of the orders to return (e.g. filled) """ cursor = db.cursor() query = """ @@ -2167,8 +2243,8 @@ def get_orders_by_asset(db, asset: str, status: str = "open"): def get_order_matches_by_order(db, tx_hash: str, status: str = "pending"): """ Returns the order matches of an order - :param str tx_hash: The hash of the order - :param str status: The status of the order matches to return + :param str tx_hash: The hash of the order (e.g. 5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947) + :param str status: The status of the order matches to return (e.g. completed) """ cursor = db.cursor() query = """ @@ -2187,15 +2263,15 @@ def get_order_matches_by_order(db, tx_hash: str, status: str = "pending"): def get_btcpays_by_order(db, tx_hash: str): """ Returns the BTC pays of an order - :param str tx_hash: The hash of the order + :param str tx_hash: The hash of the order (e.g. 299b5b648f54eacb839f3487232d49aea373cdd681b706d4cc0b5e0b03688db4) """ cursor = db.cursor() query = """ SELECT * FROM btcpays - WHERE order_match_id LIKE '%:tx_hash%' + WHERE order_match_id LIKE ? """ - bindings = {"tx_hash": tx_hash} + bindings = (f"%{tx_hash}%",) cursor.execute(query, bindings) return cursor.fetchall() @@ -2631,7 +2707,7 @@ def holders(db, asset, exclude_empty_holders=False): def get_asset_holders(db, asset: str): """ Returns the holders of an asset - :param str asset: The asset to return + :param str asset: The asset to return (e.g. ERYKAHPEPU) """ asset_name = resolve_subasset_longname(db, asset) return holders(db, asset_name, True) diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index 360529857c..5963d828c3 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -1654,7 +1654,7 @@ def compose_sweep(db, address: str, destination: str, flags: int, memo: str, **c def info(db, rawtransaction: str, block_index: int = None): """ Returns Counterparty information from a raw transaction in hex format. - :param rawtransaction: Raw transaction in hex format + :param rawtransaction: Raw transaction in hex format (e.g. 01000000017828697743c03aef6a3a8ba54b22bf579ffcab8161faf20e7b20c4ecd75cc986010000006b483045022100d1bd0531bb1ed2dd2cbf77d6933273e792a3dbfa84327d419169850ddd5976f502205d1ab0f7bcbf1a0cc183f0520c9aa8f711d41cb790c0c4ac39da6da4a093d798012103d3b1f711e907acb556e239f6cafb6a4f7fe40d8dd809b0e06e739c2afd73f202ffffffff0200000000000000004d6a4bf29880b93b0711524c7ef9c76835752088db8bd4113a3daf41fc45ffdc8867ebdbf26817fae377696f36790e52f51005806e9399a427172fedf348cf798ed86e548002ee96909eef0775ec3c2b0100000000001976a91443434cf159cc585fbd74daa9c4b833235b19761b88ac00000000) :param block_index: Block index mandatory for transactions before block 335000 """ source, destination, btc_amount, fee, data, extra = gettxinfo.get_tx_info( @@ -1676,7 +1676,7 @@ def info(db, rawtransaction: str, block_index: int = None): def unpack(db, datahex: str, block_index: int = None): """ Unpacks Counterparty data in hex format and returns the message type and data. - :param datahex: Data in hex format + :param datahex: Data in hex format (e.g. 16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245) :param block_index: Block index of the transaction containing this data """ data = binascii.unhexlify(datahex) diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index edc90cb94e..b434a5fd34 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -61,7 +61,7 @@ def get_example_output(path, args): md += f" + {arg['name']}{example_arg} ({arg['type']}, {required}) - {description}\n" if not arg["required"]: md += f" + Default: `{arg.get('default', '')}`\n" - if example_args != {}: + if example_args != {} or route["args"] == []: example_output = get_example_output(path, example_args) example_output_json = json.dumps(example_output, indent=4) md += "\n+ Response 200 (application/json)\n\n" From 2c37b6589ec5fe08948bf84688477b09d77f7e0f Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 23 Apr 2024 18:45:53 +0200 Subject: [PATCH 085/280] Add cache to generate doc faster --- .../counterpartycore/lib/transaction.py | 18 +- counterparty-core/tools/apicache.json | 1832 +++++++++++++++++ counterparty-core/tools/genapidoc.py | 18 +- 3 files changed, 1857 insertions(+), 11 deletions(-) create mode 100644 counterparty-core/tools/apicache.json diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index 5963d828c3..0d721a2b0b 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -1210,20 +1210,20 @@ def compose_bet( counterwager_quantity: int, expiration: int, leverage: int = 5040, - target_value: float = None, + target_value: int = None, **construct_args, ): """ Composes a transaction to issue a bet against a feed. - :param address: The address that will make the bet - :param feed_address: The address that hosts the feed to be bet on - :param bet_type: Bet 0 for Bullish CFD (deprecated), 1 for Bearish CFD (deprecated), 2 for Equal, 3 for NotEqual - :param deadline: The time at which the bet should be decided/settled, in Unix time (seconds since epoch) - :param wager_quantity: The quantities of XCP to wager (in satoshis, hence integer). - :param counterwager_quantity: The minimum quantities of XCP to be wagered against, for the bets to match - :param target_value: Target value for Equal/NotEqual bet + :param address: The address that will make the bet (e.g. 1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev) + :param feed_address: The address that hosts the feed to be bet on (e.g. 1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev) + :param bet_type: Bet 0 for Bullish CFD (deprecated), 1 for Bearish CFD (deprecated), 2 for Equal, 3 for NotEqual (e.g. 2) + :param deadline: The time at which the bet should be decided/settled, in Unix time (seconds since epoch) (e.g. 3000000000) + :param wager_quantity: The quantities of XCP to wager (in satoshis, hence integer) (e.g. 1000) + :param counterwager_quantity: The minimum quantities of XCP to be wagered against, for the bets to match (e.g. 1000) + :param expiration: The number of blocks after which the bet expires if it remains unmatched (e.g. 100) :param leverage: Leverage, as a fraction of 5040 - :param expiration: The number of blocks after which the bet expires if it remains unmatched + :param target_value: Target value for Equal/NotEqual bet (e.g. 1000) """ params = { "source": address, diff --git a/counterparty-core/tools/apicache.json b/counterparty-core/tools/apicache.json new file mode 100644 index 0000000000..d6ce0c4c31 --- /dev/null +++ b/counterparty-core/tools/apicache.json @@ -0,0 +1,1832 @@ +{ + "/blocks": [ + { + "block_index": 840000, + "block_hash": "0000000000000000000320283a032748cef8227873ff4872689bf23f1cda83a5", + "block_time": 1713571767, + "previous_block_hash": "0000000000000000000172014ba58d66455762add0512355ad651207918494ab", + "difficulty": 86388558925171.02, + "ledger_hash": "b91dd54cfbd3aff07b358a038bf6174ddc06f36bd00cdccf048e8281bcd56224", + "txlist_hash": "b641c3e190b9941fcd5c84a7c07e66c03559ef26dcea892e2db1cf1d8392a4f2", + "messages_hash": "5c5de34009839ee66ebc3097ecd28bd5deee9553966b3ee39e8a08e123ac9adc" + }, + { + "block_index": 839999, + "block_hash": "0000000000000000000172014ba58d66455762add0512355ad651207918494ab", + "block_time": 1713571533, + "previous_block_hash": "00000000000000000001dcce6ce7c8a45872cafd1fb04732b447a14a91832591", + "difficulty": 86388558925171.02, + "ledger_hash": "e2b2e23c2ac1060dafe2395da01fe5907f323b5a644816f45f003411c612ac30", + "txlist_hash": "f33f800ef166e6ef5b3df15a0733f9fd3ebb0b799f39ef1951e6709118b7c0fd", + "messages_hash": "16b7d40543b7b80587f4d98c84fcdfdceb2d1c18abba82c7064c09c2795b7ab2" + } + ], + "/blocks/": { + "block_index": 840464, + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_time": 1713852783, + "previous_block_hash": "00000000000000000002db1e5aa19784eec3de949f98ec757e7a7f2fc392079d", + "difficulty": 86388558925171.02, + "ledger_hash": "b3f8cbb50b0705a5c4a8495f8b5128de13a32daebd8ac5e8316a010f0d203584", + "txlist_hash": "84bdc5b9073f775a2b65de7da2b10b89a2235f3501883b0a836e41e68cd00d46", + "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540" + }, + "/blocks//transactions": [ + { + "tx_index": 2726605, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "block_index": 840464, + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_time": 1713852783, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "destination": "", + "btc_amount": 0, + "fee": 56565, + "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", + "supported": 1 + } + ], + "/blocks//events": [ + { + "event_index": 14194760, + "event": "BLOCK_PARSED", + "bindings": { + "block_index": 840464, + "ledger_hash": "b3f8cbb50b0705a5c4a8495f8b5128de13a32daebd8ac5e8316a010f0d203584", + "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540", + "txlist_hash": "84bdc5b9073f775a2b65de7da2b10b89a2235f3501883b0a836e41e68cd00d46" + }, + "block_index": 840464, + "timestamp": 1713852780 + }, + { + "event_index": 14194759, + "event": "TRANSACTION_PARSED", + "bindings": { + "supported": true, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605 + }, + "block_index": 840464, + "timestamp": 1713852780 + }, + { + "event_index": 14194758, + "event": "CREDIT", + "bindings": { + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "UNNEGOTIABLE", + "block_index": 840464, + "calling_function": "issuance", + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "quantity": 1, + "tx_index": 2726605 + }, + "block_index": 840464, + "timestamp": 1713852780 + }, + { + "event_index": 14194757, + "event": "ASSET_ISSUANCE", + "bindings": { + "asset": "UNNEGOTIABLE", + "asset_longname": null, + "block_index": 840464, + "call_date": 0, + "call_price": 0.0, + "callable": false, + "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "divisible": false, + "fee_paid": 50000000, + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "locked": false, + "quantity": 1, + "reset": false, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "status": "valid", + "transfer": false, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605 + }, + "block_index": 840464, + "timestamp": 1713852780 + }, + { + "event_index": 14194756, + "event": "ASSET_CREATION", + "bindings": { + "asset_id": "75313533584419238", + "asset_longname": null, + "asset_name": "UNNEGOTIABLE", + "block_index": 840464 + }, + "block_index": 840464, + "timestamp": 1713852780 + }, + { + "event_index": 14194755, + "event": "DEBIT", + "bindings": { + "action": "issuance fee", + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "XCP", + "block_index": 840464, + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "quantity": 50000000, + "tx_index": 2726605 + }, + "block_index": 840464, + "timestamp": 1713852780 + }, + { + "event_index": 14194754, + "event": "NEW_TRANSACTION", + "bindings": { + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_index": 840464, + "block_time": 1713852783, + "btc_amount": 0, + "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", + "destination": "", + "fee": 56565, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605 + }, + "block_index": 840464, + "timestamp": 1713852779 + }, + { + "event_index": 14194753, + "event": "NEW_BLOCK", + "bindings": { + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_index": 840464, + "block_time": 1713852783, + "difficulty": 86388558925171.02, + "previous_block_hash": "00000000000000000002db1e5aa19784eec3de949f98ec757e7a7f2fc392079d" + }, + "block_index": 840464, + "timestamp": 1713852779 + } + ], + "/blocks//events/counts": [ + { + "event": "ASSET_CREATION", + "event_count": 1 + }, + { + "event": "ASSET_ISSUANCE", + "event_count": 1 + }, + { + "event": "BLOCK_PARSED", + "event_count": 1 + }, + { + "event": "CREDIT", + "event_count": 1 + }, + { + "event": "DEBIT", + "event_count": 1 + }, + { + "event": "NEW_BLOCK", + "event_count": 1 + }, + { + "event": "NEW_TRANSACTION", + "event_count": 1 + }, + { + "event": "TRANSACTION_PARSED", + "event_count": 1 + } + ], + "/blocks//events/": [ + { + "event_index": 14194758, + "event": "CREDIT", + "bindings": { + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "UNNEGOTIABLE", + "block_index": 840464, + "calling_function": "issuance", + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "quantity": 1, + "tx_index": 2726605 + }, + "block_index": 840464, + "timestamp": 1713852780 + } + ], + "/blocks//credits": [ + { + "block_index": 840464, + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "UNNEGOTIABLE", + "quantity": 1, + "calling_function": "issuance", + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605 + } + ], + "/blocks//debits": [ + { + "block_index": 840464, + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "XCP", + "quantity": 50000000, + "action": "issuance fee", + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605 + } + ], + "/blocks//expirations": [ + { + "type": "order", + "object_id": "533d5c0ecd8ca9c2946d3298cc5e570eee55b62b887dd85c95de6de4fdc7f441" + }, + { + "type": "order", + "object_id": "b048661afeee3f266792481168024abc0d7648fe0e019e4a1e0fd9867c2c0ffc" + } + ], + "/blocks//cancels": [ + { + "tx_index": 2725738, + "tx_hash": "793af9129c7368f974c3ea0c87ad38131f0d82d19fbaf1adf8aaf2e657ec42b8", + "block_index": 839746, + "source": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "offer_hash": "04b258ac37f73e3b9a8575110320d67c752e1baace0f516da75845f388911735", + "status": "valid" + }, + { + "tx_index": 2725739, + "tx_hash": "2071e8a6fbc0c443b152d513c754356f8f962db2fa694de8c6826b57413cc190", + "block_index": 839746, + "source": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "offer_hash": "b1622dbe4f0ce740cb6c18f6f136876bc4949c40a62bc8cceefa81fd6679a57f", + "status": "valid" + } + ], + "/blocks//destructions": [ + { + "tx_index": 2726496, + "tx_hash": "f5609facc8dac6cdf70b15c514ea15a9acc24a9bd86dcac2b845d5740fbcc50b", + "block_index": 839988, + "source": "1FpLAtreZjTVCMcj1pq1AHWuqcs3n7obMm", + "asset": "COBBEE", + "quantity": 50000, + "tag": "", + "status": "valid" + } + ], + "/blocks//issuances": [ + { + "tx_index": 2726605, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "msg_index": 0, + "block_index": 840464, + "asset": "UNNEGOTIABLE", + "quantity": 1, + "divisible": 0, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "transfer": 0, + "callable": 0, + "call_date": 0, + "call_price": 0.0, + "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "fee_paid": 50000000, + "locked": 0, + "status": "valid", + "asset_longname": null, + "reset": 0 + } + ], + "/blocks//sends": [ + { + "tx_index": 2726604, + "tx_hash": "b4bbb14c99dd260eb634243e5c595e1b7213459979857a32850de84989bb71ec", + "block_index": 840459, + "source": "13Hnmhs5gy2yXKVBx4wSM5HCBdKnaSBZJH", + "destination": "1LfT83WAxbN9qKhtrXxcQA6xgdhfZk21Hz", + "asset": "GAMESOFTRUMP", + "quantity": 1, + "status": "valid", + "msg_index": 0, + "memo": null + } + ], + "/blocks//dispenses": [ + { + "tx_index": 2726580, + "dispense_index": 0, + "tx_hash": "e7f0f2c9bef7a492b714a5952ec61b283be344419c5bc33f405f9af41ebfa48b", + "block_index": 840322, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "destination": "bc1qzcdkhnexpjc8wvkyrpyrsn0f5xzcpu877mjmgj", + "asset": "FLOCK", + "dispense_quantity": 90000000000, + "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a" + } + ], + "/blocks//sweeps": [ + { + "tx_index": 2720536, + "tx_hash": "9309a4c0aed426e281a52e5d48acadd1464999269a5e75cf2293edd0277d743d", + "block_index": 836519, + "source": "1DMVnJuqBobXA9xYioabBsR4mN8bvVtCAW", + "destination": "1HC2q92SfH1ZHzS4CrDwp6KAipV4FqUL4T", + "flags": 3, + "status": "valid", + "memo": null, + "fee_paid": 1400000 + }, + { + "tx_index": 2720537, + "tx_hash": "d8db6281abffdbf6c320d5ade06aeb6fad2f7bfa1a2c2243c6726020a27107d3", + "block_index": 836519, + "source": "18szqTVJUWwYrtRHq98Wn4DhCGGiy3jZ87", + "destination": "1HC2q92SfH1ZHzS4CrDwp6KAipV4FqUL4T", + "flags": 3, + "status": "valid", + "memo": null, + "fee_paid": 1400000 + } + ], + "/transactions/info": { + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "destination": "", + "btc_amount": 0, + "fee": 56565, + "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", + "unpacked_data": { + "message_type": "issuance", + "message_type_id": 22, + "message_data": { + "asset_id": 75313533584419238, + "asset": "UNNEGOTIABLE", + "subasset_longname": null, + "quantity": 1, + "divisible": false, + "lock": false, + "reset": false, + "callable": false, + "call_date": 0, + "call_price": 0.0, + "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "status": "valid" + } + } + }, + "/transactions/unpack": { + "message_type": "issuance", + "message_type_id": 22, + "message_data": { + "asset_id": 75313533584419238, + "asset": "UNNEGOTIABLE", + "subasset_longname": null, + "quantity": 1, + "divisible": false, + "lock": false, + "reset": false, + "callable": false, + "call_date": 0, + "call_price": 0.0, + "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "status": "valid" + } + }, + "/transactions/": { + "tx_index": 2726605, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "block_index": 840464, + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_time": 1713852783, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "destination": "", + "btc_amount": 0, + "fee": 56565, + "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", + "supported": 1 + }, + "/addresses/
/balances": [ + { + "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + "asset": "XCP", + "quantity": 104200000000 + } + ], + "/addresses/
/balances/": { + "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + "asset": "XCP", + "quantity": 104200000000 + }, + "/addresses/
/credits": [ + { + "block_index": 830981, + "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + "asset": "XCP", + "quantity": 104200000000, + "calling_function": "send", + "event": "7e4fbb0a1eeeee34bf499955f1027fb78c514d63a3c8ff2e28c6dad005e4d850", + "tx_index": 2677412 + } + ], + "/addresses/
/debits": [ + { + "block_index": 836949, + "address": "bc1q7787j6msqczs58asdtetchl3zwe8ruj57p9r9y", + "asset": "XCP", + "quantity": 40000000000, + "action": "open dispenser", + "event": "53ed08176d3479f49986e9282293da85cebc03835b128d8e790ee587f9f1c750", + "tx_index": 2721524 + }, + { + "block_index": 840388, + "address": "bc1q7787j6msqczs58asdtetchl3zwe8ruj57p9r9y", + "asset": "XCP", + "quantity": 250000000000, + "action": "send", + "event": "bc54968ba7d0a59a47b276602e2dbdcf01b14009742e0d7b50272cbae529a9a4", + "tx_index": 2726594 + } + ], + "/addresses/
/bets": [ + { + "tx_index": 15106, + "tx_hash": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed", + "block_index": 304063, + "source": "18ZNyaAcH4HugeofwbrpLoUNiayxJRH65c", + "feed_address": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "bet_type": 3, + "deadline": 1401828300, + "wager_quantity": 50000000, + "wager_remaining": 0, + "counterwager_quantity": 50000000, + "counterwager_remaining": 0, + "target_value": 1.0, + "leverage": 5040, + "expiration": 11, + "expire_index": 304073, + "fee_fraction_int": 1000000, + "status": "filled" + }, + { + "tx_index": 61338, + "tx_hash": "0fcc7f5190c028f6c5534554d10ec5b4a9246d63826421cd58be2d572d11f088", + "block_index": 320704, + "source": "1Ew38GxczvV1KxjzZsq9f8UuRzHkHQrL5C", + "feed_address": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "bet_type": 2, + "deadline": 1410728400, + "wager_quantity": 1000000, + "wager_remaining": 0, + "counterwager_quantity": 1999991, + "counterwager_remaining": 0, + "target_value": 1.0, + "leverage": 5040, + "expiration": 13, + "expire_index": 320715, + "fee_fraction_int": 1000000, + "status": "filled" + } + ], + "/addresses/
/broadcasts": [ + { + "tx_index": 15055, + "tx_hash": "774887e555a6ae5a8c058ebc0185058307977f01a2d4d326e71f37d6dd977154", + "block_index": 304048, + "source": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "timestamp": 1401815290, + "value": -1.0, + "fee_fraction_int": 1000000, + "text": "xbet.io/feed/1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "locked": 0, + "status": "valid" + }, + { + "tx_index": 61477, + "tx_hash": "5d49993bec727622c7b41c84e2b1e65c368f33390d633d217131ffcc5b592f0d", + "block_index": 320718, + "source": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "timestamp": 1410732503, + "value": 1.0, + "fee_fraction_int": 1000000, + "text": "xbet.io/feed/1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "locked": 0, + "status": "valid" + } + ], + "/addresses/
/burns": [ + { + "tx_index": 3070, + "tx_hash": "4560d0e3d04927108b615ab106040489aca9c4aceedcf69d2b71f63b3139c7ae", + "block_index": 283810, + "source": "1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W", + "burned": 10000000, + "earned": 10000000000, + "status": "valid" + } + ], + "/addresses/
/sends": [ + { + "tx_index": 163106, + "tx_hash": "1c447b41816f1cfbb83f125c8e05faeaae70dbf27255745ba7393f809bd388eb", + "block_index": 343049, + "source": "1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W", + "destination": "16cRBUNnTWiUh2sXWNn1P7KHyJUmyMkdfH", + "asset": "XCP", + "quantity": 10000000000, + "status": "valid", + "msg_index": 0, + "memo": null + } + ], + "/addresses/
/receives": [ + { + "tx_index": 2677412, + "tx_hash": "7e4fbb0a1eeeee34bf499955f1027fb78c514d63a3c8ff2e28c6dad005e4d850", + "block_index": 830981, + "source": "bc1qqxr9grqw73dm95cen3g56mzswuj6eqjedu6csx", + "destination": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + "asset": "XCP", + "quantity": 104200000000, + "status": "valid", + "msg_index": 0, + "memo": null + } + ], + "/addresses/
/sends/": [ + { + "tx_index": 163106, + "tx_hash": "1c447b41816f1cfbb83f125c8e05faeaae70dbf27255745ba7393f809bd388eb", + "block_index": 343049, + "source": "1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W", + "destination": "16cRBUNnTWiUh2sXWNn1P7KHyJUmyMkdfH", + "asset": "XCP", + "quantity": 10000000000, + "status": "valid", + "msg_index": 0, + "memo": null + } + ], + "/addresses/
/receives/": [ + { + "tx_index": 2677412, + "tx_hash": "7e4fbb0a1eeeee34bf499955f1027fb78c514d63a3c8ff2e28c6dad005e4d850", + "block_index": 830981, + "source": "bc1qqxr9grqw73dm95cen3g56mzswuj6eqjedu6csx", + "destination": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + "asset": "XCP", + "quantity": 104200000000, + "status": "valid", + "msg_index": 0, + "memo": null + } + ], + "/addresses/
/dispensers": [ + { + "tx_index": 2726460, + "tx_hash": "b592d8ca4994d182e4ec63e1659dc4282b1a84466b7d71ed68c281ce63ed4897", + "block_index": 839964, + "source": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", + "asset": "ERYKAHPEPU", + "give_quantity": 1, + "escrow_quantity": 25, + "satoshirate": 50000, + "status": 0, + "give_remaining": 25, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "dispense_count": 0 + } + ], + "/addresses/
/dispensers/": [ + { + "tx_index": 2726460, + "tx_hash": "b592d8ca4994d182e4ec63e1659dc4282b1a84466b7d71ed68c281ce63ed4897", + "block_index": 839964, + "source": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", + "asset": "ERYKAHPEPU", + "give_quantity": 1, + "escrow_quantity": 25, + "satoshirate": 50000, + "status": 0, + "give_remaining": 25, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "dispense_count": 0 + } + ], + "/addresses/
/sweeps": [ + { + "tx_index": 2720537, + "tx_hash": "d8db6281abffdbf6c320d5ade06aeb6fad2f7bfa1a2c2243c6726020a27107d3", + "block_index": 836519, + "source": "18szqTVJUWwYrtRHq98Wn4DhCGGiy3jZ87", + "destination": "1HC2q92SfH1ZHzS4CrDwp6KAipV4FqUL4T", + "flags": 3, + "status": "valid", + "memo": null, + "fee_paid": 1400000 + } + ], + "/addresses/
/compose/bet": { + "rawtransaction": "01000000019a753a6b8be54cdee2acd408f6199e29092c8c32e13912865a68da8a0d9ae065010000001976a914bce6191bf2fd5981313cae869e9fafe164f7dbaf88acffffffff0322020000000000001976a914bce6191bf2fd5981313cae869e9fafe164f7dbaf88ac0000000000000000316a2f88dab644080b5ae64cba1e7f06510694b41e385fc9120e17c1037dd08399355abbaa0401e65959c9caa4dec4efe32189152b00000000001976a914bce6191bf2fd5981313cae869e9fafe164f7dbaf88ac00000000", + "params": { + "source": "1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev", + "feed_address": "1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev", + "bet_type": 2, + "deadline": 3000000000, + "wager_quantity": 1000, + "counterwager_quantity": 1000, + "target_value": 1000, + "leverage": 5040, + "expiration": 100 + }, + "name": "bet" + }, + "/assets": [ + { + "asset": "A100000000000000000", + "asset_longname": null + }, + { + "asset": "A1000000000000000000", + "asset_longname": null + }, + { + "asset": "A10000000000000000000", + "asset_longname": null + }, + { + "asset": "A10000000000000000001", + "asset_longname": null + }, + { + "asset": "A10000000000000000002", + "asset_longname": null + } + ], + "/assets/": { + "asset": "UNNEGOTIABLE", + "asset_longname": null, + "owner": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": false, + "locked": false, + "supply": 1, + "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "holder_count": 1 + }, + "/assets//balances": [ + { + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "UNNEGOTIABLE", + "quantity": 1 + } + ], + "/assets//balances/
": { + "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + "asset": "XCP", + "quantity": 104200000000 + }, + "/assets//orders": [ + { + "tx_index": 825373, + "tx_hash": "0129611a0aece52adddf6d929e75c703baa9cdcb7e4ce887aa859f9640aa9640", + "block_index": 455461, + "source": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "PEPECASH", + "get_quantity": 400000000000, + "get_remaining": 0, + "expiration": 1000, + "expire_index": 456457, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 46098, + "fee_provided_remaining": 46098, + "status": "filled" + }, + { + "tx_index": 2225134, + "tx_hash": "5b6e0c741d765ebd883dc16eecfb5c340c52865cabf297ca2c1432437c1348b7", + "block_index": 772817, + "source": "1FnM7akSCD8G3fRQHCUEXRCfL35gptsPZB", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "XCP", + "get_quantity": 80800000000, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 777817, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 5544, + "fee_provided_remaining": 5544, + "status": "filled" + }, + { + "tx_index": 1946026, + "tx_hash": "75dc6ee1f67317e674ef33b617d3a9839ee53bf4a2e8274c88d6202d4d89b59a", + "block_index": 727444, + "source": "1GotRejB6XsGgMsM79TvcypeanDJRJbMtg", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "XCP", + "get_quantity": 70000000000, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 732381, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 264, + "fee_provided_remaining": 264, + "status": "filled" + }, + { + "tx_index": 2202451, + "tx_hash": "77f568fc6604dbe209d2ea1b0158d7de20723c0178107eb570f4f2a719b0d7c7", + "block_index": 772817, + "source": "184gKLQTtQU29LXbxbYJkUV4if9SmW6v2d", + "give_asset": "XCP", + "give_quantity": 80800000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 773300, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 264, + "fee_provided_remaining": 264, + "status": "filled" + }, + { + "tx_index": 825411, + "tx_hash": "7b2369f40078f4d98a3d3a7733315a1c4efd7977c75f7066dd447d5c7eed7f20", + "block_index": 455461, + "source": "18cmgoX99Nrm411YKpmTQsp23qczWdxS6w", + "give_asset": "PEPECASH", + "give_quantity": 300000000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 460461, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 40000, + "fee_provided_remaining": 40000, + "status": "filled" + }, + { + "tx_index": 825403, + "tx_hash": "7e1abf6ad57eb61227015fc7a333da034b4dd2f1c4e23cf106864b60a20feef7", + "block_index": 455460, + "source": "18cmgoX99Nrm411YKpmTQsp23qczWdxS6w", + "give_asset": "PEPECASH", + "give_quantity": 200000000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 1000, + "expire_index": 456460, + "fee_required": 20000, + "fee_required_remaining": 20000, + "fee_provided": 50766, + "fee_provided_remaining": 50766, + "status": "filled" + }, + { + "tx_index": 825370, + "tx_hash": "8e4d324407b62de773af53f8f7a556882ac82a217c216491a28072f293918fe6", + "block_index": 455457, + "source": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "PEPECASH", + "get_quantity": 100000000000, + "get_remaining": -1100000000, + "expiration": 1000, + "expire_index": 456457, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 75791, + "fee_provided_remaining": 75791, + "status": "filled" + }, + { + "tx_index": 825413, + "tx_hash": "927878fa98edb6d24310c45254c324f3d5a7f625e2a3a0e7fd1e749b49493750", + "block_index": 455461, + "source": "18cmgoX99Nrm411YKpmTQsp23qczWdxS6w", + "give_asset": "PEPECASH", + "give_quantity": 400000000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 460461, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 40000, + "fee_provided_remaining": 40000, + "status": "filled" + }, + { + "tx_index": 1946587, + "tx_hash": "b747f290cbbad6faa1c1c05d5c6d001b5a3ef487027bb0d4eefcdc9f6e865c39", + "block_index": 727444, + "source": "1AtcSh7uxenQ6AR5xqr6agAegWRUF5N4uh", + "give_asset": "XCP", + "give_quantity": 70000000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 732444, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 792, + "fee_provided_remaining": 792, + "status": "filled" + }, + { + "tx_index": 825371, + "tx_hash": "b83c96217214decb6316c3619bc88a3471d17e46eb3708406c8f878dedd61610", + "block_index": 455460, + "source": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "PEPECASH", + "get_quantity": 200000000000, + "get_remaining": 0, + "expiration": 1000, + "expire_index": 456457, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 46098, + "fee_provided_remaining": 46098, + "status": "filled" + }, + { + "tx_index": 825372, + "tx_hash": "e32154f8ade796df0b121604de140703d062d22d1e82e77e629e6096668c812f", + "block_index": 455461, + "source": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "PEPECASH", + "get_quantity": 300000000000, + "get_remaining": 0, + "expiration": 1000, + "expire_index": 456457, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 46098, + "fee_provided_remaining": 46098, + "status": "filled" + } + ], + "/assets//credits": [ + { + "block_index": 840464, + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "UNNEGOTIABLE", + "quantity": 1, + "calling_function": "issuance", + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605 + } + ], + "/assets//debits": [ + { + "block_index": 280091, + "address": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1000000000, + "action": "send", + "event": "1c20d6596f6be031c94def5ad93a52217d76371885adcc53c91c3b1eaf76ccce", + "tx_index": 729 + }, + { + "block_index": 280112, + "address": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1100000000, + "action": "send", + "event": "4dacd03d73cb497229dbfe2e7209adc4221540efe0e4c57f408b09b2fd36ece6", + "tx_index": 749 + }, + { + "block_index": 280112, + "address": "1PMacKVWDszkBRbb2iWWvX63BwhKUTsSBd", + "asset": "XCP", + "quantity": 100000000, + "action": "send", + "event": "057d10cc33455f4f7af44d2f030b3866e3a16416ecf984e304c76abe98393c1d", + "tx_index": 752 + }, + { + "block_index": 280114, + "address": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1100000000, + "action": "send", + "event": "3ac6ea5b329832e2dc31ead6c5277beccb7d95f0d9f20f256f97067223c81e00", + "tx_index": 755 + }, + { + "block_index": 280156, + "address": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1100000000, + "action": "send", + "event": "66fc1409ac6646bd8c267de89c57d2204e31bb6dfce9ee2a3ab18416fadf9e9c", + "tx_index": 766 + } + ], + "/assets//dividends": [ + { + "tx_index": 1914456, + "tx_hash": "30760e413947ebdc80ed7a5ada1bd4466800b87e9976bbe811ad4e2b46546359", + "block_index": 724381, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "ENDTHEFED", + "quantity_per_unit": 1, + "fee_paid": 2520000, + "status": "valid" + }, + { + "tx_index": 1915246, + "tx_hash": "827794cbab3299f80a5b8b8cb8ec29ec3aee1373f7da2c05a156bed902bf4684", + "block_index": 724479, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "TRUMPDANCING", + "quantity_per_unit": 100, + "fee_paid": 2520000, + "status": "valid" + }, + { + "tx_index": 1920208, + "tx_hash": "7014f1e259531ba9632ca5000c35df5bd47f237318e48955900453ce9c07e917", + "block_index": 724931, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "CTRWOJACK", + "quantity_per_unit": 1111, + "fee_paid": 2700000, + "status": "valid" + }, + { + "tx_index": 1927909, + "tx_hash": "5556fd2b0802cf3bc0abd5001ecbac3adbc5b7c5c46a145a78daeef358c308de", + "block_index": 725654, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "WHITERUSSIAN", + "quantity_per_unit": 1, + "fee_paid": 3220000, + "status": "valid" + }, + { + "tx_index": 1983693, + "tx_hash": "cda646285cc63f758d19b5403070f23e2a6e4b34eb3b86b63a0f56f971345657", + "block_index": 730568, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "A4520591452211866149", + "quantity_per_unit": 1, + "fee_paid": 4040000, + "status": "valid" + }, + { + "tx_index": 1983842, + "tx_hash": "e4b73dc974cc279b873b78e5dc4a347c08788b02143ae27aa0582f900289be10", + "block_index": 730588, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "NCSWIC", + "quantity_per_unit": 1, + "fee_paid": 4040000, + "status": "valid" + }, + { + "tx_index": 1996395, + "tx_hash": "b342feb1421df107010ad3c8ee2043ded802bdf6cd619862459da3d0f87d6a99", + "block_index": 731994, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "FUCKTHEFED", + "quantity_per_unit": 1, + "fee_paid": 4380000, + "status": "valid" + }, + { + "tx_index": 2035947, + "tx_hash": "02d715fd9e8b7bbc782b1b2d92a1b9ffae9326bfc88ba76c453c515ad7c8c2bc", + "block_index": 738763, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "HOLDTHELINE", + "quantity_per_unit": 1, + "fee_paid": 4940000, + "status": "valid" + }, + { + "tx_index": 2174481, + "tx_hash": "b935a06fc34d8fa4f0c526984085b1b12c78e899415e595b625f1bee84ce3709", + "block_index": 762733, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "EOXIXIZERO", + "quantity_per_unit": 1, + "fee_paid": 6500000, + "status": "valid" + }, + { + "tx_index": 2198534, + "tx_hash": "a063e9a745b9f6bc3201f72abff196de20ec106bcc71d820673d516ddbb3aa90", + "block_index": 767569, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "TRUMPCARDS", + "quantity_per_unit": 1, + "fee_paid": 6660000, + "status": "valid" + }, + { + "tx_index": 2704948, + "tx_hash": "437102ca4698f63a12e369f6168e3c7f5f8eef3e225395d515775673e33d39c1", + "block_index": 832745, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "FUCKYOUWAR", + "quantity_per_unit": 1, + "fee_paid": 6840000, + "status": "valid" + }, + { + "tx_index": 2704949, + "tx_hash": "7d3807cc58fa2d9751b2b0089bfa8fa86ef795821be6d8e9418ab3a819eba299", + "block_index": 832745, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "MEDICINEPEPE", + "quantity_per_unit": 1, + "fee_paid": 6840000, + "status": "valid" + } + ], + "/assets//issuances": [ + { + "tx_index": 2726605, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "msg_index": 0, + "block_index": 840464, + "asset": "UNNEGOTIABLE", + "quantity": 1, + "divisible": 0, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "transfer": 0, + "callable": 0, + "call_date": 0, + "call_price": 0.0, + "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "fee_paid": 50000000, + "locked": 0, + "status": "valid", + "asset_longname": null, + "reset": 0 + } + ], + "/assets//sends": [ + { + "tx_index": 729, + "tx_hash": "1c20d6596f6be031c94def5ad93a52217d76371885adcc53c91c3b1eaf76ccce", + "block_index": 280091, + "source": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "destination": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1000000000, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 749, + "tx_hash": "4dacd03d73cb497229dbfe2e7209adc4221540efe0e4c57f408b09b2fd36ece6", + "block_index": 280112, + "source": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "destination": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1100000000, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 752, + "tx_hash": "057d10cc33455f4f7af44d2f030b3866e3a16416ecf984e304c76abe98393c1d", + "block_index": 280112, + "source": "1PMacKVWDszkBRbb2iWWvX63BwhKUTsSBd", + "destination": "1PMacKVWDszkBRbb2iWWvX63BwhKUTsSBd", + "asset": "XCP", + "quantity": 100000000, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 755, + "tx_hash": "3ac6ea5b329832e2dc31ead6c5277beccb7d95f0d9f20f256f97067223c81e00", + "block_index": 280114, + "source": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "destination": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1100000000, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 766, + "tx_hash": "66fc1409ac6646bd8c267de89c57d2204e31bb6dfce9ee2a3ab18416fadf9e9c", + "block_index": 280156, + "source": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "destination": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1100000000, + "status": "valid", + "msg_index": 0, + "memo": null + } + ], + "/assets//dispensers": [ + { + "tx_index": 2726460, + "tx_hash": "b592d8ca4994d182e4ec63e1659dc4282b1a84466b7d71ed68c281ce63ed4897", + "block_index": 839964, + "source": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", + "asset": "ERYKAHPEPU", + "give_quantity": 1, + "escrow_quantity": 25, + "satoshirate": 50000, + "status": 0, + "give_remaining": 25, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "dispense_count": 0 + } + ], + "/assets//dispensers/
": [ + { + "tx_index": 2726460, + "tx_hash": "b592d8ca4994d182e4ec63e1659dc4282b1a84466b7d71ed68c281ce63ed4897", + "block_index": 839964, + "source": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", + "asset": "ERYKAHPEPU", + "give_quantity": 1, + "escrow_quantity": 25, + "satoshirate": 50000, + "status": 0, + "give_remaining": 25, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "dispense_count": 0 + } + ], + "/assets//holders": [ + { + "address": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "address_quantity": 63, + "escrow": null + }, + { + "address": "16yRstRXStVJJ1TN2S4DCWifyrCsetpma7", + "address_quantity": 1, + "escrow": null + }, + { + "address": "bc1qsvqsa9arwz30g2z0w09twzn8gz3380h36yxacs", + "address_quantity": 2, + "escrow": null + }, + { + "address": "17PnWBjHkekZKQPVagmTR5HiD51pN8WHC8", + "address_quantity": 1, + "escrow": null + }, + { + "address": "1FRxFpP9XoRsvZFVqGtt4fjjgKe1h5tbAh", + "address_quantity": 1, + "escrow": null + }, + { + "address": "1AdHg2q3M2rMFRgZyZ7RQyNHdwjSib7wSZ", + "address_quantity": 2, + "escrow": null + }, + { + "address": "1CTnziWXidHzY3qT8gwLa1ZxZK37A7HreR", + "address_quantity": 1, + "escrow": null + }, + { + "address": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", + "address_quantity": 25, + "escrow": null + } + ], + "/orders/": [ + { + "tx_index": 2724132, + "tx_hash": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776", + "block_index": 840381, + "source": "15L7U55PAsHLEpQkZqz62e3eqWd9AHb2DH", + "give_asset": "PEPECASH", + "give_quantity": 6966600000000, + "give_remaining": 900000000000, + "get_asset": "XCP", + "get_quantity": 11076894000, + "get_remaining": 1431000000, + "expiration": 5000, + "expire_index": 843055, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 4488, + "fee_provided_remaining": 4488, + "status": "open" + } + ], + "/orders//matches": [ + { + "id": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776_5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947", + "tx0_index": 2724132, + "tx0_hash": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776", + "tx0_address": "15L7U55PAsHLEpQkZqz62e3eqWd9AHb2DH", + "tx1_index": 2726591, + "tx1_hash": "5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947", + "tx1_address": "15e15ua6A3FJqjMevtrWcFSzKn9k6bMQeA", + "forward_asset": "PEPECASH", + "forward_quantity": 6066600000000, + "backward_asset": "XCP", + "backward_quantity": 9645894000, + "tx0_block_index": 838055, + "tx1_block_index": 840381, + "block_index": 840381, + "tx0_expiration": 5000, + "tx1_expiration": 8064, + "match_expire_index": 840401, + "fee_paid": 0, + "status": "completed" + } + ], + "/orders//btcpays": [ + { + "tx_index": 2719343, + "tx_hash": "6cfa7f31b43a46e5ad74a9db810bd6cac56235a8ebc73ec63d01b38ea7ea2414", + "block_index": 836188, + "source": "1NfJnJdAdmm2rJCFW54NsAKqqTTMexCNJ3", + "destination": "1BepkwAhEmEuEGF349XjmEUrRvoy9a7Biv", + "btc_amount": 4500000, + "order_match_id": "0a1387df82a8a7e9cec01c52c8fee01f6995c4e39dc5804e1d2bf40d9368f5c5_299b5b648f54eacb839f3487232d49aea373cdd681b706d4cc0b5e0b03688db4", + "status": "valid" + } + ], + "/bets/": [ + { + "tx_index": 15106, + "tx_hash": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed", + "block_index": 304063, + "source": "18ZNyaAcH4HugeofwbrpLoUNiayxJRH65c", + "feed_address": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "bet_type": 3, + "deadline": 1401828300, + "wager_quantity": 50000000, + "wager_remaining": 0, + "counterwager_quantity": 50000000, + "counterwager_remaining": 0, + "target_value": 1.0, + "leverage": 5040, + "expiration": 11, + "expire_index": 304073, + "fee_fraction_int": 1000000, + "status": "filled" + } + ], + "/bets//matches": [ + { + "id": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed_cb5f888c299a50967d523513daed71636d927e6ef3dbda85feb11ff112ae4330", + "tx0_index": 15106, + "tx0_hash": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed", + "tx0_address": "18ZNyaAcH4HugeofwbrpLoUNiayxJRH65c", + "tx1_index": 15108, + "tx1_hash": "cb5f888c299a50967d523513daed71636d927e6ef3dbda85feb11ff112ae4330", + "tx1_address": "1PTqJmRCMGs4qBEh2APAFSrBv95Uf1hfiD", + "tx0_bet_type": 3, + "tx1_bet_type": 2, + "feed_address": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "initial_value": -1, + "deadline": 1401828300, + "target_value": 1.0, + "leverage": 5040, + "forward_quantity": 50000000, + "backward_quantity": 50000000, + "tx0_block_index": 304062, + "tx1_block_index": 304063, + "block_index": 306379, + "tx0_expiration": 11, + "tx1_expiration": 1459, + "match_expire_index": 304073, + "fee_fraction_int": 1000000, + "status": "expired" + } + ], + "/bets//resolutions": [ + { + "bet_match_id": "36bbbb7dbd85054dac140a8ad8204eda2ee859545528bd2a9da69ad77c277ace_d70ee4e44f02fe6258ee0c267f33f304a0fc61d4ce424852f58c28967dc1924f", + "bet_match_type_id": 5, + "block_index": 401128, + "winner": "Equal", + "settled": null, + "bull_credit": null, + "bear_credit": null, + "escrow_less_fee": 2000000, + "fee": 0 + } + ], + "/burns": [ + { + "tx_index": 10, + "tx_hash": "41bbe1ec81da008a0e92758efb6084af3a6b6acf483983456ec797ee59c0e0f1", + "block_index": 278511, + "source": "12crRpZpn93PKTQ4WYxHMw4xi6ckh1CFR3", + "burned": 99900000, + "earned": 148024554545, + "status": "valid" + }, + { + "tx_index": 11, + "tx_hash": "c403a92281b568c7d428d942354d026594dc54ae35c21f53ecf5c918208c45de", + "block_index": 278511, + "source": "13UXh9dBEhA48gJiegJNodqe91PK88f4pW", + "burned": 99900000, + "earned": 148024554545, + "status": "valid" + }, + { + "tx_index": 12, + "tx_hash": "749ba1c2bd314f7b98e9cfb44575495b4ad2cf624901c65488fbc4f57a3dc0ac", + "block_index": 278511, + "source": "19Ht3rkW7JB9VuC7rsZEGZju96ujzchaZZ", + "burned": 99900000, + "earned": 148024554545, + "status": "valid" + }, + { + "tx_index": 13, + "tx_hash": "da330160b71138f9bda5e126df0d5d6248c0879d88e16255c74135274d8ebd27", + "block_index": 278511, + "source": "16Fu8Edsvxqixg6VnaHKPWE2TEsqQMwXfV", + "burned": 99900000, + "earned": 148024554545, + "status": "valid" + }, + { + "tx_index": 14, + "tx_hash": "66994176733650e77ae0cf34349f63e6538649f40f86d2719013d915bbb7701e", + "block_index": 278517, + "source": "14FFaRsfzYQxhZQv1YsMn65MvMLfJShgM8", + "burned": 99900000, + "earned": 147970063636, + "status": "valid" + } + ], + "/dispensers/": [ + { + "tx_index": 2536311, + "tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a", + "block_index": 840322, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "asset": "FLOCK", + "give_quantity": 10000000000, + "escrow_quantity": 250000000000, + "satoshirate": 330000, + "status": 0, + "give_remaining": 140000000000, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "dispense_count": 2, + "asset_longname": null + } + ], + "/dispensers//dispenses": [ + { + "tx_index": 2610745, + "dispense_index": 0, + "tx_hash": "8c95cc6afc8fd466c784fd1c02749c585988999bbc66251b944c443dc31af757", + "block_index": 821450, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "destination": "1FKYM1CP9RfttJhNG8HTNQdE2uV3YvwbRB", + "asset": "FLOCK", + "dispense_quantity": 20000000000, + "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a" + }, + { + "tx_index": 2726580, + "dispense_index": 0, + "tx_hash": "e7f0f2c9bef7a492b714a5952ec61b283be344419c5bc33f405f9af41ebfa48b", + "block_index": 840322, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "destination": "bc1qzcdkhnexpjc8wvkyrpyrsn0f5xzcpu877mjmgj", + "asset": "FLOCK", + "dispense_quantity": 90000000000, + "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a" + } + ], + "/events": [ + { + "event_index": 10665092, + "event": "TRANSACTION_PARSED", + "bindings": { + "supported": true, + "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", + "tx_index": 2056160 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665091, + "event": "ENHANCED_SEND", + "bindings": { + "asset": "THOTHPEPE", + "block_index": 744232, + "destination": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", + "memo": null, + "quantity": 1, + "source": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", + "status": "valid", + "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", + "tx_index": 2056160 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665090, + "event": "CREDIT", + "bindings": { + "address": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", + "asset": "THOTHPEPE", + "block_index": 744232, + "calling_function": "send", + "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", + "quantity": 1, + "tx_index": 2056160 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665089, + "event": "DEBIT", + "bindings": { + "action": "send", + "address": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", + "asset": "THOTHPEPE", + "block_index": 744232, + "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", + "quantity": 1, + "tx_index": 2056160 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665088, + "event": "TRANSACTION_PARSED", + "bindings": { + "supported": true, + "tx_hash": "bbb2dfa7e7a32288a702ef0091ece8b2a929f94fd967a18e6071cd9c2b085eaf", + "tx_index": 2056159 + }, + "block_index": 744232, + "timestamp": 1712256340 + } + ], + "/events/": [ + { + "event_index": 10665092, + "event": "TRANSACTION_PARSED", + "bindings": { + "supported": true, + "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", + "tx_index": 2056160 + }, + "block_index": 744232, + "timestamp": 1712256340 + } + ], + "/events/counts": [ + { + "event": "ASSET_CREATION", + "event_count": 235858 + }, + { + "event": "ASSET_DESTRUCTION", + "event_count": 11141 + }, + { + "event": "ASSET_DIVIDEND", + "event_count": 4092 + }, + { + "event": "ASSET_ISSUANCE", + "event_count": 322676 + }, + { + "event": "ASSET_TRANSFER", + "event_count": 10630 + }, + { + "event": "BET_EXPIRATION", + "event_count": 588 + }, + { + "event": "BET_MATCH", + "event_count": 397 + }, + { + "event": "BET_MATCH_EXPIRATION", + "event_count": 9 + }, + { + "event": "BET_MATCH_RESOLUTON", + "event_count": 387 + }, + { + "event": "BET_MATCH_UPDATE", + "event_count": 397 + }, + { + "event": "BET_UPDATE", + "event_count": 1474 + }, + { + "event": "BLOCK_PARSED", + "event_count": 562278 + }, + { + "event": "BROADCAST", + "event_count": 106518 + }, + { + "event": "BTC_PAY", + "event_count": 2921 + }, + { + "event": "BURN", + "event_count": 2576 + }, + { + "event": "CANCEL_BET", + "event_count": 101 + }, + { + "event": "CANCEL_ORDER", + "event_count": 80168 + }, + { + "event": "CREDIT", + "event_count": 3657192 + }, + { + "event": "DEBIT", + "event_count": 2615306 + }, + { + "event": "DISPENSE", + "event_count": 190873 + }, + { + "event": "DISPENSER_UPDATE", + "event_count": 228954 + }, + { + "event": "ENHANCED_SEND", + "event_count": 538418 + }, + { + "event": "MPMA_SEND", + "event_count": 279142 + }, + { + "event": "NEW_BLOCK", + "event_count": 1906 + }, + { + "event": "NEW_TRANSACTION", + "event_count": 4485 + }, + { + "event": "NEW_TRANSACTION_OUTPUT", + "event_count": 596 + }, + { + "event": "OPEN_BET", + "event_count": 1149 + }, + { + "event": "OPEN_DISPENSER", + "event_count": 88228 + }, + { + "event": "OPEN_ORDER", + "event_count": 530117 + }, + { + "event": "OPEN_RPS", + "event_count": 266 + }, + { + "event": "ORDER_EXPIRATION", + "event_count": 195962 + }, + { + "event": "ORDER_FILLED", + "event_count": 805 + }, + { + "event": "ORDER_MATCH", + "event_count": 209415 + }, + { + "event": "ORDER_MATCH_EXPIRATION", + "event_count": 20860 + }, + { + "event": "ORDER_MATCH_UPDATE", + "event_count": 23689 + }, + { + "event": "ORDER_UPDATE", + "event_count": 732640 + }, + { + "event": "REFILL_DISPENSER", + "event_count": 187 + }, + { + "event": "RESET_ISSUANCE", + "event_count": 454 + }, + { + "event": "RPS_EXPIRATION", + "event_count": 59 + }, + { + "event": "RPS_MATCH", + "event_count": 171 + }, + { + "event": "RPS_MATCH_EXPIRATION", + "event_count": 145 + }, + { + "event": "RPS_MATCH_UPDATE", + "event_count": 271 + }, + { + "event": "RPS_RESOLVE", + "event_count": 129 + }, + { + "event": "RPS_UPDATE", + "event_count": 540 + }, + { + "event": "SEND", + "event_count": 805983 + }, + { + "event": "SWEEP", + "event_count": 1018 + }, + { + "event": "TRANSACTION_PARSED", + "event_count": 2723789 + } + ], + "/events/": [ + { + "event_index": 10665090, + "event": "CREDIT", + "bindings": { + "address": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", + "asset": "THOTHPEPE", + "block_index": 744232, + "calling_function": "send", + "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", + "quantity": 1, + "tx_index": 2056160 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665085, + "event": "CREDIT", + "bindings": { + "address": "1LfDk3Ex9KPYS6L1WGwNdt1TvEg6Le8uq", + "asset": "XCP", + "block_index": 744232, + "calling_function": "dispense", + "event": "bbb2dfa7e7a32288a702ef0091ece8b2a929f94fd967a18e6071cd9c2b085eaf", + "quantity": 10000000000, + "tx_index": 2056159 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665082, + "event": "CREDIT", + "bindings": { + "address": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", + "asset": "FREEDOMKEK", + "block_index": 744232, + "calling_function": "send", + "event": "b419d19729c2be813405c548431f4840d5c909b875f94b7c56aeca134e328ef6", + "quantity": 1, + "tx_index": 2056158 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665078, + "event": "CREDIT", + "bindings": { + "address": "1P8nYZwLmecAkQUHsx2H9Nkxd51UJ2Asau", + "asset": "PEPEFRIDAY", + "block_index": 744232, + "calling_function": "send", + "event": "145ebf6c563c4e91a2bc488954ef701dad730fc065697979c80d6d85cbba63e1", + "quantity": 1, + "tx_index": 2056157 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665074, + "event": "CREDIT", + "bindings": { + "address": "1NzDQ7HLm6PqJ2Wy6jEKMT7Zw1UbtjUV5a", + "asset": "PEPEFRIDAY", + "block_index": 744232, + "calling_function": "send", + "event": "388c7208d52bf617c1a3eef238a668f694a4f72dc97b3be92562fe636ca646fa", + "quantity": 2, + "tx_index": 2056156 + }, + "block_index": 744232, + "timestamp": 1712256340 + } + ], + "/healthz": { + "data": "Healthy", + "success": true + }, + "/mempool/events": [], + "/mempool/events/": [] +} \ No newline at end of file diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index b434a5fd34..3cf1306928 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -6,7 +6,9 @@ CURR_DIR = os.path.dirname(os.path.realpath(__file__)) API_DOC_FILE = os.path.join(CURR_DIR, "../../../Documentation/docs/advanced/api/rest.md") +CACHE_FILE = os.path.join(CURR_DIR, "apicache.json") API_ROOT = "http://api:api@localhost:4000" +USE_API_CACHE = False def get_example_output(path, args): @@ -35,8 +37,12 @@ def get_example_output(path, args): The Counterparty Core API is the recommended (and only supported) way to query the state of a Counterparty node. The following routes are available: """ -current_group = None +cache = {} +if USE_API_CACHE and os.path.exists(CACHE_FILE): + with open(CACHE_FILE, "r") as f: + cache = json.load(f) +current_group = None for path, route in server.routes.ROUTES.items(): route_group = path.split("/")[1] if route_group != current_group: @@ -62,7 +68,11 @@ def get_example_output(path, args): if not arg["required"]: md += f" + Default: `{arg.get('default', '')}`\n" if example_args != {} or route["args"] == []: - example_output = get_example_output(path, example_args) + if not USE_API_CACHE: + example_output = get_example_output(path, example_args) + cache[path] = example_output + else: + example_output = cache.get(path, {}) example_output_json = json.dumps(example_output, indent=4) md += "\n+ Response 200 (application/json)\n\n" md += " ```\n" @@ -70,6 +80,10 @@ def get_example_output(path, args): md += f" {line}\n" md += " ```\n" +if not USE_API_CACHE: + with open(CACHE_FILE, "w") as f: + json.dump(cache, f, indent=4) + with open(API_DOC_FILE, "w") as f: f.write(md) print(f"API documentation written to {API_DOC_FILE}") From 5762f8dac4738c654f8226960a12ec4893136c99 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 23 Apr 2024 18:48:59 +0200 Subject: [PATCH 086/280] tweak gendoc cache --- counterparty-core/tools/apicache.json | 22 +++++++++++----------- counterparty-core/tools/genapidoc.py | 11 +++++------ 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/counterparty-core/tools/apicache.json b/counterparty-core/tools/apicache.json index d6ce0c4c31..1258df2320 100644 --- a/counterparty-core/tools/apicache.json +++ b/counterparty-core/tools/apicache.json @@ -21,16 +21,6 @@ "messages_hash": "16b7d40543b7b80587f4d98c84fcdfdceb2d1c18abba82c7064c09c2795b7ab2" } ], - "/blocks/": { - "block_index": 840464, - "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", - "block_time": 1713852783, - "previous_block_hash": "00000000000000000002db1e5aa19784eec3de949f98ec757e7a7f2fc392079d", - "difficulty": 86388558925171.02, - "ledger_hash": "b3f8cbb50b0705a5c4a8495f8b5128de13a32daebd8ac5e8316a010f0d203584", - "txlist_hash": "84bdc5b9073f775a2b65de7da2b10b89a2235f3501883b0a836e41e68cd00d46", - "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540" - }, "/blocks//transactions": [ { "tx_index": 2726605, @@ -1828,5 +1818,15 @@ "success": true }, "/mempool/events": [], - "/mempool/events/": [] + "/mempool/events/": [], + "/blocks/": { + "block_index": 840464, + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_time": 1713852783, + "previous_block_hash": "00000000000000000002db1e5aa19784eec3de949f98ec757e7a7f2fc392079d", + "difficulty": 86388558925171.02, + "ledger_hash": "b3f8cbb50b0705a5c4a8495f8b5128de13a32daebd8ac5e8316a010f0d203584", + "txlist_hash": "84bdc5b9073f775a2b65de7da2b10b89a2235f3501883b0a836e41e68cd00d46", + "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540" + } } \ No newline at end of file diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index 3cf1306928..72044f9060 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -8,7 +8,7 @@ API_DOC_FILE = os.path.join(CURR_DIR, "../../../Documentation/docs/advanced/api/rest.md") CACHE_FILE = os.path.join(CURR_DIR, "apicache.json") API_ROOT = "http://api:api@localhost:4000" -USE_API_CACHE = False +USE_API_CACHE = True def get_example_output(path, args): @@ -68,11 +68,11 @@ def get_example_output(path, args): if not arg["required"]: md += f" + Default: `{arg.get('default', '')}`\n" if example_args != {} or route["args"] == []: - if not USE_API_CACHE: + if not USE_API_CACHE or path not in cache: example_output = get_example_output(path, example_args) cache[path] = example_output else: - example_output = cache.get(path, {}) + example_output = cache[path] example_output_json = json.dumps(example_output, indent=4) md += "\n+ Response 200 (application/json)\n\n" md += " ```\n" @@ -80,9 +80,8 @@ def get_example_output(path, args): md += f" {line}\n" md += " ```\n" -if not USE_API_CACHE: - with open(CACHE_FILE, "w") as f: - json.dump(cache, f, indent=4) +with open(CACHE_FILE, "w") as f: + json.dump(cache, f, indent=4) with open(API_DOC_FILE, "w") as f: f.write(md) From ccc94c769392a0eef9ecc6bbd9e192de1a5dad15 Mon Sep 17 00:00:00 2001 From: matt marcello Date: Tue, 23 Apr 2024 14:45:09 -0400 Subject: [PATCH 087/280] fetch blocks from last known tx + 1 to last known hash --- .../counterpartycore/lib/kickstart/__init__.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/kickstart/__init__.py b/counterparty-core/counterpartycore/lib/kickstart/__init__.py index 4ca89a68c4..c309a3df65 100644 --- a/counterparty-core/counterpartycore/lib/kickstart/__init__.py +++ b/counterparty-core/counterpartycore/lib/kickstart/__init__.py @@ -180,11 +180,11 @@ def intialize_kickstart_db(bitcoind_dir, last_known_hash, resuming, new_database if not resuming: first_block = config.BLOCK_FIRST if not new_database: - first_block_info = cursor.execute( - "SELECT block_index FROM blocks ORDER BY block_index DESC LIMIT 1" + most_recent_transaction = cursor.execute( + "SELECT block_index FROM transactions ORDER BY block_index DESC LIMIT 1" ).fetchone() - if first_block_info is not None: - first_block = first_block_info["block_index"] + if most_recent_transaction is not None: + first_block = most_recent_transaction["block_index"] + 1 fetch_blocks(cursor, bitcoind_dir, last_known_hash, first_block, spinner) else: # check if kickstart_blocks is complete From 3b3973a0ec5693dcd0fb14ab0f92a3bf6ed6f295 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 23 Apr 2024 22:48:20 +0200 Subject: [PATCH 088/280] support float args --- counterparty-core/counterpartycore/lib/api/api_server.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 997e31a277..8038accc5b 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -115,6 +115,11 @@ def prepare_args(route, **kwargs): function_args[arg_name] = int(str_arg) except ValueError as e: raise ValueError(f"Invalid integer: {arg_name}") from e + elif arg["type"] == "float": + try: + function_args[arg_name] = float(str_arg) + except ValueError as e: + raise ValueError(f"Invalid float: {arg_name}") from e else: function_args[arg_name] = str_arg return function_args From 0f7ffd37a2036c5d65ccb8317e08d2b310743f7e Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 23 Apr 2024 22:48:44 +0200 Subject: [PATCH 089/280] More output example for compose --- .../counterpartycore/lib/transaction.py | 14 +++++++------- counterparty-core/tools/apicache.json | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index 0d721a2b0b..655ad51c2d 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -1254,11 +1254,11 @@ def compose_broadcast( ): """ Composes a transaction to broadcast textual and numerical information to the network. - :param address: The address that will be sending (must have the necessary quantity of the specified asset) - :param timestamp: The timestamp of the broadcast, in Unix time - :param value: Numerical value of the broadcast - :param fee_fraction: How much of every bet on this feed should go to its operator; a fraction of 1, (i.e. 0.05 is five percent) - :param text: The textual part of the broadcast + :param address: The address that will be sending (must have the necessary quantity of the specified asset) (e.g. 1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev) + :param timestamp: The timestamp of the broadcast, in Unix time (e.g. 4003903983) + :param value: Numerical value of the broadcast (e.g. 100) + :param fee_fraction: How much of every bet on this feed should go to its operator; a fraction of 1, (i.e. 0.05 is five percent) (e.g. 0.05) + :param text: The textual part of the broadcast (e.g. "Hello, world!") """ params = { "source": address, @@ -1283,8 +1283,8 @@ def compose_broadcast( def compose_btcpay(db, address: str, order_match_id: str, **construct_args): """ Composes a transaction to pay for a BTC order match. - :param address: The address that will be sending the payment - :param order_match_id: The ID of the order match to pay for + :param address: The address that will be sending the payment (e.g. bc1qsteve3tfxfg9pcmvzw645sr9zy7es5rx645p6l) + :param order_match_id: The ID of the order match to pay for (e.g. e470416a9500fb046835192da013f48e6468a07dba1bede4a0b68e666ed23c8d_4953bde3d9417b103615c2d3d4b284d4fcf7cbd820e5dd19ac0084e9ebd090b2) """ params = {"source": address, "order_match_id": order_match_id} rawtransaction = compose_transaction( diff --git a/counterparty-core/tools/apicache.json b/counterparty-core/tools/apicache.json index 1258df2320..cffe8c8ac0 100644 --- a/counterparty-core/tools/apicache.json +++ b/counterparty-core/tools/apicache.json @@ -1828,5 +1828,24 @@ "ledger_hash": "b3f8cbb50b0705a5c4a8495f8b5128de13a32daebd8ac5e8316a010f0d203584", "txlist_hash": "84bdc5b9073f775a2b65de7da2b10b89a2235f3501883b0a836e41e68cd00d46", "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540" + }, + "/addresses/
/compose/broadcast": { + "rawtransaction": "01000000019a753a6b8be54cdee2acd408f6199e29092c8c32e13912865a68da8a0d9ae065010000001976a914bce6191bf2fd5981313cae869e9fafe164f7dbaf88acffffffff0200000000000000002b6a2988dab644080b5ae67a54ba74394f5f94b41e385fc911aa5c810c5f98e6f6b17518ca736e94353de8e82a282b00000000001976a914bce6191bf2fd5981313cae869e9fafe164f7dbaf88ac00000000", + "params": { + "source": "1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev", + "timestamp": 4003903983, + "value": 100.0, + "fee_fraction": 0.05, + "text": "\"Hello, world!\"" + }, + "name": "broadcast" + }, + "/addresses/
/compose/btcpay": { + "rawtransaction": "0200000000010161101e1990879ee64168cce92c9caf338bb571e9cb246b1c2ab87124b95091900200000016001482f2ccc569325050e36c13b55a4065113d985066ffffffff0383c3040000000000160014a9943f67bcd30331d5a4ec6d902cbe03789a1b9700000000000000004b6a49aae396d448ed266a7785be1f6fcfa38dbe3e6e043e3d67691f678d6aa3b30e423f66ffad71eaf3231ef8f05dd5cc2f5b1ea14d33274b9cddacca5bd816a1ce6d5b4d498eb66a981db70bc758000000000016001482f2ccc569325050e36c13b55a4065113d98506602000000000000", + "params": { + "source": "bc1qsteve3tfxfg9pcmvzw645sr9zy7es5rx645p6l", + "order_match_id": "e470416a9500fb046835192da013f48e6468a07dba1bede4a0b68e666ed23c8d_4953bde3d9417b103615c2d3d4b284d4fcf7cbd820e5dd19ac0084e9ebd090b2" + }, + "name": "btcpay" } } \ No newline at end of file From 961c332f52dc517d028f744075d840e4eaa7ec50 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 23 Apr 2024 22:55:29 +0200 Subject: [PATCH 090/280] catch correctly compose error --- .../counterpartycore/lib/api/api_server.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 8038accc5b..6040acf7c2 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -11,6 +11,7 @@ blocks, config, database, + exceptions, ledger, ) from counterpartycore.lib.api.routes import ROUTES @@ -138,8 +139,13 @@ def handle_route(**kwargs): try: function_args = prepare_args(route, **kwargs) except ValueError as e: - return inject_headers({"error": str(e)}, return_code=400) - result = route["function"](db, **function_args) + return inject_headers({"success": False, "error": str(e)}, return_code=400) + try: + result = route["function"](db, **function_args) + except (exceptions.ComposeError, exceptions.UnpackError) as e: + return inject_headers({"success": False, "error": str(e)}, return_code=503) + except Exception: + return inject_headers({"success": False, "error": "Unknwon error"}, return_code=503) result = remove_rowids(result) return inject_headers(result) From 66cdc2e96d88beedaf4ea78505469ebc8b0f6bc9 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 23 Apr 2024 23:02:38 +0200 Subject: [PATCH 091/280] log unexpected API error --- counterparty-core/counterpartycore/lib/api/api_server.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 6040acf7c2..f51ebe723c 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -144,7 +144,8 @@ def handle_route(**kwargs): result = route["function"](db, **function_args) except (exceptions.ComposeError, exceptions.UnpackError) as e: return inject_headers({"success": False, "error": str(e)}, return_code=503) - except Exception: + except Exception as e: + logger.error("Error in API: %s", e) return inject_headers({"success": False, "error": "Unknwon error"}, return_code=503) result = remove_rowids(result) return inject_headers(result) From e6070ad874a7f6979247a37748e0742ac90449dc Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 24 Apr 2024 10:38:27 +0200 Subject: [PATCH 092/280] Standardize API result --- .../counterpartycore/lib/api/api_server.py | 12 +- .../counterpartycore/test/api_v2_test.py | 16 +- .../test/fixtures/api_v2_fixtures.json | 2850 +++++++++-------- 3 files changed, 1526 insertions(+), 1352 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index f51ebe723c..05dc88d58c 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -78,18 +78,24 @@ def api_root(): def inject_headers(result, return_code=None): - server_ready = ledger.CURRENT_BLOCK_INDEX >= BACKEND_HEIGHT + server_ready = ledger.CURRENT_BLOCK_INDEX >= BACKEND_HEIGHT - 1 + json_result = {"success": True, "result": result} http_code = 200 if return_code: http_code = return_code elif not server_ready: http_code = config.API_NOT_READY_HTTP_CODE + json_result["error"] = "Counterparty not ready" + if http_code != 200: + json_result["success"] = False + if isinstance(result, flask.Response): response = result else: - response = flask.make_response(to_json(result), http_code) + response = flask.make_response(to_json(json_result), http_code) + response.headers["X-COUNTERPARTY-HEIGHT"] = ledger.CURRENT_BLOCK_INDEX - response.headers["X-COUNTERPARTY-READY"] = ledger.CURRENT_BLOCK_INDEX >= BACKEND_HEIGHT + response.headers["X-COUNTERPARTY-READY"] = server_ready response.headers["X-BACKEND-HEIGHT"] = BACKEND_HEIGHT response.headers["Content-Type"] = "application/json" return response diff --git a/counterparty-core/counterpartycore/test/api_v2_test.py b/counterparty-core/counterpartycore/test/api_v2_test.py index edb79c6a85..7bd503b9f2 100644 --- a/counterparty-core/counterpartycore/test/api_v2_test.py +++ b/counterparty-core/counterpartycore/test/api_v2_test.py @@ -77,7 +77,7 @@ def test_api_v2_unpack(request, server_db): for data in datas: result = requests.get(url, params={"datahex": data["datahex"]}) # noqa: S113 assert result.status_code == 200 - assert result.json() == data["result"] + assert result.json()["result"] == data["result"] @pytest.mark.usefixtures("api_server_v2") @@ -85,7 +85,7 @@ def test_new_get_balances_by_address(): alice = ADDR[0] url = f"{API_ROOT}/addresses/{alice}/balances" result = requests.get(url) # noqa: S113 - assert result.json() == [ + assert result.json()["result"] == [ { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", "asset": "A95428956661682277", @@ -134,7 +134,7 @@ def test_new_get_balances_by_asset(): asset = "XCP" url = f"{API_ROOT}/assets/{asset}/balances" result = requests.get(url) # noqa: S113 - assert result.json() == [ + assert result.json()["result"] == [ { "address": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", "asset": "XCP", @@ -193,7 +193,7 @@ def test_new_get_balances_by_asset(): def test_new_get_balances_vs_old(): asset = "XCP" url = f"{API_ROOT}/assets/{asset}/balances" - new_balances = requests.get(url).json() # noqa: S113 + new_balances = requests.get(url).json()["result"] # noqa: S113 old_balance = util.api( "get_balances", { @@ -218,7 +218,7 @@ def test_new_get_asset_info(): url = f"{API_ROOT}/assets/{asset}" result = requests.get(url) # noqa: S113 - assert result.json() == { + assert result.json()["result"] == { "asset": "NODIVISIBLE", "asset_longname": None, "description": "No divisible asset", @@ -235,7 +235,7 @@ def test_new_get_asset_info(): def test_new_get_asset_orders(): asset = "XCP" url = f"{API_ROOT}/assets/{asset}/orders" - result = requests.get(url).json() # noqa: S113 + result = requests.get(url).json()["result"] # noqa: S113 assert len(result) == 6 assert result[0] == { "tx_index": 11, @@ -262,7 +262,7 @@ def test_new_get_asset_orders(): def test_new_get_order_info(): tx_hash = "1899b2e6ec36ba4bc9d035e6640b0a62b08c3a147c77c89183a77d9ed9081b3a" url = f"{API_ROOT}/orders/{tx_hash}" - result = requests.get(url).json() # noqa: S113 + result = requests.get(url).json()["result"] # noqa: S113 assert result[0] == { "tx_index": 11, "tx_hash": "1899b2e6ec36ba4bc9d035e6640b0a62b08c3a147c77c89183a77d9ed9081b3a", @@ -288,7 +288,7 @@ def test_new_get_order_info(): def test_new_get_order_matches(): tx_hash = "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498" url = f"{API_ROOT}/orders/{tx_hash}/matches" - result = requests.get(url).json() # noqa: S113 + result = requests.get(url).json()["result"] # noqa: S113 assert result[0] == { "id": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498_1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81", "tx0_index": 492, diff --git a/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json b/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json index 463f90c33d..bec05b9699 100644 --- a/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json +++ b/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json @@ -1,96 +1,112 @@ { - "http://api:api@localhost:10009/blocks": [ - { - "block_index": 310500, - "block_hash": "54aeaf47d5387964e2d51617bf3af50520a0449410e0d096cf8c2aa9dad5550b", - "block_time": 310500000, - "previous_block_hash": null, - "difficulty": null, - "ledger_hash": "5ffefc7a2724be6bd697796bb82638ec913c5cbb73627153d1a13b48c7a6c02d", - "txlist_hash": "35f4a33840d002ab4e0e44f11c1749ae95b41376927fb346140508b32518edd1", - "messages_hash": "45f296a535c13129cb1aaeb4e28a03e04ad902917891c39ae59ea2894e9f868f" - }, - { - "block_index": 310499, - "block_hash": "1950e1a4d7fc820ed9603f6df6819c3c953c277c726340dec2a4253e261a1764", - "block_time": 310499000, - "previous_block_hash": null, - "difficulty": null, - "ledger_hash": "b9fcbdafddd46fdda061f6e9f8744b426b6ca37e32b315df1098cbc7899ae9b9", - "txlist_hash": "032166892f568bb97f4f69ef5bdf49cc1b15cc9f8c7f6c1f3e1f9d54816ad7e5", - "messages_hash": "d6aedacd4f81520d86ae47c9c776d17a213c706a5cf7c91203a4299261d1648c" - }, - { - "block_index": 310498, - "block_hash": "b7058b6d1ddc325a10bf33144937e06ce6025215b416518ae120da9440ae279e", - "block_time": 310498000, - "previous_block_hash": null, - "difficulty": null, - "ledger_hash": "5fe6cdb0828379bf240fad99c68bba34e1889bbc19605ce5c297b82352264414", - "txlist_hash": "b488f6f0e6c233f202ee17c0843236d464144e79c870af88bae56355ae9372b7", - "messages_hash": "113207bd13dda56b5e5edf305f70a56e62cc861184e1e95a64e79ce100462c98" - }, - { - "block_index": 310497, - "block_hash": "f1118591fe79b8bf52ccf0c5de9826bfd266b1fdc24b44676cf22bbcc76d464e", - "block_time": 310497000, - "previous_block_hash": null, - "difficulty": null, - "ledger_hash": "28c6e92b2299b9cbbb5953f8b7ff3de0fe962d15642ba27e43faa64e1935e819", - "txlist_hash": "ff8136601b9e0138a999d1f0467af6e8535a2bcdd2b622af7be0178a083b9519", - "messages_hash": "ac8d8759fbddc8f92ad8b5d8b4637a63b8d21a04ba1a4126baf2b42a87edfce3" - }, - { - "block_index": 310496, - "block_hash": "65884816927e8c566655e85c07bc2bc2c7ee26e625742f219939d43238fb31f8", - "block_time": 310496000, - "previous_block_hash": null, - "difficulty": null, - "ledger_hash": "7ac6121c624b634f44695172761830926afe76bb18c4cc9195773f3a26966941", - "txlist_hash": "9eda85cce745579122ba9c6e24b63cd83f2e5161031a34e6ee9bf08b80823cb4", - "messages_hash": "1b1ed76f99d39b36f4d0737299ce15b21fed9e077d0476658c023b09819853a7" - }, - { - "block_index": 310495, - "block_hash": "4769aa7030f28a05a137a85ef4ee0c1765c37013773212b93ec90f1227168b67", - "block_time": 310495000, - "previous_block_hash": null, - "difficulty": null, - "ledger_hash": "5a7e5a36882466373d576bb5f4ccd1bc72ecaf548b9589baa803a7275a7a24cd", - "txlist_hash": "09e9db121649cacd979fd18bbaa35e519361e727e7e072e2f2f86291160cdb29", - "messages_hash": "56518bc9abc11bf108188834058bb9c51c9b8dc3b6276116c5b786b07c797fab" - }, - { - "block_index": 310494, - "block_hash": "7dda1d3e12785313d5651ee5314d0aecf17588196f9150b10c55695dbaebee5d", - "block_time": 310494000, - "previous_block_hash": null, - "difficulty": null, - "ledger_hash": "72d71bd72263699ea9f2b097ad141be5bc394f49d8b0b0a6b2ff6a87b0ee3919", - "txlist_hash": "9350c3ba33d0546d1194c5fa767ced28834b26246aedc56d89b1d48ec4f26014", - "messages_hash": "0d3c87692d49dc033eed975eb8b8ee17ff2f0f877c8ed5a5866f73ce63bf8715" - }, - { - "block_index": 310493, - "block_hash": "c19e2915b750279b2be4b52e57e5ce29f63dffb4e14d9aad30c9e820affc0cbf", - "block_time": 310493000, - "previous_block_hash": null, - "difficulty": null, - "ledger_hash": "29119cd30a4733916fbfd0551506eaa16f7bb1bdfbdf8d17ac4e5bb20d1cb09c", - "txlist_hash": "7ec4cfa94544900c8e8732ad51be7cee6452aa1884ea940cd5c98862fb4aaba6", - "messages_hash": "53a339feb73df3a98bc4acc84af77e111d4780533c8f5a26cf250594d9613cf2" - }, - { - "block_index": 310492, - "block_hash": "8a09b2faf0a7ad67eb4ab5c948b9769fc87eb2ec5e16108f2cde8bd9e6cf7607", - "block_time": 310492000, - "previous_block_hash": null, - "difficulty": null, - "ledger_hash": "98af18583618fdeed545347c013763d068e8294405d265911cc5e1bc420bc740", - "txlist_hash": "daf4d2c1a1ad5206abcf7744bdd06fae99c442fb2607a843dcabb5727d02916e", - "messages_hash": "0d34fbc26126add5a57b7e8f6f71bad150d7232abf046f3fa9b1fc72b10d61b2" - }, - { + "http://api:api@localhost:10009/blocks": { + "success": true, + "result": [ + { + "block_index": 310500, + "block_hash": "54aeaf47d5387964e2d51617bf3af50520a0449410e0d096cf8c2aa9dad5550b", + "block_time": 310500000, + "previous_block_hash": null, + "difficulty": null, + "ledger_hash": "5ffefc7a2724be6bd697796bb82638ec913c5cbb73627153d1a13b48c7a6c02d", + "txlist_hash": "35f4a33840d002ab4e0e44f11c1749ae95b41376927fb346140508b32518edd1", + "messages_hash": "45f296a535c13129cb1aaeb4e28a03e04ad902917891c39ae59ea2894e9f868f" + }, + { + "block_index": 310499, + "block_hash": "1950e1a4d7fc820ed9603f6df6819c3c953c277c726340dec2a4253e261a1764", + "block_time": 310499000, + "previous_block_hash": null, + "difficulty": null, + "ledger_hash": "b9fcbdafddd46fdda061f6e9f8744b426b6ca37e32b315df1098cbc7899ae9b9", + "txlist_hash": "032166892f568bb97f4f69ef5bdf49cc1b15cc9f8c7f6c1f3e1f9d54816ad7e5", + "messages_hash": "d6aedacd4f81520d86ae47c9c776d17a213c706a5cf7c91203a4299261d1648c" + }, + { + "block_index": 310498, + "block_hash": "b7058b6d1ddc325a10bf33144937e06ce6025215b416518ae120da9440ae279e", + "block_time": 310498000, + "previous_block_hash": null, + "difficulty": null, + "ledger_hash": "5fe6cdb0828379bf240fad99c68bba34e1889bbc19605ce5c297b82352264414", + "txlist_hash": "b488f6f0e6c233f202ee17c0843236d464144e79c870af88bae56355ae9372b7", + "messages_hash": "113207bd13dda56b5e5edf305f70a56e62cc861184e1e95a64e79ce100462c98" + }, + { + "block_index": 310497, + "block_hash": "f1118591fe79b8bf52ccf0c5de9826bfd266b1fdc24b44676cf22bbcc76d464e", + "block_time": 310497000, + "previous_block_hash": null, + "difficulty": null, + "ledger_hash": "28c6e92b2299b9cbbb5953f8b7ff3de0fe962d15642ba27e43faa64e1935e819", + "txlist_hash": "ff8136601b9e0138a999d1f0467af6e8535a2bcdd2b622af7be0178a083b9519", + "messages_hash": "ac8d8759fbddc8f92ad8b5d8b4637a63b8d21a04ba1a4126baf2b42a87edfce3" + }, + { + "block_index": 310496, + "block_hash": "65884816927e8c566655e85c07bc2bc2c7ee26e625742f219939d43238fb31f8", + "block_time": 310496000, + "previous_block_hash": null, + "difficulty": null, + "ledger_hash": "7ac6121c624b634f44695172761830926afe76bb18c4cc9195773f3a26966941", + "txlist_hash": "9eda85cce745579122ba9c6e24b63cd83f2e5161031a34e6ee9bf08b80823cb4", + "messages_hash": "1b1ed76f99d39b36f4d0737299ce15b21fed9e077d0476658c023b09819853a7" + }, + { + "block_index": 310495, + "block_hash": "4769aa7030f28a05a137a85ef4ee0c1765c37013773212b93ec90f1227168b67", + "block_time": 310495000, + "previous_block_hash": null, + "difficulty": null, + "ledger_hash": "5a7e5a36882466373d576bb5f4ccd1bc72ecaf548b9589baa803a7275a7a24cd", + "txlist_hash": "09e9db121649cacd979fd18bbaa35e519361e727e7e072e2f2f86291160cdb29", + "messages_hash": "56518bc9abc11bf108188834058bb9c51c9b8dc3b6276116c5b786b07c797fab" + }, + { + "block_index": 310494, + "block_hash": "7dda1d3e12785313d5651ee5314d0aecf17588196f9150b10c55695dbaebee5d", + "block_time": 310494000, + "previous_block_hash": null, + "difficulty": null, + "ledger_hash": "72d71bd72263699ea9f2b097ad141be5bc394f49d8b0b0a6b2ff6a87b0ee3919", + "txlist_hash": "9350c3ba33d0546d1194c5fa767ced28834b26246aedc56d89b1d48ec4f26014", + "messages_hash": "0d3c87692d49dc033eed975eb8b8ee17ff2f0f877c8ed5a5866f73ce63bf8715" + }, + { + "block_index": 310493, + "block_hash": "c19e2915b750279b2be4b52e57e5ce29f63dffb4e14d9aad30c9e820affc0cbf", + "block_time": 310493000, + "previous_block_hash": null, + "difficulty": null, + "ledger_hash": "29119cd30a4733916fbfd0551506eaa16f7bb1bdfbdf8d17ac4e5bb20d1cb09c", + "txlist_hash": "7ec4cfa94544900c8e8732ad51be7cee6452aa1884ea940cd5c98862fb4aaba6", + "messages_hash": "53a339feb73df3a98bc4acc84af77e111d4780533c8f5a26cf250594d9613cf2" + }, + { + "block_index": 310492, + "block_hash": "8a09b2faf0a7ad67eb4ab5c948b9769fc87eb2ec5e16108f2cde8bd9e6cf7607", + "block_time": 310492000, + "previous_block_hash": null, + "difficulty": null, + "ledger_hash": "98af18583618fdeed545347c013763d068e8294405d265911cc5e1bc420bc740", + "txlist_hash": "daf4d2c1a1ad5206abcf7744bdd06fae99c442fb2607a843dcabb5727d02916e", + "messages_hash": "0d34fbc26126add5a57b7e8f6f71bad150d7232abf046f3fa9b1fc72b10d61b2" + }, + { + "block_index": 310491, + "block_hash": "811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16", + "block_time": 310491000, + "previous_block_hash": null, + "difficulty": null, + "ledger_hash": "3114d8091cfcaa9944c6fab49d51950535c4ef269877d58c372ed80b2b472ec6", + "txlist_hash": "f065728a3544adc085fae976759c0d040a34ca0a8ddd39260b55f0262cd5baa8", + "messages_hash": "9671cfedb3124b67ed996c547cb26a32e95490009ad56065c79be54a28c45994" + } + ] + }, + "http://api:api@localhost:10009/blocks/310491": { + "success": true, + "result": { "block_index": 310491, "block_hash": "811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16", "block_time": 310491000, @@ -100,19 +116,209 @@ "txlist_hash": "f065728a3544adc085fae976759c0d040a34ca0a8ddd39260b55f0262cd5baa8", "messages_hash": "9671cfedb3124b67ed996c547cb26a32e95490009ad56065c79be54a28c45994" } - ], - "http://api:api@localhost:10009/blocks/310491": { - "block_index": 310491, - "block_hash": "811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16", - "block_time": 310491000, - "previous_block_hash": null, - "difficulty": null, - "ledger_hash": "3114d8091cfcaa9944c6fab49d51950535c4ef269877d58c372ed80b2b472ec6", - "txlist_hash": "f065728a3544adc085fae976759c0d040a34ca0a8ddd39260b55f0262cd5baa8", - "messages_hash": "9671cfedb3124b67ed996c547cb26a32e95490009ad56065c79be54a28c45994" }, - "http://api:api@localhost:10009/blocks/310491/transactions": [ - { + "http://api:api@localhost:10009/blocks/310491/transactions": { + "success": true, + "result": [ + { + "tx_index": 492, + "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", + "block_index": 310491, + "block_hash": "811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16", + "block_time": 310491000, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "", + "btc_amount": 0, + "fee": 6800, + "data": "0000000a00000000000000010000000005f5e100000000000000000000000000000c350007d000000000000dbba0", + "supported": 1 + } + ] + }, + "http://api:api@localhost:10009/blocks/310491/events": { + "success": true, + "result": [ + { + "event_index": 1182, + "event": "BLOCK_PARSED", + "bindings": { + "block_index": 310491, + "ledger_hash": "3114d8091cfcaa9944c6fab49d51950535c4ef269877d58c372ed80b2b472ec6", + "messages_hash": "9671cfedb3124b67ed996c547cb26a32e95490009ad56065c79be54a28c45994", + "txlist_hash": "f065728a3544adc085fae976759c0d040a34ca0a8ddd39260b55f0262cd5baa8" + }, + "block_index": 310491, + "timestamp": 0 + }, + { + "event_index": 1181, + "event": "TRANSACTION_PARSED", + "bindings": { + "supported": true, + "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", + "tx_index": 492 + }, + "block_index": 310491, + "timestamp": 0 + }, + { + "event_index": 1180, + "event": "OPEN_ORDER", + "bindings": { + "block_index": 310491, + "expiration": 2000, + "expire_index": 312491, + "fee_provided": 6800, + "fee_provided_remaining": 6800, + "fee_required": 900000, + "fee_required_remaining": 900000, + "get_asset": "BTC", + "get_quantity": 800000, + "get_remaining": 800000, + "give_asset": "XCP", + "give_quantity": 100000000, + "give_remaining": 100000000, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "status": "open", + "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", + "tx_index": 492 + }, + "block_index": 310491, + "timestamp": 0 + }, + { + "event_index": 1179, + "event": "DEBIT", + "bindings": { + "action": "open order", + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "block_index": 310491, + "event": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", + "quantity": 100000000, + "tx_index": 492 + }, + "block_index": 310491, + "timestamp": 0 + }, + { + "event_index": 1178, + "event": "NEW_TRANSACTION", + "bindings": { + "block_hash": "811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16", + "block_index": 310491, + "block_time": 310491000, + "btc_amount": 0, + "data": "0000000a00000000000000010000000005f5e100000000000000000000000000000c350007d000000000000dbba0", + "destination": "", + "fee": 6800, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "supported": true, + "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", + "tx_index": 492 + }, + "block_index": 310491, + "timestamp": 0 + }, + { + "event_index": 1177, + "event": "NEW_BLOCK", + "bindings": { + "block_hash": "811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16", + "block_index": 310491, + "block_time": 310491000, + "difficulty": null, + "ledger_hash": null, + "previous_block_hash": null, + "txlist_hash": null + }, + "block_index": 310491, + "timestamp": 0 + } + ] + }, + "http://api:api@localhost:10009/blocks/310491/events/counts": { + "success": true, + "result": [ + { + "event": "BLOCK_PARSED", + "event_count": 1 + }, + { + "event": "DEBIT", + "event_count": 1 + }, + { + "event": "NEW_BLOCK", + "event_count": 1 + }, + { + "event": "NEW_TRANSACTION", + "event_count": 1 + }, + { + "event": "OPEN_ORDER", + "event_count": 1 + }, + { + "event": "TRANSACTION_PARSED", + "event_count": 1 + } + ] + }, + "http://api:api@localhost:10009/blocks/310491/events/CREDIT": { + "success": true, + "result": [] + }, + "http://api:api@localhost:10009/blocks/310491/credits": { + "success": true, + "result": [] + }, + "http://api:api@localhost:10009/blocks/310491/debits": { + "success": true, + "result": [ + { + "block_index": 310491, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 100000000, + "action": "open order", + "event": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", + "tx_index": 492 + } + ] + }, + "http://api:api@localhost:10009/blocks/310491/expirations": { + "success": true, + "result": [] + }, + "http://api:api@localhost:10009/blocks/310491/cancels": { + "success": true, + "result": [] + }, + "http://api:api@localhost:10009/blocks/310491/destructions": { + "success": true, + "result": [] + }, + "http://api:api@localhost:10009/blocks/310491/issuances": { + "success": true, + "result": [] + }, + "http://api:api@localhost:10009/blocks/310491/sends": { + "success": true, + "result": [] + }, + "http://api:api@localhost:10009/blocks/310491/dispenses": { + "success": true, + "result": [] + }, + "http://api:api@localhost:10009/blocks/310491/sweeps": { + "success": true, + "result": [] + }, + "http://api:api@localhost:10009/transactions/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { + "success": true, + "result": { "tx_index": 492, "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", "block_index": 310491, @@ -125,1274 +331,1236 @@ "data": "0000000a00000000000000010000000005f5e100000000000000000000000000000c350007d000000000000dbba0", "supported": 1 } - ], - "http://api:api@localhost:10009/blocks/310491/events": [ - { - "event_index": 1182, - "event": "BLOCK_PARSED", - "bindings": { - "block_index": 310491, - "ledger_hash": "3114d8091cfcaa9944c6fab49d51950535c4ef269877d58c372ed80b2b472ec6", - "messages_hash": "9671cfedb3124b67ed996c547cb26a32e95490009ad56065c79be54a28c45994", - "txlist_hash": "f065728a3544adc085fae976759c0d040a34ca0a8ddd39260b55f0262cd5baa8" + }, + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/balances": { + "success": true, + "result": [ + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "A95428956661682277", + "quantity": 100000000 }, - "block_index": 310491, - "timestamp": 0 - }, - { - "event_index": 1181, - "event": "TRANSACTION_PARSED", - "bindings": { - "supported": true, - "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", - "tx_index": 492 + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "CALLABLE", + "quantity": 1000 }, - "block_index": 310491, - "timestamp": 0 - }, - { - "event_index": 1180, - "event": "OPEN_ORDER", - "bindings": { - "block_index": 310491, - "expiration": 2000, - "expire_index": 312491, - "fee_provided": 6800, - "fee_provided_remaining": 6800, - "fee_required": 900000, - "fee_required_remaining": 900000, - "get_asset": "BTC", - "get_quantity": 800000, - "get_remaining": 800000, - "give_asset": "XCP", - "give_quantity": 100000000, - "give_remaining": 100000000, - "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "status": "open", - "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", - "tx_index": 492 + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "DIVISIBLE", + "quantity": 98800000000 }, - "block_index": 310491, - "timestamp": 0 - }, - { - "event_index": 1179, - "event": "DEBIT", - "bindings": { - "action": "open order", + { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "block_index": 310491, - "event": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", - "quantity": 100000000, - "tx_index": 492 + "asset": "LOCKED", + "quantity": 1000 }, - "block_index": 310491, - "timestamp": 0 - }, - { - "event_index": 1178, - "event": "NEW_TRANSACTION", - "bindings": { - "block_hash": "811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16", - "block_index": 310491, - "block_time": 310491000, - "btc_amount": 0, - "data": "0000000a00000000000000010000000005f5e100000000000000000000000000000c350007d000000000000dbba0", - "destination": "", - "fee": 6800, - "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "supported": true, - "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", - "tx_index": 492 + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "MAXI", + "quantity": 9223372036854775807 }, - "block_index": 310491, - "timestamp": 0 - }, - { - "event_index": 1177, - "event": "NEW_BLOCK", - "bindings": { - "block_hash": "811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16", - "block_index": 310491, - "block_time": 310491000, - "difficulty": null, - "ledger_hash": null, - "previous_block_hash": null, - "txlist_hash": null + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "NODIVISIBLE", + "quantity": 985 }, - "block_index": 310491, - "timestamp": 0 - } - ], - "http://api:api@localhost:10009/blocks/310491/events/counts": [ - { - "event": "BLOCK_PARSED", - "event_count": 1 - }, - { - "event": "DEBIT", - "event_count": 1 - }, - { - "event": "NEW_BLOCK", - "event_count": 1 - }, - { - "event": "NEW_TRANSACTION", - "event_count": 1 - }, - { - "event": "OPEN_ORDER", - "event_count": 1 - }, - { - "event": "TRANSACTION_PARSED", - "event_count": 1 - } - ], - "http://api:api@localhost:10009/blocks/310491/events/CREDIT": [], - "http://api:api@localhost:10009/blocks/310491/credits": [], - "http://api:api@localhost:10009/blocks/310491/debits": [ - { - "block_index": 310491, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 100000000, - "action": "open order", - "event": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", - "tx_index": 492 - } - ], - "http://api:api@localhost:10009/blocks/310491/expirations": [], - "http://api:api@localhost:10009/blocks/310491/cancels": [], - "http://api:api@localhost:10009/blocks/310491/destructions": [], - "http://api:api@localhost:10009/blocks/310491/issuances": [], - "http://api:api@localhost:10009/blocks/310491/sends": [], - "http://api:api@localhost:10009/blocks/310491/dispenses": [], - "http://api:api@localhost:10009/blocks/310491/sweeps": [], - "http://api:api@localhost:10009/transactions/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { - "tx_index": 492, - "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", - "block_index": 310491, - "block_hash": "811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16", - "block_time": 310491000, - "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "destination": "", - "btc_amount": 0, - "fee": 6800, - "data": "0000000a00000000000000010000000005f5e100000000000000000000000000000c350007d000000000000dbba0", - "supported": 1 + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "PARENT", + "quantity": 100000000 + }, + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 91875000000 + } + ] }, - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/balances": [ - { - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "A95428956661682277", - "quantity": 100000000 - }, - { - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "CALLABLE", - "quantity": 1000 - }, - { - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "DIVISIBLE", - "quantity": 98800000000 - }, - { - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "LOCKED", - "quantity": 1000 - }, - { - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "MAXI", - "quantity": 9223372036854775807 - }, - { - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "NODIVISIBLE", - "quantity": 985 - }, - { - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "PARENT", - "quantity": 100000000 - }, - { - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 91875000000 - } - ], "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/balances/NODIVISIBLE": { - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "NODIVISIBLE", - "quantity": 985 - }, - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/credits": [ - { - "block_index": 310000, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 93000000000, - "calling_function": "burn", - "event": "6dc5b0a33d4d4297e0f5cc2d23ae307951d32aab2d86b7fa147b385219f3a597", - "tx_index": 1 - }, - { - "block_index": 310001, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "DIVISIBLE", - "quantity": 100000000000, - "calling_function": "issuance", - "event": "1fc2e5a57f584b2f2edd05676e75c33d03eed1d3098cc0550ea33474e3ec9db1", - "tx_index": 2 - }, - { - "block_index": 310002, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "NODIVISIBLE", - "quantity": 1000, - "calling_function": "issuance", - "event": "7b1bf5144346279271b1ff78664f118224fe27fd8679d6c1519345f9c6c54584", - "tx_index": 3 - }, - { - "block_index": 310003, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "CALLABLE", - "quantity": 1000, - "calling_function": "issuance", - "event": "c26f3a0c4e57e41919ff27aae95a9a9d4d65d34c6da6f1893884a17c8d407140", - "tx_index": 4 - }, - { - "block_index": 310004, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "LOCKED", - "quantity": 1000, - "calling_function": "issuance", - "event": "90b5734be98b0f2a0bd4b6a269c8db3368e2e387bb890ade239951d05423b4da", - "tx_index": 5 - }, - { - "block_index": 310016, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "MAXI", - "quantity": 9223372036854775807, - "calling_function": "issuance", - "event": "bd4e9cbbe69c2db893cd32182a2d315c89c45ba4e31aa5775d1fe42d841cea39", - "tx_index": 17 - }, - { - "block_index": 310020, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 0, - "calling_function": "filled", - "event": "5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93", - "tx_index": 21 - }, - { - "block_index": 310102, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 9, - "calling_function": "bet settled", - "event": "16462eac6c795cea6e5985ee063867d8c61ae24373df02048186d28118d25bae", - "tx_index": 103 - }, - { - "block_index": 310102, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 0, - "calling_function": "feed fee", - "event": "16462eac6c795cea6e5985ee063867d8c61ae24373df02048186d28118d25bae", - "tx_index": 103 - }, - { - "block_index": 310482, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 100000000, - "calling_function": "send", - "event": "c8716524f33646b9af94d6f5e52494ff3b34466497094b1db2ab920e4f79bc34", - "tx_index": 483 - }, - { - "block_index": 310497, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "PARENT", - "quantity": 100000000, - "calling_function": "issuance", - "event": "076ae3d8eeb7fb40d2ae27692340157c746d9832806766b0dac5adb1526dc78f", - "tx_index": 498 - }, - { - "block_index": 310498, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "A95428956661682277", - "quantity": 100000000, - "calling_function": "issuance", - "event": "0abfce2662c05852fd8b181a60900678643cedad47b23a853b8c4eda82cb2cbf", - "tx_index": 499 - } - ], - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/debits": [ - { - "block_index": 310001, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 50000000, - "action": "issuance fee", - "event": "1fc2e5a57f584b2f2edd05676e75c33d03eed1d3098cc0550ea33474e3ec9db1", - "tx_index": 2 - }, - { - "block_index": 310002, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 50000000, - "action": "issuance fee", - "event": "7b1bf5144346279271b1ff78664f118224fe27fd8679d6c1519345f9c6c54584", - "tx_index": 3 - }, - { - "block_index": 310003, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 50000000, - "action": "issuance fee", - "event": "c26f3a0c4e57e41919ff27aae95a9a9d4d65d34c6da6f1893884a17c8d407140", - "tx_index": 4 - }, - { - "block_index": 310004, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 50000000, - "action": "issuance fee", - "event": "90b5734be98b0f2a0bd4b6a269c8db3368e2e387bb890ade239951d05423b4da", - "tx_index": 5 - }, - { - "block_index": 310005, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 0, - "action": "issuance fee", - "event": "344dcc8909ca3a137630726d0071dfd2df4f7c855bac150c7d3a8367835c90bc", - "tx_index": 6 - }, - { - "block_index": 310006, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 100000000, - "action": "open order", - "event": "4f0433ba841038e2e16328445930dd7bca35309b14b0da4451c8f94c631368b8", - "tx_index": 7 - }, - { - "block_index": 310007, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "DIVISIBLE", - "quantity": 100000000, - "action": "send", - "event": "6e91ae23de2035e3e28c3322712212333592a1f666bcff9dd91aec45d5ea2753", - "tx_index": 8 - }, - { - "block_index": 310008, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 100000000, - "action": "send", - "event": "4fd55abadfdbe77c3bda2431749cca934a29994a179620a62c1b57f28bd62a43", - "tx_index": 9 - }, - { - "block_index": 310009, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 100000000, - "action": "open order", - "event": "21460d5c07284f9be9baf824927d0d4e4eb790e297f3162305841607b672349b", - "tx_index": 10 - }, - { - "block_index": 310010, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 100000000, - "action": "open order", - "event": "1899b2e6ec36ba4bc9d035e6640b0a62b08c3a147c77c89183a77d9ed9081b3a", - "tx_index": 11 - }, - { - "block_index": 310012, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 300000000, - "action": "send", - "event": "698e97e507da8623cf38ab42701853443c8f7fe0d93b4674aabb42f9800ee9d6", - "tx_index": 13 - }, - { - "block_index": 310013, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "DIVISIBLE", - "quantity": 1000000000, - "action": "send", - "event": "0cfeeb559ed794d067557df0376a6c213b48b174b80cdb2c3c6d365cf538e132", - "tx_index": 14 - }, - { - "block_index": 310014, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "NODIVISIBLE", - "quantity": 5, - "action": "send", - "event": "1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a", - "tx_index": 15 - }, - { - "block_index": 310015, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "NODIVISIBLE", - "quantity": 10, - "action": "send", - "event": "e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c", - "tx_index": 16 - }, - { - "block_index": 310016, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 50000000, - "action": "issuance fee", - "event": "bd4e9cbbe69c2db893cd32182a2d315c89c45ba4e31aa5775d1fe42d841cea39", - "tx_index": 17 - }, - { - "block_index": 310019, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 9, - "action": "bet", - "event": "2a2169991597036b6dad687ea1feffd55465a204466f40c35cbba811cb3109b1", - "tx_index": 20 - }, - { - "block_index": 310110, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "DIVISIBLE", - "quantity": 100000000, - "action": "send", - "event": "f6a0f819e899b407cbfa07b4eff3d58902af3899abfbaa47d5f31d5b398e76e7", - "tx_index": 111 - }, - { - "block_index": 310481, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 100000000, - "action": "send", - "event": "b00bdf03402d81a2cbdbeac4b0df90cff5ab6bf9688f653383d49fe42b8422a5", - "tx_index": 482 - }, - { - "block_index": 310491, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 100000000, - "action": "open order", - "event": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", - "tx_index": 492 - }, - { - "block_index": 310497, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 50000000, - "action": "issuance fee", - "event": "076ae3d8eeb7fb40d2ae27692340157c746d9832806766b0dac5adb1526dc78f", - "tx_index": 498 - }, - { - "block_index": 310498, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 25000000, - "action": "issuance fee", - "event": "0abfce2662c05852fd8b181a60900678643cedad47b23a853b8c4eda82cb2cbf", - "tx_index": 499 - } - ], - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/bets": [ - { - "tx_index": 102, - "tx_hash": "db4ea092bea6036e3d1e5f6ec863db9b900252b4f4d6d9faa6165323f433c51e", - "block_index": 310101, - "source": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", - "feed_address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "bet_type": 3, - "deadline": 1388000200, - "wager_quantity": 10, - "wager_remaining": 10, - "counterwager_quantity": 10, - "counterwager_remaining": 10, - "target_value": 0.0, - "leverage": 5040, - "expiration": 1000, - "expire_index": 311101, - "fee_fraction_int": 5000000, - "status": "open" - } - ], - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/broadcasts": [ - { - "tx_index": 103, - "tx_hash": "16462eac6c795cea6e5985ee063867d8c61ae24373df02048186d28118d25bae", - "block_index": 310102, - "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "timestamp": 1388000002, - "value": 1.0, - "fee_fraction_int": 5000000, - "text": "Unit Test", - "locked": 0, - "status": "valid" - }, - { - "tx_index": 18, - "tx_hash": "d14388b74b63d93e4477b1fe8426028bb8ab20656703e3ce8deeb23c2fe0b8af", - "block_index": 310017, - "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "timestamp": 1388000000, - "value": 1.0, - "fee_fraction_int": 5000000, - "text": "Unit Test", - "locked": 0, - "status": "valid" - } - ], - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/burns": [ - { - "tx_index": 1, - "tx_hash": "6dc5b0a33d4d4297e0f5cc2d23ae307951d32aab2d86b7fa147b385219f3a597", - "block_index": 310000, - "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "burned": 62000000, - "earned": 93000000000, - "status": "valid" - } - ], - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sends": [ - { - "tx_index": 8, - "tx_hash": "6e91ae23de2035e3e28c3322712212333592a1f666bcff9dd91aec45d5ea2753", - "block_index": 310007, - "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "destination": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", - "asset": "DIVISIBLE", - "quantity": 100000000, - "status": "valid", - "msg_index": 0, - "memo": null - }, - { - "tx_index": 9, - "tx_hash": "4fd55abadfdbe77c3bda2431749cca934a29994a179620a62c1b57f28bd62a43", - "block_index": 310008, - "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "destination": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", - "asset": "XCP", - "quantity": 100000000, - "status": "valid", - "msg_index": 0, - "memo": null - }, - { - "tx_index": 13, - "tx_hash": "698e97e507da8623cf38ab42701853443c8f7fe0d93b4674aabb42f9800ee9d6", - "block_index": 310012, - "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "destination": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", - "asset": "XCP", - "quantity": 300000000, - "status": "valid", - "msg_index": 0, - "memo": null - }, - { - "tx_index": 14, - "tx_hash": "0cfeeb559ed794d067557df0376a6c213b48b174b80cdb2c3c6d365cf538e132", - "block_index": 310013, - "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "destination": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", - "asset": "DIVISIBLE", - "quantity": 1000000000, - "status": "valid", - "msg_index": 0, - "memo": null - }, - { - "tx_index": 15, - "tx_hash": "1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a", - "block_index": 310014, - "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "destination": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", - "asset": "NODIVISIBLE", - "quantity": 5, - "status": "valid", - "msg_index": 0, - "memo": null - }, - { - "tx_index": 16, - "tx_hash": "e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c", - "block_index": 310015, - "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "destination": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", - "asset": "NODIVISIBLE", - "quantity": 10, - "status": "valid", - "msg_index": 0, - "memo": null - }, - { - "tx_index": 111, - "tx_hash": "f6a0f819e899b407cbfa07b4eff3d58902af3899abfbaa47d5f31d5b398e76e7", - "block_index": 310110, - "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "destination": "2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy", - "asset": "DIVISIBLE", - "quantity": 100000000, - "status": "valid", - "msg_index": 0, - "memo": null - }, - { - "tx_index": 482, - "tx_hash": "b00bdf03402d81a2cbdbeac4b0df90cff5ab6bf9688f653383d49fe42b8422a5", - "block_index": 310481, - "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "destination": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", - "asset": "XCP", - "quantity": 100000000, - "status": "valid", - "msg_index": 0, - "memo": "68656c6c6f" - } - ], - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/receives": [ - { - "tx_index": 483, - "tx_hash": "c8716524f33646b9af94d6f5e52494ff3b34466497094b1db2ab920e4f79bc34", - "block_index": 310482, - "source": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", - "destination": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "XCP", - "quantity": 100000000, - "status": "valid", - "msg_index": 0, - "memo": "fade0001" - } - ], - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sends/NODIVISIBLE": [ - { - "tx_index": 15, - "tx_hash": "1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a", - "block_index": 310014, - "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "destination": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", - "asset": "NODIVISIBLE", - "quantity": 5, - "status": "valid", - "msg_index": 0, - "memo": null - }, - { - "tx_index": 16, - "tx_hash": "e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c", - "block_index": 310015, - "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "destination": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", - "asset": "NODIVISIBLE", - "quantity": 10, - "status": "valid", - "msg_index": 0, - "memo": null - } - ], - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/receives/NODIVISIBLE": [], - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/dispensers": [], - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/dispensers/NODIVISIBLE": [], - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sweeps": [], - "http://api:api@localhost:10009/assets": [ - { - "asset": "A95428956661682277", - "asset_longname": "PARENT.already.issued" - }, - { - "asset": "CALLABLE", - "asset_longname": null - }, - { - "asset": "DIVIDEND", - "asset_longname": null - }, - { - "asset": "DIVISIBLE", - "asset_longname": null - }, - { - "asset": "LOCKED", - "asset_longname": null - }, - { - "asset": "LOCKEDPREV", - "asset_longname": null - }, - { - "asset": "MAXI", - "asset_longname": null - }, - { - "asset": "NODIVISIBLE", - "asset_longname": null - }, - { - "asset": "PARENT", - "asset_longname": null - }, - { - "asset": "PAYTOSCRIPT", - "asset_longname": null - } - ], - "http://api:api@localhost:10009/assets/NODIVISIBLE": { - "asset": "NODIVISIBLE", - "asset_longname": null, - "owner": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "divisible": false, - "locked": false, - "supply": 1000, - "description": "No divisible asset", - "issuer": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "holder_count": 3 - }, - "http://api:api@localhost:10009/assets/NODIVISIBLE/balances": [ - { - "address": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", - "asset": "NODIVISIBLE", - "quantity": 10 - }, - { + "success": true, + "result": { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", "asset": "NODIVISIBLE", "quantity": 985 - }, - { - "address": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", - "asset": "NODIVISIBLE", - "quantity": 5 } - ], - "http://api:api@localhost:10009/assets/NODIVISIBLE/balances/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc": { - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "NODIVISIBLE", - "quantity": 985 }, - "http://api:api@localhost:10009/assets/NODIVISIBLE/orders": [], - "http://api:api@localhost:10009/assets/NODIVISIBLE/credits": [ - { - "block_index": 310002, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "NODIVISIBLE", - "quantity": 1000, - "calling_function": "issuance", - "event": "7b1bf5144346279271b1ff78664f118224fe27fd8679d6c1519345f9c6c54584", - "tx_index": 3 - }, - { - "block_index": 310014, - "address": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", - "asset": "NODIVISIBLE", - "quantity": 5, - "calling_function": "send", - "event": "1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a", - "tx_index": 15 - }, - { - "block_index": 310015, - "address": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", - "asset": "NODIVISIBLE", - "quantity": 10, - "calling_function": "send", - "event": "e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c", - "tx_index": 16 - } - ], - "http://api:api@localhost:10009/assets/NODIVISIBLE/debits": [ - { - "block_index": 310014, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "NODIVISIBLE", - "quantity": 5, - "action": "send", - "event": "1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a", - "tx_index": 15 - }, - { - "block_index": 310015, - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "NODIVISIBLE", - "quantity": 10, - "action": "send", - "event": "e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c", - "tx_index": 16 - } - ], - "http://api:api@localhost:10009/assets/NODIVISIBLE/dividends": [], - "http://api:api@localhost:10009/assets/NODIVISIBLE/issuances": [ - { - "tx_index": 3, - "tx_hash": "7b1bf5144346279271b1ff78664f118224fe27fd8679d6c1519345f9c6c54584", - "msg_index": 0, - "block_index": 310002, + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/credits": { + "success": true, + "result": [ + { + "block_index": 310000, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 93000000000, + "calling_function": "burn", + "event": "6dc5b0a33d4d4297e0f5cc2d23ae307951d32aab2d86b7fa147b385219f3a597", + "tx_index": 1 + }, + { + "block_index": 310001, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "DIVISIBLE", + "quantity": 100000000000, + "calling_function": "issuance", + "event": "1fc2e5a57f584b2f2edd05676e75c33d03eed1d3098cc0550ea33474e3ec9db1", + "tx_index": 2 + }, + { + "block_index": 310002, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "NODIVISIBLE", + "quantity": 1000, + "calling_function": "issuance", + "event": "7b1bf5144346279271b1ff78664f118224fe27fd8679d6c1519345f9c6c54584", + "tx_index": 3 + }, + { + "block_index": 310003, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "CALLABLE", + "quantity": 1000, + "calling_function": "issuance", + "event": "c26f3a0c4e57e41919ff27aae95a9a9d4d65d34c6da6f1893884a17c8d407140", + "tx_index": 4 + }, + { + "block_index": 310004, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "LOCKED", + "quantity": 1000, + "calling_function": "issuance", + "event": "90b5734be98b0f2a0bd4b6a269c8db3368e2e387bb890ade239951d05423b4da", + "tx_index": 5 + }, + { + "block_index": 310016, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "MAXI", + "quantity": 9223372036854775807, + "calling_function": "issuance", + "event": "bd4e9cbbe69c2db893cd32182a2d315c89c45ba4e31aa5775d1fe42d841cea39", + "tx_index": 17 + }, + { + "block_index": 310020, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 0, + "calling_function": "filled", + "event": "5c6562ddad0bc8a1faaded18813a65522cd273709acd190cf9d3271817eefc93", + "tx_index": 21 + }, + { + "block_index": 310102, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 9, + "calling_function": "bet settled", + "event": "16462eac6c795cea6e5985ee063867d8c61ae24373df02048186d28118d25bae", + "tx_index": 103 + }, + { + "block_index": 310102, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 0, + "calling_function": "feed fee", + "event": "16462eac6c795cea6e5985ee063867d8c61ae24373df02048186d28118d25bae", + "tx_index": 103 + }, + { + "block_index": 310482, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 100000000, + "calling_function": "send", + "event": "c8716524f33646b9af94d6f5e52494ff3b34466497094b1db2ab920e4f79bc34", + "tx_index": 483 + }, + { + "block_index": 310497, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "PARENT", + "quantity": 100000000, + "calling_function": "issuance", + "event": "076ae3d8eeb7fb40d2ae27692340157c746d9832806766b0dac5adb1526dc78f", + "tx_index": 498 + }, + { + "block_index": 310498, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "A95428956661682277", + "quantity": 100000000, + "calling_function": "issuance", + "event": "0abfce2662c05852fd8b181a60900678643cedad47b23a853b8c4eda82cb2cbf", + "tx_index": 499 + } + ] + }, + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/debits": { + "success": true, + "result": [ + { + "block_index": 310001, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 50000000, + "action": "issuance fee", + "event": "1fc2e5a57f584b2f2edd05676e75c33d03eed1d3098cc0550ea33474e3ec9db1", + "tx_index": 2 + }, + { + "block_index": 310002, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 50000000, + "action": "issuance fee", + "event": "7b1bf5144346279271b1ff78664f118224fe27fd8679d6c1519345f9c6c54584", + "tx_index": 3 + }, + { + "block_index": 310003, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 50000000, + "action": "issuance fee", + "event": "c26f3a0c4e57e41919ff27aae95a9a9d4d65d34c6da6f1893884a17c8d407140", + "tx_index": 4 + }, + { + "block_index": 310004, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 50000000, + "action": "issuance fee", + "event": "90b5734be98b0f2a0bd4b6a269c8db3368e2e387bb890ade239951d05423b4da", + "tx_index": 5 + }, + { + "block_index": 310005, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 0, + "action": "issuance fee", + "event": "344dcc8909ca3a137630726d0071dfd2df4f7c855bac150c7d3a8367835c90bc", + "tx_index": 6 + }, + { + "block_index": 310006, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 100000000, + "action": "open order", + "event": "4f0433ba841038e2e16328445930dd7bca35309b14b0da4451c8f94c631368b8", + "tx_index": 7 + }, + { + "block_index": 310007, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "DIVISIBLE", + "quantity": 100000000, + "action": "send", + "event": "6e91ae23de2035e3e28c3322712212333592a1f666bcff9dd91aec45d5ea2753", + "tx_index": 8 + }, + { + "block_index": 310008, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 100000000, + "action": "send", + "event": "4fd55abadfdbe77c3bda2431749cca934a29994a179620a62c1b57f28bd62a43", + "tx_index": 9 + }, + { + "block_index": 310009, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 100000000, + "action": "open order", + "event": "21460d5c07284f9be9baf824927d0d4e4eb790e297f3162305841607b672349b", + "tx_index": 10 + }, + { + "block_index": 310010, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 100000000, + "action": "open order", + "event": "1899b2e6ec36ba4bc9d035e6640b0a62b08c3a147c77c89183a77d9ed9081b3a", + "tx_index": 11 + }, + { + "block_index": 310012, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 300000000, + "action": "send", + "event": "698e97e507da8623cf38ab42701853443c8f7fe0d93b4674aabb42f9800ee9d6", + "tx_index": 13 + }, + { + "block_index": 310013, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "DIVISIBLE", + "quantity": 1000000000, + "action": "send", + "event": "0cfeeb559ed794d067557df0376a6c213b48b174b80cdb2c3c6d365cf538e132", + "tx_index": 14 + }, + { + "block_index": 310014, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "NODIVISIBLE", + "quantity": 5, + "action": "send", + "event": "1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a", + "tx_index": 15 + }, + { + "block_index": 310015, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "NODIVISIBLE", + "quantity": 10, + "action": "send", + "event": "e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c", + "tx_index": 16 + }, + { + "block_index": 310016, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 50000000, + "action": "issuance fee", + "event": "bd4e9cbbe69c2db893cd32182a2d315c89c45ba4e31aa5775d1fe42d841cea39", + "tx_index": 17 + }, + { + "block_index": 310019, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 9, + "action": "bet", + "event": "2a2169991597036b6dad687ea1feffd55465a204466f40c35cbba811cb3109b1", + "tx_index": 20 + }, + { + "block_index": 310110, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "DIVISIBLE", + "quantity": 100000000, + "action": "send", + "event": "f6a0f819e899b407cbfa07b4eff3d58902af3899abfbaa47d5f31d5b398e76e7", + "tx_index": 111 + }, + { + "block_index": 310481, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 100000000, + "action": "send", + "event": "b00bdf03402d81a2cbdbeac4b0df90cff5ab6bf9688f653383d49fe42b8422a5", + "tx_index": 482 + }, + { + "block_index": 310491, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 100000000, + "action": "open order", + "event": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", + "tx_index": 492 + }, + { + "block_index": 310497, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 50000000, + "action": "issuance fee", + "event": "076ae3d8eeb7fb40d2ae27692340157c746d9832806766b0dac5adb1526dc78f", + "tx_index": 498 + }, + { + "block_index": 310498, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 25000000, + "action": "issuance fee", + "event": "0abfce2662c05852fd8b181a60900678643cedad47b23a853b8c4eda82cb2cbf", + "tx_index": 499 + } + ] + }, + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/bets": { + "success": true, + "result": [ + { + "tx_index": 102, + "tx_hash": "db4ea092bea6036e3d1e5f6ec863db9b900252b4f4d6d9faa6165323f433c51e", + "block_index": 310101, + "source": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "feed_address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "bet_type": 3, + "deadline": 1388000200, + "wager_quantity": 10, + "wager_remaining": 10, + "counterwager_quantity": 10, + "counterwager_remaining": 10, + "target_value": 0.0, + "leverage": 5040, + "expiration": 1000, + "expire_index": 311101, + "fee_fraction_int": 5000000, + "status": "open" + } + ] + }, + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/broadcasts": { + "success": true, + "result": [ + { + "tx_index": 103, + "tx_hash": "16462eac6c795cea6e5985ee063867d8c61ae24373df02048186d28118d25bae", + "block_index": 310102, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "timestamp": 1388000002, + "value": 1.0, + "fee_fraction_int": 5000000, + "text": "Unit Test", + "locked": 0, + "status": "valid" + }, + { + "tx_index": 18, + "tx_hash": "d14388b74b63d93e4477b1fe8426028bb8ab20656703e3ce8deeb23c2fe0b8af", + "block_index": 310017, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "timestamp": 1388000000, + "value": 1.0, + "fee_fraction_int": 5000000, + "text": "Unit Test", + "locked": 0, + "status": "valid" + } + ] + }, + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/burns": { + "success": true, + "result": [ + { + "tx_index": 1, + "tx_hash": "6dc5b0a33d4d4297e0f5cc2d23ae307951d32aab2d86b7fa147b385219f3a597", + "block_index": 310000, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "burned": 62000000, + "earned": 93000000000, + "status": "valid" + } + ] + }, + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sends": { + "success": true, + "result": [ + { + "tx_index": 8, + "tx_hash": "6e91ae23de2035e3e28c3322712212333592a1f666bcff9dd91aec45d5ea2753", + "block_index": 310007, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "asset": "DIVISIBLE", + "quantity": 100000000, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 9, + "tx_hash": "4fd55abadfdbe77c3bda2431749cca934a29994a179620a62c1b57f28bd62a43", + "block_index": 310008, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "asset": "XCP", + "quantity": 100000000, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 13, + "tx_hash": "698e97e507da8623cf38ab42701853443c8f7fe0d93b4674aabb42f9800ee9d6", + "block_index": 310012, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", + "asset": "XCP", + "quantity": 300000000, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 14, + "tx_hash": "0cfeeb559ed794d067557df0376a6c213b48b174b80cdb2c3c6d365cf538e132", + "block_index": 310013, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", + "asset": "DIVISIBLE", + "quantity": 1000000000, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 15, + "tx_hash": "1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a", + "block_index": 310014, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "asset": "NODIVISIBLE", + "quantity": 5, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 16, + "tx_hash": "e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c", + "block_index": 310015, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", + "asset": "NODIVISIBLE", + "quantity": 10, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 111, + "tx_hash": "f6a0f819e899b407cbfa07b4eff3d58902af3899abfbaa47d5f31d5b398e76e7", + "block_index": 310110, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy", + "asset": "DIVISIBLE", + "quantity": 100000000, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 482, + "tx_hash": "b00bdf03402d81a2cbdbeac4b0df90cff5ab6bf9688f653383d49fe42b8422a5", + "block_index": 310481, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "asset": "XCP", + "quantity": 100000000, + "status": "valid", + "msg_index": 0, + "memo": "68656c6c6f" + } + ] + }, + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/receives": { + "success": true, + "result": [ + { + "tx_index": 483, + "tx_hash": "c8716524f33646b9af94d6f5e52494ff3b34466497094b1db2ab920e4f79bc34", + "block_index": 310482, + "source": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "destination": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "XCP", + "quantity": 100000000, + "status": "valid", + "msg_index": 0, + "memo": "fade0001" + } + ] + }, + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sends/NODIVISIBLE": { + "success": true, + "result": [ + { + "tx_index": 15, + "tx_hash": "1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a", + "block_index": 310014, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "asset": "NODIVISIBLE", + "quantity": 5, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 16, + "tx_hash": "e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c", + "block_index": 310015, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", + "asset": "NODIVISIBLE", + "quantity": 10, + "status": "valid", + "msg_index": 0, + "memo": null + } + ] + }, + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/receives/NODIVISIBLE": { + "success": true, + "result": [] + }, + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/dispensers": { + "success": true, + "result": [] + }, + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/dispensers/NODIVISIBLE": { + "success": true, + "result": [] + }, + "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sweeps": { + "success": true, + "result": [] + }, + "http://api:api@localhost:10009/assets": { + "success": true, + "result": [ + { + "asset": "A95428956661682277", + "asset_longname": "PARENT.already.issued" + }, + { + "asset": "CALLABLE", + "asset_longname": null + }, + { + "asset": "DIVIDEND", + "asset_longname": null + }, + { + "asset": "DIVISIBLE", + "asset_longname": null + }, + { + "asset": "LOCKED", + "asset_longname": null + }, + { + "asset": "LOCKEDPREV", + "asset_longname": null + }, + { + "asset": "MAXI", + "asset_longname": null + }, + { + "asset": "NODIVISIBLE", + "asset_longname": null + }, + { + "asset": "PARENT", + "asset_longname": null + }, + { + "asset": "PAYTOSCRIPT", + "asset_longname": null + } + ] + }, + "http://api:api@localhost:10009/assets/NODIVISIBLE": { + "success": true, + "result": { "asset": "NODIVISIBLE", - "quantity": 1000, - "divisible": 0, - "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "issuer": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "transfer": 0, - "callable": 0, - "call_date": 0, - "call_price": 0.0, - "description": "No divisible asset", - "fee_paid": 50000000, - "locked": 0, - "status": "valid", "asset_longname": null, - "reset": 0 - } - ], - "http://api:api@localhost:10009/assets/NODIVISIBLE/sends": [ - { - "tx_index": 15, - "tx_hash": "1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a", - "block_index": 310014, - "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "destination": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", - "asset": "NODIVISIBLE", - "quantity": 5, - "status": "valid", - "msg_index": 0, - "memo": null - }, - { - "tx_index": 16, - "tx_hash": "e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c", - "block_index": 310015, - "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "destination": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", - "asset": "NODIVISIBLE", - "quantity": 10, - "status": "valid", - "msg_index": 0, - "memo": null + "owner": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "divisible": false, + "locked": false, + "supply": 1000, + "description": "No divisible asset", + "issuer": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "holder_count": 3 } - ], - "http://api:api@localhost:10009/assets/NODIVISIBLE/dispensers": [], - "http://api:api@localhost:10009/assets/NODIVISIBLE/dispensers/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc": [], - "http://api:api@localhost:10009/assets/NODIVISIBLE/holders": [ - { + }, + "http://api:api@localhost:10009/assets/NODIVISIBLE/balances": { + "success": true, + "result": [ + { + "address": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", + "asset": "NODIVISIBLE", + "quantity": 10 + }, + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "NODIVISIBLE", + "quantity": 985 + }, + { + "address": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "asset": "NODIVISIBLE", + "quantity": 5 + } + ] + }, + "http://api:api@localhost:10009/assets/NODIVISIBLE/balances/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc": { + "success": true, + "result": { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "address_quantity": 985, - "escrow": null - }, - { - "address": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", - "address_quantity": 5, - "escrow": null - }, - { - "address": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", - "address_quantity": 10, - "escrow": null - } - ], - "http://api:api@localhost:10009/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": [ - { - "tx_index": 492, - "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", - "block_index": 310492, - "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "give_asset": "XCP", - "give_quantity": 100000000, - "give_remaining": 0, - "get_asset": "BTC", - "get_quantity": 800000, - "get_remaining": 0, - "expiration": 2000, - "expire_index": 312491, - "fee_required": 900000, - "fee_required_remaining": 892800, - "fee_provided": 6800, - "fee_provided_remaining": 6800, - "status": "open" - } - ], - "http://api:api@localhost:10009/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/matches": [ - { - "id": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498_1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81", - "tx0_index": 492, - "tx0_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", - "tx0_address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "tx1_index": 493, - "tx1_hash": "1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81", - "tx1_address": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", - "forward_asset": "XCP", - "forward_quantity": 100000000, - "backward_asset": "BTC", - "backward_quantity": 800000, - "tx0_block_index": 310491, - "tx1_block_index": 310492, - "block_index": 310492, - "tx0_expiration": 2000, - "tx1_expiration": 2000, - "match_expire_index": 310512, - "fee_paid": 7200, - "status": "pending" - } - ], - "http://api:api@localhost:10009/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/btcpays": [], - "http://api:api@localhost:10009/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42": [], - "http://api:api@localhost:10009/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42/matches": [], - "http://api:api@localhost:10009/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42/resolutions": [], - "http://api:api@localhost:10009/burns": [ - { - "tx_index": 1, - "tx_hash": "6dc5b0a33d4d4297e0f5cc2d23ae307951d32aab2d86b7fa147b385219f3a597", - "block_index": 310000, - "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "burned": 62000000, - "earned": 93000000000, - "status": "valid" - }, - { - "tx_index": 104, - "tx_hash": "65d4048700fb8ae03f321be93c6669b8497f506a1f43920f96d994f43358c35b", - "block_index": 310103, - "source": "myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM", - "burned": 62000000, - "earned": 92999138821, - "status": "valid" - }, - { - "tx_index": 105, - "tx_hash": "95332a7e3e2b04f2c10e3027327bfc31b686947fb05381e28903e3ff569bd4ff", - "block_index": 310104, - "source": "munimLLHjPhGeSU5rYB2HN79LJa8bRZr5b", - "burned": 62000000, - "earned": 92999130460, - "status": "valid" - }, - { - "tx_index": 106, - "tx_hash": "e062d1ebf4cb71bd22d80c949b956f5286080838a7607ccf87945b2b3abfcafa", - "block_index": 310105, - "source": "mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42", - "burned": 62000000, - "earned": 92999122099, - "status": "valid" - }, - { - "tx_index": 107, - "tx_hash": "bbf0b9f6992755a3e371fb0c0b72f6828831e81c6f7ada6f95ba1104fb901ac3", - "block_index": 310106, - "source": "mrPk7hTeZWjjSCrMTC2ET4SAUThQt7C4uK", - "burned": 10000, - "earned": 14999857, - "status": "valid" - }, - { - "tx_index": 109, - "tx_hash": "93c6d2499a0536c31c77a3db3fc9fc8456fbd0726c45b8f716af16f938727a73", - "block_index": 310108, - "source": "2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy", - "burned": 31000000, - "earned": 46499548508, - "status": "valid" - }, - { - "tx_index": 117, - "tx_hash": "27929c4fcad307a76ea7da34dd2691084f678a22ee43ce7f3842b78730ee08f9", - "block_index": 310116, - "source": "tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx", - "burned": 62000000, - "earned": 92999030129, - "status": "valid" - }, - { - "tx_index": 494, - "tx_hash": "c0733e1287afb1bb3d2fdacd1db7c74ea84f14362f3a8d1c038e662e1d0b1b1a", - "block_index": 310493, - "source": "mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH", - "burned": 62000000, - "earned": 92995878046, - "status": "valid" + "asset": "NODIVISIBLE", + "quantity": 985 } - ], - "http://api:api@localhost:10009/dispensers/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": [], - "http://api:api@localhost:10009/dispensers/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/dispenses": [], - "http://api:api@localhost:10009/events?limit=5": [ - { - "event_index": 1237, - "event": "BLOCK_PARSED", - "bindings": { + }, + "http://api:api@localhost:10009/assets/NODIVISIBLE/orders": { + "success": true, + "result": [] + }, + "http://api:api@localhost:10009/assets/NODIVISIBLE/credits": { + "success": true, + "result": [ + { + "block_index": 310002, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "NODIVISIBLE", + "quantity": 1000, + "calling_function": "issuance", + "event": "7b1bf5144346279271b1ff78664f118224fe27fd8679d6c1519345f9c6c54584", + "tx_index": 3 + }, + { + "block_index": 310014, + "address": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "asset": "NODIVISIBLE", + "quantity": 5, + "calling_function": "send", + "event": "1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a", + "tx_index": 15 + }, + { + "block_index": 310015, + "address": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", + "asset": "NODIVISIBLE", + "quantity": 10, + "calling_function": "send", + "event": "e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c", + "tx_index": 16 + } + ] + }, + "http://api:api@localhost:10009/assets/NODIVISIBLE/debits": { + "success": true, + "result": [ + { + "block_index": 310014, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "NODIVISIBLE", + "quantity": 5, + "action": "send", + "event": "1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a", + "tx_index": 15 + }, + { + "block_index": 310015, + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "NODIVISIBLE", + "quantity": 10, + "action": "send", + "event": "e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c", + "tx_index": 16 + } + ] + }, + "http://api:api@localhost:10009/assets/NODIVISIBLE/dividends": { + "success": true, + "result": [] + }, + "http://api:api@localhost:10009/assets/NODIVISIBLE/issuances": { + "success": true, + "result": [ + { + "tx_index": 3, + "tx_hash": "7b1bf5144346279271b1ff78664f118224fe27fd8679d6c1519345f9c6c54584", + "msg_index": 0, + "block_index": 310002, + "asset": "NODIVISIBLE", + "quantity": 1000, + "divisible": 0, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "issuer": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "transfer": 0, + "callable": 0, + "call_date": 0, + "call_price": 0.0, + "description": "No divisible asset", + "fee_paid": 50000000, + "locked": 0, + "status": "valid", + "asset_longname": null, + "reset": 0 + } + ] + }, + "http://api:api@localhost:10009/assets/NODIVISIBLE/sends": { + "success": true, + "result": [ + { + "tx_index": 15, + "tx_hash": "1facb0072f16f6bdca64ea859c82b850f58f0ec7ff410d901679772a4727515a", + "block_index": 310014, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "asset": "NODIVISIBLE", + "quantity": 5, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 16, + "tx_hash": "e3b6667b7baa515048a7fcf2be7818e3e7622371236b78e19b4b08e2d7e7818c", + "block_index": 310015, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "destination": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", + "asset": "NODIVISIBLE", + "quantity": 10, + "status": "valid", + "msg_index": 0, + "memo": null + } + ] + }, + "http://api:api@localhost:10009/assets/NODIVISIBLE/dispensers": { + "success": true, + "result": [] + }, + "http://api:api@localhost:10009/assets/NODIVISIBLE/dispensers/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc": { + "success": true, + "result": [] + }, + "http://api:api@localhost:10009/assets/NODIVISIBLE/holders": { + "success": true, + "result": [ + { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "address_quantity": 985, + "escrow": null + }, + { + "address": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "address_quantity": 5, + "escrow": null + }, + { + "address": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", + "address_quantity": 10, + "escrow": null + } + ] + }, + "http://api:api@localhost:10009/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { + "success": true, + "result": [ + { + "tx_index": 492, + "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", + "block_index": 310492, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "give_asset": "XCP", + "give_quantity": 100000000, + "give_remaining": 0, + "get_asset": "BTC", + "get_quantity": 800000, + "get_remaining": 0, + "expiration": 2000, + "expire_index": 312491, + "fee_required": 900000, + "fee_required_remaining": 892800, + "fee_provided": 6800, + "fee_provided_remaining": 6800, + "status": "open" + } + ] + }, + "http://api:api@localhost:10009/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/matches": { + "success": true, + "result": [ + { + "id": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498_1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81", + "tx0_index": 492, + "tx0_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", + "tx0_address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "tx1_index": 493, + "tx1_hash": "1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81", + "tx1_address": "mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns", + "forward_asset": "XCP", + "forward_quantity": 100000000, + "backward_asset": "BTC", + "backward_quantity": 800000, + "tx0_block_index": 310491, + "tx1_block_index": 310492, + "block_index": 310492, + "tx0_expiration": 2000, + "tx1_expiration": 2000, + "match_expire_index": 310512, + "fee_paid": 7200, + "status": "pending" + } + ] + }, + "http://api:api@localhost:10009/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/btcpays": { + "success": true, + "result": [] + }, + "http://api:api@localhost:10009/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42": { + "success": true, + "result": [] + }, + "http://api:api@localhost:10009/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42/matches": { + "success": true, + "result": [] + }, + "http://api:api@localhost:10009/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42/resolutions": { + "success": true, + "result": [] + }, + "http://api:api@localhost:10009/burns": { + "success": true, + "result": [ + { + "tx_index": 1, + "tx_hash": "6dc5b0a33d4d4297e0f5cc2d23ae307951d32aab2d86b7fa147b385219f3a597", + "block_index": 310000, + "source": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "burned": 62000000, + "earned": 93000000000, + "status": "valid" + }, + { + "tx_index": 104, + "tx_hash": "65d4048700fb8ae03f321be93c6669b8497f506a1f43920f96d994f43358c35b", + "block_index": 310103, + "source": "myAtcJEHAsDLbTkai6ipWDZeeL7VkxXsiM", + "burned": 62000000, + "earned": 92999138821, + "status": "valid" + }, + { + "tx_index": 105, + "tx_hash": "95332a7e3e2b04f2c10e3027327bfc31b686947fb05381e28903e3ff569bd4ff", + "block_index": 310104, + "source": "munimLLHjPhGeSU5rYB2HN79LJa8bRZr5b", + "burned": 62000000, + "earned": 92999130460, + "status": "valid" + }, + { + "tx_index": 106, + "tx_hash": "e062d1ebf4cb71bd22d80c949b956f5286080838a7607ccf87945b2b3abfcafa", + "block_index": 310105, + "source": "mwtPsLQxW9xpm7gdLmwWvJK5ABdPUVJm42", + "burned": 62000000, + "earned": 92999122099, + "status": "valid" + }, + { + "tx_index": 107, + "tx_hash": "bbf0b9f6992755a3e371fb0c0b72f6828831e81c6f7ada6f95ba1104fb901ac3", + "block_index": 310106, + "source": "mrPk7hTeZWjjSCrMTC2ET4SAUThQt7C4uK", + "burned": 10000, + "earned": 14999857, + "status": "valid" + }, + { + "tx_index": 109, + "tx_hash": "93c6d2499a0536c31c77a3db3fc9fc8456fbd0726c45b8f716af16f938727a73", + "block_index": 310108, + "source": "2MyJHMUenMWonC35Yi6PHC7i2tkS7PuomCy", + "burned": 31000000, + "earned": 46499548508, + "status": "valid" + }, + { + "tx_index": 117, + "tx_hash": "27929c4fcad307a76ea7da34dd2691084f678a22ee43ce7f3842b78730ee08f9", + "block_index": 310116, + "source": "tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx", + "burned": 62000000, + "earned": 92999030129, + "status": "valid" + }, + { + "tx_index": 494, + "tx_hash": "c0733e1287afb1bb3d2fdacd1db7c74ea84f14362f3a8d1c038e662e1d0b1b1a", + "block_index": 310493, + "source": "mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH", + "burned": 62000000, + "earned": 92995878046, + "status": "valid" + } + ] + }, + "http://api:api@localhost:10009/dispensers/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { + "success": true, + "result": [] + }, + "http://api:api@localhost:10009/dispensers/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/dispenses": { + "success": true, + "result": [] + }, + "http://api:api@localhost:10009/events?limit=5": { + "success": true, + "result": [ + { + "event_index": 1237, + "event": "BLOCK_PARSED", + "bindings": { + "block_index": 310500, + "ledger_hash": "5ffefc7a2724be6bd697796bb82638ec913c5cbb73627153d1a13b48c7a6c02d", + "messages_hash": "45f296a535c13129cb1aaeb4e28a03e04ad902917891c39ae59ea2894e9f868f", + "txlist_hash": "35f4a33840d002ab4e0e44f11c1749ae95b41376927fb346140508b32518edd1" + }, "block_index": 310500, - "ledger_hash": "5ffefc7a2724be6bd697796bb82638ec913c5cbb73627153d1a13b48c7a6c02d", - "messages_hash": "45f296a535c13129cb1aaeb4e28a03e04ad902917891c39ae59ea2894e9f868f", - "txlist_hash": "35f4a33840d002ab4e0e44f11c1749ae95b41376927fb346140508b32518edd1" - }, - "block_index": 310500, - "timestamp": 0 - }, - { - "event_index": 1236, - "event": "NEW_BLOCK", - "bindings": { - "block_hash": "54aeaf47d5387964e2d51617bf3af50520a0449410e0d096cf8c2aa9dad5550b", + "timestamp": 0 + }, + { + "event_index": 1236, + "event": "NEW_BLOCK", + "bindings": { + "block_hash": "54aeaf47d5387964e2d51617bf3af50520a0449410e0d096cf8c2aa9dad5550b", + "block_index": 310500, + "block_time": 310500000, + "difficulty": null, + "ledger_hash": null, + "previous_block_hash": null, + "txlist_hash": null + }, "block_index": 310500, - "block_time": 310500000, - "difficulty": null, - "ledger_hash": null, - "previous_block_hash": null, - "txlist_hash": null - }, - "block_index": 310500, - "timestamp": 0 - }, - { - "event_index": 1235, - "event": "BLOCK_PARSED", - "bindings": { + "timestamp": 0 + }, + { + "event_index": 1235, + "event": "BLOCK_PARSED", + "bindings": { + "block_index": 310499, + "ledger_hash": "b9fcbdafddd46fdda061f6e9f8744b426b6ca37e32b315df1098cbc7899ae9b9", + "messages_hash": "d6aedacd4f81520d86ae47c9c776d17a213c706a5cf7c91203a4299261d1648c", + "txlist_hash": "032166892f568bb97f4f69ef5bdf49cc1b15cc9f8c7f6c1f3e1f9d54816ad7e5" + }, "block_index": 310499, - "ledger_hash": "b9fcbdafddd46fdda061f6e9f8744b426b6ca37e32b315df1098cbc7899ae9b9", - "messages_hash": "d6aedacd4f81520d86ae47c9c776d17a213c706a5cf7c91203a4299261d1648c", - "txlist_hash": "032166892f568bb97f4f69ef5bdf49cc1b15cc9f8c7f6c1f3e1f9d54816ad7e5" - }, - "block_index": 310499, - "timestamp": 0 - }, - { - "event_index": 1234, - "event": "NEW_BLOCK", - "bindings": { - "block_hash": "1950e1a4d7fc820ed9603f6df6819c3c953c277c726340dec2a4253e261a1764", + "timestamp": 0 + }, + { + "event_index": 1234, + "event": "NEW_BLOCK", + "bindings": { + "block_hash": "1950e1a4d7fc820ed9603f6df6819c3c953c277c726340dec2a4253e261a1764", + "block_index": 310499, + "block_time": 310499000, + "difficulty": null, + "ledger_hash": null, + "previous_block_hash": null, + "txlist_hash": null + }, "block_index": 310499, - "block_time": 310499000, - "difficulty": null, - "ledger_hash": null, - "previous_block_hash": null, - "txlist_hash": null - }, - "block_index": 310499, - "timestamp": 0 - }, - { - "event_index": 1233, - "event": "BLOCK_PARSED", - "bindings": { + "timestamp": 0 + }, + { + "event_index": 1233, + "event": "BLOCK_PARSED", + "bindings": { + "block_index": 310498, + "ledger_hash": "5fe6cdb0828379bf240fad99c68bba34e1889bbc19605ce5c297b82352264414", + "messages_hash": "113207bd13dda56b5e5edf305f70a56e62cc861184e1e95a64e79ce100462c98", + "txlist_hash": "b488f6f0e6c233f202ee17c0843236d464144e79c870af88bae56355ae9372b7" + }, "block_index": 310498, - "ledger_hash": "5fe6cdb0828379bf240fad99c68bba34e1889bbc19605ce5c297b82352264414", - "messages_hash": "113207bd13dda56b5e5edf305f70a56e62cc861184e1e95a64e79ce100462c98", - "txlist_hash": "b488f6f0e6c233f202ee17c0843236d464144e79c870af88bae56355ae9372b7" + "timestamp": 0 + } + ] + }, + "http://api:api@localhost:10009/events/10?limit=5": { + "success": true, + "result": [ + { + "event_index": 10, + "event": "ASSET_CREATION", + "bindings": { + "asset_id": "697326324582", + "asset_longname": null, + "asset_name": "DIVISIBLE", + "block_index": 310001 + }, + "block_index": 310001, + "timestamp": 0 + } + ] + }, + "http://api:api@localhost:10009/events/counts?limit=5": { + "success": true, + "result": [ + { + "event": "ASSET_CREATION", + "event_count": 10 }, - "block_index": 310498, - "timestamp": 0 - } - ], - "http://api:api@localhost:10009/events/10?limit=5": [ - { - "event_index": 10, - "event": "ASSET_CREATION", - "bindings": { - "asset_id": "697326324582", - "asset_longname": null, - "asset_name": "DIVISIBLE", - "block_index": 310001 + { + "event": "ASSET_ISSUANCE", + "event_count": 13 }, - "block_index": 310001, - "timestamp": 0 - } - ], - "http://api:api@localhost:10009/events/counts?limit=5": [ - { - "event": "ASSET_CREATION", - "event_count": 10 - }, - { - "event": "ASSET_ISSUANCE", - "event_count": 13 - }, - { - "event": "BET_MATCH", - "event_count": 1 - }, - { - "event": "BET_MATCH_RESOLUTON", - "event_count": 1 - }, - { - "event": "BET_MATCH_UPDATE", - "event_count": 1 - }, - { - "event": "BET_UPDATE", - "event_count": 2 - }, - { - "event": "BLOCK_PARSED", - "event_count": 502 - }, - { - "event": "BROADCAST", - "event_count": 8 - }, - { - "event": "BURN", - "event_count": 8 - }, - { - "event": "CREDIT", - "event_count": 34 - }, - { - "event": "DEBIT", - "event_count": 34 - }, - { - "event": "ENHANCED_SEND", - "event_count": 2 - }, - { - "event": "NEW_BLOCK", - "event_count": 502 - }, - { - "event": "NEW_TRANSACTION", - "event_count": 52 - }, - { - "event": "OPEN_BET", - "event_count": 5 - }, - { - "event": "OPEN_DISPENSER", - "event_count": 1 - }, - { - "event": "OPEN_ORDER", - "event_count": 6 - }, - { - "event": "ORDER_MATCH", - "event_count": 1 - }, - { - "event": "ORDER_UPDATE", - "event_count": 2 - }, - { - "event": "SEND", - "event_count": 9 - }, - { - "event": "TRANSACTION_PARSED", - "event_count": 44 - } - ], - "http://api:api@localhost:10009/events/CREDIT?limit=5": [ - { - "event_index": 1231, - "event": "CREDIT", - "bindings": { - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "A95428956661682277", + { + "event": "BET_MATCH", + "event_count": 1 + }, + { + "event": "BET_MATCH_RESOLUTON", + "event_count": 1 + }, + { + "event": "BET_MATCH_UPDATE", + "event_count": 1 + }, + { + "event": "BET_UPDATE", + "event_count": 2 + }, + { + "event": "BLOCK_PARSED", + "event_count": 502 + }, + { + "event": "BROADCAST", + "event_count": 8 + }, + { + "event": "BURN", + "event_count": 8 + }, + { + "event": "CREDIT", + "event_count": 34 + }, + { + "event": "DEBIT", + "event_count": 34 + }, + { + "event": "ENHANCED_SEND", + "event_count": 2 + }, + { + "event": "NEW_BLOCK", + "event_count": 502 + }, + { + "event": "NEW_TRANSACTION", + "event_count": 52 + }, + { + "event": "OPEN_BET", + "event_count": 5 + }, + { + "event": "OPEN_DISPENSER", + "event_count": 1 + }, + { + "event": "OPEN_ORDER", + "event_count": 6 + }, + { + "event": "ORDER_MATCH", + "event_count": 1 + }, + { + "event": "ORDER_UPDATE", + "event_count": 2 + }, + { + "event": "SEND", + "event_count": 9 + }, + { + "event": "TRANSACTION_PARSED", + "event_count": 44 + } + ] + }, + "http://api:api@localhost:10009/events/CREDIT?limit=5": { + "success": true, + "result": [ + { + "event_index": 1231, + "event": "CREDIT", + "bindings": { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "A95428956661682277", + "block_index": 310498, + "calling_function": "issuance", + "event": "0abfce2662c05852fd8b181a60900678643cedad47b23a853b8c4eda82cb2cbf", + "quantity": 100000000, + "tx_index": 499 + }, "block_index": 310498, - "calling_function": "issuance", - "event": "0abfce2662c05852fd8b181a60900678643cedad47b23a853b8c4eda82cb2cbf", - "quantity": 100000000, - "tx_index": 499 + "timestamp": 0 }, - "block_index": 310498, - "timestamp": 0 - }, - { - "event_index": 1223, - "event": "CREDIT", - "bindings": { - "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", - "asset": "PARENT", + { + "event_index": 1223, + "event": "CREDIT", + "bindings": { + "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", + "asset": "PARENT", + "block_index": 310497, + "calling_function": "issuance", + "event": "076ae3d8eeb7fb40d2ae27692340157c746d9832806766b0dac5adb1526dc78f", + "quantity": 100000000, + "tx_index": 498 + }, "block_index": 310497, - "calling_function": "issuance", - "event": "076ae3d8eeb7fb40d2ae27692340157c746d9832806766b0dac5adb1526dc78f", - "quantity": 100000000, - "tx_index": 498 + "timestamp": 0 }, - "block_index": 310497, - "timestamp": 0 - }, - { - "event_index": 1214, - "event": "CREDIT", - "bindings": { - "address": "mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj", - "asset": "XCP", + { + "event_index": 1214, + "event": "CREDIT", + "bindings": { + "address": "mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj", + "asset": "XCP", + "block_index": 310496, + "calling_function": "send", + "event": "a35ab1736565aceddbd1d71f92fc7f39d1361006aa9099f731e54e762964d5ba", + "quantity": 92945878046, + "tx_index": 497 + }, "block_index": 310496, - "calling_function": "send", - "event": "a35ab1736565aceddbd1d71f92fc7f39d1361006aa9099f731e54e762964d5ba", - "quantity": 92945878046, - "tx_index": 497 - }, - "block_index": 310496, - "timestamp": 0 - }, - { - "event_index": 1207, - "event": "CREDIT", - "bindings": { - "address": "mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj", - "asset": "DIVIDEND", + "timestamp": 0 + }, + { + "event_index": 1207, + "event": "CREDIT", + "bindings": { + "address": "mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj", + "asset": "DIVIDEND", + "block_index": 310495, + "calling_function": "send", + "event": "02156b9a1f643fb48330396274a37620c8abbbe5eddb2f8b53dadd135f5d2e2e", + "quantity": 10, + "tx_index": 496 + }, "block_index": 310495, - "calling_function": "send", - "event": "02156b9a1f643fb48330396274a37620c8abbbe5eddb2f8b53dadd135f5d2e2e", - "quantity": 10, - "tx_index": 496 - }, - "block_index": 310495, - "timestamp": 0 - }, - { - "event_index": 1201, - "event": "CREDIT", - "bindings": { - "address": "mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH", - "asset": "DIVIDEND", - "block_index": 310494, - "calling_function": "issuance", - "event": "321bed395482e034f2ce0a4dbf28d1f800592a658e26ea91ae9c5b0928204503", - "quantity": 100, - "tx_index": 495 + "timestamp": 0 }, - "block_index": 310494, - "timestamp": 0 - } - ] + { + "event_index": 1201, + "event": "CREDIT", + "bindings": { + "address": "mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH", + "asset": "DIVIDEND", + "block_index": 310494, + "calling_function": "issuance", + "event": "321bed395482e034f2ce0a4dbf28d1f800592a658e26ea91ae9c5b0928204503", + "quantity": 100, + "tx_index": 495 + }, + "block_index": 310494, + "timestamp": 0 + } + ] + } } \ No newline at end of file From 8a4d60747fed80a273bf3512dbc150cfa0b4f23a Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 24 Apr 2024 11:59:20 +0200 Subject: [PATCH 093/280] Output example for all compose routes; fixes --- .../counterpartycore/lib/api/api_server.py | 4 +- .../counterpartycore/lib/api/util.py | 2 +- .../counterpartycore/lib/messages/sweep.py | 1 + .../counterpartycore/lib/transaction.py | 96 +- counterparty-core/tools/apicache.json | 3898 +++++++++-------- 5 files changed, 2176 insertions(+), 1825 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 05dc88d58c..93f9ed4bbe 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -2,6 +2,7 @@ import logging import multiprocessing import signal +import traceback from multiprocessing import Process from threading import Timer @@ -151,7 +152,8 @@ def handle_route(**kwargs): except (exceptions.ComposeError, exceptions.UnpackError) as e: return inject_headers({"success": False, "error": str(e)}, return_code=503) except Exception as e: - logger.error("Error in API: %s", e) + logger.exception("Error in API: %s", e) + traceback.print_exc() return inject_headers({"success": False, "error": "Unknwon error"}, return_code=503) result = remove_rowids(result) return inject_headers(result) diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index 5c793a5583..99ee1760a2 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -61,7 +61,7 @@ def handle_healthz_route(db, check_type: str = "heavy"): msg, code = "Healthy", 200 if not healthz(db, check_type): msg, code = "Unhealthy", 503 - result = {"data": msg, "success": code == 200} + result = {"result": msg, "success": code == 200} if code != 200: result["error"] = msg return flask.Response(to_json(result), code, mimetype="application/json") diff --git a/counterparty-core/counterpartycore/lib/messages/sweep.py b/counterparty-core/counterpartycore/lib/messages/sweep.py index 9ed916cb8f..89d7427fd6 100644 --- a/counterparty-core/counterpartycore/lib/messages/sweep.py +++ b/counterparty-core/counterpartycore/lib/messages/sweep.py @@ -107,6 +107,7 @@ def compose(db, source: str, destination: str, flags: int, memo: str): if memo is None: memo = b"" elif flags & FLAG_BINARY_MEMO: + print("MEMEOOOO", memo) memo = bytes.fromhex(memo) else: memo = memo.encode("utf-8") diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index 655ad51c2d..fe086728e9 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -1215,7 +1215,7 @@ def compose_bet( ): """ Composes a transaction to issue a bet against a feed. - :param address: The address that will make the bet (e.g. 1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev) + :param address: The address that will make the bet (e.g. 1CounterpartyXXXXXXXXXXXXXXXUWLpVr) :param feed_address: The address that hosts the feed to be bet on (e.g. 1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev) :param bet_type: Bet 0 for Bullish CFD (deprecated), 1 for Bearish CFD (deprecated), 2 for Equal, 3 for NotEqual (e.g. 2) :param deadline: The time at which the bet should be decided/settled, in Unix time (seconds since epoch) (e.g. 3000000000) @@ -1254,7 +1254,7 @@ def compose_broadcast( ): """ Composes a transaction to broadcast textual and numerical information to the network. - :param address: The address that will be sending (must have the necessary quantity of the specified asset) (e.g. 1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev) + :param address: The address that will be sending (must have the necessary quantity of the specified asset) (e.g. 1CounterpartyXXXXXXXXXXXXXXXUWLpVr) :param timestamp: The timestamp of the broadcast, in Unix time (e.g. 4003903983) :param value: Numerical value of the broadcast (e.g. 100) :param fee_fraction: How much of every bet on this feed should go to its operator; a fraction of 1, (i.e. 0.05 is five percent) (e.g. 0.05) @@ -1303,8 +1303,8 @@ def compose_btcpay(db, address: str, order_match_id: str, **construct_args): def compose_burn(db, address: str, quantity: int, overburn: bool = False, **construct_args): """ Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, possible between blocks 278310 and 283810; on testnet it is still available). - :param address: The address with the BTC to burn - :param quantity: The quantities of BTC to burn (1 BTC maximum burn per address) + :param address: The address with the BTC to burn (e.g. 1CounterpartyXXXXXXXXXXXXXXXUWLpVr) + :param quantity: The quantities of BTC to burn (1 BTC maximum burn per address) (e.g. 1000) :param overburn: Whether to allow the burn to exceed 1 BTC for the address """ params = {"source": address, "quantity": quantity, "overburn": overburn} @@ -1324,8 +1324,8 @@ def compose_burn(db, address: str, quantity: int, overburn: bool = False, **cons def compose_cancel(db, address: str, offer_hash: str, **construct_args): """ Composes a transaction to cancel an open order or bet. - :param address: The address that placed the order/bet to be cancelled - :param offer_hash: The hash of the order/bet to be cancelled + :param address: The address that placed the order/bet to be cancelled (e.g. 15e15ua6A3FJqjMevtrWcFSzKn9k6bMQeA) + :param offer_hash: The hash of the order/bet to be cancelled (e.g. 8ce3335391bf71f8f12c0573b4f85b9adc4882a9955d9f8e5ababfdd0060279a) """ params = {"source": address, "offer_hash": offer_hash} rawtransaction = compose_transaction( @@ -1344,10 +1344,10 @@ def compose_cancel(db, address: str, offer_hash: str, **construct_args): def compose_destroy(db, address: str, asset: str, quantity: int, tag: str, **construct_args): """ Composes a transaction to destroy a quantity of an asset. - :param address: The address that will be sending the asset to be destroyed - :param asset: The asset to be destroyed - :param quantity: The quantity of the asset to be destroyed - :param tag: A tag for the destruction + :param address: The address that will be sending the asset to be destroyed (e.g. 1CounterpartyXXXXXXXXXXXXXXXUWLpVr) + :param asset: The asset to be destroyed (e.g. XCP) + :param quantity: The quantity of the asset to be destroyed (e.g. 1000) + :param tag: A tag for the destruction (e.g. "bugs!") """ params = {"source": address, "asset": asset, "quantity": quantity, "tag": tag} rawtransaction = compose_transaction( @@ -1377,12 +1377,12 @@ def compose_dispenser( ): """ Opens or closes a dispenser for a given asset at a given rate of main chain asset (BTC). Escrowed quantity on open must be equal or greater than give_quantity. It is suggested that you escrow multiples of give_quantity to ease dispenser operation. - :param address: The address that will be dispensing (must have the necessary escrow_quantity of the specified asset) - :param asset: The asset or subasset to dispense - :param give_quantity: The quantity of the asset to dispense - :param escrow_quantity: The quantity of the asset to reserve for this dispenser - :param mainchainrate: The quantity of the main chain asset (BTC) per dispensed portion - :param status: The state of the dispenser. 0 for open, 1 for open using open_address, 10 for closed + :param address: The address that will be dispensing (must have the necessary escrow_quantity of the specified asset) (e.g. 1CounterpartyXXXXXXXXXXXXXXXUWLpVr) + :param asset: The asset or subasset to dispense (e.g. XCP) + :param give_quantity: The quantity of the asset to dispense (e.g. 1000) + :param escrow_quantity: The quantity of the asset to reserve for this dispenser (e.g. 1000) + :param mainchainrate: The quantity of the main chain asset (BTC) per dispensed portion (e.g. 100) + :param status: The state of the dispenser. 0 for open, 1 for open using open_address, 10 for closed (e.g. 0) :param open_address: The address that you would like to open the dispenser on :param oracle_address: The address that you would like to use as a price oracle for this dispenser """ @@ -1414,10 +1414,10 @@ def compose_dividend( ): """ Composes a transaction to issue a dividend to holders of a given asset. - :param address: The address that will be issuing the dividend (must have the ownership of the asset which the dividend is being issued on) - :param quantity_per_unit: The amount of dividend_asset rewarded - :param asset: The asset or subasset that the dividends are being rewarded on - :param dividend_asset: The asset or subasset that the dividends are paid in + :param address: The address that will be issuing the dividend (must have the ownership of the asset which the dividend is being issued on) (e.g. 1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD) + :param quantity_per_unit: The amount of dividend_asset rewarded (e.g. 1) + :param asset: The asset or subasset that the dividends are being rewarded on (e.g. PEPECASH) + :param dividend_asset: The asset or subasset that the dividends are paid in (e.g. XCP) """ params = { "source": address, @@ -1452,10 +1452,10 @@ def compose_issuance( ): """ Composes a transaction to Issue a new asset, issue more of an existing asset, lock an asset, reset existing supply, or transfer the ownership of an asset. - :param address: The address that will be issuing or transfering the asset - :param asset: The assets to issue or transfer. This can also be a subasset longname for new subasset issuances - :param quantity: The quantity of the asset to issue (set to 0 if transferring an asset) - :param transfer_destination: The address to receive the asset + :param address: The address that will be issuing or transfering the asset (e.g. 1CounterpartyXXXXXXXXXXXXXXXUWLpVr) + :param asset: The assets to issue or transfer. This can also be a subasset longname for new subasset issuances (e.g. XCPTEST) + :param quantity: The quantity of the asset to issue (set to 0 if transferring an asset) (e.g. 1000) + :param transfer_destination: The address to receive the asset (e.g. 1CounterpartyXXXXXXXXXXXXXXXUWLpVr) :param divisible: Whether this asset is divisible or not (if a transfer, this value must match the value specified when the asset was originally issued) :param lock: Whether this issuance should lock supply of this asset forever :param reset: Wether this issuance should reset any existing supply @@ -1486,7 +1486,7 @@ def compose_issuance( def compose_mpma( db, - source: str, + address: str, assets: str, destinations: str, quantities: str, @@ -1496,12 +1496,12 @@ def compose_mpma( ): """ Composes a transaction to send multiple payments to multiple addresses. - :param source: The address that will be sending (must have the necessary quantity of the specified asset) - :param assets: comma-separated list of assets to send - :param destinations: comma-separated list of addresses to send to - :param quantities: comma-separated list of quantities to send - :param memo: The Memo associated with this transaction - :param memo_is_hex: Whether the memo field is a hexadecimal string + :param address: The address that will be sending (must have the necessary quantity of the specified asset) (e.g. 1Fv87qmdtjQDP9d4p9E5ncBQvYB4a3Rhy6) + :param assets: comma-separated list of assets to send (e.g. BAABAABLKSHP,BADHAIRDAY,BADWOJAK) + :param destinations: comma-separated list of addresses to send to (e.g. 1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev,1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD,1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs) + :param quantities: comma-separated list of quantities to send (e.g. 1,2,3) + :param memo: The Memo associated with this transaction (e.g. "Hello, world!") + :param memo_is_hex: Whether the memo field is a hexadecimal string (e.g. False) """ asset_list = assets.split(",") destination_list = destinations.split(",") @@ -1513,10 +1513,11 @@ def compose_mpma( for quantity in quantity_list: if not quantity.isdigit(): raise exceptions.ComposeError("Quantity must be an integer") + quantity_list = [int(quantity) for quantity in quantity_list] asset_dest_quant_list = list(zip(asset_list, destination_list, quantity_list)) params = { - "source": source, + "source": address, "asset_dest_quant_list": asset_dest_quant_list, "memo": memo, "memo_is_hex": memo_is_hex, @@ -1524,7 +1525,7 @@ def compose_mpma( rawtransaction = compose_transaction( db, - name="version.mpma", + name="versions.mpma", params=params, **construct_args, ) @@ -1548,13 +1549,13 @@ def compose_order( ): """ Composes a transaction to place an order on the distributed exchange. - :param address: The address that will be issuing the order request (must have the necessary quantity of the specified asset to give) - :param give_asset: The asset that will be given in the trade - :param give_quantity: The quantity of the asset that will be given - :param get_asset: The asset that will be received in the trade - :param get_quantity: The quantity of the asset that will be received - :param expiration: The number of blocks for which the order should be valid - :param fee_required: The miners’ fee required to be paid by orders for them to match this one; in BTC; required only if buying BTC (may be zero, though) + :param address: The address that will be issuing the order request (must have the necessary quantity of the specified asset to give) (e.g. 1CounterpartyXXXXXXXXXXXXXXXUWLpVr) + :param give_asset: The asset that will be given in the trade (e.g. XCP) + :param give_quantity: The quantity of the asset that will be given (e.g. 1000) + :param get_asset: The asset that will be received in the trade (e.g. PEPECASH) + :param get_quantity: The quantity of the asset that will be received (e.g. 1000) + :param expiration: The number of blocks for which the order should be valid (e.g. 100) + :param fee_required: The miners’ fee required to be paid by orders for them to match this one; in BTC; required only if buying BTC (may be zero, though) (e.g. 100) """ params = { "source": address, @@ -1591,10 +1592,10 @@ def compose_send( ): """ Composes a transaction to send a quantity of an asset to another address. - :param address: The address that will be sending (must have the necessary quantity of the specified asset) - :param destination: The address that will be receiving the asset - :param asset: The asset or subasset to send - :param quantity: The quantity of the asset to send + :param address: The address that will be sending (must have the necessary quantity of the specified asset) (e.g. 1CounterpartyXXXXXXXXXXXXXXXUWLpVr) + :param destination: The address that will be receiving the asset (e.g. 1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev) + :param asset: The asset or subasset to send (e.g. XCP) + :param quantity: The quantity of the asset to send (e.g. 1000) :param memo: The Memo associated with this transaction :param memo_is_hex: Whether the memo field is a hexadecimal string :param use_enhanced_send: If this is false, the construct a legacy transaction sending bitcoin dust @@ -1624,13 +1625,14 @@ def compose_send( def compose_sweep(db, address: str, destination: str, flags: int, memo: str, **construct_args): """ Composes a transaction to Sends all assets and/or transfer ownerships to a destination address. - :param address: The address that will be sending - :param destination: The address to receive the assets and/or ownerships + :param address: The address that will be sending (e.g. 1CounterpartyXXXXXXXXXXXXXXXUWLpVr) + :param destination: The address to receive the assets and/or ownerships (e.g. 1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev) :param flags: An OR mask of flags indicating how the sweep should be processed. Possible flags are: - FLAG_BALANCES: (integer) 1, specifies that all balances should be transferred. - FLAG_OWNERSHIP: (integer) 2, specifies that all ownerships should be transferred. - FLAG_BINARY_MEMO: (integer) 4, specifies that the memo is in binary/hex form. - :param memo: The Memo associated with this transaction + (e.g. 7) + :param memo: The Memo associated with this transaction in hex format (e.g. FFFF) """ params = { "source": address, diff --git a/counterparty-core/tools/apicache.json b/counterparty-core/tools/apicache.json index cffe8c8ac0..58ae122e38 100644 --- a/counterparty-core/tools/apicache.json +++ b/counterparty-core/tools/apicache.json @@ -1,359 +1,438 @@ { - "/blocks": [ - { - "block_index": 840000, - "block_hash": "0000000000000000000320283a032748cef8227873ff4872689bf23f1cda83a5", - "block_time": 1713571767, - "previous_block_hash": "0000000000000000000172014ba58d66455762add0512355ad651207918494ab", - "difficulty": 86388558925171.02, - "ledger_hash": "b91dd54cfbd3aff07b358a038bf6174ddc06f36bd00cdccf048e8281bcd56224", - "txlist_hash": "b641c3e190b9941fcd5c84a7c07e66c03559ef26dcea892e2db1cf1d8392a4f2", - "messages_hash": "5c5de34009839ee66ebc3097ecd28bd5deee9553966b3ee39e8a08e123ac9adc" - }, - { - "block_index": 839999, - "block_hash": "0000000000000000000172014ba58d66455762add0512355ad651207918494ab", - "block_time": 1713571533, - "previous_block_hash": "00000000000000000001dcce6ce7c8a45872cafd1fb04732b447a14a91832591", - "difficulty": 86388558925171.02, - "ledger_hash": "e2b2e23c2ac1060dafe2395da01fe5907f323b5a644816f45f003411c612ac30", - "txlist_hash": "f33f800ef166e6ef5b3df15a0733f9fd3ebb0b799f39ef1951e6709118b7c0fd", - "messages_hash": "16b7d40543b7b80587f4d98c84fcdfdceb2d1c18abba82c7064c09c2795b7ab2" - } - ], - "/blocks//transactions": [ - { - "tx_index": 2726605, - "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "/blocks": { + "success": true, + "result": [ + { + "block_index": 840000, + "block_hash": "0000000000000000000320283a032748cef8227873ff4872689bf23f1cda83a5", + "block_time": 1713571767, + "previous_block_hash": "0000000000000000000172014ba58d66455762add0512355ad651207918494ab", + "difficulty": 86388558925171.02, + "ledger_hash": "b91dd54cfbd3aff07b358a038bf6174ddc06f36bd00cdccf048e8281bcd56224", + "txlist_hash": "b641c3e190b9941fcd5c84a7c07e66c03559ef26dcea892e2db1cf1d8392a4f2", + "messages_hash": "5c5de34009839ee66ebc3097ecd28bd5deee9553966b3ee39e8a08e123ac9adc" + }, + { + "block_index": 839999, + "block_hash": "0000000000000000000172014ba58d66455762add0512355ad651207918494ab", + "block_time": 1713571533, + "previous_block_hash": "00000000000000000001dcce6ce7c8a45872cafd1fb04732b447a14a91832591", + "difficulty": 86388558925171.02, + "ledger_hash": "e2b2e23c2ac1060dafe2395da01fe5907f323b5a644816f45f003411c612ac30", + "txlist_hash": "f33f800ef166e6ef5b3df15a0733f9fd3ebb0b799f39ef1951e6709118b7c0fd", + "messages_hash": "16b7d40543b7b80587f4d98c84fcdfdceb2d1c18abba82c7064c09c2795b7ab2" + } + ] + }, + "/blocks/": { + "success": true, + "result": { "block_index": 840464, "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", "block_time": 1713852783, - "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "destination": "", - "btc_amount": 0, - "fee": 56565, - "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", - "supported": 1 + "previous_block_hash": "00000000000000000002db1e5aa19784eec3de949f98ec757e7a7f2fc392079d", + "difficulty": 86388558925171.02, + "ledger_hash": "b3f8cbb50b0705a5c4a8495f8b5128de13a32daebd8ac5e8316a010f0d203584", + "txlist_hash": "84bdc5b9073f775a2b65de7da2b10b89a2235f3501883b0a836e41e68cd00d46", + "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540" } - ], - "/blocks//events": [ - { - "event_index": 14194760, - "event": "BLOCK_PARSED", - "bindings": { + }, + "/blocks//transactions": { + "success": true, + "result": [ + { + "tx_index": 2726605, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "block_index": 840464, + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_time": 1713852783, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "destination": "", + "btc_amount": 0, + "fee": 56565, + "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", + "supported": 1 + } + ] + }, + "/blocks//events": { + "success": true, + "result": [ + { + "event_index": 14194760, + "event": "BLOCK_PARSED", + "bindings": { + "block_index": 840464, + "ledger_hash": "b3f8cbb50b0705a5c4a8495f8b5128de13a32daebd8ac5e8316a010f0d203584", + "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540", + "txlist_hash": "84bdc5b9073f775a2b65de7da2b10b89a2235f3501883b0a836e41e68cd00d46" + }, "block_index": 840464, - "ledger_hash": "b3f8cbb50b0705a5c4a8495f8b5128de13a32daebd8ac5e8316a010f0d203584", - "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540", - "txlist_hash": "84bdc5b9073f775a2b65de7da2b10b89a2235f3501883b0a836e41e68cd00d46" + "timestamp": 1713852780 }, - "block_index": 840464, - "timestamp": 1713852780 - }, - { - "event_index": 14194759, - "event": "TRANSACTION_PARSED", - "bindings": { - "supported": true, - "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "tx_index": 2726605 + { + "event_index": 14194759, + "event": "TRANSACTION_PARSED", + "bindings": { + "supported": true, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605 + }, + "block_index": 840464, + "timestamp": 1713852780 }, - "block_index": 840464, - "timestamp": 1713852780 - }, - { - "event_index": 14194758, - "event": "CREDIT", - "bindings": { - "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "asset": "UNNEGOTIABLE", + { + "event_index": 14194758, + "event": "CREDIT", + "bindings": { + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "UNNEGOTIABLE", + "block_index": 840464, + "calling_function": "issuance", + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "quantity": 1, + "tx_index": 2726605 + }, "block_index": 840464, - "calling_function": "issuance", - "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "quantity": 1, - "tx_index": 2726605 + "timestamp": 1713852780 }, - "block_index": 840464, - "timestamp": 1713852780 - }, - { - "event_index": 14194757, - "event": "ASSET_ISSUANCE", - "bindings": { - "asset": "UNNEGOTIABLE", - "asset_longname": null, + { + "event_index": 14194757, + "event": "ASSET_ISSUANCE", + "bindings": { + "asset": "UNNEGOTIABLE", + "asset_longname": null, + "block_index": 840464, + "call_date": 0, + "call_price": 0.0, + "callable": false, + "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "divisible": false, + "fee_paid": 50000000, + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "locked": false, + "quantity": 1, + "reset": false, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "status": "valid", + "transfer": false, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605 + }, "block_index": 840464, - "call_date": 0, - "call_price": 0.0, - "callable": false, - "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", - "divisible": false, - "fee_paid": 50000000, - "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "locked": false, - "quantity": 1, - "reset": false, - "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "status": "valid", - "transfer": false, - "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "tx_index": 2726605 + "timestamp": 1713852780 }, - "block_index": 840464, - "timestamp": 1713852780 - }, - { - "event_index": 14194756, - "event": "ASSET_CREATION", - "bindings": { - "asset_id": "75313533584419238", - "asset_longname": null, - "asset_name": "UNNEGOTIABLE", - "block_index": 840464 + { + "event_index": 14194756, + "event": "ASSET_CREATION", + "bindings": { + "asset_id": "75313533584419238", + "asset_longname": null, + "asset_name": "UNNEGOTIABLE", + "block_index": 840464 + }, + "block_index": 840464, + "timestamp": 1713852780 }, - "block_index": 840464, - "timestamp": 1713852780 - }, - { - "event_index": 14194755, - "event": "DEBIT", - "bindings": { - "action": "issuance fee", - "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "asset": "XCP", + { + "event_index": 14194755, + "event": "DEBIT", + "bindings": { + "action": "issuance fee", + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "XCP", + "block_index": 840464, + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "quantity": 50000000, + "tx_index": 2726605 + }, "block_index": 840464, - "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "quantity": 50000000, - "tx_index": 2726605 + "timestamp": 1713852780 }, - "block_index": 840464, - "timestamp": 1713852780 - }, - { - "event_index": 14194754, - "event": "NEW_TRANSACTION", - "bindings": { - "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + { + "event_index": 14194754, + "event": "NEW_TRANSACTION", + "bindings": { + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_index": 840464, + "block_time": 1713852783, + "btc_amount": 0, + "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", + "destination": "", + "fee": 56565, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605 + }, "block_index": 840464, - "block_time": 1713852783, - "btc_amount": 0, - "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", - "destination": "", - "fee": 56565, - "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "tx_index": 2726605 + "timestamp": 1713852779 }, - "block_index": 840464, - "timestamp": 1713852779 - }, - { - "event_index": 14194753, - "event": "NEW_BLOCK", - "bindings": { - "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + { + "event_index": 14194753, + "event": "NEW_BLOCK", + "bindings": { + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_index": 840464, + "block_time": 1713852783, + "difficulty": 86388558925171.02, + "previous_block_hash": "00000000000000000002db1e5aa19784eec3de949f98ec757e7a7f2fc392079d" + }, "block_index": 840464, - "block_time": 1713852783, - "difficulty": 86388558925171.02, - "previous_block_hash": "00000000000000000002db1e5aa19784eec3de949f98ec757e7a7f2fc392079d" + "timestamp": 1713852779 + } + ] + }, + "/blocks//events/counts": { + "success": true, + "result": [ + { + "event": "ASSET_CREATION", + "event_count": 1 }, - "block_index": 840464, - "timestamp": 1713852779 - } - ], - "/blocks//events/counts": [ - { - "event": "ASSET_CREATION", - "event_count": 1 - }, - { - "event": "ASSET_ISSUANCE", - "event_count": 1 - }, - { - "event": "BLOCK_PARSED", - "event_count": 1 - }, - { - "event": "CREDIT", - "event_count": 1 - }, - { - "event": "DEBIT", - "event_count": 1 - }, - { - "event": "NEW_BLOCK", - "event_count": 1 - }, - { - "event": "NEW_TRANSACTION", - "event_count": 1 - }, - { - "event": "TRANSACTION_PARSED", - "event_count": 1 - } - ], - "/blocks//events/": [ - { - "event_index": 14194758, - "event": "CREDIT", - "bindings": { + { + "event": "ASSET_ISSUANCE", + "event_count": 1 + }, + { + "event": "BLOCK_PARSED", + "event_count": 1 + }, + { + "event": "CREDIT", + "event_count": 1 + }, + { + "event": "DEBIT", + "event_count": 1 + }, + { + "event": "NEW_BLOCK", + "event_count": 1 + }, + { + "event": "NEW_TRANSACTION", + "event_count": 1 + }, + { + "event": "TRANSACTION_PARSED", + "event_count": 1 + } + ] + }, + "/blocks//events/": { + "success": true, + "result": [ + { + "event_index": 14194758, + "event": "CREDIT", + "bindings": { + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "UNNEGOTIABLE", + "block_index": 840464, + "calling_function": "issuance", + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "quantity": 1, + "tx_index": 2726605 + }, + "block_index": 840464, + "timestamp": 1713852780 + } + ] + }, + "/blocks//credits": { + "success": true, + "result": [ + { + "block_index": 840464, "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", "asset": "UNNEGOTIABLE", - "block_index": 840464, + "quantity": 1, "calling_function": "issuance", "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "quantity": 1, "tx_index": 2726605 + } + ] + }, + "/blocks//debits": { + "success": true, + "result": [ + { + "block_index": 840464, + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "XCP", + "quantity": 50000000, + "action": "issuance fee", + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605 + } + ] + }, + "/blocks//expirations": { + "success": true, + "result": [ + { + "type": "order", + "object_id": "533d5c0ecd8ca9c2946d3298cc5e570eee55b62b887dd85c95de6de4fdc7f441" }, - "block_index": 840464, - "timestamp": 1713852780 - } - ], - "/blocks//credits": [ - { - "block_index": 840464, - "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "asset": "UNNEGOTIABLE", - "quantity": 1, - "calling_function": "issuance", - "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "tx_index": 2726605 - } - ], - "/blocks//debits": [ - { - "block_index": 840464, - "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "asset": "XCP", - "quantity": 50000000, - "action": "issuance fee", - "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "tx_index": 2726605 - } - ], - "/blocks//expirations": [ - { - "type": "order", - "object_id": "533d5c0ecd8ca9c2946d3298cc5e570eee55b62b887dd85c95de6de4fdc7f441" - }, - { - "type": "order", - "object_id": "b048661afeee3f266792481168024abc0d7648fe0e019e4a1e0fd9867c2c0ffc" - } - ], - "/blocks//cancels": [ - { - "tx_index": 2725738, - "tx_hash": "793af9129c7368f974c3ea0c87ad38131f0d82d19fbaf1adf8aaf2e657ec42b8", - "block_index": 839746, - "source": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", - "offer_hash": "04b258ac37f73e3b9a8575110320d67c752e1baace0f516da75845f388911735", - "status": "valid" - }, - { - "tx_index": 2725739, - "tx_hash": "2071e8a6fbc0c443b152d513c754356f8f962db2fa694de8c6826b57413cc190", - "block_index": 839746, - "source": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", - "offer_hash": "b1622dbe4f0ce740cb6c18f6f136876bc4949c40a62bc8cceefa81fd6679a57f", - "status": "valid" - } - ], - "/blocks//destructions": [ - { - "tx_index": 2726496, - "tx_hash": "f5609facc8dac6cdf70b15c514ea15a9acc24a9bd86dcac2b845d5740fbcc50b", - "block_index": 839988, - "source": "1FpLAtreZjTVCMcj1pq1AHWuqcs3n7obMm", - "asset": "COBBEE", - "quantity": 50000, - "tag": "", - "status": "valid" - } - ], - "/blocks//issuances": [ - { - "tx_index": 2726605, - "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "msg_index": 0, - "block_index": 840464, - "asset": "UNNEGOTIABLE", - "quantity": 1, - "divisible": 0, + { + "type": "order", + "object_id": "b048661afeee3f266792481168024abc0d7648fe0e019e4a1e0fd9867c2c0ffc" + } + ] + }, + "/blocks//cancels": { + "success": true, + "result": [ + { + "tx_index": 2725738, + "tx_hash": "793af9129c7368f974c3ea0c87ad38131f0d82d19fbaf1adf8aaf2e657ec42b8", + "block_index": 839746, + "source": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "offer_hash": "04b258ac37f73e3b9a8575110320d67c752e1baace0f516da75845f388911735", + "status": "valid" + }, + { + "tx_index": 2725739, + "tx_hash": "2071e8a6fbc0c443b152d513c754356f8f962db2fa694de8c6826b57413cc190", + "block_index": 839746, + "source": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "offer_hash": "b1622dbe4f0ce740cb6c18f6f136876bc4949c40a62bc8cceefa81fd6679a57f", + "status": "valid" + } + ] + }, + "/blocks//destructions": { + "success": true, + "result": [ + { + "tx_index": 2726496, + "tx_hash": "f5609facc8dac6cdf70b15c514ea15a9acc24a9bd86dcac2b845d5740fbcc50b", + "block_index": 839988, + "source": "1FpLAtreZjTVCMcj1pq1AHWuqcs3n7obMm", + "asset": "COBBEE", + "quantity": 50000, + "tag": "", + "status": "valid" + } + ] + }, + "/blocks//issuances": { + "success": true, + "result": [ + { + "tx_index": 2726605, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "msg_index": 0, + "block_index": 840464, + "asset": "UNNEGOTIABLE", + "quantity": 1, + "divisible": 0, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "transfer": 0, + "callable": 0, + "call_date": 0, + "call_price": 0.0, + "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "fee_paid": 50000000, + "locked": 0, + "status": "valid", + "asset_longname": null, + "reset": 0 + } + ] + }, + "/blocks//sends": { + "success": true, + "result": [ + { + "tx_index": 2726604, + "tx_hash": "b4bbb14c99dd260eb634243e5c595e1b7213459979857a32850de84989bb71ec", + "block_index": 840459, + "source": "13Hnmhs5gy2yXKVBx4wSM5HCBdKnaSBZJH", + "destination": "1LfT83WAxbN9qKhtrXxcQA6xgdhfZk21Hz", + "asset": "GAMESOFTRUMP", + "quantity": 1, + "status": "valid", + "msg_index": 0, + "memo": null + } + ] + }, + "/blocks//dispenses": { + "success": true, + "result": [ + { + "tx_index": 2726580, + "dispense_index": 0, + "tx_hash": "e7f0f2c9bef7a492b714a5952ec61b283be344419c5bc33f405f9af41ebfa48b", + "block_index": 840322, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "destination": "bc1qzcdkhnexpjc8wvkyrpyrsn0f5xzcpu877mjmgj", + "asset": "FLOCK", + "dispense_quantity": 90000000000, + "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a" + } + ] + }, + "/blocks//sweeps": { + "success": true, + "result": [ + { + "tx_index": 2720536, + "tx_hash": "9309a4c0aed426e281a52e5d48acadd1464999269a5e75cf2293edd0277d743d", + "block_index": 836519, + "source": "1DMVnJuqBobXA9xYioabBsR4mN8bvVtCAW", + "destination": "1HC2q92SfH1ZHzS4CrDwp6KAipV4FqUL4T", + "flags": 3, + "status": "valid", + "memo": null, + "fee_paid": 1400000 + }, + { + "tx_index": 2720537, + "tx_hash": "d8db6281abffdbf6c320d5ade06aeb6fad2f7bfa1a2c2243c6726020a27107d3", + "block_index": 836519, + "source": "18szqTVJUWwYrtRHq98Wn4DhCGGiy3jZ87", + "destination": "1HC2q92SfH1ZHzS4CrDwp6KAipV4FqUL4T", + "flags": 3, + "status": "valid", + "memo": null, + "fee_paid": 1400000 + } + ] + }, + "/transactions/info": { + "success": true, + "result": { "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "transfer": 0, - "callable": 0, - "call_date": 0, - "call_price": 0.0, - "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", - "fee_paid": 50000000, - "locked": 0, - "status": "valid", - "asset_longname": null, - "reset": 0 - } - ], - "/blocks//sends": [ - { - "tx_index": 2726604, - "tx_hash": "b4bbb14c99dd260eb634243e5c595e1b7213459979857a32850de84989bb71ec", - "block_index": 840459, - "source": "13Hnmhs5gy2yXKVBx4wSM5HCBdKnaSBZJH", - "destination": "1LfT83WAxbN9qKhtrXxcQA6xgdhfZk21Hz", - "asset": "GAMESOFTRUMP", - "quantity": 1, - "status": "valid", - "msg_index": 0, - "memo": null - } - ], - "/blocks//dispenses": [ - { - "tx_index": 2726580, - "dispense_index": 0, - "tx_hash": "e7f0f2c9bef7a492b714a5952ec61b283be344419c5bc33f405f9af41ebfa48b", - "block_index": 840322, - "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", - "destination": "bc1qzcdkhnexpjc8wvkyrpyrsn0f5xzcpu877mjmgj", - "asset": "FLOCK", - "dispense_quantity": 90000000000, - "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a" - } - ], - "/blocks//sweeps": [ - { - "tx_index": 2720536, - "tx_hash": "9309a4c0aed426e281a52e5d48acadd1464999269a5e75cf2293edd0277d743d", - "block_index": 836519, - "source": "1DMVnJuqBobXA9xYioabBsR4mN8bvVtCAW", - "destination": "1HC2q92SfH1ZHzS4CrDwp6KAipV4FqUL4T", - "flags": 3, - "status": "valid", - "memo": null, - "fee_paid": 1400000 - }, - { - "tx_index": 2720537, - "tx_hash": "d8db6281abffdbf6c320d5ade06aeb6fad2f7bfa1a2c2243c6726020a27107d3", - "block_index": 836519, - "source": "18szqTVJUWwYrtRHq98Wn4DhCGGiy3jZ87", - "destination": "1HC2q92SfH1ZHzS4CrDwp6KAipV4FqUL4T", - "flags": 3, - "status": "valid", - "memo": null, - "fee_paid": 1400000 + "destination": "", + "btc_amount": 0, + "fee": 56565, + "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", + "unpacked_data": { + "message_type": "issuance", + "message_type_id": 22, + "message_data": { + "asset_id": 75313533584419238, + "asset": "UNNEGOTIABLE", + "subasset_longname": null, + "quantity": 1, + "divisible": false, + "lock": false, + "reset": false, + "callable": false, + "call_date": 0, + "call_price": 0.0, + "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "status": "valid" + } + } } - ], - "/transactions/info": { - "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "destination": "", - "btc_amount": 0, - "fee": 56565, - "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", - "unpacked_data": { + }, + "/transactions/unpack": { + "success": true, + "result": { "message_type": "issuance", "message_type_id": 22, "message_data": { @@ -372,1480 +451,1747 @@ } } }, - "/transactions/unpack": { - "message_type": "issuance", - "message_type_id": 22, - "message_data": { - "asset_id": 75313533584419238, - "asset": "UNNEGOTIABLE", - "subasset_longname": null, - "quantity": 1, - "divisible": false, - "lock": false, - "reset": false, - "callable": false, - "call_date": 0, - "call_price": 0.0, - "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", - "status": "valid" - } - }, "/transactions/": { - "tx_index": 2726605, - "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "block_index": 840464, - "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", - "block_time": 1713852783, - "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "destination": "", - "btc_amount": 0, - "fee": 56565, - "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", - "supported": 1 - }, - "/addresses/
/balances": [ - { - "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", - "asset": "XCP", - "quantity": 104200000000 - } - ], - "/addresses/
/balances/": { - "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", - "asset": "XCP", - "quantity": 104200000000 - }, - "/addresses/
/credits": [ - { - "block_index": 830981, - "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", - "asset": "XCP", - "quantity": 104200000000, - "calling_function": "send", - "event": "7e4fbb0a1eeeee34bf499955f1027fb78c514d63a3c8ff2e28c6dad005e4d850", - "tx_index": 2677412 - } - ], - "/addresses/
/debits": [ - { - "block_index": 836949, - "address": "bc1q7787j6msqczs58asdtetchl3zwe8ruj57p9r9y", - "asset": "XCP", - "quantity": 40000000000, - "action": "open dispenser", - "event": "53ed08176d3479f49986e9282293da85cebc03835b128d8e790ee587f9f1c750", - "tx_index": 2721524 - }, - { - "block_index": 840388, - "address": "bc1q7787j6msqczs58asdtetchl3zwe8ruj57p9r9y", - "asset": "XCP", - "quantity": 250000000000, - "action": "send", - "event": "bc54968ba7d0a59a47b276602e2dbdcf01b14009742e0d7b50272cbae529a9a4", - "tx_index": 2726594 - } - ], - "/addresses/
/bets": [ - { - "tx_index": 15106, - "tx_hash": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed", - "block_index": 304063, - "source": "18ZNyaAcH4HugeofwbrpLoUNiayxJRH65c", - "feed_address": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", - "bet_type": 3, - "deadline": 1401828300, - "wager_quantity": 50000000, - "wager_remaining": 0, - "counterwager_quantity": 50000000, - "counterwager_remaining": 0, - "target_value": 1.0, - "leverage": 5040, - "expiration": 11, - "expire_index": 304073, - "fee_fraction_int": 1000000, - "status": "filled" - }, - { - "tx_index": 61338, - "tx_hash": "0fcc7f5190c028f6c5534554d10ec5b4a9246d63826421cd58be2d572d11f088", - "block_index": 320704, - "source": "1Ew38GxczvV1KxjzZsq9f8UuRzHkHQrL5C", - "feed_address": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", - "bet_type": 2, - "deadline": 1410728400, - "wager_quantity": 1000000, - "wager_remaining": 0, - "counterwager_quantity": 1999991, - "counterwager_remaining": 0, - "target_value": 1.0, - "leverage": 5040, - "expiration": 13, - "expire_index": 320715, - "fee_fraction_int": 1000000, - "status": "filled" - } - ], - "/addresses/
/broadcasts": [ - { - "tx_index": 15055, - "tx_hash": "774887e555a6ae5a8c058ebc0185058307977f01a2d4d326e71f37d6dd977154", - "block_index": 304048, - "source": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", - "timestamp": 1401815290, - "value": -1.0, - "fee_fraction_int": 1000000, - "text": "xbet.io/feed/1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", - "locked": 0, - "status": "valid" - }, - { - "tx_index": 61477, - "tx_hash": "5d49993bec727622c7b41c84e2b1e65c368f33390d633d217131ffcc5b592f0d", - "block_index": 320718, - "source": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", - "timestamp": 1410732503, - "value": 1.0, - "fee_fraction_int": 1000000, - "text": "xbet.io/feed/1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", - "locked": 0, - "status": "valid" - } - ], - "/addresses/
/burns": [ - { - "tx_index": 3070, - "tx_hash": "4560d0e3d04927108b615ab106040489aca9c4aceedcf69d2b71f63b3139c7ae", - "block_index": 283810, - "source": "1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W", - "burned": 10000000, - "earned": 10000000000, - "status": "valid" - } - ], - "/addresses/
/sends": [ - { - "tx_index": 163106, - "tx_hash": "1c447b41816f1cfbb83f125c8e05faeaae70dbf27255745ba7393f809bd388eb", - "block_index": 343049, - "source": "1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W", - "destination": "16cRBUNnTWiUh2sXWNn1P7KHyJUmyMkdfH", - "asset": "XCP", - "quantity": 10000000000, - "status": "valid", - "msg_index": 0, - "memo": null - } - ], - "/addresses/
/receives": [ - { - "tx_index": 2677412, - "tx_hash": "7e4fbb0a1eeeee34bf499955f1027fb78c514d63a3c8ff2e28c6dad005e4d850", - "block_index": 830981, - "source": "bc1qqxr9grqw73dm95cen3g56mzswuj6eqjedu6csx", - "destination": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", - "asset": "XCP", - "quantity": 104200000000, - "status": "valid", - "msg_index": 0, - "memo": null - } - ], - "/addresses/
/sends/": [ - { - "tx_index": 163106, - "tx_hash": "1c447b41816f1cfbb83f125c8e05faeaae70dbf27255745ba7393f809bd388eb", - "block_index": 343049, - "source": "1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W", - "destination": "16cRBUNnTWiUh2sXWNn1P7KHyJUmyMkdfH", - "asset": "XCP", - "quantity": 10000000000, - "status": "valid", - "msg_index": 0, - "memo": null - } - ], - "/addresses/
/receives/": [ - { - "tx_index": 2677412, - "tx_hash": "7e4fbb0a1eeeee34bf499955f1027fb78c514d63a3c8ff2e28c6dad005e4d850", - "block_index": 830981, - "source": "bc1qqxr9grqw73dm95cen3g56mzswuj6eqjedu6csx", - "destination": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", - "asset": "XCP", - "quantity": 104200000000, - "status": "valid", - "msg_index": 0, - "memo": null - } - ], - "/addresses/
/dispensers": [ - { - "tx_index": 2726460, - "tx_hash": "b592d8ca4994d182e4ec63e1659dc4282b1a84466b7d71ed68c281ce63ed4897", - "block_index": 839964, - "source": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", - "asset": "ERYKAHPEPU", - "give_quantity": 1, - "escrow_quantity": 25, - "satoshirate": 50000, - "status": 0, - "give_remaining": 25, - "oracle_address": null, - "last_status_tx_hash": null, - "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", - "dispense_count": 0 - } - ], - "/addresses/
/dispensers/": [ - { - "tx_index": 2726460, - "tx_hash": "b592d8ca4994d182e4ec63e1659dc4282b1a84466b7d71ed68c281ce63ed4897", - "block_index": 839964, - "source": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", - "asset": "ERYKAHPEPU", - "give_quantity": 1, - "escrow_quantity": 25, - "satoshirate": 50000, - "status": 0, - "give_remaining": 25, - "oracle_address": null, - "last_status_tx_hash": null, - "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", - "dispense_count": 0 - } - ], - "/addresses/
/sweeps": [ - { - "tx_index": 2720537, - "tx_hash": "d8db6281abffdbf6c320d5ade06aeb6fad2f7bfa1a2c2243c6726020a27107d3", - "block_index": 836519, - "source": "18szqTVJUWwYrtRHq98Wn4DhCGGiy3jZ87", - "destination": "1HC2q92SfH1ZHzS4CrDwp6KAipV4FqUL4T", - "flags": 3, - "status": "valid", - "memo": null, - "fee_paid": 1400000 - } - ], - "/addresses/
/compose/bet": { - "rawtransaction": "01000000019a753a6b8be54cdee2acd408f6199e29092c8c32e13912865a68da8a0d9ae065010000001976a914bce6191bf2fd5981313cae869e9fafe164f7dbaf88acffffffff0322020000000000001976a914bce6191bf2fd5981313cae869e9fafe164f7dbaf88ac0000000000000000316a2f88dab644080b5ae64cba1e7f06510694b41e385fc9120e17c1037dd08399355abbaa0401e65959c9caa4dec4efe32189152b00000000001976a914bce6191bf2fd5981313cae869e9fafe164f7dbaf88ac00000000", - "params": { - "source": "1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev", - "feed_address": "1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev", - "bet_type": 2, - "deadline": 3000000000, - "wager_quantity": 1000, - "counterwager_quantity": 1000, - "target_value": 1000, - "leverage": 5040, - "expiration": 100 - }, - "name": "bet" - }, - "/assets": [ - { - "asset": "A100000000000000000", - "asset_longname": null - }, - { - "asset": "A1000000000000000000", - "asset_longname": null - }, - { - "asset": "A10000000000000000000", - "asset_longname": null - }, - { - "asset": "A10000000000000000001", - "asset_longname": null - }, - { - "asset": "A10000000000000000002", - "asset_longname": null - } - ], - "/assets/": { - "asset": "UNNEGOTIABLE", - "asset_longname": null, - "owner": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "divisible": false, - "locked": false, - "supply": 1, - "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", - "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "holder_count": 1 - }, - "/assets//balances": [ - { - "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "asset": "UNNEGOTIABLE", - "quantity": 1 - } - ], - "/assets//balances/
": { - "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", - "asset": "XCP", - "quantity": 104200000000 - }, - "/assets//orders": [ - { - "tx_index": 825373, - "tx_hash": "0129611a0aece52adddf6d929e75c703baa9cdcb7e4ce887aa859f9640aa9640", - "block_index": 455461, - "source": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", - "give_asset": "NEEDPEPE", - "give_quantity": 1, - "give_remaining": 0, - "get_asset": "PEPECASH", - "get_quantity": 400000000000, - "get_remaining": 0, - "expiration": 1000, - "expire_index": 456457, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 46098, - "fee_provided_remaining": 46098, - "status": "filled" - }, - { - "tx_index": 2225134, - "tx_hash": "5b6e0c741d765ebd883dc16eecfb5c340c52865cabf297ca2c1432437c1348b7", - "block_index": 772817, - "source": "1FnM7akSCD8G3fRQHCUEXRCfL35gptsPZB", - "give_asset": "NEEDPEPE", - "give_quantity": 1, - "give_remaining": 0, - "get_asset": "XCP", - "get_quantity": 80800000000, - "get_remaining": 0, - "expiration": 5000, - "expire_index": 777817, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 5544, - "fee_provided_remaining": 5544, - "status": "filled" - }, - { - "tx_index": 1946026, - "tx_hash": "75dc6ee1f67317e674ef33b617d3a9839ee53bf4a2e8274c88d6202d4d89b59a", - "block_index": 727444, - "source": "1GotRejB6XsGgMsM79TvcypeanDJRJbMtg", - "give_asset": "NEEDPEPE", - "give_quantity": 1, - "give_remaining": 0, - "get_asset": "XCP", - "get_quantity": 70000000000, - "get_remaining": 0, - "expiration": 5000, - "expire_index": 732381, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 264, - "fee_provided_remaining": 264, - "status": "filled" - }, - { - "tx_index": 2202451, - "tx_hash": "77f568fc6604dbe209d2ea1b0158d7de20723c0178107eb570f4f2a719b0d7c7", - "block_index": 772817, - "source": "184gKLQTtQU29LXbxbYJkUV4if9SmW6v2d", - "give_asset": "XCP", - "give_quantity": 80800000000, - "give_remaining": 0, - "get_asset": "NEEDPEPE", - "get_quantity": 1, - "get_remaining": 0, - "expiration": 5000, - "expire_index": 773300, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 264, - "fee_provided_remaining": 264, - "status": "filled" - }, - { - "tx_index": 825411, - "tx_hash": "7b2369f40078f4d98a3d3a7733315a1c4efd7977c75f7066dd447d5c7eed7f20", - "block_index": 455461, - "source": "18cmgoX99Nrm411YKpmTQsp23qczWdxS6w", - "give_asset": "PEPECASH", - "give_quantity": 300000000000, - "give_remaining": 0, - "get_asset": "NEEDPEPE", - "get_quantity": 1, - "get_remaining": 0, - "expiration": 5000, - "expire_index": 460461, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 40000, - "fee_provided_remaining": 40000, - "status": "filled" - }, - { - "tx_index": 825403, - "tx_hash": "7e1abf6ad57eb61227015fc7a333da034b4dd2f1c4e23cf106864b60a20feef7", - "block_index": 455460, - "source": "18cmgoX99Nrm411YKpmTQsp23qczWdxS6w", - "give_asset": "PEPECASH", - "give_quantity": 200000000000, - "give_remaining": 0, - "get_asset": "NEEDPEPE", - "get_quantity": 1, - "get_remaining": 0, - "expiration": 1000, - "expire_index": 456460, - "fee_required": 20000, - "fee_required_remaining": 20000, - "fee_provided": 50766, - "fee_provided_remaining": 50766, - "status": "filled" - }, - { - "tx_index": 825370, - "tx_hash": "8e4d324407b62de773af53f8f7a556882ac82a217c216491a28072f293918fe6", - "block_index": 455457, - "source": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", - "give_asset": "NEEDPEPE", - "give_quantity": 1, - "give_remaining": 0, - "get_asset": "PEPECASH", - "get_quantity": 100000000000, - "get_remaining": -1100000000, - "expiration": 1000, - "expire_index": 456457, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 75791, - "fee_provided_remaining": 75791, - "status": "filled" - }, - { - "tx_index": 825413, - "tx_hash": "927878fa98edb6d24310c45254c324f3d5a7f625e2a3a0e7fd1e749b49493750", - "block_index": 455461, - "source": "18cmgoX99Nrm411YKpmTQsp23qczWdxS6w", - "give_asset": "PEPECASH", - "give_quantity": 400000000000, - "give_remaining": 0, - "get_asset": "NEEDPEPE", - "get_quantity": 1, - "get_remaining": 0, - "expiration": 5000, - "expire_index": 460461, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 40000, - "fee_provided_remaining": 40000, - "status": "filled" - }, - { - "tx_index": 1946587, - "tx_hash": "b747f290cbbad6faa1c1c05d5c6d001b5a3ef487027bb0d4eefcdc9f6e865c39", - "block_index": 727444, - "source": "1AtcSh7uxenQ6AR5xqr6agAegWRUF5N4uh", - "give_asset": "XCP", - "give_quantity": 70000000000, - "give_remaining": 0, - "get_asset": "NEEDPEPE", - "get_quantity": 1, - "get_remaining": 0, - "expiration": 5000, - "expire_index": 732444, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 792, - "fee_provided_remaining": 792, - "status": "filled" - }, - { - "tx_index": 825371, - "tx_hash": "b83c96217214decb6316c3619bc88a3471d17e46eb3708406c8f878dedd61610", - "block_index": 455460, - "source": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", - "give_asset": "NEEDPEPE", - "give_quantity": 1, - "give_remaining": 0, - "get_asset": "PEPECASH", - "get_quantity": 200000000000, - "get_remaining": 0, - "expiration": 1000, - "expire_index": 456457, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 46098, - "fee_provided_remaining": 46098, - "status": "filled" - }, - { - "tx_index": 825372, - "tx_hash": "e32154f8ade796df0b121604de140703d062d22d1e82e77e629e6096668c812f", - "block_index": 455461, - "source": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", - "give_asset": "NEEDPEPE", - "give_quantity": 1, - "give_remaining": 0, - "get_asset": "PEPECASH", - "get_quantity": 300000000000, - "get_remaining": 0, - "expiration": 1000, - "expire_index": 456457, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 46098, - "fee_provided_remaining": 46098, - "status": "filled" - } - ], - "/assets//credits": [ - { - "block_index": 840464, - "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "asset": "UNNEGOTIABLE", - "quantity": 1, - "calling_function": "issuance", - "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "tx_index": 2726605 - } - ], - "/assets//debits": [ - { - "block_index": 280091, - "address": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", - "asset": "XCP", - "quantity": 1000000000, - "action": "send", - "event": "1c20d6596f6be031c94def5ad93a52217d76371885adcc53c91c3b1eaf76ccce", - "tx_index": 729 - }, - { - "block_index": 280112, - "address": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", - "asset": "XCP", - "quantity": 1100000000, - "action": "send", - "event": "4dacd03d73cb497229dbfe2e7209adc4221540efe0e4c57f408b09b2fd36ece6", - "tx_index": 749 - }, - { - "block_index": 280112, - "address": "1PMacKVWDszkBRbb2iWWvX63BwhKUTsSBd", - "asset": "XCP", - "quantity": 100000000, - "action": "send", - "event": "057d10cc33455f4f7af44d2f030b3866e3a16416ecf984e304c76abe98393c1d", - "tx_index": 752 - }, - { - "block_index": 280114, - "address": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", - "asset": "XCP", - "quantity": 1100000000, - "action": "send", - "event": "3ac6ea5b329832e2dc31ead6c5277beccb7d95f0d9f20f256f97067223c81e00", - "tx_index": 755 - }, - { - "block_index": 280156, - "address": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", - "asset": "XCP", - "quantity": 1100000000, - "action": "send", - "event": "66fc1409ac6646bd8c267de89c57d2204e31bb6dfce9ee2a3ab18416fadf9e9c", - "tx_index": 766 - } - ], - "/assets//dividends": [ - { - "tx_index": 1914456, - "tx_hash": "30760e413947ebdc80ed7a5ada1bd4466800b87e9976bbe811ad4e2b46546359", - "block_index": 724381, - "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", - "asset": "GMONEYPEPE", - "dividend_asset": "ENDTHEFED", - "quantity_per_unit": 1, - "fee_paid": 2520000, - "status": "valid" - }, - { - "tx_index": 1915246, - "tx_hash": "827794cbab3299f80a5b8b8cb8ec29ec3aee1373f7da2c05a156bed902bf4684", - "block_index": 724479, - "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", - "asset": "GMONEYPEPE", - "dividend_asset": "TRUMPDANCING", - "quantity_per_unit": 100, - "fee_paid": 2520000, - "status": "valid" - }, - { - "tx_index": 1920208, - "tx_hash": "7014f1e259531ba9632ca5000c35df5bd47f237318e48955900453ce9c07e917", - "block_index": 724931, - "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", - "asset": "GMONEYPEPE", - "dividend_asset": "CTRWOJACK", - "quantity_per_unit": 1111, - "fee_paid": 2700000, - "status": "valid" - }, - { - "tx_index": 1927909, - "tx_hash": "5556fd2b0802cf3bc0abd5001ecbac3adbc5b7c5c46a145a78daeef358c308de", - "block_index": 725654, - "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", - "asset": "GMONEYPEPE", - "dividend_asset": "WHITERUSSIAN", - "quantity_per_unit": 1, - "fee_paid": 3220000, - "status": "valid" - }, - { - "tx_index": 1983693, - "tx_hash": "cda646285cc63f758d19b5403070f23e2a6e4b34eb3b86b63a0f56f971345657", - "block_index": 730568, - "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", - "asset": "GMONEYPEPE", - "dividend_asset": "A4520591452211866149", - "quantity_per_unit": 1, - "fee_paid": 4040000, - "status": "valid" - }, - { - "tx_index": 1983842, - "tx_hash": "e4b73dc974cc279b873b78e5dc4a347c08788b02143ae27aa0582f900289be10", - "block_index": 730588, - "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", - "asset": "GMONEYPEPE", - "dividend_asset": "NCSWIC", - "quantity_per_unit": 1, - "fee_paid": 4040000, - "status": "valid" - }, - { - "tx_index": 1996395, - "tx_hash": "b342feb1421df107010ad3c8ee2043ded802bdf6cd619862459da3d0f87d6a99", - "block_index": 731994, - "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", - "asset": "GMONEYPEPE", - "dividend_asset": "FUCKTHEFED", - "quantity_per_unit": 1, - "fee_paid": 4380000, - "status": "valid" - }, - { - "tx_index": 2035947, - "tx_hash": "02d715fd9e8b7bbc782b1b2d92a1b9ffae9326bfc88ba76c453c515ad7c8c2bc", - "block_index": 738763, - "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", - "asset": "GMONEYPEPE", - "dividend_asset": "HOLDTHELINE", - "quantity_per_unit": 1, - "fee_paid": 4940000, - "status": "valid" - }, - { - "tx_index": 2174481, - "tx_hash": "b935a06fc34d8fa4f0c526984085b1b12c78e899415e595b625f1bee84ce3709", - "block_index": 762733, - "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", - "asset": "GMONEYPEPE", - "dividend_asset": "EOXIXIZERO", - "quantity_per_unit": 1, - "fee_paid": 6500000, - "status": "valid" - }, - { - "tx_index": 2198534, - "tx_hash": "a063e9a745b9f6bc3201f72abff196de20ec106bcc71d820673d516ddbb3aa90", - "block_index": 767569, - "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", - "asset": "GMONEYPEPE", - "dividend_asset": "TRUMPCARDS", - "quantity_per_unit": 1, - "fee_paid": 6660000, - "status": "valid" - }, - { - "tx_index": 2704948, - "tx_hash": "437102ca4698f63a12e369f6168e3c7f5f8eef3e225395d515775673e33d39c1", - "block_index": 832745, - "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", - "asset": "GMONEYPEPE", - "dividend_asset": "FUCKYOUWAR", - "quantity_per_unit": 1, - "fee_paid": 6840000, - "status": "valid" - }, - { - "tx_index": 2704949, - "tx_hash": "7d3807cc58fa2d9751b2b0089bfa8fa86ef795821be6d8e9418ab3a819eba299", - "block_index": 832745, - "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", - "asset": "GMONEYPEPE", - "dividend_asset": "MEDICINEPEPE", - "quantity_per_unit": 1, - "fee_paid": 6840000, - "status": "valid" - } - ], - "/assets//issuances": [ - { + "success": true, + "result": { "tx_index": 2726605, "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "msg_index": 0, "block_index": 840464, - "asset": "UNNEGOTIABLE", - "quantity": 1, - "divisible": 0, + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_time": 1713852783, "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "transfer": 0, - "callable": 0, - "call_date": 0, - "call_price": 0.0, - "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", - "fee_paid": 50000000, - "locked": 0, - "status": "valid", - "asset_longname": null, - "reset": 0 + "destination": "", + "btc_amount": 0, + "fee": 56565, + "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", + "supported": 1 } - ], - "/assets//sends": [ - { - "tx_index": 729, - "tx_hash": "1c20d6596f6be031c94def5ad93a52217d76371885adcc53c91c3b1eaf76ccce", - "block_index": 280091, - "source": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", - "destination": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", - "asset": "XCP", - "quantity": 1000000000, - "status": "valid", - "msg_index": 0, - "memo": null - }, - { - "tx_index": 749, - "tx_hash": "4dacd03d73cb497229dbfe2e7209adc4221540efe0e4c57f408b09b2fd36ece6", - "block_index": 280112, - "source": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", - "destination": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", - "asset": "XCP", - "quantity": 1100000000, - "status": "valid", - "msg_index": 0, - "memo": null - }, - { - "tx_index": 752, - "tx_hash": "057d10cc33455f4f7af44d2f030b3866e3a16416ecf984e304c76abe98393c1d", - "block_index": 280112, - "source": "1PMacKVWDszkBRbb2iWWvX63BwhKUTsSBd", - "destination": "1PMacKVWDszkBRbb2iWWvX63BwhKUTsSBd", - "asset": "XCP", - "quantity": 100000000, - "status": "valid", - "msg_index": 0, - "memo": null - }, - { - "tx_index": 755, - "tx_hash": "3ac6ea5b329832e2dc31ead6c5277beccb7d95f0d9f20f256f97067223c81e00", - "block_index": 280114, - "source": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", - "destination": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", - "asset": "XCP", - "quantity": 1100000000, - "status": "valid", - "msg_index": 0, - "memo": null - }, - { - "tx_index": 766, - "tx_hash": "66fc1409ac6646bd8c267de89c57d2204e31bb6dfce9ee2a3ab18416fadf9e9c", - "block_index": 280156, - "source": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", - "destination": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + }, + "/addresses/
/balances": { + "success": true, + "result": [ + { + "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + "asset": "XCP", + "quantity": 104200000000 + } + ] + }, + "/addresses/
/balances/": { + "success": true, + "result": { + "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", "asset": "XCP", - "quantity": 1100000000, - "status": "valid", - "msg_index": 0, - "memo": null - } - ], - "/assets//dispensers": [ - { - "tx_index": 2726460, - "tx_hash": "b592d8ca4994d182e4ec63e1659dc4282b1a84466b7d71ed68c281ce63ed4897", - "block_index": 839964, - "source": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", - "asset": "ERYKAHPEPU", - "give_quantity": 1, - "escrow_quantity": 25, - "satoshirate": 50000, - "status": 0, - "give_remaining": 25, - "oracle_address": null, - "last_status_tx_hash": null, - "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", - "dispense_count": 0 - } - ], - "/assets//dispensers/
": [ - { - "tx_index": 2726460, - "tx_hash": "b592d8ca4994d182e4ec63e1659dc4282b1a84466b7d71ed68c281ce63ed4897", - "block_index": 839964, - "source": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", - "asset": "ERYKAHPEPU", - "give_quantity": 1, - "escrow_quantity": 25, - "satoshirate": 50000, - "status": 0, - "give_remaining": 25, - "oracle_address": null, - "last_status_tx_hash": null, - "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", - "dispense_count": 0 - } - ], - "/assets//holders": [ - { - "address": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", - "address_quantity": 63, - "escrow": null - }, - { - "address": "16yRstRXStVJJ1TN2S4DCWifyrCsetpma7", - "address_quantity": 1, - "escrow": null - }, - { - "address": "bc1qsvqsa9arwz30g2z0w09twzn8gz3380h36yxacs", - "address_quantity": 2, - "escrow": null - }, - { - "address": "17PnWBjHkekZKQPVagmTR5HiD51pN8WHC8", - "address_quantity": 1, - "escrow": null - }, - { - "address": "1FRxFpP9XoRsvZFVqGtt4fjjgKe1h5tbAh", - "address_quantity": 1, - "escrow": null - }, - { - "address": "1AdHg2q3M2rMFRgZyZ7RQyNHdwjSib7wSZ", - "address_quantity": 2, - "escrow": null - }, - { - "address": "1CTnziWXidHzY3qT8gwLa1ZxZK37A7HreR", - "address_quantity": 1, - "escrow": null - }, - { - "address": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", - "address_quantity": 25, - "escrow": null - } - ], - "/orders/": [ - { - "tx_index": 2724132, - "tx_hash": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776", - "block_index": 840381, - "source": "15L7U55PAsHLEpQkZqz62e3eqWd9AHb2DH", - "give_asset": "PEPECASH", - "give_quantity": 6966600000000, - "give_remaining": 900000000000, - "get_asset": "XCP", - "get_quantity": 11076894000, - "get_remaining": 1431000000, - "expiration": 5000, - "expire_index": 843055, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 4488, - "fee_provided_remaining": 4488, - "status": "open" - } - ], - "/orders//matches": [ - { - "id": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776_5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947", - "tx0_index": 2724132, - "tx0_hash": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776", - "tx0_address": "15L7U55PAsHLEpQkZqz62e3eqWd9AHb2DH", - "tx1_index": 2726591, - "tx1_hash": "5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947", - "tx1_address": "15e15ua6A3FJqjMevtrWcFSzKn9k6bMQeA", - "forward_asset": "PEPECASH", - "forward_quantity": 6066600000000, - "backward_asset": "XCP", - "backward_quantity": 9645894000, - "tx0_block_index": 838055, - "tx1_block_index": 840381, - "block_index": 840381, - "tx0_expiration": 5000, - "tx1_expiration": 8064, - "match_expire_index": 840401, - "fee_paid": 0, - "status": "completed" - } - ], - "/orders//btcpays": [ - { - "tx_index": 2719343, - "tx_hash": "6cfa7f31b43a46e5ad74a9db810bd6cac56235a8ebc73ec63d01b38ea7ea2414", - "block_index": 836188, - "source": "1NfJnJdAdmm2rJCFW54NsAKqqTTMexCNJ3", - "destination": "1BepkwAhEmEuEGF349XjmEUrRvoy9a7Biv", - "btc_amount": 4500000, - "order_match_id": "0a1387df82a8a7e9cec01c52c8fee01f6995c4e39dc5804e1d2bf40d9368f5c5_299b5b648f54eacb839f3487232d49aea373cdd681b706d4cc0b5e0b03688db4", - "status": "valid" + "quantity": 104200000000 } - ], - "/bets/": [ - { - "tx_index": 15106, - "tx_hash": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed", - "block_index": 304063, - "source": "18ZNyaAcH4HugeofwbrpLoUNiayxJRH65c", - "feed_address": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", - "bet_type": 3, - "deadline": 1401828300, - "wager_quantity": 50000000, - "wager_remaining": 0, - "counterwager_quantity": 50000000, - "counterwager_remaining": 0, - "target_value": 1.0, - "leverage": 5040, - "expiration": 11, - "expire_index": 304073, - "fee_fraction_int": 1000000, - "status": "filled" - } - ], - "/bets//matches": [ - { - "id": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed_cb5f888c299a50967d523513daed71636d927e6ef3dbda85feb11ff112ae4330", - "tx0_index": 15106, - "tx0_hash": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed", - "tx0_address": "18ZNyaAcH4HugeofwbrpLoUNiayxJRH65c", - "tx1_index": 15108, - "tx1_hash": "cb5f888c299a50967d523513daed71636d927e6ef3dbda85feb11ff112ae4330", - "tx1_address": "1PTqJmRCMGs4qBEh2APAFSrBv95Uf1hfiD", - "tx0_bet_type": 3, - "tx1_bet_type": 2, - "feed_address": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", - "initial_value": -1, - "deadline": 1401828300, - "target_value": 1.0, - "leverage": 5040, - "forward_quantity": 50000000, - "backward_quantity": 50000000, - "tx0_block_index": 304062, - "tx1_block_index": 304063, - "block_index": 306379, - "tx0_expiration": 11, - "tx1_expiration": 1459, - "match_expire_index": 304073, - "fee_fraction_int": 1000000, - "status": "expired" - } - ], - "/bets//resolutions": [ - { - "bet_match_id": "36bbbb7dbd85054dac140a8ad8204eda2ee859545528bd2a9da69ad77c277ace_d70ee4e44f02fe6258ee0c267f33f304a0fc61d4ce424852f58c28967dc1924f", - "bet_match_type_id": 5, - "block_index": 401128, - "winner": "Equal", - "settled": null, - "bull_credit": null, - "bear_credit": null, - "escrow_less_fee": 2000000, - "fee": 0 - } - ], - "/burns": [ - { - "tx_index": 10, - "tx_hash": "41bbe1ec81da008a0e92758efb6084af3a6b6acf483983456ec797ee59c0e0f1", - "block_index": 278511, - "source": "12crRpZpn93PKTQ4WYxHMw4xi6ckh1CFR3", - "burned": 99900000, - "earned": 148024554545, - "status": "valid" - }, - { - "tx_index": 11, - "tx_hash": "c403a92281b568c7d428d942354d026594dc54ae35c21f53ecf5c918208c45de", - "block_index": 278511, - "source": "13UXh9dBEhA48gJiegJNodqe91PK88f4pW", - "burned": 99900000, - "earned": 148024554545, - "status": "valid" - }, - { - "tx_index": 12, - "tx_hash": "749ba1c2bd314f7b98e9cfb44575495b4ad2cf624901c65488fbc4f57a3dc0ac", - "block_index": 278511, - "source": "19Ht3rkW7JB9VuC7rsZEGZju96ujzchaZZ", - "burned": 99900000, - "earned": 148024554545, - "status": "valid" - }, - { - "tx_index": 13, - "tx_hash": "da330160b71138f9bda5e126df0d5d6248c0879d88e16255c74135274d8ebd27", - "block_index": 278511, - "source": "16Fu8Edsvxqixg6VnaHKPWE2TEsqQMwXfV", - "burned": 99900000, - "earned": 148024554545, - "status": "valid" - }, - { - "tx_index": 14, - "tx_hash": "66994176733650e77ae0cf34349f63e6538649f40f86d2719013d915bbb7701e", - "block_index": 278517, - "source": "14FFaRsfzYQxhZQv1YsMn65MvMLfJShgM8", - "burned": 99900000, - "earned": 147970063636, - "status": "valid" + }, + "/addresses/
/credits": { + "success": true, + "result": [ + { + "block_index": 830981, + "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + "asset": "XCP", + "quantity": 104200000000, + "calling_function": "send", + "event": "7e4fbb0a1eeeee34bf499955f1027fb78c514d63a3c8ff2e28c6dad005e4d850", + "tx_index": 2677412 + } + ] + }, + "/addresses/
/debits": { + "success": true, + "result": [ + { + "block_index": 836949, + "address": "bc1q7787j6msqczs58asdtetchl3zwe8ruj57p9r9y", + "asset": "XCP", + "quantity": 40000000000, + "action": "open dispenser", + "event": "53ed08176d3479f49986e9282293da85cebc03835b128d8e790ee587f9f1c750", + "tx_index": 2721524 + }, + { + "block_index": 840388, + "address": "bc1q7787j6msqczs58asdtetchl3zwe8ruj57p9r9y", + "asset": "XCP", + "quantity": 250000000000, + "action": "send", + "event": "bc54968ba7d0a59a47b276602e2dbdcf01b14009742e0d7b50272cbae529a9a4", + "tx_index": 2726594 + } + ] + }, + "/addresses/
/bets": { + "success": true, + "result": [ + { + "tx_index": 15106, + "tx_hash": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed", + "block_index": 304063, + "source": "18ZNyaAcH4HugeofwbrpLoUNiayxJRH65c", + "feed_address": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "bet_type": 3, + "deadline": 1401828300, + "wager_quantity": 50000000, + "wager_remaining": 0, + "counterwager_quantity": 50000000, + "counterwager_remaining": 0, + "target_value": 1.0, + "leverage": 5040, + "expiration": 11, + "expire_index": 304073, + "fee_fraction_int": 1000000, + "status": "filled" + }, + { + "tx_index": 61338, + "tx_hash": "0fcc7f5190c028f6c5534554d10ec5b4a9246d63826421cd58be2d572d11f088", + "block_index": 320704, + "source": "1Ew38GxczvV1KxjzZsq9f8UuRzHkHQrL5C", + "feed_address": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "bet_type": 2, + "deadline": 1410728400, + "wager_quantity": 1000000, + "wager_remaining": 0, + "counterwager_quantity": 1999991, + "counterwager_remaining": 0, + "target_value": 1.0, + "leverage": 5040, + "expiration": 13, + "expire_index": 320715, + "fee_fraction_int": 1000000, + "status": "filled" + } + ] + }, + "/addresses/
/broadcasts": { + "success": true, + "result": [ + { + "tx_index": 15055, + "tx_hash": "774887e555a6ae5a8c058ebc0185058307977f01a2d4d326e71f37d6dd977154", + "block_index": 304048, + "source": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "timestamp": 1401815290, + "value": -1.0, + "fee_fraction_int": 1000000, + "text": "xbet.io/feed/1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "locked": 0, + "status": "valid" + }, + { + "tx_index": 61477, + "tx_hash": "5d49993bec727622c7b41c84e2b1e65c368f33390d633d217131ffcc5b592f0d", + "block_index": 320718, + "source": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "timestamp": 1410732503, + "value": 1.0, + "fee_fraction_int": 1000000, + "text": "xbet.io/feed/1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "locked": 0, + "status": "valid" + } + ] + }, + "/addresses/
/burns": { + "success": true, + "result": [ + { + "tx_index": 3070, + "tx_hash": "4560d0e3d04927108b615ab106040489aca9c4aceedcf69d2b71f63b3139c7ae", + "block_index": 283810, + "source": "1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W", + "burned": 10000000, + "earned": 10000000000, + "status": "valid" + } + ] + }, + "/addresses/
/sends": { + "success": true, + "result": [ + { + "tx_index": 163106, + "tx_hash": "1c447b41816f1cfbb83f125c8e05faeaae70dbf27255745ba7393f809bd388eb", + "block_index": 343049, + "source": "1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W", + "destination": "16cRBUNnTWiUh2sXWNn1P7KHyJUmyMkdfH", + "asset": "XCP", + "quantity": 10000000000, + "status": "valid", + "msg_index": 0, + "memo": null + } + ] + }, + "/addresses/
/receives": { + "success": true, + "result": [ + { + "tx_index": 2677412, + "tx_hash": "7e4fbb0a1eeeee34bf499955f1027fb78c514d63a3c8ff2e28c6dad005e4d850", + "block_index": 830981, + "source": "bc1qqxr9grqw73dm95cen3g56mzswuj6eqjedu6csx", + "destination": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + "asset": "XCP", + "quantity": 104200000000, + "status": "valid", + "msg_index": 0, + "memo": null + } + ] + }, + "/addresses/
/sends/": { + "success": true, + "result": [ + { + "tx_index": 163106, + "tx_hash": "1c447b41816f1cfbb83f125c8e05faeaae70dbf27255745ba7393f809bd388eb", + "block_index": 343049, + "source": "1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W", + "destination": "16cRBUNnTWiUh2sXWNn1P7KHyJUmyMkdfH", + "asset": "XCP", + "quantity": 10000000000, + "status": "valid", + "msg_index": 0, + "memo": null + } + ] + }, + "/addresses/
/receives/": { + "success": true, + "result": [ + { + "tx_index": 2677412, + "tx_hash": "7e4fbb0a1eeeee34bf499955f1027fb78c514d63a3c8ff2e28c6dad005e4d850", + "block_index": 830981, + "source": "bc1qqxr9grqw73dm95cen3g56mzswuj6eqjedu6csx", + "destination": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + "asset": "XCP", + "quantity": 104200000000, + "status": "valid", + "msg_index": 0, + "memo": null + } + ] + }, + "/addresses/
/dispensers": { + "success": true, + "result": [ + { + "tx_index": 2726460, + "tx_hash": "b592d8ca4994d182e4ec63e1659dc4282b1a84466b7d71ed68c281ce63ed4897", + "block_index": 839964, + "source": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", + "asset": "ERYKAHPEPU", + "give_quantity": 1, + "escrow_quantity": 25, + "satoshirate": 50000, + "status": 0, + "give_remaining": 25, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "dispense_count": 0 + } + ] + }, + "/addresses/
/dispensers/": { + "success": true, + "result": [ + { + "tx_index": 2726460, + "tx_hash": "b592d8ca4994d182e4ec63e1659dc4282b1a84466b7d71ed68c281ce63ed4897", + "block_index": 839964, + "source": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", + "asset": "ERYKAHPEPU", + "give_quantity": 1, + "escrow_quantity": 25, + "satoshirate": 50000, + "status": 0, + "give_remaining": 25, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "dispense_count": 0 + } + ] + }, + "/addresses/
/sweeps": { + "success": true, + "result": [ + { + "tx_index": 2720537, + "tx_hash": "d8db6281abffdbf6c320d5ade06aeb6fad2f7bfa1a2c2243c6726020a27107d3", + "block_index": 836519, + "source": "18szqTVJUWwYrtRHq98Wn4DhCGGiy3jZ87", + "destination": "1HC2q92SfH1ZHzS4CrDwp6KAipV4FqUL4T", + "flags": 3, + "status": "valid", + "memo": null, + "fee_paid": 1400000 + } + ] + }, + "/addresses/
/compose/btcpay": { + "success": true, + "result": { + "rawtransaction": "0200000000010161101e1990879ee64168cce92c9caf338bb571e9cb246b1c2ab87124b95091900200000016001482f2ccc569325050e36c13b55a4065113d985066ffffffff0383c3040000000000160014a9943f67bcd30331d5a4ec6d902cbe03789a1b9700000000000000004b6a49aae396d448ed266a7785be1f6fcfa38dbe3e6e043e3d67691f678d6aa3b30e423f66ffad71eaf3231ef8f05dd5cc2f5b1ea14d33274b9cddacca5bd816a1ce6d5b4d498eb66a981db7add758000000000016001482f2ccc569325050e36c13b55a4065113d98506602000000000000", + "params": { + "source": "bc1qsteve3tfxfg9pcmvzw645sr9zy7es5rx645p6l", + "order_match_id": "e470416a9500fb046835192da013f48e6468a07dba1bede4a0b68e666ed23c8d_4953bde3d9417b103615c2d3d4b284d4fcf7cbd820e5dd19ac0084e9ebd090b2" + }, + "name": "btcpay" } - ], - "/dispensers/": [ - { - "tx_index": 2536311, - "tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a", - "block_index": 840322, - "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", - "asset": "FLOCK", - "give_quantity": 10000000000, - "escrow_quantity": 250000000000, - "satoshirate": 330000, - "status": 0, - "give_remaining": 140000000000, - "oracle_address": null, - "last_status_tx_hash": null, - "origin": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", - "dispense_count": 2, - "asset_longname": null + }, + "/assets": { + "success": true, + "result": [ + { + "asset": "A100000000000000000", + "asset_longname": null + }, + { + "asset": "A1000000000000000000", + "asset_longname": null + }, + { + "asset": "A10000000000000000000", + "asset_longname": null + }, + { + "asset": "A10000000000000000001", + "asset_longname": null + }, + { + "asset": "A10000000000000000002", + "asset_longname": null + } + ] + }, + "/assets/": { + "success": true, + "result": { + "asset": "UNNEGOTIABLE", + "asset_longname": null, + "owner": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": false, + "locked": false, + "supply": 1, + "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "holder_count": 1 } - ], - "/dispensers//dispenses": [ - { - "tx_index": 2610745, - "dispense_index": 0, - "tx_hash": "8c95cc6afc8fd466c784fd1c02749c585988999bbc66251b944c443dc31af757", - "block_index": 821450, - "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", - "destination": "1FKYM1CP9RfttJhNG8HTNQdE2uV3YvwbRB", - "asset": "FLOCK", - "dispense_quantity": 20000000000, - "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a" - }, - { - "tx_index": 2726580, - "dispense_index": 0, - "tx_hash": "e7f0f2c9bef7a492b714a5952ec61b283be344419c5bc33f405f9af41ebfa48b", - "block_index": 840322, - "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", - "destination": "bc1qzcdkhnexpjc8wvkyrpyrsn0f5xzcpu877mjmgj", - "asset": "FLOCK", - "dispense_quantity": 90000000000, - "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a" + }, + "/assets//balances": { + "success": true, + "result": [ + { + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "UNNEGOTIABLE", + "quantity": 1 + } + ] + }, + "/assets//balances/
": { + "success": true, + "result": { + "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + "asset": "XCP", + "quantity": 104200000000 } - ], - "/events": [ - { - "event_index": 10665092, - "event": "TRANSACTION_PARSED", - "bindings": { - "supported": true, - "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", - "tx_index": 2056160 - }, - "block_index": 744232, - "timestamp": 1712256340 - }, - { - "event_index": 10665091, - "event": "ENHANCED_SEND", - "bindings": { - "asset": "THOTHPEPE", - "block_index": 744232, - "destination": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", - "memo": null, + }, + "/assets//orders": { + "success": true, + "result": [ + { + "tx_index": 825373, + "tx_hash": "0129611a0aece52adddf6d929e75c703baa9cdcb7e4ce887aa859f9640aa9640", + "block_index": 455461, + "source": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "PEPECASH", + "get_quantity": 400000000000, + "get_remaining": 0, + "expiration": 1000, + "expire_index": 456457, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 46098, + "fee_provided_remaining": 46098, + "status": "filled" + }, + { + "tx_index": 2225134, + "tx_hash": "5b6e0c741d765ebd883dc16eecfb5c340c52865cabf297ca2c1432437c1348b7", + "block_index": 772817, + "source": "1FnM7akSCD8G3fRQHCUEXRCfL35gptsPZB", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "XCP", + "get_quantity": 80800000000, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 777817, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 5544, + "fee_provided_remaining": 5544, + "status": "filled" + }, + { + "tx_index": 1946026, + "tx_hash": "75dc6ee1f67317e674ef33b617d3a9839ee53bf4a2e8274c88d6202d4d89b59a", + "block_index": 727444, + "source": "1GotRejB6XsGgMsM79TvcypeanDJRJbMtg", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "XCP", + "get_quantity": 70000000000, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 732381, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 264, + "fee_provided_remaining": 264, + "status": "filled" + }, + { + "tx_index": 2202451, + "tx_hash": "77f568fc6604dbe209d2ea1b0158d7de20723c0178107eb570f4f2a719b0d7c7", + "block_index": 772817, + "source": "184gKLQTtQU29LXbxbYJkUV4if9SmW6v2d", + "give_asset": "XCP", + "give_quantity": 80800000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 773300, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 264, + "fee_provided_remaining": 264, + "status": "filled" + }, + { + "tx_index": 825411, + "tx_hash": "7b2369f40078f4d98a3d3a7733315a1c4efd7977c75f7066dd447d5c7eed7f20", + "block_index": 455461, + "source": "18cmgoX99Nrm411YKpmTQsp23qczWdxS6w", + "give_asset": "PEPECASH", + "give_quantity": 300000000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 460461, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 40000, + "fee_provided_remaining": 40000, + "status": "filled" + }, + { + "tx_index": 825403, + "tx_hash": "7e1abf6ad57eb61227015fc7a333da034b4dd2f1c4e23cf106864b60a20feef7", + "block_index": 455460, + "source": "18cmgoX99Nrm411YKpmTQsp23qczWdxS6w", + "give_asset": "PEPECASH", + "give_quantity": 200000000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 1000, + "expire_index": 456460, + "fee_required": 20000, + "fee_required_remaining": 20000, + "fee_provided": 50766, + "fee_provided_remaining": 50766, + "status": "filled" + }, + { + "tx_index": 825370, + "tx_hash": "8e4d324407b62de773af53f8f7a556882ac82a217c216491a28072f293918fe6", + "block_index": 455457, + "source": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "PEPECASH", + "get_quantity": 100000000000, + "get_remaining": -1100000000, + "expiration": 1000, + "expire_index": 456457, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 75791, + "fee_provided_remaining": 75791, + "status": "filled" + }, + { + "tx_index": 825413, + "tx_hash": "927878fa98edb6d24310c45254c324f3d5a7f625e2a3a0e7fd1e749b49493750", + "block_index": 455461, + "source": "18cmgoX99Nrm411YKpmTQsp23qczWdxS6w", + "give_asset": "PEPECASH", + "give_quantity": 400000000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 460461, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 40000, + "fee_provided_remaining": 40000, + "status": "filled" + }, + { + "tx_index": 1946587, + "tx_hash": "b747f290cbbad6faa1c1c05d5c6d001b5a3ef487027bb0d4eefcdc9f6e865c39", + "block_index": 727444, + "source": "1AtcSh7uxenQ6AR5xqr6agAegWRUF5N4uh", + "give_asset": "XCP", + "give_quantity": 70000000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 732444, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 792, + "fee_provided_remaining": 792, + "status": "filled" + }, + { + "tx_index": 825371, + "tx_hash": "b83c96217214decb6316c3619bc88a3471d17e46eb3708406c8f878dedd61610", + "block_index": 455460, + "source": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "PEPECASH", + "get_quantity": 200000000000, + "get_remaining": 0, + "expiration": 1000, + "expire_index": 456457, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 46098, + "fee_provided_remaining": 46098, + "status": "filled" + }, + { + "tx_index": 825372, + "tx_hash": "e32154f8ade796df0b121604de140703d062d22d1e82e77e629e6096668c812f", + "block_index": 455461, + "source": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "PEPECASH", + "get_quantity": 300000000000, + "get_remaining": 0, + "expiration": 1000, + "expire_index": 456457, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 46098, + "fee_provided_remaining": 46098, + "status": "filled" + } + ] + }, + "/assets//credits": { + "success": true, + "result": [ + { + "block_index": 840464, + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "UNNEGOTIABLE", + "quantity": 1, + "calling_function": "issuance", + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605 + } + ] + }, + "/assets//debits": { + "success": true, + "result": [ + { + "block_index": 280091, + "address": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1000000000, + "action": "send", + "event": "1c20d6596f6be031c94def5ad93a52217d76371885adcc53c91c3b1eaf76ccce", + "tx_index": 729 + }, + { + "block_index": 280112, + "address": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1100000000, + "action": "send", + "event": "4dacd03d73cb497229dbfe2e7209adc4221540efe0e4c57f408b09b2fd36ece6", + "tx_index": 749 + }, + { + "block_index": 280112, + "address": "1PMacKVWDszkBRbb2iWWvX63BwhKUTsSBd", + "asset": "XCP", + "quantity": 100000000, + "action": "send", + "event": "057d10cc33455f4f7af44d2f030b3866e3a16416ecf984e304c76abe98393c1d", + "tx_index": 752 + }, + { + "block_index": 280114, + "address": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1100000000, + "action": "send", + "event": "3ac6ea5b329832e2dc31ead6c5277beccb7d95f0d9f20f256f97067223c81e00", + "tx_index": 755 + }, + { + "block_index": 280156, + "address": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1100000000, + "action": "send", + "event": "66fc1409ac6646bd8c267de89c57d2204e31bb6dfce9ee2a3ab18416fadf9e9c", + "tx_index": 766 + } + ] + }, + "/assets//dividends": { + "success": true, + "result": [ + { + "tx_index": 1914456, + "tx_hash": "30760e413947ebdc80ed7a5ada1bd4466800b87e9976bbe811ad4e2b46546359", + "block_index": 724381, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "ENDTHEFED", + "quantity_per_unit": 1, + "fee_paid": 2520000, + "status": "valid" + }, + { + "tx_index": 1915246, + "tx_hash": "827794cbab3299f80a5b8b8cb8ec29ec3aee1373f7da2c05a156bed902bf4684", + "block_index": 724479, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "TRUMPDANCING", + "quantity_per_unit": 100, + "fee_paid": 2520000, + "status": "valid" + }, + { + "tx_index": 1920208, + "tx_hash": "7014f1e259531ba9632ca5000c35df5bd47f237318e48955900453ce9c07e917", + "block_index": 724931, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "CTRWOJACK", + "quantity_per_unit": 1111, + "fee_paid": 2700000, + "status": "valid" + }, + { + "tx_index": 1927909, + "tx_hash": "5556fd2b0802cf3bc0abd5001ecbac3adbc5b7c5c46a145a78daeef358c308de", + "block_index": 725654, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "WHITERUSSIAN", + "quantity_per_unit": 1, + "fee_paid": 3220000, + "status": "valid" + }, + { + "tx_index": 1983693, + "tx_hash": "cda646285cc63f758d19b5403070f23e2a6e4b34eb3b86b63a0f56f971345657", + "block_index": 730568, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "A4520591452211866149", + "quantity_per_unit": 1, + "fee_paid": 4040000, + "status": "valid" + }, + { + "tx_index": 1983842, + "tx_hash": "e4b73dc974cc279b873b78e5dc4a347c08788b02143ae27aa0582f900289be10", + "block_index": 730588, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "NCSWIC", + "quantity_per_unit": 1, + "fee_paid": 4040000, + "status": "valid" + }, + { + "tx_index": 1996395, + "tx_hash": "b342feb1421df107010ad3c8ee2043ded802bdf6cd619862459da3d0f87d6a99", + "block_index": 731994, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "FUCKTHEFED", + "quantity_per_unit": 1, + "fee_paid": 4380000, + "status": "valid" + }, + { + "tx_index": 2035947, + "tx_hash": "02d715fd9e8b7bbc782b1b2d92a1b9ffae9326bfc88ba76c453c515ad7c8c2bc", + "block_index": 738763, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "HOLDTHELINE", + "quantity_per_unit": 1, + "fee_paid": 4940000, + "status": "valid" + }, + { + "tx_index": 2174481, + "tx_hash": "b935a06fc34d8fa4f0c526984085b1b12c78e899415e595b625f1bee84ce3709", + "block_index": 762733, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "EOXIXIZERO", + "quantity_per_unit": 1, + "fee_paid": 6500000, + "status": "valid" + }, + { + "tx_index": 2198534, + "tx_hash": "a063e9a745b9f6bc3201f72abff196de20ec106bcc71d820673d516ddbb3aa90", + "block_index": 767569, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "TRUMPCARDS", + "quantity_per_unit": 1, + "fee_paid": 6660000, + "status": "valid" + }, + { + "tx_index": 2704948, + "tx_hash": "437102ca4698f63a12e369f6168e3c7f5f8eef3e225395d515775673e33d39c1", + "block_index": 832745, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "FUCKYOUWAR", + "quantity_per_unit": 1, + "fee_paid": 6840000, + "status": "valid" + }, + { + "tx_index": 2704949, + "tx_hash": "7d3807cc58fa2d9751b2b0089bfa8fa86ef795821be6d8e9418ab3a819eba299", + "block_index": 832745, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "MEDICINEPEPE", + "quantity_per_unit": 1, + "fee_paid": 6840000, + "status": "valid" + } + ] + }, + "/assets//issuances": { + "success": true, + "result": [ + { + "tx_index": 2726605, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "msg_index": 0, + "block_index": 840464, + "asset": "UNNEGOTIABLE", "quantity": 1, - "source": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", + "divisible": 0, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "transfer": 0, + "callable": 0, + "call_date": 0, + "call_price": 0.0, + "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "fee_paid": 50000000, + "locked": 0, "status": "valid", - "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", - "tx_index": 2056160 - }, - "block_index": 744232, - "timestamp": 1712256340 - }, - { - "event_index": 10665090, - "event": "CREDIT", - "bindings": { - "address": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", - "asset": "THOTHPEPE", + "asset_longname": null, + "reset": 0 + } + ] + }, + "/assets//sends": { + "success": true, + "result": [ + { + "tx_index": 729, + "tx_hash": "1c20d6596f6be031c94def5ad93a52217d76371885adcc53c91c3b1eaf76ccce", + "block_index": 280091, + "source": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "destination": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1000000000, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 749, + "tx_hash": "4dacd03d73cb497229dbfe2e7209adc4221540efe0e4c57f408b09b2fd36ece6", + "block_index": 280112, + "source": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "destination": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1100000000, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 752, + "tx_hash": "057d10cc33455f4f7af44d2f030b3866e3a16416ecf984e304c76abe98393c1d", + "block_index": 280112, + "source": "1PMacKVWDszkBRbb2iWWvX63BwhKUTsSBd", + "destination": "1PMacKVWDszkBRbb2iWWvX63BwhKUTsSBd", + "asset": "XCP", + "quantity": 100000000, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 755, + "tx_hash": "3ac6ea5b329832e2dc31ead6c5277beccb7d95f0d9f20f256f97067223c81e00", + "block_index": 280114, + "source": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "destination": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1100000000, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 766, + "tx_hash": "66fc1409ac6646bd8c267de89c57d2204e31bb6dfce9ee2a3ab18416fadf9e9c", + "block_index": 280156, + "source": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "destination": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1100000000, + "status": "valid", + "msg_index": 0, + "memo": null + } + ] + }, + "/assets//dispensers": { + "success": true, + "result": [ + { + "tx_index": 2726460, + "tx_hash": "b592d8ca4994d182e4ec63e1659dc4282b1a84466b7d71ed68c281ce63ed4897", + "block_index": 839964, + "source": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", + "asset": "ERYKAHPEPU", + "give_quantity": 1, + "escrow_quantity": 25, + "satoshirate": 50000, + "status": 0, + "give_remaining": 25, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "dispense_count": 0 + } + ] + }, + "/assets//dispensers/
": { + "success": true, + "result": [ + { + "tx_index": 2726460, + "tx_hash": "b592d8ca4994d182e4ec63e1659dc4282b1a84466b7d71ed68c281ce63ed4897", + "block_index": 839964, + "source": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", + "asset": "ERYKAHPEPU", + "give_quantity": 1, + "escrow_quantity": 25, + "satoshirate": 50000, + "status": 0, + "give_remaining": 25, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "dispense_count": 0 + } + ] + }, + "/assets//holders": { + "success": true, + "result": [ + { + "address": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "address_quantity": 63, + "escrow": null + }, + { + "address": "16yRstRXStVJJ1TN2S4DCWifyrCsetpma7", + "address_quantity": 1, + "escrow": null + }, + { + "address": "bc1qsvqsa9arwz30g2z0w09twzn8gz3380h36yxacs", + "address_quantity": 2, + "escrow": null + }, + { + "address": "17PnWBjHkekZKQPVagmTR5HiD51pN8WHC8", + "address_quantity": 1, + "escrow": null + }, + { + "address": "1FRxFpP9XoRsvZFVqGtt4fjjgKe1h5tbAh", + "address_quantity": 1, + "escrow": null + }, + { + "address": "1AdHg2q3M2rMFRgZyZ7RQyNHdwjSib7wSZ", + "address_quantity": 2, + "escrow": null + }, + { + "address": "1CTnziWXidHzY3qT8gwLa1ZxZK37A7HreR", + "address_quantity": 1, + "escrow": null + }, + { + "address": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", + "address_quantity": 25, + "escrow": null + } + ] + }, + "/orders/": { + "success": true, + "result": [ + { + "tx_index": 2724132, + "tx_hash": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776", + "block_index": 840381, + "source": "15L7U55PAsHLEpQkZqz62e3eqWd9AHb2DH", + "give_asset": "PEPECASH", + "give_quantity": 6966600000000, + "give_remaining": 900000000000, + "get_asset": "XCP", + "get_quantity": 11076894000, + "get_remaining": 1431000000, + "expiration": 5000, + "expire_index": 843055, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 4488, + "fee_provided_remaining": 4488, + "status": "open" + } + ] + }, + "/orders//matches": { + "success": true, + "result": [ + { + "id": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776_5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947", + "tx0_index": 2724132, + "tx0_hash": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776", + "tx0_address": "15L7U55PAsHLEpQkZqz62e3eqWd9AHb2DH", + "tx1_index": 2726591, + "tx1_hash": "5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947", + "tx1_address": "15e15ua6A3FJqjMevtrWcFSzKn9k6bMQeA", + "forward_asset": "PEPECASH", + "forward_quantity": 6066600000000, + "backward_asset": "XCP", + "backward_quantity": 9645894000, + "tx0_block_index": 838055, + "tx1_block_index": 840381, + "block_index": 840381, + "tx0_expiration": 5000, + "tx1_expiration": 8064, + "match_expire_index": 840401, + "fee_paid": 0, + "status": "completed" + } + ] + }, + "/orders//btcpays": { + "success": true, + "result": [ + { + "tx_index": 2719343, + "tx_hash": "6cfa7f31b43a46e5ad74a9db810bd6cac56235a8ebc73ec63d01b38ea7ea2414", + "block_index": 836188, + "source": "1NfJnJdAdmm2rJCFW54NsAKqqTTMexCNJ3", + "destination": "1BepkwAhEmEuEGF349XjmEUrRvoy9a7Biv", + "btc_amount": 4500000, + "order_match_id": "0a1387df82a8a7e9cec01c52c8fee01f6995c4e39dc5804e1d2bf40d9368f5c5_299b5b648f54eacb839f3487232d49aea373cdd681b706d4cc0b5e0b03688db4", + "status": "valid" + } + ] + }, + "/bets/": { + "success": true, + "result": [ + { + "tx_index": 15106, + "tx_hash": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed", + "block_index": 304063, + "source": "18ZNyaAcH4HugeofwbrpLoUNiayxJRH65c", + "feed_address": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "bet_type": 3, + "deadline": 1401828300, + "wager_quantity": 50000000, + "wager_remaining": 0, + "counterwager_quantity": 50000000, + "counterwager_remaining": 0, + "target_value": 1.0, + "leverage": 5040, + "expiration": 11, + "expire_index": 304073, + "fee_fraction_int": 1000000, + "status": "filled" + } + ] + }, + "/bets//matches": { + "success": true, + "result": [ + { + "id": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed_cb5f888c299a50967d523513daed71636d927e6ef3dbda85feb11ff112ae4330", + "tx0_index": 15106, + "tx0_hash": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed", + "tx0_address": "18ZNyaAcH4HugeofwbrpLoUNiayxJRH65c", + "tx1_index": 15108, + "tx1_hash": "cb5f888c299a50967d523513daed71636d927e6ef3dbda85feb11ff112ae4330", + "tx1_address": "1PTqJmRCMGs4qBEh2APAFSrBv95Uf1hfiD", + "tx0_bet_type": 3, + "tx1_bet_type": 2, + "feed_address": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "initial_value": -1, + "deadline": 1401828300, + "target_value": 1.0, + "leverage": 5040, + "forward_quantity": 50000000, + "backward_quantity": 50000000, + "tx0_block_index": 304062, + "tx1_block_index": 304063, + "block_index": 306379, + "tx0_expiration": 11, + "tx1_expiration": 1459, + "match_expire_index": 304073, + "fee_fraction_int": 1000000, + "status": "expired" + } + ] + }, + "/bets//resolutions": { + "success": true, + "result": [ + { + "bet_match_id": "36bbbb7dbd85054dac140a8ad8204eda2ee859545528bd2a9da69ad77c277ace_d70ee4e44f02fe6258ee0c267f33f304a0fc61d4ce424852f58c28967dc1924f", + "bet_match_type_id": 5, + "block_index": 401128, + "winner": "Equal", + "settled": null, + "bull_credit": null, + "bear_credit": null, + "escrow_less_fee": 2000000, + "fee": 0 + } + ] + }, + "/burns": { + "success": true, + "result": [ + { + "tx_index": 10, + "tx_hash": "41bbe1ec81da008a0e92758efb6084af3a6b6acf483983456ec797ee59c0e0f1", + "block_index": 278511, + "source": "12crRpZpn93PKTQ4WYxHMw4xi6ckh1CFR3", + "burned": 99900000, + "earned": 148024554545, + "status": "valid" + }, + { + "tx_index": 11, + "tx_hash": "c403a92281b568c7d428d942354d026594dc54ae35c21f53ecf5c918208c45de", + "block_index": 278511, + "source": "13UXh9dBEhA48gJiegJNodqe91PK88f4pW", + "burned": 99900000, + "earned": 148024554545, + "status": "valid" + }, + { + "tx_index": 12, + "tx_hash": "749ba1c2bd314f7b98e9cfb44575495b4ad2cf624901c65488fbc4f57a3dc0ac", + "block_index": 278511, + "source": "19Ht3rkW7JB9VuC7rsZEGZju96ujzchaZZ", + "burned": 99900000, + "earned": 148024554545, + "status": "valid" + }, + { + "tx_index": 13, + "tx_hash": "da330160b71138f9bda5e126df0d5d6248c0879d88e16255c74135274d8ebd27", + "block_index": 278511, + "source": "16Fu8Edsvxqixg6VnaHKPWE2TEsqQMwXfV", + "burned": 99900000, + "earned": 148024554545, + "status": "valid" + }, + { + "tx_index": 14, + "tx_hash": "66994176733650e77ae0cf34349f63e6538649f40f86d2719013d915bbb7701e", + "block_index": 278517, + "source": "14FFaRsfzYQxhZQv1YsMn65MvMLfJShgM8", + "burned": 99900000, + "earned": 147970063636, + "status": "valid" + } + ] + }, + "/dispensers/": { + "success": true, + "result": [ + { + "tx_index": 2536311, + "tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a", + "block_index": 840322, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "asset": "FLOCK", + "give_quantity": 10000000000, + "escrow_quantity": 250000000000, + "satoshirate": 330000, + "status": 0, + "give_remaining": 140000000000, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "dispense_count": 2, + "asset_longname": null + } + ] + }, + "/dispensers//dispenses": { + "success": true, + "result": [ + { + "tx_index": 2610745, + "dispense_index": 0, + "tx_hash": "8c95cc6afc8fd466c784fd1c02749c585988999bbc66251b944c443dc31af757", + "block_index": 821450, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "destination": "1FKYM1CP9RfttJhNG8HTNQdE2uV3YvwbRB", + "asset": "FLOCK", + "dispense_quantity": 20000000000, + "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a" + }, + { + "tx_index": 2726580, + "dispense_index": 0, + "tx_hash": "e7f0f2c9bef7a492b714a5952ec61b283be344419c5bc33f405f9af41ebfa48b", + "block_index": 840322, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "destination": "bc1qzcdkhnexpjc8wvkyrpyrsn0f5xzcpu877mjmgj", + "asset": "FLOCK", + "dispense_quantity": 90000000000, + "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a" + } + ] + }, + "/events": { + "success": true, + "result": [ + { + "event_index": 10665092, + "event": "TRANSACTION_PARSED", + "bindings": { + "supported": true, + "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", + "tx_index": 2056160 + }, "block_index": 744232, - "calling_function": "send", - "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", - "quantity": 1, - "tx_index": 2056160 - }, - "block_index": 744232, - "timestamp": 1712256340 - }, - { - "event_index": 10665089, - "event": "DEBIT", - "bindings": { - "action": "send", - "address": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", - "asset": "THOTHPEPE", + "timestamp": 1712256340 + }, + { + "event_index": 10665091, + "event": "ENHANCED_SEND", + "bindings": { + "asset": "THOTHPEPE", + "block_index": 744232, + "destination": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", + "memo": null, + "quantity": 1, + "source": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", + "status": "valid", + "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", + "tx_index": 2056160 + }, "block_index": 744232, - "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", - "quantity": 1, - "tx_index": 2056160 - }, - "block_index": 744232, - "timestamp": 1712256340 - }, - { - "event_index": 10665088, - "event": "TRANSACTION_PARSED", - "bindings": { - "supported": true, - "tx_hash": "bbb2dfa7e7a32288a702ef0091ece8b2a929f94fd967a18e6071cd9c2b085eaf", - "tx_index": 2056159 - }, - "block_index": 744232, - "timestamp": 1712256340 - } - ], - "/events/": [ - { - "event_index": 10665092, - "event": "TRANSACTION_PARSED", - "bindings": { - "supported": true, - "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", - "tx_index": 2056160 - }, - "block_index": 744232, - "timestamp": 1712256340 - } - ], - "/events/counts": [ - { - "event": "ASSET_CREATION", - "event_count": 235858 - }, - { - "event": "ASSET_DESTRUCTION", - "event_count": 11141 - }, - { - "event": "ASSET_DIVIDEND", - "event_count": 4092 - }, - { - "event": "ASSET_ISSUANCE", - "event_count": 322676 - }, - { - "event": "ASSET_TRANSFER", - "event_count": 10630 - }, - { - "event": "BET_EXPIRATION", - "event_count": 588 - }, - { - "event": "BET_MATCH", - "event_count": 397 - }, - { - "event": "BET_MATCH_EXPIRATION", - "event_count": 9 - }, - { - "event": "BET_MATCH_RESOLUTON", - "event_count": 387 - }, - { - "event": "BET_MATCH_UPDATE", - "event_count": 397 - }, - { - "event": "BET_UPDATE", - "event_count": 1474 - }, - { - "event": "BLOCK_PARSED", - "event_count": 562278 - }, - { - "event": "BROADCAST", - "event_count": 106518 - }, - { - "event": "BTC_PAY", - "event_count": 2921 - }, - { - "event": "BURN", - "event_count": 2576 - }, - { - "event": "CANCEL_BET", - "event_count": 101 - }, - { - "event": "CANCEL_ORDER", - "event_count": 80168 - }, - { - "event": "CREDIT", - "event_count": 3657192 - }, - { - "event": "DEBIT", - "event_count": 2615306 - }, - { - "event": "DISPENSE", - "event_count": 190873 - }, - { - "event": "DISPENSER_UPDATE", - "event_count": 228954 - }, - { - "event": "ENHANCED_SEND", - "event_count": 538418 - }, - { - "event": "MPMA_SEND", - "event_count": 279142 - }, - { - "event": "NEW_BLOCK", - "event_count": 1906 - }, - { - "event": "NEW_TRANSACTION", - "event_count": 4485 - }, - { - "event": "NEW_TRANSACTION_OUTPUT", - "event_count": 596 - }, - { - "event": "OPEN_BET", - "event_count": 1149 - }, - { - "event": "OPEN_DISPENSER", - "event_count": 88228 - }, - { - "event": "OPEN_ORDER", - "event_count": 530117 - }, - { - "event": "OPEN_RPS", - "event_count": 266 - }, - { - "event": "ORDER_EXPIRATION", - "event_count": 195962 - }, - { - "event": "ORDER_FILLED", - "event_count": 805 - }, - { - "event": "ORDER_MATCH", - "event_count": 209415 - }, - { - "event": "ORDER_MATCH_EXPIRATION", - "event_count": 20860 - }, - { - "event": "ORDER_MATCH_UPDATE", - "event_count": 23689 - }, - { - "event": "ORDER_UPDATE", - "event_count": 732640 - }, - { - "event": "REFILL_DISPENSER", - "event_count": 187 - }, - { - "event": "RESET_ISSUANCE", - "event_count": 454 - }, - { - "event": "RPS_EXPIRATION", - "event_count": 59 - }, - { - "event": "RPS_MATCH", - "event_count": 171 - }, - { - "event": "RPS_MATCH_EXPIRATION", - "event_count": 145 - }, - { - "event": "RPS_MATCH_UPDATE", - "event_count": 271 - }, - { - "event": "RPS_RESOLVE", - "event_count": 129 - }, - { - "event": "RPS_UPDATE", - "event_count": 540 - }, - { - "event": "SEND", - "event_count": 805983 - }, - { - "event": "SWEEP", - "event_count": 1018 - }, - { - "event": "TRANSACTION_PARSED", - "event_count": 2723789 - } - ], - "/events/": [ - { - "event_index": 10665090, - "event": "CREDIT", - "bindings": { - "address": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", - "asset": "THOTHPEPE", + "timestamp": 1712256340 + }, + { + "event_index": 10665090, + "event": "CREDIT", + "bindings": { + "address": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", + "asset": "THOTHPEPE", + "block_index": 744232, + "calling_function": "send", + "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", + "quantity": 1, + "tx_index": 2056160 + }, "block_index": 744232, - "calling_function": "send", - "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", - "quantity": 1, - "tx_index": 2056160 - }, - "block_index": 744232, - "timestamp": 1712256340 - }, - { - "event_index": 10665085, - "event": "CREDIT", - "bindings": { - "address": "1LfDk3Ex9KPYS6L1WGwNdt1TvEg6Le8uq", - "asset": "XCP", + "timestamp": 1712256340 + }, + { + "event_index": 10665089, + "event": "DEBIT", + "bindings": { + "action": "send", + "address": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", + "asset": "THOTHPEPE", + "block_index": 744232, + "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", + "quantity": 1, + "tx_index": 2056160 + }, "block_index": 744232, - "calling_function": "dispense", - "event": "bbb2dfa7e7a32288a702ef0091ece8b2a929f94fd967a18e6071cd9c2b085eaf", - "quantity": 10000000000, - "tx_index": 2056159 - }, - "block_index": 744232, - "timestamp": 1712256340 - }, - { - "event_index": 10665082, - "event": "CREDIT", - "bindings": { - "address": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", - "asset": "FREEDOMKEK", + "timestamp": 1712256340 + }, + { + "event_index": 10665088, + "event": "TRANSACTION_PARSED", + "bindings": { + "supported": true, + "tx_hash": "bbb2dfa7e7a32288a702ef0091ece8b2a929f94fd967a18e6071cd9c2b085eaf", + "tx_index": 2056159 + }, "block_index": 744232, - "calling_function": "send", - "event": "b419d19729c2be813405c548431f4840d5c909b875f94b7c56aeca134e328ef6", - "quantity": 1, - "tx_index": 2056158 - }, - "block_index": 744232, - "timestamp": 1712256340 - }, - { - "event_index": 10665078, - "event": "CREDIT", - "bindings": { - "address": "1P8nYZwLmecAkQUHsx2H9Nkxd51UJ2Asau", - "asset": "PEPEFRIDAY", + "timestamp": 1712256340 + } + ] + }, + "/events/": { + "success": true, + "result": [ + { + "event_index": 10665092, + "event": "TRANSACTION_PARSED", + "bindings": { + "supported": true, + "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", + "tx_index": 2056160 + }, "block_index": 744232, - "calling_function": "send", - "event": "145ebf6c563c4e91a2bc488954ef701dad730fc065697979c80d6d85cbba63e1", - "quantity": 1, - "tx_index": 2056157 - }, - "block_index": 744232, - "timestamp": 1712256340 - }, - { - "event_index": 10665074, - "event": "CREDIT", - "bindings": { - "address": "1NzDQ7HLm6PqJ2Wy6jEKMT7Zw1UbtjUV5a", - "asset": "PEPEFRIDAY", + "timestamp": 1712256340 + } + ] + }, + "/events/counts": { + "success": true, + "result": [ + { + "event": "ASSET_CREATION", + "event_count": 235860 + }, + { + "event": "ASSET_DESTRUCTION", + "event_count": 11141 + }, + { + "event": "ASSET_DIVIDEND", + "event_count": 4092 + }, + { + "event": "ASSET_ISSUANCE", + "event_count": 322678 + }, + { + "event": "ASSET_TRANSFER", + "event_count": 10639 + }, + { + "event": "BET_EXPIRATION", + "event_count": 588 + }, + { + "event": "BET_MATCH", + "event_count": 397 + }, + { + "event": "BET_MATCH_EXPIRATION", + "event_count": 9 + }, + { + "event": "BET_MATCH_RESOLUTON", + "event_count": 387 + }, + { + "event": "BET_MATCH_UPDATE", + "event_count": 397 + }, + { + "event": "BET_UPDATE", + "event_count": 1474 + }, + { + "event": "BLOCK_PARSED", + "event_count": 562364 + }, + { + "event": "BROADCAST", + "event_count": 106518 + }, + { + "event": "BTC_PAY", + "event_count": 2921 + }, + { + "event": "BURN", + "event_count": 2576 + }, + { + "event": "CANCEL_BET", + "event_count": 101 + }, + { + "event": "CANCEL_ORDER", + "event_count": 80168 + }, + { + "event": "CREDIT", + "event_count": 3659293 + }, + { + "event": "DEBIT", + "event_count": 2617404 + }, + { + "event": "DISPENSE", + "event_count": 190873 + }, + { + "event": "DISPENSER_UPDATE", + "event_count": 228954 + }, + { + "event": "ENHANCED_SEND", + "event_count": 538426 + }, + { + "event": "MPMA_SEND", + "event_count": 279142 + }, + { + "event": "NEW_BLOCK", + "event_count": 1992 + }, + { + "event": "NEW_TRANSACTION", + "event_count": 4498 + }, + { + "event": "NEW_TRANSACTION_OUTPUT", + "event_count": 596 + }, + { + "event": "OPEN_BET", + "event_count": 1149 + }, + { + "event": "OPEN_DISPENSER", + "event_count": 88229 + }, + { + "event": "OPEN_ORDER", + "event_count": 530117 + }, + { + "event": "OPEN_RPS", + "event_count": 266 + }, + { + "event": "ORDER_EXPIRATION", + "event_count": 195968 + }, + { + "event": "ORDER_FILLED", + "event_count": 805 + }, + { + "event": "ORDER_MATCH", + "event_count": 209415 + }, + { + "event": "ORDER_MATCH_EXPIRATION", + "event_count": 20860 + }, + { + "event": "ORDER_MATCH_UPDATE", + "event_count": 23689 + }, + { + "event": "ORDER_UPDATE", + "event_count": 732646 + }, + { + "event": "REFILL_DISPENSER", + "event_count": 187 + }, + { + "event": "RESET_ISSUANCE", + "event_count": 454 + }, + { + "event": "RPS_EXPIRATION", + "event_count": 59 + }, + { + "event": "RPS_MATCH", + "event_count": 171 + }, + { + "event": "RPS_MATCH_EXPIRATION", + "event_count": 145 + }, + { + "event": "RPS_MATCH_UPDATE", + "event_count": 271 + }, + { + "event": "RPS_RESOLVE", + "event_count": 129 + }, + { + "event": "RPS_UPDATE", + "event_count": 540 + }, + { + "event": "SEND", + "event_count": 805983 + }, + { + "event": "SWEEP", + "event_count": 1020 + }, + { + "event": "TRANSACTION_PARSED", + "event_count": 2723802 + } + ] + }, + "/events/": { + "success": true, + "result": [ + { + "event_index": 10665090, + "event": "CREDIT", + "bindings": { + "address": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", + "asset": "THOTHPEPE", + "block_index": 744232, + "calling_function": "send", + "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", + "quantity": 1, + "tx_index": 2056160 + }, "block_index": 744232, - "calling_function": "send", - "event": "388c7208d52bf617c1a3eef238a668f694a4f72dc97b3be92562fe636ca646fa", - "quantity": 2, - "tx_index": 2056156 + "timestamp": 1712256340 + }, + { + "event_index": 10665085, + "event": "CREDIT", + "bindings": { + "address": "1LfDk3Ex9KPYS6L1WGwNdt1TvEg6Le8uq", + "asset": "XCP", + "block_index": 744232, + "calling_function": "dispense", + "event": "bbb2dfa7e7a32288a702ef0091ece8b2a929f94fd967a18e6071cd9c2b085eaf", + "quantity": 10000000000, + "tx_index": 2056159 + }, + "block_index": 744232, + "timestamp": 1712256340 }, - "block_index": 744232, - "timestamp": 1712256340 + { + "event_index": 10665082, + "event": "CREDIT", + "bindings": { + "address": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", + "asset": "FREEDOMKEK", + "block_index": 744232, + "calling_function": "send", + "event": "b419d19729c2be813405c548431f4840d5c909b875f94b7c56aeca134e328ef6", + "quantity": 1, + "tx_index": 2056158 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665078, + "event": "CREDIT", + "bindings": { + "address": "1P8nYZwLmecAkQUHsx2H9Nkxd51UJ2Asau", + "asset": "PEPEFRIDAY", + "block_index": 744232, + "calling_function": "send", + "event": "145ebf6c563c4e91a2bc488954ef701dad730fc065697979c80d6d85cbba63e1", + "quantity": 1, + "tx_index": 2056157 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665074, + "event": "CREDIT", + "bindings": { + "address": "1NzDQ7HLm6PqJ2Wy6jEKMT7Zw1UbtjUV5a", + "asset": "PEPEFRIDAY", + "block_index": 744232, + "calling_function": "send", + "event": "388c7208d52bf617c1a3eef238a668f694a4f72dc97b3be92562fe636ca646fa", + "quantity": 2, + "tx_index": 2056156 + }, + "block_index": 744232, + "timestamp": 1712256340 + } + ] + }, + "/addresses/
/compose/broadcast": { + "success": true, + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0200000000000000002b6a290d1e454cefefcbe17b1100cb21d3398ec45d2594e5d1d822df41d03a332741261ce2f9aee7827cd91c340c0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "timestamp": 4003903983, + "value": 100.0, + "fee_fraction": 0.05, + "text": "\"Hello, world!\"" + }, + "name": "broadcast" } - ], + }, "/healthz": { "data": "Healthy", "success": true }, - "/mempool/events": [], - "/mempool/events/": [], - "/blocks/": { - "block_index": 840464, - "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", - "block_time": 1713852783, - "previous_block_hash": "00000000000000000002db1e5aa19784eec3de949f98ec757e7a7f2fc392079d", - "difficulty": 86388558925171.02, - "ledger_hash": "b3f8cbb50b0705a5c4a8495f8b5128de13a32daebd8ac5e8316a010f0d203584", - "txlist_hash": "84bdc5b9073f775a2b65de7da2b10b89a2235f3501883b0a836e41e68cd00d46", - "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540" + "/addresses/
/compose/bet": { + "success": true, + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0322020000000000001976a914bce6191bf2fd5981313cae869e9fafe164f7dbaf88ac0000000000000000316a2f0d1e454cefefcbe14dffa4c01ecd608ec45d2594e5d27c699f4ef2725648c509bf828ec195ee18f83e052061236deff2db0306000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "feed_address": "1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev", + "bet_type": 2, + "deadline": 3000000000, + "wager_quantity": 1000, + "counterwager_quantity": 1000, + "target_value": 1000, + "leverage": 5040, + "expiration": 100 + }, + "name": "bet" + } }, - "/addresses/
/compose/broadcast": { - "rawtransaction": "01000000019a753a6b8be54cdee2acd408f6199e29092c8c32e13912865a68da8a0d9ae065010000001976a914bce6191bf2fd5981313cae869e9fafe164f7dbaf88acffffffff0200000000000000002b6a2988dab644080b5ae67a54ba74394f5f94b41e385fc911aa5c810c5f98e6f6b17518ca736e94353de8e82a282b00000000001976a914bce6191bf2fd5981313cae869e9fafe164f7dbaf88ac00000000", - "params": { - "source": "1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev", - "timestamp": 4003903983, - "value": 100.0, - "fee_fraction": 0.05, - "text": "\"Hello, world!\"" - }, - "name": "broadcast" + "/addresses/
/compose/burn": { + "success": true, + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff02e8030000000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ace61b0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "quantity": 1000, + "overburn": false + }, + "name": "burn" + } }, - "/addresses/
/compose/btcpay": { - "rawtransaction": "0200000000010161101e1990879ee64168cce92c9caf338bb571e9cb246b1c2ab87124b95091900200000016001482f2ccc569325050e36c13b55a4065113d985066ffffffff0383c3040000000000160014a9943f67bcd30331d5a4ec6d902cbe03789a1b9700000000000000004b6a49aae396d448ed266a7785be1f6fcfa38dbe3e6e043e3d67691f678d6aa3b30e423f66ffad71eaf3231ef8f05dd5cc2f5b1ea14d33274b9cddacca5bd816a1ce6d5b4d498eb66a981db70bc758000000000016001482f2ccc569325050e36c13b55a4065113d98506602000000000000", - "params": { - "source": "bc1qsteve3tfxfg9pcmvzw645sr9zy7es5rx645p6l", - "order_match_id": "e470416a9500fb046835192da013f48e6468a07dba1bede4a0b68e666ed23c8d_4953bde3d9417b103615c2d3d4b284d4fcf7cbd820e5dd19ac0084e9ebd090b2" - }, - "name": "btcpay" + "/mempool/events": { + "success": true, + "result": [] + }, + "/mempool/events/": { + "success": true, + "result": [] + }, + "/addresses/
/compose/cancel": { + "success": true, + "result": { + "rawtransaction": "01000000014709bd6af5d4d7f518f80539d4fe9acd5220a520a7b4287416a7379af9e66154020000001976a91432dff6deb7ca3bbc14f7037fa6ef8a8cf8e39fb988acffffffff0200000000000000002b6a292f3720d2b8ae7343c6d0456802c531e1216f466ceb12b96c6fbe417a97291a0660e51fc47fcc1ee1a878667900000000001976a91432dff6deb7ca3bbc14f7037fa6ef8a8cf8e39fb988ac00000000", + "params": { + "source": "15e15ua6A3FJqjMevtrWcFSzKn9k6bMQeA", + "offer_hash": "8ce3335391bf71f8f12c0573b4f85b9adc4882a9955d9f8e5ababfdd0060279a" + }, + "name": "cancel" + } + }, + "/addresses/
/compose/destroy": { + "success": true, + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000226a200d1e454cefefcbe10bffa672ce93608ec55d2594e5d1946a776c900731380c6b94160406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "asset": "XCP", + "quantity": 1000, + "tag": "\"bugs!\"" + }, + "name": "destroy" + } + }, + "/addresses/
/compose/dispenser": { + "success": true, + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0200000000000000002c6a2a0d1e454cefefcbe169ffa672ce93608ec55d2594e5d1946a774ef272564b2d4ad8c28ec195ee18f85a160c0b0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "asset": "XCP", + "give_quantity": 1000, + "escrow_quantity": 1000, + "mainchainrate": 100, + "status": 0, + "open_address": null, + "oracle_address": null + }, + "name": "dispenser" + } + }, + "/addresses/
/compose/dividend": { + "success": true, + "result": { + "rawtransaction": "01000000010af94458ae5aa794c49cd27f7b800a7c68c8dd4f59ff66c99db4e9e353c06d93010000001976a914a9055398b92818794b38b15794096f752167e25f88acffffffff020000000000000000236a21068a00268d252c3a8ed0bddb5ef79f823894aa7de1e196c005510f4d787c936a979b230000000000001976a914a9055398b92818794b38b15794096f752167e25f88ac00000000", + "params": { + "source": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", + "quantity_per_unit": 1, + "asset": "PEPECASH", + "dividend_asset": "XCP" + }, + "name": "dividend" + } + }, + "/addresses/
/compose/issuance": { + "success": true, + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0322020000000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac0000000000000000236a210d1e454cefefcbe173ffa672cf3a36751b5d2594e5d1946a774ff272960578057c17ec0306000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "asset": "XCPTEST", + "quantity": 1000, + "transfer_destination": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "divisible": true, + "lock": false, + "reset": false, + "description": null + }, + "name": "issuance" + } + }, + "/addresses/
/compose/mpma": { + "success": true, + "result": { + "rawtransaction": "0100000001fc9b7b3a0552bdfc3c62096e9d7669fb72d5482c7b4f9618138fdffdc831d60b000000001976a914a39dbfab6f1da182af53a4d14799ee545a6176be88acffffffff04e80300000000000069512103ce014780415d0eafbdadfacfa0cf2604a005a87157042f277627c952eedcbb1f2103abf2b72459ee70e6240a7b2ade1a6fa41c7f38cc1db5e63c6f92c01b859017ee2102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53aee80300000000000069512102ce014780415d0eafbd2fcbf00e308d420b59df89ebba83369fea96a9a06fcf562102373ec5e1389ccadf0a972ec451f8aea015104ded7a57b936d374d0ecfe8067412102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53aee80300000000000069512103d0014780415d0eafbd76dacca0b613dda4b8f37e3015031f11220ac5cf43ef4e21034051b78cdcbde85f0c120261e6ab383015104ded7a57b93cd374d900776d4e132102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53ae22fd0200000000001976a914a39dbfab6f1da182af53a4d14799ee545a6176be88ac00000000", + "params": { + "source": "1Fv87qmdtjQDP9d4p9E5ncBQvYB4a3Rhy6", + "asset_dest_quant_list": [ + [ + "BAABAABLKSHP", + "1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev", + 1 + ], + [ + "BADHAIRDAY", + "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", + 2 + ], + [ + "BADWOJAK", + "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + 3 + ] + ], + "memo": "\"Hello, world!\"", + "memo_is_hex": false + }, + "name": "mpma" + } + }, + "/addresses/
/compose/order": { + "success": true, + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000356a330d1e454cefefcbe16fffa672ce93608ec55d2594e5d1946a774ef2724a2a4f457bc28ec195ee18fbd616f461236d8be718616dac000406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "give_asset": "XCP", + "give_quantity": 1000, + "get_asset": "PEPECASH", + "get_quantity": 1000, + "expiration": 100, + "fee_required": 100 + }, + "name": "order" + } + }, + "/addresses/
/compose/send": { + "success": true, + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000306a2e0d1e454cefefcbe167ffa672ce93608ec55d2594e5d1946a774e4e944f50dfb46943bffd3b68866791f7f496f8c270060406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "destination": "1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev", + "asset": "XCP", + "quantity": 1000, + "memo": null, + "memo_is_hex": false, + "use_enhanced_send": true + }, + "name": "send" + } + }, + "/addresses/
/compose/sweep": { + "success": true, + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000236a210d1e454cefefcbe161ff1a94d78892739ddc14a84b570af630af96858de42ab6cf6e150406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "destination": "1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev", + "flags": 7, + "memo": "FFFF" + }, + "name": "sweep" + } } } \ No newline at end of file From 0f71f80f22b646ebdaaa965a60fcfe2f022c69f7 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 24 Apr 2024 12:22:49 +0200 Subject: [PATCH 094/280] Don't pass db if not needed; Mempool output examples; fixes --- .../counterpartycore/lib/api/api_server.py | 10 +- .../counterpartycore/lib/api/util.py | 4 + .../counterpartycore/lib/backend/__init__.py | 14 +-- .../counterpartycore/lib/ledger.py | 2 +- counterparty-core/tools/apicache.json | 107 ++++++++++++++++-- 5 files changed, 117 insertions(+), 20 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 93f9ed4bbe..6fd35e963c 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -17,6 +17,7 @@ ) from counterpartycore.lib.api.routes import ROUTES from counterpartycore.lib.api.util import ( + function_needs_db, get_backend_height, init_api_access_log, remove_rowids, @@ -104,9 +105,7 @@ def inject_headers(result, return_code=None): def prepare_args(route, **kwargs): function_args = dict(kwargs) - if "pass_all_args" in route and route["pass_all_args"]: - function_args = request.args | function_args - elif "args" in route: + if "args" in route: for arg in route["args"]: arg_name = arg["name"] if arg_name in function_args: @@ -148,7 +147,10 @@ def handle_route(**kwargs): except ValueError as e: return inject_headers({"success": False, "error": str(e)}, return_code=400) try: - result = route["function"](db, **function_args) + if function_needs_db(route["function"]): + result = route["function"](db, **function_args) + else: + result = route["function"](**function_args) except (exceptions.ComposeError, exceptions.UnpackError) as e: return inject_headers({"success": False, "error": str(e)}, return_code=503) except Exception as e: diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index 99ee1760a2..9793d7d406 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -150,6 +150,10 @@ def get_args_description(function): return args +def function_needs_db(function): + return "db" in inspect.signature(function).parameters + + def prepare_route_args(function): args = [] function_args = inspect.signature(function).parameters diff --git a/counterparty-core/counterpartycore/lib/backend/__init__.py b/counterparty-core/counterpartycore/lib/backend/__init__.py index 4ed53f602a..6a9e0df37b 100644 --- a/counterparty-core/counterpartycore/lib/backend/__init__.py +++ b/counterparty-core/counterpartycore/lib/backend/__init__.py @@ -210,15 +210,15 @@ class MempoolError(Exception): pass -def get_unspent_txouts(source: str, unconfirmed: bool = False, unspent_tx_hash: str = None): +def get_unspent_txouts(address: str, unconfirmed: bool = False, unspent_tx_hash: str = None): """ Returns a list of unspent outputs for a specific address - :param source: The address to search for + :param address: The address to search for :param unconfirmed: Include unconfirmed transactions :param unspent_tx_hash: Filter by unspent_tx_hash """ - unspent = backend().get_unspent_txouts(source) + unspent = backend().get_unspent_txouts(address) # filter by unspent_tx_hash if unspent_tx_hash is not None: @@ -238,12 +238,12 @@ def get_unspent_txouts(source: str, unconfirmed: bool = False, unspent_tx_hash: return unspent -def search_raw_transactions(address, unconfirmed: bool = True, only_tx_hashes: bool = False): +def search_raw_transactions(address: str, unconfirmed: bool = True, only_tx_hashes: bool = False): """ Returns all transactions involving a given address - :param address: The address to search for - :param unconfirmed: Include unconfirmed transactions - :param only_tx_hashes: Return only the tx hashes + :param address: The address to search for (e.g. 1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs) + :param unconfirmed: Include unconfirmed transactions (e.g. True) + :param only_tx_hashes: Return only the tx hashes (e.g. True) """ return backend().search_raw_transactions(address, unconfirmed, only_tx_hashes) diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index 57280f5709..4926569c04 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -183,7 +183,7 @@ def get_all_mempool_events(db): def get_mempool_events_by_event(db, event: str): """ Returns the mempool events filtered by event name - :param str event: The event to return (e.g. CREDIT) + :param str event: The event to return (e.g. OPEN_ORDER) """ return get_mempool_events(db, event_name=event) diff --git a/counterparty-core/tools/apicache.json b/counterparty-core/tools/apicache.json index 58ae122e38..e2e34ee8e3 100644 --- a/counterparty-core/tools/apicache.json +++ b/counterparty-core/tools/apicache.json @@ -2041,14 +2041,6 @@ "name": "burn" } }, - "/mempool/events": { - "success": true, - "result": [] - }, - "/mempool/events/": { - "success": true, - "result": [] - }, "/addresses/
/compose/cancel": { "success": true, "result": { @@ -2193,5 +2185,104 @@ }, "name": "sweep" } + }, + "/mempool/events": { + "success": true, + "result": [ + { + "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e", + "event": "NEW_TRANSACTION", + "bindings": { + "block_hash": "mempool", + "block_index": 9999999, + "block_time": 1713952590, + "btc_amount": 0, + "data": "0200454ceacf416ccf0000000000000001005461639d06ebc42d541b54b1c5525543ae4d6db3", + "destination": "", + "fee": 9900, + "source": "14PxDTVUMCjLoAcGPZGQf6cEtn7yLzdHp1", + "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e", + "tx_index": 2726767 + }, + "timestamp": 1713952691 + }, + { + "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e", + "event": "ENHANCED_SEND", + "bindings": { + "asset": "FIERCERABBIT", + "destination": "18hARq2fFJxiypHSnZ8yLcbPNpUfaozD8U", + "memo": null, + "quantity": 1, + "source": "14PxDTVUMCjLoAcGPZGQf6cEtn7yLzdHp1", + "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e" + }, + "timestamp": 1713952691 + }, + { + "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e", + "event": "TRANSACTION_PARSED", + "bindings": { + "supported": true, + "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e", + "tx_index": 2726767 + }, + "timestamp": 1713952691 + } + ] + }, + "/mempool/events/": { + "success": true, + "result": [ + { + "tx_hash": "90ba95c4578b9ab7866515d66736c5b4132e88a0bd9b0fca7b2f1be830a1bb81", + "event": "OPEN_ORDER", + "bindings": { + "expiration": 5000, + "expire_index": 10004999, + "fee_provided": 5016, + "fee_provided_remaining": 5016, + "fee_required": 0, + "fee_required_remaining": 0, + "get_asset": "XCP", + "get_quantity": 3300000000, + "get_remaining": 3300000000, + "give_asset": "PEPEPASSPORT", + "give_quantity": 100000000, + "give_remaining": 100000000, + "source": "1A36UrLHxeg9ABoS4zPsRUegyCWTWER2kF", + "tx_hash": "90ba95c4578b9ab7866515d66736c5b4132e88a0bd9b0fca7b2f1be830a1bb81" + }, + "timestamp": 1713952690 + }, + { + "tx_hash": "bc553f3d4349a266b70e7ed98e2198a18d634a5b247997f59817f69e19de2ad6", + "event": "OPEN_ORDER", + "bindings": { + "expiration": 5000, + "expire_index": 10004999, + "fee_provided": 5016, + "fee_provided_remaining": 5016, + "fee_required": 0, + "fee_required_remaining": 0, + "get_asset": "XCP", + "get_quantity": 1185000000, + "get_remaining": 1185000000, + "give_asset": "FRATPEPE", + "give_quantity": 3, + "give_remaining": 3, + "source": "1A36UrLHxeg9ABoS4zPsRUegyCWTWER2kF", + "tx_hash": "bc553f3d4349a266b70e7ed98e2198a18d634a5b247997f59817f69e19de2ad6" + }, + "timestamp": 1713952690 + } + ] + }, + "/backend/addresses/
/transactions": { + "success": false, + "result": { + "success": false, + "error": "Unknwon error" + } } } \ No newline at end of file From 92968bf35b1fb6f7fbe75515e7bd37d7ee6ecc6a Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 24 Apr 2024 12:35:52 +0200 Subject: [PATCH 095/280] All routes with output example --- .../counterpartycore/lib/api/util.py | 6 +- .../counterpartycore/lib/backend/__init__.py | 10 +- counterparty-core/tools/apicache.json | 185 +++++++++++++++++- 3 files changed, 190 insertions(+), 11 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index 9793d7d406..fe67a9726b 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -96,7 +96,7 @@ def getrawtransactions(tx_hashes, verbose=False, skip_missing=False, _retry=0): def pubkeyhash_to_pubkey(address: str, provided_pubkeys: str = None): """ Get pubkey for an address. - :param address: Address to get pubkey for. + :param address: Address to get pubkey for. (e.g. 14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS) :param provided_pubkeys: Comma separated list of provided pubkeys. """ if provided_pubkeys: @@ -109,8 +109,8 @@ def pubkeyhash_to_pubkey(address: str, provided_pubkeys: str = None): def get_raw_transaction(tx_hash: str, verbose: bool = False): """ Get a raw transaction from the blockchain - :param tx_hash: The transaction hash - :param verbose: Whether to return JSON output or raw hex + :param tx_hash: The transaction hash (e.g. 3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018) + :param verbose: Whether to return JSON output or raw hex (e.g. True) """ return backend.getrawtransaction(tx_hash, verbose=verbose) diff --git a/counterparty-core/counterpartycore/lib/backend/__init__.py b/counterparty-core/counterpartycore/lib/backend/__init__.py index 6a9e0df37b..802a8eced2 100644 --- a/counterparty-core/counterpartycore/lib/backend/__init__.py +++ b/counterparty-core/counterpartycore/lib/backend/__init__.py @@ -131,8 +131,8 @@ def fee_per_kb( ): """ Get the fee per kilobyte for a transaction to be confirmed in `conf_target` blocks. - :param conf_target: Confirmation target in blocks (1 - 1008) - :param mode: The fee estimate mode. + :param conf_target: Confirmation target in blocks (1 - 1008) (e.g. 2) + :param mode: The fee estimate mode. (e.g. CONSERVATIVE) """ return backend().fee_per_kb(conf_target, mode, nblocks=None) @@ -213,7 +213,7 @@ class MempoolError(Exception): def get_unspent_txouts(address: str, unconfirmed: bool = False, unspent_tx_hash: str = None): """ Returns a list of unspent outputs for a specific address - :param address: The address to search for + :param address: The address to search for (e.g. 14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS) :param unconfirmed: Include unconfirmed transactions :param unspent_tx_hash: Filter by unspent_tx_hash """ @@ -241,7 +241,7 @@ def get_unspent_txouts(address: str, unconfirmed: bool = False, unspent_tx_hash: def search_raw_transactions(address: str, unconfirmed: bool = True, only_tx_hashes: bool = False): """ Returns all transactions involving a given address - :param address: The address to search for (e.g. 1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs) + :param address: The address to search for (e.g. 14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS) :param unconfirmed: Include unconfirmed transactions (e.g. True) :param only_tx_hashes: Return only the tx hashes (e.g. True) """ @@ -251,7 +251,7 @@ def search_raw_transactions(address: str, unconfirmed: bool = True, only_tx_hash def get_oldest_tx(address: str, block_index: int = None): """ Get the oldest transaction for an address. - :param address: The address to search for. + :param address: The address to search for. (e.g. 14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS) :param block_index: The block index to search from. """ return backend().get_oldest_tx(address, block_index=block_index) diff --git a/counterparty-core/tools/apicache.json b/counterparty-core/tools/apicache.json index e2e34ee8e3..94158f812e 100644 --- a/counterparty-core/tools/apicache.json +++ b/counterparty-core/tools/apicache.json @@ -2279,10 +2279,189 @@ ] }, "/backend/addresses/
/transactions": { - "success": false, + "success": true, + "result": [ + { + "tx_hash": "eae4f1dba4d75bda9dd0de12f69a980be267bbc16b7a280a2a4b40c4b3bbb70a" + }, + { + "tx_hash": "7ec16c461e3ba2d3acae48fcc8f58c04fba9f307b00c391eab507337ddc0bf16" + }, + { + "tx_hash": "ad35f05767aadd39019122b4f4828ccb059b8121c07be6d36eb1e2ddbe9ac317" + }, + { + "tx_hash": "3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018" + }, + { + "tx_hash": "aba5810714aa6196fec5538a83bbc281077a84ef2cbce2045b4c9f3c4439f14f" + }, + { + "tx_hash": "23758832e0fc92a7ea303623b8f743219cb8e637e7e7ac9fb6f90641efac9379" + }, + { + "tx_hash": "98bef616ef265dd2f6004683e908d7df97e0c5f322cdf2fb2ebea9a9131cfa79" + }, + { + "tx_hash": "687b875d1dc472aa2fb994c5753c9b9b56e5c6fd1a6de18a92fcb3dc7ba8067e" + }, + { + "tx_hash": "ec97c11ff5cb318505ebe20d7aa3c033816824a79f9a49821ffb584ed7d6c78f" + }, + { + "tx_hash": "c732f0906eeada2113524c6652c17b2784780110bffd4333eb8f719ac0eff3be" + }, + { + "tx_hash": "2c8bc3eede9ec60d26c6fd7f44829adc64da593552044a28c673022220f560c3" + }, + { + "tx_hash": "a209e345549cffef6e2190b53ac0222afc965fd618843df5ccbd645a6a7999ee" + } + ] + }, + "/backend/addresses/
/transactions/oldest": { + "success": true, + "result": { + "block_index": 833187, + "tx_hash": "2c8bc3eede9ec60d26c6fd7f44829adc64da593552044a28c673022220f560c3" + } + }, + "/backend/addresses/
/utxos": { + "success": true, + "result": [ + { + "vout": 6, + "height": 833559, + "value": 34611, + "confirmations": 7083, + "amount": 0.00034611, + "txid": "98bef616ef265dd2f6004683e908d7df97e0c5f322cdf2fb2ebea9a9131cfa79" + }, + { + "vout": 0, + "height": 833187, + "value": 619481, + "confirmations": 7455, + "amount": 0.00619481, + "txid": "2c8bc3eede9ec60d26c6fd7f44829adc64da593552044a28c673022220f560c3" + }, + { + "vout": 0, + "height": 837379, + "value": 992721, + "confirmations": 3263, + "amount": 0.00992721, + "txid": "ad35f05767aadd39019122b4f4828ccb059b8121c07be6d36eb1e2ddbe9ac317" + }, + { + "vout": 0, + "height": 840640, + "value": 838185, + "confirmations": 2, + "amount": 0.00838185, + "txid": "3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018" + }, + { + "vout": 0, + "height": 839421, + "value": 336973, + "confirmations": 1221, + "amount": 0.00336973, + "txid": "c732f0906eeada2113524c6652c17b2784780110bffd4333eb8f719ac0eff3be" + }, + { + "vout": 0, + "height": 839462, + "value": 78615, + "confirmations": 1180, + "amount": 0.00078615, + "txid": "eae4f1dba4d75bda9dd0de12f69a980be267bbc16b7a280a2a4b40c4b3bbb70a" + }, + { + "vout": 0, + "height": 838442, + "value": 557283, + "confirmations": 2200, + "amount": 0.00557283, + "txid": "aba5810714aa6196fec5538a83bbc281077a84ef2cbce2045b4c9f3c4439f14f" + }, + { + "vout": 0, + "height": 838608, + "value": 77148, + "confirmations": 2034, + "amount": 0.00077148, + "txid": "ec97c11ff5cb318505ebe20d7aa3c033816824a79f9a49821ffb584ed7d6c78f" + }, + { + "vout": 0, + "height": 837402, + "value": 70501, + "confirmations": 3240, + "amount": 0.00070501, + "txid": "687b875d1dc472aa2fb994c5753c9b9b56e5c6fd1a6de18a92fcb3dc7ba8067e" + }, + { + "vout": 0, + "height": 839021, + "value": 12354, + "confirmations": 1621, + "amount": 0.00012354, + "txid": "23758832e0fc92a7ea303623b8f743219cb8e637e7e7ac9fb6f90641efac9379" + } + ] + }, + "/backend/addresses/
/pubkey": { + "success": true, + "result": "0388ef0905568d425f1ffd4031d93dda4ef0e220c9b5fc4a6cbaf11544c4a5ca49" + }, + "/backend/transactions/": { + "success": true, "result": { - "success": false, - "error": "Unknwon error" + "txid": "3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018", + "hash": "417c24d7a5539bc5b8496e26528382ac297a85a1c6b891b220f72712405ec300", + "version": 2, + "size": 195, + "vsize": 113, + "weight": 450, + "locktime": 0, + "vin": [ + { + "txid": "fc940430637d22a3d276bde8f7eb489760265cab642d8392f6017d73df94cd7a", + "vout": 2, + "scriptSig": { + "asm": "", + "hex": "" + }, + "txinwitness": [ + "3045022100e4a30e5c0e0f7a28dfcec566cda00d0775a4207744ed6f223a4234cbed87a8ac02205b2403279ba7d8235ea1e8b6497465b97b46f3b3066a58c326822a9b1c25b4a501", + "020e66cffeb4657b40a89063340cf7066030af3c6ce55744ed3570a7aecaa6b0da" + ], + "sequence": 4294967295 + } + ], + "vout": [ + { + "value": 0.00838185, + "n": 0, + "scriptPubKey": { + "asm": "OP_DUP OP_HASH160 25f70b0f1512c1742d3301fe34370894c79127bb OP_EQUALVERIFY OP_CHECKSIG", + "desc": "addr(14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS)#68uhm9u9", + "hex": "76a91425f70b0f1512c1742d3301fe34370894c79127bb88ac", + "address": "14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS", + "type": "pubkeyhash" + } + } + ], + "hex": "020000000001017acd94df737d01f692832d64ab5c26609748ebf7e8bd76d2a3227d63300494fc0200000000ffffffff0129ca0c00000000001976a91425f70b0f1512c1742d3301fe34370894c79127bb88ac02483045022100e4a30e5c0e0f7a28dfcec566cda00d0775a4207744ed6f223a4234cbed87a8ac02205b2403279ba7d8235ea1e8b6497465b97b46f3b3066a58c326822a9b1c25b4a50121020e66cffeb4657b40a89063340cf7066030af3c6ce55744ed3570a7aecaa6b0da00000000", + "blockhash": "000000000000000000020f596ed481076b7754143284b47fc8d32642202e5f76", + "confirmations": 2, + "time": 1713951767, + "blocktime": 1713951767 } + }, + "/backend/estimatesmartfee": { + "success": true, + "result": 673559 } } \ No newline at end of file From 8a5837431c5bf9e2b61781297ca00158d8ca7e80 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 24 Apr 2024 14:35:41 +0200 Subject: [PATCH 096/280] Refactor function to return data --- .../counterpartycore/lib/api/api_server.py | 87 ++++++------ .../counterpartycore/lib/api/routes.py | 2 +- .../counterpartycore/lib/api/util.py | 12 +- .../counterpartycore/test/api_v2_test.py | 2 +- counterparty-core/tools/apicache.json | 124 +++++++++--------- 5 files changed, 126 insertions(+), 101 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 6fd35e963c..e371584122 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -79,25 +79,32 @@ def api_root(): } -def inject_headers(result, return_code=None): - server_ready = ledger.CURRENT_BLOCK_INDEX >= BACKEND_HEIGHT - 1 - json_result = {"success": True, "result": result} - http_code = 200 - if return_code: - http_code = return_code - elif not server_ready: - http_code = config.API_NOT_READY_HTTP_CODE - json_result["error"] = "Counterparty not ready" - if http_code != 200: - json_result["success"] = False - - if isinstance(result, flask.Response): - response = result - else: - response = flask.make_response(to_json(json_result), http_code) +def is_server_ready(): + return ledger.CURRENT_BLOCK_INDEX >= BACKEND_HEIGHT - 1 + + +def is_cachable(rule): + if rule.startswith("/blocks"): + return True + if rule.startswith("/transactions"): + return True + if rule.startswith("/backend"): + return True + + +def return_result_if_not_ready(rule): + return is_cachable(rule) or rule == "/" + +def return_result(success, http_code, result=None, error=None): + api_result = {"success": success} + if result is not None: + api_result["result"] = result + if error is not None: + api_result["error"] = error + response = flask.make_response(to_json(api_result), http_code) response.headers["X-COUNTERPARTY-HEIGHT"] = ledger.CURRENT_BLOCK_INDEX - response.headers["X-COUNTERPARTY-READY"] = server_ready + response.headers["X-COUNTERPARTY-READY"] = is_server_ready() response.headers["X-BACKEND-HEIGHT"] = BACKEND_HEIGHT response.headers["Content-Type"] = "application/json" return response @@ -137,28 +144,34 @@ def handle_route(**kwargs): db = get_db() # update the current block index ledger.CURRENT_BLOCK_INDEX = blocks.last_db_index(db) + rule = str(request.url_rule.rule) - if rule == "/": - result = api_root() + + if not is_server_ready() and not return_result_if_not_ready(rule): + return return_result(False, 503, error="Counterparty not ready") else: - route = ROUTES.get(rule) - try: - function_args = prepare_args(route, **kwargs) - except ValueError as e: - return inject_headers({"success": False, "error": str(e)}, return_code=400) - try: - if function_needs_db(route["function"]): - result = route["function"](db, **function_args) - else: - result = route["function"](**function_args) - except (exceptions.ComposeError, exceptions.UnpackError) as e: - return inject_headers({"success": False, "error": str(e)}, return_code=503) - except Exception as e: - logger.exception("Error in API: %s", e) - traceback.print_exc() - return inject_headers({"success": False, "error": "Unknwon error"}, return_code=503) - result = remove_rowids(result) - return inject_headers(result) + if rule == "/": + return return_result(True, 200, result=api_root()) + else: + route = ROUTES.get(rule) + try: + function_args = prepare_args(route, **kwargs) + except ValueError as e: + return return_result(False, 400, error=str(e)) + try: + if function_needs_db(route["function"]): + result = route["function"](db, **function_args) + else: + result = route["function"](**function_args) + except (exceptions.ComposeError, exceptions.UnpackError) as e: + return return_result(False, 503, error=str(e)) + except Exception as e: + logger.exception("Error in API: %s", e) + traceback.print_exc() + return return_result(False, 503, error="Unknwon error") + + result = remove_rowids(result) + return return_result(True, 200, result=result) def run_api_server(args): diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index 74c53a7584..c860d3ab9b 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -90,7 +90,7 @@ "/events/counts": ledger.get_all_events_counts, "/events/": ledger.get_events_by_event, ### /healthz ### - "/healthz": util.handle_healthz_route, + "/healthz": util.handle_healthz_route_v2, ### /backend ### "/backend/addresses/
/transactions": backend.search_raw_transactions, "/backend/addresses/
/transactions/oldest": backend.get_oldest_tx, diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index fe67a9726b..4d1a5dee8a 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -40,7 +40,7 @@ def healthz_heavy(db): ) -def healthz(db, check_type="heavy"): +def healthz(db, check_type: str = "heavy"): try: if check_type == "light": healthz_light(db) @@ -67,6 +67,16 @@ def handle_healthz_route(db, check_type: str = "heavy"): return flask.Response(to_json(result), code, mimetype="application/json") +def handle_healthz_route_v2(db, check_type: str = "heavy"): + """ + Health check route. + :param check_type: Type of health check to perform. Options are 'light' and 'heavy' (e.g. light) + """ + if not healthz(db, check_type): + return {"status": "Unhealthy"} + return {"status": "Healthy"} + + def remove_rowids(query_result): """Remove the rowid field from the query result.""" if isinstance(query_result, list): diff --git a/counterparty-core/counterpartycore/test/api_v2_test.py b/counterparty-core/counterpartycore/test/api_v2_test.py index 7bd503b9f2..438cb89de0 100644 --- a/counterparty-core/counterpartycore/test/api_v2_test.py +++ b/counterparty-core/counterpartycore/test/api_v2_test.py @@ -57,7 +57,7 @@ def test_api_v2(request): url = url.replace("", tx_hash) if route.startswith("/events"): url += "?limit=5" - # print(url) + print(url) result = requests.get(url) # noqa: S113 results[url] = result.json() assert result.status_code == 200 diff --git a/counterparty-core/tools/apicache.json b/counterparty-core/tools/apicache.json index 94158f812e..d9c4f0d0a3 100644 --- a/counterparty-core/tools/apicache.json +++ b/counterparty-core/tools/apicache.json @@ -1,60 +1,4 @@ { - "/blocks": { - "success": true, - "result": [ - { - "block_index": 840000, - "block_hash": "0000000000000000000320283a032748cef8227873ff4872689bf23f1cda83a5", - "block_time": 1713571767, - "previous_block_hash": "0000000000000000000172014ba58d66455762add0512355ad651207918494ab", - "difficulty": 86388558925171.02, - "ledger_hash": "b91dd54cfbd3aff07b358a038bf6174ddc06f36bd00cdccf048e8281bcd56224", - "txlist_hash": "b641c3e190b9941fcd5c84a7c07e66c03559ef26dcea892e2db1cf1d8392a4f2", - "messages_hash": "5c5de34009839ee66ebc3097ecd28bd5deee9553966b3ee39e8a08e123ac9adc" - }, - { - "block_index": 839999, - "block_hash": "0000000000000000000172014ba58d66455762add0512355ad651207918494ab", - "block_time": 1713571533, - "previous_block_hash": "00000000000000000001dcce6ce7c8a45872cafd1fb04732b447a14a91832591", - "difficulty": 86388558925171.02, - "ledger_hash": "e2b2e23c2ac1060dafe2395da01fe5907f323b5a644816f45f003411c612ac30", - "txlist_hash": "f33f800ef166e6ef5b3df15a0733f9fd3ebb0b799f39ef1951e6709118b7c0fd", - "messages_hash": "16b7d40543b7b80587f4d98c84fcdfdceb2d1c18abba82c7064c09c2795b7ab2" - } - ] - }, - "/blocks/": { - "success": true, - "result": { - "block_index": 840464, - "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", - "block_time": 1713852783, - "previous_block_hash": "00000000000000000002db1e5aa19784eec3de949f98ec757e7a7f2fc392079d", - "difficulty": 86388558925171.02, - "ledger_hash": "b3f8cbb50b0705a5c4a8495f8b5128de13a32daebd8ac5e8316a010f0d203584", - "txlist_hash": "84bdc5b9073f775a2b65de7da2b10b89a2235f3501883b0a836e41e68cd00d46", - "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540" - } - }, - "/blocks//transactions": { - "success": true, - "result": [ - { - "tx_index": 2726605, - "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "block_index": 840464, - "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", - "block_time": 1713852783, - "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "destination": "", - "btc_amount": 0, - "fee": 56565, - "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", - "supported": 1 - } - ] - }, "/blocks//events": { "success": true, "result": [ @@ -2007,10 +1951,6 @@ "name": "broadcast" } }, - "/healthz": { - "data": "Healthy", - "success": true - }, "/addresses/
/compose/bet": { "success": true, "result": { @@ -2460,8 +2400,70 @@ "blocktime": 1713951767 } }, + "/blocks": { + "success": true, + "result": [ + { + "block_index": 840000, + "block_hash": "0000000000000000000320283a032748cef8227873ff4872689bf23f1cda83a5", + "block_time": 1713571767, + "previous_block_hash": "0000000000000000000172014ba58d66455762add0512355ad651207918494ab", + "difficulty": 86388558925171.02, + "ledger_hash": "b91dd54cfbd3aff07b358a038bf6174ddc06f36bd00cdccf048e8281bcd56224", + "txlist_hash": "b641c3e190b9941fcd5c84a7c07e66c03559ef26dcea892e2db1cf1d8392a4f2", + "messages_hash": "5c5de34009839ee66ebc3097ecd28bd5deee9553966b3ee39e8a08e123ac9adc" + }, + { + "block_index": 839999, + "block_hash": "0000000000000000000172014ba58d66455762add0512355ad651207918494ab", + "block_time": 1713571533, + "previous_block_hash": "00000000000000000001dcce6ce7c8a45872cafd1fb04732b447a14a91832591", + "difficulty": 86388558925171.02, + "ledger_hash": "e2b2e23c2ac1060dafe2395da01fe5907f323b5a644816f45f003411c612ac30", + "txlist_hash": "f33f800ef166e6ef5b3df15a0733f9fd3ebb0b799f39ef1951e6709118b7c0fd", + "messages_hash": "16b7d40543b7b80587f4d98c84fcdfdceb2d1c18abba82c7064c09c2795b7ab2" + } + ] + }, + "/blocks/": { + "success": true, + "result": { + "block_index": 840464, + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_time": 1713852783, + "previous_block_hash": "00000000000000000002db1e5aa19784eec3de949f98ec757e7a7f2fc392079d", + "difficulty": 86388558925171.02, + "ledger_hash": "b3f8cbb50b0705a5c4a8495f8b5128de13a32daebd8ac5e8316a010f0d203584", + "txlist_hash": "84bdc5b9073f775a2b65de7da2b10b89a2235f3501883b0a836e41e68cd00d46", + "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540" + } + }, + "/blocks//transactions": { + "success": true, + "result": [ + { + "tx_index": 2726605, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "block_index": 840464, + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_time": 1713852783, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "destination": "", + "btc_amount": 0, + "fee": 56565, + "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", + "supported": 1 + } + ] + }, + "/healthz": { + "success": true, + "result": { + "status": "Healthy" + } + }, "/backend/estimatesmartfee": { "success": true, - "result": 673559 + "result": 295443 } } \ No newline at end of file From 0f1b4ed3cf3c68ff7f5fd7e3e026ab8f0a570328 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 24 Apr 2024 15:10:35 +0200 Subject: [PATCH 097/280] Add notes in API documentation --- .../counterpartycore/lib/api/api_server.py | 53 +++++++++---------- counterparty-core/counterpartycore/server.py | 3 -- .../counterpartycore/test/conftest.py | 1 - counterparty-core/tools/genapidoc.py | 39 +++++++++++++- 4 files changed, 62 insertions(+), 34 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index e371584122..dda3cb6b2b 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -1,7 +1,6 @@ import argparse import logging import multiprocessing -import signal import traceback from multiprocessing import Process from threading import Timer @@ -112,30 +111,30 @@ def return_result(success, http_code, result=None, error=None): def prepare_args(route, **kwargs): function_args = dict(kwargs) - if "args" in route: - for arg in route["args"]: - arg_name = arg["name"] - if arg_name in function_args: - continue - str_arg = request.args.get(arg_name) - if str_arg is None and arg["required"]: - raise ValueError(f"Missing required parameter: {arg_name}") - if str_arg is None: - function_args[arg_name] = arg["default"] - elif arg["type"] == "bool": - function_args[arg_name] = str_arg.lower() in ["true", "1"] - elif arg["type"] == "int": - try: - function_args[arg_name] = int(str_arg) - except ValueError as e: - raise ValueError(f"Invalid integer: {arg_name}") from e - elif arg["type"] == "float": - try: - function_args[arg_name] = float(str_arg) - except ValueError as e: - raise ValueError(f"Invalid float: {arg_name}") from e - else: - function_args[arg_name] = str_arg + # inject args from request.args + for arg in route["args"]: + arg_name = arg["name"] + if arg_name in function_args: + continue + str_arg = request.args.get(arg_name) + if str_arg is None and arg["required"]: + raise ValueError(f"Missing required parameter: {arg_name}") + if str_arg is None: + function_args[arg_name] = arg["default"] + elif arg["type"] == "bool": + function_args[arg_name] = str_arg.lower() in ["true", "1"] + elif arg["type"] == "int": + try: + function_args[arg_name] = int(str_arg) + except ValueError as e: + raise ValueError(f"Invalid integer: {arg_name}") from e + elif arg["type"] == "float": + try: + function_args[arg_name] = float(str_arg) + except ValueError as e: + raise ValueError(f"Invalid float: {arg_name}") from e + else: + function_args[arg_name] = str_arg return function_args @@ -175,10 +174,6 @@ def handle_route(**kwargs): def run_api_server(args): - # default signal handlers - signal.signal(signal.SIGTERM, signal.SIG_DFL) - signal.signal(signal.SIGINT, signal.default_int_handler) - app = Flask(config.APP_NAME) # Initialise log and config server.initialise_log_and_config(argparse.Namespace(**args)) diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index 54668d0496..5278df3078 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -162,7 +162,6 @@ def initialise_config( api_user=None, api_password=None, api_no_allow_cors=False, - api_not_ready_http_code=503, force=False, requests_timeout=config.DEFAULT_REQUESTS_TIMEOUT, rpc_batch_size=config.DEFAULT_RPC_BATCH_SIZE, @@ -472,8 +471,6 @@ def initialise_config( else: config.API_PASSWORD = "api" # noqa: S105 - config.API_NOT_READY_HTTP_CODE = api_not_ready_http_code - if api_no_allow_cors: config.API_NO_ALLOW_CORS = api_no_allow_cors else: diff --git a/counterparty-core/counterpartycore/test/conftest.py b/counterparty-core/counterpartycore/test/conftest.py index f196be1d1a..990a028180 100644 --- a/counterparty-core/counterpartycore/test/conftest.py +++ b/counterparty-core/counterpartycore/test/conftest.py @@ -265,7 +265,6 @@ def api_server_v2(request, cp_server): "api_user": "api", "api_password": "api", "api_no_allow_cors": False, - "api_not_ready_http_code": 503, "force": False, "requests_timeout": config.DEFAULT_REQUESTS_TIMEOUT, "rpc_batch_size": config.DEFAULT_RPC_BATCH_SIZE, diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index 72044f9060..1a4119bbcf 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -34,7 +34,44 @@ def get_example_output(path, args): # Counterparty Core API -The Counterparty Core API is the recommended (and only supported) way to query the state of a Counterparty node. The following routes are available: +The Counterparty Core API is the recommended (and only supported) way to query the state of a Counterparty node. + +API routes are divided into 11 groups: + +- [`/blocks`](#group-blocks) +- [`/transactions`](#group-transactions) +- [`/addresses`](#group-addresses) +- [`/assets`](#group-assets) +- [`/orders`](#group-orders) +- [`/bets`](#group-bets) +- [`/dispensers`](#group-dispensers) +- [`/burns`](#group-burns) +- [`/events`](#group-events) +- [`/mempool`](#group-mempool) +- [`/backend`](#group-backend) + +Notes: + +- When the server is not ready, that is to say when all the blocks are not yet parsed, all routes return a 503 error except those in the `/blocks`, `/transactions` and `/backend` groups which always return a result. + +- All API responses contain the following 3 headers: + + * `X-COUNTERPARTY-HEIGHT` contains the last block parsed by Counterparty + * `X-BACKEND-HEIGHT` contains the last block known to Bitcoin Core + * `X-COUNTERPARTY-READY` contains true if `X-COUNTERPARTY-HEIGHT` >= `X-BACKEND-HEIGHT` - 1 + +- All API responses follow the following format: + +``` +{ + "success": , + "error": , + "result": +} +``` + +- Routes in the `/backend` group serve as a proxy to make requests to AddrindexRS. + """ cache = {} From 9041dfde3af74cf4be5934da831c1d485e53aa6a Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 24 Apr 2024 16:53:38 +0200 Subject: [PATCH 098/280] fix fixtures --- .../test/fixtures/api_v2_fixtures.json | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json b/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json index bec05b9699..71ea277ec6 100644 --- a/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json +++ b/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json @@ -138,6 +138,21 @@ "http://api:api@localhost:10009/blocks/310491/events": { "success": true, "result": [ + { + "event_index": 1183, + "event": "NEW_BLOCK", + "bindings": { + "block_hash": "8a09b2faf0a7ad67eb4ab5c948b9769fc87eb2ec5e16108f2cde8bd9e6cf7607", + "block_index": 310492, + "block_time": 310492000, + "difficulty": null, + "ledger_hash": null, + "previous_block_hash": null, + "txlist_hash": null + }, + "block_index": 310491, + "timestamp": 0 + }, { "event_index": 1182, "event": "BLOCK_PARSED", @@ -219,21 +234,6 @@ }, "block_index": 310491, "timestamp": 0 - }, - { - "event_index": 1177, - "event": "NEW_BLOCK", - "bindings": { - "block_hash": "811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16", - "block_index": 310491, - "block_time": 310491000, - "difficulty": null, - "ledger_hash": null, - "previous_block_hash": null, - "txlist_hash": null - }, - "block_index": 310491, - "timestamp": 0 } ] }, @@ -1333,7 +1333,7 @@ "previous_block_hash": null, "txlist_hash": null }, - "block_index": 310500, + "block_index": 310499, "timestamp": 0 }, { @@ -1360,7 +1360,7 @@ "previous_block_hash": null, "txlist_hash": null }, - "block_index": 310499, + "block_index": 310498, "timestamp": 0 }, { From d3e13b2481e31109ab0d621b747b4f1e8182a84d Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 24 Apr 2024 17:29:53 +0200 Subject: [PATCH 099/280] update relase notes --- release-notes/release-notes-v10.1.2.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/release-notes/release-notes-v10.1.2.md b/release-notes/release-notes-v10.1.2.md index fadded4993..6cc002e42b 100644 --- a/release-notes/release-notes-v10.1.2.md +++ b/release-notes/release-notes-v10.1.2.md @@ -4,6 +4,11 @@ # Upgrading +To continue using the old API you must: +- start `counterparty-server` with the flag `----enable-api-v1` +- replace port `4100` with port `4000` for mainnet and port `14000` with port `14100` +- prefix all endpoints with `/old/` +To easily migrate to the new API, an equivalence table is available in the documentation # ChangeLog @@ -11,6 +16,7 @@ * Fix logging of some raw tracebacks (#1715) ## Codebase +* New REST API ## Command-Line Interface From 4f1b4d600ca283efce45632071eab41333a845e3 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 24 Apr 2024 18:10:34 +0200 Subject: [PATCH 100/280] lint --- .../counterpartycore/lib/api/api_server.py | 56 +++++++++++-------- .../counterpartycore/lib/api/util.py | 6 +- 2 files changed, 35 insertions(+), 27 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index dda3cb6b2b..8f00f00e2e 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -52,8 +52,7 @@ def verify_password(username, password): def api_root(): counterparty_height = blocks.last_db_index(get_db()) routes = [] - for path in ROUTES: - route = ROUTES[path] + for path, route in ROUTES.item(): routes.append( { "path": path, @@ -89,6 +88,7 @@ def is_cachable(rule): return True if rule.startswith("/backend"): return True + return False def return_result_if_not_ready(rule): @@ -117,8 +117,10 @@ def prepare_args(route, **kwargs): if arg_name in function_args: continue str_arg = request.args.get(arg_name) + if str_arg is None and arg["required"]: raise ValueError(f"Missing required parameter: {arg_name}") + if str_arg is None: function_args[arg_name] = arg["default"] elif arg["type"] == "bool": @@ -146,31 +148,37 @@ def handle_route(**kwargs): rule = str(request.url_rule.rule) + # check if server must be ready if not is_server_ready() and not return_result_if_not_ready(rule): return return_result(False, 503, error="Counterparty not ready") - else: - if rule == "/": - return return_result(True, 200, result=api_root()) + + if rule == "/": + return return_result(True, 200, result=api_root()) + + route = ROUTES.get(rule) + + # parse args + try: + function_args = prepare_args(route, **kwargs) + except ValueError as e: + return return_result(False, 400, error=str(e)) + + # call the function + try: + if function_needs_db(route["function"]): + result = route["function"](db, **function_args) else: - route = ROUTES.get(rule) - try: - function_args = prepare_args(route, **kwargs) - except ValueError as e: - return return_result(False, 400, error=str(e)) - try: - if function_needs_db(route["function"]): - result = route["function"](db, **function_args) - else: - result = route["function"](**function_args) - except (exceptions.ComposeError, exceptions.UnpackError) as e: - return return_result(False, 503, error=str(e)) - except Exception as e: - logger.exception("Error in API: %s", e) - traceback.print_exc() - return return_result(False, 503, error="Unknwon error") - - result = remove_rowids(result) - return return_result(True, 200, result=result) + result = route["function"](**function_args) + except (exceptions.ComposeError, exceptions.UnpackError) as e: + return return_result(False, 503, error=str(e)) + except Exception as e: + logger.exception("Error in API: %s", e) + traceback.print_exc() + return return_result(False, 503, error="Unknwon error") + + # clean up and return the result + result = remove_rowids(result) + return return_result(True, 200, result=result) def run_api_server(args): diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index 4d1a5dee8a..e7fb53bf8d 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -18,7 +18,7 @@ def check_last_parsed_block(blockcount): logger.debug("Database state check passed.") -def healthz_light(db): +def healthz_light(): logger.debug("Performing light healthz check.") latest_block_index = backend.getblockcount() check_last_parsed_block(latest_block_index) @@ -43,9 +43,9 @@ def healthz_heavy(db): def healthz(db, check_type: str = "heavy"): try: if check_type == "light": - healthz_light(db) + healthz_light() else: - healthz_light(db) + healthz_light() healthz_heavy(db) except Exception as e: logger.error(f"Health check failed: {e}") From f48bc0c4ccd558765c4021b642e41ae42b81c714 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 10:21:41 +0200 Subject: [PATCH 101/280] Remove success from result --- .../counterpartycore/lib/api/api_server.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 8f00f00e2e..ada0732536 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -95,8 +95,9 @@ def return_result_if_not_ready(rule): return is_cachable(rule) or rule == "/" -def return_result(success, http_code, result=None, error=None): - api_result = {"success": success} +def return_result(http_code, result=None, error=None): + assert result is None or error is None + api_result = {} if result is not None: api_result["result"] = result if error is not None: @@ -150,10 +151,10 @@ def handle_route(**kwargs): # check if server must be ready if not is_server_ready() and not return_result_if_not_ready(rule): - return return_result(False, 503, error="Counterparty not ready") + return return_result(503, error="Counterparty not ready") if rule == "/": - return return_result(True, 200, result=api_root()) + return return_result(200, result=api_root()) route = ROUTES.get(rule) @@ -161,7 +162,7 @@ def handle_route(**kwargs): try: function_args = prepare_args(route, **kwargs) except ValueError as e: - return return_result(False, 400, error=str(e)) + return return_result(400, error=str(e)) # call the function try: @@ -170,15 +171,15 @@ def handle_route(**kwargs): else: result = route["function"](**function_args) except (exceptions.ComposeError, exceptions.UnpackError) as e: - return return_result(False, 503, error=str(e)) + return return_result(503, error=str(e)) except Exception as e: logger.exception("Error in API: %s", e) traceback.print_exc() - return return_result(False, 503, error="Unknwon error") + return return_result(503, error="Unknwon error") # clean up and return the result result = remove_rowids(result) - return return_result(True, 200, result=result) + return return_result(200, result=result) def run_api_server(args): From e20681977799bb6d7ffb308b9bd2eafc38f735b4 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 10:40:17 +0200 Subject: [PATCH 102/280] db is already initialized --- counterparty-core/counterpartycore/lib/transaction.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index fe086728e9..9bddd5929e 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -1146,7 +1146,7 @@ def compose_transaction( del params["segwit"] tx_info = compose_method(db, **params) - initialise(db) + return construct( db, tx_info, From cd0ba21a8e3352022276db337a3db7b9f9bd649c Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 10:41:13 +0200 Subject: [PATCH 103/280] fix typo --- counterparty-core/counterpartycore/lib/api/api_v1.py | 4 ++-- counterparty-core/counterpartycore/lib/transaction.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_v1.py b/counterparty-core/counterpartycore/lib/api/api_v1.py index 0e33cd8bda..55dce5829b 100644 --- a/counterparty-core/counterpartycore/lib/api/api_v1.py +++ b/counterparty-core/counterpartycore/lib/api/api_v1.py @@ -598,7 +598,7 @@ def generate_create_method(tx): def create_method(**kwargs): try: transaction_args, common_args, private_key_wif = ( - transaction.split_compose_arams(**kwargs) + transaction.split_compose_params(**kwargs) ) return transaction.compose_transaction( self.db, name=tx, params=transaction_args, api_v1=True, **common_args @@ -1186,7 +1186,7 @@ def handle_rest(path_args, flask_request): query_data = {} if compose: - transaction_args, common_args, private_key_wif = transaction.split_compose_arams( + transaction_args, common_args, private_key_wif = transaction.split_compose_params( **extra_args ) diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index 9bddd5929e..b121654326 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -1028,7 +1028,7 @@ def get_dust_return_pubkey(source, provided_pubkeys, encoding): } -def split_compose_arams(**kwargs): +def split_compose_params(**kwargs): transaction_args = {} common_args = {} private_key_wif = None @@ -1193,7 +1193,7 @@ def compose_transaction( def compose(db, source, transaction_name, api_v1=False, **kwargs): if transaction_name not in COMPOSABLE_TRANSACTIONS: raise exceptions.TransactionError("Transaction type not composable.") - transaction_args, common_args, _ = split_compose_arams(**kwargs) + transaction_args, common_args, _ = split_compose_params(**kwargs) transaction_args["source"] = source return compose_transaction( db, name=transaction_name, params=transaction_args, api_v1=api_v1, **common_args From 6f78ef5ef41018ed4b624f0091e73a1bf7a2808a Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 10:44:39 +0200 Subject: [PATCH 104/280] _by_event -> _by_name --- counterparty-core/counterpartycore/lib/api/routes.py | 4 ++-- counterparty-core/counterpartycore/lib/ledger.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index c860d3ab9b..93cf7358e5 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -88,7 +88,7 @@ "/events": ledger.get_all_events, "/events/": ledger.get_event_by_index, "/events/counts": ledger.get_all_events_counts, - "/events/": ledger.get_events_by_event, + "/events/": ledger.get_events_by_name, ### /healthz ### "/healthz": util.handle_healthz_route_v2, ### /backend ### @@ -100,6 +100,6 @@ "/backend/estimatesmartfee": backend.fee_per_kb, ### /mempool ### "/mempool/events": ledger.get_all_mempool_events, - "/mempool/events/": ledger.get_mempool_events_by_event, + "/mempool/events/": ledger.get_mempool_events_by_name, } ) diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index 9e385adaca..d3ab2603a8 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -141,7 +141,7 @@ def get_event_by_index(db, event_index: int): return get_events(db, event_index=event_index) -def get_events_by_event(db, event: str, last: int = None, limit: int = 100): +def get_events_by_name(db, event: str, last: int = None, limit: int = 100): """ Returns the events filtered by event name :param str event: The event to return (e.g. CREDIT) @@ -180,7 +180,7 @@ def get_all_mempool_events(db): return get_mempool_events(db) -def get_mempool_events_by_event(db, event: str): +def get_mempool_events_by_name(db, event: str): """ Returns the mempool events filtered by event name :param str event: The event to return (e.g. OPEN_ORDER) From 09a64a8a31d4f64355de2f0c5a0138a40977271a Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 11:13:34 +0200 Subject: [PATCH 105/280] fix fixtures --- .../test/fixtures/api_v2_fixtures.json | 112 ++++++------ counterparty-core/tools/apicache.json | 160 +++++++++--------- 2 files changed, 136 insertions(+), 136 deletions(-) diff --git a/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json b/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json index 71ea277ec6..1db6674c03 100644 --- a/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json +++ b/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json @@ -1,6 +1,6 @@ { "http://api:api@localhost:10009/blocks": { - "success": true, + "result": [ { "block_index": 310500, @@ -105,7 +105,7 @@ ] }, "http://api:api@localhost:10009/blocks/310491": { - "success": true, + "result": { "block_index": 310491, "block_hash": "811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16", @@ -118,7 +118,7 @@ } }, "http://api:api@localhost:10009/blocks/310491/transactions": { - "success": true, + "result": [ { "tx_index": 492, @@ -136,7 +136,7 @@ ] }, "http://api:api@localhost:10009/blocks/310491/events": { - "success": true, + "result": [ { "event_index": 1183, @@ -238,7 +238,7 @@ ] }, "http://api:api@localhost:10009/blocks/310491/events/counts": { - "success": true, + "result": [ { "event": "BLOCK_PARSED", @@ -267,15 +267,15 @@ ] }, "http://api:api@localhost:10009/blocks/310491/events/CREDIT": { - "success": true, + "result": [] }, "http://api:api@localhost:10009/blocks/310491/credits": { - "success": true, + "result": [] }, "http://api:api@localhost:10009/blocks/310491/debits": { - "success": true, + "result": [ { "block_index": 310491, @@ -289,35 +289,35 @@ ] }, "http://api:api@localhost:10009/blocks/310491/expirations": { - "success": true, + "result": [] }, "http://api:api@localhost:10009/blocks/310491/cancels": { - "success": true, + "result": [] }, "http://api:api@localhost:10009/blocks/310491/destructions": { - "success": true, + "result": [] }, "http://api:api@localhost:10009/blocks/310491/issuances": { - "success": true, + "result": [] }, "http://api:api@localhost:10009/blocks/310491/sends": { - "success": true, + "result": [] }, "http://api:api@localhost:10009/blocks/310491/dispenses": { - "success": true, + "result": [] }, "http://api:api@localhost:10009/blocks/310491/sweeps": { - "success": true, + "result": [] }, "http://api:api@localhost:10009/transactions/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { - "success": true, + "result": { "tx_index": 492, "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", @@ -333,7 +333,7 @@ } }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/balances": { - "success": true, + "result": [ { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", @@ -378,7 +378,7 @@ ] }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/balances/NODIVISIBLE": { - "success": true, + "result": { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", "asset": "NODIVISIBLE", @@ -386,7 +386,7 @@ } }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/credits": { - "success": true, + "result": [ { "block_index": 310000, @@ -499,7 +499,7 @@ ] }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/debits": { - "success": true, + "result": [ { "block_index": 310001, @@ -693,7 +693,7 @@ ] }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/bets": { - "success": true, + "result": [ { "tx_index": 102, @@ -717,7 +717,7 @@ ] }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/broadcasts": { - "success": true, + "result": [ { "tx_index": 103, @@ -746,7 +746,7 @@ ] }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/burns": { - "success": true, + "result": [ { "tx_index": 1, @@ -760,7 +760,7 @@ ] }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sends": { - "success": true, + "result": [ { "tx_index": 8, @@ -861,7 +861,7 @@ ] }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/receives": { - "success": true, + "result": [ { "tx_index": 483, @@ -878,7 +878,7 @@ ] }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sends/NODIVISIBLE": { - "success": true, + "result": [ { "tx_index": 15, @@ -907,23 +907,23 @@ ] }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/receives/NODIVISIBLE": { - "success": true, + "result": [] }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/dispensers": { - "success": true, + "result": [] }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/dispensers/NODIVISIBLE": { - "success": true, + "result": [] }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sweeps": { - "success": true, + "result": [] }, "http://api:api@localhost:10009/assets": { - "success": true, + "result": [ { "asset": "A95428956661682277", @@ -968,7 +968,7 @@ ] }, "http://api:api@localhost:10009/assets/NODIVISIBLE": { - "success": true, + "result": { "asset": "NODIVISIBLE", "asset_longname": null, @@ -982,7 +982,7 @@ } }, "http://api:api@localhost:10009/assets/NODIVISIBLE/balances": { - "success": true, + "result": [ { "address": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", @@ -1002,7 +1002,7 @@ ] }, "http://api:api@localhost:10009/assets/NODIVISIBLE/balances/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc": { - "success": true, + "result": { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", "asset": "NODIVISIBLE", @@ -1010,11 +1010,11 @@ } }, "http://api:api@localhost:10009/assets/NODIVISIBLE/orders": { - "success": true, + "result": [] }, "http://api:api@localhost:10009/assets/NODIVISIBLE/credits": { - "success": true, + "result": [ { "block_index": 310002, @@ -1046,7 +1046,7 @@ ] }, "http://api:api@localhost:10009/assets/NODIVISIBLE/debits": { - "success": true, + "result": [ { "block_index": 310014, @@ -1069,11 +1069,11 @@ ] }, "http://api:api@localhost:10009/assets/NODIVISIBLE/dividends": { - "success": true, + "result": [] }, "http://api:api@localhost:10009/assets/NODIVISIBLE/issuances": { - "success": true, + "result": [ { "tx_index": 3, @@ -1099,7 +1099,7 @@ ] }, "http://api:api@localhost:10009/assets/NODIVISIBLE/sends": { - "success": true, + "result": [ { "tx_index": 15, @@ -1128,15 +1128,15 @@ ] }, "http://api:api@localhost:10009/assets/NODIVISIBLE/dispensers": { - "success": true, + "result": [] }, "http://api:api@localhost:10009/assets/NODIVISIBLE/dispensers/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc": { - "success": true, + "result": [] }, "http://api:api@localhost:10009/assets/NODIVISIBLE/holders": { - "success": true, + "result": [ { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", @@ -1156,7 +1156,7 @@ ] }, "http://api:api@localhost:10009/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { - "success": true, + "result": [ { "tx_index": 492, @@ -1180,7 +1180,7 @@ ] }, "http://api:api@localhost:10009/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/matches": { - "success": true, + "result": [ { "id": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498_1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81", @@ -1206,23 +1206,23 @@ ] }, "http://api:api@localhost:10009/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/btcpays": { - "success": true, + "result": [] }, "http://api:api@localhost:10009/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42": { - "success": true, + "result": [] }, "http://api:api@localhost:10009/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42/matches": { - "success": true, + "result": [] }, "http://api:api@localhost:10009/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42/resolutions": { - "success": true, + "result": [] }, "http://api:api@localhost:10009/burns": { - "success": true, + "result": [ { "tx_index": 1, @@ -1299,15 +1299,15 @@ ] }, "http://api:api@localhost:10009/dispensers/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { - "success": true, + "result": [] }, "http://api:api@localhost:10009/dispensers/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/dispenses": { - "success": true, + "result": [] }, "http://api:api@localhost:10009/events?limit=5": { - "success": true, + "result": [ { "event_index": 1237, @@ -1378,7 +1378,7 @@ ] }, "http://api:api@localhost:10009/events/10?limit=5": { - "success": true, + "result": [ { "event_index": 10, @@ -1395,7 +1395,7 @@ ] }, "http://api:api@localhost:10009/events/counts?limit=5": { - "success": true, + "result": [ { "event": "ASSET_CREATION", @@ -1484,7 +1484,7 @@ ] }, "http://api:api@localhost:10009/events/CREDIT?limit=5": { - "success": true, + "result": [ { "event_index": 1231, diff --git a/counterparty-core/tools/apicache.json b/counterparty-core/tools/apicache.json index d9c4f0d0a3..e480663355 100644 --- a/counterparty-core/tools/apicache.json +++ b/counterparty-core/tools/apicache.json @@ -1,6 +1,6 @@ { "/blocks//events": { - "success": true, + "result": [ { "event_index": 14194760, @@ -127,7 +127,7 @@ ] }, "/blocks//events/counts": { - "success": true, + "result": [ { "event": "ASSET_CREATION", @@ -164,7 +164,7 @@ ] }, "/blocks//events/": { - "success": true, + "result": [ { "event_index": 14194758, @@ -184,7 +184,7 @@ ] }, "/blocks//credits": { - "success": true, + "result": [ { "block_index": 840464, @@ -198,7 +198,7 @@ ] }, "/blocks//debits": { - "success": true, + "result": [ { "block_index": 840464, @@ -212,7 +212,7 @@ ] }, "/blocks//expirations": { - "success": true, + "result": [ { "type": "order", @@ -225,7 +225,7 @@ ] }, "/blocks//cancels": { - "success": true, + "result": [ { "tx_index": 2725738, @@ -246,7 +246,7 @@ ] }, "/blocks//destructions": { - "success": true, + "result": [ { "tx_index": 2726496, @@ -261,7 +261,7 @@ ] }, "/blocks//issuances": { - "success": true, + "result": [ { "tx_index": 2726605, @@ -287,7 +287,7 @@ ] }, "/blocks//sends": { - "success": true, + "result": [ { "tx_index": 2726604, @@ -304,7 +304,7 @@ ] }, "/blocks//dispenses": { - "success": true, + "result": [ { "tx_index": 2726580, @@ -320,7 +320,7 @@ ] }, "/blocks//sweeps": { - "success": true, + "result": [ { "tx_index": 2720536, @@ -347,7 +347,7 @@ ] }, "/transactions/info": { - "success": true, + "result": { "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", "destination": "", @@ -375,7 +375,7 @@ } }, "/transactions/unpack": { - "success": true, + "result": { "message_type": "issuance", "message_type_id": 22, @@ -396,7 +396,7 @@ } }, "/transactions/": { - "success": true, + "result": { "tx_index": 2726605, "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", @@ -412,7 +412,7 @@ } }, "/addresses/
/balances": { - "success": true, + "result": [ { "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", @@ -422,7 +422,7 @@ ] }, "/addresses/
/balances/": { - "success": true, + "result": { "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", "asset": "XCP", @@ -430,7 +430,7 @@ } }, "/addresses/
/credits": { - "success": true, + "result": [ { "block_index": 830981, @@ -444,7 +444,7 @@ ] }, "/addresses/
/debits": { - "success": true, + "result": [ { "block_index": 836949, @@ -467,7 +467,7 @@ ] }, "/addresses/
/bets": { - "success": true, + "result": [ { "tx_index": 15106, @@ -510,7 +510,7 @@ ] }, "/addresses/
/broadcasts": { - "success": true, + "result": [ { "tx_index": 15055, @@ -539,7 +539,7 @@ ] }, "/addresses/
/burns": { - "success": true, + "result": [ { "tx_index": 3070, @@ -553,7 +553,7 @@ ] }, "/addresses/
/sends": { - "success": true, + "result": [ { "tx_index": 163106, @@ -570,7 +570,7 @@ ] }, "/addresses/
/receives": { - "success": true, + "result": [ { "tx_index": 2677412, @@ -587,7 +587,7 @@ ] }, "/addresses/
/sends/": { - "success": true, + "result": [ { "tx_index": 163106, @@ -604,7 +604,7 @@ ] }, "/addresses/
/receives/": { - "success": true, + "result": [ { "tx_index": 2677412, @@ -621,7 +621,7 @@ ] }, "/addresses/
/dispensers": { - "success": true, + "result": [ { "tx_index": 2726460, @@ -642,7 +642,7 @@ ] }, "/addresses/
/dispensers/": { - "success": true, + "result": [ { "tx_index": 2726460, @@ -663,7 +663,7 @@ ] }, "/addresses/
/sweeps": { - "success": true, + "result": [ { "tx_index": 2720537, @@ -679,7 +679,7 @@ ] }, "/addresses/
/compose/btcpay": { - "success": true, + "result": { "rawtransaction": "0200000000010161101e1990879ee64168cce92c9caf338bb571e9cb246b1c2ab87124b95091900200000016001482f2ccc569325050e36c13b55a4065113d985066ffffffff0383c3040000000000160014a9943f67bcd30331d5a4ec6d902cbe03789a1b9700000000000000004b6a49aae396d448ed266a7785be1f6fcfa38dbe3e6e043e3d67691f678d6aa3b30e423f66ffad71eaf3231ef8f05dd5cc2f5b1ea14d33274b9cddacca5bd816a1ce6d5b4d498eb66a981db7add758000000000016001482f2ccc569325050e36c13b55a4065113d98506602000000000000", "params": { @@ -690,7 +690,7 @@ } }, "/assets": { - "success": true, + "result": [ { "asset": "A100000000000000000", @@ -715,7 +715,7 @@ ] }, "/assets/": { - "success": true, + "result": { "asset": "UNNEGOTIABLE", "asset_longname": null, @@ -729,7 +729,7 @@ } }, "/assets//balances": { - "success": true, + "result": [ { "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -739,7 +739,7 @@ ] }, "/assets//balances/
": { - "success": true, + "result": { "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", "asset": "XCP", @@ -747,7 +747,7 @@ } }, "/assets//orders": { - "success": true, + "result": [ { "tx_index": 825373, @@ -961,7 +961,7 @@ ] }, "/assets//credits": { - "success": true, + "result": [ { "block_index": 840464, @@ -975,7 +975,7 @@ ] }, "/assets//debits": { - "success": true, + "result": [ { "block_index": 280091, @@ -1025,7 +1025,7 @@ ] }, "/assets//dividends": { - "success": true, + "result": [ { "tx_index": 1914456, @@ -1162,7 +1162,7 @@ ] }, "/assets//issuances": { - "success": true, + "result": [ { "tx_index": 2726605, @@ -1188,7 +1188,7 @@ ] }, "/assets//sends": { - "success": true, + "result": [ { "tx_index": 729, @@ -1253,7 +1253,7 @@ ] }, "/assets//dispensers": { - "success": true, + "result": [ { "tx_index": 2726460, @@ -1274,7 +1274,7 @@ ] }, "/assets//dispensers/
": { - "success": true, + "result": [ { "tx_index": 2726460, @@ -1295,7 +1295,7 @@ ] }, "/assets//holders": { - "success": true, + "result": [ { "address": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", @@ -1340,7 +1340,7 @@ ] }, "/orders/": { - "success": true, + "result": [ { "tx_index": 2724132, @@ -1364,7 +1364,7 @@ ] }, "/orders//matches": { - "success": true, + "result": [ { "id": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776_5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947", @@ -1390,7 +1390,7 @@ ] }, "/orders//btcpays": { - "success": true, + "result": [ { "tx_index": 2719343, @@ -1405,7 +1405,7 @@ ] }, "/bets/": { - "success": true, + "result": [ { "tx_index": 15106, @@ -1429,7 +1429,7 @@ ] }, "/bets//matches": { - "success": true, + "result": [ { "id": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed_cb5f888c299a50967d523513daed71636d927e6ef3dbda85feb11ff112ae4330", @@ -1460,7 +1460,7 @@ ] }, "/bets//resolutions": { - "success": true, + "result": [ { "bet_match_id": "36bbbb7dbd85054dac140a8ad8204eda2ee859545528bd2a9da69ad77c277ace_d70ee4e44f02fe6258ee0c267f33f304a0fc61d4ce424852f58c28967dc1924f", @@ -1476,7 +1476,7 @@ ] }, "/burns": { - "success": true, + "result": [ { "tx_index": 10, @@ -1526,7 +1526,7 @@ ] }, "/dispensers/": { - "success": true, + "result": [ { "tx_index": 2536311, @@ -1548,7 +1548,7 @@ ] }, "/dispensers//dispenses": { - "success": true, + "result": [ { "tx_index": 2610745, @@ -1575,7 +1575,7 @@ ] }, "/events": { - "success": true, + "result": [ { "event_index": 10665092, @@ -1649,7 +1649,7 @@ ] }, "/events/": { - "success": true, + "result": [ { "event_index": 10665092, @@ -1665,7 +1665,7 @@ ] }, "/events/counts": { - "success": true, + "result": [ { "event": "ASSET_CREATION", @@ -1858,7 +1858,7 @@ ] }, "/events/": { - "success": true, + "result": [ { "event_index": 10665090, @@ -1938,7 +1938,7 @@ ] }, "/addresses/
/compose/broadcast": { - "success": true, + "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0200000000000000002b6a290d1e454cefefcbe17b1100cb21d3398ec45d2594e5d1d822df41d03a332741261ce2f9aee7827cd91c340c0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -1952,7 +1952,7 @@ } }, "/addresses/
/compose/bet": { - "success": true, + "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0322020000000000001976a914bce6191bf2fd5981313cae869e9fafe164f7dbaf88ac0000000000000000316a2f0d1e454cefefcbe14dffa4c01ecd608ec45d2594e5d27c699f4ef2725648c509bf828ec195ee18f83e052061236deff2db0306000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -1970,7 +1970,7 @@ } }, "/addresses/
/compose/burn": { - "success": true, + "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff02e8030000000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ace61b0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -1982,7 +1982,7 @@ } }, "/addresses/
/compose/cancel": { - "success": true, + "result": { "rawtransaction": "01000000014709bd6af5d4d7f518f80539d4fe9acd5220a520a7b4287416a7379af9e66154020000001976a91432dff6deb7ca3bbc14f7037fa6ef8a8cf8e39fb988acffffffff0200000000000000002b6a292f3720d2b8ae7343c6d0456802c531e1216f466ceb12b96c6fbe417a97291a0660e51fc47fcc1ee1a878667900000000001976a91432dff6deb7ca3bbc14f7037fa6ef8a8cf8e39fb988ac00000000", "params": { @@ -1993,7 +1993,7 @@ } }, "/addresses/
/compose/destroy": { - "success": true, + "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000226a200d1e454cefefcbe10bffa672ce93608ec55d2594e5d1946a776c900731380c6b94160406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -2006,7 +2006,7 @@ } }, "/addresses/
/compose/dispenser": { - "success": true, + "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0200000000000000002c6a2a0d1e454cefefcbe169ffa672ce93608ec55d2594e5d1946a774ef272564b2d4ad8c28ec195ee18f85a160c0b0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -2023,7 +2023,7 @@ } }, "/addresses/
/compose/dividend": { - "success": true, + "result": { "rawtransaction": "01000000010af94458ae5aa794c49cd27f7b800a7c68c8dd4f59ff66c99db4e9e353c06d93010000001976a914a9055398b92818794b38b15794096f752167e25f88acffffffff020000000000000000236a21068a00268d252c3a8ed0bddb5ef79f823894aa7de1e196c005510f4d787c936a979b230000000000001976a914a9055398b92818794b38b15794096f752167e25f88ac00000000", "params": { @@ -2036,7 +2036,7 @@ } }, "/addresses/
/compose/issuance": { - "success": true, + "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0322020000000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac0000000000000000236a210d1e454cefefcbe173ffa672cf3a36751b5d2594e5d1946a774ff272960578057c17ec0306000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -2053,7 +2053,7 @@ } }, "/addresses/
/compose/mpma": { - "success": true, + "result": { "rawtransaction": "0100000001fc9b7b3a0552bdfc3c62096e9d7669fb72d5482c7b4f9618138fdffdc831d60b000000001976a914a39dbfab6f1da182af53a4d14799ee545a6176be88acffffffff04e80300000000000069512103ce014780415d0eafbdadfacfa0cf2604a005a87157042f277627c952eedcbb1f2103abf2b72459ee70e6240a7b2ade1a6fa41c7f38cc1db5e63c6f92c01b859017ee2102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53aee80300000000000069512102ce014780415d0eafbd2fcbf00e308d420b59df89ebba83369fea96a9a06fcf562102373ec5e1389ccadf0a972ec451f8aea015104ded7a57b936d374d0ecfe8067412102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53aee80300000000000069512103d0014780415d0eafbd76dacca0b613dda4b8f37e3015031f11220ac5cf43ef4e21034051b78cdcbde85f0c120261e6ab383015104ded7a57b93cd374d900776d4e132102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53ae22fd0200000000001976a914a39dbfab6f1da182af53a4d14799ee545a6176be88ac00000000", "params": { @@ -2082,7 +2082,7 @@ } }, "/addresses/
/compose/order": { - "success": true, + "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000356a330d1e454cefefcbe16fffa672ce93608ec55d2594e5d1946a774ef2724a2a4f457bc28ec195ee18fbd616f461236d8be718616dac000406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -2098,7 +2098,7 @@ } }, "/addresses/
/compose/send": { - "success": true, + "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000306a2e0d1e454cefefcbe167ffa672ce93608ec55d2594e5d1946a774e4e944f50dfb46943bffd3b68866791f7f496f8c270060406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -2114,7 +2114,7 @@ } }, "/addresses/
/compose/sweep": { - "success": true, + "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000236a210d1e454cefefcbe161ff1a94d78892739ddc14a84b570af630af96858de42ab6cf6e150406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -2127,7 +2127,7 @@ } }, "/mempool/events": { - "success": true, + "result": [ { "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e", @@ -2172,7 +2172,7 @@ ] }, "/mempool/events/": { - "success": true, + "result": [ { "tx_hash": "90ba95c4578b9ab7866515d66736c5b4132e88a0bd9b0fca7b2f1be830a1bb81", @@ -2219,7 +2219,7 @@ ] }, "/backend/addresses/
/transactions": { - "success": true, + "result": [ { "tx_hash": "eae4f1dba4d75bda9dd0de12f69a980be267bbc16b7a280a2a4b40c4b3bbb70a" @@ -2260,14 +2260,14 @@ ] }, "/backend/addresses/
/transactions/oldest": { - "success": true, + "result": { "block_index": 833187, "tx_hash": "2c8bc3eede9ec60d26c6fd7f44829adc64da593552044a28c673022220f560c3" } }, "/backend/addresses/
/utxos": { - "success": true, + "result": [ { "vout": 6, @@ -2352,11 +2352,11 @@ ] }, "/backend/addresses/
/pubkey": { - "success": true, + "result": "0388ef0905568d425f1ffd4031d93dda4ef0e220c9b5fc4a6cbaf11544c4a5ca49" }, "/backend/transactions/": { - "success": true, + "result": { "txid": "3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018", "hash": "417c24d7a5539bc5b8496e26528382ac297a85a1c6b891b220f72712405ec300", @@ -2401,7 +2401,7 @@ } }, "/blocks": { - "success": true, + "result": [ { "block_index": 840000, @@ -2426,7 +2426,7 @@ ] }, "/blocks/": { - "success": true, + "result": { "block_index": 840464, "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", @@ -2439,7 +2439,7 @@ } }, "/blocks//transactions": { - "success": true, + "result": [ { "tx_index": 2726605, @@ -2457,13 +2457,13 @@ ] }, "/healthz": { - "success": true, + "result": { "status": "Healthy" } }, "/backend/estimatesmartfee": { - "success": true, + "result": 295443 } } \ No newline at end of file From 99ef6006f83125c88dbc6a3a1a5a00343cd96623 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 11:24:32 +0200 Subject: [PATCH 106/280] Remove success and add root path in doc --- counterparty-core/tools/apicache.json | 80 --------------------------- counterparty-core/tools/genapidoc.py | 24 +++++++- 2 files changed, 22 insertions(+), 82 deletions(-) diff --git a/counterparty-core/tools/apicache.json b/counterparty-core/tools/apicache.json index e480663355..328752d285 100644 --- a/counterparty-core/tools/apicache.json +++ b/counterparty-core/tools/apicache.json @@ -1,6 +1,5 @@ { "/blocks//events": { - "result": [ { "event_index": 14194760, @@ -127,7 +126,6 @@ ] }, "/blocks//events/counts": { - "result": [ { "event": "ASSET_CREATION", @@ -164,7 +162,6 @@ ] }, "/blocks//events/": { - "result": [ { "event_index": 14194758, @@ -184,7 +181,6 @@ ] }, "/blocks//credits": { - "result": [ { "block_index": 840464, @@ -198,7 +194,6 @@ ] }, "/blocks//debits": { - "result": [ { "block_index": 840464, @@ -212,7 +207,6 @@ ] }, "/blocks//expirations": { - "result": [ { "type": "order", @@ -225,7 +219,6 @@ ] }, "/blocks//cancels": { - "result": [ { "tx_index": 2725738, @@ -246,7 +239,6 @@ ] }, "/blocks//destructions": { - "result": [ { "tx_index": 2726496, @@ -261,7 +253,6 @@ ] }, "/blocks//issuances": { - "result": [ { "tx_index": 2726605, @@ -287,7 +278,6 @@ ] }, "/blocks//sends": { - "result": [ { "tx_index": 2726604, @@ -304,7 +294,6 @@ ] }, "/blocks//dispenses": { - "result": [ { "tx_index": 2726580, @@ -320,7 +309,6 @@ ] }, "/blocks//sweeps": { - "result": [ { "tx_index": 2720536, @@ -347,7 +335,6 @@ ] }, "/transactions/info": { - "result": { "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", "destination": "", @@ -375,7 +362,6 @@ } }, "/transactions/unpack": { - "result": { "message_type": "issuance", "message_type_id": 22, @@ -396,7 +382,6 @@ } }, "/transactions/": { - "result": { "tx_index": 2726605, "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", @@ -412,7 +397,6 @@ } }, "/addresses/
/balances": { - "result": [ { "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", @@ -422,7 +406,6 @@ ] }, "/addresses/
/balances/": { - "result": { "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", "asset": "XCP", @@ -430,7 +413,6 @@ } }, "/addresses/
/credits": { - "result": [ { "block_index": 830981, @@ -444,7 +426,6 @@ ] }, "/addresses/
/debits": { - "result": [ { "block_index": 836949, @@ -467,7 +448,6 @@ ] }, "/addresses/
/bets": { - "result": [ { "tx_index": 15106, @@ -510,7 +490,6 @@ ] }, "/addresses/
/broadcasts": { - "result": [ { "tx_index": 15055, @@ -539,7 +518,6 @@ ] }, "/addresses/
/burns": { - "result": [ { "tx_index": 3070, @@ -553,7 +531,6 @@ ] }, "/addresses/
/sends": { - "result": [ { "tx_index": 163106, @@ -570,7 +547,6 @@ ] }, "/addresses/
/receives": { - "result": [ { "tx_index": 2677412, @@ -587,7 +563,6 @@ ] }, "/addresses/
/sends/": { - "result": [ { "tx_index": 163106, @@ -604,7 +579,6 @@ ] }, "/addresses/
/receives/": { - "result": [ { "tx_index": 2677412, @@ -621,7 +595,6 @@ ] }, "/addresses/
/dispensers": { - "result": [ { "tx_index": 2726460, @@ -642,7 +615,6 @@ ] }, "/addresses/
/dispensers/": { - "result": [ { "tx_index": 2726460, @@ -663,7 +635,6 @@ ] }, "/addresses/
/sweeps": { - "result": [ { "tx_index": 2720537, @@ -679,7 +650,6 @@ ] }, "/addresses/
/compose/btcpay": { - "result": { "rawtransaction": "0200000000010161101e1990879ee64168cce92c9caf338bb571e9cb246b1c2ab87124b95091900200000016001482f2ccc569325050e36c13b55a4065113d985066ffffffff0383c3040000000000160014a9943f67bcd30331d5a4ec6d902cbe03789a1b9700000000000000004b6a49aae396d448ed266a7785be1f6fcfa38dbe3e6e043e3d67691f678d6aa3b30e423f66ffad71eaf3231ef8f05dd5cc2f5b1ea14d33274b9cddacca5bd816a1ce6d5b4d498eb66a981db7add758000000000016001482f2ccc569325050e36c13b55a4065113d98506602000000000000", "params": { @@ -690,7 +660,6 @@ } }, "/assets": { - "result": [ { "asset": "A100000000000000000", @@ -715,7 +684,6 @@ ] }, "/assets/": { - "result": { "asset": "UNNEGOTIABLE", "asset_longname": null, @@ -729,7 +697,6 @@ } }, "/assets//balances": { - "result": [ { "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -739,7 +706,6 @@ ] }, "/assets//balances/
": { - "result": { "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", "asset": "XCP", @@ -747,7 +713,6 @@ } }, "/assets//orders": { - "result": [ { "tx_index": 825373, @@ -961,7 +926,6 @@ ] }, "/assets//credits": { - "result": [ { "block_index": 840464, @@ -975,7 +939,6 @@ ] }, "/assets//debits": { - "result": [ { "block_index": 280091, @@ -1025,7 +988,6 @@ ] }, "/assets//dividends": { - "result": [ { "tx_index": 1914456, @@ -1162,7 +1124,6 @@ ] }, "/assets//issuances": { - "result": [ { "tx_index": 2726605, @@ -1188,7 +1149,6 @@ ] }, "/assets//sends": { - "result": [ { "tx_index": 729, @@ -1253,7 +1213,6 @@ ] }, "/assets//dispensers": { - "result": [ { "tx_index": 2726460, @@ -1274,7 +1233,6 @@ ] }, "/assets//dispensers/
": { - "result": [ { "tx_index": 2726460, @@ -1295,7 +1253,6 @@ ] }, "/assets//holders": { - "result": [ { "address": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", @@ -1340,7 +1297,6 @@ ] }, "/orders/": { - "result": [ { "tx_index": 2724132, @@ -1364,7 +1320,6 @@ ] }, "/orders//matches": { - "result": [ { "id": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776_5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947", @@ -1390,7 +1345,6 @@ ] }, "/orders//btcpays": { - "result": [ { "tx_index": 2719343, @@ -1405,7 +1359,6 @@ ] }, "/bets/": { - "result": [ { "tx_index": 15106, @@ -1429,7 +1382,6 @@ ] }, "/bets//matches": { - "result": [ { "id": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed_cb5f888c299a50967d523513daed71636d927e6ef3dbda85feb11ff112ae4330", @@ -1460,7 +1412,6 @@ ] }, "/bets//resolutions": { - "result": [ { "bet_match_id": "36bbbb7dbd85054dac140a8ad8204eda2ee859545528bd2a9da69ad77c277ace_d70ee4e44f02fe6258ee0c267f33f304a0fc61d4ce424852f58c28967dc1924f", @@ -1476,7 +1427,6 @@ ] }, "/burns": { - "result": [ { "tx_index": 10, @@ -1526,7 +1476,6 @@ ] }, "/dispensers/": { - "result": [ { "tx_index": 2536311, @@ -1548,7 +1497,6 @@ ] }, "/dispensers//dispenses": { - "result": [ { "tx_index": 2610745, @@ -1575,7 +1523,6 @@ ] }, "/events": { - "result": [ { "event_index": 10665092, @@ -1649,7 +1596,6 @@ ] }, "/events/": { - "result": [ { "event_index": 10665092, @@ -1665,7 +1611,6 @@ ] }, "/events/counts": { - "result": [ { "event": "ASSET_CREATION", @@ -1858,7 +1803,6 @@ ] }, "/events/": { - "result": [ { "event_index": 10665090, @@ -1938,7 +1882,6 @@ ] }, "/addresses/
/compose/broadcast": { - "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0200000000000000002b6a290d1e454cefefcbe17b1100cb21d3398ec45d2594e5d1d822df41d03a332741261ce2f9aee7827cd91c340c0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -1952,7 +1895,6 @@ } }, "/addresses/
/compose/bet": { - "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0322020000000000001976a914bce6191bf2fd5981313cae869e9fafe164f7dbaf88ac0000000000000000316a2f0d1e454cefefcbe14dffa4c01ecd608ec45d2594e5d27c699f4ef2725648c509bf828ec195ee18f83e052061236deff2db0306000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -1970,7 +1912,6 @@ } }, "/addresses/
/compose/burn": { - "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff02e8030000000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ace61b0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -1982,7 +1923,6 @@ } }, "/addresses/
/compose/cancel": { - "result": { "rawtransaction": "01000000014709bd6af5d4d7f518f80539d4fe9acd5220a520a7b4287416a7379af9e66154020000001976a91432dff6deb7ca3bbc14f7037fa6ef8a8cf8e39fb988acffffffff0200000000000000002b6a292f3720d2b8ae7343c6d0456802c531e1216f466ceb12b96c6fbe417a97291a0660e51fc47fcc1ee1a878667900000000001976a91432dff6deb7ca3bbc14f7037fa6ef8a8cf8e39fb988ac00000000", "params": { @@ -1993,7 +1933,6 @@ } }, "/addresses/
/compose/destroy": { - "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000226a200d1e454cefefcbe10bffa672ce93608ec55d2594e5d1946a776c900731380c6b94160406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -2006,7 +1945,6 @@ } }, "/addresses/
/compose/dispenser": { - "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0200000000000000002c6a2a0d1e454cefefcbe169ffa672ce93608ec55d2594e5d1946a774ef272564b2d4ad8c28ec195ee18f85a160c0b0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -2023,7 +1961,6 @@ } }, "/addresses/
/compose/dividend": { - "result": { "rawtransaction": "01000000010af94458ae5aa794c49cd27f7b800a7c68c8dd4f59ff66c99db4e9e353c06d93010000001976a914a9055398b92818794b38b15794096f752167e25f88acffffffff020000000000000000236a21068a00268d252c3a8ed0bddb5ef79f823894aa7de1e196c005510f4d787c936a979b230000000000001976a914a9055398b92818794b38b15794096f752167e25f88ac00000000", "params": { @@ -2036,7 +1973,6 @@ } }, "/addresses/
/compose/issuance": { - "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0322020000000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac0000000000000000236a210d1e454cefefcbe173ffa672cf3a36751b5d2594e5d1946a774ff272960578057c17ec0306000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -2053,7 +1989,6 @@ } }, "/addresses/
/compose/mpma": { - "result": { "rawtransaction": "0100000001fc9b7b3a0552bdfc3c62096e9d7669fb72d5482c7b4f9618138fdffdc831d60b000000001976a914a39dbfab6f1da182af53a4d14799ee545a6176be88acffffffff04e80300000000000069512103ce014780415d0eafbdadfacfa0cf2604a005a87157042f277627c952eedcbb1f2103abf2b72459ee70e6240a7b2ade1a6fa41c7f38cc1db5e63c6f92c01b859017ee2102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53aee80300000000000069512102ce014780415d0eafbd2fcbf00e308d420b59df89ebba83369fea96a9a06fcf562102373ec5e1389ccadf0a972ec451f8aea015104ded7a57b936d374d0ecfe8067412102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53aee80300000000000069512103d0014780415d0eafbd76dacca0b613dda4b8f37e3015031f11220ac5cf43ef4e21034051b78cdcbde85f0c120261e6ab383015104ded7a57b93cd374d900776d4e132102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53ae22fd0200000000001976a914a39dbfab6f1da182af53a4d14799ee545a6176be88ac00000000", "params": { @@ -2082,7 +2017,6 @@ } }, "/addresses/
/compose/order": { - "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000356a330d1e454cefefcbe16fffa672ce93608ec55d2594e5d1946a774ef2724a2a4f457bc28ec195ee18fbd616f461236d8be718616dac000406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -2098,7 +2032,6 @@ } }, "/addresses/
/compose/send": { - "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000306a2e0d1e454cefefcbe167ffa672ce93608ec55d2594e5d1946a774e4e944f50dfb46943bffd3b68866791f7f496f8c270060406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -2114,7 +2047,6 @@ } }, "/addresses/
/compose/sweep": { - "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000236a210d1e454cefefcbe161ff1a94d78892739ddc14a84b570af630af96858de42ab6cf6e150406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -2127,7 +2059,6 @@ } }, "/mempool/events": { - "result": [ { "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e", @@ -2172,7 +2103,6 @@ ] }, "/mempool/events/": { - "result": [ { "tx_hash": "90ba95c4578b9ab7866515d66736c5b4132e88a0bd9b0fca7b2f1be830a1bb81", @@ -2219,7 +2149,6 @@ ] }, "/backend/addresses/
/transactions": { - "result": [ { "tx_hash": "eae4f1dba4d75bda9dd0de12f69a980be267bbc16b7a280a2a4b40c4b3bbb70a" @@ -2260,14 +2189,12 @@ ] }, "/backend/addresses/
/transactions/oldest": { - "result": { "block_index": 833187, "tx_hash": "2c8bc3eede9ec60d26c6fd7f44829adc64da593552044a28c673022220f560c3" } }, "/backend/addresses/
/utxos": { - "result": [ { "vout": 6, @@ -2352,11 +2279,9 @@ ] }, "/backend/addresses/
/pubkey": { - "result": "0388ef0905568d425f1ffd4031d93dda4ef0e220c9b5fc4a6cbaf11544c4a5ca49" }, "/backend/transactions/": { - "result": { "txid": "3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018", "hash": "417c24d7a5539bc5b8496e26528382ac297a85a1c6b891b220f72712405ec300", @@ -2401,7 +2326,6 @@ } }, "/blocks": { - "result": [ { "block_index": 840000, @@ -2426,7 +2350,6 @@ ] }, "/blocks/": { - "result": { "block_index": 840464, "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", @@ -2439,7 +2362,6 @@ } }, "/blocks//transactions": { - "result": [ { "tx_index": 2726605, @@ -2457,13 +2379,11 @@ ] }, "/healthz": { - "result": { "status": "Healthy" } }, "/backend/estimatesmartfee": { - "result": 295443 } } \ No newline at end of file diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index 1a4119bbcf..471dbb5d41 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -5,7 +5,7 @@ from counterpartycore import server CURR_DIR = os.path.dirname(os.path.realpath(__file__)) -API_DOC_FILE = os.path.join(CURR_DIR, "../../../Documentation/docs/advanced/api/rest.md") +API_DOC_FILE = os.path.join(CURR_DIR, "../../../Documentation/docs/advanced/api-v2/rest.md") CACHE_FILE = os.path.join(CURR_DIR, "apicache.json") API_ROOT = "http://api:api@localhost:4000" USE_API_CACHE = True @@ -64,7 +64,6 @@ def get_example_output(path, args): ``` { - "success": , "error": , "result": } @@ -72,6 +71,27 @@ def get_example_output(path, args): - Routes in the `/backend` group serve as a proxy to make requests to AddrindexRS. +## Root Path + +### Get Server Info [`/`] + +Returns server information and the list of documented routes in JSON format. + ++ Response 200 (application/json) + + ``` + { + "server_ready": true, + "network": "mainnet", + "version": "10.1.1", + "backend_height": 840796, + "counterparty_height": 840796, + "routes": [ + + ] + } + ``` + """ cache = {} From 56ff76a1be541632c9074f2865304d135544b6af Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 11:30:46 +0200 Subject: [PATCH 107/280] Don't indent json result; Fix typo --- counterparty-core/counterpartycore/lib/api/api_server.py | 2 +- counterparty-core/counterpartycore/lib/api/util.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index ada0732536..9919763e8f 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -52,7 +52,7 @@ def verify_password(username, password): def api_root(): counterparty_height = blocks.last_db_index(get_db()) routes = [] - for path, route in ROUTES.item(): + for path, route in ROUTES.items(): routes.append( { "path": path, diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index e7fb53bf8d..139fff1fbb 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -223,5 +223,5 @@ def default(self, o): return super().default(o) -def to_json(obj): - return json.dumps(obj, cls=ApiJsonEncoder, indent=4) +def to_json(obj, indent=None): + return json.dumps(obj, cls=ApiJsonEncoder, indent=indent) From 611b2636a87f517f6564f41f63895b7898641116 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 11:33:51 +0200 Subject: [PATCH 108/280] tweak indentation --- counterparty-core/tools/genapidoc.py | 40 ++++++++++++++-------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index 471dbb5d41..2e647460c4 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -62,12 +62,12 @@ def get_example_output(path, args): - All API responses follow the following format: -``` -{ - "error": , - "result": -} -``` + ``` + { + "error": , + "result": + } + ``` - Routes in the `/backend` group serve as a proxy to make requests to AddrindexRS. @@ -79,18 +79,18 @@ def get_example_output(path, args): + Response 200 (application/json) - ``` - { - "server_ready": true, - "network": "mainnet", - "version": "10.1.1", - "backend_height": 840796, - "counterparty_height": 840796, - "routes": [ - - ] - } - ``` + ``` + { + "server_ready": true, + "network": "mainnet", + "version": "10.1.1", + "backend_height": 840796, + "counterparty_height": 840796, + "routes": [ + + ] + } + ``` """ @@ -132,10 +132,10 @@ def get_example_output(path, args): example_output = cache[path] example_output_json = json.dumps(example_output, indent=4) md += "\n+ Response 200 (application/json)\n\n" - md += " ```\n" + md += " ```\n" for line in example_output_json.split("\n"): md += f" {line}\n" - md += " ```\n" + md += " ```\n" with open(CACHE_FILE, "w") as f: json.dump(cache, f, indent=4) From b71b1fe419920ebb914ac29b19d2b535fda4e389 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 11:59:08 +0200 Subject: [PATCH 109/280] order_hash, bet_hash and dispenser_hash instead tx_hash in routes --- .../counterpartycore/lib/api/routes.py | 16 +++---- .../counterpartycore/lib/ledger.py | 48 +++++++++---------- .../counterpartycore/lib/messages/bet.py | 2 +- .../counterpartycore/lib/messages/cancel.py | 4 +- .../counterpartycore/lib/messages/order.py | 14 +++--- .../counterpartycore/test/api_v2_test.py | 14 ++---- 6 files changed, 47 insertions(+), 51 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index 93cf7358e5..db34f1f0a5 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -72,18 +72,18 @@ "/assets//dispensers/
": ledger.get_dispensers_by_address_and_asset, "/assets//holders": ledger.get_asset_holders, ### /orders ### - "/orders/": ledger.get_order, - "/orders//matches": ledger.get_order_matches_by_order, - "/orders//btcpays": ledger.get_btcpays_by_order, + "/orders/": ledger.get_order, + "/orders//matches": ledger.get_order_matches_by_order, + "/orders//btcpays": ledger.get_btcpays_by_order, ### /bets ### - "/bets/": ledger.get_bet, - "/bets//matches": ledger.get_bet_matches_by_bet, - "/bets//resolutions": ledger.get_resolutions_by_bet, + "/bets/": ledger.get_bet, + "/bets//matches": ledger.get_bet_matches_by_bet, + "/bets//resolutions": ledger.get_resolutions_by_bet, ### /burns ### "/burns": ledger.get_all_burns, ### /dispensers ### - "/dispensers/": ledger.get_dispenser_info_by_tx_hash, - "/dispensers//dispenses": ledger.get_dispenses_by_dispenser, + "/dispensers/": ledger.get_dispenser_info_by_hash, + "/dispensers//dispenses": ledger.get_dispenses_by_dispenser, ### /events ### "/events": ledger.get_all_events, "/events/": ledger.get_event_by_index, diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index d3ab2603a8..19f731a1a8 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -1673,12 +1673,12 @@ def get_dispenser_info(db, tx_hash=None, tx_index=None): return cursor.fetchall() -def get_dispenser_info_by_tx_hash(db, tx_hash: str): +def get_dispenser_info_by_hash(db, dispenser_hash: str): """ Returns the dispenser information by tx_hash - :param str tx_hash: The hash of the dispenser to return (e.g. 753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a) + :param str dispenser_hash: The hash of the dispenser to return (e.g. 753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a) """ - return get_dispenser_info(db, tx_hash=tx_hash) + return get_dispenser_info(db, tx_hash=dispenser_hash) def get_refilling_count(db, dispenser_tx_hash): @@ -1899,12 +1899,12 @@ def get_dispenses_by_block(db, block_index: int): return get_dispenses(db, block_index=block_index) -def get_dispenses_by_dispenser(db, tx_hash: str): +def get_dispenses_by_dispenser(db, dispenser_hash: str): """ Returns the dispenses of a dispenser - :param str tx_hash: The hash of the dispenser to return (e.g. 753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a) + :param str dispenser_hash: The hash of the dispenser to return (e.g. 753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a) """ - return get_dispenses(db, dispenser_tx_hash=tx_hash) + return get_dispenses(db, dispenser_tx_hash=dispenser_hash) ### UPDATES ### @@ -1961,10 +1961,10 @@ def get_bet_matches_to_expire(db, block_time): return cursor.fetchall() -def get_bet(db, tx_hash: str): +def get_bet(db, bet_hash: str): """ Returns the information of a bet - :param str tx_hash: The hash of the bet to return (e.g. 5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed) + :param str bet_hash: The hash of the transaction that created the bet (e.g. 5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed) """ cursor = db.cursor() query = """ @@ -1972,7 +1972,7 @@ def get_bet(db, tx_hash: str): WHERE tx_hash = ? ORDER BY rowid DESC LIMIT 1 """ - bindings = (tx_hash,) + bindings = (bet_hash,) cursor.execute(query, bindings) return cursor.fetchall() @@ -2030,10 +2030,10 @@ def get_bet_by_feed(db, address: str, status: str = "open"): return cursor.fetchall() -def get_bet_matches_by_bet(db, tx_hash: str, status: str = "pending"): +def get_bet_matches_by_bet(db, bet_hash: str, status: str = "pending"): """ Returns the bet matches of a bet - :param str tx_hash: The hash of the bet (e.g. 5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed) + :param str bet_hash: The hash of the transaction that created the bet (e.g. 5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed) :param str status: The status of the bet matches (e.g. expired) """ cursor = db.cursor() @@ -2045,15 +2045,15 @@ def get_bet_matches_by_bet(db, tx_hash: str, status: str = "pending"): GROUP BY id ) WHERE status = ? """ - bindings = (tx_hash, tx_hash, status) + bindings = (bet_hash, bet_hash, status) cursor.execute(query, bindings) return cursor.fetchall() -def get_resolutions_by_bet(db, tx_hash: str): +def get_resolutions_by_bet(db, bet_hash: str): """ Returns the resolutions of a bet - :param str tx_hash: The hash of the bet (e.g. 36bbbb7dbd85054dac140a8ad8204eda2ee859545528bd2a9da69ad77c277ace) + :param str bet_hash: The hash of the transaction that created the bet (e.g. 36bbbb7dbd85054dac140a8ad8204eda2ee859545528bd2a9da69ad77c277ace) """ cursor = db.cursor() query = """ @@ -2061,7 +2061,7 @@ def get_resolutions_by_bet(db, tx_hash: str): FROM bet_match_resolutions WHERE bet_match_id LIKE ? """ - bindings = (f"%{tx_hash}%",) + bindings = (f"%{bet_hash}%",) cursor.execute(query, bindings) return cursor.fetchall() @@ -2145,10 +2145,10 @@ def get_order_matches_to_expire(db, block_index): return cursor.fetchall() -def get_order(db, tx_hash: str): +def get_order(db, order_hash: str): """ Returns the information of an order - :param str tx_hash: The hash of the order to return (e.g. 23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776) + :param str order_hash: The hash of the transaction that created the order (e.g. 23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776) """ cursor = db.cursor() query = """ @@ -2156,7 +2156,7 @@ def get_order(db, tx_hash: str): WHERE tx_hash = ? ORDER BY rowid DESC LIMIT 1 """ - bindings = (tx_hash,) + bindings = (order_hash,) cursor.execute(query, bindings) return cursor.fetchall() @@ -2240,10 +2240,10 @@ def get_orders_by_asset(db, asset: str, status: str = "open"): return cursor.fetchall() -def get_order_matches_by_order(db, tx_hash: str, status: str = "pending"): +def get_order_matches_by_order(db, order_hash: str, status: str = "pending"): """ Returns the order matches of an order - :param str tx_hash: The hash of the order (e.g. 5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947) + :param str order_hash: The hash of the transaction that created the order (e.g. 5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947) :param str status: The status of the order matches to return (e.g. completed) """ cursor = db.cursor() @@ -2255,15 +2255,15 @@ def get_order_matches_by_order(db, tx_hash: str, status: str = "pending"): GROUP BY id ) WHERE status = ? """ - bindings = (tx_hash, tx_hash, status) + bindings = (order_hash, order_hash, status) cursor.execute(query, bindings) return cursor.fetchall() -def get_btcpays_by_order(db, tx_hash: str): +def get_btcpays_by_order(db, order_hash: str): """ Returns the BTC pays of an order - :param str tx_hash: The hash of the order (e.g. 299b5b648f54eacb839f3487232d49aea373cdd681b706d4cc0b5e0b03688db4) + :param str order_hash: The hash of the transaction that created the order (e.g. 299b5b648f54eacb839f3487232d49aea373cdd681b706d4cc0b5e0b03688db4) """ cursor = db.cursor() query = """ @@ -2271,7 +2271,7 @@ def get_btcpays_by_order(db, tx_hash: str): FROM btcpays WHERE order_match_id LIKE ? """ - bindings = (f"%{tx_hash}%",) + bindings = (f"%{order_hash}%",) cursor.execute(query, bindings) return cursor.fetchall() diff --git a/counterparty-core/counterpartycore/lib/messages/bet.py b/counterparty-core/counterpartycore/lib/messages/bet.py index 2af526b8b4..7a9c453e10 100644 --- a/counterparty-core/counterpartycore/lib/messages/bet.py +++ b/counterparty-core/counterpartycore/lib/messages/bet.py @@ -549,7 +549,7 @@ def parse(db, tx, message): def match(db, tx): # Get bet in question. - bets = ledger.get_bet(db, tx_hash=tx["tx_hash"]) + bets = ledger.get_bet(db, bet_hash=tx["tx_hash"]) if not bets: return else: diff --git a/counterparty-core/counterpartycore/lib/messages/cancel.py b/counterparty-core/counterpartycore/lib/messages/cancel.py index bc51437e9f..4ab5bc3ebb 100644 --- a/counterparty-core/counterpartycore/lib/messages/cancel.py +++ b/counterparty-core/counterpartycore/lib/messages/cancel.py @@ -56,8 +56,8 @@ def validate(db, source, offer_hash): problems = [] # TODO: make query only if necessary - orders = ledger.get_order(db, tx_hash=offer_hash) - bets = ledger.get_bet(db, tx_hash=offer_hash) + orders = ledger.get_order(db, order_hash=offer_hash) + bets = ledger.get_bet(db, bet_hash=offer_hash) rps = ledger.get_rps(db, tx_hash=offer_hash) offer_type = None diff --git a/counterparty-core/counterpartycore/lib/messages/order.py b/counterparty-core/counterpartycore/lib/messages/order.py index 3038483614..29d87356eb 100644 --- a/counterparty-core/counterpartycore/lib/messages/order.py +++ b/counterparty-core/counterpartycore/lib/messages/order.py @@ -247,7 +247,7 @@ def cancel_order_match(db, order_match, status, block_index, tx_index): ledger.update_order_match_status(db, order_match["id"], status) # If tx0 is dead, credit address directly; if not, replenish give remaining, get remaining, and fee required remaining. - orders = ledger.get_order(db, tx_hash=order_match["tx0_hash"]) + orders = ledger.get_order(db, order_hash=order_match["tx0_hash"]) assert len(orders) == 1 tx0_order = orders[0] if tx0_order["status"] in ("expired", "cancelled"): @@ -290,7 +290,7 @@ def cancel_order_match(db, order_match, status, block_index, tx_index): ledger.update_order(db, order_match["tx0_hash"], set_data) # If tx1 is dead, credit address directly; if not, replenish give remaining, get remaining, and fee required remaining. - orders = ledger.get_order(db, tx_hash=order_match["tx1_hash"]) + orders = ledger.get_order(db, order_hash=order_match["tx1_hash"]) assert len(orders) == 1 tx1_order = orders[0] if tx1_order["status"] in ("expired", "cancelled"): @@ -613,7 +613,7 @@ def match(db, tx, block_index=None): cursor = db.cursor() # Get order in question. - orders = ledger.get_order(db, tx_hash=tx["tx_hash"]) + orders = ledger.get_order(db, order_hash=tx["tx_hash"]) if not orders: cursor.close() return @@ -966,14 +966,14 @@ def expire(db, block_index): if order_match["backward_asset"] == "BTC" and order_match["status"] == "expired": cancel_order( db, - ledger.get_order(db, tx_hash=order_match["tx1_hash"])[0], + ledger.get_order(db, order_hash=order_match["tx1_hash"])[0], "expired", block_index, ) if order_match["forward_asset"] == "BTC" and order_match["status"] == "expired": cancel_order( db, - ledger.get_order(db, tx_hash=order_match["tx0_hash"])[0], + ledger.get_order(db, order_hash=order_match["tx0_hash"])[0], "expired", block_index, ) @@ -981,7 +981,7 @@ def expire(db, block_index): if block_index >= 315000 or config.TESTNET or config.REGTEST: # Protocol change. # Re‐match. for order_match in order_matches: - match(db, ledger.get_order(db, tx_hash=order_match["tx0_hash"])[0], block_index) - match(db, ledger.get_order(db, tx_hash=order_match["tx1_hash"])[0], block_index) + match(db, ledger.get_order(db, order_hash=order_match["tx0_hash"])[0], block_index) + match(db, ledger.get_order(db, order_hash=order_match["tx1_hash"])[0], block_index) cursor.close() diff --git a/counterparty-core/counterpartycore/test/api_v2_test.py b/counterparty-core/counterpartycore/test/api_v2_test.py index 438cb89de0..a3949efed2 100644 --- a/counterparty-core/counterpartycore/test/api_v2_test.py +++ b/counterparty-core/counterpartycore/test/api_v2_test.py @@ -28,7 +28,7 @@ def test_api_v2(request): tx_hash = "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498" order_hash = "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498" bet_hash = "e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42" - dispsenser_hash = "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498" + dispenser_hash = "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498" event = "CREDIT" event_index = 10 exclude_routes = ["compose", "unpack", "info", "mempool", "healthz", "backend"] @@ -47,14 +47,10 @@ def test_api_v2(request): url = url.replace("", asset) url = url.replace("", event) url = url.replace("", str(event_index)) - if route.startswith("/orders"): - url = url.replace("", order_hash) - elif route.startswith("/bets"): - url = url.replace("", bet_hash) - elif route.startswith("/dispensers"): - url = url.replace("", dispsenser_hash) - else: - url = url.replace("", tx_hash) + url = url.replace("", order_hash) + url = url.replace("", bet_hash) + url = url.replace("", dispenser_hash) + url = url.replace("", tx_hash) if route.startswith("/events"): url += "?limit=5" print(url) From 102b9f1df2cf93632f049a918ddfc2aa5483a221 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 12:06:16 +0200 Subject: [PATCH 110/280] get_balance_object -> get_balance_by_address_and_asset --- .../counterpartycore/lib/api/routes.py | 4 +- .../counterpartycore/lib/ledger.py | 2 +- counterparty-core/tools/apicache.json | 177 ++++++++++++++++++ 3 files changed, 180 insertions(+), 3 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index db34f1f0a5..d15e20fdaa 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -30,7 +30,7 @@ "/transactions/": ledger.get_transaction, ### /addresses ### "/addresses/
/balances": ledger.get_address_balances, - "/addresses/
/balances/": ledger.get_balance_object, + "/addresses/
/balances/": ledger.get_balance_by_address_and_asset, "/addresses/
/credits": ledger.get_credits_by_address, "/addresses/
/debits": ledger.get_debits_by_address, "/addresses/
/bets": ledger.get_bet_by_feed, @@ -61,7 +61,7 @@ "/assets": ledger.get_valid_assets, "/assets/": ledger.get_asset_info, "/assets//balances": ledger.get_asset_balances, - "/assets//balances/
": ledger.get_balance_object, + "/assets//balances/
": ledger.get_balance_by_address_and_asset, "/assets//orders": ledger.get_orders_by_asset, "/assets//credits": ledger.get_credits_by_asset, "/assets//debits": ledger.get_debits_by_asset, diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index 19f731a1a8..3ebbaee5ce 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -439,7 +439,7 @@ def get_balance(db, address, asset, raise_error_if_no_balance=False, return_list return balances[0]["quantity"] -def get_balance_object(db, address: str, asset: str): +def get_balance_by_address_and_asset(db, address: str, asset: str): """ Returns the balance of an address and asset :param str address: The address to return (e.g. 1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs) diff --git a/counterparty-core/tools/apicache.json b/counterparty-core/tools/apicache.json index 328752d285..49ea5365ac 100644 --- a/counterparty-core/tools/apicache.json +++ b/counterparty-core/tools/apicache.json @@ -2385,5 +2385,182 @@ }, "/backend/estimatesmartfee": { "result": 295443 + }, + "/orders/": { + "result": [ + { + "tx_index": 2724132, + "tx_hash": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776", + "block_index": 840381, + "source": "15L7U55PAsHLEpQkZqz62e3eqWd9AHb2DH", + "give_asset": "PEPECASH", + "give_quantity": 6966600000000, + "give_remaining": 900000000000, + "get_asset": "XCP", + "get_quantity": 11076894000, + "get_remaining": 1431000000, + "expiration": 5000, + "expire_index": 843055, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 4488, + "fee_provided_remaining": 4488, + "status": "open" + } + ] + }, + "/orders//matches": { + "result": [ + { + "id": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776_5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947", + "tx0_index": 2724132, + "tx0_hash": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776", + "tx0_address": "15L7U55PAsHLEpQkZqz62e3eqWd9AHb2DH", + "tx1_index": 2726591, + "tx1_hash": "5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947", + "tx1_address": "15e15ua6A3FJqjMevtrWcFSzKn9k6bMQeA", + "forward_asset": "PEPECASH", + "forward_quantity": 6066600000000, + "backward_asset": "XCP", + "backward_quantity": 9645894000, + "tx0_block_index": 838055, + "tx1_block_index": 840381, + "block_index": 840381, + "tx0_expiration": 5000, + "tx1_expiration": 8064, + "match_expire_index": 840401, + "fee_paid": 0, + "status": "completed" + } + ] + }, + "/orders//btcpays": { + "result": [ + { + "tx_index": 2719343, + "tx_hash": "6cfa7f31b43a46e5ad74a9db810bd6cac56235a8ebc73ec63d01b38ea7ea2414", + "block_index": 836188, + "source": "1NfJnJdAdmm2rJCFW54NsAKqqTTMexCNJ3", + "destination": "1BepkwAhEmEuEGF349XjmEUrRvoy9a7Biv", + "btc_amount": 4500000, + "order_match_id": "0a1387df82a8a7e9cec01c52c8fee01f6995c4e39dc5804e1d2bf40d9368f5c5_299b5b648f54eacb839f3487232d49aea373cdd681b706d4cc0b5e0b03688db4", + "status": "valid" + } + ] + }, + "/bets/": { + "result": [ + { + "tx_index": 15106, + "tx_hash": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed", + "block_index": 304063, + "source": "18ZNyaAcH4HugeofwbrpLoUNiayxJRH65c", + "feed_address": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "bet_type": 3, + "deadline": 1401828300, + "wager_quantity": 50000000, + "wager_remaining": 0, + "counterwager_quantity": 50000000, + "counterwager_remaining": 0, + "target_value": 1.0, + "leverage": 5040, + "expiration": 11, + "expire_index": 304073, + "fee_fraction_int": 1000000, + "status": "filled" + } + ] + }, + "/bets//matches": { + "result": [ + { + "id": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed_cb5f888c299a50967d523513daed71636d927e6ef3dbda85feb11ff112ae4330", + "tx0_index": 15106, + "tx0_hash": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed", + "tx0_address": "18ZNyaAcH4HugeofwbrpLoUNiayxJRH65c", + "tx1_index": 15108, + "tx1_hash": "cb5f888c299a50967d523513daed71636d927e6ef3dbda85feb11ff112ae4330", + "tx1_address": "1PTqJmRCMGs4qBEh2APAFSrBv95Uf1hfiD", + "tx0_bet_type": 3, + "tx1_bet_type": 2, + "feed_address": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "initial_value": -1, + "deadline": 1401828300, + "target_value": 1.0, + "leverage": 5040, + "forward_quantity": 50000000, + "backward_quantity": 50000000, + "tx0_block_index": 304062, + "tx1_block_index": 304063, + "block_index": 306379, + "tx0_expiration": 11, + "tx1_expiration": 1459, + "match_expire_index": 304073, + "fee_fraction_int": 1000000, + "status": "expired" + } + ] + }, + "/bets//resolutions": { + "result": [ + { + "bet_match_id": "36bbbb7dbd85054dac140a8ad8204eda2ee859545528bd2a9da69ad77c277ace_d70ee4e44f02fe6258ee0c267f33f304a0fc61d4ce424852f58c28967dc1924f", + "bet_match_type_id": 5, + "block_index": 401128, + "winner": "Equal", + "settled": null, + "bull_credit": null, + "bear_credit": null, + "escrow_less_fee": 2000000, + "fee": 0 + } + ] + }, + "/dispensers/": { + "result": [ + { + "tx_index": 2536311, + "tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a", + "block_index": 840322, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "asset": "FLOCK", + "give_quantity": 10000000000, + "escrow_quantity": 250000000000, + "satoshirate": 330000, + "status": 0, + "give_remaining": 140000000000, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "dispense_count": 2, + "asset_longname": null + } + ] + }, + "/dispensers//dispenses": { + "result": [ + { + "tx_index": 2610745, + "dispense_index": 0, + "tx_hash": "8c95cc6afc8fd466c784fd1c02749c585988999bbc66251b944c443dc31af757", + "block_index": 821450, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "destination": "1FKYM1CP9RfttJhNG8HTNQdE2uV3YvwbRB", + "asset": "FLOCK", + "dispense_quantity": 20000000000, + "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a" + }, + { + "tx_index": 2726580, + "dispense_index": 0, + "tx_hash": "e7f0f2c9bef7a492b714a5952ec61b283be344419c5bc33f405f9af41ebfa48b", + "block_index": 840322, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "destination": "bc1qzcdkhnexpjc8wvkyrpyrsn0f5xzcpu877mjmgj", + "asset": "FLOCK", + "dispense_quantity": 90000000000, + "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a" + } + ] } } \ No newline at end of file From a5370ea96a436711f6e5cfe8c6a8c199409c79a6 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 12:13:59 +0200 Subject: [PATCH 111/280] handle_healthz_route_v2 -> check_server_status --- counterparty-core/counterpartycore/lib/api/routes.py | 2 +- counterparty-core/counterpartycore/lib/api/util.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index d15e20fdaa..e9930e2458 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -90,7 +90,7 @@ "/events/counts": ledger.get_all_events_counts, "/events/": ledger.get_events_by_name, ### /healthz ### - "/healthz": util.handle_healthz_route_v2, + "/healthz": util.check_server_status, ### /backend ### "/backend/addresses/
/transactions": backend.search_raw_transactions, "/backend/addresses/
/transactions/oldest": backend.get_oldest_tx, diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index 139fff1fbb..e4ab9a1075 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -67,7 +67,7 @@ def handle_healthz_route(db, check_type: str = "heavy"): return flask.Response(to_json(result), code, mimetype="application/json") -def handle_healthz_route_v2(db, check_type: str = "heavy"): +def check_server_status(db, check_type: str = "heavy"): """ Health check route. :param check_type: Type of health check to perform. Options are 'light' and 'heavy' (e.g. light) From 16ae417f1f490f1bb4d55ecbb7f2069102fd75f8 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 13:32:49 +0200 Subject: [PATCH 112/280] generate also apib compatible with apiary --- counterparty-core/counterparty-core.apib | 4027 ++++++++++++++++++++++ counterparty-core/tools/genapidoc.py | 33 +- 2 files changed, 4055 insertions(+), 5 deletions(-) create mode 100644 counterparty-core/counterparty-core.apib diff --git a/counterparty-core/counterparty-core.apib b/counterparty-core/counterparty-core.apib new file mode 100644 index 0000000000..9854b1590a --- /dev/null +++ b/counterparty-core/counterparty-core.apib @@ -0,0 +1,4027 @@ + +FORMAT: 1A +HOST: https://api.counterparty.io + +# Counterparty Core API + +The Counterparty Core API is the recommended (and only supported) way to query the state of a Counterparty node. + +API routes are divided into 11 groups: + +- [`/blocks`](#group-blocks) +- [`/transactions`](#group-transactions) +- [`/addresses`](#group-addresses) +- [`/assets`](#group-assets) +- [`/orders`](#group-orders) +- [`/bets`](#group-bets) +- [`/dispensers`](#group-dispensers) +- [`/burns`](#group-burns) +- [`/events`](#group-events) +- [`/mempool`](#group-mempool) +- [`/backend`](#group-backend) + +Notes: + +- When the server is not ready, that is to say when all the blocks are not yet parsed, all routes return a 503 error except those in the `/blocks`, `/transactions` and `/backend` groups which always return a result. + +- All API responses contain the following 3 headers: + + * `X-COUNTERPARTY-HEIGHT` contains the last block parsed by Counterparty + * `X-BACKEND-HEIGHT` contains the last block known to Bitcoin Core + * `X-COUNTERPARTY-READY` contains true if `X-COUNTERPARTY-HEIGHT` >= `X-BACKEND-HEIGHT` - 1 + +- All API responses follow the following format: + + ``` + { + "error": , + "result": + } + ``` + +- Routes in the `/backend` group serve as a proxy to make requests to AddrindexRS. + +## Root Path + +### Get Server Info [GET /] + +Returns server information and the list of documented routes in JSON format. + ++ Response 200 (application/json) + + ``` + { + "server_ready": true, + "network": "mainnet", + "version": "10.1.1", + "backend_height": 840796, + "counterparty_height": 840796, + "routes": [ + + ] + } + ``` + + +## Group Blocks + +### Get Blocks [GET /blocks] + +Returns the list of the last ten blocks + ++ Parameters + + last: `840000` (int, optional) - The index of the most recent block to return + + Default: `None` + + limit: `2` (int, optional) - The number of blocks to return + + Default: `10` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "block_index": 840000, + "block_hash": "0000000000000000000320283a032748cef8227873ff4872689bf23f1cda83a5", + "block_time": 1713571767, + "previous_block_hash": "0000000000000000000172014ba58d66455762add0512355ad651207918494ab", + "difficulty": 86388558925171.02, + "ledger_hash": "b91dd54cfbd3aff07b358a038bf6174ddc06f36bd00cdccf048e8281bcd56224", + "txlist_hash": "b641c3e190b9941fcd5c84a7c07e66c03559ef26dcea892e2db1cf1d8392a4f2", + "messages_hash": "5c5de34009839ee66ebc3097ecd28bd5deee9553966b3ee39e8a08e123ac9adc" + }, + { + "block_index": 839999, + "block_hash": "0000000000000000000172014ba58d66455762add0512355ad651207918494ab", + "block_time": 1713571533, + "previous_block_hash": "00000000000000000001dcce6ce7c8a45872cafd1fb04732b447a14a91832591", + "difficulty": 86388558925171.02, + "ledger_hash": "e2b2e23c2ac1060dafe2395da01fe5907f323b5a644816f45f003411c612ac30", + "txlist_hash": "f33f800ef166e6ef5b3df15a0733f9fd3ebb0b799f39ef1951e6709118b7c0fd", + "messages_hash": "16b7d40543b7b80587f4d98c84fcdfdceb2d1c18abba82c7064c09c2795b7ab2" + } + ] + } + ``` + +### Get Block [GET /blocks/{block_index}] + +Return the information of a block + ++ Parameters + + block_index: `840464` (int, required) - The index of the block to return + ++ Response 200 (application/json) + + ``` + { + "result": { + "block_index": 840464, + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_time": 1713852783, + "previous_block_hash": "00000000000000000002db1e5aa19784eec3de949f98ec757e7a7f2fc392079d", + "difficulty": 86388558925171.02, + "ledger_hash": "b3f8cbb50b0705a5c4a8495f8b5128de13a32daebd8ac5e8316a010f0d203584", + "txlist_hash": "84bdc5b9073f775a2b65de7da2b10b89a2235f3501883b0a836e41e68cd00d46", + "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540" + } + } + ``` + +### Get Transactions By Block [GET /blocks/{block_index}/transactions] + +Returns the transactions of a block + ++ Parameters + + block_index: `840464` (int, required) - The index of the block to return + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 2726605, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "block_index": 840464, + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_time": 1713852783, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "destination": "", + "btc_amount": 0, + "fee": 56565, + "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", + "supported": 1 + } + ] + } + ``` + +### Get Events By Block [GET /blocks/{block_index}/events] + +Returns the events of a block + ++ Parameters + + block_index: `840464` (int, required) - The index of the block to return + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "event_index": 14194760, + "event": "BLOCK_PARSED", + "bindings": { + "block_index": 840464, + "ledger_hash": "b3f8cbb50b0705a5c4a8495f8b5128de13a32daebd8ac5e8316a010f0d203584", + "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540", + "txlist_hash": "84bdc5b9073f775a2b65de7da2b10b89a2235f3501883b0a836e41e68cd00d46" + }, + "block_index": 840464, + "timestamp": 1713852780 + }, + { + "event_index": 14194759, + "event": "TRANSACTION_PARSED", + "bindings": { + "supported": true, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605 + }, + "block_index": 840464, + "timestamp": 1713852780 + }, + { + "event_index": 14194758, + "event": "CREDIT", + "bindings": { + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "UNNEGOTIABLE", + "block_index": 840464, + "calling_function": "issuance", + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "quantity": 1, + "tx_index": 2726605 + }, + "block_index": 840464, + "timestamp": 1713852780 + }, + { + "event_index": 14194757, + "event": "ASSET_ISSUANCE", + "bindings": { + "asset": "UNNEGOTIABLE", + "asset_longname": null, + "block_index": 840464, + "call_date": 0, + "call_price": 0.0, + "callable": false, + "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "divisible": false, + "fee_paid": 50000000, + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "locked": false, + "quantity": 1, + "reset": false, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "status": "valid", + "transfer": false, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605 + }, + "block_index": 840464, + "timestamp": 1713852780 + }, + { + "event_index": 14194756, + "event": "ASSET_CREATION", + "bindings": { + "asset_id": "75313533584419238", + "asset_longname": null, + "asset_name": "UNNEGOTIABLE", + "block_index": 840464 + }, + "block_index": 840464, + "timestamp": 1713852780 + }, + { + "event_index": 14194755, + "event": "DEBIT", + "bindings": { + "action": "issuance fee", + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "XCP", + "block_index": 840464, + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "quantity": 50000000, + "tx_index": 2726605 + }, + "block_index": 840464, + "timestamp": 1713852780 + }, + { + "event_index": 14194754, + "event": "NEW_TRANSACTION", + "bindings": { + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_index": 840464, + "block_time": 1713852783, + "btc_amount": 0, + "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", + "destination": "", + "fee": 56565, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605 + }, + "block_index": 840464, + "timestamp": 1713852779 + }, + { + "event_index": 14194753, + "event": "NEW_BLOCK", + "bindings": { + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_index": 840464, + "block_time": 1713852783, + "difficulty": 86388558925171.02, + "previous_block_hash": "00000000000000000002db1e5aa19784eec3de949f98ec757e7a7f2fc392079d" + }, + "block_index": 840464, + "timestamp": 1713852779 + } + ] + } + ``` + +### Get Events Counts By Block [GET /blocks/{block_index}/events/counts] + +Returns the event counts of a block + ++ Parameters + + block_index: `840464` (int, required) - The index of the block to return + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "event": "ASSET_CREATION", + "event_count": 1 + }, + { + "event": "ASSET_ISSUANCE", + "event_count": 1 + }, + { + "event": "BLOCK_PARSED", + "event_count": 1 + }, + { + "event": "CREDIT", + "event_count": 1 + }, + { + "event": "DEBIT", + "event_count": 1 + }, + { + "event": "NEW_BLOCK", + "event_count": 1 + }, + { + "event": "NEW_TRANSACTION", + "event_count": 1 + }, + { + "event": "TRANSACTION_PARSED", + "event_count": 1 + } + ] + } + ``` + +### Get Events By Block And Event [GET /blocks/{block_index}/events/{event}] + +Returns the events of a block filtered by event + ++ Parameters + + block_index: `840464` (int, required) - The index of the block to return + + event: `CREDIT` (str, required) - The event to filter by + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "event_index": 14194758, + "event": "CREDIT", + "bindings": { + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "UNNEGOTIABLE", + "block_index": 840464, + "calling_function": "issuance", + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "quantity": 1, + "tx_index": 2726605 + }, + "block_index": 840464, + "timestamp": 1713852780 + } + ] + } + ``` + +### Get Credits By Block [GET /blocks/{block_index}/credits] + +Returns the credits of a block + ++ Parameters + + block_index: `840464` (int, required) - The index of the block to return + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "block_index": 840464, + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "UNNEGOTIABLE", + "quantity": 1, + "calling_function": "issuance", + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605 + } + ] + } + ``` + +### Get Debits By Block [GET /blocks/{block_index}/debits] + +Returns the debits of a block + ++ Parameters + + block_index: `840464` (int, required) - The index of the block to return + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "block_index": 840464, + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "XCP", + "quantity": 50000000, + "action": "issuance fee", + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605 + } + ] + } + ``` + +### Get Expirations [GET /blocks/{block_index}/expirations] + +Returns the expirations of a block + ++ Parameters + + block_index: `840356` (int, required) - The index of the block to return + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "type": "order", + "object_id": "533d5c0ecd8ca9c2946d3298cc5e570eee55b62b887dd85c95de6de4fdc7f441" + }, + { + "type": "order", + "object_id": "b048661afeee3f266792481168024abc0d7648fe0e019e4a1e0fd9867c2c0ffc" + } + ] + } + ``` + +### Get Cancels [GET /blocks/{block_index}/cancels] + +Returns the cancels of a block + ++ Parameters + + block_index: `839746` (int, required) - The index of the block to return + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 2725738, + "tx_hash": "793af9129c7368f974c3ea0c87ad38131f0d82d19fbaf1adf8aaf2e657ec42b8", + "block_index": 839746, + "source": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "offer_hash": "04b258ac37f73e3b9a8575110320d67c752e1baace0f516da75845f388911735", + "status": "valid" + }, + { + "tx_index": 2725739, + "tx_hash": "2071e8a6fbc0c443b152d513c754356f8f962db2fa694de8c6826b57413cc190", + "block_index": 839746, + "source": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "offer_hash": "b1622dbe4f0ce740cb6c18f6f136876bc4949c40a62bc8cceefa81fd6679a57f", + "status": "valid" + } + ] + } + ``` + +### Get Destructions [GET /blocks/{block_index}/destructions] + +Returns the destructions of a block + ++ Parameters + + block_index: `839988` (int, required) - The index of the block to return + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 2726496, + "tx_hash": "f5609facc8dac6cdf70b15c514ea15a9acc24a9bd86dcac2b845d5740fbcc50b", + "block_index": 839988, + "source": "1FpLAtreZjTVCMcj1pq1AHWuqcs3n7obMm", + "asset": "COBBEE", + "quantity": 50000, + "tag": "", + "status": "valid" + } + ] + } + ``` + +### Get Issuances By Block [GET /blocks/{block_index}/issuances] + +Returns the issuances of a block + ++ Parameters + + block_index: `840464` (int, required) - The index of the block to return + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 2726605, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "msg_index": 0, + "block_index": 840464, + "asset": "UNNEGOTIABLE", + "quantity": 1, + "divisible": 0, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "transfer": 0, + "callable": 0, + "call_date": 0, + "call_price": 0.0, + "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "fee_paid": 50000000, + "locked": 0, + "status": "valid", + "asset_longname": null, + "reset": 0 + } + ] + } + ``` + +### Get Sends Or Receives By Block [GET /blocks/{block_index}/sends] + +Returns the sends of a block + ++ Parameters + + block_index: `840459` (int, required) - The index of the block to return + + limit (int, optional) - + + Default: `100` + + offset (int, optional) - + + Default: `0` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 2726604, + "tx_hash": "b4bbb14c99dd260eb634243e5c595e1b7213459979857a32850de84989bb71ec", + "block_index": 840459, + "source": "13Hnmhs5gy2yXKVBx4wSM5HCBdKnaSBZJH", + "destination": "1LfT83WAxbN9qKhtrXxcQA6xgdhfZk21Hz", + "asset": "GAMESOFTRUMP", + "quantity": 1, + "status": "valid", + "msg_index": 0, + "memo": null + } + ] + } + ``` + +### Get Dispenses By Block [GET /blocks/{block_index}/dispenses] + +Returns the dispenses of a block + ++ Parameters + + block_index: `840322` (int, required) - The index of the block to return + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 2726580, + "dispense_index": 0, + "tx_hash": "e7f0f2c9bef7a492b714a5952ec61b283be344419c5bc33f405f9af41ebfa48b", + "block_index": 840322, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "destination": "bc1qzcdkhnexpjc8wvkyrpyrsn0f5xzcpu877mjmgj", + "asset": "FLOCK", + "dispense_quantity": 90000000000, + "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a" + } + ] + } + ``` + +### Get Sweeps By Block [GET /blocks/{block_index}/sweeps] + +Returns the sweeps of a block + ++ Parameters + + block_index: `836519` (int, required) - The index of the block to return + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 2720536, + "tx_hash": "9309a4c0aed426e281a52e5d48acadd1464999269a5e75cf2293edd0277d743d", + "block_index": 836519, + "source": "1DMVnJuqBobXA9xYioabBsR4mN8bvVtCAW", + "destination": "1HC2q92SfH1ZHzS4CrDwp6KAipV4FqUL4T", + "flags": 3, + "status": "valid", + "memo": null, + "fee_paid": 1400000 + }, + { + "tx_index": 2720537, + "tx_hash": "d8db6281abffdbf6c320d5ade06aeb6fad2f7bfa1a2c2243c6726020a27107d3", + "block_index": 836519, + "source": "18szqTVJUWwYrtRHq98Wn4DhCGGiy3jZ87", + "destination": "1HC2q92SfH1ZHzS4CrDwp6KAipV4FqUL4T", + "flags": 3, + "status": "valid", + "memo": null, + "fee_paid": 1400000 + } + ] + } + ``` + +## Group Transactions + +### Info [GET /transactions/info] + +Returns Counterparty information from a raw transaction in hex format. + ++ Parameters + + rawtransaction: `01000000017828697743c03aef6a3a8ba54b22bf579ffcab8161faf20e7b20c4ecd75cc986010000006b483045022100d1bd0531bb1ed2dd2cbf77d6933273e792a3dbfa84327d419169850ddd5976f502205d1ab0f7bcbf1a0cc183f0520c9aa8f711d41cb790c0c4ac39da6da4a093d798012103d3b1f711e907acb556e239f6cafb6a4f7fe40d8dd809b0e06e739c2afd73f202ffffffff0200000000000000004d6a4bf29880b93b0711524c7ef9c76835752088db8bd4113a3daf41fc45ffdc8867ebdbf26817fae377696f36790e52f51005806e9399a427172fedf348cf798ed86e548002ee96909eef0775ec3c2b0100000000001976a91443434cf159cc585fbd74daa9c4b833235b19761b88ac00000000` (str, required) - Raw transaction in hex format + + block_index (int, optional) - Block index mandatory for transactions before block 335000 + + Default: `None` + ++ Response 200 (application/json) + + ``` + { + "result": { + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "destination": "", + "btc_amount": 0, + "fee": 56565, + "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", + "unpacked_data": { + "message_type": "issuance", + "message_type_id": 22, + "message_data": { + "asset_id": 75313533584419238, + "asset": "UNNEGOTIABLE", + "subasset_longname": null, + "quantity": 1, + "divisible": false, + "lock": false, + "reset": false, + "callable": false, + "call_date": 0, + "call_price": 0.0, + "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "status": "valid" + } + } + } + } + ``` + +### Unpack [GET /transactions/unpack] + +Unpacks Counterparty data in hex format and returns the message type and data. + ++ Parameters + + datahex: `16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245` (str, required) - Data in hex format + + block_index (int, optional) - Block index of the transaction containing this data + + Default: `None` + ++ Response 200 (application/json) + + ``` + { + "result": { + "message_type": "issuance", + "message_type_id": 22, + "message_data": { + "asset_id": 75313533584419238, + "asset": "UNNEGOTIABLE", + "subasset_longname": null, + "quantity": 1, + "divisible": false, + "lock": false, + "reset": false, + "callable": false, + "call_date": 0, + "call_price": 0.0, + "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "status": "valid" + } + } + } + ``` + +### Get Transaction [GET /transactions/{tx_hash}] + +Returns the information of a transaction + ++ Parameters + + tx_hash: `876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5` (str, required) - The hash of the transaction to return + ++ Response 200 (application/json) + + ``` + { + "result": { + "tx_index": 2726605, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "block_index": 840464, + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_time": 1713852783, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "destination": "", + "btc_amount": 0, + "fee": 56565, + "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", + "supported": 1 + } + } + ``` + +## Group Addresses + +### Get Address Balances [GET /addresses/{address}/balances] + +Returns the balances of an address + ++ Parameters + + address: `1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs` (str, required) - The address to return + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + "asset": "XCP", + "quantity": 104200000000 + } + ] + } + ``` + +### Get Balance By Address And Asset [GET /addresses/{address}/balances/{asset}] + +Returns the balance of an address and asset + ++ Parameters + + address: `1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs` (str, required) - The address to return + + asset: `XCP` (str, required) - The asset to return + ++ Response 200 (application/json) + + ``` + { + "result": { + "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + "asset": "XCP", + "quantity": 104200000000 + } + } + ``` + +### Get Credits By Address [GET /addresses/{address}/credits] + +Returns the credits of an address + ++ Parameters + + address: `1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs` (str, required) - The address to return + + limit: `5` (int, optional) - The maximum number of credits to return + + Default: `100` + + offset: `0` (int, optional) - The offset of the credits to return + + Default: `0` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "block_index": 830981, + "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + "asset": "XCP", + "quantity": 104200000000, + "calling_function": "send", + "event": "7e4fbb0a1eeeee34bf499955f1027fb78c514d63a3c8ff2e28c6dad005e4d850", + "tx_index": 2677412 + } + ] + } + ``` + +### Get Debits By Address [GET /addresses/{address}/debits] + +Returns the debits of an address + ++ Parameters + + address: `bc1q7787j6msqczs58asdtetchl3zwe8ruj57p9r9y` (str, required) - The address to return + + limit: `5` (int, optional) - The maximum number of debits to return + + Default: `100` + + offset: `0` (int, optional) - The offset of the debits to return + + Default: `0` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "block_index": 836949, + "address": "bc1q7787j6msqczs58asdtetchl3zwe8ruj57p9r9y", + "asset": "XCP", + "quantity": 40000000000, + "action": "open dispenser", + "event": "53ed08176d3479f49986e9282293da85cebc03835b128d8e790ee587f9f1c750", + "tx_index": 2721524 + }, + { + "block_index": 840388, + "address": "bc1q7787j6msqczs58asdtetchl3zwe8ruj57p9r9y", + "asset": "XCP", + "quantity": 250000000000, + "action": "send", + "event": "bc54968ba7d0a59a47b276602e2dbdcf01b14009742e0d7b50272cbae529a9a4", + "tx_index": 2726594 + } + ] + } + ``` + +### Get Bet By Feed [GET /addresses/{address}/bets] + +Returns the bets of a feed + ++ Parameters + + address: `1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk` (str, required) - The address of the feed + + status: `filled` (str, optional) - The status of the bet + + Default: `open` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 15106, + "tx_hash": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed", + "block_index": 304063, + "source": "18ZNyaAcH4HugeofwbrpLoUNiayxJRH65c", + "feed_address": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "bet_type": 3, + "deadline": 1401828300, + "wager_quantity": 50000000, + "wager_remaining": 0, + "counterwager_quantity": 50000000, + "counterwager_remaining": 0, + "target_value": 1.0, + "leverage": 5040, + "expiration": 11, + "expire_index": 304073, + "fee_fraction_int": 1000000, + "status": "filled" + }, + { + "tx_index": 61338, + "tx_hash": "0fcc7f5190c028f6c5534554d10ec5b4a9246d63826421cd58be2d572d11f088", + "block_index": 320704, + "source": "1Ew38GxczvV1KxjzZsq9f8UuRzHkHQrL5C", + "feed_address": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "bet_type": 2, + "deadline": 1410728400, + "wager_quantity": 1000000, + "wager_remaining": 0, + "counterwager_quantity": 1999991, + "counterwager_remaining": 0, + "target_value": 1.0, + "leverage": 5040, + "expiration": 13, + "expire_index": 320715, + "fee_fraction_int": 1000000, + "status": "filled" + } + ] + } + ``` + +### Get Broadcasts By Source [GET /addresses/{address}/broadcasts] + +Returns the broadcasts of a source + ++ Parameters + + address: `1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk` (str, required) - The address to return + + status: `valid` (str, optional) - The status of the broadcasts to return + + Default: `valid` + + order_by: `ASC` (str, optional) - The order of the broadcasts to return + + Default: `DESC` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 15055, + "tx_hash": "774887e555a6ae5a8c058ebc0185058307977f01a2d4d326e71f37d6dd977154", + "block_index": 304048, + "source": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "timestamp": 1401815290, + "value": -1.0, + "fee_fraction_int": 1000000, + "text": "xbet.io/feed/1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "locked": 0, + "status": "valid" + }, + { + "tx_index": 61477, + "tx_hash": "5d49993bec727622c7b41c84e2b1e65c368f33390d633d217131ffcc5b592f0d", + "block_index": 320718, + "source": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "timestamp": 1410732503, + "value": 1.0, + "fee_fraction_int": 1000000, + "text": "xbet.io/feed/1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "locked": 0, + "status": "valid" + } + ] + } + ``` + +### Get Burns By Address [GET /addresses/{address}/burns] + +Returns the burns of an address + ++ Parameters + + address: `1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W` (str, required) - The address to return + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 3070, + "tx_hash": "4560d0e3d04927108b615ab106040489aca9c4aceedcf69d2b71f63b3139c7ae", + "block_index": 283810, + "source": "1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W", + "burned": 10000000, + "earned": 10000000000, + "status": "valid" + } + ] + } + ``` + +### Get Send By Address [GET /addresses/{address}/sends] + +Returns the sends of an address + ++ Parameters + + address: `1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W` (str, required) - The address to return + + limit: `5` (int, optional) - The maximum number of sends to return + + Default: `100` + + offset: `0` (int, optional) - The offset of the sends to return + + Default: `0` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 163106, + "tx_hash": "1c447b41816f1cfbb83f125c8e05faeaae70dbf27255745ba7393f809bd388eb", + "block_index": 343049, + "source": "1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W", + "destination": "16cRBUNnTWiUh2sXWNn1P7KHyJUmyMkdfH", + "asset": "XCP", + "quantity": 10000000000, + "status": "valid", + "msg_index": 0, + "memo": null + } + ] + } + ``` + +### Get Receive By Address [GET /addresses/{address}/receives] + +Returns the receives of an address + ++ Parameters + + address: `1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs` (str, required) - The address to return + + limit: `5` (int, optional) - The maximum number of receives to return + + Default: `100` + + offset: `0` (int, optional) - The offset of the receives to return + + Default: `0` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 2677412, + "tx_hash": "7e4fbb0a1eeeee34bf499955f1027fb78c514d63a3c8ff2e28c6dad005e4d850", + "block_index": 830981, + "source": "bc1qqxr9grqw73dm95cen3g56mzswuj6eqjedu6csx", + "destination": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + "asset": "XCP", + "quantity": 104200000000, + "status": "valid", + "msg_index": 0, + "memo": null + } + ] + } + ``` + +### Get Send By Address And Asset [GET /addresses/{address}/sends/{asset}] + +Returns the sends of an address and asset + ++ Parameters + + address: `1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W` (str, required) - The address to return + + asset: `XCP` (str, required) - The asset to return + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 163106, + "tx_hash": "1c447b41816f1cfbb83f125c8e05faeaae70dbf27255745ba7393f809bd388eb", + "block_index": 343049, + "source": "1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W", + "destination": "16cRBUNnTWiUh2sXWNn1P7KHyJUmyMkdfH", + "asset": "XCP", + "quantity": 10000000000, + "status": "valid", + "msg_index": 0, + "memo": null + } + ] + } + ``` + +### Get Receive By Address And Asset [GET /addresses/{address}/receives/{asset}] + +Returns the receives of an address and asset + ++ Parameters + + address: `1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs` (str, required) - The address to return + + asset: `XCP` (str, required) - The asset to return + + limit: `5` (int, optional) - The maximum number of receives to return + + Default: `100` + + offset: `0` (int, optional) - The offset of the receives to return + + Default: `0` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 2677412, + "tx_hash": "7e4fbb0a1eeeee34bf499955f1027fb78c514d63a3c8ff2e28c6dad005e4d850", + "block_index": 830981, + "source": "bc1qqxr9grqw73dm95cen3g56mzswuj6eqjedu6csx", + "destination": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + "asset": "XCP", + "quantity": 104200000000, + "status": "valid", + "msg_index": 0, + "memo": null + } + ] + } + ``` + +### Get Dispensers By Address [GET /addresses/{address}/dispensers] + +Returns the dispensers of an address + ++ Parameters + + address: `bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz` (str, required) - The address to return + + status (int, optional) - + + Default: `0` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 2726460, + "tx_hash": "b592d8ca4994d182e4ec63e1659dc4282b1a84466b7d71ed68c281ce63ed4897", + "block_index": 839964, + "source": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", + "asset": "ERYKAHPEPU", + "give_quantity": 1, + "escrow_quantity": 25, + "satoshirate": 50000, + "status": 0, + "give_remaining": 25, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "dispense_count": 0 + } + ] + } + ``` + +### Get Dispensers By Address And Asset [GET /addresses/{address}/dispensers/{asset}] + +Returns the dispensers of an address and an asset + ++ Parameters + + address: `bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz` (str, required) - The address to return + + asset: `ERYKAHPEPU` (str, required) - The asset to return + + status (int, optional) - + + Default: `0` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 2726460, + "tx_hash": "b592d8ca4994d182e4ec63e1659dc4282b1a84466b7d71ed68c281ce63ed4897", + "block_index": 839964, + "source": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", + "asset": "ERYKAHPEPU", + "give_quantity": 1, + "escrow_quantity": 25, + "satoshirate": 50000, + "status": 0, + "give_remaining": 25, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "dispense_count": 0 + } + ] + } + ``` + +### Get Sweeps By Address [GET /addresses/{address}/sweeps] + +Returns the sweeps of an address + ++ Parameters + + address: `18szqTVJUWwYrtRHq98Wn4DhCGGiy3jZ87` (str, required) - The address to return + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 2720537, + "tx_hash": "d8db6281abffdbf6c320d5ade06aeb6fad2f7bfa1a2c2243c6726020a27107d3", + "block_index": 836519, + "source": "18szqTVJUWwYrtRHq98Wn4DhCGGiy3jZ87", + "destination": "1HC2q92SfH1ZHzS4CrDwp6KAipV4FqUL4T", + "flags": 3, + "status": "valid", + "memo": null, + "fee_paid": 1400000 + } + ] + } + ``` + +### Compose Bet [GET /addresses/{address}/compose/bet] + +Composes a transaction to issue a bet against a feed. + ++ Parameters + + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will make the bet + + feed_address: `1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev` (str, required) - The address that hosts the feed to be bet on + + bet_type: `2` (int, required) - Bet 0 for Bullish CFD (deprecated), 1 for Bearish CFD (deprecated), 2 for Equal, 3 for NotEqual + + deadline: `3000000000` (int, required) - The time at which the bet should be decided/settled, in Unix time (seconds since epoch) + + wager_quantity: `1000` (int, required) - The quantities of XCP to wager (in satoshis, hence integer) + + counterwager_quantity: `1000` (int, required) - The minimum quantities of XCP to be wagered against, for the bets to match + + expiration: `100` (int, required) - The number of blocks after which the bet expires if it remains unmatched + + leverage (int, optional) - Leverage, as a fraction of 5040 + + Default: `5040` + + target_value: `1000` (int, optional) - Target value for Equal/NotEqual bet + + Default: `None` + + encoding (str, optional) - The encoding method to use + + Default: `auto` + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + Default: `None` + + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + Default: `546` + + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + Default: `1000` + + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + + Default: `0` + + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + + Default: `None` + + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + + Default: `False` + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + Default: `None` + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + Default: `0` + + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + + Default: `None` + + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + + Default: `None` + + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + Default: `False` + + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + + Default: `False` + + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + + Default: `None` + + old_style_api (bool, optional) - Use the old style API + + Default: `True` + + segwit (bool, optional) - Use segwit + + Default: `False` + ++ Response 200 (application/json) + + ``` + { + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0322020000000000001976a914bce6191bf2fd5981313cae869e9fafe164f7dbaf88ac0000000000000000316a2f0d1e454cefefcbe14dffa4c01ecd608ec45d2594e5d27c699f4ef2725648c509bf828ec195ee18f83e052061236deff2db0306000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "feed_address": "1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev", + "bet_type": 2, + "deadline": 3000000000, + "wager_quantity": 1000, + "counterwager_quantity": 1000, + "target_value": 1000, + "leverage": 5040, + "expiration": 100 + }, + "name": "bet" + } + } + ``` + +### Compose Broadcast [GET /addresses/{address}/compose/broadcast] + +Composes a transaction to broadcast textual and numerical information to the network. + ++ Parameters + + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will be sending (must have the necessary quantity of the specified asset) + + timestamp: `4003903983` (int, required) - The timestamp of the broadcast, in Unix time + + value: `100` (float, required) - Numerical value of the broadcast + + fee_fraction: `0.05` (float, required) - How much of every bet on this feed should go to its operator; a fraction of 1, (i.e. 0.05 is five percent) + + text: `"Hello, world!"` (str, required) - The textual part of the broadcast + + encoding (str, optional) - The encoding method to use + + Default: `auto` + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + Default: `None` + + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + Default: `546` + + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + Default: `1000` + + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + + Default: `0` + + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + + Default: `None` + + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + + Default: `False` + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + Default: `None` + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + Default: `0` + + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + + Default: `None` + + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + + Default: `None` + + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + Default: `False` + + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + + Default: `False` + + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + + Default: `None` + + old_style_api (bool, optional) - Use the old style API + + Default: `True` + + segwit (bool, optional) - Use segwit + + Default: `False` + ++ Response 200 (application/json) + + ``` + { + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0200000000000000002b6a290d1e454cefefcbe17b1100cb21d3398ec45d2594e5d1d822df41d03a332741261ce2f9aee7827cd91c340c0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "timestamp": 4003903983, + "value": 100.0, + "fee_fraction": 0.05, + "text": "\"Hello, world!\"" + }, + "name": "broadcast" + } + } + ``` + +### Compose Btcpay [GET /addresses/{address}/compose/btcpay] + +Composes a transaction to pay for a BTC order match. + ++ Parameters + + address: `bc1qsteve3tfxfg9pcmvzw645sr9zy7es5rx645p6l` (str, required) - The address that will be sending the payment + + order_match_id: `e470416a9500fb046835192da013f48e6468a07dba1bede4a0b68e666ed23c8d_4953bde3d9417b103615c2d3d4b284d4fcf7cbd820e5dd19ac0084e9ebd090b2` (str, required) - The ID of the order match to pay for + + encoding (str, optional) - The encoding method to use + + Default: `auto` + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + Default: `None` + + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + Default: `546` + + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + Default: `1000` + + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + + Default: `0` + + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + + Default: `None` + + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + + Default: `False` + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + Default: `None` + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + Default: `0` + + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + + Default: `None` + + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + + Default: `None` + + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + Default: `False` + + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + + Default: `False` + + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + + Default: `None` + + old_style_api (bool, optional) - Use the old style API + + Default: `True` + + segwit (bool, optional) - Use segwit + + Default: `False` + ++ Response 200 (application/json) + + ``` + { + "result": { + "rawtransaction": "0200000000010161101e1990879ee64168cce92c9caf338bb571e9cb246b1c2ab87124b95091900200000016001482f2ccc569325050e36c13b55a4065113d985066ffffffff0383c3040000000000160014a9943f67bcd30331d5a4ec6d902cbe03789a1b9700000000000000004b6a49aae396d448ed266a7785be1f6fcfa38dbe3e6e043e3d67691f678d6aa3b30e423f66ffad71eaf3231ef8f05dd5cc2f5b1ea14d33274b9cddacca5bd816a1ce6d5b4d498eb66a981db7add758000000000016001482f2ccc569325050e36c13b55a4065113d98506602000000000000", + "params": { + "source": "bc1qsteve3tfxfg9pcmvzw645sr9zy7es5rx645p6l", + "order_match_id": "e470416a9500fb046835192da013f48e6468a07dba1bede4a0b68e666ed23c8d_4953bde3d9417b103615c2d3d4b284d4fcf7cbd820e5dd19ac0084e9ebd090b2" + }, + "name": "btcpay" + } + } + ``` + +### Compose Burn [GET /addresses/{address}/compose/burn] + +Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, possible between blocks 278310 and 283810; on testnet it is still available). + ++ Parameters + + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address with the BTC to burn + + quantity: `1000` (int, required) - The quantities of BTC to burn (1 BTC maximum burn per address) + + overburn (bool, optional) - Whether to allow the burn to exceed 1 BTC for the address + + Default: `False` + + encoding (str, optional) - The encoding method to use + + Default: `auto` + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + Default: `None` + + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + Default: `546` + + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + Default: `1000` + + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + + Default: `0` + + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + + Default: `None` + + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + + Default: `False` + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + Default: `None` + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + Default: `0` + + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + + Default: `None` + + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + + Default: `None` + + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + Default: `False` + + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + + Default: `False` + + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + + Default: `None` + + old_style_api (bool, optional) - Use the old style API + + Default: `True` + + segwit (bool, optional) - Use segwit + + Default: `False` + ++ Response 200 (application/json) + + ``` + { + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff02e8030000000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ace61b0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "quantity": 1000, + "overburn": false + }, + "name": "burn" + } + } + ``` + +### Compose Cancel [GET /addresses/{address}/compose/cancel] + +Composes a transaction to cancel an open order or bet. + ++ Parameters + + address: `15e15ua6A3FJqjMevtrWcFSzKn9k6bMQeA` (str, required) - The address that placed the order/bet to be cancelled + + offer_hash: `8ce3335391bf71f8f12c0573b4f85b9adc4882a9955d9f8e5ababfdd0060279a` (str, required) - The hash of the order/bet to be cancelled + + encoding (str, optional) - The encoding method to use + + Default: `auto` + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + Default: `None` + + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + Default: `546` + + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + Default: `1000` + + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + + Default: `0` + + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + + Default: `None` + + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + + Default: `False` + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + Default: `None` + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + Default: `0` + + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + + Default: `None` + + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + + Default: `None` + + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + Default: `False` + + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + + Default: `False` + + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + + Default: `None` + + old_style_api (bool, optional) - Use the old style API + + Default: `True` + + segwit (bool, optional) - Use segwit + + Default: `False` + ++ Response 200 (application/json) + + ``` + { + "result": { + "rawtransaction": "01000000014709bd6af5d4d7f518f80539d4fe9acd5220a520a7b4287416a7379af9e66154020000001976a91432dff6deb7ca3bbc14f7037fa6ef8a8cf8e39fb988acffffffff0200000000000000002b6a292f3720d2b8ae7343c6d0456802c531e1216f466ceb12b96c6fbe417a97291a0660e51fc47fcc1ee1a878667900000000001976a91432dff6deb7ca3bbc14f7037fa6ef8a8cf8e39fb988ac00000000", + "params": { + "source": "15e15ua6A3FJqjMevtrWcFSzKn9k6bMQeA", + "offer_hash": "8ce3335391bf71f8f12c0573b4f85b9adc4882a9955d9f8e5ababfdd0060279a" + }, + "name": "cancel" + } + } + ``` + +### Compose Destroy [GET /addresses/{address}/compose/destroy] + +Composes a transaction to destroy a quantity of an asset. + ++ Parameters + + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will be sending the asset to be destroyed + + asset: `XCP` (str, required) - The asset to be destroyed + + quantity: `1000` (int, required) - The quantity of the asset to be destroyed + + tag: `"bugs!"` (str, required) - A tag for the destruction + + encoding (str, optional) - The encoding method to use + + Default: `auto` + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + Default: `None` + + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + Default: `546` + + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + Default: `1000` + + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + + Default: `0` + + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + + Default: `None` + + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + + Default: `False` + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + Default: `None` + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + Default: `0` + + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + + Default: `None` + + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + + Default: `None` + + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + Default: `False` + + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + + Default: `False` + + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + + Default: `None` + + old_style_api (bool, optional) - Use the old style API + + Default: `True` + + segwit (bool, optional) - Use segwit + + Default: `False` + ++ Response 200 (application/json) + + ``` + { + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000226a200d1e454cefefcbe10bffa672ce93608ec55d2594e5d1946a776c900731380c6b94160406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "asset": "XCP", + "quantity": 1000, + "tag": "\"bugs!\"" + }, + "name": "destroy" + } + } + ``` + +### Compose Dispenser [GET /addresses/{address}/compose/dispenser] + +Opens or closes a dispenser for a given asset at a given rate of main chain asset (BTC). Escrowed quantity on open must be equal or greater than give_quantity. It is suggested that you escrow multiples of give_quantity to ease dispenser operation. + ++ Parameters + + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will be dispensing (must have the necessary escrow_quantity of the specified asset) + + asset: `XCP` (str, required) - The asset or subasset to dispense + + give_quantity: `1000` (int, required) - The quantity of the asset to dispense + + escrow_quantity: `1000` (int, required) - The quantity of the asset to reserve for this dispenser + + mainchainrate: `100` (int, required) - The quantity of the main chain asset (BTC) per dispensed portion + + status: `0` (int, required) - The state of the dispenser. 0 for open, 1 for open using open_address, 10 for closed + + open_address (str, optional) - The address that you would like to open the dispenser on + + Default: `None` + + oracle_address (str, optional) - The address that you would like to use as a price oracle for this dispenser + + Default: `None` + + encoding (str, optional) - The encoding method to use + + Default: `auto` + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + Default: `None` + + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + Default: `546` + + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + Default: `1000` + + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + + Default: `0` + + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + + Default: `None` + + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + + Default: `False` + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + Default: `None` + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + Default: `0` + + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + + Default: `None` + + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + + Default: `None` + + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + Default: `False` + + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + + Default: `False` + + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + + Default: `None` + + old_style_api (bool, optional) - Use the old style API + + Default: `True` + + segwit (bool, optional) - Use segwit + + Default: `False` + ++ Response 200 (application/json) + + ``` + { + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0200000000000000002c6a2a0d1e454cefefcbe169ffa672ce93608ec55d2594e5d1946a774ef272564b2d4ad8c28ec195ee18f85a160c0b0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "asset": "XCP", + "give_quantity": 1000, + "escrow_quantity": 1000, + "mainchainrate": 100, + "status": 0, + "open_address": null, + "oracle_address": null + }, + "name": "dispenser" + } + } + ``` + +### Compose Dividend [GET /addresses/{address}/compose/dividend] + +Composes a transaction to issue a dividend to holders of a given asset. + ++ Parameters + + address: `1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD` (str, required) - The address that will be issuing the dividend (must have the ownership of the asset which the dividend is being issued on) + + quantity_per_unit: `1` (int, required) - The amount of dividend_asset rewarded + + asset: `PEPECASH` (str, required) - The asset or subasset that the dividends are being rewarded on + + dividend_asset: `XCP` (str, required) - The asset or subasset that the dividends are paid in + + encoding (str, optional) - The encoding method to use + + Default: `auto` + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + Default: `None` + + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + Default: `546` + + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + Default: `1000` + + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + + Default: `0` + + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + + Default: `None` + + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + + Default: `False` + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + Default: `None` + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + Default: `0` + + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + + Default: `None` + + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + + Default: `None` + + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + Default: `False` + + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + + Default: `False` + + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + + Default: `None` + + old_style_api (bool, optional) - Use the old style API + + Default: `True` + + segwit (bool, optional) - Use segwit + + Default: `False` + ++ Response 200 (application/json) + + ``` + { + "result": { + "rawtransaction": "01000000010af94458ae5aa794c49cd27f7b800a7c68c8dd4f59ff66c99db4e9e353c06d93010000001976a914a9055398b92818794b38b15794096f752167e25f88acffffffff020000000000000000236a21068a00268d252c3a8ed0bddb5ef79f823894aa7de1e196c005510f4d787c936a979b230000000000001976a914a9055398b92818794b38b15794096f752167e25f88ac00000000", + "params": { + "source": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", + "quantity_per_unit": 1, + "asset": "PEPECASH", + "dividend_asset": "XCP" + }, + "name": "dividend" + } + } + ``` + +### Compose Issuance [GET /addresses/{address}/compose/issuance] + +Composes a transaction to Issue a new asset, issue more of an existing asset, lock an asset, reset existing supply, or transfer the ownership of an asset. + ++ Parameters + + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will be issuing or transfering the asset + + asset: `XCPTEST` (str, required) - The assets to issue or transfer. This can also be a subasset longname for new subasset issuances + + quantity: `1000` (int, required) - The quantity of the asset to issue (set to 0 if transferring an asset) + + transfer_destination: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, optional) - The address to receive the asset + + Default: `None` + + divisible (bool, optional) - Whether this asset is divisible or not (if a transfer, this value must match the value specified when the asset was originally issued) + + Default: `True` + + lock (bool, optional) - Whether this issuance should lock supply of this asset forever + + Default: `False` + + reset (bool, optional) - Wether this issuance should reset any existing supply + + Default: `False` + + description (str, optional) - A textual description for the asset + + Default: `None` + + encoding (str, optional) - The encoding method to use + + Default: `auto` + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + Default: `None` + + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + Default: `546` + + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + Default: `1000` + + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + + Default: `0` + + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + + Default: `None` + + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + + Default: `False` + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + Default: `None` + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + Default: `0` + + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + + Default: `None` + + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + + Default: `None` + + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + Default: `False` + + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + + Default: `False` + + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + + Default: `None` + + old_style_api (bool, optional) - Use the old style API + + Default: `True` + + segwit (bool, optional) - Use segwit + + Default: `False` + ++ Response 200 (application/json) + + ``` + { + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0322020000000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac0000000000000000236a210d1e454cefefcbe173ffa672cf3a36751b5d2594e5d1946a774ff272960578057c17ec0306000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "asset": "XCPTEST", + "quantity": 1000, + "transfer_destination": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "divisible": true, + "lock": false, + "reset": false, + "description": null + }, + "name": "issuance" + } + } + ``` + +### Compose Mpma [GET /addresses/{address}/compose/mpma] + +Composes a transaction to send multiple payments to multiple addresses. + ++ Parameters + + address: `1Fv87qmdtjQDP9d4p9E5ncBQvYB4a3Rhy6` (str, required) - The address that will be sending (must have the necessary quantity of the specified asset) + + assets: `BAABAABLKSHP,BADHAIRDAY,BADWOJAK` (str, required) - comma-separated list of assets to send + + destinations: `1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev,1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD,1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs` (str, required) - comma-separated list of addresses to send to + + quantities: `1,2,3` (str, required) - comma-separated list of quantities to send + + memo: `"Hello, world!"` (str, required) - The Memo associated with this transaction + + memo_is_hex: `False` (bool, required) - Whether the memo field is a hexadecimal string + + encoding (str, optional) - The encoding method to use + + Default: `auto` + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + Default: `None` + + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + Default: `546` + + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + Default: `1000` + + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + + Default: `0` + + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + + Default: `None` + + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + + Default: `False` + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + Default: `None` + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + Default: `0` + + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + + Default: `None` + + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + + Default: `None` + + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + Default: `False` + + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + + Default: `False` + + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + + Default: `None` + + old_style_api (bool, optional) - Use the old style API + + Default: `True` + + segwit (bool, optional) - Use segwit + + Default: `False` + ++ Response 200 (application/json) + + ``` + { + "result": { + "rawtransaction": "0100000001fc9b7b3a0552bdfc3c62096e9d7669fb72d5482c7b4f9618138fdffdc831d60b000000001976a914a39dbfab6f1da182af53a4d14799ee545a6176be88acffffffff04e80300000000000069512103ce014780415d0eafbdadfacfa0cf2604a005a87157042f277627c952eedcbb1f2103abf2b72459ee70e6240a7b2ade1a6fa41c7f38cc1db5e63c6f92c01b859017ee2102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53aee80300000000000069512102ce014780415d0eafbd2fcbf00e308d420b59df89ebba83369fea96a9a06fcf562102373ec5e1389ccadf0a972ec451f8aea015104ded7a57b936d374d0ecfe8067412102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53aee80300000000000069512103d0014780415d0eafbd76dacca0b613dda4b8f37e3015031f11220ac5cf43ef4e21034051b78cdcbde85f0c120261e6ab383015104ded7a57b93cd374d900776d4e132102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53ae22fd0200000000001976a914a39dbfab6f1da182af53a4d14799ee545a6176be88ac00000000", + "params": { + "source": "1Fv87qmdtjQDP9d4p9E5ncBQvYB4a3Rhy6", + "asset_dest_quant_list": [ + [ + "BAABAABLKSHP", + "1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev", + 1 + ], + [ + "BADHAIRDAY", + "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", + 2 + ], + [ + "BADWOJAK", + "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + 3 + ] + ], + "memo": "\"Hello, world!\"", + "memo_is_hex": false + }, + "name": "mpma" + } + } + ``` + +### Compose Order [GET /addresses/{address}/compose/order] + +Composes a transaction to place an order on the distributed exchange. + ++ Parameters + + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will be issuing the order request (must have the necessary quantity of the specified asset to give) + + give_asset: `XCP` (str, required) - The asset that will be given in the trade + + give_quantity: `1000` (int, required) - The quantity of the asset that will be given + + get_asset: `PEPECASH` (str, required) - The asset that will be received in the trade + + get_quantity: `1000` (int, required) - The quantity of the asset that will be received + + expiration: `100` (int, required) - The number of blocks for which the order should be valid + + fee_required: `100` (int, required) - The miners’ fee required to be paid by orders for them to match this one; in BTC; required only if buying BTC (may be zero, though) + + encoding (str, optional) - The encoding method to use + + Default: `auto` + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + Default: `None` + + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + Default: `546` + + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + Default: `1000` + + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + + Default: `0` + + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + + Default: `None` + + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + + Default: `False` + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + Default: `None` + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + Default: `0` + + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + + Default: `None` + + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + + Default: `None` + + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + Default: `False` + + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + + Default: `False` + + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + + Default: `None` + + old_style_api (bool, optional) - Use the old style API + + Default: `True` + + segwit (bool, optional) - Use segwit + + Default: `False` + ++ Response 200 (application/json) + + ``` + { + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000356a330d1e454cefefcbe16fffa672ce93608ec55d2594e5d1946a774ef2724a2a4f457bc28ec195ee18fbd616f461236d8be718616dac000406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "give_asset": "XCP", + "give_quantity": 1000, + "get_asset": "PEPECASH", + "get_quantity": 1000, + "expiration": 100, + "fee_required": 100 + }, + "name": "order" + } + } + ``` + +### Compose Send [GET /addresses/{address}/compose/send] + +Composes a transaction to send a quantity of an asset to another address. + ++ Parameters + + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will be sending (must have the necessary quantity of the specified asset) + + destination: `1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev` (str, required) - The address that will be receiving the asset + + asset: `XCP` (str, required) - The asset or subasset to send + + quantity: `1000` (int, required) - The quantity of the asset to send + + memo (str, optional) - The Memo associated with this transaction + + Default: `None` + + memo_is_hex (bool, optional) - Whether the memo field is a hexadecimal string + + Default: `False` + + use_enhanced_send (bool, optional) - If this is false, the construct a legacy transaction sending bitcoin dust + + Default: `True` + + encoding (str, optional) - The encoding method to use + + Default: `auto` + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + Default: `None` + + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + Default: `546` + + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + Default: `1000` + + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + + Default: `0` + + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + + Default: `None` + + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + + Default: `False` + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + Default: `None` + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + Default: `0` + + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + + Default: `None` + + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + + Default: `None` + + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + Default: `False` + + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + + Default: `False` + + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + + Default: `None` + + old_style_api (bool, optional) - Use the old style API + + Default: `True` + + segwit (bool, optional) - Use segwit + + Default: `False` + ++ Response 200 (application/json) + + ``` + { + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000306a2e0d1e454cefefcbe167ffa672ce93608ec55d2594e5d1946a774e4e944f50dfb46943bffd3b68866791f7f496f8c270060406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "destination": "1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev", + "asset": "XCP", + "quantity": 1000, + "memo": null, + "memo_is_hex": false, + "use_enhanced_send": true + }, + "name": "send" + } + } + ``` + +### Compose Sweep [GET /addresses/{address}/compose/sweep] + +Composes a transaction to Sends all assets and/or transfer ownerships to a destination address. + ++ Parameters + + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will be sending + + destination: `1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev` (str, required) - The address to receive the assets and/or ownerships + + flags: `7` (int, required) - An OR mask of flags indicating how the sweep should be processed. Possible flags are: +- FLAG_BALANCES: (integer) 1, specifies that all balances should be transferred. +- FLAG_OWNERSHIP: (integer) 2, specifies that all ownerships should be transferred. +- FLAG_BINARY_MEMO: (integer) 4, specifies that the memo is in binary/hex form. + + + memo: `FFFF` (str, required) - The Memo associated with this transaction in hex format + + encoding (str, optional) - The encoding method to use + + Default: `auto` + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + Default: `None` + + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + Default: `546` + + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + Default: `1000` + + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + + Default: `0` + + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + + Default: `None` + + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + + Default: `False` + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + Default: `None` + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + Default: `0` + + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + + Default: `None` + + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + + Default: `None` + + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + Default: `False` + + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + + Default: `False` + + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + + Default: `None` + + old_style_api (bool, optional) - Use the old style API + + Default: `True` + + segwit (bool, optional) - Use segwit + + Default: `False` + ++ Response 200 (application/json) + + ``` + { + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000236a210d1e454cefefcbe161ff1a94d78892739ddc14a84b570af630af96858de42ab6cf6e150406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "destination": "1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev", + "flags": 7, + "memo": "FFFF" + }, + "name": "sweep" + } + } + ``` + +## Group Assets + +### Get Valid Assets [GET /assets] + +Returns the valid assets + ++ Parameters + + offset: `0` (int, optional) - The offset of the assets to return + + Default: `0` + + limit: `5` (int, optional) - The limit of the assets to return + + Default: `100` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "asset": "A100000000000000000", + "asset_longname": null + }, + { + "asset": "A1000000000000000000", + "asset_longname": null + }, + { + "asset": "A10000000000000000000", + "asset_longname": null + }, + { + "asset": "A10000000000000000001", + "asset_longname": null + }, + { + "asset": "A10000000000000000002", + "asset_longname": null + } + ] + } + ``` + +### Get Asset Info [GET /assets/{asset}] + +Returns the asset information + ++ Parameters + + asset: `UNNEGOTIABLE` (str, required) - The asset to return + ++ Response 200 (application/json) + + ``` + { + "result": { + "asset": "UNNEGOTIABLE", + "asset_longname": null, + "owner": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": false, + "locked": false, + "supply": 1, + "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "holder_count": 1 + } + } + ``` + +### Get Asset Balances [GET /assets/{asset}/balances] + +Returns the asset balances + ++ Parameters + + asset: `UNNEGOTIABLE` (str, required) - The asset to return + + exclude_zero_balances: `True` (bool, optional) - Whether to exclude zero balances + + Default: `True` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "UNNEGOTIABLE", + "quantity": 1 + } + ] + } + ``` + +### Get Balance By Address And Asset [GET /assets/{asset}/balances/{address}] + +Returns the balance of an address and asset + ++ Parameters + + address: `1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs` (str, required) - The address to return + + asset: `XCP` (str, required) - The asset to return + ++ Response 200 (application/json) + + ``` + { + "result": { + "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + "asset": "XCP", + "quantity": 104200000000 + } + } + ``` + +### Get Orders By Asset [GET /assets/{asset}/orders] + +Returns the orders of an asset + ++ Parameters + + asset: `NEEDPEPE` (str, required) - The asset to return + + status: `filled` (str, optional) - The status of the orders to return + + Default: `open` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 825373, + "tx_hash": "0129611a0aece52adddf6d929e75c703baa9cdcb7e4ce887aa859f9640aa9640", + "block_index": 455461, + "source": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "PEPECASH", + "get_quantity": 400000000000, + "get_remaining": 0, + "expiration": 1000, + "expire_index": 456457, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 46098, + "fee_provided_remaining": 46098, + "status": "filled" + }, + { + "tx_index": 2225134, + "tx_hash": "5b6e0c741d765ebd883dc16eecfb5c340c52865cabf297ca2c1432437c1348b7", + "block_index": 772817, + "source": "1FnM7akSCD8G3fRQHCUEXRCfL35gptsPZB", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "XCP", + "get_quantity": 80800000000, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 777817, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 5544, + "fee_provided_remaining": 5544, + "status": "filled" + }, + { + "tx_index": 1946026, + "tx_hash": "75dc6ee1f67317e674ef33b617d3a9839ee53bf4a2e8274c88d6202d4d89b59a", + "block_index": 727444, + "source": "1GotRejB6XsGgMsM79TvcypeanDJRJbMtg", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "XCP", + "get_quantity": 70000000000, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 732381, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 264, + "fee_provided_remaining": 264, + "status": "filled" + }, + { + "tx_index": 2202451, + "tx_hash": "77f568fc6604dbe209d2ea1b0158d7de20723c0178107eb570f4f2a719b0d7c7", + "block_index": 772817, + "source": "184gKLQTtQU29LXbxbYJkUV4if9SmW6v2d", + "give_asset": "XCP", + "give_quantity": 80800000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 773300, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 264, + "fee_provided_remaining": 264, + "status": "filled" + }, + { + "tx_index": 825411, + "tx_hash": "7b2369f40078f4d98a3d3a7733315a1c4efd7977c75f7066dd447d5c7eed7f20", + "block_index": 455461, + "source": "18cmgoX99Nrm411YKpmTQsp23qczWdxS6w", + "give_asset": "PEPECASH", + "give_quantity": 300000000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 460461, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 40000, + "fee_provided_remaining": 40000, + "status": "filled" + }, + { + "tx_index": 825403, + "tx_hash": "7e1abf6ad57eb61227015fc7a333da034b4dd2f1c4e23cf106864b60a20feef7", + "block_index": 455460, + "source": "18cmgoX99Nrm411YKpmTQsp23qczWdxS6w", + "give_asset": "PEPECASH", + "give_quantity": 200000000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 1000, + "expire_index": 456460, + "fee_required": 20000, + "fee_required_remaining": 20000, + "fee_provided": 50766, + "fee_provided_remaining": 50766, + "status": "filled" + }, + { + "tx_index": 825370, + "tx_hash": "8e4d324407b62de773af53f8f7a556882ac82a217c216491a28072f293918fe6", + "block_index": 455457, + "source": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "PEPECASH", + "get_quantity": 100000000000, + "get_remaining": -1100000000, + "expiration": 1000, + "expire_index": 456457, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 75791, + "fee_provided_remaining": 75791, + "status": "filled" + }, + { + "tx_index": 825413, + "tx_hash": "927878fa98edb6d24310c45254c324f3d5a7f625e2a3a0e7fd1e749b49493750", + "block_index": 455461, + "source": "18cmgoX99Nrm411YKpmTQsp23qczWdxS6w", + "give_asset": "PEPECASH", + "give_quantity": 400000000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 460461, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 40000, + "fee_provided_remaining": 40000, + "status": "filled" + }, + { + "tx_index": 1946587, + "tx_hash": "b747f290cbbad6faa1c1c05d5c6d001b5a3ef487027bb0d4eefcdc9f6e865c39", + "block_index": 727444, + "source": "1AtcSh7uxenQ6AR5xqr6agAegWRUF5N4uh", + "give_asset": "XCP", + "give_quantity": 70000000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 732444, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 792, + "fee_provided_remaining": 792, + "status": "filled" + }, + { + "tx_index": 825371, + "tx_hash": "b83c96217214decb6316c3619bc88a3471d17e46eb3708406c8f878dedd61610", + "block_index": 455460, + "source": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "PEPECASH", + "get_quantity": 200000000000, + "get_remaining": 0, + "expiration": 1000, + "expire_index": 456457, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 46098, + "fee_provided_remaining": 46098, + "status": "filled" + }, + { + "tx_index": 825372, + "tx_hash": "e32154f8ade796df0b121604de140703d062d22d1e82e77e629e6096668c812f", + "block_index": 455461, + "source": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "PEPECASH", + "get_quantity": 300000000000, + "get_remaining": 0, + "expiration": 1000, + "expire_index": 456457, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 46098, + "fee_provided_remaining": 46098, + "status": "filled" + } + ] + } + ``` + +### Get Credits By Asset [GET /assets/{asset}/credits] + +Returns the credits of an asset + ++ Parameters + + asset: `UNNEGOTIABLE` (str, required) - The asset to return + + limit: `5` (int, optional) - The maximum number of credits to return + + Default: `100` + + offset: `0` (int, optional) - The offset of the credits to return + + Default: `0` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "block_index": 840464, + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "UNNEGOTIABLE", + "quantity": 1, + "calling_function": "issuance", + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605 + } + ] + } + ``` + +### Get Debits By Asset [GET /assets/{asset}/debits] + +Returns the debits of an asset + ++ Parameters + + asset: `XCP` (str, required) - The asset to return + + limit: `5` (int, optional) - The maximum number of debits to return + + Default: `100` + + offset: `0` (int, optional) - The offset of the debits to return + + Default: `0` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "block_index": 280091, + "address": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1000000000, + "action": "send", + "event": "1c20d6596f6be031c94def5ad93a52217d76371885adcc53c91c3b1eaf76ccce", + "tx_index": 729 + }, + { + "block_index": 280112, + "address": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1100000000, + "action": "send", + "event": "4dacd03d73cb497229dbfe2e7209adc4221540efe0e4c57f408b09b2fd36ece6", + "tx_index": 749 + }, + { + "block_index": 280112, + "address": "1PMacKVWDszkBRbb2iWWvX63BwhKUTsSBd", + "asset": "XCP", + "quantity": 100000000, + "action": "send", + "event": "057d10cc33455f4f7af44d2f030b3866e3a16416ecf984e304c76abe98393c1d", + "tx_index": 752 + }, + { + "block_index": 280114, + "address": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1100000000, + "action": "send", + "event": "3ac6ea5b329832e2dc31ead6c5277beccb7d95f0d9f20f256f97067223c81e00", + "tx_index": 755 + }, + { + "block_index": 280156, + "address": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1100000000, + "action": "send", + "event": "66fc1409ac6646bd8c267de89c57d2204e31bb6dfce9ee2a3ab18416fadf9e9c", + "tx_index": 766 + } + ] + } + ``` + +### Get Dividends [GET /assets/{asset}/dividends] + +Returns the dividends of an asset + ++ Parameters + + asset: `GMONEYPEPE` (str, required) - The asset to return + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 1914456, + "tx_hash": "30760e413947ebdc80ed7a5ada1bd4466800b87e9976bbe811ad4e2b46546359", + "block_index": 724381, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "ENDTHEFED", + "quantity_per_unit": 1, + "fee_paid": 2520000, + "status": "valid" + }, + { + "tx_index": 1915246, + "tx_hash": "827794cbab3299f80a5b8b8cb8ec29ec3aee1373f7da2c05a156bed902bf4684", + "block_index": 724479, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "TRUMPDANCING", + "quantity_per_unit": 100, + "fee_paid": 2520000, + "status": "valid" + }, + { + "tx_index": 1920208, + "tx_hash": "7014f1e259531ba9632ca5000c35df5bd47f237318e48955900453ce9c07e917", + "block_index": 724931, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "CTRWOJACK", + "quantity_per_unit": 1111, + "fee_paid": 2700000, + "status": "valid" + }, + { + "tx_index": 1927909, + "tx_hash": "5556fd2b0802cf3bc0abd5001ecbac3adbc5b7c5c46a145a78daeef358c308de", + "block_index": 725654, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "WHITERUSSIAN", + "quantity_per_unit": 1, + "fee_paid": 3220000, + "status": "valid" + }, + { + "tx_index": 1983693, + "tx_hash": "cda646285cc63f758d19b5403070f23e2a6e4b34eb3b86b63a0f56f971345657", + "block_index": 730568, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "A4520591452211866149", + "quantity_per_unit": 1, + "fee_paid": 4040000, + "status": "valid" + }, + { + "tx_index": 1983842, + "tx_hash": "e4b73dc974cc279b873b78e5dc4a347c08788b02143ae27aa0582f900289be10", + "block_index": 730588, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "NCSWIC", + "quantity_per_unit": 1, + "fee_paid": 4040000, + "status": "valid" + }, + { + "tx_index": 1996395, + "tx_hash": "b342feb1421df107010ad3c8ee2043ded802bdf6cd619862459da3d0f87d6a99", + "block_index": 731994, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "FUCKTHEFED", + "quantity_per_unit": 1, + "fee_paid": 4380000, + "status": "valid" + }, + { + "tx_index": 2035947, + "tx_hash": "02d715fd9e8b7bbc782b1b2d92a1b9ffae9326bfc88ba76c453c515ad7c8c2bc", + "block_index": 738763, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "HOLDTHELINE", + "quantity_per_unit": 1, + "fee_paid": 4940000, + "status": "valid" + }, + { + "tx_index": 2174481, + "tx_hash": "b935a06fc34d8fa4f0c526984085b1b12c78e899415e595b625f1bee84ce3709", + "block_index": 762733, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "EOXIXIZERO", + "quantity_per_unit": 1, + "fee_paid": 6500000, + "status": "valid" + }, + { + "tx_index": 2198534, + "tx_hash": "a063e9a745b9f6bc3201f72abff196de20ec106bcc71d820673d516ddbb3aa90", + "block_index": 767569, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "TRUMPCARDS", + "quantity_per_unit": 1, + "fee_paid": 6660000, + "status": "valid" + }, + { + "tx_index": 2704948, + "tx_hash": "437102ca4698f63a12e369f6168e3c7f5f8eef3e225395d515775673e33d39c1", + "block_index": 832745, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "FUCKYOUWAR", + "quantity_per_unit": 1, + "fee_paid": 6840000, + "status": "valid" + }, + { + "tx_index": 2704949, + "tx_hash": "7d3807cc58fa2d9751b2b0089bfa8fa86ef795821be6d8e9418ab3a819eba299", + "block_index": 832745, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "MEDICINEPEPE", + "quantity_per_unit": 1, + "fee_paid": 6840000, + "status": "valid" + } + ] + } + ``` + +### Get Issuances By Asset [GET /assets/{asset}/issuances] + +Returns the issuances of an asset + ++ Parameters + + asset: `UNNEGOTIABLE` (str, required) - The asset to return + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 2726605, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "msg_index": 0, + "block_index": 840464, + "asset": "UNNEGOTIABLE", + "quantity": 1, + "divisible": 0, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "transfer": 0, + "callable": 0, + "call_date": 0, + "call_price": 0.0, + "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "fee_paid": 50000000, + "locked": 0, + "status": "valid", + "asset_longname": null, + "reset": 0 + } + ] + } + ``` + +### Get Sends Or Receives By Asset [GET /assets/{asset}/sends] + +Returns the sends of an asset + ++ Parameters + + asset: `XCP` (str, required) - The asset to return + + limit: `5` (int, optional) - The maximum number of sends to return + + Default: `100` + + offset: `0` (int, optional) - The offset of the sends to return + + Default: `0` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 729, + "tx_hash": "1c20d6596f6be031c94def5ad93a52217d76371885adcc53c91c3b1eaf76ccce", + "block_index": 280091, + "source": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "destination": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1000000000, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 749, + "tx_hash": "4dacd03d73cb497229dbfe2e7209adc4221540efe0e4c57f408b09b2fd36ece6", + "block_index": 280112, + "source": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "destination": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1100000000, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 752, + "tx_hash": "057d10cc33455f4f7af44d2f030b3866e3a16416ecf984e304c76abe98393c1d", + "block_index": 280112, + "source": "1PMacKVWDszkBRbb2iWWvX63BwhKUTsSBd", + "destination": "1PMacKVWDszkBRbb2iWWvX63BwhKUTsSBd", + "asset": "XCP", + "quantity": 100000000, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 755, + "tx_hash": "3ac6ea5b329832e2dc31ead6c5277beccb7d95f0d9f20f256f97067223c81e00", + "block_index": 280114, + "source": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "destination": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1100000000, + "status": "valid", + "msg_index": 0, + "memo": null + }, + { + "tx_index": 766, + "tx_hash": "66fc1409ac6646bd8c267de89c57d2204e31bb6dfce9ee2a3ab18416fadf9e9c", + "block_index": 280156, + "source": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "destination": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1100000000, + "status": "valid", + "msg_index": 0, + "memo": null + } + ] + } + ``` + +### Get Dispensers By Asset [GET /assets/{asset}/dispensers] + +Returns the dispensers of an asset + ++ Parameters + + asset: `ERYKAHPEPU` (str, required) - The asset to return + + status (int, optional) - + + Default: `0` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 2726460, + "tx_hash": "b592d8ca4994d182e4ec63e1659dc4282b1a84466b7d71ed68c281ce63ed4897", + "block_index": 839964, + "source": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", + "asset": "ERYKAHPEPU", + "give_quantity": 1, + "escrow_quantity": 25, + "satoshirate": 50000, + "status": 0, + "give_remaining": 25, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "dispense_count": 0 + } + ] + } + ``` + +### Get Dispensers By Address And Asset [GET /assets/{asset}/dispensers/{address}] + +Returns the dispensers of an address and an asset + ++ Parameters + + address: `bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz` (str, required) - The address to return + + asset: `ERYKAHPEPU` (str, required) - The asset to return + + status (int, optional) - + + Default: `0` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 2726460, + "tx_hash": "b592d8ca4994d182e4ec63e1659dc4282b1a84466b7d71ed68c281ce63ed4897", + "block_index": 839964, + "source": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", + "asset": "ERYKAHPEPU", + "give_quantity": 1, + "escrow_quantity": 25, + "satoshirate": 50000, + "status": 0, + "give_remaining": 25, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "dispense_count": 0 + } + ] + } + ``` + +### Get Asset Holders [GET /assets/{asset}/holders] + +Returns the holders of an asset + ++ Parameters + + asset: `ERYKAHPEPU` (str, required) - The asset to return + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "address": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "address_quantity": 63, + "escrow": null + }, + { + "address": "16yRstRXStVJJ1TN2S4DCWifyrCsetpma7", + "address_quantity": 1, + "escrow": null + }, + { + "address": "bc1qsvqsa9arwz30g2z0w09twzn8gz3380h36yxacs", + "address_quantity": 2, + "escrow": null + }, + { + "address": "17PnWBjHkekZKQPVagmTR5HiD51pN8WHC8", + "address_quantity": 1, + "escrow": null + }, + { + "address": "1FRxFpP9XoRsvZFVqGtt4fjjgKe1h5tbAh", + "address_quantity": 1, + "escrow": null + }, + { + "address": "1AdHg2q3M2rMFRgZyZ7RQyNHdwjSib7wSZ", + "address_quantity": 2, + "escrow": null + }, + { + "address": "1CTnziWXidHzY3qT8gwLa1ZxZK37A7HreR", + "address_quantity": 1, + "escrow": null + }, + { + "address": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", + "address_quantity": 25, + "escrow": null + } + ] + } + ``` + +## Group Orders + +### Get Order [GET /orders/{order_hash}] + +Returns the information of an order + ++ Parameters + + order_hash: `23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776` (str, required) - The hash of the transaction that created the order + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 2724132, + "tx_hash": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776", + "block_index": 840381, + "source": "15L7U55PAsHLEpQkZqz62e3eqWd9AHb2DH", + "give_asset": "PEPECASH", + "give_quantity": 6966600000000, + "give_remaining": 900000000000, + "get_asset": "XCP", + "get_quantity": 11076894000, + "get_remaining": 1431000000, + "expiration": 5000, + "expire_index": 843055, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 4488, + "fee_provided_remaining": 4488, + "status": "open" + } + ] + } + ``` + +### Get Order Matches By Order [GET /orders/{order_hash}/matches] + +Returns the order matches of an order + ++ Parameters + + order_hash: `5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947` (str, required) - The hash of the transaction that created the order + + status: `completed` (str, optional) - The status of the order matches to return + + Default: `pending` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "id": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776_5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947", + "tx0_index": 2724132, + "tx0_hash": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776", + "tx0_address": "15L7U55PAsHLEpQkZqz62e3eqWd9AHb2DH", + "tx1_index": 2726591, + "tx1_hash": "5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947", + "tx1_address": "15e15ua6A3FJqjMevtrWcFSzKn9k6bMQeA", + "forward_asset": "PEPECASH", + "forward_quantity": 6066600000000, + "backward_asset": "XCP", + "backward_quantity": 9645894000, + "tx0_block_index": 838055, + "tx1_block_index": 840381, + "block_index": 840381, + "tx0_expiration": 5000, + "tx1_expiration": 8064, + "match_expire_index": 840401, + "fee_paid": 0, + "status": "completed" + } + ] + } + ``` + +### Get Btcpays By Order [GET /orders/{order_hash}/btcpays] + +Returns the BTC pays of an order + ++ Parameters + + order_hash: `299b5b648f54eacb839f3487232d49aea373cdd681b706d4cc0b5e0b03688db4` (str, required) - The hash of the transaction that created the order + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 2719343, + "tx_hash": "6cfa7f31b43a46e5ad74a9db810bd6cac56235a8ebc73ec63d01b38ea7ea2414", + "block_index": 836188, + "source": "1NfJnJdAdmm2rJCFW54NsAKqqTTMexCNJ3", + "destination": "1BepkwAhEmEuEGF349XjmEUrRvoy9a7Biv", + "btc_amount": 4500000, + "order_match_id": "0a1387df82a8a7e9cec01c52c8fee01f6995c4e39dc5804e1d2bf40d9368f5c5_299b5b648f54eacb839f3487232d49aea373cdd681b706d4cc0b5e0b03688db4", + "status": "valid" + } + ] + } + ``` + +## Group Bets + +### Get Bet [GET /bets/{bet_hash}] + +Returns the information of a bet + ++ Parameters + + bet_hash: `5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed` (str, required) - The hash of the transaction that created the bet + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 15106, + "tx_hash": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed", + "block_index": 304063, + "source": "18ZNyaAcH4HugeofwbrpLoUNiayxJRH65c", + "feed_address": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "bet_type": 3, + "deadline": 1401828300, + "wager_quantity": 50000000, + "wager_remaining": 0, + "counterwager_quantity": 50000000, + "counterwager_remaining": 0, + "target_value": 1.0, + "leverage": 5040, + "expiration": 11, + "expire_index": 304073, + "fee_fraction_int": 1000000, + "status": "filled" + } + ] + } + ``` + +### Get Bet Matches By Bet [GET /bets/{bet_hash}/matches] + +Returns the bet matches of a bet + ++ Parameters + + bet_hash: `5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed` (str, required) - The hash of the transaction that created the bet + + status: `expired` (str, optional) - The status of the bet matches + + Default: `pending` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "id": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed_cb5f888c299a50967d523513daed71636d927e6ef3dbda85feb11ff112ae4330", + "tx0_index": 15106, + "tx0_hash": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed", + "tx0_address": "18ZNyaAcH4HugeofwbrpLoUNiayxJRH65c", + "tx1_index": 15108, + "tx1_hash": "cb5f888c299a50967d523513daed71636d927e6ef3dbda85feb11ff112ae4330", + "tx1_address": "1PTqJmRCMGs4qBEh2APAFSrBv95Uf1hfiD", + "tx0_bet_type": 3, + "tx1_bet_type": 2, + "feed_address": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "initial_value": -1, + "deadline": 1401828300, + "target_value": 1.0, + "leverage": 5040, + "forward_quantity": 50000000, + "backward_quantity": 50000000, + "tx0_block_index": 304062, + "tx1_block_index": 304063, + "block_index": 306379, + "tx0_expiration": 11, + "tx1_expiration": 1459, + "match_expire_index": 304073, + "fee_fraction_int": 1000000, + "status": "expired" + } + ] + } + ``` + +### Get Resolutions By Bet [GET /bets/{bet_hash}/resolutions] + +Returns the resolutions of a bet + ++ Parameters + + bet_hash: `36bbbb7dbd85054dac140a8ad8204eda2ee859545528bd2a9da69ad77c277ace` (str, required) - The hash of the transaction that created the bet + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "bet_match_id": "36bbbb7dbd85054dac140a8ad8204eda2ee859545528bd2a9da69ad77c277ace_d70ee4e44f02fe6258ee0c267f33f304a0fc61d4ce424852f58c28967dc1924f", + "bet_match_type_id": 5, + "block_index": 401128, + "winner": "Equal", + "settled": null, + "bull_credit": null, + "bear_credit": null, + "escrow_less_fee": 2000000, + "fee": 0 + } + ] + } + ``` + +## Group Burns + +### Get All Burns [GET /burns] + +Returns the burns + ++ Parameters + + status: `valid` (str, optional) - The status of the burns to return + + Default: `valid` + + offset: `10` (int, optional) - The offset of the burns to return + + Default: `0` + + limit: `5` (int, optional) - The limit of the burns to return + + Default: `100` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 10, + "tx_hash": "41bbe1ec81da008a0e92758efb6084af3a6b6acf483983456ec797ee59c0e0f1", + "block_index": 278511, + "source": "12crRpZpn93PKTQ4WYxHMw4xi6ckh1CFR3", + "burned": 99900000, + "earned": 148024554545, + "status": "valid" + }, + { + "tx_index": 11, + "tx_hash": "c403a92281b568c7d428d942354d026594dc54ae35c21f53ecf5c918208c45de", + "block_index": 278511, + "source": "13UXh9dBEhA48gJiegJNodqe91PK88f4pW", + "burned": 99900000, + "earned": 148024554545, + "status": "valid" + }, + { + "tx_index": 12, + "tx_hash": "749ba1c2bd314f7b98e9cfb44575495b4ad2cf624901c65488fbc4f57a3dc0ac", + "block_index": 278511, + "source": "19Ht3rkW7JB9VuC7rsZEGZju96ujzchaZZ", + "burned": 99900000, + "earned": 148024554545, + "status": "valid" + }, + { + "tx_index": 13, + "tx_hash": "da330160b71138f9bda5e126df0d5d6248c0879d88e16255c74135274d8ebd27", + "block_index": 278511, + "source": "16Fu8Edsvxqixg6VnaHKPWE2TEsqQMwXfV", + "burned": 99900000, + "earned": 148024554545, + "status": "valid" + }, + { + "tx_index": 14, + "tx_hash": "66994176733650e77ae0cf34349f63e6538649f40f86d2719013d915bbb7701e", + "block_index": 278517, + "source": "14FFaRsfzYQxhZQv1YsMn65MvMLfJShgM8", + "burned": 99900000, + "earned": 147970063636, + "status": "valid" + } + ] + } + ``` + +## Group Dispensers + +### Get Dispenser Info By Hash [GET /dispensers/{dispenser_hash}] + +Returns the dispenser information by tx_hash + ++ Parameters + + dispenser_hash: `753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a` (str, required) - The hash of the dispenser to return + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 2536311, + "tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a", + "block_index": 840322, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "asset": "FLOCK", + "give_quantity": 10000000000, + "escrow_quantity": 250000000000, + "satoshirate": 330000, + "status": 0, + "give_remaining": 140000000000, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "dispense_count": 2, + "asset_longname": null + } + ] + } + ``` + +### Get Dispenses By Dispenser [GET /dispensers/{dispenser_hash}/dispenses] + +Returns the dispenses of a dispenser + ++ Parameters + + dispenser_hash: `753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a` (str, required) - The hash of the dispenser to return + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 2610745, + "dispense_index": 0, + "tx_hash": "8c95cc6afc8fd466c784fd1c02749c585988999bbc66251b944c443dc31af757", + "block_index": 821450, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "destination": "1FKYM1CP9RfttJhNG8HTNQdE2uV3YvwbRB", + "asset": "FLOCK", + "dispense_quantity": 20000000000, + "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a" + }, + { + "tx_index": 2726580, + "dispense_index": 0, + "tx_hash": "e7f0f2c9bef7a492b714a5952ec61b283be344419c5bc33f405f9af41ebfa48b", + "block_index": 840322, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "destination": "bc1qzcdkhnexpjc8wvkyrpyrsn0f5xzcpu877mjmgj", + "asset": "FLOCK", + "dispense_quantity": 90000000000, + "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a" + } + ] + } + ``` + +## Group Events + +### Get All Events [GET /events] + +Returns all events + ++ Parameters + + last: `10665092` (int, optional) - The last event index to return + + Default: `None` + + limit: `5` (int, optional) - The maximum number of events to return + + Default: `100` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "event_index": 10665092, + "event": "TRANSACTION_PARSED", + "bindings": { + "supported": true, + "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", + "tx_index": 2056160 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665091, + "event": "ENHANCED_SEND", + "bindings": { + "asset": "THOTHPEPE", + "block_index": 744232, + "destination": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", + "memo": null, + "quantity": 1, + "source": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", + "status": "valid", + "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", + "tx_index": 2056160 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665090, + "event": "CREDIT", + "bindings": { + "address": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", + "asset": "THOTHPEPE", + "block_index": 744232, + "calling_function": "send", + "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", + "quantity": 1, + "tx_index": 2056160 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665089, + "event": "DEBIT", + "bindings": { + "action": "send", + "address": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", + "asset": "THOTHPEPE", + "block_index": 744232, + "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", + "quantity": 1, + "tx_index": 2056160 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665088, + "event": "TRANSACTION_PARSED", + "bindings": { + "supported": true, + "tx_hash": "bbb2dfa7e7a32288a702ef0091ece8b2a929f94fd967a18e6071cd9c2b085eaf", + "tx_index": 2056159 + }, + "block_index": 744232, + "timestamp": 1712256340 + } + ] + } + ``` + +### Get Event By Index [GET /events/{event_index}] + +Returns the event of an index + ++ Parameters + + event_index: `10665092` (int, required) - The index of the event to return + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "event_index": 10665092, + "event": "TRANSACTION_PARSED", + "bindings": { + "supported": true, + "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", + "tx_index": 2056160 + }, + "block_index": 744232, + "timestamp": 1712256340 + } + ] + } + ``` + +### Get All Events Counts [GET /events/counts] + +Returns the event counts of all blocks + ++ Parameters + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "event": "ASSET_CREATION", + "event_count": 235860 + }, + { + "event": "ASSET_DESTRUCTION", + "event_count": 11141 + }, + { + "event": "ASSET_DIVIDEND", + "event_count": 4092 + }, + { + "event": "ASSET_ISSUANCE", + "event_count": 322678 + }, + { + "event": "ASSET_TRANSFER", + "event_count": 10639 + }, + { + "event": "BET_EXPIRATION", + "event_count": 588 + }, + { + "event": "BET_MATCH", + "event_count": 397 + }, + { + "event": "BET_MATCH_EXPIRATION", + "event_count": 9 + }, + { + "event": "BET_MATCH_RESOLUTON", + "event_count": 387 + }, + { + "event": "BET_MATCH_UPDATE", + "event_count": 397 + }, + { + "event": "BET_UPDATE", + "event_count": 1474 + }, + { + "event": "BLOCK_PARSED", + "event_count": 562364 + }, + { + "event": "BROADCAST", + "event_count": 106518 + }, + { + "event": "BTC_PAY", + "event_count": 2921 + }, + { + "event": "BURN", + "event_count": 2576 + }, + { + "event": "CANCEL_BET", + "event_count": 101 + }, + { + "event": "CANCEL_ORDER", + "event_count": 80168 + }, + { + "event": "CREDIT", + "event_count": 3659293 + }, + { + "event": "DEBIT", + "event_count": 2617404 + }, + { + "event": "DISPENSE", + "event_count": 190873 + }, + { + "event": "DISPENSER_UPDATE", + "event_count": 228954 + }, + { + "event": "ENHANCED_SEND", + "event_count": 538426 + }, + { + "event": "MPMA_SEND", + "event_count": 279142 + }, + { + "event": "NEW_BLOCK", + "event_count": 1992 + }, + { + "event": "NEW_TRANSACTION", + "event_count": 4498 + }, + { + "event": "NEW_TRANSACTION_OUTPUT", + "event_count": 596 + }, + { + "event": "OPEN_BET", + "event_count": 1149 + }, + { + "event": "OPEN_DISPENSER", + "event_count": 88229 + }, + { + "event": "OPEN_ORDER", + "event_count": 530117 + }, + { + "event": "OPEN_RPS", + "event_count": 266 + }, + { + "event": "ORDER_EXPIRATION", + "event_count": 195968 + }, + { + "event": "ORDER_FILLED", + "event_count": 805 + }, + { + "event": "ORDER_MATCH", + "event_count": 209415 + }, + { + "event": "ORDER_MATCH_EXPIRATION", + "event_count": 20860 + }, + { + "event": "ORDER_MATCH_UPDATE", + "event_count": 23689 + }, + { + "event": "ORDER_UPDATE", + "event_count": 732646 + }, + { + "event": "REFILL_DISPENSER", + "event_count": 187 + }, + { + "event": "RESET_ISSUANCE", + "event_count": 454 + }, + { + "event": "RPS_EXPIRATION", + "event_count": 59 + }, + { + "event": "RPS_MATCH", + "event_count": 171 + }, + { + "event": "RPS_MATCH_EXPIRATION", + "event_count": 145 + }, + { + "event": "RPS_MATCH_UPDATE", + "event_count": 271 + }, + { + "event": "RPS_RESOLVE", + "event_count": 129 + }, + { + "event": "RPS_UPDATE", + "event_count": 540 + }, + { + "event": "SEND", + "event_count": 805983 + }, + { + "event": "SWEEP", + "event_count": 1020 + }, + { + "event": "TRANSACTION_PARSED", + "event_count": 2723802 + } + ] + } + ``` + +### Get Events By Name [GET /events/{event}] + +Returns the events filtered by event name + ++ Parameters + + event: `CREDIT` (str, required) - The event to return + + last: `10665092` (int, optional) - The last event index to return + + Default: `None` + + limit: `5` (int, optional) - The maximum number of events to return + + Default: `100` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "event_index": 10665090, + "event": "CREDIT", + "bindings": { + "address": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", + "asset": "THOTHPEPE", + "block_index": 744232, + "calling_function": "send", + "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", + "quantity": 1, + "tx_index": 2056160 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665085, + "event": "CREDIT", + "bindings": { + "address": "1LfDk3Ex9KPYS6L1WGwNdt1TvEg6Le8uq", + "asset": "XCP", + "block_index": 744232, + "calling_function": "dispense", + "event": "bbb2dfa7e7a32288a702ef0091ece8b2a929f94fd967a18e6071cd9c2b085eaf", + "quantity": 10000000000, + "tx_index": 2056159 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665082, + "event": "CREDIT", + "bindings": { + "address": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", + "asset": "FREEDOMKEK", + "block_index": 744232, + "calling_function": "send", + "event": "b419d19729c2be813405c548431f4840d5c909b875f94b7c56aeca134e328ef6", + "quantity": 1, + "tx_index": 2056158 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665078, + "event": "CREDIT", + "bindings": { + "address": "1P8nYZwLmecAkQUHsx2H9Nkxd51UJ2Asau", + "asset": "PEPEFRIDAY", + "block_index": 744232, + "calling_function": "send", + "event": "145ebf6c563c4e91a2bc488954ef701dad730fc065697979c80d6d85cbba63e1", + "quantity": 1, + "tx_index": 2056157 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665074, + "event": "CREDIT", + "bindings": { + "address": "1NzDQ7HLm6PqJ2Wy6jEKMT7Zw1UbtjUV5a", + "asset": "PEPEFRIDAY", + "block_index": 744232, + "calling_function": "send", + "event": "388c7208d52bf617c1a3eef238a668f694a4f72dc97b3be92562fe636ca646fa", + "quantity": 2, + "tx_index": 2056156 + }, + "block_index": 744232, + "timestamp": 1712256340 + } + ] + } + ``` + +## Group Healthz + +### Check Server Status [GET /healthz] + +Health check route. + ++ Parameters + + check_type: `light` (str, optional) - Type of health check to perform. Options are 'light' and 'heavy' + + Default: `heavy` + ++ Response 200 (application/json) + + ``` + { + "result": { + "status": "Healthy" + } + } + ``` + +## Group Backend + +### Search Raw Transactions [GET /backend/addresses/{address}/transactions] + +Returns all transactions involving a given address + ++ Parameters + + address: `14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS` (str, required) - The address to search for + + unconfirmed: `True` (bool, optional) - Include unconfirmed transactions + + Default: `True` + + only_tx_hashes: `True` (bool, optional) - Return only the tx hashes + + Default: `False` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_hash": "eae4f1dba4d75bda9dd0de12f69a980be267bbc16b7a280a2a4b40c4b3bbb70a" + }, + { + "tx_hash": "7ec16c461e3ba2d3acae48fcc8f58c04fba9f307b00c391eab507337ddc0bf16" + }, + { + "tx_hash": "ad35f05767aadd39019122b4f4828ccb059b8121c07be6d36eb1e2ddbe9ac317" + }, + { + "tx_hash": "3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018" + }, + { + "tx_hash": "aba5810714aa6196fec5538a83bbc281077a84ef2cbce2045b4c9f3c4439f14f" + }, + { + "tx_hash": "23758832e0fc92a7ea303623b8f743219cb8e637e7e7ac9fb6f90641efac9379" + }, + { + "tx_hash": "98bef616ef265dd2f6004683e908d7df97e0c5f322cdf2fb2ebea9a9131cfa79" + }, + { + "tx_hash": "687b875d1dc472aa2fb994c5753c9b9b56e5c6fd1a6de18a92fcb3dc7ba8067e" + }, + { + "tx_hash": "ec97c11ff5cb318505ebe20d7aa3c033816824a79f9a49821ffb584ed7d6c78f" + }, + { + "tx_hash": "c732f0906eeada2113524c6652c17b2784780110bffd4333eb8f719ac0eff3be" + }, + { + "tx_hash": "2c8bc3eede9ec60d26c6fd7f44829adc64da593552044a28c673022220f560c3" + }, + { + "tx_hash": "a209e345549cffef6e2190b53ac0222afc965fd618843df5ccbd645a6a7999ee" + } + ] + } + ``` + +### Get Oldest Tx [GET /backend/addresses/{address}/transactions/oldest] + +Get the oldest transaction for an address. + ++ Parameters + + address: `14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS` (str, required) - The address to search for. + + block_index (int, optional) - The block index to search from. + + Default: `None` + ++ Response 200 (application/json) + + ``` + { + "result": { + "block_index": 833187, + "tx_hash": "2c8bc3eede9ec60d26c6fd7f44829adc64da593552044a28c673022220f560c3" + } + } + ``` + +### Get Unspent Txouts [GET /backend/addresses/{address}/utxos] + +Returns a list of unspent outputs for a specific address + ++ Parameters + + address: `14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS` (str, required) - The address to search for + + unconfirmed (bool, optional) - Include unconfirmed transactions + + Default: `False` + + unspent_tx_hash (str, optional) - Filter by unspent_tx_hash + + Default: `None` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "vout": 6, + "height": 833559, + "value": 34611, + "confirmations": 7083, + "amount": 0.00034611, + "txid": "98bef616ef265dd2f6004683e908d7df97e0c5f322cdf2fb2ebea9a9131cfa79" + }, + { + "vout": 0, + "height": 833187, + "value": 619481, + "confirmations": 7455, + "amount": 0.00619481, + "txid": "2c8bc3eede9ec60d26c6fd7f44829adc64da593552044a28c673022220f560c3" + }, + { + "vout": 0, + "height": 837379, + "value": 992721, + "confirmations": 3263, + "amount": 0.00992721, + "txid": "ad35f05767aadd39019122b4f4828ccb059b8121c07be6d36eb1e2ddbe9ac317" + }, + { + "vout": 0, + "height": 840640, + "value": 838185, + "confirmations": 2, + "amount": 0.00838185, + "txid": "3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018" + }, + { + "vout": 0, + "height": 839421, + "value": 336973, + "confirmations": 1221, + "amount": 0.00336973, + "txid": "c732f0906eeada2113524c6652c17b2784780110bffd4333eb8f719ac0eff3be" + }, + { + "vout": 0, + "height": 839462, + "value": 78615, + "confirmations": 1180, + "amount": 0.00078615, + "txid": "eae4f1dba4d75bda9dd0de12f69a980be267bbc16b7a280a2a4b40c4b3bbb70a" + }, + { + "vout": 0, + "height": 838442, + "value": 557283, + "confirmations": 2200, + "amount": 0.00557283, + "txid": "aba5810714aa6196fec5538a83bbc281077a84ef2cbce2045b4c9f3c4439f14f" + }, + { + "vout": 0, + "height": 838608, + "value": 77148, + "confirmations": 2034, + "amount": 0.00077148, + "txid": "ec97c11ff5cb318505ebe20d7aa3c033816824a79f9a49821ffb584ed7d6c78f" + }, + { + "vout": 0, + "height": 837402, + "value": 70501, + "confirmations": 3240, + "amount": 0.00070501, + "txid": "687b875d1dc472aa2fb994c5753c9b9b56e5c6fd1a6de18a92fcb3dc7ba8067e" + }, + { + "vout": 0, + "height": 839021, + "value": 12354, + "confirmations": 1621, + "amount": 0.00012354, + "txid": "23758832e0fc92a7ea303623b8f743219cb8e637e7e7ac9fb6f90641efac9379" + } + ] + } + ``` + +### Pubkeyhash To Pubkey [GET /backend/addresses/{address}/pubkey] + +Get pubkey for an address. + ++ Parameters + + address: `14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS` (str, required) - Address to get pubkey for. + + provided_pubkeys (str, optional) - Comma separated list of provided pubkeys. + + Default: `None` + ++ Response 200 (application/json) + + ``` + { + "result": "0388ef0905568d425f1ffd4031d93dda4ef0e220c9b5fc4a6cbaf11544c4a5ca49" + } + ``` + +### Get Raw Transaction [GET /backend/transactions/{tx_hash}] + +Get a raw transaction from the blockchain + ++ Parameters + + tx_hash: `3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018` (str, required) - The transaction hash + + verbose: `True` (bool, optional) - Whether to return JSON output or raw hex + + Default: `False` + ++ Response 200 (application/json) + + ``` + { + "result": { + "txid": "3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018", + "hash": "417c24d7a5539bc5b8496e26528382ac297a85a1c6b891b220f72712405ec300", + "version": 2, + "size": 195, + "vsize": 113, + "weight": 450, + "locktime": 0, + "vin": [ + { + "txid": "fc940430637d22a3d276bde8f7eb489760265cab642d8392f6017d73df94cd7a", + "vout": 2, + "scriptSig": { + "asm": "", + "hex": "" + }, + "txinwitness": [ + "3045022100e4a30e5c0e0f7a28dfcec566cda00d0775a4207744ed6f223a4234cbed87a8ac02205b2403279ba7d8235ea1e8b6497465b97b46f3b3066a58c326822a9b1c25b4a501", + "020e66cffeb4657b40a89063340cf7066030af3c6ce55744ed3570a7aecaa6b0da" + ], + "sequence": 4294967295 + } + ], + "vout": [ + { + "value": 0.00838185, + "n": 0, + "scriptPubKey": { + "asm": "OP_DUP OP_HASH160 25f70b0f1512c1742d3301fe34370894c79127bb OP_EQUALVERIFY OP_CHECKSIG", + "desc": "addr(14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS)#68uhm9u9", + "hex": "76a91425f70b0f1512c1742d3301fe34370894c79127bb88ac", + "address": "14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS", + "type": "pubkeyhash" + } + } + ], + "hex": "020000000001017acd94df737d01f692832d64ab5c26609748ebf7e8bd76d2a3227d63300494fc0200000000ffffffff0129ca0c00000000001976a91425f70b0f1512c1742d3301fe34370894c79127bb88ac02483045022100e4a30e5c0e0f7a28dfcec566cda00d0775a4207744ed6f223a4234cbed87a8ac02205b2403279ba7d8235ea1e8b6497465b97b46f3b3066a58c326822a9b1c25b4a50121020e66cffeb4657b40a89063340cf7066030af3c6ce55744ed3570a7aecaa6b0da00000000", + "blockhash": "000000000000000000020f596ed481076b7754143284b47fc8d32642202e5f76", + "confirmations": 2, + "time": 1713951767, + "blocktime": 1713951767 + } + } + ``` + +### Fee Per Kb [GET /backend/estimatesmartfee] + +Get the fee per kilobyte for a transaction to be confirmed in `conf_target` blocks. + ++ Parameters + + conf_target: `2` (int, optional) - Confirmation target in blocks (1 - 1008) + + Default: `3` + + mode: `CONSERVATIVE` (str, optional) - The fee estimate mode. + + Default: `CONSERVATIVE` + ++ Response 200 (application/json) + + ``` + { + "result": 295443 + } + ``` + +## Group Mempool + +### Get All Mempool Events [GET /mempool/events] + +Returns all mempool events + ++ Parameters + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e", + "event": "NEW_TRANSACTION", + "bindings": { + "block_hash": "mempool", + "block_index": 9999999, + "block_time": 1713952590, + "btc_amount": 0, + "data": "0200454ceacf416ccf0000000000000001005461639d06ebc42d541b54b1c5525543ae4d6db3", + "destination": "", + "fee": 9900, + "source": "14PxDTVUMCjLoAcGPZGQf6cEtn7yLzdHp1", + "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e", + "tx_index": 2726767 + }, + "timestamp": 1713952691 + }, + { + "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e", + "event": "ENHANCED_SEND", + "bindings": { + "asset": "FIERCERABBIT", + "destination": "18hARq2fFJxiypHSnZ8yLcbPNpUfaozD8U", + "memo": null, + "quantity": 1, + "source": "14PxDTVUMCjLoAcGPZGQf6cEtn7yLzdHp1", + "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e" + }, + "timestamp": 1713952691 + }, + { + "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e", + "event": "TRANSACTION_PARSED", + "bindings": { + "supported": true, + "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e", + "tx_index": 2726767 + }, + "timestamp": 1713952691 + } + ] + } + ``` + +### Get Mempool Events By Name [GET /mempool/events/{event}] + +Returns the mempool events filtered by event name + ++ Parameters + + event: `OPEN_ORDER` (str, required) - The event to return + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_hash": "90ba95c4578b9ab7866515d66736c5b4132e88a0bd9b0fca7b2f1be830a1bb81", + "event": "OPEN_ORDER", + "bindings": { + "expiration": 5000, + "expire_index": 10004999, + "fee_provided": 5016, + "fee_provided_remaining": 5016, + "fee_required": 0, + "fee_required_remaining": 0, + "get_asset": "XCP", + "get_quantity": 3300000000, + "get_remaining": 3300000000, + "give_asset": "PEPEPASSPORT", + "give_quantity": 100000000, + "give_remaining": 100000000, + "source": "1A36UrLHxeg9ABoS4zPsRUegyCWTWER2kF", + "tx_hash": "90ba95c4578b9ab7866515d66736c5b4132e88a0bd9b0fca7b2f1be830a1bb81" + }, + "timestamp": 1713952690 + }, + { + "tx_hash": "bc553f3d4349a266b70e7ed98e2198a18d634a5b247997f59817f69e19de2ad6", + "event": "OPEN_ORDER", + "bindings": { + "expiration": 5000, + "expire_index": 10004999, + "fee_provided": 5016, + "fee_provided_remaining": 5016, + "fee_required": 0, + "fee_required_remaining": 0, + "get_asset": "XCP", + "get_quantity": 1185000000, + "get_remaining": 1185000000, + "give_asset": "FRATPEPE", + "give_quantity": 3, + "give_remaining": 3, + "source": "1A36UrLHxeg9ABoS4zPsRUegyCWTWER2kF", + "tx_hash": "bc553f3d4349a266b70e7ed98e2198a18d634a5b247997f59817f69e19de2ad6" + }, + "timestamp": 1713952690 + } + ] + } + ``` diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index 2e647460c4..509107ffe2 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -1,15 +1,24 @@ import json import os +import sys import requests from counterpartycore import server CURR_DIR = os.path.dirname(os.path.realpath(__file__)) API_DOC_FILE = os.path.join(CURR_DIR, "../../../Documentation/docs/advanced/api-v2/rest.md") +API_BLUEPRINT_FILE = os.path.join(CURR_DIR, "../counterparty-core.apib") CACHE_FILE = os.path.join(CURR_DIR, "apicache.json") API_ROOT = "http://api:api@localhost:4000" USE_API_CACHE = True +TARGET_FILE = API_DOC_FILE +TARGET = "docusaurus" + +if len(sys.argv) and sys.argv[1] == "blueprint": + TARGET_FILE = API_BLUEPRINT_FILE + TARGET = "apiary" + def get_example_output(path, args): url_keys = [] @@ -26,11 +35,20 @@ def get_example_output(path, args): return response.json() -md = """--- +root_path = "`/`" if TARGET == "docusaurus" else "/" + +if TARGET == "docusaurus": + md = """--- title: REST API V2 --- +""" +else: + md = "" + +md += """ FORMAT: 1A +HOST: https://api.counterparty.io # Counterparty Core API @@ -73,7 +91,7 @@ def get_example_output(path, args): ## Root Path -### Get Server Info [`/`] +### Get Server Info [GET {root_path}] Returns server information and the list of documented routes in JSON format. @@ -93,6 +111,7 @@ def get_example_output(path, args): ``` """ +md = md.replace("{root_path}", root_path) cache = {} if USE_API_CACHE and os.path.exists(CACHE_FILE): @@ -108,7 +127,11 @@ def get_example_output(path, args): blueprint_path = path.replace("<", "{").replace(">", "}").replace("int:", "") title = " ".join([part.capitalize() for part in str(route["function"].__name__).split("_")]) - md += f"\n### {title} [`{blueprint_path}`]\n\n" + md += f"\n### {title} " + if TARGET == "docusaurus": + md += f"[GET `{blueprint_path}`]\n\n" + else: + md += f"[GET {blueprint_path}]\n\n" md += route["description"] md += "\n\n+ Parameters\n" example_args = {} @@ -140,6 +163,6 @@ def get_example_output(path, args): with open(CACHE_FILE, "w") as f: json.dump(cache, f, indent=4) -with open(API_DOC_FILE, "w") as f: +with open(TARGET_FILE, "w") as f: f.write(md) - print(f"API documentation written to {API_DOC_FILE}") + print(f"API documentation written to {TARGET_FILE}") From 405b2ed1c909ca629ea235608435a47ceeb92c58 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 13:48:26 +0200 Subject: [PATCH 113/280] Introduce counterparty-core.apib; Fix blueprint semantic issues --- counterparty-core/counterparty-core.apib | 105 ++++++++++------------- counterparty-core/tools/genapidoc.py | 38 ++++---- 2 files changed, 70 insertions(+), 73 deletions(-) diff --git a/counterparty-core/counterparty-core.apib b/counterparty-core/counterparty-core.apib index 9854b1590a..6fc320805b 100644 --- a/counterparty-core/counterparty-core.apib +++ b/counterparty-core/counterparty-core.apib @@ -1,4 +1,3 @@ - FORMAT: 1A HOST: https://api.counterparty.io @@ -65,7 +64,7 @@ Returns server information and the list of documented routes in JSON format. ## Group Blocks -### Get Blocks [GET /blocks] +### Get Blocks [GET /blocks{?last}{?limit}] Returns the list of the last ten blocks @@ -544,7 +543,7 @@ Returns the issuances of a block } ``` -### Get Sends Or Receives By Block [GET /blocks/{block_index}/sends] +### Get Sends Or Receives By Block [GET /blocks/{block_index}/sends{?limit}{?offset}] Returns the sends of a block @@ -643,7 +642,7 @@ Returns the sweeps of a block ## Group Transactions -### Info [GET /transactions/info] +### Info [GET /transactions/info{?rawtransaction}{?block_index}] Returns Counterparty information from a raw transaction in hex format. @@ -684,7 +683,7 @@ Returns Counterparty information from a raw transaction in hex format. } ``` -### Unpack [GET /transactions/unpack] +### Unpack [GET /transactions/unpack{?datahex}{?block_index}] Unpacks Counterparty data in hex format and returns the message type and data. @@ -788,7 +787,7 @@ Returns the balance of an address and asset } ``` -### Get Credits By Address [GET /addresses/{address}/credits] +### Get Credits By Address [GET /addresses/{address}/credits{?limit}{?offset}] Returns the credits of an address @@ -817,7 +816,7 @@ Returns the credits of an address } ``` -### Get Debits By Address [GET /addresses/{address}/debits] +### Get Debits By Address [GET /addresses/{address}/debits{?limit}{?offset}] Returns the debits of an address @@ -855,7 +854,7 @@ Returns the debits of an address } ``` -### Get Bet By Feed [GET /addresses/{address}/bets] +### Get Bet By Feed [GET /addresses/{address}/bets{?status}] Returns the bets of a feed @@ -911,7 +910,7 @@ Returns the bets of a feed } ``` -### Get Broadcasts By Source [GET /addresses/{address}/broadcasts] +### Get Broadcasts By Source [GET /addresses/{address}/broadcasts{?status}{?order_by}] Returns the broadcasts of a source @@ -980,7 +979,7 @@ Returns the burns of an address } ``` -### Get Send By Address [GET /addresses/{address}/sends] +### Get Send By Address [GET /addresses/{address}/sends{?limit}{?offset}] Returns the sends of an address @@ -1012,7 +1011,7 @@ Returns the sends of an address } ``` -### Get Receive By Address [GET /addresses/{address}/receives] +### Get Receive By Address [GET /addresses/{address}/receives{?limit}{?offset}] Returns the receives of an address @@ -1073,7 +1072,7 @@ Returns the sends of an address and asset } ``` -### Get Receive By Address And Asset [GET /addresses/{address}/receives/{asset}] +### Get Receive By Address And Asset [GET /addresses/{address}/receives/{asset}{?limit}{?offset}] Returns the receives of an address and asset @@ -1106,7 +1105,7 @@ Returns the receives of an address and asset } ``` -### Get Dispensers By Address [GET /addresses/{address}/dispensers] +### Get Dispensers By Address [GET /addresses/{address}/dispensers{?status}] Returns the dispensers of an address @@ -1140,7 +1139,7 @@ Returns the dispensers of an address } ``` -### Get Dispensers By Address And Asset [GET /addresses/{address}/dispensers/{asset}] +### Get Dispensers By Address And Asset [GET /addresses/{address}/dispensers/{asset}{?status}] Returns the dispensers of an address and an asset @@ -1202,7 +1201,7 @@ Returns the sweeps of an address } ``` -### Compose Bet [GET /addresses/{address}/compose/bet] +### Compose Bet [GET /addresses/{address}/compose/bet{?feed_address}{?bet_type}{?deadline}{?wager_quantity}{?counterwager_quantity}{?expiration}{?leverage}{?target_value}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] Composes a transaction to issue a bet against a feed. @@ -1273,7 +1272,7 @@ Composes a transaction to issue a bet against a feed. } ``` -### Compose Broadcast [GET /addresses/{address}/compose/broadcast] +### Compose Broadcast [GET /addresses/{address}/compose/broadcast{?timestamp}{?value}{?fee_fraction}{?text}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] Composes a transaction to broadcast textual and numerical information to the network. @@ -1334,7 +1333,7 @@ Composes a transaction to broadcast textual and numerical information to the net } ``` -### Compose Btcpay [GET /addresses/{address}/compose/btcpay] +### Compose Btcpay [GET /addresses/{address}/compose/btcpay{?order_match_id}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] Composes a transaction to pay for a BTC order match. @@ -1389,7 +1388,7 @@ Composes a transaction to pay for a BTC order match. } ``` -### Compose Burn [GET /addresses/{address}/compose/burn] +### Compose Burn [GET /addresses/{address}/compose/burn{?quantity}{?overburn}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, possible between blocks 278310 and 283810; on testnet it is still available). @@ -1447,7 +1446,7 @@ Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, poss } ``` -### Compose Cancel [GET /addresses/{address}/compose/cancel] +### Compose Cancel [GET /addresses/{address}/compose/cancel{?offer_hash}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] Composes a transaction to cancel an open order or bet. @@ -1502,7 +1501,7 @@ Composes a transaction to cancel an open order or bet. } ``` -### Compose Destroy [GET /addresses/{address}/compose/destroy] +### Compose Destroy [GET /addresses/{address}/compose/destroy{?asset}{?quantity}{?tag}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] Composes a transaction to destroy a quantity of an asset. @@ -1561,7 +1560,7 @@ Composes a transaction to destroy a quantity of an asset. } ``` -### Compose Dispenser [GET /addresses/{address}/compose/dispenser] +### Compose Dispenser [GET /addresses/{address}/compose/dispenser{?asset}{?give_quantity}{?escrow_quantity}{?mainchainrate}{?status}{?open_address}{?oracle_address}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] Opens or closes a dispenser for a given asset at a given rate of main chain asset (BTC). Escrowed quantity on open must be equal or greater than give_quantity. It is suggested that you escrow multiples of give_quantity to ease dispenser operation. @@ -1630,7 +1629,7 @@ Opens or closes a dispenser for a given asset at a given rate of main chain asse } ``` -### Compose Dividend [GET /addresses/{address}/compose/dividend] +### Compose Dividend [GET /addresses/{address}/compose/dividend{?quantity_per_unit}{?asset}{?dividend_asset}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] Composes a transaction to issue a dividend to holders of a given asset. @@ -1689,7 +1688,7 @@ Composes a transaction to issue a dividend to holders of a given asset. } ``` -### Compose Issuance [GET /addresses/{address}/compose/issuance] +### Compose Issuance [GET /addresses/{address}/compose/issuance{?asset}{?quantity}{?transfer_destination}{?divisible}{?lock}{?reset}{?description}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] Composes a transaction to Issue a new asset, issue more of an existing asset, lock an asset, reset existing supply, or transfer the ownership of an asset. @@ -1761,7 +1760,7 @@ Composes a transaction to Issue a new asset, issue more of an existing asset, lo } ``` -### Compose Mpma [GET /addresses/{address}/compose/mpma] +### Compose Mpma [GET /addresses/{address}/compose/mpma{?assets}{?destinations}{?quantities}{?memo}{?memo_is_hex}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] Composes a transaction to send multiple payments to multiple addresses. @@ -1838,7 +1837,7 @@ Composes a transaction to send multiple payments to multiple addresses. } ``` -### Compose Order [GET /addresses/{address}/compose/order] +### Compose Order [GET /addresses/{address}/compose/order{?give_asset}{?give_quantity}{?get_asset}{?get_quantity}{?expiration}{?fee_required}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] Composes a transaction to place an order on the distributed exchange. @@ -1903,7 +1902,7 @@ Composes a transaction to place an order on the distributed exchange. } ``` -### Compose Send [GET /addresses/{address}/compose/send] +### Compose Send [GET /addresses/{address}/compose/send{?destination}{?asset}{?quantity}{?memo}{?memo_is_hex}{?use_enhanced_send}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] Composes a transaction to send a quantity of an asset to another address. @@ -1971,18 +1970,14 @@ Composes a transaction to send a quantity of an asset to another address. } ``` -### Compose Sweep [GET /addresses/{address}/compose/sweep] +### Compose Sweep [GET /addresses/{address}/compose/sweep{?destination}{?flags}{?memo}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] Composes a transaction to Sends all assets and/or transfer ownerships to a destination address. + Parameters + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will be sending + destination: `1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev` (str, required) - The address to receive the assets and/or ownerships - + flags: `7` (int, required) - An OR mask of flags indicating how the sweep should be processed. Possible flags are: -- FLAG_BALANCES: (integer) 1, specifies that all balances should be transferred. -- FLAG_OWNERSHIP: (integer) 2, specifies that all ownerships should be transferred. -- FLAG_BINARY_MEMO: (integer) 4, specifies that the memo is in binary/hex form. - + + flags: `7` (int, required) - An OR mask of flags indicating how the sweep should be processed. Possible flags are: - FLAG_BALANCES: (integer) 1, specifies that all balances should be transferred. - FLAG_OWNERSHIP: (integer) 2, specifies that all ownerships should be transferred. - FLAG_BINARY_MEMO: (integer) 4, specifies that the memo is in binary/hex form. + memo: `FFFF` (str, required) - The Memo associated with this transaction in hex format + encoding (str, optional) - The encoding method to use + Default: `auto` @@ -2036,7 +2031,7 @@ Composes a transaction to Sends all assets and/or transfer ownerships to a desti ## Group Assets -### Get Valid Assets [GET /assets] +### Get Valid Assets [GET /assets{?offset}{?limit}] Returns the valid assets @@ -2100,7 +2095,7 @@ Returns the asset information } ``` -### Get Asset Balances [GET /assets/{asset}/balances] +### Get Asset Balances [GET /assets/{asset}/balances{?exclude_zero_balances}] Returns the asset balances @@ -2143,7 +2138,7 @@ Returns the balance of an address and asset } ``` -### Get Orders By Asset [GET /assets/{asset}/orders] +### Get Orders By Asset [GET /assets/{asset}/orders{?status}] Returns the orders of an asset @@ -2370,7 +2365,7 @@ Returns the orders of an asset } ``` -### Get Credits By Asset [GET /assets/{asset}/credits] +### Get Credits By Asset [GET /assets/{asset}/credits{?limit}{?offset}] Returns the credits of an asset @@ -2399,7 +2394,7 @@ Returns the credits of an asset } ``` -### Get Debits By Asset [GET /assets/{asset}/debits] +### Get Debits By Asset [GET /assets/{asset}/debits{?limit}{?offset}] Returns the debits of an asset @@ -2649,7 +2644,7 @@ Returns the issuances of an asset } ``` -### Get Sends Or Receives By Asset [GET /assets/{asset}/sends] +### Get Sends Or Receives By Asset [GET /assets/{asset}/sends{?limit}{?offset}] Returns the sends of an asset @@ -2729,7 +2724,7 @@ Returns the sends of an asset } ``` -### Get Dispensers By Asset [GET /assets/{asset}/dispensers] +### Get Dispensers By Asset [GET /assets/{asset}/dispensers{?status}] Returns the dispensers of an asset @@ -2763,7 +2758,7 @@ Returns the dispensers of an asset } ``` -### Get Dispensers By Address And Asset [GET /assets/{asset}/dispensers/{address}] +### Get Dispensers By Address And Asset [GET /assets/{asset}/dispensers/{address}{?status}] Returns the dispensers of an address and an asset @@ -2891,7 +2886,7 @@ Returns the information of an order } ``` -### Get Order Matches By Order [GET /orders/{order_hash}/matches] +### Get Order Matches By Order [GET /orders/{order_hash}/matches{?status}] Returns the order matches of an order @@ -2993,7 +2988,7 @@ Returns the information of a bet } ``` -### Get Bet Matches By Bet [GET /bets/{bet_hash}/matches] +### Get Bet Matches By Bet [GET /bets/{bet_hash}/matches{?status}] Returns the bet matches of a bet @@ -3066,7 +3061,7 @@ Returns the resolutions of a bet ## Group Burns -### Get All Burns [GET /burns] +### Get All Burns [GET /burns{?status}{?offset}{?limit}] Returns the burns @@ -3207,7 +3202,7 @@ Returns the dispenses of a dispenser ## Group Events -### Get All Events [GET /events] +### Get All Events [GET /events{?last}{?limit}] Returns all events @@ -3325,9 +3320,6 @@ Returns the event of an index ### Get All Events Counts [GET /events/counts] Returns the event counts of all blocks - -+ Parameters - + Response 200 (application/json) ``` @@ -3525,7 +3517,7 @@ Returns the event counts of all blocks } ``` -### Get Events By Name [GET /events/{event}] +### Get Events By Name [GET /events/{event}{?last}{?limit}] Returns the events filtered by event name @@ -3622,7 +3614,7 @@ Returns the events filtered by event name ## Group Healthz -### Check Server Status [GET /healthz] +### Check Server Status [GET /healthz{?check_type}] Health check route. @@ -3642,7 +3634,7 @@ Health check route. ## Group Backend -### Search Raw Transactions [GET /backend/addresses/{address}/transactions] +### Search Raw Transactions [GET /backend/addresses/{address}/transactions{?unconfirmed}{?only_tx_hashes}] Returns all transactions involving a given address @@ -3698,7 +3690,7 @@ Returns all transactions involving a given address } ``` -### Get Oldest Tx [GET /backend/addresses/{address}/transactions/oldest] +### Get Oldest Tx [GET /backend/addresses/{address}/transactions/oldest{?block_index}] Get the oldest transaction for an address. @@ -3718,7 +3710,7 @@ Get the oldest transaction for an address. } ``` -### Get Unspent Txouts [GET /backend/addresses/{address}/utxos] +### Get Unspent Txouts [GET /backend/addresses/{address}/utxos{?unconfirmed}{?unspent_tx_hash}] Returns a list of unspent outputs for a specific address @@ -3818,7 +3810,7 @@ Returns a list of unspent outputs for a specific address } ``` -### Pubkeyhash To Pubkey [GET /backend/addresses/{address}/pubkey] +### Pubkeyhash To Pubkey [GET /backend/addresses/{address}/pubkey{?provided_pubkeys}] Get pubkey for an address. @@ -3835,7 +3827,7 @@ Get pubkey for an address. } ``` -### Get Raw Transaction [GET /backend/transactions/{tx_hash}] +### Get Raw Transaction [GET /backend/transactions/{tx_hash}{?verbose}] Get a raw transaction from the blockchain @@ -3893,7 +3885,7 @@ Get a raw transaction from the blockchain } ``` -### Fee Per Kb [GET /backend/estimatesmartfee] +### Fee Per Kb [GET /backend/estimatesmartfee{?conf_target}{?mode}] Get the fee per kilobyte for a transaction to be confirmed in `conf_target` blocks. @@ -3916,9 +3908,6 @@ Get the fee per kilobyte for a transaction to be confirmed in `conf_target` bloc ### Get All Mempool Events [GET /mempool/events] Returns all mempool events - -+ Parameters - + Response 200 (application/json) ``` diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index 509107ffe2..71970f7b6b 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -46,8 +46,7 @@ def get_example_output(path, args): else: md = "" -md += """ -FORMAT: 1A +md += """FORMAT: 1A HOST: https://api.counterparty.io # Counterparty Core API @@ -131,22 +130,31 @@ def get_example_output(path, args): if TARGET == "docusaurus": md += f"[GET `{blueprint_path}`]\n\n" else: + for arg in route["args"]: + if f"{{{arg['name']}}}" in blueprint_path: + continue + else: + blueprint_path += f"{{?{arg['name']}}}" md += f"[GET {blueprint_path}]\n\n" + md += route["description"] - md += "\n\n+ Parameters\n" + example_args = {} - for arg in route["args"]: - required = "required" if arg["required"] else "optional" - description = arg.get("description", "") - example_arg = "" - if "(e.g. " in description: - desc_arr = description.split("(e.g. ") - description = desc_arr[0] - example_args[arg["name"]] = desc_arr[1].replace(")", "") - example_arg = f": `{example_args[arg['name']]}`" - md += f" + {arg['name']}{example_arg} ({arg['type']}, {required}) - {description}\n" - if not arg["required"]: - md += f" + Default: `{arg.get('default', '')}`\n" + if len(route["args"]) > 0: + md += "\n\n+ Parameters\n" + for arg in route["args"]: + required = "required" if arg["required"] else "optional" + description = arg.get("description", "") + example_arg = "" + if "(e.g. " in description: + desc_arr = description.split("(e.g. ") + description = desc_arr[0].replace("\n", " ") + example_args[arg["name"]] = desc_arr[1].replace(")", "") + example_arg = f": `{example_args[arg['name']]}`" + md += f" + {arg['name']}{example_arg} ({arg['type']}, {required}) - {description}\n" + if not arg["required"]: + md += f" + Default: `{arg.get('default', '')}`\n" + if example_args != {} or route["args"] == []: if not USE_API_CACHE or path not in cache: example_output = get_example_output(path, example_args) From 06a0309d14ed0d86cb8a42b5f729b9365fa3f4c1 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 14:09:30 +0200 Subject: [PATCH 114/280] Fix API root paragraph --- counterparty-core/counterparty-core.apib | 4 ++-- counterparty-core/tools/genapidoc.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/counterparty-core/counterparty-core.apib b/counterparty-core/counterparty-core.apib index 6fc320805b..fa638ad6fc 100644 --- a/counterparty-core/counterparty-core.apib +++ b/counterparty-core/counterparty-core.apib @@ -40,9 +40,9 @@ Notes: - Routes in the `/backend` group serve as a proxy to make requests to AddrindexRS. -## Root Path +# Counterparty Core API [/] -### Get Server Info [GET /] +### Get Server Info [GET] Returns server information and the list of documented routes in JSON format. diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index 71970f7b6b..659d15fe4f 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -88,9 +88,9 @@ def get_example_output(path, args): - Routes in the `/backend` group serve as a proxy to make requests to AddrindexRS. -## Root Path +# Counterparty Core API [{root_path}] -### Get Server Info [GET {root_path}] +### Get Server Info [GET] Returns server information and the list of documented routes in JSON format. From ba4e5f86010a5c2f59b9eae296d6073ac27bcac2 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 14:17:09 +0200 Subject: [PATCH 115/280] fix blueprint links in Apiary --- counterparty-core/counterparty-core.apib | 23 +++++++------- counterparty-core/tools/genapidoc.py | 39 +++++++++++++++++------- 2 files changed, 39 insertions(+), 23 deletions(-) diff --git a/counterparty-core/counterparty-core.apib b/counterparty-core/counterparty-core.apib index fa638ad6fc..c93a403638 100644 --- a/counterparty-core/counterparty-core.apib +++ b/counterparty-core/counterparty-core.apib @@ -6,18 +6,17 @@ HOST: https://api.counterparty.io The Counterparty Core API is the recommended (and only supported) way to query the state of a Counterparty node. API routes are divided into 11 groups: - -- [`/blocks`](#group-blocks) -- [`/transactions`](#group-transactions) -- [`/addresses`](#group-addresses) -- [`/assets`](#group-assets) -- [`/orders`](#group-orders) -- [`/bets`](#group-bets) -- [`/dispensers`](#group-dispensers) -- [`/burns`](#group-burns) -- [`/events`](#group-events) -- [`/mempool`](#group-mempool) -- [`/backend`](#group-backend) +- [`/blocks`](#/reference/blocks) +- [`/transactions`](#/reference/transactions) +- [`/addresses`](#/reference/addresses) +- [`/assets`](#/reference/assets) +- [`/orders`](#/reference/orders) +- [`/bets`](#/reference/bets) +- [`/dispensers`](#/reference/dispensers) +- [`/burns`](#/reference/burns) +- [`/events`](#/reference/events) +- [`/mempool`](#/reference/mempool) +- [`/backend`](#/reference/backend) Notes: diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index 659d15fe4f..ea2303de1e 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -37,6 +37,31 @@ def get_example_output(path, args): root_path = "`/`" if TARGET == "docusaurus" else "/" +GROUPS = [ + "/blocks", + "/transactions", + "/addresses", + "/assets", + "/orders", + "/bets", + "/dispensers", + "/burns", + "/events", + "/mempool", + "/backend", +] + + +def gen_groups_toc(): + toc = "" + for group in GROUPS: + if TARGET == "docusaurus": + toc += f"- [`{group}`](#group{group[1:]})\n" + else: + toc += f"- [`{group}`](#/reference{group})\n" + return toc + + if TARGET == "docusaurus": md = """--- title: REST API V2 @@ -54,19 +79,11 @@ def get_example_output(path, args): The Counterparty Core API is the recommended (and only supported) way to query the state of a Counterparty node. API routes are divided into 11 groups: +""" -- [`/blocks`](#group-blocks) -- [`/transactions`](#group-transactions) -- [`/addresses`](#group-addresses) -- [`/assets`](#group-assets) -- [`/orders`](#group-orders) -- [`/bets`](#group-bets) -- [`/dispensers`](#group-dispensers) -- [`/burns`](#group-burns) -- [`/events`](#group-events) -- [`/mempool`](#group-mempool) -- [`/backend`](#group-backend) +md += gen_groups_toc() +md += """ Notes: - When the server is not ready, that is to say when all the blocks are not yet parsed, all routes return a 503 error except those in the `/blocks`, `/transactions` and `/backend` groups which always return a result. From af4ff3149ad75f12565acc591bd0fc08a2245521 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 14:26:21 +0200 Subject: [PATCH 116/280] fix typos --- counterparty-core/counterparty-core.apib | 2 +- counterparty-core/tools/genapidoc.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/counterparty-core/counterparty-core.apib b/counterparty-core/counterparty-core.apib index c93a403638..91eec27b4b 100644 --- a/counterparty-core/counterparty-core.apib +++ b/counterparty-core/counterparty-core.apib @@ -39,7 +39,7 @@ Notes: - Routes in the `/backend` group serve as a proxy to make requests to AddrindexRS. -# Counterparty Core API [/] +# Counterparty API Root [/] ### Get Server Info [GET] diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index ea2303de1e..df776bf72a 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -15,7 +15,7 @@ TARGET_FILE = API_DOC_FILE TARGET = "docusaurus" -if len(sys.argv) and sys.argv[1] == "blueprint": +if len(sys.argv) > 1 and sys.argv[1] == "blueprint": TARGET_FILE = API_BLUEPRINT_FILE TARGET = "apiary" @@ -56,7 +56,7 @@ def gen_groups_toc(): toc = "" for group in GROUPS: if TARGET == "docusaurus": - toc += f"- [`{group}`](#group{group[1:]})\n" + toc += f"- [`{group}`](#group-{group[1:]})\n" else: toc += f"- [`{group}`](#/reference{group})\n" return toc @@ -105,7 +105,7 @@ def gen_groups_toc(): - Routes in the `/backend` group serve as a proxy to make requests to AddrindexRS. -# Counterparty Core API [{root_path}] +# Counterparty API Root [{root_path}] ### Get Server Info [GET] From 87e367fd5e09f29562710829aa2e777bfd1aed8c Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 14:38:54 +0200 Subject: [PATCH 117/280] Root path always return 200 --- counterparty-core/counterparty-core.apib | 2 +- counterparty-core/tools/genapidoc.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/counterparty-core/counterparty-core.apib b/counterparty-core/counterparty-core.apib index 91eec27b4b..d92e44cd5c 100644 --- a/counterparty-core/counterparty-core.apib +++ b/counterparty-core/counterparty-core.apib @@ -20,7 +20,7 @@ API routes are divided into 11 groups: Notes: -- When the server is not ready, that is to say when all the blocks are not yet parsed, all routes return a 503 error except those in the `/blocks`, `/transactions` and `/backend` groups which always return a result. +- When the server is not ready, that is to say when all the blocks are not yet parsed, all routes return a 503 error except `/` and those in the `/blocks`, `/transactions` and `/backend` groups which always return a result. - All API responses contain the following 3 headers: diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index df776bf72a..28ef35b017 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -86,7 +86,7 @@ def gen_groups_toc(): md += """ Notes: -- When the server is not ready, that is to say when all the blocks are not yet parsed, all routes return a 503 error except those in the `/blocks`, `/transactions` and `/backend` groups which always return a result. +- When the server is not ready, that is to say when all the blocks are not yet parsed, all routes return a 503 error except `/` and those in the `/blocks`, `/transactions` and `/backend` groups which always return a result. - All API responses contain the following 3 headers: From 016b3a939e902e3ee480fc1f23cad43f9f72ff86 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 15:17:13 +0200 Subject: [PATCH 118/280] Rename blueprint; Include unpacked data in get transaction by hash result --- ...arty-core.apib => counterparty-core.apiary | 26 +++++-- .../counterpartycore/lib/api/routes.py | 2 +- .../counterpartycore/lib/transaction.py | 11 +++ .../counterpartycore/test/api_v2_test.py | 3 +- .../test/fixtures/api_v2_fixtures.json | 71 ++++--------------- counterparty-core/tools/apicache.json | 48 +++++++++---- counterparty-core/tools/genapidoc.py | 2 +- 7 files changed, 84 insertions(+), 79 deletions(-) rename counterparty-core/counterparty-core.apib => counterparty-core.apiary (99%) diff --git a/counterparty-core/counterparty-core.apib b/counterparty-core.apiary similarity index 99% rename from counterparty-core/counterparty-core.apib rename to counterparty-core.apiary index d92e44cd5c..86499b82b5 100644 --- a/counterparty-core/counterparty-core.apib +++ b/counterparty-core.apiary @@ -716,12 +716,12 @@ Unpacks Counterparty data in hex format and returns the message type and data. } ``` -### Get Transaction [GET /transactions/{tx_hash}] +### Get Transaction By Hash [GET /transactions/{tx_hash}] -Returns the information of a transaction +Returns a transaction by its hash. + Parameters - + tx_hash: `876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5` (str, required) - The hash of the transaction to return + + tx_hash: `876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5` (str, required) - The hash of the transaction + Response 200 (application/json) @@ -738,7 +738,25 @@ Returns the information of a transaction "btc_amount": 0, "fee": 56565, "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", - "supported": 1 + "supported": 1, + "unpacked_data": { + "message_type": "issuance", + "message_type_id": 22, + "message_data": { + "asset_id": 75313533584419238, + "asset": "UNNEGOTIABLE", + "subasset_longname": null, + "quantity": 1, + "divisible": false, + "lock": false, + "reset": false, + "callable": false, + "call_date": 0, + "call_price": 0.0, + "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "status": "valid" + } + } } } ``` diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index e9930e2458..828716933e 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -27,7 +27,7 @@ ### /transactions ### "/transactions/info": transaction.info, "/transactions/unpack": transaction.unpack, - "/transactions/": ledger.get_transaction, + "/transactions/": transaction.get_transaction_by_hash, ### /addresses ### "/addresses/
/balances": ledger.get_address_balances, "/addresses/
/balances/": ledger.get_balance_by_address_and_asset, diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index b121654326..5cc4923c8c 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -1653,6 +1653,17 @@ def compose_sweep(db, address: str, destination: str, flags: int, memo: str, **c } +def get_transaction_by_hash(db, tx_hash: str): + """ + Returns a transaction by its hash. + :param tx_hash: The hash of the transaction (e.g. 876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5) + """ + tx = ledger.get_transaction(db, tx_hash) + if tx and tx["data"]: + tx["unpacked_data"] = unpack(db, binascii.hexlify(tx["data"]), tx["block_index"]) + return tx + + def info(db, rawtransaction: str, block_index: int = None): """ Returns Counterparty information from a raw transaction in hex format. diff --git a/counterparty-core/counterpartycore/test/api_v2_test.py b/counterparty-core/counterpartycore/test/api_v2_test.py index a3949efed2..e4fd79a843 100644 --- a/counterparty-core/counterpartycore/test/api_v2_test.py +++ b/counterparty-core/counterpartycore/test/api_v2_test.py @@ -57,7 +57,8 @@ def test_api_v2(request): result = requests.get(url) # noqa: S113 results[url] = result.json() assert result.status_code == 200 - assert results[url] == fixtures[url] + if not request.config.getoption("saveapifixtures"): + assert results[url] == fixtures[url] if request.config.getoption("saveapifixtures"): with open(API_V2_FIXTURES, "w") as f: diff --git a/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json b/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json index 1db6674c03..ebbd0f3106 100644 --- a/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json +++ b/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json @@ -1,6 +1,5 @@ { "http://api:api@localhost:10009/blocks": { - "result": [ { "block_index": 310500, @@ -105,7 +104,6 @@ ] }, "http://api:api@localhost:10009/blocks/310491": { - "result": { "block_index": 310491, "block_hash": "811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16", @@ -118,7 +116,6 @@ } }, "http://api:api@localhost:10009/blocks/310491/transactions": { - "result": [ { "tx_index": 492, @@ -136,7 +133,6 @@ ] }, "http://api:api@localhost:10009/blocks/310491/events": { - "result": [ { "event_index": 1183, @@ -238,7 +234,6 @@ ] }, "http://api:api@localhost:10009/blocks/310491/events/counts": { - "result": [ { "event": "BLOCK_PARSED", @@ -267,15 +262,12 @@ ] }, "http://api:api@localhost:10009/blocks/310491/events/CREDIT": { - "result": [] }, "http://api:api@localhost:10009/blocks/310491/credits": { - "result": [] }, "http://api:api@localhost:10009/blocks/310491/debits": { - "result": [ { "block_index": 310491, @@ -289,35 +281,27 @@ ] }, "http://api:api@localhost:10009/blocks/310491/expirations": { - "result": [] }, "http://api:api@localhost:10009/blocks/310491/cancels": { - "result": [] }, "http://api:api@localhost:10009/blocks/310491/destructions": { - "result": [] }, "http://api:api@localhost:10009/blocks/310491/issuances": { - "result": [] }, "http://api:api@localhost:10009/blocks/310491/sends": { - "result": [] }, "http://api:api@localhost:10009/blocks/310491/dispenses": { - "result": [] }, "http://api:api@localhost:10009/blocks/310491/sweeps": { - "result": [] }, "http://api:api@localhost:10009/transactions/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { - "result": { "tx_index": 492, "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", @@ -329,11 +313,23 @@ "btc_amount": 0, "fee": 6800, "data": "0000000a00000000000000010000000005f5e100000000000000000000000000000c350007d000000000000dbba0", - "supported": 1 + "supported": 1, + "unpacked_data": { + "message_type": "order", + "message_type_id": 10, + "message_data": { + "give_asset": "XCP", + "give_quantity": 100000000, + "get_asset": "BTC", + "get_quantity": 800000, + "expiration": 2000, + "fee_required": 900000, + "status": "open" + } + } } }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/balances": { - "result": [ { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", @@ -378,7 +374,6 @@ ] }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/balances/NODIVISIBLE": { - "result": { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", "asset": "NODIVISIBLE", @@ -386,7 +381,6 @@ } }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/credits": { - "result": [ { "block_index": 310000, @@ -499,7 +493,6 @@ ] }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/debits": { - "result": [ { "block_index": 310001, @@ -693,7 +686,6 @@ ] }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/bets": { - "result": [ { "tx_index": 102, @@ -717,7 +709,6 @@ ] }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/broadcasts": { - "result": [ { "tx_index": 103, @@ -746,7 +737,6 @@ ] }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/burns": { - "result": [ { "tx_index": 1, @@ -760,7 +750,6 @@ ] }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sends": { - "result": [ { "tx_index": 8, @@ -861,7 +850,6 @@ ] }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/receives": { - "result": [ { "tx_index": 483, @@ -878,7 +866,6 @@ ] }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sends/NODIVISIBLE": { - "result": [ { "tx_index": 15, @@ -907,23 +894,18 @@ ] }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/receives/NODIVISIBLE": { - "result": [] }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/dispensers": { - "result": [] }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/dispensers/NODIVISIBLE": { - "result": [] }, "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sweeps": { - "result": [] }, "http://api:api@localhost:10009/assets": { - "result": [ { "asset": "A95428956661682277", @@ -968,7 +950,6 @@ ] }, "http://api:api@localhost:10009/assets/NODIVISIBLE": { - "result": { "asset": "NODIVISIBLE", "asset_longname": null, @@ -982,7 +963,6 @@ } }, "http://api:api@localhost:10009/assets/NODIVISIBLE/balances": { - "result": [ { "address": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", @@ -1002,7 +982,6 @@ ] }, "http://api:api@localhost:10009/assets/NODIVISIBLE/balances/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc": { - "result": { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", "asset": "NODIVISIBLE", @@ -1010,11 +989,9 @@ } }, "http://api:api@localhost:10009/assets/NODIVISIBLE/orders": { - "result": [] }, "http://api:api@localhost:10009/assets/NODIVISIBLE/credits": { - "result": [ { "block_index": 310002, @@ -1046,7 +1023,6 @@ ] }, "http://api:api@localhost:10009/assets/NODIVISIBLE/debits": { - "result": [ { "block_index": 310014, @@ -1069,11 +1045,9 @@ ] }, "http://api:api@localhost:10009/assets/NODIVISIBLE/dividends": { - "result": [] }, "http://api:api@localhost:10009/assets/NODIVISIBLE/issuances": { - "result": [ { "tx_index": 3, @@ -1099,7 +1073,6 @@ ] }, "http://api:api@localhost:10009/assets/NODIVISIBLE/sends": { - "result": [ { "tx_index": 15, @@ -1128,15 +1101,12 @@ ] }, "http://api:api@localhost:10009/assets/NODIVISIBLE/dispensers": { - "result": [] }, "http://api:api@localhost:10009/assets/NODIVISIBLE/dispensers/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc": { - "result": [] }, "http://api:api@localhost:10009/assets/NODIVISIBLE/holders": { - "result": [ { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", @@ -1156,7 +1126,6 @@ ] }, "http://api:api@localhost:10009/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { - "result": [ { "tx_index": 492, @@ -1180,7 +1149,6 @@ ] }, "http://api:api@localhost:10009/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/matches": { - "result": [ { "id": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498_1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81", @@ -1206,23 +1174,18 @@ ] }, "http://api:api@localhost:10009/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/btcpays": { - "result": [] }, "http://api:api@localhost:10009/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42": { - "result": [] }, "http://api:api@localhost:10009/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42/matches": { - "result": [] }, "http://api:api@localhost:10009/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42/resolutions": { - "result": [] }, "http://api:api@localhost:10009/burns": { - "result": [ { "tx_index": 1, @@ -1299,15 +1262,12 @@ ] }, "http://api:api@localhost:10009/dispensers/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { - "result": [] }, "http://api:api@localhost:10009/dispensers/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/dispenses": { - "result": [] }, "http://api:api@localhost:10009/events?limit=5": { - "result": [ { "event_index": 1237, @@ -1378,7 +1338,6 @@ ] }, "http://api:api@localhost:10009/events/10?limit=5": { - "result": [ { "event_index": 10, @@ -1395,7 +1354,6 @@ ] }, "http://api:api@localhost:10009/events/counts?limit=5": { - "result": [ { "event": "ASSET_CREATION", @@ -1484,7 +1442,6 @@ ] }, "http://api:api@localhost:10009/events/CREDIT?limit=5": { - "result": [ { "event_index": 1231, diff --git a/counterparty-core/tools/apicache.json b/counterparty-core/tools/apicache.json index 49ea5365ac..636107c57b 100644 --- a/counterparty-core/tools/apicache.json +++ b/counterparty-core/tools/apicache.json @@ -381,21 +381,6 @@ } } }, - "/transactions/": { - "result": { - "tx_index": 2726605, - "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "block_index": 840464, - "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", - "block_time": 1713852783, - "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "destination": "", - "btc_amount": 0, - "fee": 56565, - "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", - "supported": 1 - } - }, "/addresses/
/balances": { "result": [ { @@ -2562,5 +2547,38 @@ "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a" } ] + }, + "/transactions/": { + "result": { + "tx_index": 2726605, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "block_index": 840464, + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_time": 1713852783, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "destination": "", + "btc_amount": 0, + "fee": 56565, + "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", + "supported": 1, + "unpacked_data": { + "message_type": "issuance", + "message_type_id": 22, + "message_data": { + "asset_id": 75313533584419238, + "asset": "UNNEGOTIABLE", + "subasset_longname": null, + "quantity": 1, + "divisible": false, + "lock": false, + "reset": false, + "callable": false, + "call_date": 0, + "call_price": 0.0, + "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "status": "valid" + } + } + } } } \ No newline at end of file diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index 28ef35b017..1713567afc 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -7,7 +7,7 @@ CURR_DIR = os.path.dirname(os.path.realpath(__file__)) API_DOC_FILE = os.path.join(CURR_DIR, "../../../Documentation/docs/advanced/api-v2/rest.md") -API_BLUEPRINT_FILE = os.path.join(CURR_DIR, "../counterparty-core.apib") +API_BLUEPRINT_FILE = os.path.join(CURR_DIR, "../../counterparty-core.apiary") CACHE_FILE = os.path.join(CURR_DIR, "apicache.json") API_ROOT = "http://api:api@localhost:4000" USE_API_CACHE = True From 67f0b9541b356c07ea65d0fcb8d4bfde3be899c5 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 16:06:43 +0200 Subject: [PATCH 119/280] fix apiary filename --- counterparty-core.apiary => apiary.apib | 0 counterparty-core/tools/genapidoc.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename counterparty-core.apiary => apiary.apib (100%) diff --git a/counterparty-core.apiary b/apiary.apib similarity index 100% rename from counterparty-core.apiary rename to apiary.apib diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index 1713567afc..ee0b315b12 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -7,7 +7,7 @@ CURR_DIR = os.path.dirname(os.path.realpath(__file__)) API_DOC_FILE = os.path.join(CURR_DIR, "../../../Documentation/docs/advanced/api-v2/rest.md") -API_BLUEPRINT_FILE = os.path.join(CURR_DIR, "../../counterparty-core.apiary") +API_BLUEPRINT_FILE = os.path.join(CURR_DIR, "../../apiary.apib") CACHE_FILE = os.path.join(CURR_DIR, "apicache.json") API_ROOT = "http://api:api@localhost:4000" USE_API_CACHE = True From 8ff2f0761d42250dd778d614d5fe7dccba84ea43 Mon Sep 17 00:00:00 2001 From: Adam Krellenstein Date: Thu, 25 Apr 2024 16:08:18 +0200 Subject: [PATCH 120/280] Add Port to Host --- apiary.apib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apiary.apib b/apiary.apib index 86499b82b5..44b1ee448e 100644 --- a/apiary.apib +++ b/apiary.apib @@ -1,5 +1,5 @@ FORMAT: 1A -HOST: https://api.counterparty.io +HOST: https://api.counterparty.io:4000 # Counterparty Core API From 6a9f477d893f65998048e16da61510322bbef229 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 16:19:51 +0200 Subject: [PATCH 121/280] replace /old by /v1 --- counterparty-core/counterpartycore/lib/api/api_v1.py | 6 +++--- counterparty-core/counterpartycore/server.py | 2 +- release-notes/release-notes-v10.1.2.md | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_v1.py b/counterparty-core/counterpartycore/lib/api/api_v1.py index 55dce5829b..cfb03dcd0d 100644 --- a/counterparty-core/counterpartycore/lib/api/api_v1.py +++ b/counterparty-core/counterpartycore/lib/api/api_v1.py @@ -1074,8 +1074,8 @@ def handle_root(args_path): request_path = args_path.lower() if ( request_path == "old" - or request_path.startswith("old/api/") - or request_path.startswith("old/rpc/") + or request_path.startswith("v1/api/") + or request_path.startswith("v1/rpc/") ): if flask.request.method == "POST": # Need to get those here because it might not be available in this aux function. @@ -1088,7 +1088,7 @@ def handle_root(args_path): else: error = "Invalid method." return flask.Response(error, 405, mimetype="application/json") - elif request_path.startswith("old/rest/"): + elif request_path.startswith("v1/rest/"): if flask.request.method == "GET" or flask.request.method == "POST": # Pass the URL path without /REST/ part and Flask request object. rest_path = args_path.split("/", 1)[1] diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index 6739ffd2b7..89270296f0 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -373,7 +373,7 @@ def initialise_config( config.RPC_HOST = "localhost" # The web root directory for API calls, eg. localhost:14000/rpc/ - config.RPC_WEBROOT = "/old/rpc/" + config.RPC_WEBROOT = "/v1/rpc/" # Server API RPC port if rpc_port: diff --git a/release-notes/release-notes-v10.1.2.md b/release-notes/release-notes-v10.1.2.md index 6cc002e42b..d54c75b652 100644 --- a/release-notes/release-notes-v10.1.2.md +++ b/release-notes/release-notes-v10.1.2.md @@ -7,7 +7,7 @@ To continue using the old API you must: - start `counterparty-server` with the flag `----enable-api-v1` - replace port `4100` with port `4000` for mainnet and port `14000` with port `14100` -- prefix all endpoints with `/old/` +- prefix all endpoints with `/v1/` To easily migrate to the new API, an equivalence table is available in the documentation # ChangeLog From 40ea0606101442d1f4aa188d1e0c1666834b88bf Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 16:49:16 +0200 Subject: [PATCH 122/280] backend -> bitcoin --- apiary.apib | 4 ++-- .../counterpartycore/lib/api/api_server.py | 2 +- .../counterpartycore/lib/api/routes.py | 14 +++++++------- counterparty-core/tools/apicache.json | 12 ++++++------ counterparty-core/tools/genapidoc.py | 6 +++--- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/apiary.apib b/apiary.apib index 86499b82b5..809b91dfd5 100644 --- a/apiary.apib +++ b/apiary.apib @@ -25,8 +25,8 @@ Notes: - All API responses contain the following 3 headers: * `X-COUNTERPARTY-HEIGHT` contains the last block parsed by Counterparty - * `X-BACKEND-HEIGHT` contains the last block known to Bitcoin Core - * `X-COUNTERPARTY-READY` contains true if `X-COUNTERPARTY-HEIGHT` >= `X-BACKEND-HEIGHT` - 1 + * `X-BITCOIN-HEIGHT` contains the last block known to Bitcoin Core + * `X-COUNTERPARTY-READY` contains true if `X-COUNTERPARTY-HEIGHT` >= `X-BITCOIN-HEIGHT` - 1 - All API responses follow the following format: diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 9919763e8f..3f5844018b 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -105,7 +105,7 @@ def return_result(http_code, result=None, error=None): response = flask.make_response(to_json(api_result), http_code) response.headers["X-COUNTERPARTY-HEIGHT"] = ledger.CURRENT_BLOCK_INDEX response.headers["X-COUNTERPARTY-READY"] = is_server_ready() - response.headers["X-BACKEND-HEIGHT"] = BACKEND_HEIGHT + response.headers["X-BITCOIN-HEIGHT"] = BACKEND_HEIGHT response.headers["Content-Type"] = "application/json" return response diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index 828716933e..2c97b0f617 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -91,13 +91,13 @@ "/events/": ledger.get_events_by_name, ### /healthz ### "/healthz": util.check_server_status, - ### /backend ### - "/backend/addresses/
/transactions": backend.search_raw_transactions, - "/backend/addresses/
/transactions/oldest": backend.get_oldest_tx, - "/backend/addresses/
/utxos": backend.get_unspent_txouts, - "/backend/addresses/
/pubkey": util.pubkeyhash_to_pubkey, - "/backend/transactions/": util.get_raw_transaction, - "/backend/estimatesmartfee": backend.fee_per_kb, + ### /bitcoin ### + "/bitcoin/addresses/
/transactions": backend.search_raw_transactions, + "/bitcoin/addresses/
/transactions/oldest": backend.get_oldest_tx, + "/bitcoin/addresses/
/utxos": backend.get_unspent_txouts, + "/bitcoin/addresses/
/pubkey": util.pubkeyhash_to_pubkey, + "/bitcoin/transactions/": util.get_raw_transaction, + "/bitcoin/estimatesmartfee": backend.fee_per_kb, ### /mempool ### "/mempool/events": ledger.get_all_mempool_events, "/mempool/events/": ledger.get_mempool_events_by_name, diff --git a/counterparty-core/tools/apicache.json b/counterparty-core/tools/apicache.json index 636107c57b..5846ea6a7f 100644 --- a/counterparty-core/tools/apicache.json +++ b/counterparty-core/tools/apicache.json @@ -2133,7 +2133,7 @@ } ] }, - "/backend/addresses/
/transactions": { + "/bitcoin/addresses/
/transactions": { "result": [ { "tx_hash": "eae4f1dba4d75bda9dd0de12f69a980be267bbc16b7a280a2a4b40c4b3bbb70a" @@ -2173,13 +2173,13 @@ } ] }, - "/backend/addresses/
/transactions/oldest": { + "/bitcoin/addresses/
/transactions/oldest": { "result": { "block_index": 833187, "tx_hash": "2c8bc3eede9ec60d26c6fd7f44829adc64da593552044a28c673022220f560c3" } }, - "/backend/addresses/
/utxos": { + "/bitcoin/addresses/
/utxos": { "result": [ { "vout": 6, @@ -2263,10 +2263,10 @@ } ] }, - "/backend/addresses/
/pubkey": { + "/bitcoin/addresses/
/pubkey": { "result": "0388ef0905568d425f1ffd4031d93dda4ef0e220c9b5fc4a6cbaf11544c4a5ca49" }, - "/backend/transactions/": { + "/bitcoin/transactions/": { "result": { "txid": "3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018", "hash": "417c24d7a5539bc5b8496e26528382ac297a85a1c6b891b220f72712405ec300", @@ -2368,7 +2368,7 @@ "status": "Healthy" } }, - "/backend/estimatesmartfee": { + "/bitcoin/estimatesmartfee": { "result": 295443 }, "/orders/": { diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index ee0b315b12..4c15651c0f 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -48,7 +48,7 @@ def get_example_output(path, args): "/burns", "/events", "/mempool", - "/backend", + "/bitcoin", ] @@ -91,8 +91,8 @@ def gen_groups_toc(): - All API responses contain the following 3 headers: * `X-COUNTERPARTY-HEIGHT` contains the last block parsed by Counterparty - * `X-BACKEND-HEIGHT` contains the last block known to Bitcoin Core - * `X-COUNTERPARTY-READY` contains true if `X-COUNTERPARTY-HEIGHT` >= `X-BACKEND-HEIGHT` - 1 + * `X-BITCOIN-HEIGHT` contains the last block known to Bitcoin Core + * `X-COUNTERPARTY-READY` contains true if `X-COUNTERPARTY-HEIGHT` >= `X-BITCOIN-HEIGHT` - 1 - All API responses follow the following format: From 85c9ff7a4c699be49dd92439d846592776e2b8e2 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 17:07:39 +0200 Subject: [PATCH 123/280] fix tests --- counterparty-core/counterpartycore/test/api_v2_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/counterparty-core/counterpartycore/test/api_v2_test.py b/counterparty-core/counterpartycore/test/api_v2_test.py index e4fd79a843..6ca80c2551 100644 --- a/counterparty-core/counterpartycore/test/api_v2_test.py +++ b/counterparty-core/counterpartycore/test/api_v2_test.py @@ -31,7 +31,7 @@ def test_api_v2(request): dispenser_hash = "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498" event = "CREDIT" event_index = 10 - exclude_routes = ["compose", "unpack", "info", "mempool", "healthz", "backend"] + exclude_routes = ["compose", "unpack", "info", "mempool", "healthz", "bitcoin"] results = {} fixtures = {} with open(API_V2_FIXTURES, "r") as f: From fe5343ab2e790da31cdee908042dca3020bbc4c7 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 17:11:00 +0200 Subject: [PATCH 124/280] AddrindexRS -> Bitcoin Core --- apiary.apib | 18 +++++++++--------- counterparty-core/tools/genapidoc.py | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/apiary.apib b/apiary.apib index 809b91dfd5..347f795fc1 100644 --- a/apiary.apib +++ b/apiary.apib @@ -16,7 +16,7 @@ API routes are divided into 11 groups: - [`/burns`](#/reference/burns) - [`/events`](#/reference/events) - [`/mempool`](#/reference/mempool) -- [`/backend`](#/reference/backend) +- [`/bitcoin`](#/reference/bitcoin) Notes: @@ -37,7 +37,7 @@ Notes: } ``` -- Routes in the `/backend` group serve as a proxy to make requests to AddrindexRS. +- Routes in the `/bitcoin` group serve as a proxy to make requests to Bitcoin Core. # Counterparty API Root [/] @@ -3649,9 +3649,9 @@ Health check route. } ``` -## Group Backend +## Group Bitcoin -### Search Raw Transactions [GET /backend/addresses/{address}/transactions{?unconfirmed}{?only_tx_hashes}] +### Search Raw Transactions [GET /bitcoin/addresses/{address}/transactions{?unconfirmed}{?only_tx_hashes}] Returns all transactions involving a given address @@ -3707,7 +3707,7 @@ Returns all transactions involving a given address } ``` -### Get Oldest Tx [GET /backend/addresses/{address}/transactions/oldest{?block_index}] +### Get Oldest Tx [GET /bitcoin/addresses/{address}/transactions/oldest{?block_index}] Get the oldest transaction for an address. @@ -3727,7 +3727,7 @@ Get the oldest transaction for an address. } ``` -### Get Unspent Txouts [GET /backend/addresses/{address}/utxos{?unconfirmed}{?unspent_tx_hash}] +### Get Unspent Txouts [GET /bitcoin/addresses/{address}/utxos{?unconfirmed}{?unspent_tx_hash}] Returns a list of unspent outputs for a specific address @@ -3827,7 +3827,7 @@ Returns a list of unspent outputs for a specific address } ``` -### Pubkeyhash To Pubkey [GET /backend/addresses/{address}/pubkey{?provided_pubkeys}] +### Pubkeyhash To Pubkey [GET /bitcoin/addresses/{address}/pubkey{?provided_pubkeys}] Get pubkey for an address. @@ -3844,7 +3844,7 @@ Get pubkey for an address. } ``` -### Get Raw Transaction [GET /backend/transactions/{tx_hash}{?verbose}] +### Get Raw Transaction [GET /bitcoin/transactions/{tx_hash}{?verbose}] Get a raw transaction from the blockchain @@ -3902,7 +3902,7 @@ Get a raw transaction from the blockchain } ``` -### Fee Per Kb [GET /backend/estimatesmartfee{?conf_target}{?mode}] +### Fee Per Kb [GET /bitcoin/estimatesmartfee{?conf_target}{?mode}] Get the fee per kilobyte for a transaction to be confirmed in `conf_target` blocks. diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index 4c15651c0f..f4b6109fd6 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -103,7 +103,7 @@ def gen_groups_toc(): } ``` -- Routes in the `/backend` group serve as a proxy to make requests to AddrindexRS. +- Routes in the `/bitcoin` group serve as a proxy to make requests to Bitcoin Core. # Counterparty API Root [{root_path}] From f8cb3a13f80ead68004df0d900659f75f873c65a Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 22:10:44 +0200 Subject: [PATCH 125/280] search_raw_transactions -> get_transactions_by_address --- apiary.apib | 2 +- counterparty-core/counterpartycore/lib/api/routes.py | 2 +- .../counterpartycore/lib/transaction.py | 12 ++++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/apiary.apib b/apiary.apib index 347f795fc1..a8424a4e70 100644 --- a/apiary.apib +++ b/apiary.apib @@ -3651,7 +3651,7 @@ Health check route. ## Group Bitcoin -### Search Raw Transactions [GET /bitcoin/addresses/{address}/transactions{?unconfirmed}{?only_tx_hashes}] +### Get Transactions By Address [GET /bitcoin/addresses/{address}/transactions{?unconfirmed}{?only_tx_hashes}] Returns all transactions involving a given address diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index 2c97b0f617..d6e107e7e9 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -92,7 +92,7 @@ ### /healthz ### "/healthz": util.check_server_status, ### /bitcoin ### - "/bitcoin/addresses/
/transactions": backend.search_raw_transactions, + "/bitcoin/addresses/
/transactions": transaction.get_transactions_by_address, "/bitcoin/addresses/
/transactions/oldest": backend.get_oldest_tx, "/bitcoin/addresses/
/utxos": backend.get_unspent_txouts, "/bitcoin/addresses/
/pubkey": util.pubkeyhash_to_pubkey, diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index 5cc4923c8c..2cf6c5ead9 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -1777,3 +1777,15 @@ def unpack(db, datahex: str, block_index: int = None): "message_type_id": message_type_id, "message_data": message_data, } + + +def get_transactions_by_address( + address: str, unconfirmed: bool = True, only_tx_hashes: bool = False +): + """ + Returns all transactions involving a given address + :param address: The address to search for (e.g. 14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS) + :param unconfirmed: Include unconfirmed transactions (e.g. True) + :param only_tx_hashes: Return only the tx hashes (e.g. True) + """ + return backend.search_raw_transactions(address, unconfirmed, only_tx_hashes) From 06d51bcfd599214395cd07e95f7b4ab83de9fc0a Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 22:15:01 +0200 Subject: [PATCH 126/280] get_oldest_tx -> get_oldest_transaction_by_address --- apiary.apib | 2 +- .../counterpartycore/lib/api/routes.py | 4 ++-- .../counterpartycore/lib/backend/__init__.py | 14 ++++++++++++-- .../counterpartycore/lib/transaction.py | 12 ------------ 4 files changed, 15 insertions(+), 17 deletions(-) diff --git a/apiary.apib b/apiary.apib index a8424a4e70..dc8fd23d6e 100644 --- a/apiary.apib +++ b/apiary.apib @@ -3707,7 +3707,7 @@ Returns all transactions involving a given address } ``` -### Get Oldest Tx [GET /bitcoin/addresses/{address}/transactions/oldest{?block_index}] +### Get Oldest Transaction By Address [GET /bitcoin/addresses/{address}/transactions/oldest{?block_index}] Get the oldest transaction for an address. diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index d6e107e7e9..edc28c2b91 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -92,8 +92,8 @@ ### /healthz ### "/healthz": util.check_server_status, ### /bitcoin ### - "/bitcoin/addresses/
/transactions": transaction.get_transactions_by_address, - "/bitcoin/addresses/
/transactions/oldest": backend.get_oldest_tx, + "/bitcoin/addresses/
/transactions": backend.get_transactions_by_address, + "/bitcoin/addresses/
/transactions/oldest": backend.get_oldest_transaction_by_address, "/bitcoin/addresses/
/utxos": backend.get_unspent_txouts, "/bitcoin/addresses/
/pubkey": util.pubkeyhash_to_pubkey, "/bitcoin/transactions/": util.get_raw_transaction, diff --git a/counterparty-core/counterpartycore/lib/backend/__init__.py b/counterparty-core/counterpartycore/lib/backend/__init__.py index 802a8eced2..e99bde9b37 100644 --- a/counterparty-core/counterpartycore/lib/backend/__init__.py +++ b/counterparty-core/counterpartycore/lib/backend/__init__.py @@ -239,22 +239,32 @@ def get_unspent_txouts(address: str, unconfirmed: bool = False, unspent_tx_hash: def search_raw_transactions(address: str, unconfirmed: bool = True, only_tx_hashes: bool = False): + return backend().search_raw_transactions(address, unconfirmed, only_tx_hashes) + + +def get_transactions_by_address( + address: str, unconfirmed: bool = True, only_tx_hashes: bool = False +): """ Returns all transactions involving a given address :param address: The address to search for (e.g. 14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS) :param unconfirmed: Include unconfirmed transactions (e.g. True) :param only_tx_hashes: Return only the tx hashes (e.g. True) """ - return backend().search_raw_transactions(address, unconfirmed, only_tx_hashes) + return search_raw_transactions(address, unconfirmed, only_tx_hashes) def get_oldest_tx(address: str, block_index: int = None): + return backend().get_oldest_tx(address, block_index=block_index) + + +def get_oldest_transaction_by_address(address: str, block_index: int = None): """ Get the oldest transaction for an address. :param address: The address to search for. (e.g. 14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS) :param block_index: The block index to search from. """ - return backend().get_oldest_tx(address, block_index=block_index) + return get_oldest_tx(address, block_index=block_index) class UnknownPubKeyError(Exception): diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index 2cf6c5ead9..5cc4923c8c 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -1777,15 +1777,3 @@ def unpack(db, datahex: str, block_index: int = None): "message_type_id": message_type_id, "message_data": message_data, } - - -def get_transactions_by_address( - address: str, unconfirmed: bool = True, only_tx_hashes: bool = False -): - """ - Returns all transactions involving a given address - :param address: The address to search for (e.g. 14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS) - :param unconfirmed: Include unconfirmed transactions (e.g. True) - :param only_tx_hashes: Return only the tx hashes (e.g. True) - """ - return backend.search_raw_transactions(address, unconfirmed, only_tx_hashes) From 0b77eb9f38281d69ce2e08e740bc8d0db3f29462 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 25 Apr 2024 22:17:11 +0200 Subject: [PATCH 127/280] remove raw --- apiary.apib | 4 ++-- counterparty-core/counterpartycore/lib/api/routes.py | 2 +- counterparty-core/counterpartycore/lib/api/util.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apiary.apib b/apiary.apib index dc8fd23d6e..70c35ce6b7 100644 --- a/apiary.apib +++ b/apiary.apib @@ -3844,9 +3844,9 @@ Get pubkey for an address. } ``` -### Get Raw Transaction [GET /bitcoin/transactions/{tx_hash}{?verbose}] +### Get Transaction [GET /bitcoin/transactions/{tx_hash}{?verbose}] -Get a raw transaction from the blockchain +Get a transaction from the blockchain + Parameters + tx_hash: `3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018` (str, required) - The transaction hash diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index edc28c2b91..1eaebb17f6 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -96,7 +96,7 @@ "/bitcoin/addresses/
/transactions/oldest": backend.get_oldest_transaction_by_address, "/bitcoin/addresses/
/utxos": backend.get_unspent_txouts, "/bitcoin/addresses/
/pubkey": util.pubkeyhash_to_pubkey, - "/bitcoin/transactions/": util.get_raw_transaction, + "/bitcoin/transactions/": util.get_transaction, "/bitcoin/estimatesmartfee": backend.fee_per_kb, ### /mempool ### "/mempool/events": ledger.get_all_mempool_events, diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index e4ab9a1075..c95016ca9d 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -116,9 +116,9 @@ def pubkeyhash_to_pubkey(address: str, provided_pubkeys: str = None): return backend.pubkeyhash_to_pubkey(address, provided_pubkeys=provided_pubkeys_list) -def get_raw_transaction(tx_hash: str, verbose: bool = False): +def get_transaction(tx_hash: str, verbose: bool = False): """ - Get a raw transaction from the blockchain + Get a transaction from the blockchain :param tx_hash: The transaction hash (e.g. 3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018) :param verbose: Whether to return JSON output or raw hex (e.g. True) """ From 94bfee08619bb59f7d35848b931b2240bbfed846 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 26 Apr 2024 09:33:06 +0200 Subject: [PATCH 128/280] tweaks and typos --- apiary.apib | 214 ++++++++---------- .../counterpartycore/lib/api/routes.py | 2 +- .../counterpartycore/lib/ledger.py | 4 +- .../counterpartycore/lib/transaction.py | 13 +- counterparty-core/tools/genapidoc.py | 5 +- release-notes/release-notes-v10.1.2.md | 2 +- 6 files changed, 108 insertions(+), 132 deletions(-) diff --git a/apiary.apib b/apiary.apib index 70c35ce6b7..788168c19c 100644 --- a/apiary.apib +++ b/apiary.apib @@ -293,7 +293,7 @@ Returns the events of a block } ``` -### Get Events Counts By Block [GET /blocks/{block_index}/events/counts] +### Get Event Counts By Block [GET /blocks/{block_index}/events/counts] Returns the event counts of a block @@ -1218,7 +1218,7 @@ Returns the sweeps of an address } ``` -### Compose Bet [GET /addresses/{address}/compose/bet{?feed_address}{?bet_type}{?deadline}{?wager_quantity}{?counterwager_quantity}{?expiration}{?leverage}{?target_value}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] +### Compose Bet [GET /addresses/{address}/compose/bet{?feed_address}{?bet_type}{?deadline}{?wager_quantity}{?counterwager_quantity}{?expiration}{?leverage}{?target_value}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Composes a transaction to issue a bet against a feed. @@ -1236,11 +1236,11 @@ Composes a transaction to issue a bet against a feed. + Default: `None` + encoding (str, optional) - The encoding method to use + Default: `auto` - + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshis) + Default: `None` - + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + regular_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each non-(bare) multisig output. + Default: `546` - + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + Default: `0` @@ -1248,22 +1248,20 @@ Composes a transaction to issue a bet against a feed. + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + Default: `False` - + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshis). Leave as default for the server to automatically choose + Default: `None` - + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshis). This differs from fee in that this is an upper bound value, which fee is an exact value + Default: `0` + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + Default: `None` + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + Default: `None` - + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + disable_utxo_locks (bool, optional) - By default, UTXOs utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + Default: `False` + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + Default: `False` + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + Default: `None` - + old_style_api (bool, optional) - Use the old style API - + Default: `True` + segwit (bool, optional) - Use segwit + Default: `False` @@ -1289,7 +1287,7 @@ Composes a transaction to issue a bet against a feed. } ``` -### Compose Broadcast [GET /addresses/{address}/compose/broadcast{?timestamp}{?value}{?fee_fraction}{?text}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] +### Compose Broadcast [GET /addresses/{address}/compose/broadcast{?timestamp}{?value}{?fee_fraction}{?text}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Composes a transaction to broadcast textual and numerical information to the network. @@ -1301,11 +1299,11 @@ Composes a transaction to broadcast textual and numerical information to the net + text: `"Hello, world!"` (str, required) - The textual part of the broadcast + encoding (str, optional) - The encoding method to use + Default: `auto` - + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshis) + Default: `None` - + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + regular_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each non-(bare) multisig output. + Default: `546` - + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + Default: `0` @@ -1313,22 +1311,20 @@ Composes a transaction to broadcast textual and numerical information to the net + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + Default: `False` - + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshis). Leave as default for the server to automatically choose + Default: `None` - + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshis). This differs from fee in that this is an upper bound value, which fee is an exact value + Default: `0` + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + Default: `None` + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + Default: `None` - + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + disable_utxo_locks (bool, optional) - By default, UTXOs utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + Default: `False` + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + Default: `False` + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + Default: `None` - + old_style_api (bool, optional) - Use the old style API - + Default: `True` + segwit (bool, optional) - Use segwit + Default: `False` @@ -1350,7 +1346,7 @@ Composes a transaction to broadcast textual and numerical information to the net } ``` -### Compose Btcpay [GET /addresses/{address}/compose/btcpay{?order_match_id}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] +### Compose BTCPay [GET /addresses/{address}/compose/btcpay{?order_match_id}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Composes a transaction to pay for a BTC order match. @@ -1359,11 +1355,11 @@ Composes a transaction to pay for a BTC order match. + order_match_id: `e470416a9500fb046835192da013f48e6468a07dba1bede4a0b68e666ed23c8d_4953bde3d9417b103615c2d3d4b284d4fcf7cbd820e5dd19ac0084e9ebd090b2` (str, required) - The ID of the order match to pay for + encoding (str, optional) - The encoding method to use + Default: `auto` - + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshis) + Default: `None` - + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + regular_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each non-(bare) multisig output. + Default: `546` - + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + Default: `0` @@ -1371,22 +1367,20 @@ Composes a transaction to pay for a BTC order match. + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + Default: `False` - + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshis). Leave as default for the server to automatically choose + Default: `None` - + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshis). This differs from fee in that this is an upper bound value, which fee is an exact value + Default: `0` + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + Default: `None` + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + Default: `None` - + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + disable_utxo_locks (bool, optional) - By default, UTXOs utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + Default: `False` + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + Default: `False` + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + Default: `None` - + old_style_api (bool, optional) - Use the old style API - + Default: `True` + segwit (bool, optional) - Use segwit + Default: `False` @@ -1405,7 +1399,7 @@ Composes a transaction to pay for a BTC order match. } ``` -### Compose Burn [GET /addresses/{address}/compose/burn{?quantity}{?overburn}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] +### Compose Burn [GET /addresses/{address}/compose/burn{?quantity}{?overburn}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, possible between blocks 278310 and 283810; on testnet it is still available). @@ -1416,11 +1410,11 @@ Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, poss + Default: `False` + encoding (str, optional) - The encoding method to use + Default: `auto` - + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshis) + Default: `None` - + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + regular_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each non-(bare) multisig output. + Default: `546` - + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + Default: `0` @@ -1428,22 +1422,20 @@ Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, poss + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + Default: `False` - + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshis). Leave as default for the server to automatically choose + Default: `None` - + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshis). This differs from fee in that this is an upper bound value, which fee is an exact value + Default: `0` + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + Default: `None` + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + Default: `None` - + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + disable_utxo_locks (bool, optional) - By default, UTXOs utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + Default: `False` + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + Default: `False` + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + Default: `None` - + old_style_api (bool, optional) - Use the old style API - + Default: `True` + segwit (bool, optional) - Use segwit + Default: `False` @@ -1463,7 +1455,7 @@ Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, poss } ``` -### Compose Cancel [GET /addresses/{address}/compose/cancel{?offer_hash}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] +### Compose Cancel [GET /addresses/{address}/compose/cancel{?offer_hash}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Composes a transaction to cancel an open order or bet. @@ -1472,11 +1464,11 @@ Composes a transaction to cancel an open order or bet. + offer_hash: `8ce3335391bf71f8f12c0573b4f85b9adc4882a9955d9f8e5ababfdd0060279a` (str, required) - The hash of the order/bet to be cancelled + encoding (str, optional) - The encoding method to use + Default: `auto` - + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshis) + Default: `None` - + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + regular_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each non-(bare) multisig output. + Default: `546` - + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + Default: `0` @@ -1484,22 +1476,20 @@ Composes a transaction to cancel an open order or bet. + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + Default: `False` - + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshis). Leave as default for the server to automatically choose + Default: `None` - + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshis). This differs from fee in that this is an upper bound value, which fee is an exact value + Default: `0` + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + Default: `None` + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + Default: `None` - + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + disable_utxo_locks (bool, optional) - By default, UTXOs utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + Default: `False` + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + Default: `False` + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + Default: `None` - + old_style_api (bool, optional) - Use the old style API - + Default: `True` + segwit (bool, optional) - Use segwit + Default: `False` @@ -1518,7 +1508,7 @@ Composes a transaction to cancel an open order or bet. } ``` -### Compose Destroy [GET /addresses/{address}/compose/destroy{?asset}{?quantity}{?tag}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] +### Compose Destroy [GET /addresses/{address}/compose/destroy{?asset}{?quantity}{?tag}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Composes a transaction to destroy a quantity of an asset. @@ -1529,11 +1519,11 @@ Composes a transaction to destroy a quantity of an asset. + tag: `"bugs!"` (str, required) - A tag for the destruction + encoding (str, optional) - The encoding method to use + Default: `auto` - + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshis) + Default: `None` - + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + regular_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each non-(bare) multisig output. + Default: `546` - + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + Default: `0` @@ -1541,22 +1531,20 @@ Composes a transaction to destroy a quantity of an asset. + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + Default: `False` - + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshis). Leave as default for the server to automatically choose + Default: `None` - + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshis). This differs from fee in that this is an upper bound value, which fee is an exact value + Default: `0` + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + Default: `None` + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + Default: `None` - + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + disable_utxo_locks (bool, optional) - By default, UTXOs utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + Default: `False` + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + Default: `False` + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + Default: `None` - + old_style_api (bool, optional) - Use the old style API - + Default: `True` + segwit (bool, optional) - Use segwit + Default: `False` @@ -1577,7 +1565,7 @@ Composes a transaction to destroy a quantity of an asset. } ``` -### Compose Dispenser [GET /addresses/{address}/compose/dispenser{?asset}{?give_quantity}{?escrow_quantity}{?mainchainrate}{?status}{?open_address}{?oracle_address}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] +### Compose Dispenser [GET /addresses/{address}/compose/dispenser{?asset}{?give_quantity}{?escrow_quantity}{?mainchainrate}{?status}{?open_address}{?oracle_address}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Opens or closes a dispenser for a given asset at a given rate of main chain asset (BTC). Escrowed quantity on open must be equal or greater than give_quantity. It is suggested that you escrow multiples of give_quantity to ease dispenser operation. @@ -1594,11 +1582,11 @@ Opens or closes a dispenser for a given asset at a given rate of main chain asse + Default: `None` + encoding (str, optional) - The encoding method to use + Default: `auto` - + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshis) + Default: `None` - + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + regular_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each non-(bare) multisig output. + Default: `546` - + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + Default: `0` @@ -1606,22 +1594,20 @@ Opens or closes a dispenser for a given asset at a given rate of main chain asse + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + Default: `False` - + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshis). Leave as default for the server to automatically choose + Default: `None` - + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshis). This differs from fee in that this is an upper bound value, which fee is an exact value + Default: `0` + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + Default: `None` + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + Default: `None` - + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + disable_utxo_locks (bool, optional) - By default, UTXOs utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + Default: `False` + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + Default: `False` + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + Default: `None` - + old_style_api (bool, optional) - Use the old style API - + Default: `True` + segwit (bool, optional) - Use segwit + Default: `False` @@ -1646,7 +1632,7 @@ Opens or closes a dispenser for a given asset at a given rate of main chain asse } ``` -### Compose Dividend [GET /addresses/{address}/compose/dividend{?quantity_per_unit}{?asset}{?dividend_asset}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] +### Compose Dividend [GET /addresses/{address}/compose/dividend{?quantity_per_unit}{?asset}{?dividend_asset}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Composes a transaction to issue a dividend to holders of a given asset. @@ -1657,11 +1643,11 @@ Composes a transaction to issue a dividend to holders of a given asset. + dividend_asset: `XCP` (str, required) - The asset or subasset that the dividends are paid in + encoding (str, optional) - The encoding method to use + Default: `auto` - + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshis) + Default: `None` - + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + regular_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each non-(bare) multisig output. + Default: `546` - + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + Default: `0` @@ -1669,22 +1655,20 @@ Composes a transaction to issue a dividend to holders of a given asset. + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + Default: `False` - + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshis). Leave as default for the server to automatically choose + Default: `None` - + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshis). This differs from fee in that this is an upper bound value, which fee is an exact value + Default: `0` + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + Default: `None` + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + Default: `None` - + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + disable_utxo_locks (bool, optional) - By default, UTXOs utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + Default: `False` + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + Default: `False` + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + Default: `None` - + old_style_api (bool, optional) - Use the old style API - + Default: `True` + segwit (bool, optional) - Use segwit + Default: `False` @@ -1705,7 +1689,7 @@ Composes a transaction to issue a dividend to holders of a given asset. } ``` -### Compose Issuance [GET /addresses/{address}/compose/issuance{?asset}{?quantity}{?transfer_destination}{?divisible}{?lock}{?reset}{?description}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] +### Compose Issuance [GET /addresses/{address}/compose/issuance{?asset}{?quantity}{?transfer_destination}{?divisible}{?lock}{?reset}{?description}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Composes a transaction to Issue a new asset, issue more of an existing asset, lock an asset, reset existing supply, or transfer the ownership of an asset. @@ -1725,11 +1709,11 @@ Composes a transaction to Issue a new asset, issue more of an existing asset, lo + Default: `None` + encoding (str, optional) - The encoding method to use + Default: `auto` - + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshis) + Default: `None` - + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + regular_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each non-(bare) multisig output. + Default: `546` - + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + Default: `0` @@ -1737,22 +1721,20 @@ Composes a transaction to Issue a new asset, issue more of an existing asset, lo + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + Default: `False` - + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshis). Leave as default for the server to automatically choose + Default: `None` - + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshis). This differs from fee in that this is an upper bound value, which fee is an exact value + Default: `0` + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + Default: `None` + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + Default: `None` - + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + disable_utxo_locks (bool, optional) - By default, UTXOs utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + Default: `False` + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + Default: `False` + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + Default: `None` - + old_style_api (bool, optional) - Use the old style API - + Default: `True` + segwit (bool, optional) - Use segwit + Default: `False` @@ -1777,7 +1759,7 @@ Composes a transaction to Issue a new asset, issue more of an existing asset, lo } ``` -### Compose Mpma [GET /addresses/{address}/compose/mpma{?assets}{?destinations}{?quantities}{?memo}{?memo_is_hex}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] +### Compose MPMA [GET /addresses/{address}/compose/mpma{?assets}{?destinations}{?quantities}{?memo}{?memo_is_hex}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Composes a transaction to send multiple payments to multiple addresses. @@ -1790,11 +1772,11 @@ Composes a transaction to send multiple payments to multiple addresses. + memo_is_hex: `False` (bool, required) - Whether the memo field is a hexadecimal string + encoding (str, optional) - The encoding method to use + Default: `auto` - + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshis) + Default: `None` - + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + regular_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each non-(bare) multisig output. + Default: `546` - + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + Default: `0` @@ -1802,22 +1784,20 @@ Composes a transaction to send multiple payments to multiple addresses. + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + Default: `False` - + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshis). Leave as default for the server to automatically choose + Default: `None` - + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshis). This differs from fee in that this is an upper bound value, which fee is an exact value + Default: `0` + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + Default: `None` + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + Default: `None` - + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + disable_utxo_locks (bool, optional) - By default, UTXOs utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + Default: `False` + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + Default: `False` + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + Default: `None` - + old_style_api (bool, optional) - Use the old style API - + Default: `True` + segwit (bool, optional) - Use segwit + Default: `False` @@ -1854,7 +1834,7 @@ Composes a transaction to send multiple payments to multiple addresses. } ``` -### Compose Order [GET /addresses/{address}/compose/order{?give_asset}{?give_quantity}{?get_asset}{?get_quantity}{?expiration}{?fee_required}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] +### Compose Order [GET /addresses/{address}/compose/order{?give_asset}{?give_quantity}{?get_asset}{?get_quantity}{?expiration}{?fee_required}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Composes a transaction to place an order on the distributed exchange. @@ -1868,11 +1848,11 @@ Composes a transaction to place an order on the distributed exchange. + fee_required: `100` (int, required) - The miners’ fee required to be paid by orders for them to match this one; in BTC; required only if buying BTC (may be zero, though) + encoding (str, optional) - The encoding method to use + Default: `auto` - + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshis) + Default: `None` - + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + regular_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each non-(bare) multisig output. + Default: `546` - + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + Default: `0` @@ -1880,22 +1860,20 @@ Composes a transaction to place an order on the distributed exchange. + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + Default: `False` - + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshis). Leave as default for the server to automatically choose + Default: `None` - + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshis). This differs from fee in that this is an upper bound value, which fee is an exact value + Default: `0` + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + Default: `None` + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + Default: `None` - + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + disable_utxo_locks (bool, optional) - By default, UTXOs utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + Default: `False` + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + Default: `False` + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + Default: `None` - + old_style_api (bool, optional) - Use the old style API - + Default: `True` + segwit (bool, optional) - Use segwit + Default: `False` @@ -1919,7 +1897,7 @@ Composes a transaction to place an order on the distributed exchange. } ``` -### Compose Send [GET /addresses/{address}/compose/send{?destination}{?asset}{?quantity}{?memo}{?memo_is_hex}{?use_enhanced_send}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] +### Compose Send [GET /addresses/{address}/compose/send{?destination}{?asset}{?quantity}{?memo}{?memo_is_hex}{?use_enhanced_send}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Composes a transaction to send a quantity of an asset to another address. @@ -1936,11 +1914,11 @@ Composes a transaction to send a quantity of an asset to another address. + Default: `True` + encoding (str, optional) - The encoding method to use + Default: `auto` - + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshis) + Default: `None` - + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + regular_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each non-(bare) multisig output. + Default: `546` - + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + Default: `0` @@ -1948,22 +1926,20 @@ Composes a transaction to send a quantity of an asset to another address. + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + Default: `False` - + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshis). Leave as default for the server to automatically choose + Default: `None` - + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshis). This differs from fee in that this is an upper bound value, which fee is an exact value + Default: `0` + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + Default: `None` + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + Default: `None` - + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + disable_utxo_locks (bool, optional) - By default, UTXOs utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + Default: `False` + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + Default: `False` + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + Default: `None` - + old_style_api (bool, optional) - Use the old style API - + Default: `True` + segwit (bool, optional) - Use segwit + Default: `False` @@ -1987,7 +1963,7 @@ Composes a transaction to send a quantity of an asset to another address. } ``` -### Compose Sweep [GET /addresses/{address}/compose/sweep{?destination}{?flags}{?memo}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?old_style_api}{?segwit}] +### Compose Sweep [GET /addresses/{address}/compose/sweep{?destination}{?flags}{?memo}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Composes a transaction to Sends all assets and/or transfer ownerships to a destination address. @@ -1998,11 +1974,11 @@ Composes a transaction to Sends all assets and/or transfer ownerships to a desti + memo: `FFFF` (str, required) - The Memo associated with this transaction in hex format + encoding (str, optional) - The encoding method to use + Default: `auto` - + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi) + + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshis) + Default: `None` - + regular_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output. + + regular_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each non-(bare) multisig output. + Default: `546` - + multisig_dust_size (int, optional) - Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output + + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away + Default: `0` @@ -2010,22 +1986,20 @@ Composes a transaction to Sends all assets and/or transfer ownerships to a desti + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs + Default: `False` - + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose + + fee (int, optional) - If you'd like to specify a custom miners' fee, specify it here (in satoshis). Leave as default for the server to automatically choose + Default: `None` - + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value + + fee_provided (int, optional) - If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshis). This differs from fee in that this is an upper bound value, which fee is an exact value + Default: `0` + unspent_tx_hash (str, optional) - When compiling the UTXOs to use as inputs for the transaction being created, only consider unspent outputs from this specific transaction hash. Defaults to null to consider all UTXOs for the address. Do not use this parameter if you are specifying custom_inputs + Default: `None` + dust_return_pubkey (str, optional) - The dust return pubkey is used in multi-sig data outputs (as the only real pubkey) to make those the outputs spendable. By default, this pubkey is taken from the pubkey used in the first transaction input. However, it can be overridden here (and is required to be specified if a P2SH input is used and multisig is used as the data output encoding.) If specified, specify the public key (in hex format) where dust will be returned to so that it can be reclaimed. Only valid/useful when used with transactions that utilize multisig data encoding. Note that if this value is set to false, this instructs counterparty-server to use the default dust return pubkey configured at the node level. If this default is not set at the node level, the call will generate an exception + Default: `None` - + disable_utxo_locks (bool, optional) - By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + + disable_utxo_locks (bool, optional) - By default, UTXOs utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs + Default: `False` + extended_tx_info (bool, optional) - When this is not specified or false, the create_ calls return only a hex-encoded string. If this is true, the create_ calls return a data object with the following keys: tx_hex, btc_in, btc_out, btc_change, and btc_fee + Default: `False` + p2sh_pretx_txid (str, optional) - The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction + Default: `None` - + old_style_api (bool, optional) - Use the old style API - + Default: `True` + segwit (bool, optional) - Use segwit + Default: `False` @@ -2942,7 +2916,7 @@ Returns the order matches of an order } ``` -### Get Btcpays By Order [GET /orders/{order_hash}/btcpays] +### Get BTCPays By Order [GET /orders/{order_hash}/btcpays] Returns the BTC pays of an order @@ -3827,7 +3801,7 @@ Returns a list of unspent outputs for a specific address } ``` -### Pubkeyhash To Pubkey [GET /bitcoin/addresses/{address}/pubkey{?provided_pubkeys}] +### PubKeyHash To Pubkey [GET /bitcoin/addresses/{address}/pubkey{?provided_pubkeys}] Get pubkey for an address. diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index 1eaebb17f6..1488c7e800 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -13,7 +13,7 @@ "/blocks/": ledger.get_block, "/blocks//transactions": ledger.get_transactions_by_block, "/blocks//events": ledger.get_events_by_block, - "/blocks//events/counts": ledger.get_events_counts_by_block, + "/blocks//events/counts": ledger.get_event_counts_by_block, "/blocks//events/": ledger.get_events_by_block_and_event, "/blocks//credits": ledger.get_credits_by_block, "/blocks//debits": ledger.get_debits_by_block, diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index 3ebbaee5ce..f6fb562887 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -129,7 +129,7 @@ def get_events_by_block_and_event(db, block_index: int, event: str): :param str event: The event to filter by (e.g. CREDIT) """ if event == "count": - return get_events_counts_by_block(db, block_index=block_index) + return get_event_counts_by_block(db, block_index=block_index) return get_events(db, block_index=block_index, event=event) @@ -203,7 +203,7 @@ def get_events_counts(db, block_index=None): return cursor.fetchall() -def get_events_counts_by_block(db, block_index: int): +def get_event_counts_by_block(db, block_index: int): """ Returns the event counts of a block :param int block_index: The index of the block to return (e.g. 840464) diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index 5cc4923c8c..b29a6506c4 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -961,17 +961,17 @@ def get_dust_return_pubkey(source, provided_pubkeys, encoding): "fee_per_kb": ( int, None, - "The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshi)", + "The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshis)", ), "regular_dust_size": ( int, config.DEFAULT_REGULAR_DUST_SIZE, - "Specify (in satoshi) to override the (dust) amount of BTC used for each non-(bare) multisig output.", + "Specify (in satoshis) to override the (dust) amount of BTC used for each non-(bare) multisig output.", ), "multisig_dust_size": ( int, config.DEFAULT_MULTISIG_DUST_SIZE, - "Specify (in satoshi) to override the (dust) amount of BTC used for each (bare) multisig output", + "Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output", ), "op_return_value": ( int, @@ -991,12 +991,12 @@ def get_dust_return_pubkey(source, provided_pubkeys, encoding): "fee": ( int, None, - "If you'd like to specify a custom miners' fee, specify it here (in satoshi). Leave as default for the server to automatically choose", + "If you'd like to specify a custom miners' fee, specify it here (in satoshis). Leave as default for the server to automatically choose", ), "fee_provided": ( int, 0, - "If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshi). This differs from fee in that this is an upper bound value, which fee is an exact value", + "If you would like to specify a maximum fee (up to and including which may be used as the transaction fee), specify it here (in satoshis). This differs from fee in that this is an upper bound value, which fee is an exact value", ), "unspent_tx_hash": ( str, @@ -1011,7 +1011,7 @@ def get_dust_return_pubkey(source, provided_pubkeys, encoding): "disable_utxo_locks": ( bool, False, - "By default, UTXO's utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs", + "By default, UTXOs utilized when creating a transaction are 'locked' for a few seconds, to prevent a case where rapidly generating create_ calls reuse UTXOs due to their spent status not being updated in bitcoind yet. Specify true for this parameter to disable this behavior, and not temporarily lock UTXOs", ), "extended_tx_info": ( bool, @@ -1023,7 +1023,6 @@ def get_dust_return_pubkey(source, provided_pubkeys, encoding): None, "The previous transaction txid for a two part P2SH message. This txid must be taken from the signed transaction", ), - "old_style_api": (bool, True, "Use the old style API"), "segwit": (bool, False, "Use segwit"), } diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index f4b6109fd6..8800ddc6a6 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -64,7 +64,7 @@ def gen_groups_toc(): if TARGET == "docusaurus": md = """--- -title: REST API V2 +title: ReST API V2 --- """ @@ -143,6 +143,9 @@ def gen_groups_toc(): blueprint_path = path.replace("<", "{").replace(">", "}").replace("int:", "") title = " ".join([part.capitalize() for part in str(route["function"].__name__).split("_")]) + title = title.replace("Pubkeyhash", "PubKeyHash") + title = title.replace("Mpma", "MPMA") + title = title.replace("Btcpay", "BTCPay") md += f"\n### {title} " if TARGET == "docusaurus": md += f"[GET `{blueprint_path}`]\n\n" diff --git a/release-notes/release-notes-v10.1.2.md b/release-notes/release-notes-v10.1.2.md index d54c75b652..14afd14532 100644 --- a/release-notes/release-notes-v10.1.2.md +++ b/release-notes/release-notes-v10.1.2.md @@ -16,7 +16,7 @@ To easily migrate to the new API, an equivalence table is available in the docum * Fix logging of some raw tracebacks (#1715) ## Codebase -* New REST API +* New ReST API ## Command-Line Interface From f175dd01634bf61f2f34b7fdf1a6bc67172cfd8d Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 26 Apr 2024 10:16:39 +0200 Subject: [PATCH 129/280] more tweaks and typos --- apiary.apib | 340 +++++++++--------- .../counterpartycore/lib/api/routes.py | 6 +- .../counterpartycore/lib/api/util.py | 2 +- .../counterpartycore/lib/ledger.py | 6 +- counterparty-core/tools/genapidoc.py | 8 +- 5 files changed, 183 insertions(+), 179 deletions(-) diff --git a/apiary.apib b/apiary.apib index 788168c19c..cbed6f4f77 100644 --- a/apiary.apib +++ b/apiary.apib @@ -68,9 +68,9 @@ Returns server information and the list of documented routes in JSON format. Returns the list of the last ten blocks + Parameters - + last: `840000` (int, optional) - The index of the most recent block to return + + last: `840000` (int, optional) - The index of the most recent block to return + Default: `None` - + limit: `2` (int, optional) - The number of blocks to return + + limit: `2` (int, optional) - The number of blocks to return + Default: `10` + Response 200 (application/json) @@ -107,7 +107,7 @@ Returns the list of the last ten blocks Return the information of a block + Parameters - + block_index: `840464` (int, required) - The index of the block to return + + block_index: `840464` (int, required) - The index of the block to return + Response 200 (application/json) @@ -131,7 +131,7 @@ Return the information of a block Returns the transactions of a block + Parameters - + block_index: `840464` (int, required) - The index of the block to return + + block_index: `840464` (int, required) - The index of the block to return + Response 200 (application/json) @@ -160,7 +160,7 @@ Returns the transactions of a block Returns the events of a block + Parameters - + block_index: `840464` (int, required) - The index of the block to return + + block_index: `840464` (int, required) - The index of the block to return + Response 200 (application/json) @@ -298,7 +298,7 @@ Returns the events of a block Returns the event counts of a block + Parameters - + block_index: `840464` (int, required) - The index of the block to return + + block_index: `840464` (int, required) - The index of the block to return + Response 200 (application/json) @@ -346,8 +346,8 @@ Returns the event counts of a block Returns the events of a block filtered by event + Parameters - + block_index: `840464` (int, required) - The index of the block to return - + event: `CREDIT` (str, required) - The event to filter by + + block_index: `840464` (int, required) - The index of the block to return + + event: `CREDIT` (str, required) - The event to filter by + Response 200 (application/json) @@ -378,7 +378,7 @@ Returns the events of a block filtered by event Returns the credits of a block + Parameters - + block_index: `840464` (int, required) - The index of the block to return + + block_index: `840464` (int, required) - The index of the block to return + Response 200 (application/json) @@ -403,7 +403,7 @@ Returns the credits of a block Returns the debits of a block + Parameters - + block_index: `840464` (int, required) - The index of the block to return + + block_index: `840464` (int, required) - The index of the block to return + Response 200 (application/json) @@ -428,7 +428,7 @@ Returns the debits of a block Returns the expirations of a block + Parameters - + block_index: `840356` (int, required) - The index of the block to return + + block_index: `840356` (int, required) - The index of the block to return + Response 200 (application/json) @@ -452,7 +452,7 @@ Returns the expirations of a block Returns the cancels of a block + Parameters - + block_index: `839746` (int, required) - The index of the block to return + + block_index: `839746` (int, required) - The index of the block to return + Response 200 (application/json) @@ -484,7 +484,7 @@ Returns the cancels of a block Returns the destructions of a block + Parameters - + block_index: `839988` (int, required) - The index of the block to return + + block_index: `839988` (int, required) - The index of the block to return + Response 200 (application/json) @@ -510,7 +510,7 @@ Returns the destructions of a block Returns the issuances of a block + Parameters - + block_index: `840464` (int, required) - The index of the block to return + + block_index: `840464` (int, required) - The index of the block to return + Response 200 (application/json) @@ -542,15 +542,15 @@ Returns the issuances of a block } ``` -### Get Sends Or Receives By Block [GET /blocks/{block_index}/sends{?limit}{?offset}] +### Get Sends By Block [GET /blocks/{block_index}/sends{?limit}{?offset}] Returns the sends of a block + Parameters - + block_index: `840459` (int, required) - The index of the block to return - + limit (int, optional) - + + block_index: `840459` (int, required) - The index of the block to return + + limit: `5` (int, optional) - The maximum number of sends to return + Default: `100` - + offset (int, optional) - + + offset: `0` (int, optional) - The offset of the sends to return + Default: `0` + Response 200 (application/json) @@ -579,7 +579,7 @@ Returns the sends of a block Returns the dispenses of a block + Parameters - + block_index: `840322` (int, required) - The index of the block to return + + block_index: `840322` (int, required) - The index of the block to return + Response 200 (application/json) @@ -606,7 +606,7 @@ Returns the dispenses of a block Returns the sweeps of a block + Parameters - + block_index: `836519` (int, required) - The index of the block to return + + block_index: `836519` (int, required) - The index of the block to return + Response 200 (application/json) @@ -646,7 +646,7 @@ Returns the sweeps of a block Returns Counterparty information from a raw transaction in hex format. + Parameters - + rawtransaction: `01000000017828697743c03aef6a3a8ba54b22bf579ffcab8161faf20e7b20c4ecd75cc986010000006b483045022100d1bd0531bb1ed2dd2cbf77d6933273e792a3dbfa84327d419169850ddd5976f502205d1ab0f7bcbf1a0cc183f0520c9aa8f711d41cb790c0c4ac39da6da4a093d798012103d3b1f711e907acb556e239f6cafb6a4f7fe40d8dd809b0e06e739c2afd73f202ffffffff0200000000000000004d6a4bf29880b93b0711524c7ef9c76835752088db8bd4113a3daf41fc45ffdc8867ebdbf26817fae377696f36790e52f51005806e9399a427172fedf348cf798ed86e548002ee96909eef0775ec3c2b0100000000001976a91443434cf159cc585fbd74daa9c4b833235b19761b88ac00000000` (str, required) - Raw transaction in hex format + + rawtransaction: `01000000017828697743c03aef6a3a8ba54b22bf579ffcab8161faf20e7b20c4ecd75cc986010000006b483045022100d1bd0531bb1ed2dd2cbf77d6933273e792a3dbfa84327d419169850ddd5976f502205d1ab0f7bcbf1a0cc183f0520c9aa8f711d41cb790c0c4ac39da6da4a093d798012103d3b1f711e907acb556e239f6cafb6a4f7fe40d8dd809b0e06e739c2afd73f202ffffffff0200000000000000004d6a4bf29880b93b0711524c7ef9c76835752088db8bd4113a3daf41fc45ffdc8867ebdbf26817fae377696f36790e52f51005806e9399a427172fedf348cf798ed86e548002ee96909eef0775ec3c2b0100000000001976a91443434cf159cc585fbd74daa9c4b833235b19761b88ac00000000` (str, required) - Raw transaction in hex format + block_index (int, optional) - Block index mandatory for transactions before block 335000 + Default: `None` @@ -687,7 +687,7 @@ Returns Counterparty information from a raw transaction in hex format. Unpacks Counterparty data in hex format and returns the message type and data. + Parameters - + datahex: `16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245` (str, required) - Data in hex format + + datahex: `16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245` (str, required) - Data in hex format + block_index (int, optional) - Block index of the transaction containing this data + Default: `None` @@ -721,7 +721,7 @@ Unpacks Counterparty data in hex format and returns the message type and data. Returns a transaction by its hash. + Parameters - + tx_hash: `876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5` (str, required) - The hash of the transaction + + tx_hash: `876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5` (str, required) - The hash of the transaction + Response 200 (application/json) @@ -768,7 +768,7 @@ Returns a transaction by its hash. Returns the balances of an address + Parameters - + address: `1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs` (str, required) - The address to return + + address: `1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs` (str, required) - The address to return + Response 200 (application/json) @@ -789,8 +789,8 @@ Returns the balances of an address Returns the balance of an address and asset + Parameters - + address: `1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs` (str, required) - The address to return - + asset: `XCP` (str, required) - The asset to return + + address: `1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs` (str, required) - The address to return + + asset: `XCP` (str, required) - The asset to return + Response 200 (application/json) @@ -809,10 +809,10 @@ Returns the balance of an address and asset Returns the credits of an address + Parameters - + address: `1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs` (str, required) - The address to return - + limit: `5` (int, optional) - The maximum number of credits to return + + address: `1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs` (str, required) - The address to return + + limit: `5` (int, optional) - The maximum number of credits to return + Default: `100` - + offset: `0` (int, optional) - The offset of the credits to return + + offset: `0` (int, optional) - The offset of the credits to return + Default: `0` + Response 200 (application/json) @@ -838,10 +838,10 @@ Returns the credits of an address Returns the debits of an address + Parameters - + address: `bc1q7787j6msqczs58asdtetchl3zwe8ruj57p9r9y` (str, required) - The address to return - + limit: `5` (int, optional) - The maximum number of debits to return + + address: `bc1q7787j6msqczs58asdtetchl3zwe8ruj57p9r9y` (str, required) - The address to return + + limit: `5` (int, optional) - The maximum number of debits to return + Default: `100` - + offset: `0` (int, optional) - The offset of the debits to return + + offset: `0` (int, optional) - The offset of the debits to return + Default: `0` + Response 200 (application/json) @@ -876,8 +876,8 @@ Returns the debits of an address Returns the bets of a feed + Parameters - + address: `1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk` (str, required) - The address of the feed - + status: `filled` (str, optional) - The status of the bet + + address: `1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk` (str, required) - The address of the feed + + status: `filled` (str, optional) - The status of the bet + Default: `open` + Response 200 (application/json) @@ -932,10 +932,10 @@ Returns the bets of a feed Returns the broadcasts of a source + Parameters - + address: `1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk` (str, required) - The address to return - + status: `valid` (str, optional) - The status of the broadcasts to return + + address: `1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk` (str, required) - The address to return + + status: `valid` (str, optional) - The status of the broadcasts to return + Default: `valid` - + order_by: `ASC` (str, optional) - The order of the broadcasts to return + + order_by: `ASC` (str, optional) - The order of the broadcasts to return + Default: `DESC` + Response 200 (application/json) @@ -976,7 +976,7 @@ Returns the broadcasts of a source Returns the burns of an address + Parameters - + address: `1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W` (str, required) - The address to return + + address: `1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W` (str, required) - The address to return + Response 200 (application/json) @@ -1001,10 +1001,10 @@ Returns the burns of an address Returns the sends of an address + Parameters - + address: `1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W` (str, required) - The address to return - + limit: `5` (int, optional) - The maximum number of sends to return + + address: `1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W` (str, required) - The address to return + + limit: `5` (int, optional) - The maximum number of sends to return + Default: `100` - + offset: `0` (int, optional) - The offset of the sends to return + + offset: `0` (int, optional) - The offset of the sends to return + Default: `0` + Response 200 (application/json) @@ -1033,10 +1033,10 @@ Returns the sends of an address Returns the receives of an address + Parameters - + address: `1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs` (str, required) - The address to return - + limit: `5` (int, optional) - The maximum number of receives to return + + address: `1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs` (str, required) - The address to return + + limit: `5` (int, optional) - The maximum number of receives to return + Default: `100` - + offset: `0` (int, optional) - The offset of the receives to return + + offset: `0` (int, optional) - The offset of the receives to return + Default: `0` + Response 200 (application/json) @@ -1065,8 +1065,8 @@ Returns the receives of an address Returns the sends of an address and asset + Parameters - + address: `1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W` (str, required) - The address to return - + asset: `XCP` (str, required) - The asset to return + + address: `1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W` (str, required) - The address to return + + asset: `XCP` (str, required) - The asset to return + Response 200 (application/json) @@ -1094,11 +1094,11 @@ Returns the sends of an address and asset Returns the receives of an address and asset + Parameters - + address: `1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs` (str, required) - The address to return - + asset: `XCP` (str, required) - The asset to return - + limit: `5` (int, optional) - The maximum number of receives to return + + address: `1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs` (str, required) - The address to return + + asset: `XCP` (str, required) - The asset to return + + limit: `5` (int, optional) - The maximum number of receives to return + Default: `100` - + offset: `0` (int, optional) - The offset of the receives to return + + offset: `0` (int, optional) - The offset of the receives to return + Default: `0` + Response 200 (application/json) @@ -1127,7 +1127,7 @@ Returns the receives of an address and asset Returns the dispensers of an address + Parameters - + address: `bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz` (str, required) - The address to return + + address: `bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz` (str, required) - The address to return + status (int, optional) - + Default: `0` @@ -1161,8 +1161,8 @@ Returns the dispensers of an address Returns the dispensers of an address and an asset + Parameters - + address: `bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz` (str, required) - The address to return - + asset: `ERYKAHPEPU` (str, required) - The asset to return + + address: `bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz` (str, required) - The address to return + + asset: `ERYKAHPEPU` (str, required) - The asset to return + status (int, optional) - + Default: `0` @@ -1196,7 +1196,7 @@ Returns the dispensers of an address and an asset Returns the sweeps of an address + Parameters - + address: `18szqTVJUWwYrtRHq98Wn4DhCGGiy3jZ87` (str, required) - The address to return + + address: `18szqTVJUWwYrtRHq98Wn4DhCGGiy3jZ87` (str, required) - The address to return + Response 200 (application/json) @@ -1223,16 +1223,16 @@ Returns the sweeps of an address Composes a transaction to issue a bet against a feed. + Parameters - + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will make the bet - + feed_address: `1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev` (str, required) - The address that hosts the feed to be bet on - + bet_type: `2` (int, required) - Bet 0 for Bullish CFD (deprecated), 1 for Bearish CFD (deprecated), 2 for Equal, 3 for NotEqual - + deadline: `3000000000` (int, required) - The time at which the bet should be decided/settled, in Unix time (seconds since epoch) - + wager_quantity: `1000` (int, required) - The quantities of XCP to wager (in satoshis, hence integer) - + counterwager_quantity: `1000` (int, required) - The minimum quantities of XCP to be wagered against, for the bets to match - + expiration: `100` (int, required) - The number of blocks after which the bet expires if it remains unmatched + + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will make the bet + + feed_address: `1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev` (str, required) - The address that hosts the feed to be bet on + + bet_type: `2` (int, required) - Bet 0 for Bullish CFD (deprecated), 1 for Bearish CFD (deprecated), 2 for Equal, 3 for NotEqual + + deadline: `3000000000` (int, required) - The time at which the bet should be decided/settled, in Unix time (seconds since epoch) + + wager_quantity: `1000` (int, required) - The quantities of XCP to wager (in satoshis, hence integer) + + counterwager_quantity: `1000` (int, required) - The minimum quantities of XCP to be wagered against, for the bets to match + + expiration: `100` (int, required) - The number of blocks after which the bet expires if it remains unmatched + leverage (int, optional) - Leverage, as a fraction of 5040 + Default: `5040` - + target_value: `1000` (int, optional) - Target value for Equal/NotEqual bet + + target_value: `1000` (int, optional) - Target value for Equal/NotEqual bet + Default: `None` + encoding (str, optional) - The encoding method to use + Default: `auto` @@ -1292,11 +1292,11 @@ Composes a transaction to issue a bet against a feed. Composes a transaction to broadcast textual and numerical information to the network. + Parameters - + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will be sending (must have the necessary quantity of the specified asset) - + timestamp: `4003903983` (int, required) - The timestamp of the broadcast, in Unix time - + value: `100` (float, required) - Numerical value of the broadcast - + fee_fraction: `0.05` (float, required) - How much of every bet on this feed should go to its operator; a fraction of 1, (i.e. 0.05 is five percent) - + text: `"Hello, world!"` (str, required) - The textual part of the broadcast + + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will be sending (must have the necessary quantity of the specified asset) + + timestamp: `4003903983` (int, required) - The timestamp of the broadcast, in Unix time + + value: `100` (float, required) - Numerical value of the broadcast + + fee_fraction: `0.05` (float, required) - How much of every bet on this feed should go to its operator; a fraction of 1, (i.e. 0.05 is five percent) + + text: `"Hello, world!"` (str, required) - The textual part of the broadcast + encoding (str, optional) - The encoding method to use + Default: `auto` + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshis) @@ -1351,8 +1351,8 @@ Composes a transaction to broadcast textual and numerical information to the net Composes a transaction to pay for a BTC order match. + Parameters - + address: `bc1qsteve3tfxfg9pcmvzw645sr9zy7es5rx645p6l` (str, required) - The address that will be sending the payment - + order_match_id: `e470416a9500fb046835192da013f48e6468a07dba1bede4a0b68e666ed23c8d_4953bde3d9417b103615c2d3d4b284d4fcf7cbd820e5dd19ac0084e9ebd090b2` (str, required) - The ID of the order match to pay for + + address: `bc1qsteve3tfxfg9pcmvzw645sr9zy7es5rx645p6l` (str, required) - The address that will be sending the payment + + order_match_id: `e470416a9500fb046835192da013f48e6468a07dba1bede4a0b68e666ed23c8d_4953bde3d9417b103615c2d3d4b284d4fcf7cbd820e5dd19ac0084e9ebd090b2` (str, required) - The ID of the order match to pay for + encoding (str, optional) - The encoding method to use + Default: `auto` + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshis) @@ -1404,8 +1404,8 @@ Composes a transaction to pay for a BTC order match. Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, possible between blocks 278310 and 283810; on testnet it is still available). + Parameters - + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address with the BTC to burn - + quantity: `1000` (int, required) - The quantities of BTC to burn (1 BTC maximum burn per address) + + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address with the BTC to burn + + quantity: `1000` (int, required) - The quantities of BTC to burn (1 BTC maximum burn per address) + overburn (bool, optional) - Whether to allow the burn to exceed 1 BTC for the address + Default: `False` + encoding (str, optional) - The encoding method to use @@ -1460,8 +1460,8 @@ Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, poss Composes a transaction to cancel an open order or bet. + Parameters - + address: `15e15ua6A3FJqjMevtrWcFSzKn9k6bMQeA` (str, required) - The address that placed the order/bet to be cancelled - + offer_hash: `8ce3335391bf71f8f12c0573b4f85b9adc4882a9955d9f8e5ababfdd0060279a` (str, required) - The hash of the order/bet to be cancelled + + address: `15e15ua6A3FJqjMevtrWcFSzKn9k6bMQeA` (str, required) - The address that placed the order/bet to be cancelled + + offer_hash: `8ce3335391bf71f8f12c0573b4f85b9adc4882a9955d9f8e5ababfdd0060279a` (str, required) - The hash of the order/bet to be cancelled + encoding (str, optional) - The encoding method to use + Default: `auto` + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshis) @@ -1513,10 +1513,10 @@ Composes a transaction to cancel an open order or bet. Composes a transaction to destroy a quantity of an asset. + Parameters - + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will be sending the asset to be destroyed - + asset: `XCP` (str, required) - The asset to be destroyed - + quantity: `1000` (int, required) - The quantity of the asset to be destroyed - + tag: `"bugs!"` (str, required) - A tag for the destruction + + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will be sending the asset to be destroyed + + asset: `XCP` (str, required) - The asset to be destroyed + + quantity: `1000` (int, required) - The quantity of the asset to be destroyed + + tag: `"bugs!"` (str, required) - A tag for the destruction + encoding (str, optional) - The encoding method to use + Default: `auto` + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshis) @@ -1570,12 +1570,12 @@ Composes a transaction to destroy a quantity of an asset. Opens or closes a dispenser for a given asset at a given rate of main chain asset (BTC). Escrowed quantity on open must be equal or greater than give_quantity. It is suggested that you escrow multiples of give_quantity to ease dispenser operation. + Parameters - + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will be dispensing (must have the necessary escrow_quantity of the specified asset) - + asset: `XCP` (str, required) - The asset or subasset to dispense - + give_quantity: `1000` (int, required) - The quantity of the asset to dispense - + escrow_quantity: `1000` (int, required) - The quantity of the asset to reserve for this dispenser - + mainchainrate: `100` (int, required) - The quantity of the main chain asset (BTC) per dispensed portion - + status: `0` (int, required) - The state of the dispenser. 0 for open, 1 for open using open_address, 10 for closed + + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will be dispensing (must have the necessary escrow_quantity of the specified asset) + + asset: `XCP` (str, required) - The asset or subasset to dispense + + give_quantity: `1000` (int, required) - The quantity of the asset to dispense + + escrow_quantity: `1000` (int, required) - The quantity of the asset to reserve for this dispenser + + mainchainrate: `100` (int, required) - The quantity of the main chain asset (BTC) per dispensed portion + + status: `0` (int, required) - The state of the dispenser. 0 for open, 1 for open using open_address, 10 for closed + open_address (str, optional) - The address that you would like to open the dispenser on + Default: `None` + oracle_address (str, optional) - The address that you would like to use as a price oracle for this dispenser @@ -1637,10 +1637,10 @@ Opens or closes a dispenser for a given asset at a given rate of main chain asse Composes a transaction to issue a dividend to holders of a given asset. + Parameters - + address: `1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD` (str, required) - The address that will be issuing the dividend (must have the ownership of the asset which the dividend is being issued on) - + quantity_per_unit: `1` (int, required) - The amount of dividend_asset rewarded - + asset: `PEPECASH` (str, required) - The asset or subasset that the dividends are being rewarded on - + dividend_asset: `XCP` (str, required) - The asset or subasset that the dividends are paid in + + address: `1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD` (str, required) - The address that will be issuing the dividend (must have the ownership of the asset which the dividend is being issued on) + + quantity_per_unit: `1` (int, required) - The amount of dividend_asset rewarded + + asset: `PEPECASH` (str, required) - The asset or subasset that the dividends are being rewarded on + + dividend_asset: `XCP` (str, required) - The asset or subasset that the dividends are paid in + encoding (str, optional) - The encoding method to use + Default: `auto` + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshis) @@ -1694,10 +1694,10 @@ Composes a transaction to issue a dividend to holders of a given asset. Composes a transaction to Issue a new asset, issue more of an existing asset, lock an asset, reset existing supply, or transfer the ownership of an asset. + Parameters - + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will be issuing or transfering the asset - + asset: `XCPTEST` (str, required) - The assets to issue or transfer. This can also be a subasset longname for new subasset issuances - + quantity: `1000` (int, required) - The quantity of the asset to issue (set to 0 if transferring an asset) - + transfer_destination: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, optional) - The address to receive the asset + + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will be issuing or transfering the asset + + asset: `XCPTEST` (str, required) - The assets to issue or transfer. This can also be a subasset longname for new subasset issuances + + quantity: `1000` (int, required) - The quantity of the asset to issue (set to 0 if transferring an asset) + + transfer_destination: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, optional) - The address to receive the asset + Default: `None` + divisible (bool, optional) - Whether this asset is divisible or not (if a transfer, this value must match the value specified when the asset was originally issued) + Default: `True` @@ -1764,12 +1764,12 @@ Composes a transaction to Issue a new asset, issue more of an existing asset, lo Composes a transaction to send multiple payments to multiple addresses. + Parameters - + address: `1Fv87qmdtjQDP9d4p9E5ncBQvYB4a3Rhy6` (str, required) - The address that will be sending (must have the necessary quantity of the specified asset) - + assets: `BAABAABLKSHP,BADHAIRDAY,BADWOJAK` (str, required) - comma-separated list of assets to send - + destinations: `1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev,1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD,1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs` (str, required) - comma-separated list of addresses to send to - + quantities: `1,2,3` (str, required) - comma-separated list of quantities to send - + memo: `"Hello, world!"` (str, required) - The Memo associated with this transaction - + memo_is_hex: `False` (bool, required) - Whether the memo field is a hexadecimal string + + address: `1Fv87qmdtjQDP9d4p9E5ncBQvYB4a3Rhy6` (str, required) - The address that will be sending (must have the necessary quantity of the specified asset) + + assets: `BAABAABLKSHP,BADHAIRDAY,BADWOJAK` (str, required) - comma-separated list of assets to send + + destinations: `1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev,1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD,1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs` (str, required) - comma-separated list of addresses to send to + + quantities: `1,2,3` (str, required) - comma-separated list of quantities to send + + memo: `"Hello, world!"` (str, required) - The Memo associated with this transaction + + memo_is_hex: `False` (bool, required) - Whether the memo field is a hexadecimal string + encoding (str, optional) - The encoding method to use + Default: `auto` + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshis) @@ -1839,13 +1839,13 @@ Composes a transaction to send multiple payments to multiple addresses. Composes a transaction to place an order on the distributed exchange. + Parameters - + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will be issuing the order request (must have the necessary quantity of the specified asset to give) - + give_asset: `XCP` (str, required) - The asset that will be given in the trade - + give_quantity: `1000` (int, required) - The quantity of the asset that will be given - + get_asset: `PEPECASH` (str, required) - The asset that will be received in the trade - + get_quantity: `1000` (int, required) - The quantity of the asset that will be received - + expiration: `100` (int, required) - The number of blocks for which the order should be valid - + fee_required: `100` (int, required) - The miners’ fee required to be paid by orders for them to match this one; in BTC; required only if buying BTC (may be zero, though) + + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will be issuing the order request (must have the necessary quantity of the specified asset to give) + + give_asset: `XCP` (str, required) - The asset that will be given in the trade + + give_quantity: `1000` (int, required) - The quantity of the asset that will be given + + get_asset: `PEPECASH` (str, required) - The asset that will be received in the trade + + get_quantity: `1000` (int, required) - The quantity of the asset that will be received + + expiration: `100` (int, required) - The number of blocks for which the order should be valid + + fee_required: `100` (int, required) - The miners’ fee required to be paid by orders for them to match this one; in BTC; required only if buying BTC (may be zero, though) + encoding (str, optional) - The encoding method to use + Default: `auto` + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshis) @@ -1902,10 +1902,10 @@ Composes a transaction to place an order on the distributed exchange. Composes a transaction to send a quantity of an asset to another address. + Parameters - + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will be sending (must have the necessary quantity of the specified asset) - + destination: `1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev` (str, required) - The address that will be receiving the asset - + asset: `XCP` (str, required) - The asset or subasset to send - + quantity: `1000` (int, required) - The quantity of the asset to send + + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will be sending (must have the necessary quantity of the specified asset) + + destination: `1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev` (str, required) - The address that will be receiving the asset + + asset: `XCP` (str, required) - The asset or subasset to send + + quantity: `1000` (int, required) - The quantity of the asset to send + memo (str, optional) - The Memo associated with this transaction + Default: `None` + memo_is_hex (bool, optional) - Whether the memo field is a hexadecimal string @@ -1968,10 +1968,10 @@ Composes a transaction to send a quantity of an asset to another address. Composes a transaction to Sends all assets and/or transfer ownerships to a destination address. + Parameters - + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will be sending - + destination: `1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev` (str, required) - The address to receive the assets and/or ownerships - + flags: `7` (int, required) - An OR mask of flags indicating how the sweep should be processed. Possible flags are: - FLAG_BALANCES: (integer) 1, specifies that all balances should be transferred. - FLAG_OWNERSHIP: (integer) 2, specifies that all ownerships should be transferred. - FLAG_BINARY_MEMO: (integer) 4, specifies that the memo is in binary/hex form. - + memo: `FFFF` (str, required) - The Memo associated with this transaction in hex format + + address: `1CounterpartyXXXXXXXXXXXXXXXUWLpVr` (str, required) - The address that will be sending + + destination: `1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev` (str, required) - The address to receive the assets and/or ownerships + + flags: `7` (int, required) - An OR mask of flags indicating how the sweep should be processed. Possible flags are: - FLAG_BALANCES: (integer) 1, specifies that all balances should be transferred. - FLAG_OWNERSHIP: (integer) 2, specifies that all ownerships should be transferred. - FLAG_BINARY_MEMO: (integer) 4, specifies that the memo is in binary/hex form. + + memo: `FFFF` (str, required) - The Memo associated with this transaction in hex format + encoding (str, optional) - The encoding method to use + Default: `auto` + fee_per_kb (int, optional) - The fee per kilobyte of transaction data constant that the server uses when deciding on the dynamic fee to use (in satoshis) @@ -2027,9 +2027,9 @@ Composes a transaction to Sends all assets and/or transfer ownerships to a desti Returns the valid assets + Parameters - + offset: `0` (int, optional) - The offset of the assets to return + + offset: `0` (int, optional) - The offset of the assets to return + Default: `0` - + limit: `5` (int, optional) - The limit of the assets to return + + limit: `5` (int, optional) - The limit of the assets to return + Default: `100` + Response 200 (application/json) @@ -2066,7 +2066,7 @@ Returns the valid assets Returns the asset information + Parameters - + asset: `UNNEGOTIABLE` (str, required) - The asset to return + + asset: `UNNEGOTIABLE` (str, required) - The asset to return + Response 200 (application/json) @@ -2091,8 +2091,8 @@ Returns the asset information Returns the asset balances + Parameters - + asset: `UNNEGOTIABLE` (str, required) - The asset to return - + exclude_zero_balances: `True` (bool, optional) - Whether to exclude zero balances + + asset: `UNNEGOTIABLE` (str, required) - The asset to return + + exclude_zero_balances: `True` (bool, optional) - Whether to exclude zero balances + Default: `True` + Response 200 (application/json) @@ -2114,8 +2114,8 @@ Returns the asset balances Returns the balance of an address and asset + Parameters - + address: `1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs` (str, required) - The address to return - + asset: `XCP` (str, required) - The asset to return + + address: `1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs` (str, required) - The address to return + + asset: `XCP` (str, required) - The asset to return + Response 200 (application/json) @@ -2134,8 +2134,8 @@ Returns the balance of an address and asset Returns the orders of an asset + Parameters - + asset: `NEEDPEPE` (str, required) - The asset to return - + status: `filled` (str, optional) - The status of the orders to return + + asset: `NEEDPEPE` (str, required) - The asset to return + + status: `filled` (str, optional) - The status of the orders to return + Default: `open` + Response 200 (application/json) @@ -2361,10 +2361,10 @@ Returns the orders of an asset Returns the credits of an asset + Parameters - + asset: `UNNEGOTIABLE` (str, required) - The asset to return - + limit: `5` (int, optional) - The maximum number of credits to return + + asset: `UNNEGOTIABLE` (str, required) - The asset to return + + limit: `5` (int, optional) - The maximum number of credits to return + Default: `100` - + offset: `0` (int, optional) - The offset of the credits to return + + offset: `0` (int, optional) - The offset of the credits to return + Default: `0` + Response 200 (application/json) @@ -2390,10 +2390,10 @@ Returns the credits of an asset Returns the debits of an asset + Parameters - + asset: `XCP` (str, required) - The asset to return - + limit: `5` (int, optional) - The maximum number of debits to return + + asset: `XCP` (str, required) - The asset to return + + limit: `5` (int, optional) - The maximum number of debits to return + Default: `100` - + offset: `0` (int, optional) - The offset of the debits to return + + offset: `0` (int, optional) - The offset of the debits to return + Default: `0` + Response 200 (application/json) @@ -2455,7 +2455,7 @@ Returns the debits of an asset Returns the dividends of an asset + Parameters - + asset: `GMONEYPEPE` (str, required) - The asset to return + + asset: `GMONEYPEPE` (str, required) - The asset to return + Response 200 (application/json) @@ -2603,7 +2603,7 @@ Returns the dividends of an asset Returns the issuances of an asset + Parameters - + asset: `UNNEGOTIABLE` (str, required) - The asset to return + + asset: `UNNEGOTIABLE` (str, required) - The asset to return + Response 200 (application/json) @@ -2635,15 +2635,15 @@ Returns the issuances of an asset } ``` -### Get Sends Or Receives By Asset [GET /assets/{asset}/sends{?limit}{?offset}] +### Get Sends By Asset [GET /assets/{asset}/sends{?limit}{?offset}] Returns the sends of an asset + Parameters - + asset: `XCP` (str, required) - The asset to return - + limit: `5` (int, optional) - The maximum number of sends to return + + asset: `XCP` (str, required) - The asset to return + + limit: `5` (int, optional) - The maximum number of sends to return + Default: `100` - + offset: `0` (int, optional) - The offset of the sends to return + + offset: `0` (int, optional) - The offset of the sends to return + Default: `0` + Response 200 (application/json) @@ -2720,7 +2720,7 @@ Returns the sends of an asset Returns the dispensers of an asset + Parameters - + asset: `ERYKAHPEPU` (str, required) - The asset to return + + asset: `ERYKAHPEPU` (str, required) - The asset to return + status (int, optional) - + Default: `0` @@ -2754,8 +2754,8 @@ Returns the dispensers of an asset Returns the dispensers of an address and an asset + Parameters - + address: `bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz` (str, required) - The address to return - + asset: `ERYKAHPEPU` (str, required) - The asset to return + + address: `bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz` (str, required) - The address to return + + asset: `ERYKAHPEPU` (str, required) - The asset to return + status (int, optional) - + Default: `0` @@ -2789,7 +2789,7 @@ Returns the dispensers of an address and an asset Returns the holders of an asset + Parameters - + asset: `ERYKAHPEPU` (str, required) - The asset to return + + asset: `ERYKAHPEPU` (str, required) - The asset to return + Response 200 (application/json) @@ -2847,7 +2847,7 @@ Returns the holders of an asset Returns the information of an order + Parameters - + order_hash: `23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776` (str, required) - The hash of the transaction that created the order + + order_hash: `23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776` (str, required) - The hash of the transaction that created the order + Response 200 (application/json) @@ -2882,8 +2882,8 @@ Returns the information of an order Returns the order matches of an order + Parameters - + order_hash: `5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947` (str, required) - The hash of the transaction that created the order - + status: `completed` (str, optional) - The status of the order matches to return + + order_hash: `5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947` (str, required) - The hash of the transaction that created the order + + status: `completed` (str, optional) - The status of the order matches to return + Default: `pending` + Response 200 (application/json) @@ -2921,7 +2921,7 @@ Returns the order matches of an order Returns the BTC pays of an order + Parameters - + order_hash: `299b5b648f54eacb839f3487232d49aea373cdd681b706d4cc0b5e0b03688db4` (str, required) - The hash of the transaction that created the order + + order_hash: `299b5b648f54eacb839f3487232d49aea373cdd681b706d4cc0b5e0b03688db4` (str, required) - The hash of the transaction that created the order + Response 200 (application/json) @@ -2949,7 +2949,7 @@ Returns the BTC pays of an order Returns the information of a bet + Parameters - + bet_hash: `5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed` (str, required) - The hash of the transaction that created the bet + + bet_hash: `5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed` (str, required) - The hash of the transaction that created the bet + Response 200 (application/json) @@ -2984,8 +2984,8 @@ Returns the information of a bet Returns the bet matches of a bet + Parameters - + bet_hash: `5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed` (str, required) - The hash of the transaction that created the bet - + status: `expired` (str, optional) - The status of the bet matches + + bet_hash: `5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed` (str, required) - The hash of the transaction that created the bet + + status: `expired` (str, optional) - The status of the bet matches + Default: `pending` + Response 200 (application/json) @@ -3028,7 +3028,7 @@ Returns the bet matches of a bet Returns the resolutions of a bet + Parameters - + bet_hash: `36bbbb7dbd85054dac140a8ad8204eda2ee859545528bd2a9da69ad77c277ace` (str, required) - The hash of the transaction that created the bet + + bet_hash: `36bbbb7dbd85054dac140a8ad8204eda2ee859545528bd2a9da69ad77c277ace` (str, required) - The hash of the transaction that created the bet + Response 200 (application/json) @@ -3057,11 +3057,11 @@ Returns the resolutions of a bet Returns the burns + Parameters - + status: `valid` (str, optional) - The status of the burns to return + + status: `valid` (str, optional) - The status of the burns to return + Default: `valid` - + offset: `10` (int, optional) - The offset of the burns to return + + offset: `10` (int, optional) - The offset of the burns to return + Default: `0` - + limit: `5` (int, optional) - The limit of the burns to return + + limit: `5` (int, optional) - The limit of the burns to return + Default: `100` + Response 200 (application/json) @@ -3125,7 +3125,7 @@ Returns the burns Returns the dispenser information by tx_hash + Parameters - + dispenser_hash: `753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a` (str, required) - The hash of the dispenser to return + + dispenser_hash: `753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a` (str, required) - The hash of the dispenser to return + Response 200 (application/json) @@ -3158,7 +3158,7 @@ Returns the dispenser information by tx_hash Returns the dispenses of a dispenser + Parameters - + dispenser_hash: `753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a` (str, required) - The hash of the dispenser to return + + dispenser_hash: `753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a` (str, required) - The hash of the dispenser to return + Response 200 (application/json) @@ -3198,9 +3198,9 @@ Returns the dispenses of a dispenser Returns all events + Parameters - + last: `10665092` (int, optional) - The last event index to return + + last: `10665092` (int, optional) - The last event index to return + Default: `None` - + limit: `5` (int, optional) - The maximum number of events to return + + limit: `5` (int, optional) - The maximum number of events to return + Default: `100` + Response 200 (application/json) @@ -3286,7 +3286,7 @@ Returns all events Returns the event of an index + Parameters - + event_index: `10665092` (int, required) - The index of the event to return + + event_index: `10665092` (int, required) - The index of the event to return + Response 200 (application/json) @@ -3513,10 +3513,10 @@ Returns the event counts of all blocks Returns the events filtered by event name + Parameters - + event: `CREDIT` (str, required) - The event to return - + last: `10665092` (int, optional) - The last event index to return + + event: `CREDIT` (str, required) - The event to return + + last: `10665092` (int, optional) - The last event index to return + Default: `None` - + limit: `5` (int, optional) - The maximum number of events to return + + limit: `5` (int, optional) - The maximum number of events to return + Default: `100` + Response 200 (application/json) @@ -3603,14 +3603,14 @@ Returns the events filtered by event name } ``` -## Group Healthz +## Group Z-pages -### Check Server Status [GET /healthz{?check_type}] +### Check Server Health [GET /healthz{?check_type}] Health check route. + Parameters - + check_type: `light` (str, optional) - Type of health check to perform. Options are 'light' and 'heavy' + + check_type: `light` (str, optional) - Type of health check to perform. Options are 'light' and 'heavy' + Default: `heavy` + Response 200 (application/json) @@ -3630,10 +3630,10 @@ Health check route. Returns all transactions involving a given address + Parameters - + address: `14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS` (str, required) - The address to search for - + unconfirmed: `True` (bool, optional) - Include unconfirmed transactions + + address: `14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS` (str, required) - The address to search for + + unconfirmed: `True` (bool, optional) - Include unconfirmed transactions + Default: `True` - + only_tx_hashes: `True` (bool, optional) - Return only the tx hashes + + only_tx_hashes: `True` (bool, optional) - Return only the tx hashes + Default: `False` + Response 200 (application/json) @@ -3686,7 +3686,7 @@ Returns all transactions involving a given address Get the oldest transaction for an address. + Parameters - + address: `14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS` (str, required) - The address to search for. + + address: `14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS` (str, required) - The address to search for. + block_index (int, optional) - The block index to search from. + Default: `None` @@ -3706,7 +3706,7 @@ Get the oldest transaction for an address. Returns a list of unspent outputs for a specific address + Parameters - + address: `14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS` (str, required) - The address to search for + + address: `14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS` (str, required) - The address to search for + unconfirmed (bool, optional) - Include unconfirmed transactions + Default: `False` + unspent_tx_hash (str, optional) - Filter by unspent_tx_hash @@ -3806,7 +3806,7 @@ Returns a list of unspent outputs for a specific address Get pubkey for an address. + Parameters - + address: `14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS` (str, required) - Address to get pubkey for. + + address: `14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS` (str, required) - Address to get pubkey for. + provided_pubkeys (str, optional) - Comma separated list of provided pubkeys. + Default: `None` @@ -3823,8 +3823,8 @@ Get pubkey for an address. Get a transaction from the blockchain + Parameters - + tx_hash: `3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018` (str, required) - The transaction hash - + verbose: `True` (bool, optional) - Whether to return JSON output or raw hex + + tx_hash: `3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018` (str, required) - The transaction hash + + verbose: `True` (bool, optional) - Whether to return JSON output or raw hex + Default: `False` + Response 200 (application/json) @@ -3881,9 +3881,9 @@ Get a transaction from the blockchain Get the fee per kilobyte for a transaction to be confirmed in `conf_target` blocks. + Parameters - + conf_target: `2` (int, optional) - Confirmation target in blocks (1 - 1008) + + conf_target: `2` (int, optional) - Confirmation target in blocks (1 - 1008) + Default: `3` - + mode: `CONSERVATIVE` (str, optional) - The fee estimate mode. + + mode: `CONSERVATIVE` (str, optional) - The fee estimate mode. + Default: `CONSERVATIVE` + Response 200 (application/json) @@ -3953,7 +3953,7 @@ Returns all mempool events Returns the mempool events filtered by event name + Parameters - + event: `OPEN_ORDER` (str, required) - The event to return + + event: `OPEN_ORDER` (str, required) - The event to return + Response 200 (application/json) diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index 1488c7e800..6141db227d 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -21,7 +21,7 @@ "/blocks//cancels": ledger.get_cancels, "/blocks//destructions": ledger.get_destructions, "/blocks//issuances": ledger.get_issuances_by_block, - "/blocks//sends": ledger.get_sends_or_receives_by_block, + "/blocks//sends": ledger.get_sends_by_block, "/blocks//dispenses": ledger.get_dispenses_by_block, "/blocks//sweeps": ledger.get_sweeps_by_block, ### /transactions ### @@ -67,7 +67,7 @@ "/assets//debits": ledger.get_debits_by_asset, "/assets//dividends": ledger.get_dividends, "/assets//issuances": ledger.get_issuances_by_asset, - "/assets//sends": ledger.get_sends_or_receives_by_asset, + "/assets//sends": ledger.get_sends_by_asset, "/assets//dispensers": ledger.get_dispensers_by_asset, "/assets//dispensers/
": ledger.get_dispensers_by_address_and_asset, "/assets//holders": ledger.get_asset_holders, @@ -90,7 +90,7 @@ "/events/counts": ledger.get_all_events_counts, "/events/": ledger.get_events_by_name, ### /healthz ### - "/healthz": util.check_server_status, + "/healthz": util.check_server_health, ### /bitcoin ### "/bitcoin/addresses/
/transactions": backend.get_transactions_by_address, "/bitcoin/addresses/
/transactions/oldest": backend.get_oldest_transaction_by_address, diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index c95016ca9d..3692993889 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -67,7 +67,7 @@ def handle_healthz_route(db, check_type: str = "heavy"): return flask.Response(to_json(result), code, mimetype="application/json") -def check_server_status(db, check_type: str = "heavy"): +def check_server_health(db, check_type: str = "heavy"): """ Health check route. :param check_type: Type of health check to perform. Options are 'light' and 'heavy' (e.g. light) diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index f6fb562887..585925d4a6 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -639,15 +639,17 @@ def get_sends_or_receives( return cursor.fetchall() -def get_sends_or_receives_by_block(db, block_index: int, limit: int = 100, offset: int = 0): +def get_sends_by_block(db, block_index: int, limit: int = 100, offset: int = 0): """ Returns the sends of a block :param int block_index: The index of the block to return (e.g. 840459) + :param int limit: The maximum number of sends to return (e.g. 5) + :param int offset: The offset of the sends to return (e.g. 0) """ return get_sends_or_receives(db, block_index=block_index, limit=limit, offset=offset) -def get_sends_or_receives_by_asset(db, asset: str, limit: int = 100, offset: int = 0): +def get_sends_by_asset(db, asset: str, limit: int = 100, offset: int = 0): """ Returns the sends of an asset :param str asset: The asset to return (e.g. XCP) diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index 8800ddc6a6..e1e56c14e2 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -139,6 +139,8 @@ def gen_groups_toc(): route_group = path.split("/")[1] if route_group != current_group: current_group = route_group + if current_group == "healthz": + current_group = "Z-Pages" md += f"\n## Group {current_group.capitalize()}\n" blueprint_path = path.replace("<", "{").replace(">", "}").replace("int:", "") @@ -146,7 +148,7 @@ def gen_groups_toc(): title = title.replace("Pubkeyhash", "PubKeyHash") title = title.replace("Mpma", "MPMA") title = title.replace("Btcpay", "BTCPay") - md += f"\n### {title} " + md += f"\n### {title.strip()} " if TARGET == "docusaurus": md += f"[GET `{blueprint_path}`]\n\n" else: @@ -157,7 +159,7 @@ def gen_groups_toc(): blueprint_path += f"{{?{arg['name']}}}" md += f"[GET {blueprint_path}]\n\n" - md += route["description"] + md += route["description"].strip() example_args = {} if len(route["args"]) > 0: @@ -168,7 +170,7 @@ def gen_groups_toc(): example_arg = "" if "(e.g. " in description: desc_arr = description.split("(e.g. ") - description = desc_arr[0].replace("\n", " ") + description = desc_arr[0].replace("\n", " ").strip() example_args[arg["name"]] = desc_arr[1].replace(")", "") example_arg = f": `{example_args[arg['name']]}`" md += f" + {arg['name']}{example_arg} ({arg['type']}, {required}) - {description}\n" From 5d8c7381bcb0d89ef0cd418ddeda3e66555d1b27 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 26 Apr 2024 11:18:44 +0200 Subject: [PATCH 130/280] Remove block_index and timestamp when query by block; tweaks and typos --- apiary.apib | 216 ++---- .../counterpartycore/lib/ledger.py | 15 +- .../counterpartycore/lib/transaction.py | 5 - .../test/fixtures/api_v2_fixtures.json | 58 +- counterparty-core/tools/apicache.json | 720 ++++++++---------- 5 files changed, 385 insertions(+), 629 deletions(-) diff --git a/apiary.apib b/apiary.apib index cbed6f4f77..4555cc6ac4 100644 --- a/apiary.apib +++ b/apiary.apib @@ -170,30 +170,26 @@ Returns the events of a block { "event_index": 14194760, "event": "BLOCK_PARSED", - "bindings": { + "payload": { "block_index": 840464, "ledger_hash": "b3f8cbb50b0705a5c4a8495f8b5128de13a32daebd8ac5e8316a010f0d203584", "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540", "txlist_hash": "84bdc5b9073f775a2b65de7da2b10b89a2235f3501883b0a836e41e68cd00d46" - }, - "block_index": 840464, - "timestamp": 1713852780 + } }, { "event_index": 14194759, "event": "TRANSACTION_PARSED", - "bindings": { + "payload": { "supported": true, "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "tx_index": 2726605 - }, - "block_index": 840464, - "timestamp": 1713852780 + } }, { "event_index": 14194758, "event": "CREDIT", - "bindings": { + "payload": { "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", "asset": "UNNEGOTIABLE", "block_index": 840464, @@ -201,14 +197,12 @@ Returns the events of a block "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "quantity": 1, "tx_index": 2726605 - }, - "block_index": 840464, - "timestamp": 1713852780 + } }, { "event_index": 14194757, "event": "ASSET_ISSUANCE", - "bindings": { + "payload": { "asset": "UNNEGOTIABLE", "asset_longname": null, "block_index": 840464, @@ -227,26 +221,22 @@ Returns the events of a block "transfer": false, "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "tx_index": 2726605 - }, - "block_index": 840464, - "timestamp": 1713852780 + } }, { "event_index": 14194756, "event": "ASSET_CREATION", - "bindings": { + "payload": { "asset_id": "75313533584419238", "asset_longname": null, "asset_name": "UNNEGOTIABLE", "block_index": 840464 - }, - "block_index": 840464, - "timestamp": 1713852780 + } }, { "event_index": 14194755, "event": "DEBIT", - "bindings": { + "payload": { "action": "issuance fee", "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", "asset": "XCP", @@ -254,14 +244,12 @@ Returns the events of a block "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "quantity": 50000000, "tx_index": 2726605 - }, - "block_index": 840464, - "timestamp": 1713852780 + } }, { "event_index": 14194754, "event": "NEW_TRANSACTION", - "bindings": { + "payload": { "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", "block_index": 840464, "block_time": 1713852783, @@ -272,22 +260,18 @@ Returns the events of a block "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "tx_index": 2726605 - }, - "block_index": 840464, - "timestamp": 1713852779 + } }, { "event_index": 14194753, "event": "NEW_BLOCK", - "bindings": { + "payload": { "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", "block_index": 840464, "block_time": 1713852783, "difficulty": 86388558925171.02, "previous_block_hash": "00000000000000000002db1e5aa19784eec3de949f98ec757e7a7f2fc392079d" - }, - "block_index": 840464, - "timestamp": 1713852779 + } } ] } @@ -357,7 +341,7 @@ Returns the events of a block filtered by event { "event_index": 14194758, "event": "CREDIT", - "bindings": { + "payload": { "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", "asset": "UNNEGOTIABLE", "block_index": 840464, @@ -365,9 +349,7 @@ Returns the events of a block filtered by event "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "quantity": 1, "tx_index": 2726605 - }, - "block_index": 840464, - "timestamp": 1713852780 + } } ] } @@ -1218,7 +1200,7 @@ Returns the sweeps of an address } ``` -### Compose Bet [GET /addresses/{address}/compose/bet{?feed_address}{?bet_type}{?deadline}{?wager_quantity}{?counterwager_quantity}{?expiration}{?leverage}{?target_value}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Bet [GET /addresses/{address}/compose/bet{?feed_address}{?bet_type}{?deadline}{?wager_quantity}{?counterwager_quantity}{?expiration}{?leverage}{?target_value}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Composes a transaction to issue a bet against a feed. @@ -1242,8 +1224,6 @@ Composes a transaction to issue a bet against a feed. + Default: `546` + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` - + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away - + Default: `0` + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs @@ -1287,7 +1267,7 @@ Composes a transaction to issue a bet against a feed. } ``` -### Compose Broadcast [GET /addresses/{address}/compose/broadcast{?timestamp}{?value}{?fee_fraction}{?text}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Broadcast [GET /addresses/{address}/compose/broadcast{?timestamp}{?value}{?fee_fraction}{?text}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Composes a transaction to broadcast textual and numerical information to the network. @@ -1305,8 +1285,6 @@ Composes a transaction to broadcast textual and numerical information to the net + Default: `546` + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` - + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away - + Default: `0` + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs @@ -1346,7 +1324,7 @@ Composes a transaction to broadcast textual and numerical information to the net } ``` -### Compose BTCPay [GET /addresses/{address}/compose/btcpay{?order_match_id}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose BTCPay [GET /addresses/{address}/compose/btcpay{?order_match_id}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Composes a transaction to pay for a BTC order match. @@ -1361,8 +1339,6 @@ Composes a transaction to pay for a BTC order match. + Default: `546` + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` - + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away - + Default: `0` + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs @@ -1399,7 +1375,7 @@ Composes a transaction to pay for a BTC order match. } ``` -### Compose Burn [GET /addresses/{address}/compose/burn{?quantity}{?overburn}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Burn [GET /addresses/{address}/compose/burn{?quantity}{?overburn}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, possible between blocks 278310 and 283810; on testnet it is still available). @@ -1416,8 +1392,6 @@ Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, poss + Default: `546` + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` - + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away - + Default: `0` + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs @@ -1455,7 +1429,7 @@ Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, poss } ``` -### Compose Cancel [GET /addresses/{address}/compose/cancel{?offer_hash}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Cancel [GET /addresses/{address}/compose/cancel{?offer_hash}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Composes a transaction to cancel an open order or bet. @@ -1470,8 +1444,6 @@ Composes a transaction to cancel an open order or bet. + Default: `546` + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` - + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away - + Default: `0` + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs @@ -1508,7 +1480,7 @@ Composes a transaction to cancel an open order or bet. } ``` -### Compose Destroy [GET /addresses/{address}/compose/destroy{?asset}{?quantity}{?tag}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Destroy [GET /addresses/{address}/compose/destroy{?asset}{?quantity}{?tag}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Composes a transaction to destroy a quantity of an asset. @@ -1525,8 +1497,6 @@ Composes a transaction to destroy a quantity of an asset. + Default: `546` + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` - + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away - + Default: `0` + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs @@ -1565,7 +1535,7 @@ Composes a transaction to destroy a quantity of an asset. } ``` -### Compose Dispenser [GET /addresses/{address}/compose/dispenser{?asset}{?give_quantity}{?escrow_quantity}{?mainchainrate}{?status}{?open_address}{?oracle_address}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Dispenser [GET /addresses/{address}/compose/dispenser{?asset}{?give_quantity}{?escrow_quantity}{?mainchainrate}{?status}{?open_address}{?oracle_address}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Opens or closes a dispenser for a given asset at a given rate of main chain asset (BTC). Escrowed quantity on open must be equal or greater than give_quantity. It is suggested that you escrow multiples of give_quantity to ease dispenser operation. @@ -1588,8 +1558,6 @@ Opens or closes a dispenser for a given asset at a given rate of main chain asse + Default: `546` + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` - + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away - + Default: `0` + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs @@ -1632,7 +1600,7 @@ Opens or closes a dispenser for a given asset at a given rate of main chain asse } ``` -### Compose Dividend [GET /addresses/{address}/compose/dividend{?quantity_per_unit}{?asset}{?dividend_asset}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Dividend [GET /addresses/{address}/compose/dividend{?quantity_per_unit}{?asset}{?dividend_asset}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Composes a transaction to issue a dividend to holders of a given asset. @@ -1649,8 +1617,6 @@ Composes a transaction to issue a dividend to holders of a given asset. + Default: `546` + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` - + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away - + Default: `0` + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs @@ -1689,7 +1655,7 @@ Composes a transaction to issue a dividend to holders of a given asset. } ``` -### Compose Issuance [GET /addresses/{address}/compose/issuance{?asset}{?quantity}{?transfer_destination}{?divisible}{?lock}{?reset}{?description}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Issuance [GET /addresses/{address}/compose/issuance{?asset}{?quantity}{?transfer_destination}{?divisible}{?lock}{?reset}{?description}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Composes a transaction to Issue a new asset, issue more of an existing asset, lock an asset, reset existing supply, or transfer the ownership of an asset. @@ -1715,8 +1681,6 @@ Composes a transaction to Issue a new asset, issue more of an existing asset, lo + Default: `546` + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` - + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away - + Default: `0` + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs @@ -1759,7 +1723,7 @@ Composes a transaction to Issue a new asset, issue more of an existing asset, lo } ``` -### Compose MPMA [GET /addresses/{address}/compose/mpma{?assets}{?destinations}{?quantities}{?memo}{?memo_is_hex}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose MPMA [GET /addresses/{address}/compose/mpma{?assets}{?destinations}{?quantities}{?memo}{?memo_is_hex}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Composes a transaction to send multiple payments to multiple addresses. @@ -1778,8 +1742,6 @@ Composes a transaction to send multiple payments to multiple addresses. + Default: `546` + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` - + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away - + Default: `0` + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs @@ -1834,7 +1796,7 @@ Composes a transaction to send multiple payments to multiple addresses. } ``` -### Compose Order [GET /addresses/{address}/compose/order{?give_asset}{?give_quantity}{?get_asset}{?get_quantity}{?expiration}{?fee_required}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Order [GET /addresses/{address}/compose/order{?give_asset}{?give_quantity}{?get_asset}{?get_quantity}{?expiration}{?fee_required}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Composes a transaction to place an order on the distributed exchange. @@ -1854,8 +1816,6 @@ Composes a transaction to place an order on the distributed exchange. + Default: `546` + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` - + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away - + Default: `0` + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs @@ -1897,7 +1857,7 @@ Composes a transaction to place an order on the distributed exchange. } ``` -### Compose Send [GET /addresses/{address}/compose/send{?destination}{?asset}{?quantity}{?memo}{?memo_is_hex}{?use_enhanced_send}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Send [GET /addresses/{address}/compose/send{?destination}{?asset}{?quantity}{?memo}{?memo_is_hex}{?use_enhanced_send}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Composes a transaction to send a quantity of an asset to another address. @@ -1920,8 +1880,6 @@ Composes a transaction to send a quantity of an asset to another address. + Default: `546` + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` - + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away - + Default: `0` + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs @@ -1963,7 +1921,7 @@ Composes a transaction to send a quantity of an asset to another address. } ``` -### Compose Sweep [GET /addresses/{address}/compose/sweep{?destination}{?flags}{?memo}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?op_return_value}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Sweep [GET /addresses/{address}/compose/sweep{?destination}{?flags}{?memo}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] Composes a transaction to Sends all assets and/or transfer ownerships to a destination address. @@ -1980,8 +1938,6 @@ Composes a transaction to Sends all assets and/or transfer ownerships to a desti + Default: `546` + multisig_dust_size (int, optional) - Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output + Default: `1000` - + op_return_value (int, optional) - The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away - + Default: `0` + pubkey (str, optional) - The hexadecimal public key of the source address (or a list of the keys, if multi-sig). Required when using encoding parameter values of multisig or pubkeyhash. + Default: `None` + allow_unconfirmed_inputs (bool, optional) - Set to true to allow this transaction to utilize unconfirmed UTXOs as inputs @@ -3211,7 +3167,7 @@ Returns all events { "event_index": 10665092, "event": "TRANSACTION_PARSED", - "bindings": { + "payload": { "supported": true, "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", "tx_index": 2056160 @@ -3222,7 +3178,7 @@ Returns all events { "event_index": 10665091, "event": "ENHANCED_SEND", - "bindings": { + "payload": { "asset": "THOTHPEPE", "block_index": 744232, "destination": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", @@ -3239,7 +3195,7 @@ Returns all events { "event_index": 10665090, "event": "CREDIT", - "bindings": { + "payload": { "address": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", "asset": "THOTHPEPE", "block_index": 744232, @@ -3254,7 +3210,7 @@ Returns all events { "event_index": 10665089, "event": "DEBIT", - "bindings": { + "payload": { "action": "send", "address": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", "asset": "THOTHPEPE", @@ -3269,7 +3225,7 @@ Returns all events { "event_index": 10665088, "event": "TRANSACTION_PARSED", - "bindings": { + "payload": { "supported": true, "tx_hash": "bbb2dfa7e7a32288a702ef0091ece8b2a929f94fd967a18e6071cd9c2b085eaf", "tx_index": 2056159 @@ -3296,7 +3252,7 @@ Returns the event of an index { "event_index": 10665092, "event": "TRANSACTION_PARSED", - "bindings": { + "payload": { "supported": true, "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", "tx_index": 2056160 @@ -3527,7 +3483,7 @@ Returns the events filtered by event name { "event_index": 10665090, "event": "CREDIT", - "bindings": { + "payload": { "address": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", "asset": "THOTHPEPE", "block_index": 744232, @@ -3542,7 +3498,7 @@ Returns the events filtered by event name { "event_index": 10665085, "event": "CREDIT", - "bindings": { + "payload": { "address": "1LfDk3Ex9KPYS6L1WGwNdt1TvEg6Le8uq", "asset": "XCP", "block_index": 744232, @@ -3557,7 +3513,7 @@ Returns the events filtered by event name { "event_index": 10665082, "event": "CREDIT", - "bindings": { + "payload": { "address": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", "asset": "FREEDOMKEK", "block_index": 744232, @@ -3572,7 +3528,7 @@ Returns the events filtered by event name { "event_index": 10665078, "event": "CREDIT", - "bindings": { + "payload": { "address": "1P8nYZwLmecAkQUHsx2H9Nkxd51UJ2Asau", "asset": "PEPEFRIDAY", "block_index": 744232, @@ -3587,7 +3543,7 @@ Returns the events filtered by event name { "event_index": 10665074, "event": "CREDIT", - "bindings": { + "payload": { "address": "1NzDQ7HLm6PqJ2Wy6jEKMT7Zw1UbtjUV5a", "asset": "PEPEFRIDAY", "block_index": 744232, @@ -3903,48 +3859,7 @@ Returns all mempool events ``` { - "result": [ - { - "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e", - "event": "NEW_TRANSACTION", - "bindings": { - "block_hash": "mempool", - "block_index": 9999999, - "block_time": 1713952590, - "btc_amount": 0, - "data": "0200454ceacf416ccf0000000000000001005461639d06ebc42d541b54b1c5525543ae4d6db3", - "destination": "", - "fee": 9900, - "source": "14PxDTVUMCjLoAcGPZGQf6cEtn7yLzdHp1", - "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e", - "tx_index": 2726767 - }, - "timestamp": 1713952691 - }, - { - "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e", - "event": "ENHANCED_SEND", - "bindings": { - "asset": "FIERCERABBIT", - "destination": "18hARq2fFJxiypHSnZ8yLcbPNpUfaozD8U", - "memo": null, - "quantity": 1, - "source": "14PxDTVUMCjLoAcGPZGQf6cEtn7yLzdHp1", - "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e" - }, - "timestamp": 1713952691 - }, - { - "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e", - "event": "TRANSACTION_PARSED", - "bindings": { - "supported": true, - "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e", - "tx_index": 2726767 - }, - "timestamp": 1713952691 - } - ] + "result": [] } ``` @@ -3959,49 +3874,6 @@ Returns the mempool events filtered by event name ``` { - "result": [ - { - "tx_hash": "90ba95c4578b9ab7866515d66736c5b4132e88a0bd9b0fca7b2f1be830a1bb81", - "event": "OPEN_ORDER", - "bindings": { - "expiration": 5000, - "expire_index": 10004999, - "fee_provided": 5016, - "fee_provided_remaining": 5016, - "fee_required": 0, - "fee_required_remaining": 0, - "get_asset": "XCP", - "get_quantity": 3300000000, - "get_remaining": 3300000000, - "give_asset": "PEPEPASSPORT", - "give_quantity": 100000000, - "give_remaining": 100000000, - "source": "1A36UrLHxeg9ABoS4zPsRUegyCWTWER2kF", - "tx_hash": "90ba95c4578b9ab7866515d66736c5b4132e88a0bd9b0fca7b2f1be830a1bb81" - }, - "timestamp": 1713952690 - }, - { - "tx_hash": "bc553f3d4349a266b70e7ed98e2198a18d634a5b247997f59817f69e19de2ad6", - "event": "OPEN_ORDER", - "bindings": { - "expiration": 5000, - "expire_index": 10004999, - "fee_provided": 5016, - "fee_provided_remaining": 5016, - "fee_required": 0, - "fee_required_remaining": 0, - "get_asset": "XCP", - "get_quantity": 1185000000, - "get_remaining": 1185000000, - "give_asset": "FRATPEPE", - "give_quantity": 3, - "give_remaining": 3, - "source": "1A36UrLHxeg9ABoS4zPsRUegyCWTWER2kF", - "tx_hash": "bc553f3d4349a266b70e7ed98e2198a18d634a5b247997f59817f69e19de2ad6" - }, - "timestamp": 1713952690 - } - ] + "result": [] } ``` diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index 585925d4a6..c48d089ee0 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -87,10 +87,13 @@ def get_events(db, block_index=None, event=None, event_index=None, last=None, li else: limit = "" # no sql injection here - query = """ - SELECT message_index AS event_index, event, bindings, block_index, timestamp + select_fields = "message_index AS event_index, event, bindings AS payload" + if block_index is None: + select_fields += ", block_index, timestamp" + query = f""" + SELECT {select_fields} FROM messages - """ + """ # noqa S608 if len(where) > 0: query += f""" WHERE ({" AND ".join(where)}) @@ -101,7 +104,7 @@ def get_events(db, block_index=None, event=None, event_index=None, last=None, li cursor.execute(query, tuple(bindings)) events = cursor.fetchall() for i, _ in enumerate(events): - events[i]["bindings"] = json.loads(events[i]["bindings"]) + events[i]["payload"] = json.loads(events[i]["payload"]) return events @@ -160,7 +163,7 @@ def get_mempool_events(db, event_name=None): bindings.append(event_name) # no sql injection here query = """ - SELECT tx_hash, event, bindings, timestamp + SELECT tx_hash, event, bindings AS payload, timestamp FROM mempool """ if event_name is not None: @@ -169,7 +172,7 @@ def get_mempool_events(db, event_name=None): cursor.execute(query, tuple(bindings)) events = cursor.fetchall() for i, _ in enumerate(events): - events[i]["bindings"] = json.loads(events[i]["bindings"]) + events[i]["payload"] = json.loads(events[i]["payload"]) return events diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index b29a6506c4..94854a7ec3 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -973,11 +973,6 @@ def get_dust_return_pubkey(source, provided_pubkeys, encoding): config.DEFAULT_MULTISIG_DUST_SIZE, "Specify (in satoshis) to override the (dust) amount of BTC used for each (bare) multisig output", ), - "op_return_value": ( - int, - config.DEFAULT_OP_RETURN_VALUE, - "The value (in satoshis) to use with any OP_RETURN outputs in the generated transaction. Defaults to 0. Don't use this, unless you like throwing your money away", - ), "pubkey": ( str, None, diff --git a/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json b/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json index ebbd0f3106..4631558d73 100644 --- a/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json +++ b/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json @@ -137,7 +137,7 @@ { "event_index": 1183, "event": "NEW_BLOCK", - "bindings": { + "payload": { "block_hash": "8a09b2faf0a7ad67eb4ab5c948b9769fc87eb2ec5e16108f2cde8bd9e6cf7607", "block_index": 310492, "block_time": 310492000, @@ -145,37 +145,31 @@ "ledger_hash": null, "previous_block_hash": null, "txlist_hash": null - }, - "block_index": 310491, - "timestamp": 0 + } }, { "event_index": 1182, "event": "BLOCK_PARSED", - "bindings": { + "payload": { "block_index": 310491, "ledger_hash": "3114d8091cfcaa9944c6fab49d51950535c4ef269877d58c372ed80b2b472ec6", "messages_hash": "9671cfedb3124b67ed996c547cb26a32e95490009ad56065c79be54a28c45994", "txlist_hash": "f065728a3544adc085fae976759c0d040a34ca0a8ddd39260b55f0262cd5baa8" - }, - "block_index": 310491, - "timestamp": 0 + } }, { "event_index": 1181, "event": "TRANSACTION_PARSED", - "bindings": { + "payload": { "supported": true, "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", "tx_index": 492 - }, - "block_index": 310491, - "timestamp": 0 + } }, { "event_index": 1180, "event": "OPEN_ORDER", - "bindings": { + "payload": { "block_index": 310491, "expiration": 2000, "expire_index": 312491, @@ -193,14 +187,12 @@ "status": "open", "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", "tx_index": 492 - }, - "block_index": 310491, - "timestamp": 0 + } }, { "event_index": 1179, "event": "DEBIT", - "bindings": { + "payload": { "action": "open order", "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", "asset": "XCP", @@ -208,14 +200,12 @@ "event": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", "quantity": 100000000, "tx_index": 492 - }, - "block_index": 310491, - "timestamp": 0 + } }, { "event_index": 1178, "event": "NEW_TRANSACTION", - "bindings": { + "payload": { "block_hash": "811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16", "block_index": 310491, "block_time": 310491000, @@ -227,9 +217,7 @@ "supported": true, "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", "tx_index": 492 - }, - "block_index": 310491, - "timestamp": 0 + } } ] }, @@ -1272,7 +1260,7 @@ { "event_index": 1237, "event": "BLOCK_PARSED", - "bindings": { + "payload": { "block_index": 310500, "ledger_hash": "5ffefc7a2724be6bd697796bb82638ec913c5cbb73627153d1a13b48c7a6c02d", "messages_hash": "45f296a535c13129cb1aaeb4e28a03e04ad902917891c39ae59ea2894e9f868f", @@ -1284,7 +1272,7 @@ { "event_index": 1236, "event": "NEW_BLOCK", - "bindings": { + "payload": { "block_hash": "54aeaf47d5387964e2d51617bf3af50520a0449410e0d096cf8c2aa9dad5550b", "block_index": 310500, "block_time": 310500000, @@ -1299,7 +1287,7 @@ { "event_index": 1235, "event": "BLOCK_PARSED", - "bindings": { + "payload": { "block_index": 310499, "ledger_hash": "b9fcbdafddd46fdda061f6e9f8744b426b6ca37e32b315df1098cbc7899ae9b9", "messages_hash": "d6aedacd4f81520d86ae47c9c776d17a213c706a5cf7c91203a4299261d1648c", @@ -1311,7 +1299,7 @@ { "event_index": 1234, "event": "NEW_BLOCK", - "bindings": { + "payload": { "block_hash": "1950e1a4d7fc820ed9603f6df6819c3c953c277c726340dec2a4253e261a1764", "block_index": 310499, "block_time": 310499000, @@ -1326,7 +1314,7 @@ { "event_index": 1233, "event": "BLOCK_PARSED", - "bindings": { + "payload": { "block_index": 310498, "ledger_hash": "5fe6cdb0828379bf240fad99c68bba34e1889bbc19605ce5c297b82352264414", "messages_hash": "113207bd13dda56b5e5edf305f70a56e62cc861184e1e95a64e79ce100462c98", @@ -1342,7 +1330,7 @@ { "event_index": 10, "event": "ASSET_CREATION", - "bindings": { + "payload": { "asset_id": "697326324582", "asset_longname": null, "asset_name": "DIVISIBLE", @@ -1446,7 +1434,7 @@ { "event_index": 1231, "event": "CREDIT", - "bindings": { + "payload": { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", "asset": "A95428956661682277", "block_index": 310498, @@ -1461,7 +1449,7 @@ { "event_index": 1223, "event": "CREDIT", - "bindings": { + "payload": { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", "asset": "PARENT", "block_index": 310497, @@ -1476,7 +1464,7 @@ { "event_index": 1214, "event": "CREDIT", - "bindings": { + "payload": { "address": "mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj", "asset": "XCP", "block_index": 310496, @@ -1491,7 +1479,7 @@ { "event_index": 1207, "event": "CREDIT", - "bindings": { + "payload": { "address": "mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj", "asset": "DIVIDEND", "block_index": 310495, @@ -1506,7 +1494,7 @@ { "event_index": 1201, "event": "CREDIT", - "bindings": { + "payload": { "address": "mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH", "asset": "DIVIDEND", "block_index": 310494, diff --git a/counterparty-core/tools/apicache.json b/counterparty-core/tools/apicache.json index 5846ea6a7f..0fc73ef18b 100644 --- a/counterparty-core/tools/apicache.json +++ b/counterparty-core/tools/apicache.json @@ -1,130 +1,4 @@ { - "/blocks//events": { - "result": [ - { - "event_index": 14194760, - "event": "BLOCK_PARSED", - "bindings": { - "block_index": 840464, - "ledger_hash": "b3f8cbb50b0705a5c4a8495f8b5128de13a32daebd8ac5e8316a010f0d203584", - "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540", - "txlist_hash": "84bdc5b9073f775a2b65de7da2b10b89a2235f3501883b0a836e41e68cd00d46" - }, - "block_index": 840464, - "timestamp": 1713852780 - }, - { - "event_index": 14194759, - "event": "TRANSACTION_PARSED", - "bindings": { - "supported": true, - "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "tx_index": 2726605 - }, - "block_index": 840464, - "timestamp": 1713852780 - }, - { - "event_index": 14194758, - "event": "CREDIT", - "bindings": { - "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "asset": "UNNEGOTIABLE", - "block_index": 840464, - "calling_function": "issuance", - "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "quantity": 1, - "tx_index": 2726605 - }, - "block_index": 840464, - "timestamp": 1713852780 - }, - { - "event_index": 14194757, - "event": "ASSET_ISSUANCE", - "bindings": { - "asset": "UNNEGOTIABLE", - "asset_longname": null, - "block_index": 840464, - "call_date": 0, - "call_price": 0.0, - "callable": false, - "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", - "divisible": false, - "fee_paid": 50000000, - "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "locked": false, - "quantity": 1, - "reset": false, - "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "status": "valid", - "transfer": false, - "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "tx_index": 2726605 - }, - "block_index": 840464, - "timestamp": 1713852780 - }, - { - "event_index": 14194756, - "event": "ASSET_CREATION", - "bindings": { - "asset_id": "75313533584419238", - "asset_longname": null, - "asset_name": "UNNEGOTIABLE", - "block_index": 840464 - }, - "block_index": 840464, - "timestamp": 1713852780 - }, - { - "event_index": 14194755, - "event": "DEBIT", - "bindings": { - "action": "issuance fee", - "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "asset": "XCP", - "block_index": 840464, - "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "quantity": 50000000, - "tx_index": 2726605 - }, - "block_index": 840464, - "timestamp": 1713852780 - }, - { - "event_index": 14194754, - "event": "NEW_TRANSACTION", - "bindings": { - "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", - "block_index": 840464, - "block_time": 1713852783, - "btc_amount": 0, - "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", - "destination": "", - "fee": 56565, - "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "tx_index": 2726605 - }, - "block_index": 840464, - "timestamp": 1713852779 - }, - { - "event_index": 14194753, - "event": "NEW_BLOCK", - "bindings": { - "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", - "block_index": 840464, - "block_time": 1713852783, - "difficulty": 86388558925171.02, - "previous_block_hash": "00000000000000000002db1e5aa19784eec3de949f98ec757e7a7f2fc392079d" - }, - "block_index": 840464, - "timestamp": 1713852779 - } - ] - }, "/blocks//events/counts": { "result": [ { @@ -161,25 +35,6 @@ } ] }, - "/blocks//events/": { - "result": [ - { - "event_index": 14194758, - "event": "CREDIT", - "bindings": { - "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "asset": "UNNEGOTIABLE", - "block_index": 840464, - "calling_function": "issuance", - "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "quantity": 1, - "tx_index": 2726605 - }, - "block_index": 840464, - "timestamp": 1713852780 - } - ] - }, "/blocks//credits": { "result": [ { @@ -1507,94 +1362,6 @@ } ] }, - "/events": { - "result": [ - { - "event_index": 10665092, - "event": "TRANSACTION_PARSED", - "bindings": { - "supported": true, - "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", - "tx_index": 2056160 - }, - "block_index": 744232, - "timestamp": 1712256340 - }, - { - "event_index": 10665091, - "event": "ENHANCED_SEND", - "bindings": { - "asset": "THOTHPEPE", - "block_index": 744232, - "destination": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", - "memo": null, - "quantity": 1, - "source": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", - "status": "valid", - "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", - "tx_index": 2056160 - }, - "block_index": 744232, - "timestamp": 1712256340 - }, - { - "event_index": 10665090, - "event": "CREDIT", - "bindings": { - "address": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", - "asset": "THOTHPEPE", - "block_index": 744232, - "calling_function": "send", - "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", - "quantity": 1, - "tx_index": 2056160 - }, - "block_index": 744232, - "timestamp": 1712256340 - }, - { - "event_index": 10665089, - "event": "DEBIT", - "bindings": { - "action": "send", - "address": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", - "asset": "THOTHPEPE", - "block_index": 744232, - "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", - "quantity": 1, - "tx_index": 2056160 - }, - "block_index": 744232, - "timestamp": 1712256340 - }, - { - "event_index": 10665088, - "event": "TRANSACTION_PARSED", - "bindings": { - "supported": true, - "tx_hash": "bbb2dfa7e7a32288a702ef0091ece8b2a929f94fd967a18e6071cd9c2b085eaf", - "tx_index": 2056159 - }, - "block_index": 744232, - "timestamp": 1712256340 - } - ] - }, - "/events/": { - "result": [ - { - "event_index": 10665092, - "event": "TRANSACTION_PARSED", - "bindings": { - "supported": true, - "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", - "tx_index": 2056160 - }, - "block_index": 744232, - "timestamp": 1712256340 - } - ] - }, "/events/counts": { "result": [ { @@ -1787,94 +1554,15 @@ } ] }, - "/events/": { - "result": [ - { - "event_index": 10665090, - "event": "CREDIT", - "bindings": { - "address": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", - "asset": "THOTHPEPE", - "block_index": 744232, - "calling_function": "send", - "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", - "quantity": 1, - "tx_index": 2056160 - }, - "block_index": 744232, - "timestamp": 1712256340 - }, - { - "event_index": 10665085, - "event": "CREDIT", - "bindings": { - "address": "1LfDk3Ex9KPYS6L1WGwNdt1TvEg6Le8uq", - "asset": "XCP", - "block_index": 744232, - "calling_function": "dispense", - "event": "bbb2dfa7e7a32288a702ef0091ece8b2a929f94fd967a18e6071cd9c2b085eaf", - "quantity": 10000000000, - "tx_index": 2056159 - }, - "block_index": 744232, - "timestamp": 1712256340 - }, - { - "event_index": 10665082, - "event": "CREDIT", - "bindings": { - "address": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", - "asset": "FREEDOMKEK", - "block_index": 744232, - "calling_function": "send", - "event": "b419d19729c2be813405c548431f4840d5c909b875f94b7c56aeca134e328ef6", - "quantity": 1, - "tx_index": 2056158 - }, - "block_index": 744232, - "timestamp": 1712256340 - }, - { - "event_index": 10665078, - "event": "CREDIT", - "bindings": { - "address": "1P8nYZwLmecAkQUHsx2H9Nkxd51UJ2Asau", - "asset": "PEPEFRIDAY", - "block_index": 744232, - "calling_function": "send", - "event": "145ebf6c563c4e91a2bc488954ef701dad730fc065697979c80d6d85cbba63e1", - "quantity": 1, - "tx_index": 2056157 - }, - "block_index": 744232, - "timestamp": 1712256340 - }, - { - "event_index": 10665074, - "event": "CREDIT", - "bindings": { - "address": "1NzDQ7HLm6PqJ2Wy6jEKMT7Zw1UbtjUV5a", - "asset": "PEPEFRIDAY", - "block_index": 744232, - "calling_function": "send", - "event": "388c7208d52bf617c1a3eef238a668f694a4f72dc97b3be92562fe636ca646fa", - "quantity": 2, - "tx_index": 2056156 - }, - "block_index": 744232, - "timestamp": 1712256340 - } - ] - }, - "/addresses/
/compose/broadcast": { - "result": { - "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0200000000000000002b6a290d1e454cefefcbe17b1100cb21d3398ec45d2594e5d1d822df41d03a332741261ce2f9aee7827cd91c340c0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", - "params": { - "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", - "timestamp": 4003903983, - "value": 100.0, - "fee_fraction": 0.05, - "text": "\"Hello, world!\"" + "/addresses/
/compose/broadcast": { + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0200000000000000002b6a290d1e454cefefcbe17b1100cb21d3398ec45d2594e5d1d822df41d03a332741261ce2f9aee7827cd91c340c0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "timestamp": 4003903983, + "value": 100.0, + "fee_fraction": 0.05, + "text": "\"Hello, world!\"" }, "name": "broadcast" } @@ -2043,96 +1731,6 @@ "name": "sweep" } }, - "/mempool/events": { - "result": [ - { - "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e", - "event": "NEW_TRANSACTION", - "bindings": { - "block_hash": "mempool", - "block_index": 9999999, - "block_time": 1713952590, - "btc_amount": 0, - "data": "0200454ceacf416ccf0000000000000001005461639d06ebc42d541b54b1c5525543ae4d6db3", - "destination": "", - "fee": 9900, - "source": "14PxDTVUMCjLoAcGPZGQf6cEtn7yLzdHp1", - "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e", - "tx_index": 2726767 - }, - "timestamp": 1713952691 - }, - { - "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e", - "event": "ENHANCED_SEND", - "bindings": { - "asset": "FIERCERABBIT", - "destination": "18hARq2fFJxiypHSnZ8yLcbPNpUfaozD8U", - "memo": null, - "quantity": 1, - "source": "14PxDTVUMCjLoAcGPZGQf6cEtn7yLzdHp1", - "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e" - }, - "timestamp": 1713952691 - }, - { - "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e", - "event": "TRANSACTION_PARSED", - "bindings": { - "supported": true, - "tx_hash": "8a154886671713cae6d72d2996f07fac61529c0d8d1ebc476f448212ff3d535e", - "tx_index": 2726767 - }, - "timestamp": 1713952691 - } - ] - }, - "/mempool/events/": { - "result": [ - { - "tx_hash": "90ba95c4578b9ab7866515d66736c5b4132e88a0bd9b0fca7b2f1be830a1bb81", - "event": "OPEN_ORDER", - "bindings": { - "expiration": 5000, - "expire_index": 10004999, - "fee_provided": 5016, - "fee_provided_remaining": 5016, - "fee_required": 0, - "fee_required_remaining": 0, - "get_asset": "XCP", - "get_quantity": 3300000000, - "get_remaining": 3300000000, - "give_asset": "PEPEPASSPORT", - "give_quantity": 100000000, - "give_remaining": 100000000, - "source": "1A36UrLHxeg9ABoS4zPsRUegyCWTWER2kF", - "tx_hash": "90ba95c4578b9ab7866515d66736c5b4132e88a0bd9b0fca7b2f1be830a1bb81" - }, - "timestamp": 1713952690 - }, - { - "tx_hash": "bc553f3d4349a266b70e7ed98e2198a18d634a5b247997f59817f69e19de2ad6", - "event": "OPEN_ORDER", - "bindings": { - "expiration": 5000, - "expire_index": 10004999, - "fee_provided": 5016, - "fee_provided_remaining": 5016, - "fee_required": 0, - "fee_required_remaining": 0, - "get_asset": "XCP", - "get_quantity": 1185000000, - "get_remaining": 1185000000, - "give_asset": "FRATPEPE", - "give_quantity": 3, - "give_remaining": 3, - "source": "1A36UrLHxeg9ABoS4zPsRUegyCWTWER2kF", - "tx_hash": "bc553f3d4349a266b70e7ed98e2198a18d634a5b247997f59817f69e19de2ad6" - }, - "timestamp": 1713952690 - } - ] - }, "/bitcoin/addresses/
/transactions": { "result": [ { @@ -2580,5 +2178,305 @@ } } } + }, + "/blocks//events": { + "result": [ + { + "event_index": 14194760, + "event": "BLOCK_PARSED", + "payload": { + "block_index": 840464, + "ledger_hash": "b3f8cbb50b0705a5c4a8495f8b5128de13a32daebd8ac5e8316a010f0d203584", + "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540", + "txlist_hash": "84bdc5b9073f775a2b65de7da2b10b89a2235f3501883b0a836e41e68cd00d46" + } + }, + { + "event_index": 14194759, + "event": "TRANSACTION_PARSED", + "payload": { + "supported": true, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605 + } + }, + { + "event_index": 14194758, + "event": "CREDIT", + "payload": { + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "UNNEGOTIABLE", + "block_index": 840464, + "calling_function": "issuance", + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "quantity": 1, + "tx_index": 2726605 + } + }, + { + "event_index": 14194757, + "event": "ASSET_ISSUANCE", + "payload": { + "asset": "UNNEGOTIABLE", + "asset_longname": null, + "block_index": 840464, + "call_date": 0, + "call_price": 0.0, + "callable": false, + "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "divisible": false, + "fee_paid": 50000000, + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "locked": false, + "quantity": 1, + "reset": false, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "status": "valid", + "transfer": false, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605 + } + }, + { + "event_index": 14194756, + "event": "ASSET_CREATION", + "payload": { + "asset_id": "75313533584419238", + "asset_longname": null, + "asset_name": "UNNEGOTIABLE", + "block_index": 840464 + } + }, + { + "event_index": 14194755, + "event": "DEBIT", + "payload": { + "action": "issuance fee", + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "XCP", + "block_index": 840464, + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "quantity": 50000000, + "tx_index": 2726605 + } + }, + { + "event_index": 14194754, + "event": "NEW_TRANSACTION", + "payload": { + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_index": 840464, + "block_time": 1713852783, + "btc_amount": 0, + "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", + "destination": "", + "fee": 56565, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605 + } + }, + { + "event_index": 14194753, + "event": "NEW_BLOCK", + "payload": { + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_index": 840464, + "block_time": 1713852783, + "difficulty": 86388558925171.02, + "previous_block_hash": "00000000000000000002db1e5aa19784eec3de949f98ec757e7a7f2fc392079d" + } + } + ] + }, + "/blocks//events/": { + "result": [ + { + "event_index": 14194758, + "event": "CREDIT", + "payload": { + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "UNNEGOTIABLE", + "block_index": 840464, + "calling_function": "issuance", + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "quantity": 1, + "tx_index": 2726605 + } + } + ] + }, + "/events": { + "result": [ + { + "event_index": 10665092, + "event": "TRANSACTION_PARSED", + "payload": { + "supported": true, + "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", + "tx_index": 2056160 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665091, + "event": "ENHANCED_SEND", + "payload": { + "asset": "THOTHPEPE", + "block_index": 744232, + "destination": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", + "memo": null, + "quantity": 1, + "source": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", + "status": "valid", + "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", + "tx_index": 2056160 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665090, + "event": "CREDIT", + "payload": { + "address": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", + "asset": "THOTHPEPE", + "block_index": 744232, + "calling_function": "send", + "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", + "quantity": 1, + "tx_index": 2056160 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665089, + "event": "DEBIT", + "payload": { + "action": "send", + "address": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", + "asset": "THOTHPEPE", + "block_index": 744232, + "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", + "quantity": 1, + "tx_index": 2056160 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665088, + "event": "TRANSACTION_PARSED", + "payload": { + "supported": true, + "tx_hash": "bbb2dfa7e7a32288a702ef0091ece8b2a929f94fd967a18e6071cd9c2b085eaf", + "tx_index": 2056159 + }, + "block_index": 744232, + "timestamp": 1712256340 + } + ] + }, + "/events/": { + "result": [ + { + "event_index": 10665092, + "event": "TRANSACTION_PARSED", + "payload": { + "supported": true, + "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", + "tx_index": 2056160 + }, + "block_index": 744232, + "timestamp": 1712256340 + } + ] + }, + "/events/": { + "result": [ + { + "event_index": 10665090, + "event": "CREDIT", + "payload": { + "address": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", + "asset": "THOTHPEPE", + "block_index": 744232, + "calling_function": "send", + "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", + "quantity": 1, + "tx_index": 2056160 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665085, + "event": "CREDIT", + "payload": { + "address": "1LfDk3Ex9KPYS6L1WGwNdt1TvEg6Le8uq", + "asset": "XCP", + "block_index": 744232, + "calling_function": "dispense", + "event": "bbb2dfa7e7a32288a702ef0091ece8b2a929f94fd967a18e6071cd9c2b085eaf", + "quantity": 10000000000, + "tx_index": 2056159 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665082, + "event": "CREDIT", + "payload": { + "address": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", + "asset": "FREEDOMKEK", + "block_index": 744232, + "calling_function": "send", + "event": "b419d19729c2be813405c548431f4840d5c909b875f94b7c56aeca134e328ef6", + "quantity": 1, + "tx_index": 2056158 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665078, + "event": "CREDIT", + "payload": { + "address": "1P8nYZwLmecAkQUHsx2H9Nkxd51UJ2Asau", + "asset": "PEPEFRIDAY", + "block_index": 744232, + "calling_function": "send", + "event": "145ebf6c563c4e91a2bc488954ef701dad730fc065697979c80d6d85cbba63e1", + "quantity": 1, + "tx_index": 2056157 + }, + "block_index": 744232, + "timestamp": 1712256340 + }, + { + "event_index": 10665074, + "event": "CREDIT", + "payload": { + "address": "1NzDQ7HLm6PqJ2Wy6jEKMT7Zw1UbtjUV5a", + "asset": "PEPEFRIDAY", + "block_index": 744232, + "calling_function": "send", + "event": "388c7208d52bf617c1a3eef238a668f694a4f72dc97b3be92562fe636ca646fa", + "quantity": 2, + "tx_index": 2056156 + }, + "block_index": 744232, + "timestamp": 1712256340 + } + ] + }, + "/mempool/events": { + "result": [] + }, + "/mempool/events/": { + "result": [] } } \ No newline at end of file From e0afc267195be9cc51126e87e348adfa857fb488 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 26 Apr 2024 13:30:38 +0200 Subject: [PATCH 131/280] payload -> params --- apiary.apib | 40 +++++++++---------- .../counterpartycore/lib/ledger.py | 8 ++-- .../test/fixtures/api_v2_fixtures.json | 34 ++++++++-------- counterparty-core/tools/apicache.json | 40 +++++++++---------- 4 files changed, 61 insertions(+), 61 deletions(-) diff --git a/apiary.apib b/apiary.apib index 4555cc6ac4..81b2b57862 100644 --- a/apiary.apib +++ b/apiary.apib @@ -170,7 +170,7 @@ Returns the events of a block { "event_index": 14194760, "event": "BLOCK_PARSED", - "payload": { + "params": { "block_index": 840464, "ledger_hash": "b3f8cbb50b0705a5c4a8495f8b5128de13a32daebd8ac5e8316a010f0d203584", "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540", @@ -180,7 +180,7 @@ Returns the events of a block { "event_index": 14194759, "event": "TRANSACTION_PARSED", - "payload": { + "params": { "supported": true, "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "tx_index": 2726605 @@ -189,7 +189,7 @@ Returns the events of a block { "event_index": 14194758, "event": "CREDIT", - "payload": { + "params": { "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", "asset": "UNNEGOTIABLE", "block_index": 840464, @@ -202,7 +202,7 @@ Returns the events of a block { "event_index": 14194757, "event": "ASSET_ISSUANCE", - "payload": { + "params": { "asset": "UNNEGOTIABLE", "asset_longname": null, "block_index": 840464, @@ -226,7 +226,7 @@ Returns the events of a block { "event_index": 14194756, "event": "ASSET_CREATION", - "payload": { + "params": { "asset_id": "75313533584419238", "asset_longname": null, "asset_name": "UNNEGOTIABLE", @@ -236,7 +236,7 @@ Returns the events of a block { "event_index": 14194755, "event": "DEBIT", - "payload": { + "params": { "action": "issuance fee", "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", "asset": "XCP", @@ -249,7 +249,7 @@ Returns the events of a block { "event_index": 14194754, "event": "NEW_TRANSACTION", - "payload": { + "params": { "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", "block_index": 840464, "block_time": 1713852783, @@ -265,7 +265,7 @@ Returns the events of a block { "event_index": 14194753, "event": "NEW_BLOCK", - "payload": { + "params": { "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", "block_index": 840464, "block_time": 1713852783, @@ -341,7 +341,7 @@ Returns the events of a block filtered by event { "event_index": 14194758, "event": "CREDIT", - "payload": { + "params": { "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", "asset": "UNNEGOTIABLE", "block_index": 840464, @@ -3167,7 +3167,7 @@ Returns all events { "event_index": 10665092, "event": "TRANSACTION_PARSED", - "payload": { + "params": { "supported": true, "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", "tx_index": 2056160 @@ -3178,7 +3178,7 @@ Returns all events { "event_index": 10665091, "event": "ENHANCED_SEND", - "payload": { + "params": { "asset": "THOTHPEPE", "block_index": 744232, "destination": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", @@ -3195,7 +3195,7 @@ Returns all events { "event_index": 10665090, "event": "CREDIT", - "payload": { + "params": { "address": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", "asset": "THOTHPEPE", "block_index": 744232, @@ -3210,7 +3210,7 @@ Returns all events { "event_index": 10665089, "event": "DEBIT", - "payload": { + "params": { "action": "send", "address": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", "asset": "THOTHPEPE", @@ -3225,7 +3225,7 @@ Returns all events { "event_index": 10665088, "event": "TRANSACTION_PARSED", - "payload": { + "params": { "supported": true, "tx_hash": "bbb2dfa7e7a32288a702ef0091ece8b2a929f94fd967a18e6071cd9c2b085eaf", "tx_index": 2056159 @@ -3252,7 +3252,7 @@ Returns the event of an index { "event_index": 10665092, "event": "TRANSACTION_PARSED", - "payload": { + "params": { "supported": true, "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", "tx_index": 2056160 @@ -3483,7 +3483,7 @@ Returns the events filtered by event name { "event_index": 10665090, "event": "CREDIT", - "payload": { + "params": { "address": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", "asset": "THOTHPEPE", "block_index": 744232, @@ -3498,7 +3498,7 @@ Returns the events filtered by event name { "event_index": 10665085, "event": "CREDIT", - "payload": { + "params": { "address": "1LfDk3Ex9KPYS6L1WGwNdt1TvEg6Le8uq", "asset": "XCP", "block_index": 744232, @@ -3513,7 +3513,7 @@ Returns the events filtered by event name { "event_index": 10665082, "event": "CREDIT", - "payload": { + "params": { "address": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", "asset": "FREEDOMKEK", "block_index": 744232, @@ -3528,7 +3528,7 @@ Returns the events filtered by event name { "event_index": 10665078, "event": "CREDIT", - "payload": { + "params": { "address": "1P8nYZwLmecAkQUHsx2H9Nkxd51UJ2Asau", "asset": "PEPEFRIDAY", "block_index": 744232, @@ -3543,7 +3543,7 @@ Returns the events filtered by event name { "event_index": 10665074, "event": "CREDIT", - "payload": { + "params": { "address": "1NzDQ7HLm6PqJ2Wy6jEKMT7Zw1UbtjUV5a", "asset": "PEPEFRIDAY", "block_index": 744232, diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index c48d089ee0..def7708f8f 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -87,7 +87,7 @@ def get_events(db, block_index=None, event=None, event_index=None, last=None, li else: limit = "" # no sql injection here - select_fields = "message_index AS event_index, event, bindings AS payload" + select_fields = "message_index AS event_index, event, bindings AS params" if block_index is None: select_fields += ", block_index, timestamp" query = f""" @@ -104,7 +104,7 @@ def get_events(db, block_index=None, event=None, event_index=None, last=None, li cursor.execute(query, tuple(bindings)) events = cursor.fetchall() for i, _ in enumerate(events): - events[i]["payload"] = json.loads(events[i]["payload"]) + events[i]["params"] = json.loads(events[i]["params"]) return events @@ -163,7 +163,7 @@ def get_mempool_events(db, event_name=None): bindings.append(event_name) # no sql injection here query = """ - SELECT tx_hash, event, bindings AS payload, timestamp + SELECT tx_hash, event, bindings AS params, timestamp FROM mempool """ if event_name is not None: @@ -172,7 +172,7 @@ def get_mempool_events(db, event_name=None): cursor.execute(query, tuple(bindings)) events = cursor.fetchall() for i, _ in enumerate(events): - events[i]["payload"] = json.loads(events[i]["payload"]) + events[i]["params"] = json.loads(events[i]["params"]) return events diff --git a/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json b/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json index 4631558d73..41b89d29c6 100644 --- a/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json +++ b/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json @@ -137,7 +137,7 @@ { "event_index": 1183, "event": "NEW_BLOCK", - "payload": { + "params": { "block_hash": "8a09b2faf0a7ad67eb4ab5c948b9769fc87eb2ec5e16108f2cde8bd9e6cf7607", "block_index": 310492, "block_time": 310492000, @@ -150,7 +150,7 @@ { "event_index": 1182, "event": "BLOCK_PARSED", - "payload": { + "params": { "block_index": 310491, "ledger_hash": "3114d8091cfcaa9944c6fab49d51950535c4ef269877d58c372ed80b2b472ec6", "messages_hash": "9671cfedb3124b67ed996c547cb26a32e95490009ad56065c79be54a28c45994", @@ -160,7 +160,7 @@ { "event_index": 1181, "event": "TRANSACTION_PARSED", - "payload": { + "params": { "supported": true, "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", "tx_index": 492 @@ -169,7 +169,7 @@ { "event_index": 1180, "event": "OPEN_ORDER", - "payload": { + "params": { "block_index": 310491, "expiration": 2000, "expire_index": 312491, @@ -192,7 +192,7 @@ { "event_index": 1179, "event": "DEBIT", - "payload": { + "params": { "action": "open order", "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", "asset": "XCP", @@ -205,7 +205,7 @@ { "event_index": 1178, "event": "NEW_TRANSACTION", - "payload": { + "params": { "block_hash": "811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16", "block_index": 310491, "block_time": 310491000, @@ -1260,7 +1260,7 @@ { "event_index": 1237, "event": "BLOCK_PARSED", - "payload": { + "params": { "block_index": 310500, "ledger_hash": "5ffefc7a2724be6bd697796bb82638ec913c5cbb73627153d1a13b48c7a6c02d", "messages_hash": "45f296a535c13129cb1aaeb4e28a03e04ad902917891c39ae59ea2894e9f868f", @@ -1272,7 +1272,7 @@ { "event_index": 1236, "event": "NEW_BLOCK", - "payload": { + "params": { "block_hash": "54aeaf47d5387964e2d51617bf3af50520a0449410e0d096cf8c2aa9dad5550b", "block_index": 310500, "block_time": 310500000, @@ -1287,7 +1287,7 @@ { "event_index": 1235, "event": "BLOCK_PARSED", - "payload": { + "params": { "block_index": 310499, "ledger_hash": "b9fcbdafddd46fdda061f6e9f8744b426b6ca37e32b315df1098cbc7899ae9b9", "messages_hash": "d6aedacd4f81520d86ae47c9c776d17a213c706a5cf7c91203a4299261d1648c", @@ -1299,7 +1299,7 @@ { "event_index": 1234, "event": "NEW_BLOCK", - "payload": { + "params": { "block_hash": "1950e1a4d7fc820ed9603f6df6819c3c953c277c726340dec2a4253e261a1764", "block_index": 310499, "block_time": 310499000, @@ -1314,7 +1314,7 @@ { "event_index": 1233, "event": "BLOCK_PARSED", - "payload": { + "params": { "block_index": 310498, "ledger_hash": "5fe6cdb0828379bf240fad99c68bba34e1889bbc19605ce5c297b82352264414", "messages_hash": "113207bd13dda56b5e5edf305f70a56e62cc861184e1e95a64e79ce100462c98", @@ -1330,7 +1330,7 @@ { "event_index": 10, "event": "ASSET_CREATION", - "payload": { + "params": { "asset_id": "697326324582", "asset_longname": null, "asset_name": "DIVISIBLE", @@ -1434,7 +1434,7 @@ { "event_index": 1231, "event": "CREDIT", - "payload": { + "params": { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", "asset": "A95428956661682277", "block_index": 310498, @@ -1449,7 +1449,7 @@ { "event_index": 1223, "event": "CREDIT", - "payload": { + "params": { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", "asset": "PARENT", "block_index": 310497, @@ -1464,7 +1464,7 @@ { "event_index": 1214, "event": "CREDIT", - "payload": { + "params": { "address": "mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj", "asset": "XCP", "block_index": 310496, @@ -1479,7 +1479,7 @@ { "event_index": 1207, "event": "CREDIT", - "payload": { + "params": { "address": "mqPCfvqTfYctXMUfmniXeG2nyaN8w6tPmj", "asset": "DIVIDEND", "block_index": 310495, @@ -1494,7 +1494,7 @@ { "event_index": 1201, "event": "CREDIT", - "payload": { + "params": { "address": "mnfAHmddVibnZNSkh8DvKaQoiEfNsxjXzH", "asset": "DIVIDEND", "block_index": 310494, diff --git a/counterparty-core/tools/apicache.json b/counterparty-core/tools/apicache.json index 0fc73ef18b..ced56dfecc 100644 --- a/counterparty-core/tools/apicache.json +++ b/counterparty-core/tools/apicache.json @@ -2184,7 +2184,7 @@ { "event_index": 14194760, "event": "BLOCK_PARSED", - "payload": { + "params": { "block_index": 840464, "ledger_hash": "b3f8cbb50b0705a5c4a8495f8b5128de13a32daebd8ac5e8316a010f0d203584", "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540", @@ -2194,7 +2194,7 @@ { "event_index": 14194759, "event": "TRANSACTION_PARSED", - "payload": { + "params": { "supported": true, "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "tx_index": 2726605 @@ -2203,7 +2203,7 @@ { "event_index": 14194758, "event": "CREDIT", - "payload": { + "params": { "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", "asset": "UNNEGOTIABLE", "block_index": 840464, @@ -2216,7 +2216,7 @@ { "event_index": 14194757, "event": "ASSET_ISSUANCE", - "payload": { + "params": { "asset": "UNNEGOTIABLE", "asset_longname": null, "block_index": 840464, @@ -2240,7 +2240,7 @@ { "event_index": 14194756, "event": "ASSET_CREATION", - "payload": { + "params": { "asset_id": "75313533584419238", "asset_longname": null, "asset_name": "UNNEGOTIABLE", @@ -2250,7 +2250,7 @@ { "event_index": 14194755, "event": "DEBIT", - "payload": { + "params": { "action": "issuance fee", "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", "asset": "XCP", @@ -2263,7 +2263,7 @@ { "event_index": 14194754, "event": "NEW_TRANSACTION", - "payload": { + "params": { "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", "block_index": 840464, "block_time": 1713852783, @@ -2279,7 +2279,7 @@ { "event_index": 14194753, "event": "NEW_BLOCK", - "payload": { + "params": { "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", "block_index": 840464, "block_time": 1713852783, @@ -2294,7 +2294,7 @@ { "event_index": 14194758, "event": "CREDIT", - "payload": { + "params": { "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", "asset": "UNNEGOTIABLE", "block_index": 840464, @@ -2311,7 +2311,7 @@ { "event_index": 10665092, "event": "TRANSACTION_PARSED", - "payload": { + "params": { "supported": true, "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", "tx_index": 2056160 @@ -2322,7 +2322,7 @@ { "event_index": 10665091, "event": "ENHANCED_SEND", - "payload": { + "params": { "asset": "THOTHPEPE", "block_index": 744232, "destination": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", @@ -2339,7 +2339,7 @@ { "event_index": 10665090, "event": "CREDIT", - "payload": { + "params": { "address": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", "asset": "THOTHPEPE", "block_index": 744232, @@ -2354,7 +2354,7 @@ { "event_index": 10665089, "event": "DEBIT", - "payload": { + "params": { "action": "send", "address": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", "asset": "THOTHPEPE", @@ -2369,7 +2369,7 @@ { "event_index": 10665088, "event": "TRANSACTION_PARSED", - "payload": { + "params": { "supported": true, "tx_hash": "bbb2dfa7e7a32288a702ef0091ece8b2a929f94fd967a18e6071cd9c2b085eaf", "tx_index": 2056159 @@ -2384,7 +2384,7 @@ { "event_index": 10665092, "event": "TRANSACTION_PARSED", - "payload": { + "params": { "supported": true, "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", "tx_index": 2056160 @@ -2399,7 +2399,7 @@ { "event_index": 10665090, "event": "CREDIT", - "payload": { + "params": { "address": "13re7J5Y5a8nZZSp8o1a3sEUqGik4NMXhS", "asset": "THOTHPEPE", "block_index": 744232, @@ -2414,7 +2414,7 @@ { "event_index": 10665085, "event": "CREDIT", - "payload": { + "params": { "address": "1LfDk3Ex9KPYS6L1WGwNdt1TvEg6Le8uq", "asset": "XCP", "block_index": 744232, @@ -2429,7 +2429,7 @@ { "event_index": 10665082, "event": "CREDIT", - "payload": { + "params": { "address": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", "asset": "FREEDOMKEK", "block_index": 744232, @@ -2444,7 +2444,7 @@ { "event_index": 10665078, "event": "CREDIT", - "payload": { + "params": { "address": "1P8nYZwLmecAkQUHsx2H9Nkxd51UJ2Asau", "asset": "PEPEFRIDAY", "block_index": 744232, @@ -2459,7 +2459,7 @@ { "event_index": 10665074, "event": "CREDIT", - "payload": { + "params": { "address": "1NzDQ7HLm6PqJ2Wy6jEKMT7Zw1UbtjUV5a", "asset": "PEPEFRIDAY", "block_index": 744232, From 9f686bf9f6e59b75466e50b2cd9847ef46334e27 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 26 Apr 2024 13:59:30 +0200 Subject: [PATCH 132/280] Add doc for encoding parameter --- apiary.apib | 604 +++++++++++++++++++-------- counterparty-core/tools/genapidoc.py | 45 +- 2 files changed, 478 insertions(+), 171 deletions(-) diff --git a/apiary.apib b/apiary.apib index 81b2b57862..72dd24d4a7 100644 --- a/apiary.apib +++ b/apiary.apib @@ -9,6 +9,7 @@ API routes are divided into 11 groups: - [`/blocks`](#/reference/blocks) - [`/transactions`](#/reference/transactions) - [`/addresses`](#/reference/addresses) +- [`/compose`](#/reference/compose) - [`/assets`](#/reference/assets) - [`/orders`](#/reference/orders) - [`/bets`](#/reference/bets) @@ -30,12 +31,12 @@ Notes: - All API responses follow the following format: - ``` + `` { "error": , "result": } - ``` + `` - Routes in the `/bitcoin` group serve as a proxy to make requests to Bitcoin Core. @@ -47,7 +48,7 @@ Returns server information and the list of documented routes in JSON format. + Response 200 (application/json) - ``` + `` { "server_ready": true, "network": "mainnet", @@ -58,7 +59,7 @@ Returns server information and the list of documented routes in JSON format. ] } - ``` + `` ## Group Blocks @@ -75,7 +76,7 @@ Returns the list of the last ten blocks + Response 200 (application/json) - ``` + `` { "result": [ { @@ -100,7 +101,7 @@ Returns the list of the last ten blocks } ] } - ``` + `` ### Get Block [GET /blocks/{block_index}] @@ -111,7 +112,7 @@ Return the information of a block + Response 200 (application/json) - ``` + `` { "result": { "block_index": 840464, @@ -124,7 +125,7 @@ Return the information of a block "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540" } } - ``` + `` ### Get Transactions By Block [GET /blocks/{block_index}/transactions] @@ -135,7 +136,7 @@ Returns the transactions of a block + Response 200 (application/json) - ``` + `` { "result": [ { @@ -153,7 +154,7 @@ Returns the transactions of a block } ] } - ``` + `` ### Get Events By Block [GET /blocks/{block_index}/events] @@ -164,7 +165,7 @@ Returns the events of a block + Response 200 (application/json) - ``` + `` { "result": [ { @@ -275,7 +276,7 @@ Returns the events of a block } ] } - ``` + `` ### Get Event Counts By Block [GET /blocks/{block_index}/events/counts] @@ -286,7 +287,7 @@ Returns the event counts of a block + Response 200 (application/json) - ``` + `` { "result": [ { @@ -323,7 +324,7 @@ Returns the event counts of a block } ] } - ``` + `` ### Get Events By Block And Event [GET /blocks/{block_index}/events/{event}] @@ -335,7 +336,7 @@ Returns the events of a block filtered by event + Response 200 (application/json) - ``` + `` { "result": [ { @@ -353,7 +354,7 @@ Returns the events of a block filtered by event } ] } - ``` + `` ### Get Credits By Block [GET /blocks/{block_index}/credits] @@ -364,7 +365,7 @@ Returns the credits of a block + Response 200 (application/json) - ``` + `` { "result": [ { @@ -378,7 +379,7 @@ Returns the credits of a block } ] } - ``` + `` ### Get Debits By Block [GET /blocks/{block_index}/debits] @@ -389,7 +390,7 @@ Returns the debits of a block + Response 200 (application/json) - ``` + `` { "result": [ { @@ -403,7 +404,7 @@ Returns the debits of a block } ] } - ``` + `` ### Get Expirations [GET /blocks/{block_index}/expirations] @@ -414,7 +415,7 @@ Returns the expirations of a block + Response 200 (application/json) - ``` + `` { "result": [ { @@ -427,7 +428,7 @@ Returns the expirations of a block } ] } - ``` + `` ### Get Cancels [GET /blocks/{block_index}/cancels] @@ -438,7 +439,7 @@ Returns the cancels of a block + Response 200 (application/json) - ``` + `` { "result": [ { @@ -459,7 +460,7 @@ Returns the cancels of a block } ] } - ``` + `` ### Get Destructions [GET /blocks/{block_index}/destructions] @@ -470,7 +471,7 @@ Returns the destructions of a block + Response 200 (application/json) - ``` + `` { "result": [ { @@ -485,7 +486,7 @@ Returns the destructions of a block } ] } - ``` + `` ### Get Issuances By Block [GET /blocks/{block_index}/issuances] @@ -496,7 +497,7 @@ Returns the issuances of a block + Response 200 (application/json) - ``` + `` { "result": [ { @@ -522,7 +523,7 @@ Returns the issuances of a block } ] } - ``` + `` ### Get Sends By Block [GET /blocks/{block_index}/sends{?limit}{?offset}] @@ -537,7 +538,7 @@ Returns the sends of a block + Response 200 (application/json) - ``` + `` { "result": [ { @@ -554,7 +555,7 @@ Returns the sends of a block } ] } - ``` + `` ### Get Dispenses By Block [GET /blocks/{block_index}/dispenses] @@ -565,7 +566,7 @@ Returns the dispenses of a block + Response 200 (application/json) - ``` + `` { "result": [ { @@ -581,7 +582,7 @@ Returns the dispenses of a block } ] } - ``` + `` ### Get Sweeps By Block [GET /blocks/{block_index}/sweeps] @@ -592,7 +593,7 @@ Returns the sweeps of a block + Response 200 (application/json) - ``` + `` { "result": [ { @@ -619,7 +620,7 @@ Returns the sweeps of a block } ] } - ``` + `` ## Group Transactions @@ -634,7 +635,7 @@ Returns Counterparty information from a raw transaction in hex format. + Response 200 (application/json) - ``` + `` { "result": { "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -662,7 +663,7 @@ Returns Counterparty information from a raw transaction in hex format. } } } - ``` + `` ### Unpack [GET /transactions/unpack{?datahex}{?block_index}] @@ -675,7 +676,7 @@ Unpacks Counterparty data in hex format and returns the message type and data. + Response 200 (application/json) - ``` + `` { "result": { "message_type": "issuance", @@ -696,7 +697,7 @@ Unpacks Counterparty data in hex format and returns the message type and data. } } } - ``` + `` ### Get Transaction By Hash [GET /transactions/{tx_hash}] @@ -707,7 +708,7 @@ Returns a transaction by its hash. + Response 200 (application/json) - ``` + `` { "result": { "tx_index": 2726605, @@ -741,7 +742,7 @@ Returns a transaction by its hash. } } } - ``` + `` ## Group Addresses @@ -754,7 +755,7 @@ Returns the balances of an address + Response 200 (application/json) - ``` + `` { "result": [ { @@ -764,7 +765,7 @@ Returns the balances of an address } ] } - ``` + `` ### Get Balance By Address And Asset [GET /addresses/{address}/balances/{asset}] @@ -776,7 +777,7 @@ Returns the balance of an address and asset + Response 200 (application/json) - ``` + `` { "result": { "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", @@ -784,7 +785,7 @@ Returns the balance of an address and asset "quantity": 104200000000 } } - ``` + `` ### Get Credits By Address [GET /addresses/{address}/credits{?limit}{?offset}] @@ -799,7 +800,7 @@ Returns the credits of an address + Response 200 (application/json) - ``` + `` { "result": [ { @@ -813,7 +814,7 @@ Returns the credits of an address } ] } - ``` + `` ### Get Debits By Address [GET /addresses/{address}/debits{?limit}{?offset}] @@ -828,7 +829,7 @@ Returns the debits of an address + Response 200 (application/json) - ``` + `` { "result": [ { @@ -851,7 +852,7 @@ Returns the debits of an address } ] } - ``` + `` ### Get Bet By Feed [GET /addresses/{address}/bets{?status}] @@ -864,7 +865,7 @@ Returns the bets of a feed + Response 200 (application/json) - ``` + `` { "result": [ { @@ -907,7 +908,7 @@ Returns the bets of a feed } ] } - ``` + `` ### Get Broadcasts By Source [GET /addresses/{address}/broadcasts{?status}{?order_by}] @@ -922,7 +923,7 @@ Returns the broadcasts of a source + Response 200 (application/json) - ``` + `` { "result": [ { @@ -951,7 +952,7 @@ Returns the broadcasts of a source } ] } - ``` + `` ### Get Burns By Address [GET /addresses/{address}/burns] @@ -962,7 +963,7 @@ Returns the burns of an address + Response 200 (application/json) - ``` + `` { "result": [ { @@ -976,7 +977,7 @@ Returns the burns of an address } ] } - ``` + `` ### Get Send By Address [GET /addresses/{address}/sends{?limit}{?offset}] @@ -991,7 +992,7 @@ Returns the sends of an address + Response 200 (application/json) - ``` + `` { "result": [ { @@ -1008,7 +1009,7 @@ Returns the sends of an address } ] } - ``` + `` ### Get Receive By Address [GET /addresses/{address}/receives{?limit}{?offset}] @@ -1023,7 +1024,7 @@ Returns the receives of an address + Response 200 (application/json) - ``` + `` { "result": [ { @@ -1040,7 +1041,7 @@ Returns the receives of an address } ] } - ``` + `` ### Get Send By Address And Asset [GET /addresses/{address}/sends/{asset}] @@ -1052,7 +1053,7 @@ Returns the sends of an address and asset + Response 200 (application/json) - ``` + `` { "result": [ { @@ -1069,7 +1070,7 @@ Returns the sends of an address and asset } ] } - ``` + `` ### Get Receive By Address And Asset [GET /addresses/{address}/receives/{asset}{?limit}{?offset}] @@ -1085,7 +1086,7 @@ Returns the receives of an address and asset + Response 200 (application/json) - ``` + `` { "result": [ { @@ -1102,7 +1103,7 @@ Returns the receives of an address and asset } ] } - ``` + `` ### Get Dispensers By Address [GET /addresses/{address}/dispensers{?status}] @@ -1115,7 +1116,7 @@ Returns the dispensers of an address + Response 200 (application/json) - ``` + `` { "result": [ { @@ -1136,7 +1137,7 @@ Returns the dispensers of an address } ] } - ``` + `` ### Get Dispensers By Address And Asset [GET /addresses/{address}/dispensers/{asset}{?status}] @@ -1150,7 +1151,7 @@ Returns the dispensers of an address and an asset + Response 200 (application/json) - ``` + `` { "result": [ { @@ -1171,7 +1172,7 @@ Returns the dispensers of an address and an asset } ] } - ``` + `` ### Get Sweeps By Address [GET /addresses/{address}/sweeps] @@ -1182,7 +1183,7 @@ Returns the sweeps of an address + Response 200 (application/json) - ``` + `` { "result": [ { @@ -1198,7 +1199,30 @@ Returns the sweeps of an address } ] } - ``` + `` + +## Group Compose + + +**Notes about optional parameter `encoding`.** + +By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: + +- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. + - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. +- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. + - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). +- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. +- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. + - First call the `create_` method with the `encoding` set to `P2SH`. + - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). + - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. + - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. + - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section + - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. + ### Compose Bet [GET /addresses/{address}/compose/bet{?feed_address}{?bet_type}{?deadline}{?wager_quantity}{?counterwager_quantity}{?expiration}{?leverage}{?target_value}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] @@ -1247,7 +1271,7 @@ Composes a transaction to issue a bet against a feed. + Response 200 (application/json) - ``` + `` { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0322020000000000001976a914bce6191bf2fd5981313cae869e9fafe164f7dbaf88ac0000000000000000316a2f0d1e454cefefcbe14dffa4c01ecd608ec45d2594e5d27c699f4ef2725648c509bf828ec195ee18f83e052061236deff2db0306000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", @@ -1265,7 +1289,28 @@ Composes a transaction to issue a bet against a feed. "name": "bet" } } - ``` + `` + + +**Notes about optional parameter `encoding`.** + +By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: + +- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. + - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. +- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. + - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). +- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. +- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. + - First call the `create_` method with the `encoding` set to `P2SH`. + - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). + - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. + - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. + - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section + - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. + ### Compose Broadcast [GET /addresses/{address}/compose/broadcast{?timestamp}{?value}{?fee_fraction}{?text}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] @@ -1308,7 +1353,7 @@ Composes a transaction to broadcast textual and numerical information to the net + Response 200 (application/json) - ``` + `` { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0200000000000000002b6a290d1e454cefefcbe17b1100cb21d3398ec45d2594e5d1d822df41d03a332741261ce2f9aee7827cd91c340c0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", @@ -1322,7 +1367,28 @@ Composes a transaction to broadcast textual and numerical information to the net "name": "broadcast" } } - ``` + `` + + +**Notes about optional parameter `encoding`.** + +By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: + +- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. + - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. +- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. + - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). +- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. +- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. + - First call the `create_` method with the `encoding` set to `P2SH`. + - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). + - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. + - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. + - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section + - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. + ### Compose BTCPay [GET /addresses/{address}/compose/btcpay{?order_match_id}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] @@ -1362,7 +1428,7 @@ Composes a transaction to pay for a BTC order match. + Response 200 (application/json) - ``` + `` { "result": { "rawtransaction": "0200000000010161101e1990879ee64168cce92c9caf338bb571e9cb246b1c2ab87124b95091900200000016001482f2ccc569325050e36c13b55a4065113d985066ffffffff0383c3040000000000160014a9943f67bcd30331d5a4ec6d902cbe03789a1b9700000000000000004b6a49aae396d448ed266a7785be1f6fcfa38dbe3e6e043e3d67691f678d6aa3b30e423f66ffad71eaf3231ef8f05dd5cc2f5b1ea14d33274b9cddacca5bd816a1ce6d5b4d498eb66a981db7add758000000000016001482f2ccc569325050e36c13b55a4065113d98506602000000000000", @@ -1373,7 +1439,28 @@ Composes a transaction to pay for a BTC order match. "name": "btcpay" } } - ``` + `` + + +**Notes about optional parameter `encoding`.** + +By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: + +- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. + - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. +- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. + - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). +- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. +- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. + - First call the `create_` method with the `encoding` set to `P2SH`. + - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). + - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. + - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. + - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section + - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. + ### Compose Burn [GET /addresses/{address}/compose/burn{?quantity}{?overburn}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] @@ -1415,7 +1502,7 @@ Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, poss + Response 200 (application/json) - ``` + `` { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff02e8030000000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ace61b0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", @@ -1427,7 +1514,28 @@ Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, poss "name": "burn" } } - ``` + `` + + +**Notes about optional parameter `encoding`.** + +By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: + +- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. + - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. +- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. + - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). +- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. +- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. + - First call the `create_` method with the `encoding` set to `P2SH`. + - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). + - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. + - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. + - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section + - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. + ### Compose Cancel [GET /addresses/{address}/compose/cancel{?offer_hash}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] @@ -1467,7 +1575,7 @@ Composes a transaction to cancel an open order or bet. + Response 200 (application/json) - ``` + `` { "result": { "rawtransaction": "01000000014709bd6af5d4d7f518f80539d4fe9acd5220a520a7b4287416a7379af9e66154020000001976a91432dff6deb7ca3bbc14f7037fa6ef8a8cf8e39fb988acffffffff0200000000000000002b6a292f3720d2b8ae7343c6d0456802c531e1216f466ceb12b96c6fbe417a97291a0660e51fc47fcc1ee1a878667900000000001976a91432dff6deb7ca3bbc14f7037fa6ef8a8cf8e39fb988ac00000000", @@ -1478,7 +1586,28 @@ Composes a transaction to cancel an open order or bet. "name": "cancel" } } - ``` + `` + + +**Notes about optional parameter `encoding`.** + +By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: + +- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. + - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. +- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. + - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). +- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. +- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. + - First call the `create_` method with the `encoding` set to `P2SH`. + - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). + - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. + - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. + - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section + - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. + ### Compose Destroy [GET /addresses/{address}/compose/destroy{?asset}{?quantity}{?tag}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] @@ -1520,7 +1649,7 @@ Composes a transaction to destroy a quantity of an asset. + Response 200 (application/json) - ``` + `` { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000226a200d1e454cefefcbe10bffa672ce93608ec55d2594e5d1946a776c900731380c6b94160406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", @@ -1533,7 +1662,28 @@ Composes a transaction to destroy a quantity of an asset. "name": "destroy" } } - ``` + `` + + +**Notes about optional parameter `encoding`.** + +By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: + +- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. + - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. +- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. + - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). +- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. +- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. + - First call the `create_` method with the `encoding` set to `P2SH`. + - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). + - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. + - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. + - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section + - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. + ### Compose Dispenser [GET /addresses/{address}/compose/dispenser{?asset}{?give_quantity}{?escrow_quantity}{?mainchainrate}{?status}{?open_address}{?oracle_address}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] @@ -1581,7 +1731,7 @@ Opens or closes a dispenser for a given asset at a given rate of main chain asse + Response 200 (application/json) - ``` + `` { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0200000000000000002c6a2a0d1e454cefefcbe169ffa672ce93608ec55d2594e5d1946a774ef272564b2d4ad8c28ec195ee18f85a160c0b0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", @@ -1598,7 +1748,28 @@ Opens or closes a dispenser for a given asset at a given rate of main chain asse "name": "dispenser" } } - ``` + `` + + +**Notes about optional parameter `encoding`.** + +By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: + +- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. + - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. +- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. + - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). +- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. +- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. + - First call the `create_` method with the `encoding` set to `P2SH`. + - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). + - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. + - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. + - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section + - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. + ### Compose Dividend [GET /addresses/{address}/compose/dividend{?quantity_per_unit}{?asset}{?dividend_asset}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] @@ -1640,7 +1811,7 @@ Composes a transaction to issue a dividend to holders of a given asset. + Response 200 (application/json) - ``` + `` { "result": { "rawtransaction": "01000000010af94458ae5aa794c49cd27f7b800a7c68c8dd4f59ff66c99db4e9e353c06d93010000001976a914a9055398b92818794b38b15794096f752167e25f88acffffffff020000000000000000236a21068a00268d252c3a8ed0bddb5ef79f823894aa7de1e196c005510f4d787c936a979b230000000000001976a914a9055398b92818794b38b15794096f752167e25f88ac00000000", @@ -1653,7 +1824,28 @@ Composes a transaction to issue a dividend to holders of a given asset. "name": "dividend" } } - ``` + `` + + +**Notes about optional parameter `encoding`.** + +By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: + +- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. + - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. +- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. + - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). +- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. +- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. + - First call the `create_` method with the `encoding` set to `P2SH`. + - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). + - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. + - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. + - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section + - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. + ### Compose Issuance [GET /addresses/{address}/compose/issuance{?asset}{?quantity}{?transfer_destination}{?divisible}{?lock}{?reset}{?description}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] @@ -1704,7 +1896,7 @@ Composes a transaction to Issue a new asset, issue more of an existing asset, lo + Response 200 (application/json) - ``` + `` { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0322020000000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac0000000000000000236a210d1e454cefefcbe173ffa672cf3a36751b5d2594e5d1946a774ff272960578057c17ec0306000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", @@ -1721,7 +1913,28 @@ Composes a transaction to Issue a new asset, issue more of an existing asset, lo "name": "issuance" } } - ``` + `` + + +**Notes about optional parameter `encoding`.** + +By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: + +- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. + - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. +- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. + - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). +- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. +- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. + - First call the `create_` method with the `encoding` set to `P2SH`. + - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). + - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. + - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. + - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section + - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. + ### Compose MPMA [GET /addresses/{address}/compose/mpma{?assets}{?destinations}{?quantities}{?memo}{?memo_is_hex}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] @@ -1765,7 +1978,7 @@ Composes a transaction to send multiple payments to multiple addresses. + Response 200 (application/json) - ``` + `` { "result": { "rawtransaction": "0100000001fc9b7b3a0552bdfc3c62096e9d7669fb72d5482c7b4f9618138fdffdc831d60b000000001976a914a39dbfab6f1da182af53a4d14799ee545a6176be88acffffffff04e80300000000000069512103ce014780415d0eafbdadfacfa0cf2604a005a87157042f277627c952eedcbb1f2103abf2b72459ee70e6240a7b2ade1a6fa41c7f38cc1db5e63c6f92c01b859017ee2102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53aee80300000000000069512102ce014780415d0eafbd2fcbf00e308d420b59df89ebba83369fea96a9a06fcf562102373ec5e1389ccadf0a972ec451f8aea015104ded7a57b936d374d0ecfe8067412102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53aee80300000000000069512103d0014780415d0eafbd76dacca0b613dda4b8f37e3015031f11220ac5cf43ef4e21034051b78cdcbde85f0c120261e6ab383015104ded7a57b93cd374d900776d4e132102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53ae22fd0200000000001976a914a39dbfab6f1da182af53a4d14799ee545a6176be88ac00000000", @@ -1794,7 +2007,28 @@ Composes a transaction to send multiple payments to multiple addresses. "name": "mpma" } } - ``` + `` + + +**Notes about optional parameter `encoding`.** + +By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: + +- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. + - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. +- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. + - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). +- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. +- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. + - First call the `create_` method with the `encoding` set to `P2SH`. + - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). + - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. + - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. + - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section + - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. + ### Compose Order [GET /addresses/{address}/compose/order{?give_asset}{?give_quantity}{?get_asset}{?get_quantity}{?expiration}{?fee_required}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] @@ -1839,7 +2073,7 @@ Composes a transaction to place an order on the distributed exchange. + Response 200 (application/json) - ``` + `` { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000356a330d1e454cefefcbe16fffa672ce93608ec55d2594e5d1946a774ef2724a2a4f457bc28ec195ee18fbd616f461236d8be718616dac000406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", @@ -1855,7 +2089,28 @@ Composes a transaction to place an order on the distributed exchange. "name": "order" } } - ``` + `` + + +**Notes about optional parameter `encoding`.** + +By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: + +- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. + - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. +- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. + - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). +- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. +- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. + - First call the `create_` method with the `encoding` set to `P2SH`. + - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). + - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. + - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. + - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section + - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. + ### Compose Send [GET /addresses/{address}/compose/send{?destination}{?asset}{?quantity}{?memo}{?memo_is_hex}{?use_enhanced_send}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] @@ -1903,7 +2158,7 @@ Composes a transaction to send a quantity of an asset to another address. + Response 200 (application/json) - ``` + `` { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000306a2e0d1e454cefefcbe167ffa672ce93608ec55d2594e5d1946a774e4e944f50dfb46943bffd3b68866791f7f496f8c270060406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", @@ -1919,7 +2174,28 @@ Composes a transaction to send a quantity of an asset to another address. "name": "send" } } - ``` + `` + + +**Notes about optional parameter `encoding`.** + +By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: + +- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. + - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. +- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. + - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). +- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. +- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. + - First call the `create_` method with the `encoding` set to `P2SH`. + - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). + - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. + - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. + - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section + - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. + ### Compose Sweep [GET /addresses/{address}/compose/sweep{?destination}{?flags}{?memo}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] @@ -1961,7 +2237,7 @@ Composes a transaction to Sends all assets and/or transfer ownerships to a desti + Response 200 (application/json) - ``` + `` { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000236a210d1e454cefefcbe161ff1a94d78892739ddc14a84b570af630af96858de42ab6cf6e150406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", @@ -1974,7 +2250,7 @@ Composes a transaction to Sends all assets and/or transfer ownerships to a desti "name": "sweep" } } - ``` + `` ## Group Assets @@ -1990,7 +2266,7 @@ Returns the valid assets + Response 200 (application/json) - ``` + `` { "result": [ { @@ -2015,7 +2291,7 @@ Returns the valid assets } ] } - ``` + `` ### Get Asset Info [GET /assets/{asset}] @@ -2026,7 +2302,7 @@ Returns the asset information + Response 200 (application/json) - ``` + `` { "result": { "asset": "UNNEGOTIABLE", @@ -2040,7 +2316,7 @@ Returns the asset information "holder_count": 1 } } - ``` + `` ### Get Asset Balances [GET /assets/{asset}/balances{?exclude_zero_balances}] @@ -2053,7 +2329,7 @@ Returns the asset balances + Response 200 (application/json) - ``` + `` { "result": [ { @@ -2063,7 +2339,7 @@ Returns the asset balances } ] } - ``` + `` ### Get Balance By Address And Asset [GET /assets/{asset}/balances/{address}] @@ -2075,7 +2351,7 @@ Returns the balance of an address and asset + Response 200 (application/json) - ``` + `` { "result": { "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", @@ -2083,7 +2359,7 @@ Returns the balance of an address and asset "quantity": 104200000000 } } - ``` + `` ### Get Orders By Asset [GET /assets/{asset}/orders{?status}] @@ -2096,7 +2372,7 @@ Returns the orders of an asset + Response 200 (application/json) - ``` + `` { "result": [ { @@ -2310,7 +2586,7 @@ Returns the orders of an asset } ] } - ``` + `` ### Get Credits By Asset [GET /assets/{asset}/credits{?limit}{?offset}] @@ -2325,7 +2601,7 @@ Returns the credits of an asset + Response 200 (application/json) - ``` + `` { "result": [ { @@ -2339,7 +2615,7 @@ Returns the credits of an asset } ] } - ``` + `` ### Get Debits By Asset [GET /assets/{asset}/debits{?limit}{?offset}] @@ -2354,7 +2630,7 @@ Returns the debits of an asset + Response 200 (application/json) - ``` + `` { "result": [ { @@ -2404,7 +2680,7 @@ Returns the debits of an asset } ] } - ``` + `` ### Get Dividends [GET /assets/{asset}/dividends] @@ -2415,7 +2691,7 @@ Returns the dividends of an asset + Response 200 (application/json) - ``` + `` { "result": [ { @@ -2552,7 +2828,7 @@ Returns the dividends of an asset } ] } - ``` + `` ### Get Issuances By Asset [GET /assets/{asset}/issuances] @@ -2563,7 +2839,7 @@ Returns the issuances of an asset + Response 200 (application/json) - ``` + `` { "result": [ { @@ -2589,7 +2865,7 @@ Returns the issuances of an asset } ] } - ``` + `` ### Get Sends By Asset [GET /assets/{asset}/sends{?limit}{?offset}] @@ -2604,7 +2880,7 @@ Returns the sends of an asset + Response 200 (application/json) - ``` + `` { "result": [ { @@ -2669,7 +2945,7 @@ Returns the sends of an asset } ] } - ``` + `` ### Get Dispensers By Asset [GET /assets/{asset}/dispensers{?status}] @@ -2682,7 +2958,7 @@ Returns the dispensers of an asset + Response 200 (application/json) - ``` + `` { "result": [ { @@ -2703,7 +2979,7 @@ Returns the dispensers of an asset } ] } - ``` + `` ### Get Dispensers By Address And Asset [GET /assets/{asset}/dispensers/{address}{?status}] @@ -2717,7 +2993,7 @@ Returns the dispensers of an address and an asset + Response 200 (application/json) - ``` + `` { "result": [ { @@ -2738,7 +3014,7 @@ Returns the dispensers of an address and an asset } ] } - ``` + `` ### Get Asset Holders [GET /assets/{asset}/holders] @@ -2749,7 +3025,7 @@ Returns the holders of an asset + Response 200 (application/json) - ``` + `` { "result": [ { @@ -2794,7 +3070,7 @@ Returns the holders of an asset } ] } - ``` + `` ## Group Orders @@ -2807,7 +3083,7 @@ Returns the information of an order + Response 200 (application/json) - ``` + `` { "result": [ { @@ -2831,7 +3107,7 @@ Returns the information of an order } ] } - ``` + `` ### Get Order Matches By Order [GET /orders/{order_hash}/matches{?status}] @@ -2844,7 +3120,7 @@ Returns the order matches of an order + Response 200 (application/json) - ``` + `` { "result": [ { @@ -2870,7 +3146,7 @@ Returns the order matches of an order } ] } - ``` + `` ### Get BTCPays By Order [GET /orders/{order_hash}/btcpays] @@ -2881,7 +3157,7 @@ Returns the BTC pays of an order + Response 200 (application/json) - ``` + `` { "result": [ { @@ -2896,7 +3172,7 @@ Returns the BTC pays of an order } ] } - ``` + `` ## Group Bets @@ -2909,7 +3185,7 @@ Returns the information of a bet + Response 200 (application/json) - ``` + `` { "result": [ { @@ -2933,7 +3209,7 @@ Returns the information of a bet } ] } - ``` + `` ### Get Bet Matches By Bet [GET /bets/{bet_hash}/matches{?status}] @@ -2946,7 +3222,7 @@ Returns the bet matches of a bet + Response 200 (application/json) - ``` + `` { "result": [ { @@ -2977,7 +3253,7 @@ Returns the bet matches of a bet } ] } - ``` + `` ### Get Resolutions By Bet [GET /bets/{bet_hash}/resolutions] @@ -2988,7 +3264,7 @@ Returns the resolutions of a bet + Response 200 (application/json) - ``` + `` { "result": [ { @@ -3004,7 +3280,7 @@ Returns the resolutions of a bet } ] } - ``` + `` ## Group Burns @@ -3022,7 +3298,7 @@ Returns the burns + Response 200 (application/json) - ``` + `` { "result": [ { @@ -3072,7 +3348,7 @@ Returns the burns } ] } - ``` + `` ## Group Dispensers @@ -3085,7 +3361,7 @@ Returns the dispenser information by tx_hash + Response 200 (application/json) - ``` + `` { "result": [ { @@ -3107,7 +3383,7 @@ Returns the dispenser information by tx_hash } ] } - ``` + `` ### Get Dispenses By Dispenser [GET /dispensers/{dispenser_hash}/dispenses] @@ -3118,7 +3394,7 @@ Returns the dispenses of a dispenser + Response 200 (application/json) - ``` + `` { "result": [ { @@ -3145,7 +3421,7 @@ Returns the dispenses of a dispenser } ] } - ``` + `` ## Group Events @@ -3161,7 +3437,7 @@ Returns all events + Response 200 (application/json) - ``` + `` { "result": [ { @@ -3235,7 +3511,7 @@ Returns all events } ] } - ``` + `` ### Get Event By Index [GET /events/{event_index}] @@ -3246,7 +3522,7 @@ Returns the event of an index + Response 200 (application/json) - ``` + `` { "result": [ { @@ -3262,14 +3538,14 @@ Returns the event of an index } ] } - ``` + `` ### Get All Events Counts [GET /events/counts] Returns the event counts of all blocks + Response 200 (application/json) - ``` + `` { "result": [ { @@ -3462,7 +3738,7 @@ Returns the event counts of all blocks } ] } - ``` + `` ### Get Events By Name [GET /events/{event}{?last}{?limit}] @@ -3477,7 +3753,7 @@ Returns the events filtered by event name + Response 200 (application/json) - ``` + `` { "result": [ { @@ -3557,7 +3833,7 @@ Returns the events filtered by event name } ] } - ``` + `` ## Group Z-pages @@ -3571,13 +3847,13 @@ Health check route. + Response 200 (application/json) - ``` + `` { "result": { "status": "Healthy" } } - ``` + `` ## Group Bitcoin @@ -3594,7 +3870,7 @@ Returns all transactions involving a given address + Response 200 (application/json) - ``` + `` { "result": [ { @@ -3635,7 +3911,7 @@ Returns all transactions involving a given address } ] } - ``` + `` ### Get Oldest Transaction By Address [GET /bitcoin/addresses/{address}/transactions/oldest{?block_index}] @@ -3648,14 +3924,14 @@ Get the oldest transaction for an address. + Response 200 (application/json) - ``` + `` { "result": { "block_index": 833187, "tx_hash": "2c8bc3eede9ec60d26c6fd7f44829adc64da593552044a28c673022220f560c3" } } - ``` + `` ### Get Unspent Txouts [GET /bitcoin/addresses/{address}/utxos{?unconfirmed}{?unspent_tx_hash}] @@ -3670,7 +3946,7 @@ Returns a list of unspent outputs for a specific address + Response 200 (application/json) - ``` + `` { "result": [ { @@ -3755,7 +4031,7 @@ Returns a list of unspent outputs for a specific address } ] } - ``` + `` ### PubKeyHash To Pubkey [GET /bitcoin/addresses/{address}/pubkey{?provided_pubkeys}] @@ -3768,11 +4044,11 @@ Get pubkey for an address. + Response 200 (application/json) - ``` + `` { "result": "0388ef0905568d425f1ffd4031d93dda4ef0e220c9b5fc4a6cbaf11544c4a5ca49" } - ``` + `` ### Get Transaction [GET /bitcoin/transactions/{tx_hash}{?verbose}] @@ -3785,7 +4061,7 @@ Get a transaction from the blockchain + Response 200 (application/json) - ``` + `` { "result": { "txid": "3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018", @@ -3830,7 +4106,7 @@ Get a transaction from the blockchain "blocktime": 1713951767 } } - ``` + `` ### Fee Per Kb [GET /bitcoin/estimatesmartfee{?conf_target}{?mode}] @@ -3844,11 +4120,11 @@ Get the fee per kilobyte for a transaction to be confirmed in `conf_target` bloc + Response 200 (application/json) - ``` + `` { "result": 295443 } - ``` + `` ## Group Mempool @@ -3857,11 +4133,11 @@ Get the fee per kilobyte for a transaction to be confirmed in `conf_target` bloc Returns all mempool events + Response 200 (application/json) - ``` + `` { "result": [] } - ``` + `` ### Get Mempool Events By Name [GET /mempool/events/{event}] @@ -3872,8 +4148,8 @@ Returns the mempool events filtered by event name + Response 200 (application/json) - ``` + `` { "result": [] } - ``` + `` diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index e1e56c14e2..b3a38717ed 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -41,6 +41,7 @@ def get_example_output(path, args): "/blocks", "/transactions", "/addresses", + "/compose", "/assets", "/orders", "/bets", @@ -51,6 +52,31 @@ def get_example_output(path, args): "/bitcoin", ] +GROUP_DOCS = { + "Compose": """ + +**Notes about optional parameter `encoding`.** + +By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: + +- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. + - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. +- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. + - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). +- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. + - `pubkey` should be set to the hex-encoded public key of the source address. +- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. + - First call the `create_` method with the `encoding` set to `P2SH`. + - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). + - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. + - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. + - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section + - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. + +""" +} + def gen_groups_toc(): toc = "" @@ -96,12 +122,12 @@ def gen_groups_toc(): - All API responses follow the following format: - ``` + `` { "error": , "result": } - ``` + `` - Routes in the `/bitcoin` group serve as a proxy to make requests to Bitcoin Core. @@ -113,7 +139,7 @@ def gen_groups_toc(): + Response 200 (application/json) - ``` + `` { "server_ready": true, "network": "mainnet", @@ -124,7 +150,7 @@ def gen_groups_toc(): ] } - ``` + `` """ md = md.replace("{root_path}", root_path) @@ -137,13 +163,18 @@ def gen_groups_toc(): current_group = None for path, route in server.routes.ROUTES.items(): route_group = path.split("/")[1] + if "compose" in path: + route_group = "Compose" if route_group != current_group: current_group = route_group if current_group == "healthz": current_group = "Z-Pages" md += f"\n## Group {current_group.capitalize()}\n" - blueprint_path = path.replace("<", "{").replace(">", "}").replace("int:", "") + if current_group in GROUP_DOCS: + md += GROUP_DOCS[current_group] + + blueprint_path = path.replace("<", "{").replace(">", "}").replace("int:", "") title = " ".join([part.capitalize() for part in str(route["function"].__name__).split("_")]) title = title.replace("Pubkeyhash", "PubKeyHash") title = title.replace("Mpma", "MPMA") @@ -185,10 +216,10 @@ def gen_groups_toc(): example_output = cache[path] example_output_json = json.dumps(example_output, indent=4) md += "\n+ Response 200 (application/json)\n\n" - md += " ```\n" + md += " ``\n" for line in example_output_json.split("\n"): md += f" {line}\n" - md += " ```\n" + md += " ``\n" with open(CACHE_FILE, "w") as f: json.dump(cache, f, indent=4) From 6b2d0090014db03918e37b6b0103f1de545dcf2f Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 26 Apr 2024 14:02:25 +0200 Subject: [PATCH 133/280] fix typos --- apiary.apib | 328 +++++++++++++-------------- counterparty-core/tools/genapidoc.py | 12 +- 2 files changed, 170 insertions(+), 170 deletions(-) diff --git a/apiary.apib b/apiary.apib index 72dd24d4a7..d439534b0c 100644 --- a/apiary.apib +++ b/apiary.apib @@ -31,12 +31,12 @@ Notes: - All API responses follow the following format: - `` + ``` { "error": , "result": } - `` + ``` - Routes in the `/bitcoin` group serve as a proxy to make requests to Bitcoin Core. @@ -48,7 +48,7 @@ Returns server information and the list of documented routes in JSON format. + Response 200 (application/json) - `` + ``` { "server_ready": true, "network": "mainnet", @@ -59,7 +59,7 @@ Returns server information and the list of documented routes in JSON format. ] } - `` + ``` ## Group Blocks @@ -76,7 +76,7 @@ Returns the list of the last ten blocks + Response 200 (application/json) - `` + ``` { "result": [ { @@ -101,7 +101,7 @@ Returns the list of the last ten blocks } ] } - `` + ``` ### Get Block [GET /blocks/{block_index}] @@ -112,7 +112,7 @@ Return the information of a block + Response 200 (application/json) - `` + ``` { "result": { "block_index": 840464, @@ -125,7 +125,7 @@ Return the information of a block "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540" } } - `` + ``` ### Get Transactions By Block [GET /blocks/{block_index}/transactions] @@ -136,7 +136,7 @@ Returns the transactions of a block + Response 200 (application/json) - `` + ``` { "result": [ { @@ -154,7 +154,7 @@ Returns the transactions of a block } ] } - `` + ``` ### Get Events By Block [GET /blocks/{block_index}/events] @@ -165,7 +165,7 @@ Returns the events of a block + Response 200 (application/json) - `` + ``` { "result": [ { @@ -276,7 +276,7 @@ Returns the events of a block } ] } - `` + ``` ### Get Event Counts By Block [GET /blocks/{block_index}/events/counts] @@ -287,7 +287,7 @@ Returns the event counts of a block + Response 200 (application/json) - `` + ``` { "result": [ { @@ -324,7 +324,7 @@ Returns the event counts of a block } ] } - `` + ``` ### Get Events By Block And Event [GET /blocks/{block_index}/events/{event}] @@ -336,7 +336,7 @@ Returns the events of a block filtered by event + Response 200 (application/json) - `` + ``` { "result": [ { @@ -354,7 +354,7 @@ Returns the events of a block filtered by event } ] } - `` + ``` ### Get Credits By Block [GET /blocks/{block_index}/credits] @@ -365,7 +365,7 @@ Returns the credits of a block + Response 200 (application/json) - `` + ``` { "result": [ { @@ -379,7 +379,7 @@ Returns the credits of a block } ] } - `` + ``` ### Get Debits By Block [GET /blocks/{block_index}/debits] @@ -390,7 +390,7 @@ Returns the debits of a block + Response 200 (application/json) - `` + ``` { "result": [ { @@ -404,7 +404,7 @@ Returns the debits of a block } ] } - `` + ``` ### Get Expirations [GET /blocks/{block_index}/expirations] @@ -415,7 +415,7 @@ Returns the expirations of a block + Response 200 (application/json) - `` + ``` { "result": [ { @@ -428,7 +428,7 @@ Returns the expirations of a block } ] } - `` + ``` ### Get Cancels [GET /blocks/{block_index}/cancels] @@ -439,7 +439,7 @@ Returns the cancels of a block + Response 200 (application/json) - `` + ``` { "result": [ { @@ -460,7 +460,7 @@ Returns the cancels of a block } ] } - `` + ``` ### Get Destructions [GET /blocks/{block_index}/destructions] @@ -471,7 +471,7 @@ Returns the destructions of a block + Response 200 (application/json) - `` + ``` { "result": [ { @@ -486,7 +486,7 @@ Returns the destructions of a block } ] } - `` + ``` ### Get Issuances By Block [GET /blocks/{block_index}/issuances] @@ -497,7 +497,7 @@ Returns the issuances of a block + Response 200 (application/json) - `` + ``` { "result": [ { @@ -523,7 +523,7 @@ Returns the issuances of a block } ] } - `` + ``` ### Get Sends By Block [GET /blocks/{block_index}/sends{?limit}{?offset}] @@ -538,7 +538,7 @@ Returns the sends of a block + Response 200 (application/json) - `` + ``` { "result": [ { @@ -555,7 +555,7 @@ Returns the sends of a block } ] } - `` + ``` ### Get Dispenses By Block [GET /blocks/{block_index}/dispenses] @@ -566,7 +566,7 @@ Returns the dispenses of a block + Response 200 (application/json) - `` + ``` { "result": [ { @@ -582,7 +582,7 @@ Returns the dispenses of a block } ] } - `` + ``` ### Get Sweeps By Block [GET /blocks/{block_index}/sweeps] @@ -593,7 +593,7 @@ Returns the sweeps of a block + Response 200 (application/json) - `` + ``` { "result": [ { @@ -620,7 +620,7 @@ Returns the sweeps of a block } ] } - `` + ``` ## Group Transactions @@ -635,7 +635,7 @@ Returns Counterparty information from a raw transaction in hex format. + Response 200 (application/json) - `` + ``` { "result": { "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -663,7 +663,7 @@ Returns Counterparty information from a raw transaction in hex format. } } } - `` + ``` ### Unpack [GET /transactions/unpack{?datahex}{?block_index}] @@ -676,7 +676,7 @@ Unpacks Counterparty data in hex format and returns the message type and data. + Response 200 (application/json) - `` + ``` { "result": { "message_type": "issuance", @@ -697,7 +697,7 @@ Unpacks Counterparty data in hex format and returns the message type and data. } } } - `` + ``` ### Get Transaction By Hash [GET /transactions/{tx_hash}] @@ -708,7 +708,7 @@ Returns a transaction by its hash. + Response 200 (application/json) - `` + ``` { "result": { "tx_index": 2726605, @@ -742,7 +742,7 @@ Returns a transaction by its hash. } } } - `` + ``` ## Group Addresses @@ -755,7 +755,7 @@ Returns the balances of an address + Response 200 (application/json) - `` + ``` { "result": [ { @@ -765,7 +765,7 @@ Returns the balances of an address } ] } - `` + ``` ### Get Balance By Address And Asset [GET /addresses/{address}/balances/{asset}] @@ -777,7 +777,7 @@ Returns the balance of an address and asset + Response 200 (application/json) - `` + ``` { "result": { "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", @@ -785,7 +785,7 @@ Returns the balance of an address and asset "quantity": 104200000000 } } - `` + ``` ### Get Credits By Address [GET /addresses/{address}/credits{?limit}{?offset}] @@ -800,7 +800,7 @@ Returns the credits of an address + Response 200 (application/json) - `` + ``` { "result": [ { @@ -814,7 +814,7 @@ Returns the credits of an address } ] } - `` + ``` ### Get Debits By Address [GET /addresses/{address}/debits{?limit}{?offset}] @@ -829,7 +829,7 @@ Returns the debits of an address + Response 200 (application/json) - `` + ``` { "result": [ { @@ -852,7 +852,7 @@ Returns the debits of an address } ] } - `` + ``` ### Get Bet By Feed [GET /addresses/{address}/bets{?status}] @@ -865,7 +865,7 @@ Returns the bets of a feed + Response 200 (application/json) - `` + ``` { "result": [ { @@ -908,7 +908,7 @@ Returns the bets of a feed } ] } - `` + ``` ### Get Broadcasts By Source [GET /addresses/{address}/broadcasts{?status}{?order_by}] @@ -923,7 +923,7 @@ Returns the broadcasts of a source + Response 200 (application/json) - `` + ``` { "result": [ { @@ -952,7 +952,7 @@ Returns the broadcasts of a source } ] } - `` + ``` ### Get Burns By Address [GET /addresses/{address}/burns] @@ -963,7 +963,7 @@ Returns the burns of an address + Response 200 (application/json) - `` + ``` { "result": [ { @@ -977,7 +977,7 @@ Returns the burns of an address } ] } - `` + ``` ### Get Send By Address [GET /addresses/{address}/sends{?limit}{?offset}] @@ -992,7 +992,7 @@ Returns the sends of an address + Response 200 (application/json) - `` + ``` { "result": [ { @@ -1009,7 +1009,7 @@ Returns the sends of an address } ] } - `` + ``` ### Get Receive By Address [GET /addresses/{address}/receives{?limit}{?offset}] @@ -1024,7 +1024,7 @@ Returns the receives of an address + Response 200 (application/json) - `` + ``` { "result": [ { @@ -1041,7 +1041,7 @@ Returns the receives of an address } ] } - `` + ``` ### Get Send By Address And Asset [GET /addresses/{address}/sends/{asset}] @@ -1053,7 +1053,7 @@ Returns the sends of an address and asset + Response 200 (application/json) - `` + ``` { "result": [ { @@ -1070,7 +1070,7 @@ Returns the sends of an address and asset } ] } - `` + ``` ### Get Receive By Address And Asset [GET /addresses/{address}/receives/{asset}{?limit}{?offset}] @@ -1086,7 +1086,7 @@ Returns the receives of an address and asset + Response 200 (application/json) - `` + ``` { "result": [ { @@ -1103,7 +1103,7 @@ Returns the receives of an address and asset } ] } - `` + ``` ### Get Dispensers By Address [GET /addresses/{address}/dispensers{?status}] @@ -1116,7 +1116,7 @@ Returns the dispensers of an address + Response 200 (application/json) - `` + ``` { "result": [ { @@ -1137,7 +1137,7 @@ Returns the dispensers of an address } ] } - `` + ``` ### Get Dispensers By Address And Asset [GET /addresses/{address}/dispensers/{asset}{?status}] @@ -1151,7 +1151,7 @@ Returns the dispensers of an address and an asset + Response 200 (application/json) - `` + ``` { "result": [ { @@ -1172,7 +1172,7 @@ Returns the dispensers of an address and an asset } ] } - `` + ``` ### Get Sweeps By Address [GET /addresses/{address}/sweeps] @@ -1183,7 +1183,7 @@ Returns the sweeps of an address + Response 200 (application/json) - `` + ``` { "result": [ { @@ -1199,7 +1199,7 @@ Returns the sweeps of an address } ] } - `` + ``` ## Group Compose @@ -1271,7 +1271,7 @@ Composes a transaction to issue a bet against a feed. + Response 200 (application/json) - `` + ``` { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0322020000000000001976a914bce6191bf2fd5981313cae869e9fafe164f7dbaf88ac0000000000000000316a2f0d1e454cefefcbe14dffa4c01ecd608ec45d2594e5d27c699f4ef2725648c509bf828ec195ee18f83e052061236deff2db0306000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", @@ -1289,7 +1289,7 @@ Composes a transaction to issue a bet against a feed. "name": "bet" } } - `` + ``` **Notes about optional parameter `encoding`.** @@ -1353,7 +1353,7 @@ Composes a transaction to broadcast textual and numerical information to the net + Response 200 (application/json) - `` + ``` { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0200000000000000002b6a290d1e454cefefcbe17b1100cb21d3398ec45d2594e5d1d822df41d03a332741261ce2f9aee7827cd91c340c0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", @@ -1367,7 +1367,7 @@ Composes a transaction to broadcast textual and numerical information to the net "name": "broadcast" } } - `` + ``` **Notes about optional parameter `encoding`.** @@ -1428,7 +1428,7 @@ Composes a transaction to pay for a BTC order match. + Response 200 (application/json) - `` + ``` { "result": { "rawtransaction": "0200000000010161101e1990879ee64168cce92c9caf338bb571e9cb246b1c2ab87124b95091900200000016001482f2ccc569325050e36c13b55a4065113d985066ffffffff0383c3040000000000160014a9943f67bcd30331d5a4ec6d902cbe03789a1b9700000000000000004b6a49aae396d448ed266a7785be1f6fcfa38dbe3e6e043e3d67691f678d6aa3b30e423f66ffad71eaf3231ef8f05dd5cc2f5b1ea14d33274b9cddacca5bd816a1ce6d5b4d498eb66a981db7add758000000000016001482f2ccc569325050e36c13b55a4065113d98506602000000000000", @@ -1439,7 +1439,7 @@ Composes a transaction to pay for a BTC order match. "name": "btcpay" } } - `` + ``` **Notes about optional parameter `encoding`.** @@ -1502,7 +1502,7 @@ Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, poss + Response 200 (application/json) - `` + ``` { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff02e8030000000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ace61b0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", @@ -1514,7 +1514,7 @@ Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, poss "name": "burn" } } - `` + ``` **Notes about optional parameter `encoding`.** @@ -1575,7 +1575,7 @@ Composes a transaction to cancel an open order or bet. + Response 200 (application/json) - `` + ``` { "result": { "rawtransaction": "01000000014709bd6af5d4d7f518f80539d4fe9acd5220a520a7b4287416a7379af9e66154020000001976a91432dff6deb7ca3bbc14f7037fa6ef8a8cf8e39fb988acffffffff0200000000000000002b6a292f3720d2b8ae7343c6d0456802c531e1216f466ceb12b96c6fbe417a97291a0660e51fc47fcc1ee1a878667900000000001976a91432dff6deb7ca3bbc14f7037fa6ef8a8cf8e39fb988ac00000000", @@ -1586,7 +1586,7 @@ Composes a transaction to cancel an open order or bet. "name": "cancel" } } - `` + ``` **Notes about optional parameter `encoding`.** @@ -1649,7 +1649,7 @@ Composes a transaction to destroy a quantity of an asset. + Response 200 (application/json) - `` + ``` { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000226a200d1e454cefefcbe10bffa672ce93608ec55d2594e5d1946a776c900731380c6b94160406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", @@ -1662,7 +1662,7 @@ Composes a transaction to destroy a quantity of an asset. "name": "destroy" } } - `` + ``` **Notes about optional parameter `encoding`.** @@ -1731,7 +1731,7 @@ Opens or closes a dispenser for a given asset at a given rate of main chain asse + Response 200 (application/json) - `` + ``` { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0200000000000000002c6a2a0d1e454cefefcbe169ffa672ce93608ec55d2594e5d1946a774ef272564b2d4ad8c28ec195ee18f85a160c0b0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", @@ -1748,7 +1748,7 @@ Opens or closes a dispenser for a given asset at a given rate of main chain asse "name": "dispenser" } } - `` + ``` **Notes about optional parameter `encoding`.** @@ -1811,7 +1811,7 @@ Composes a transaction to issue a dividend to holders of a given asset. + Response 200 (application/json) - `` + ``` { "result": { "rawtransaction": "01000000010af94458ae5aa794c49cd27f7b800a7c68c8dd4f59ff66c99db4e9e353c06d93010000001976a914a9055398b92818794b38b15794096f752167e25f88acffffffff020000000000000000236a21068a00268d252c3a8ed0bddb5ef79f823894aa7de1e196c005510f4d787c936a979b230000000000001976a914a9055398b92818794b38b15794096f752167e25f88ac00000000", @@ -1824,7 +1824,7 @@ Composes a transaction to issue a dividend to holders of a given asset. "name": "dividend" } } - `` + ``` **Notes about optional parameter `encoding`.** @@ -1896,7 +1896,7 @@ Composes a transaction to Issue a new asset, issue more of an existing asset, lo + Response 200 (application/json) - `` + ``` { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0322020000000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac0000000000000000236a210d1e454cefefcbe173ffa672cf3a36751b5d2594e5d1946a774ff272960578057c17ec0306000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", @@ -1913,7 +1913,7 @@ Composes a transaction to Issue a new asset, issue more of an existing asset, lo "name": "issuance" } } - `` + ``` **Notes about optional parameter `encoding`.** @@ -1978,7 +1978,7 @@ Composes a transaction to send multiple payments to multiple addresses. + Response 200 (application/json) - `` + ``` { "result": { "rawtransaction": "0100000001fc9b7b3a0552bdfc3c62096e9d7669fb72d5482c7b4f9618138fdffdc831d60b000000001976a914a39dbfab6f1da182af53a4d14799ee545a6176be88acffffffff04e80300000000000069512103ce014780415d0eafbdadfacfa0cf2604a005a87157042f277627c952eedcbb1f2103abf2b72459ee70e6240a7b2ade1a6fa41c7f38cc1db5e63c6f92c01b859017ee2102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53aee80300000000000069512102ce014780415d0eafbd2fcbf00e308d420b59df89ebba83369fea96a9a06fcf562102373ec5e1389ccadf0a972ec451f8aea015104ded7a57b936d374d0ecfe8067412102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53aee80300000000000069512103d0014780415d0eafbd76dacca0b613dda4b8f37e3015031f11220ac5cf43ef4e21034051b78cdcbde85f0c120261e6ab383015104ded7a57b93cd374d900776d4e132102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53ae22fd0200000000001976a914a39dbfab6f1da182af53a4d14799ee545a6176be88ac00000000", @@ -2007,7 +2007,7 @@ Composes a transaction to send multiple payments to multiple addresses. "name": "mpma" } } - `` + ``` **Notes about optional parameter `encoding`.** @@ -2073,7 +2073,7 @@ Composes a transaction to place an order on the distributed exchange. + Response 200 (application/json) - `` + ``` { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000356a330d1e454cefefcbe16fffa672ce93608ec55d2594e5d1946a774ef2724a2a4f457bc28ec195ee18fbd616f461236d8be718616dac000406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", @@ -2089,7 +2089,7 @@ Composes a transaction to place an order on the distributed exchange. "name": "order" } } - `` + ``` **Notes about optional parameter `encoding`.** @@ -2158,7 +2158,7 @@ Composes a transaction to send a quantity of an asset to another address. + Response 200 (application/json) - `` + ``` { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000306a2e0d1e454cefefcbe167ffa672ce93608ec55d2594e5d1946a774e4e944f50dfb46943bffd3b68866791f7f496f8c270060406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", @@ -2174,7 +2174,7 @@ Composes a transaction to send a quantity of an asset to another address. "name": "send" } } - `` + ``` **Notes about optional parameter `encoding`.** @@ -2237,7 +2237,7 @@ Composes a transaction to Sends all assets and/or transfer ownerships to a desti + Response 200 (application/json) - `` + ``` { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000236a210d1e454cefefcbe161ff1a94d78892739ddc14a84b570af630af96858de42ab6cf6e150406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", @@ -2250,7 +2250,7 @@ Composes a transaction to Sends all assets and/or transfer ownerships to a desti "name": "sweep" } } - `` + ``` ## Group Assets @@ -2266,7 +2266,7 @@ Returns the valid assets + Response 200 (application/json) - `` + ``` { "result": [ { @@ -2291,7 +2291,7 @@ Returns the valid assets } ] } - `` + ``` ### Get Asset Info [GET /assets/{asset}] @@ -2302,7 +2302,7 @@ Returns the asset information + Response 200 (application/json) - `` + ``` { "result": { "asset": "UNNEGOTIABLE", @@ -2316,7 +2316,7 @@ Returns the asset information "holder_count": 1 } } - `` + ``` ### Get Asset Balances [GET /assets/{asset}/balances{?exclude_zero_balances}] @@ -2329,7 +2329,7 @@ Returns the asset balances + Response 200 (application/json) - `` + ``` { "result": [ { @@ -2339,7 +2339,7 @@ Returns the asset balances } ] } - `` + ``` ### Get Balance By Address And Asset [GET /assets/{asset}/balances/{address}] @@ -2351,7 +2351,7 @@ Returns the balance of an address and asset + Response 200 (application/json) - `` + ``` { "result": { "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", @@ -2359,7 +2359,7 @@ Returns the balance of an address and asset "quantity": 104200000000 } } - `` + ``` ### Get Orders By Asset [GET /assets/{asset}/orders{?status}] @@ -2372,7 +2372,7 @@ Returns the orders of an asset + Response 200 (application/json) - `` + ``` { "result": [ { @@ -2586,7 +2586,7 @@ Returns the orders of an asset } ] } - `` + ``` ### Get Credits By Asset [GET /assets/{asset}/credits{?limit}{?offset}] @@ -2601,7 +2601,7 @@ Returns the credits of an asset + Response 200 (application/json) - `` + ``` { "result": [ { @@ -2615,7 +2615,7 @@ Returns the credits of an asset } ] } - `` + ``` ### Get Debits By Asset [GET /assets/{asset}/debits{?limit}{?offset}] @@ -2630,7 +2630,7 @@ Returns the debits of an asset + Response 200 (application/json) - `` + ``` { "result": [ { @@ -2680,7 +2680,7 @@ Returns the debits of an asset } ] } - `` + ``` ### Get Dividends [GET /assets/{asset}/dividends] @@ -2691,7 +2691,7 @@ Returns the dividends of an asset + Response 200 (application/json) - `` + ``` { "result": [ { @@ -2828,7 +2828,7 @@ Returns the dividends of an asset } ] } - `` + ``` ### Get Issuances By Asset [GET /assets/{asset}/issuances] @@ -2839,7 +2839,7 @@ Returns the issuances of an asset + Response 200 (application/json) - `` + ``` { "result": [ { @@ -2865,7 +2865,7 @@ Returns the issuances of an asset } ] } - `` + ``` ### Get Sends By Asset [GET /assets/{asset}/sends{?limit}{?offset}] @@ -2880,7 +2880,7 @@ Returns the sends of an asset + Response 200 (application/json) - `` + ``` { "result": [ { @@ -2945,7 +2945,7 @@ Returns the sends of an asset } ] } - `` + ``` ### Get Dispensers By Asset [GET /assets/{asset}/dispensers{?status}] @@ -2958,7 +2958,7 @@ Returns the dispensers of an asset + Response 200 (application/json) - `` + ``` { "result": [ { @@ -2979,7 +2979,7 @@ Returns the dispensers of an asset } ] } - `` + ``` ### Get Dispensers By Address And Asset [GET /assets/{asset}/dispensers/{address}{?status}] @@ -2993,7 +2993,7 @@ Returns the dispensers of an address and an asset + Response 200 (application/json) - `` + ``` { "result": [ { @@ -3014,7 +3014,7 @@ Returns the dispensers of an address and an asset } ] } - `` + ``` ### Get Asset Holders [GET /assets/{asset}/holders] @@ -3025,7 +3025,7 @@ Returns the holders of an asset + Response 200 (application/json) - `` + ``` { "result": [ { @@ -3070,7 +3070,7 @@ Returns the holders of an asset } ] } - `` + ``` ## Group Orders @@ -3083,7 +3083,7 @@ Returns the information of an order + Response 200 (application/json) - `` + ``` { "result": [ { @@ -3107,7 +3107,7 @@ Returns the information of an order } ] } - `` + ``` ### Get Order Matches By Order [GET /orders/{order_hash}/matches{?status}] @@ -3120,7 +3120,7 @@ Returns the order matches of an order + Response 200 (application/json) - `` + ``` { "result": [ { @@ -3146,7 +3146,7 @@ Returns the order matches of an order } ] } - `` + ``` ### Get BTCPays By Order [GET /orders/{order_hash}/btcpays] @@ -3157,7 +3157,7 @@ Returns the BTC pays of an order + Response 200 (application/json) - `` + ``` { "result": [ { @@ -3172,7 +3172,7 @@ Returns the BTC pays of an order } ] } - `` + ``` ## Group Bets @@ -3185,7 +3185,7 @@ Returns the information of a bet + Response 200 (application/json) - `` + ``` { "result": [ { @@ -3209,7 +3209,7 @@ Returns the information of a bet } ] } - `` + ``` ### Get Bet Matches By Bet [GET /bets/{bet_hash}/matches{?status}] @@ -3222,7 +3222,7 @@ Returns the bet matches of a bet + Response 200 (application/json) - `` + ``` { "result": [ { @@ -3253,7 +3253,7 @@ Returns the bet matches of a bet } ] } - `` + ``` ### Get Resolutions By Bet [GET /bets/{bet_hash}/resolutions] @@ -3264,7 +3264,7 @@ Returns the resolutions of a bet + Response 200 (application/json) - `` + ``` { "result": [ { @@ -3280,7 +3280,7 @@ Returns the resolutions of a bet } ] } - `` + ``` ## Group Burns @@ -3298,7 +3298,7 @@ Returns the burns + Response 200 (application/json) - `` + ``` { "result": [ { @@ -3348,7 +3348,7 @@ Returns the burns } ] } - `` + ``` ## Group Dispensers @@ -3361,7 +3361,7 @@ Returns the dispenser information by tx_hash + Response 200 (application/json) - `` + ``` { "result": [ { @@ -3383,7 +3383,7 @@ Returns the dispenser information by tx_hash } ] } - `` + ``` ### Get Dispenses By Dispenser [GET /dispensers/{dispenser_hash}/dispenses] @@ -3394,7 +3394,7 @@ Returns the dispenses of a dispenser + Response 200 (application/json) - `` + ``` { "result": [ { @@ -3421,7 +3421,7 @@ Returns the dispenses of a dispenser } ] } - `` + ``` ## Group Events @@ -3437,7 +3437,7 @@ Returns all events + Response 200 (application/json) - `` + ``` { "result": [ { @@ -3511,7 +3511,7 @@ Returns all events } ] } - `` + ``` ### Get Event By Index [GET /events/{event_index}] @@ -3522,7 +3522,7 @@ Returns the event of an index + Response 200 (application/json) - `` + ``` { "result": [ { @@ -3538,14 +3538,14 @@ Returns the event of an index } ] } - `` + ``` ### Get All Events Counts [GET /events/counts] Returns the event counts of all blocks + Response 200 (application/json) - `` + ``` { "result": [ { @@ -3738,7 +3738,7 @@ Returns the event counts of all blocks } ] } - `` + ``` ### Get Events By Name [GET /events/{event}{?last}{?limit}] @@ -3753,7 +3753,7 @@ Returns the events filtered by event name + Response 200 (application/json) - `` + ``` { "result": [ { @@ -3833,7 +3833,7 @@ Returns the events filtered by event name } ] } - `` + ``` ## Group Z-pages @@ -3847,13 +3847,13 @@ Health check route. + Response 200 (application/json) - `` + ``` { "result": { "status": "Healthy" } } - `` + ``` ## Group Bitcoin @@ -3870,7 +3870,7 @@ Returns all transactions involving a given address + Response 200 (application/json) - `` + ``` { "result": [ { @@ -3911,7 +3911,7 @@ Returns all transactions involving a given address } ] } - `` + ``` ### Get Oldest Transaction By Address [GET /bitcoin/addresses/{address}/transactions/oldest{?block_index}] @@ -3924,14 +3924,14 @@ Get the oldest transaction for an address. + Response 200 (application/json) - `` + ``` { "result": { "block_index": 833187, "tx_hash": "2c8bc3eede9ec60d26c6fd7f44829adc64da593552044a28c673022220f560c3" } } - `` + ``` ### Get Unspent Txouts [GET /bitcoin/addresses/{address}/utxos{?unconfirmed}{?unspent_tx_hash}] @@ -3946,7 +3946,7 @@ Returns a list of unspent outputs for a specific address + Response 200 (application/json) - `` + ``` { "result": [ { @@ -4031,7 +4031,7 @@ Returns a list of unspent outputs for a specific address } ] } - `` + ``` ### PubKeyHash To Pubkey [GET /bitcoin/addresses/{address}/pubkey{?provided_pubkeys}] @@ -4044,11 +4044,11 @@ Get pubkey for an address. + Response 200 (application/json) - `` + ``` { "result": "0388ef0905568d425f1ffd4031d93dda4ef0e220c9b5fc4a6cbaf11544c4a5ca49" } - `` + ``` ### Get Transaction [GET /bitcoin/transactions/{tx_hash}{?verbose}] @@ -4061,7 +4061,7 @@ Get a transaction from the blockchain + Response 200 (application/json) - `` + ``` { "result": { "txid": "3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018", @@ -4106,7 +4106,7 @@ Get a transaction from the blockchain "blocktime": 1713951767 } } - `` + ``` ### Fee Per Kb [GET /bitcoin/estimatesmartfee{?conf_target}{?mode}] @@ -4120,11 +4120,11 @@ Get the fee per kilobyte for a transaction to be confirmed in `conf_target` bloc + Response 200 (application/json) - `` + ``` { "result": 295443 } - `` + ``` ## Group Mempool @@ -4133,11 +4133,11 @@ Get the fee per kilobyte for a transaction to be confirmed in `conf_target` bloc Returns all mempool events + Response 200 (application/json) - `` + ``` { "result": [] } - `` + ``` ### Get Mempool Events By Name [GET /mempool/events/{event}] @@ -4148,8 +4148,8 @@ Returns the mempool events filtered by event name + Response 200 (application/json) - `` + ``` { "result": [] } - `` + ``` diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index b3a38717ed..e467ccf869 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -122,12 +122,12 @@ def gen_groups_toc(): - All API responses follow the following format: - `` + ``` { "error": , "result": } - `` + ``` - Routes in the `/bitcoin` group serve as a proxy to make requests to Bitcoin Core. @@ -139,7 +139,7 @@ def gen_groups_toc(): + Response 200 (application/json) - `` + ``` { "server_ready": true, "network": "mainnet", @@ -150,7 +150,7 @@ def gen_groups_toc(): ] } - `` + ``` """ md = md.replace("{root_path}", root_path) @@ -216,10 +216,10 @@ def gen_groups_toc(): example_output = cache[path] example_output_json = json.dumps(example_output, indent=4) md += "\n+ Response 200 (application/json)\n\n" - md += " ``\n" + md += " ```\n" for line in example_output_json.split("\n"): md += f" {line}\n" - md += " ``\n" + md += " ```\n" with open(CACHE_FILE, "w") as f: json.dump(cache, f, indent=4) From 57facf72adf9d6f0956da2cb19c456c05b4367a1 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 26 Apr 2024 14:27:56 +0200 Subject: [PATCH 134/280] 404 error if function return None --- counterparty-core/counterpartycore/lib/api/api_server.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 3f5844018b..16218bce3e 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -178,6 +178,8 @@ def handle_route(**kwargs): return return_result(503, error="Unknwon error") # clean up and return the result + if result is None: + return return_result(404, error="Not found") result = remove_rowids(result) return return_result(200, result=result) From 9d61360bad2af407fa9e504948bef9c18a2f31bc Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 26 Apr 2024 17:00:41 +0200 Subject: [PATCH 135/280] Start API server before connecting to backend --- .../counterpartycore/lib/api/api_server.py | 20 ++++++++++++++----- counterparty-core/counterpartycore/server.py | 18 +++++++++-------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 16218bce3e..e4f1ffd91f 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -32,7 +32,7 @@ logger = logging.getLogger(config.LOGGER_NAME) auth = HTTPBasicAuth() -BACKEND_HEIGHT = 0 +BACKEND_HEIGHT = None REFRESH_BACKEND_HEIGHT_INTERVAL = 10 BACKEND_HEIGHT_TIMER = None @@ -78,6 +78,8 @@ def api_root(): def is_server_ready(): + if BACKEND_HEIGHT is None: + return False return ledger.CURRENT_BLOCK_INDEX >= BACKEND_HEIGHT - 1 @@ -143,6 +145,8 @@ def prepare_args(route, **kwargs): @auth.login_required def handle_route(**kwargs): + if BACKEND_HEIGHT is None: + return return_result(503, error="Backend still not ready. Please retry later.") db = get_db() # update the current block index ledger.CURRENT_BLOCK_INDEX = blocks.last_db_index(db) @@ -202,19 +206,25 @@ def run_api_server(args): # run the scheduler to refresh the backend height # `no_refresh_backend_height` used only for testing. TODO: find a way to mock it if "no_refresh_backend_height" not in args or not args["no_refresh_backend_height"]: - refresh_backend_height() + refresh_backend_height(start=True) try: # Start the API server - app.run(host=config.API_HOST, port=config.API_PORT, debug=False) + app.run(host=config.API_HOST, port=config.API_PORT, debug=False, threaded=True) finally: # ensure timer is cancelled if BACKEND_HEIGHT_TIMER: BACKEND_HEIGHT_TIMER.cancel() -def refresh_backend_height(): +def refresh_backend_height(start=False): global BACKEND_HEIGHT, BACKEND_HEIGHT_TIMER # noqa F811 - BACKEND_HEIGHT = get_backend_height() + if not start: + BACKEND_HEIGHT = get_backend_height() + else: + # starting the timer is not blocking in case of Addrindexrs is not ready + BACKEND_HEIGHT_TIMER = Timer(0.5, refresh_backend_height) + BACKEND_HEIGHT_TIMER.start() + return if BACKEND_HEIGHT_TIMER: BACKEND_HEIGHT_TIMER.cancel() BACKEND_HEIGHT_TIMER = Timer(REFRESH_BACKEND_HEIGHT_INTERVAL, refresh_backend_height) diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index 89270296f0..9cfcea909a 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -680,9 +680,7 @@ def start_all(args): api_status_poller = None api_server_v1 = None api_server_v2 = None - - # Backend. - connect_to_backend() + telemetry_daemon = None try: if not os.path.exists(config.DATABASE) and args.catch_up == "bootstrap": @@ -691,6 +689,13 @@ def start_all(args): db = initialise_db() blocks.initialise(db) + # API Server v2. + api_server_v2 = api_v2.APIServer() + api_server_v2.start(args) + + # Backend. + connect_to_backend() + telemetry_daemon = TelemetryDaemon( interval=60, collector=TelemetryCollectorLive(db=database.get_connection(read_only=True)), @@ -714,16 +719,13 @@ def start_all(args): api_server_v1.daemon = True api_server_v1.start() - # API Server v2. - api_server_v2 = api_v2.APIServer() - api_server_v2.start(args) - # Server blocks.follow(db) except KeyboardInterrupt: pass finally: - telemetry_daemon.stop() + if telemetry_daemon: + telemetry_daemon.stop() if args.enable_api_v1: if api_status_poller: api_status_poller.stop() From 44f02cabbf7fb2a3f797c8cb21c9d9111813accc Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 26 Apr 2024 17:09:39 +0200 Subject: [PATCH 136/280] fix test --- counterparty-core/counterpartycore/lib/api/api_server.py | 3 +++ counterparty-core/counterpartycore/test/api_v2_test.py | 1 + 2 files changed, 4 insertions(+) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index e4f1ffd91f..afcfdf29f2 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -207,6 +207,9 @@ def run_api_server(args): # `no_refresh_backend_height` used only for testing. TODO: find a way to mock it if "no_refresh_backend_height" not in args or not args["no_refresh_backend_height"]: refresh_backend_height(start=True) + else: + global BACKEND_HEIGHT # noqa F811 + BACKEND_HEIGHT = 0 try: # Start the API server app.run(host=config.API_HOST, port=config.API_PORT, debug=False, threaded=True) diff --git a/counterparty-core/counterpartycore/test/api_v2_test.py b/counterparty-core/counterpartycore/test/api_v2_test.py index 6ca80c2551..28299e31fd 100644 --- a/counterparty-core/counterpartycore/test/api_v2_test.py +++ b/counterparty-core/counterpartycore/test/api_v2_test.py @@ -56,6 +56,7 @@ def test_api_v2(request): print(url) result = requests.get(url) # noqa: S113 results[url] = result.json() + print(result.json()) assert result.status_code == 200 if not request.config.getoption("saveapifixtures"): assert results[url] == fixtures[url] From cdd36ff81e99a5b50947744db23d6132ea2f562c Mon Sep 17 00:00:00 2001 From: matt marcello Date: Fri, 26 Apr 2024 14:36:39 -0400 Subject: [PATCH 137/280] increase default poll interval --- counterparty-core/counterpartycore/cli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/counterparty-core/counterpartycore/cli.py b/counterparty-core/counterpartycore/cli.py index 327c36d549..b02f29a52e 100755 --- a/counterparty-core/counterpartycore/cli.py +++ b/counterparty-core/counterpartycore/cli.py @@ -112,7 +112,7 @@ ], [ ("--backend-poll-interval",), - {"type": float, "default": 0.5, "help": "poll interval, in seconds (default: 0.5)"}, + {"type": float, "default": 3.0, "help": "poll interval, in seconds (default: 3.0)"}, ], [ ("--check-asset-conservation",), From 0696ef262840e3e420ffa4d73c78f7b42e023fd9 Mon Sep 17 00:00:00 2001 From: matt marcello Date: Fri, 26 Apr 2024 14:47:09 -0400 Subject: [PATCH 138/280] assert backend poll interval greater than 3.0 --- counterparty-core/counterpartycore/server.py | 1 + 1 file changed, 1 insertion(+) diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index 39ba41f79d..e8d024a69c 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -303,6 +303,7 @@ def initialise_config( # Backend Poll Interval if backend_poll_interval: + assert backend_poll_interval >= 3.0 config.BACKEND_POLL_INTERVAL = backend_poll_interval else: config.BACKEND_POLL_INTERVAL = 3.0 From a3ea1b14cb03dc680c765ac838285b0faf2bfc77 Mon Sep 17 00:00:00 2001 From: matt marcello Date: Fri, 26 Apr 2024 15:41:08 -0400 Subject: [PATCH 139/280] temp disable wall checkpoint --- counterparty-core/counterpartycore/lib/blocks.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/blocks.py b/counterparty-core/counterpartycore/lib/blocks.py index 639fe9e3eb..297ff66560 100644 --- a/counterparty-core/counterpartycore/lib/blocks.py +++ b/counterparty-core/counterpartycore/lib/blocks.py @@ -19,7 +19,6 @@ import logging # noqa: E402 import platform # noqa: E402, F401 -import apsw # noqa: E402 import bitcoin as bitcoinlib # noqa: E402 from bitcoin.core.script import CScriptInvalidError # noqa: E402, F401 from halo import Halo # noqa: E402 @@ -1267,10 +1266,11 @@ def follow(db): ) # Wait - db.wal_checkpoint(mode=apsw.SQLITE_CHECKPOINT_PASSIVE) + # db.wal_checkpoint(mode=apsw.SQLITE_CHECKPOINT_PASSIVE) time.sleep(sleep_time) else: # Wait # logger.debug(f"Waiting for new blocks. Block index: {block_index}") - db.wal_checkpoint(mode=apsw.SQLITE_CHECKPOINT_PASSIVE) + + # db.wal_checkpoint(mode=apsw.SQLITE_CHECKPOINT_PASSIVE) time.sleep(config.BACKEND_POLL_INTERVAL) From a93f65a74f33d98e449ffcc7fe5e7776adb5b2ff Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sat, 27 Apr 2024 11:45:27 +0200 Subject: [PATCH 140/280] Retry on ChunkedEncodingError; Break loop on all errors --- .../counterpartycore/lib/backend/addrindexrs.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/backend/addrindexrs.py b/counterparty-core/counterpartycore/lib/backend/addrindexrs.py index 429131247e..ae2b4c66ed 100644 --- a/counterparty-core/counterpartycore/lib/backend/addrindexrs.py +++ b/counterparty-core/counterpartycore/lib/backend/addrindexrs.py @@ -16,7 +16,7 @@ import bitcoin.wallet import requests from pkg_resources import parse_version # noqa: F401 -from requests.exceptions import ConnectionError, ReadTimeout, Timeout +from requests.exceptions import ChunkedEncodingError, ConnectionError, ReadTimeout, Timeout from counterpartycore.lib import config, exceptions, ledger, util @@ -53,6 +53,7 @@ def rpc_call(payload): response = None tries = 0 + broken_error = None while True: try: tries += 1 @@ -86,11 +87,16 @@ def rpc_call(payload): except KeyboardInterrupt: logger.warning("Interrupted by user") exit(0) - except (Timeout, ReadTimeout, ConnectionError): + except (Timeout, ReadTimeout, ConnectionError, ChunkedEncodingError): logger.debug( f"Could not connect to backend at `{util.clean_url_for_log(url)}`. (Try {tries})" ) time.sleep(5) + except Exception as e: + broken_error = e + break + if broken_error: + raise broken_error # Handle json decode errors try: From 01c6292dc477b59c7a79150373a22fde7d754daa Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sat, 27 Apr 2024 13:22:19 +0200 Subject: [PATCH 141/280] Add --enable-api-v1 in docker-compose.yml; fix Docker Compose test --- .github/workflows/test_compose.sh | 2 +- docker-compose.yml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test_compose.sh b/.github/workflows/test_compose.sh index 3951edbe75..f8430968bb 100644 --- a/.github/workflows/test_compose.sh +++ b/.github/workflows/test_compose.sh @@ -44,7 +44,7 @@ done rm -f ../DOCKER_COMPOSE_TEST_LOCK -server_response=$(curl -X POST http://127.0.0.1:14000/api/ \ +server_response=$(curl -X POST http://127.0.0.1:14000/v1/api/ \ --user rpc:rpc \ -H 'Content-Type: application/json; charset=UTF-8'\ -H 'Accept: application/json, text/javascript' \ diff --git a/docker-compose.yml b/docker-compose.yml index 84cf14f6d6..f2f5c52f28 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -64,6 +64,7 @@ services: - "--indexd-connect=addrindexrs" - "--rpc-host=0.0.0.0" - "--catch-up=bootstrap" + - "--enable-api-v1" #- "--verbose" environment: - "XDG_DATA_HOME=/data/" From af8ca25c098b7975973465d3e81a910d8523115b Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sat, 27 Apr 2024 13:23:20 +0200 Subject: [PATCH 142/280] temp --- .github/workflows/test_compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_compose.yml b/.github/workflows/test_compose.yml index 78e44ddfd5..6044092d45 100644 --- a/.github/workflows/test_compose.yml +++ b/.github/workflows/test_compose.yml @@ -2,7 +2,7 @@ name: Docker Compose on: push: - branches: ['develop', 'master'] + branches: ['develop', 'master', 'testcompose'] #branches: ['compose'] jobs: From 41bb65528c9d1c584f7491b37473fbf352315c20 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sat, 27 Apr 2024 13:39:48 +0200 Subject: [PATCH 143/280] expose API v1 ports --- .github/workflows/test_compose.sh | 2 +- docker-compose.yml | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test_compose.sh b/.github/workflows/test_compose.sh index f8430968bb..a4c65a482e 100644 --- a/.github/workflows/test_compose.sh +++ b/.github/workflows/test_compose.sh @@ -44,7 +44,7 @@ done rm -f ../DOCKER_COMPOSE_TEST_LOCK -server_response=$(curl -X POST http://127.0.0.1:14000/v1/api/ \ +server_response=$(curl -X POST http://127.0.0.1:14100/v1/api/ \ --user rpc:rpc \ -H 'Content-Type: application/json; charset=UTF-8'\ -H 'Accept: application/json, text/javascript' \ diff --git a/docker-compose.yml b/docker-compose.yml index f2f5c52f28..9bc6283e52 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -55,8 +55,10 @@ services: - data:/root/.bitcoin - data:/data ports: - - "4000:4000" # mainnet - - "14000:14000" # testnet + - "4000:4000" # mainnet API v2 + - "14000:14000" # testnet API v2 + - "4100:4100" # mainnet API v1 + - "14100:14100" # testnet API v1 command: - start - "--${BITCOIN_CHAIN:-main}net" # export BITCOIN_CHAIN=test for testnet From 733d5dfc8e6562db14e72db1f02e5e54668e0722 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sat, 27 Apr 2024 13:54:35 +0200 Subject: [PATCH 144/280] clean --- .github/workflows/test_compose.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/test_compose.yml b/.github/workflows/test_compose.yml index 6044092d45..4d7a0ed541 100644 --- a/.github/workflows/test_compose.yml +++ b/.github/workflows/test_compose.yml @@ -2,8 +2,7 @@ name: Docker Compose on: push: - branches: ['develop', 'master', 'testcompose'] - #branches: ['compose'] + branches: ['develop', 'master'] jobs: build: From 8d9e5d8d06941080b5be982d38096142388d116f Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sat, 27 Apr 2024 16:27:46 +0200 Subject: [PATCH 145/280] set --api-host --- .github/workflows/test_compose.yml | 2 +- docker-compose.yml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test_compose.yml b/.github/workflows/test_compose.yml index 4d7a0ed541..7cd5ef8aad 100644 --- a/.github/workflows/test_compose.yml +++ b/.github/workflows/test_compose.yml @@ -2,7 +2,7 @@ name: Docker Compose on: push: - branches: ['develop', 'master'] + branches: ['develop', 'master', 'testcompose'] jobs: build: diff --git a/docker-compose.yml b/docker-compose.yml index 9bc6283e52..f23998126a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -65,6 +65,7 @@ services: - "--backend-connect=bitcoind" - "--indexd-connect=addrindexrs" - "--rpc-host=0.0.0.0" + - "--api-host=0.0.0.0" - "--catch-up=bootstrap" - "--enable-api-v1" #- "--verbose" From 20c234166ebffe46d9c9ebf337ebe109a60ac7af Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sat, 27 Apr 2024 16:38:50 +0200 Subject: [PATCH 146/280] test also API v2 / in docker compose test --- .github/workflows/test_compose.sh | 12 ++++++++++-- .github/workflows/test_compose.yml | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test_compose.sh b/.github/workflows/test_compose.sh index a4c65a482e..a1075c7fd8 100644 --- a/.github/workflows/test_compose.sh +++ b/.github/workflows/test_compose.sh @@ -44,14 +44,22 @@ done rm -f ../DOCKER_COMPOSE_TEST_LOCK -server_response=$(curl -X POST http://127.0.0.1:14100/v1/api/ \ +server_response_v1=$(curl -X POST http://127.0.0.1:14100/v1/api/ \ --user rpc:rpc \ -H 'Content-Type: application/json; charset=UTF-8'\ -H 'Accept: application/json, text/javascript' \ --data-binary '{ "jsonrpc": "2.0", "id": 0, "method": "get_running_info" }' \ --write-out '%{http_code}' --silent --output /dev/null) -if [ "$server_response" -ne 200 ]; then +if [ "$server_response_v1" -ne 200 ]; then echo "Failed to get_running_info" exit 1 +fi + +server_response_v2=$(curl http://api:api@127.0.0.1:14000/ \ + --write-out '%{http_code}' --silent --output /dev/null) + +if [ "$server_response_v2" -ne 200 ]; then + echo "Failed to get API v2 root" + exit 1 fi \ No newline at end of file diff --git a/.github/workflows/test_compose.yml b/.github/workflows/test_compose.yml index 7cd5ef8aad..4d7a0ed541 100644 --- a/.github/workflows/test_compose.yml +++ b/.github/workflows/test_compose.yml @@ -2,7 +2,7 @@ name: Docker Compose on: push: - branches: ['develop', 'master', 'testcompose'] + branches: ['develop', 'master'] jobs: build: From 67c70daf185a6afc8f726b36f052b2d24c747c6f Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sun, 28 Apr 2024 12:19:12 +0200 Subject: [PATCH 147/280] Tweak --backend-poll-interval flag --- counterparty-core/counterpartycore/cli.py | 20 +++++++++++++++++++- counterparty-core/counterpartycore/server.py | 1 - 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/counterparty-core/counterpartycore/cli.py b/counterparty-core/counterpartycore/cli.py index 2882fe9663..ca0bf7958f 100755 --- a/counterparty-core/counterpartycore/cli.py +++ b/counterparty-core/counterpartycore/cli.py @@ -14,6 +14,20 @@ APP_NAME = "counterparty-server" APP_VERSION = config.VERSION_STRING + +def float_range(min): + def float_range_checker(arg): + try: + f = float(arg) + except ValueError as e: + raise argparse.ArgumentTypeError("must be a floating point number") from e + if f < min: + raise argparse.ArgumentTypeError(f"must be in greater than or equal to {min}") + return f + + return float_range_checker + + CONFIG_ARGS = [ [ ("-v", "--verbose"), @@ -112,7 +126,11 @@ ], [ ("--backend-poll-interval",), - {"type": float, "default": 3.0, "help": "poll interval, in seconds (default: 3.0)"}, + { + "type": float_range(3.0), + "default": 3.0, + "help": "poll interval, in seconds. Minimum 3.0. (default: 3.0)", + }, ], [ ("--check-asset-conservation",), diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index 866db79b34..9cfcea909a 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -310,7 +310,6 @@ def initialise_config( # Backend Poll Interval if backend_poll_interval: - assert backend_poll_interval >= 3.0 config.BACKEND_POLL_INTERVAL = backend_poll_interval else: config.BACKEND_POLL_INTERVAL = 3.0 From 6b5624bf5a7827712efb5e92d9567f4c4a92bf15 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sun, 28 Apr 2024 12:23:21 +0200 Subject: [PATCH 148/280] lint --- counterparty-core/counterpartycore/cli.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/counterparty-core/counterpartycore/cli.py b/counterparty-core/counterpartycore/cli.py index ca0bf7958f..0ccd2caeea 100755 --- a/counterparty-core/counterpartycore/cli.py +++ b/counterparty-core/counterpartycore/cli.py @@ -15,14 +15,14 @@ APP_VERSION = config.VERSION_STRING -def float_range(min): +def float_range(min_value): def float_range_checker(arg): try: f = float(arg) except ValueError as e: raise argparse.ArgumentTypeError("must be a floating point number") from e - if f < min: - raise argparse.ArgumentTypeError(f"must be in greater than or equal to {min}") + if f < min_value: + raise argparse.ArgumentTypeError(f"must be in greater than or equal to {min_value}") return f return float_range_checker From b864633e3e44c2bc3a9c4b2fe3ba1e3f6a396e04 Mon Sep 17 00:00:00 2001 From: Adam Krellenstein Date: Sun, 28 Apr 2024 12:30:04 +0200 Subject: [PATCH 149/280] Backend Poll Interval Release Note --- release-notes/release-notes-v10.1.2.md | 1 + 1 file changed, 1 insertion(+) diff --git a/release-notes/release-notes-v10.1.2.md b/release-notes/release-notes-v10.1.2.md index 14afd14532..fcb7f6855b 100644 --- a/release-notes/release-notes-v10.1.2.md +++ b/release-notes/release-notes-v10.1.2.md @@ -19,6 +19,7 @@ To easily migrate to the new API, an equivalence table is available in the docum * New ReST API ## Command-Line Interface +* Set default and minimum values for Backend Poll Interval to 3.0 seconds # Credits * Ouziel Slama From bf0980b9b39bc7d80a42bbfca0387cdb293fcfaa Mon Sep 17 00:00:00 2001 From: Adam Krellenstein Date: Sun, 28 Apr 2024 12:31:17 +0200 Subject: [PATCH 150/280] Release Note for ChunkedEncodingError --- release-notes/release-notes-v10.1.2.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/release-notes/release-notes-v10.1.2.md b/release-notes/release-notes-v10.1.2.md index fcb7f6855b..1043289879 100644 --- a/release-notes/release-notes-v10.1.2.md +++ b/release-notes/release-notes-v10.1.2.md @@ -14,6 +14,8 @@ To easily migrate to the new API, an equivalence table is available in the docum ## Bugfixes * Fix logging of some raw tracebacks (#1715) +* Retry on `ChunkedEncodingError` with AddrIndexRs; break loop on all errors + ## Codebase * New ReST API From f1cf9ff32f3eeea694cd67e1d05d67de3eff665b Mon Sep 17 00:00:00 2001 From: Adam Krellenstein Date: Sun, 28 Apr 2024 12:51:06 +0200 Subject: [PATCH 151/280] Tweak PR Template --- .github/pull_request_template.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index badcb910de..a9fa7ae190 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,9 +1,9 @@ -Nice work! 🎉 You're about to create pull request on the Counterparty Core codebase. As part of this process, please be sure to: +You're about to create pull request on the Counterparty Core codebase! 🎉 As part of this process, please be sure to: * [ ] Double-check that all code that needs to be is deterministic * [ ] Add tests to cover any new features * [ ] Ensure that the test suite passes with the proposed changes * [ ] Update the project [release notes](release-notes/) -* [ ] Create a corresponding Pull Request in the [official Documentation repository](https://github.com/CounterpartyXCP/Documentation) +* [ ] Update the project documentation as appropriate with a corresponding Pull Request in the [Documentation repository](https://github.com/CounterpartyXCP/Documentation) ... and be sure to label the Pull Request as a "draft" for as long as it is not ready to be merged into `develop`. From 4588e84985fba577367c9cf19fa8a395550b5b59 Mon Sep 17 00:00:00 2001 From: Adam Krellenstein Date: Sun, 28 Apr 2024 12:52:15 +0200 Subject: [PATCH 152/280] Tweak PR Template --- .github/pull_request_template.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index a9fa7ae190..cbd3a060f1 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,5 +1,6 @@ You're about to create pull request on the Counterparty Core codebase! 🎉 As part of this process, please be sure to: +* [ ] Check the spelling and grammar of all strings, code comments, etc. * [ ] Double-check that all code that needs to be is deterministic * [ ] Add tests to cover any new features * [ ] Ensure that the test suite passes with the proposed changes From 94e015b47ab86a370baf9ecc49a96c16d45fb12b Mon Sep 17 00:00:00 2001 From: Adam Krellenstein Date: Sun, 28 Apr 2024 12:52:42 +0200 Subject: [PATCH 153/280] Tweak PR Template --- .github/pull_request_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index cbd3a060f1..9d23c591dc 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,6 +1,6 @@ You're about to create pull request on the Counterparty Core codebase! 🎉 As part of this process, please be sure to: -* [ ] Check the spelling and grammar of all strings, code comments, etc. +* [ ] Double-check the spelling and grammar of all strings, code comments, etc. * [ ] Double-check that all code that needs to be is deterministic * [ ] Add tests to cover any new features * [ ] Ensure that the test suite passes with the proposed changes From 497809b03c053cb6e88719800695b491c0a10224 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 29 Apr 2024 14:06:46 +0200 Subject: [PATCH 154/280] Fix query params in blueprint; introduce dredd.yml --- apiary.apib | 66 ++++++++++++++-------------- counterparty-core/tools/genapidoc.py | 5 ++- dredd.yml | 17 +++++++ 3 files changed, 54 insertions(+), 34 deletions(-) create mode 100644 dredd.yml diff --git a/apiary.apib b/apiary.apib index d439534b0c..cd6675e736 100644 --- a/apiary.apib +++ b/apiary.apib @@ -64,7 +64,7 @@ Returns server information and the list of documented routes in JSON format. ## Group Blocks -### Get Blocks [GET /blocks{?last}{?limit}] +### Get Blocks [GET /blocks{?last}{&limit}] Returns the list of the last ten blocks @@ -525,7 +525,7 @@ Returns the issuances of a block } ``` -### Get Sends By Block [GET /blocks/{block_index}/sends{?limit}{?offset}] +### Get Sends By Block [GET /blocks/{block_index}/sends{?limit}{&offset}] Returns the sends of a block @@ -624,7 +624,7 @@ Returns the sweeps of a block ## Group Transactions -### Info [GET /transactions/info{?rawtransaction}{?block_index}] +### Info [GET /transactions/info{?rawtransaction}{&block_index}] Returns Counterparty information from a raw transaction in hex format. @@ -665,7 +665,7 @@ Returns Counterparty information from a raw transaction in hex format. } ``` -### Unpack [GET /transactions/unpack{?datahex}{?block_index}] +### Unpack [GET /transactions/unpack{?datahex}{&block_index}] Unpacks Counterparty data in hex format and returns the message type and data. @@ -787,7 +787,7 @@ Returns the balance of an address and asset } ``` -### Get Credits By Address [GET /addresses/{address}/credits{?limit}{?offset}] +### Get Credits By Address [GET /addresses/{address}/credits{?limit}{&offset}] Returns the credits of an address @@ -816,7 +816,7 @@ Returns the credits of an address } ``` -### Get Debits By Address [GET /addresses/{address}/debits{?limit}{?offset}] +### Get Debits By Address [GET /addresses/{address}/debits{?limit}{&offset}] Returns the debits of an address @@ -910,7 +910,7 @@ Returns the bets of a feed } ``` -### Get Broadcasts By Source [GET /addresses/{address}/broadcasts{?status}{?order_by}] +### Get Broadcasts By Source [GET /addresses/{address}/broadcasts{?status}{&order_by}] Returns the broadcasts of a source @@ -979,7 +979,7 @@ Returns the burns of an address } ``` -### Get Send By Address [GET /addresses/{address}/sends{?limit}{?offset}] +### Get Send By Address [GET /addresses/{address}/sends{?limit}{&offset}] Returns the sends of an address @@ -1011,7 +1011,7 @@ Returns the sends of an address } ``` -### Get Receive By Address [GET /addresses/{address}/receives{?limit}{?offset}] +### Get Receive By Address [GET /addresses/{address}/receives{?limit}{&offset}] Returns the receives of an address @@ -1072,7 +1072,7 @@ Returns the sends of an address and asset } ``` -### Get Receive By Address And Asset [GET /addresses/{address}/receives/{asset}{?limit}{?offset}] +### Get Receive By Address And Asset [GET /addresses/{address}/receives/{asset}{?limit}{&offset}] Returns the receives of an address and asset @@ -1224,7 +1224,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose Bet [GET /addresses/{address}/compose/bet{?feed_address}{?bet_type}{?deadline}{?wager_quantity}{?counterwager_quantity}{?expiration}{?leverage}{?target_value}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Bet [GET /addresses/{address}/compose/bet{?feed_address}{&bet_type}{&deadline}{&wager_quantity}{&counterwager_quantity}{&expiration}{&leverage}{&target_value}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}] Composes a transaction to issue a bet against a feed. @@ -1312,7 +1312,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose Broadcast [GET /addresses/{address}/compose/broadcast{?timestamp}{?value}{?fee_fraction}{?text}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Broadcast [GET /addresses/{address}/compose/broadcast{?timestamp}{&value}{&fee_fraction}{&text}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}] Composes a transaction to broadcast textual and numerical information to the network. @@ -1390,7 +1390,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose BTCPay [GET /addresses/{address}/compose/btcpay{?order_match_id}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose BTCPay [GET /addresses/{address}/compose/btcpay{?order_match_id}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}] Composes a transaction to pay for a BTC order match. @@ -1462,7 +1462,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose Burn [GET /addresses/{address}/compose/burn{?quantity}{?overburn}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Burn [GET /addresses/{address}/compose/burn{?quantity}{&overburn}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}] Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, possible between blocks 278310 and 283810; on testnet it is still available). @@ -1537,7 +1537,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose Cancel [GET /addresses/{address}/compose/cancel{?offer_hash}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Cancel [GET /addresses/{address}/compose/cancel{?offer_hash}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}] Composes a transaction to cancel an open order or bet. @@ -1609,7 +1609,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose Destroy [GET /addresses/{address}/compose/destroy{?asset}{?quantity}{?tag}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Destroy [GET /addresses/{address}/compose/destroy{?asset}{&quantity}{&tag}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}] Composes a transaction to destroy a quantity of an asset. @@ -1685,7 +1685,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose Dispenser [GET /addresses/{address}/compose/dispenser{?asset}{?give_quantity}{?escrow_quantity}{?mainchainrate}{?status}{?open_address}{?oracle_address}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Dispenser [GET /addresses/{address}/compose/dispenser{?asset}{&give_quantity}{&escrow_quantity}{&mainchainrate}{&status}{&open_address}{&oracle_address}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}] Opens or closes a dispenser for a given asset at a given rate of main chain asset (BTC). Escrowed quantity on open must be equal or greater than give_quantity. It is suggested that you escrow multiples of give_quantity to ease dispenser operation. @@ -1771,7 +1771,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose Dividend [GET /addresses/{address}/compose/dividend{?quantity_per_unit}{?asset}{?dividend_asset}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Dividend [GET /addresses/{address}/compose/dividend{?quantity_per_unit}{&asset}{÷nd_asset}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}] Composes a transaction to issue a dividend to holders of a given asset. @@ -1847,7 +1847,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose Issuance [GET /addresses/{address}/compose/issuance{?asset}{?quantity}{?transfer_destination}{?divisible}{?lock}{?reset}{?description}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Issuance [GET /addresses/{address}/compose/issuance{?asset}{&quantity}{&transfer_destination}{&divisible}{&lock}{&reset}{&description}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}] Composes a transaction to Issue a new asset, issue more of an existing asset, lock an asset, reset existing supply, or transfer the ownership of an asset. @@ -1936,7 +1936,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose MPMA [GET /addresses/{address}/compose/mpma{?assets}{?destinations}{?quantities}{?memo}{?memo_is_hex}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose MPMA [GET /addresses/{address}/compose/mpma{?assets}{&destinations}{&quantities}{&memo}{&memo_is_hex}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}] Composes a transaction to send multiple payments to multiple addresses. @@ -2030,7 +2030,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose Order [GET /addresses/{address}/compose/order{?give_asset}{?give_quantity}{?get_asset}{?get_quantity}{?expiration}{?fee_required}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Order [GET /addresses/{address}/compose/order{?give_asset}{&give_quantity}{&get_asset}{&get_quantity}{&expiration}{&fee_required}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}] Composes a transaction to place an order on the distributed exchange. @@ -2112,7 +2112,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose Send [GET /addresses/{address}/compose/send{?destination}{?asset}{?quantity}{?memo}{?memo_is_hex}{?use_enhanced_send}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Send [GET /addresses/{address}/compose/send{?destination}{&asset}{&quantity}{&memo}{&memo_is_hex}{&use_enhanced_send}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}] Composes a transaction to send a quantity of an asset to another address. @@ -2197,7 +2197,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose Sweep [GET /addresses/{address}/compose/sweep{?destination}{?flags}{?memo}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Sweep [GET /addresses/{address}/compose/sweep{?destination}{&flags}{&memo}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}] Composes a transaction to Sends all assets and/or transfer ownerships to a destination address. @@ -2254,7 +2254,7 @@ Composes a transaction to Sends all assets and/or transfer ownerships to a desti ## Group Assets -### Get Valid Assets [GET /assets{?offset}{?limit}] +### Get Valid Assets [GET /assets{?offset}{&limit}] Returns the valid assets @@ -2588,7 +2588,7 @@ Returns the orders of an asset } ``` -### Get Credits By Asset [GET /assets/{asset}/credits{?limit}{?offset}] +### Get Credits By Asset [GET /assets/{asset}/credits{?limit}{&offset}] Returns the credits of an asset @@ -2617,7 +2617,7 @@ Returns the credits of an asset } ``` -### Get Debits By Asset [GET /assets/{asset}/debits{?limit}{?offset}] +### Get Debits By Asset [GET /assets/{asset}/debits{?limit}{&offset}] Returns the debits of an asset @@ -2867,7 +2867,7 @@ Returns the issuances of an asset } ``` -### Get Sends By Asset [GET /assets/{asset}/sends{?limit}{?offset}] +### Get Sends By Asset [GET /assets/{asset}/sends{?limit}{&offset}] Returns the sends of an asset @@ -3284,7 +3284,7 @@ Returns the resolutions of a bet ## Group Burns -### Get All Burns [GET /burns{?status}{?offset}{?limit}] +### Get All Burns [GET /burns{?status}{&offset}{&limit}] Returns the burns @@ -3425,7 +3425,7 @@ Returns the dispenses of a dispenser ## Group Events -### Get All Events [GET /events{?last}{?limit}] +### Get All Events [GET /events{?last}{&limit}] Returns all events @@ -3740,7 +3740,7 @@ Returns the event counts of all blocks } ``` -### Get Events By Name [GET /events/{event}{?last}{?limit}] +### Get Events By Name [GET /events/{event}{?last}{&limit}] Returns the events filtered by event name @@ -3857,7 +3857,7 @@ Health check route. ## Group Bitcoin -### Get Transactions By Address [GET /bitcoin/addresses/{address}/transactions{?unconfirmed}{?only_tx_hashes}] +### Get Transactions By Address [GET /bitcoin/addresses/{address}/transactions{?unconfirmed}{&only_tx_hashes}] Returns all transactions involving a given address @@ -3933,7 +3933,7 @@ Get the oldest transaction for an address. } ``` -### Get Unspent Txouts [GET /bitcoin/addresses/{address}/utxos{?unconfirmed}{?unspent_tx_hash}] +### Get Unspent Txouts [GET /bitcoin/addresses/{address}/utxos{?unconfirmed}{&unspent_tx_hash}] Returns a list of unspent outputs for a specific address @@ -4108,7 +4108,7 @@ Get a transaction from the blockchain } ``` -### Fee Per Kb [GET /bitcoin/estimatesmartfee{?conf_target}{?mode}] +### Fee Per Kb [GET /bitcoin/estimatesmartfee{?conf_target}{&mode}] Get the fee per kilobyte for a transaction to be confirmed in `conf_target` blocks. diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index e467ccf869..c076e5995c 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -183,11 +183,14 @@ def gen_groups_toc(): if TARGET == "docusaurus": md += f"[GET `{blueprint_path}`]\n\n" else: + first_query_arg = True for arg in route["args"]: if f"{{{arg['name']}}}" in blueprint_path: continue else: - blueprint_path += f"{{?{arg['name']}}}" + prefix = "?" if first_query_arg else "&" + first_query_arg = False + blueprint_path += f"{{{prefix}{arg['name']}}}" md += f"[GET {blueprint_path}]\n\n" md += route["description"].strip() diff --git a/dredd.yml b/dredd.yml new file mode 100644 index 0000000000..e9786bcb4f --- /dev/null +++ b/dredd.yml @@ -0,0 +1,17 @@ +color: true +init: true +names: false +only: [] +reporter: apiary +output: [] +header: [] +sorted: false +user: api:api +inline-errors: false +details: false +method: [] +loglevel: warning +path: [] +config: ./dredd.yml +blueprint: apiary.apib +endpoint: 'http://127.0.0.1:4000' From 7ae867a35ba3514b98b6da3a7052f218cb5f013e Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 29 Apr 2024 14:28:36 +0200 Subject: [PATCH 155/280] API Cache --- .../counterpartycore/lib/api/api_server.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index afcfdf29f2..8225946916 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -2,6 +2,7 @@ import logging import multiprocessing import traceback +from collections import OrderedDict from multiprocessing import Process from threading import Timer @@ -35,6 +36,8 @@ BACKEND_HEIGHT = None REFRESH_BACKEND_HEIGHT_INTERVAL = 10 BACKEND_HEIGHT_TIMER = None +BLOCK_CACHE = OrderedDict() +MAX_BLOCK_CACHE_SIZE = 1000 def get_db(): @@ -170,10 +173,17 @@ def handle_route(**kwargs): # call the function try: - if function_needs_db(route["function"]): - result = route["function"](db, **function_args) + cache_key = f"{ledger.CURRENT_BLOCK_INDEX}:{request.url}" + if cache_key in BLOCK_CACHE: + result = BLOCK_CACHE[cache_key] else: - result = route["function"](**function_args) + if function_needs_db(route["function"]): + result = route["function"](db, **function_args) + else: + result = route["function"](**function_args) + BLOCK_CACHE[cache_key] = result + if len(BLOCK_CACHE) > MAX_BLOCK_CACHE_SIZE: + BLOCK_CACHE.popitem(last=False) except (exceptions.ComposeError, exceptions.UnpackError) as e: return return_result(503, error=str(e)) except Exception as e: From 32a0e458521c99828dccf40407de1dafa5baa6b3 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 29 Apr 2024 14:55:33 +0200 Subject: [PATCH 156/280] Fix 'Transactions not initialized' error; Fix ctrl-c --- .../counterpartycore/lib/api/api_server.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index afcfdf29f2..7b0e24060d 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -13,6 +13,7 @@ database, exceptions, ledger, + transaction, ) from counterpartycore.lib.api.routes import ROUTES from counterpartycore.lib.api.util import ( @@ -26,6 +27,7 @@ from flask import g as flask_globals from flask_cors import CORS from flask_httpauth import HTTPBasicAuth +from werkzeug.serving import make_server multiprocessing.set_start_method("spawn", force=True) @@ -192,6 +194,7 @@ def run_api_server(args): app = Flask(config.APP_NAME) # Initialise log and config server.initialise_log_and_config(argparse.Namespace(**args)) + transaction.initialise() with app.app_context(): if not config.API_NO_ALLOW_CORS: CORS(app) @@ -211,9 +214,13 @@ def run_api_server(args): global BACKEND_HEIGHT # noqa F811 BACKEND_HEIGHT = 0 try: - # Start the API server - app.run(host=config.API_HOST, port=config.API_PORT, debug=False, threaded=True) + # Init the HTTP Server. + werkzeug_server = make_server(config.API_HOST, config.API_PORT, app, threaded=True) + app.app_context().push() + # Run app server (blocking) + werkzeug_server.serve_forever() finally: + werkzeug_server.shutdown() # ensure timer is cancelled if BACKEND_HEIGHT_TIMER: BACKEND_HEIGHT_TIMER.cancel() From c0a900ffaefb7e6a5b5a7765eb8daecf7becb2c6 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 29 Apr 2024 15:16:14 +0200 Subject: [PATCH 157/280] Add route to get orders by two assets --- apiary.apib | 95 +++++++++++++++++++ .../counterpartycore/lib/api/routes.py | 1 + .../counterpartycore/lib/ledger.py | 21 ++++ counterparty-core/tools/apicache.json | 80 ++++++++++++++++ 4 files changed, 197 insertions(+) diff --git a/apiary.apib b/apiary.apib index d439534b0c..070cbac515 100644 --- a/apiary.apib +++ b/apiary.apib @@ -2588,6 +2588,101 @@ Returns the orders of an asset } ``` +### Get Orders By Two Assets [GET /assets/{asset1}/{asset2}/orders{?status}] + +Returns the orders to exchange two assets + ++ Parameters + + asset1: `NEEDPEPE` (str, required) - The first asset to return + + asset2: `XCP` (str, required) - The second asset to return + + status: `filled` (str, optional) - The status of the orders to return + + Default: `open` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 2225134, + "tx_hash": "5b6e0c741d765ebd883dc16eecfb5c340c52865cabf297ca2c1432437c1348b7", + "block_index": 772817, + "source": "1FnM7akSCD8G3fRQHCUEXRCfL35gptsPZB", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "XCP", + "get_quantity": 80800000000, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 777817, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 5544, + "fee_provided_remaining": 5544, + "status": "filled" + }, + { + "tx_index": 1946026, + "tx_hash": "75dc6ee1f67317e674ef33b617d3a9839ee53bf4a2e8274c88d6202d4d89b59a", + "block_index": 727444, + "source": "1GotRejB6XsGgMsM79TvcypeanDJRJbMtg", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "XCP", + "get_quantity": 70000000000, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 732381, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 264, + "fee_provided_remaining": 264, + "status": "filled" + }, + { + "tx_index": 2202451, + "tx_hash": "77f568fc6604dbe209d2ea1b0158d7de20723c0178107eb570f4f2a719b0d7c7", + "block_index": 772817, + "source": "184gKLQTtQU29LXbxbYJkUV4if9SmW6v2d", + "give_asset": "XCP", + "give_quantity": 80800000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 773300, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 264, + "fee_provided_remaining": 264, + "status": "filled" + }, + { + "tx_index": 1946587, + "tx_hash": "b747f290cbbad6faa1c1c05d5c6d001b5a3ef487027bb0d4eefcdc9f6e865c39", + "block_index": 727444, + "source": "1AtcSh7uxenQ6AR5xqr6agAegWRUF5N4uh", + "give_asset": "XCP", + "give_quantity": 70000000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 732444, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 792, + "fee_provided_remaining": 792, + "status": "filled" + } + ] + } + ``` + ### Get Credits By Asset [GET /assets/{asset}/credits{?limit}{?offset}] Returns the credits of an asset diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index 6141db227d..4c5f306a41 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -63,6 +63,7 @@ "/assets//balances": ledger.get_asset_balances, "/assets//balances/
": ledger.get_balance_by_address_and_asset, "/assets//orders": ledger.get_orders_by_asset, + "/assets///orders": ledger.get_orders_by_two_assets, "/assets//credits": ledger.get_credits_by_asset, "/assets//debits": ledger.get_debits_by_asset, "/assets//dividends": ledger.get_dividends, diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index def7708f8f..d7175af70d 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -2245,6 +2245,27 @@ def get_orders_by_asset(db, asset: str, status: str = "open"): return cursor.fetchall() +def get_orders_by_two_assets(db, asset1: str, asset2: str, status: str = "open"): + """ + Returns the orders to exchange two assets + :param str asset1: The first asset to return (e.g. NEEDPEPE) + :param str asset2: The second asset to return (e.g. XCP) + :param str status: The status of the orders to return (e.g. filled) + """ + cursor = db.cursor() + query = """ + SELECT * FROM ( + SELECT *, MAX(rowid) + FROM orders + WHERE (give_asset = ? AND get_asset = ?) OR (give_asset = ? AND get_asset = ?) + GROUP BY tx_hash + ) WHERE status = ? + """ + bindings = (asset1, asset2, asset2, asset1, status) + cursor.execute(query, bindings) + return cursor.fetchall() + + def get_order_matches_by_order(db, order_hash: str, status: str = "pending"): """ Returns the order matches of an order diff --git a/counterparty-core/tools/apicache.json b/counterparty-core/tools/apicache.json index ced56dfecc..91aec454c4 100644 --- a/counterparty-core/tools/apicache.json +++ b/counterparty-core/tools/apicache.json @@ -2478,5 +2478,85 @@ }, "/mempool/events/": { "result": [] + }, + "/assets///orders": { + "result": [ + { + "tx_index": 2225134, + "tx_hash": "5b6e0c741d765ebd883dc16eecfb5c340c52865cabf297ca2c1432437c1348b7", + "block_index": 772817, + "source": "1FnM7akSCD8G3fRQHCUEXRCfL35gptsPZB", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "XCP", + "get_quantity": 80800000000, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 777817, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 5544, + "fee_provided_remaining": 5544, + "status": "filled" + }, + { + "tx_index": 1946026, + "tx_hash": "75dc6ee1f67317e674ef33b617d3a9839ee53bf4a2e8274c88d6202d4d89b59a", + "block_index": 727444, + "source": "1GotRejB6XsGgMsM79TvcypeanDJRJbMtg", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "XCP", + "get_quantity": 70000000000, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 732381, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 264, + "fee_provided_remaining": 264, + "status": "filled" + }, + { + "tx_index": 2202451, + "tx_hash": "77f568fc6604dbe209d2ea1b0158d7de20723c0178107eb570f4f2a719b0d7c7", + "block_index": 772817, + "source": "184gKLQTtQU29LXbxbYJkUV4if9SmW6v2d", + "give_asset": "XCP", + "give_quantity": 80800000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 773300, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 264, + "fee_provided_remaining": 264, + "status": "filled" + }, + { + "tx_index": 1946587, + "tx_hash": "b747f290cbbad6faa1c1c05d5c6d001b5a3ef487027bb0d4eefcdc9f6e865c39", + "block_index": 727444, + "source": "1AtcSh7uxenQ6AR5xqr6agAegWRUF5N4uh", + "give_asset": "XCP", + "give_quantity": 70000000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 732444, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 792, + "fee_provided_remaining": 792, + "status": "filled" + } + ] } } \ No newline at end of file From 6177fa19b18e973ef174c81c5f8fc4807f4b8d4a Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 29 Apr 2024 15:32:52 +0200 Subject: [PATCH 158/280] fix tests --- counterparty-core/counterpartycore/test/api_v2_test.py | 4 +++- .../counterpartycore/test/fixtures/api_v2_fixtures.json | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/counterparty-core/counterpartycore/test/api_v2_test.py b/counterparty-core/counterpartycore/test/api_v2_test.py index 28299e31fd..2ba842268e 100644 --- a/counterparty-core/counterpartycore/test/api_v2_test.py +++ b/counterparty-core/counterpartycore/test/api_v2_test.py @@ -25,6 +25,8 @@ def test_api_v2(request): block_index = 310491 address = ADDR[0] asset = "NODIVISIBLE" + asset1 = asset + asset2 = "XCP" tx_hash = "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498" order_hash = "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498" bet_hash = "e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42" @@ -44,7 +46,7 @@ def test_api_v2(request): url = f"{API_ROOT}{route}" url = url.replace("", str(block_index)) url = url.replace("
", address) - url = url.replace("", asset) + url = url.replace("", asset).replace("", asset1).replace("", asset2) url = url.replace("", event) url = url.replace("", str(event_index)) url = url.replace("", order_hash) diff --git a/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json b/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json index 41b89d29c6..5abd05e306 100644 --- a/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json +++ b/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json @@ -979,6 +979,9 @@ "http://api:api@localhost:10009/assets/NODIVISIBLE/orders": { "result": [] }, + "http://api:api@localhost:10009/assets/NODIVISIBLE/XCP/orders": { + "result": [] + }, "http://api:api@localhost:10009/assets/NODIVISIBLE/credits": { "result": [ { From e2eff7ec4bc64a8196eefa03d31fac2bfbc029e8 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 29 Apr 2024 15:42:13 +0200 Subject: [PATCH 159/280] update route --- apiary.apib | 190 +++++++++--------- .../counterpartycore/lib/api/routes.py | 2 +- counterparty-core/tools/apicache.json | 80 ++++++++ 3 files changed, 176 insertions(+), 96 deletions(-) diff --git a/apiary.apib b/apiary.apib index 070cbac515..85abac7dd3 100644 --- a/apiary.apib +++ b/apiary.apib @@ -2588,101 +2588,6 @@ Returns the orders of an asset } ``` -### Get Orders By Two Assets [GET /assets/{asset1}/{asset2}/orders{?status}] - -Returns the orders to exchange two assets - -+ Parameters - + asset1: `NEEDPEPE` (str, required) - The first asset to return - + asset2: `XCP` (str, required) - The second asset to return - + status: `filled` (str, optional) - The status of the orders to return - + Default: `open` - -+ Response 200 (application/json) - - ``` - { - "result": [ - { - "tx_index": 2225134, - "tx_hash": "5b6e0c741d765ebd883dc16eecfb5c340c52865cabf297ca2c1432437c1348b7", - "block_index": 772817, - "source": "1FnM7akSCD8G3fRQHCUEXRCfL35gptsPZB", - "give_asset": "NEEDPEPE", - "give_quantity": 1, - "give_remaining": 0, - "get_asset": "XCP", - "get_quantity": 80800000000, - "get_remaining": 0, - "expiration": 5000, - "expire_index": 777817, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 5544, - "fee_provided_remaining": 5544, - "status": "filled" - }, - { - "tx_index": 1946026, - "tx_hash": "75dc6ee1f67317e674ef33b617d3a9839ee53bf4a2e8274c88d6202d4d89b59a", - "block_index": 727444, - "source": "1GotRejB6XsGgMsM79TvcypeanDJRJbMtg", - "give_asset": "NEEDPEPE", - "give_quantity": 1, - "give_remaining": 0, - "get_asset": "XCP", - "get_quantity": 70000000000, - "get_remaining": 0, - "expiration": 5000, - "expire_index": 732381, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 264, - "fee_provided_remaining": 264, - "status": "filled" - }, - { - "tx_index": 2202451, - "tx_hash": "77f568fc6604dbe209d2ea1b0158d7de20723c0178107eb570f4f2a719b0d7c7", - "block_index": 772817, - "source": "184gKLQTtQU29LXbxbYJkUV4if9SmW6v2d", - "give_asset": "XCP", - "give_quantity": 80800000000, - "give_remaining": 0, - "get_asset": "NEEDPEPE", - "get_quantity": 1, - "get_remaining": 0, - "expiration": 5000, - "expire_index": 773300, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 264, - "fee_provided_remaining": 264, - "status": "filled" - }, - { - "tx_index": 1946587, - "tx_hash": "b747f290cbbad6faa1c1c05d5c6d001b5a3ef487027bb0d4eefcdc9f6e865c39", - "block_index": 727444, - "source": "1AtcSh7uxenQ6AR5xqr6agAegWRUF5N4uh", - "give_asset": "XCP", - "give_quantity": 70000000000, - "give_remaining": 0, - "get_asset": "NEEDPEPE", - "get_quantity": 1, - "get_remaining": 0, - "expiration": 5000, - "expire_index": 732444, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 792, - "fee_provided_remaining": 792, - "status": "filled" - } - ] - } - ``` - ### Get Credits By Asset [GET /assets/{asset}/credits{?limit}{?offset}] Returns the credits of an asset @@ -3269,6 +3174,101 @@ Returns the BTC pays of an order } ``` +### Get Orders By Two Assets [GET /orders/{asset1}/{asset2}{?status}] + +Returns the orders to exchange two assets + ++ Parameters + + asset1: `NEEDPEPE` (str, required) - The first asset to return + + asset2: `XCP` (str, required) - The second asset to return + + status: `filled` (str, optional) - The status of the orders to return + + Default: `open` + ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "tx_index": 2225134, + "tx_hash": "5b6e0c741d765ebd883dc16eecfb5c340c52865cabf297ca2c1432437c1348b7", + "block_index": 772817, + "source": "1FnM7akSCD8G3fRQHCUEXRCfL35gptsPZB", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "XCP", + "get_quantity": 80800000000, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 777817, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 5544, + "fee_provided_remaining": 5544, + "status": "filled" + }, + { + "tx_index": 1946026, + "tx_hash": "75dc6ee1f67317e674ef33b617d3a9839ee53bf4a2e8274c88d6202d4d89b59a", + "block_index": 727444, + "source": "1GotRejB6XsGgMsM79TvcypeanDJRJbMtg", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "XCP", + "get_quantity": 70000000000, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 732381, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 264, + "fee_provided_remaining": 264, + "status": "filled" + }, + { + "tx_index": 2202451, + "tx_hash": "77f568fc6604dbe209d2ea1b0158d7de20723c0178107eb570f4f2a719b0d7c7", + "block_index": 772817, + "source": "184gKLQTtQU29LXbxbYJkUV4if9SmW6v2d", + "give_asset": "XCP", + "give_quantity": 80800000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 773300, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 264, + "fee_provided_remaining": 264, + "status": "filled" + }, + { + "tx_index": 1946587, + "tx_hash": "b747f290cbbad6faa1c1c05d5c6d001b5a3ef487027bb0d4eefcdc9f6e865c39", + "block_index": 727444, + "source": "1AtcSh7uxenQ6AR5xqr6agAegWRUF5N4uh", + "give_asset": "XCP", + "give_quantity": 70000000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 732444, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 792, + "fee_provided_remaining": 792, + "status": "filled" + } + ] + } + ``` + ## Group Bets ### Get Bet [GET /bets/{bet_hash}] diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index 4c5f306a41..7aae6bd372 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -63,7 +63,6 @@ "/assets//balances": ledger.get_asset_balances, "/assets//balances/
": ledger.get_balance_by_address_and_asset, "/assets//orders": ledger.get_orders_by_asset, - "/assets///orders": ledger.get_orders_by_two_assets, "/assets//credits": ledger.get_credits_by_asset, "/assets//debits": ledger.get_debits_by_asset, "/assets//dividends": ledger.get_dividends, @@ -76,6 +75,7 @@ "/orders/": ledger.get_order, "/orders//matches": ledger.get_order_matches_by_order, "/orders//btcpays": ledger.get_btcpays_by_order, + "/orders//": ledger.get_orders_by_two_assets, ### /bets ### "/bets/": ledger.get_bet, "/bets//matches": ledger.get_bet_matches_by_bet, diff --git a/counterparty-core/tools/apicache.json b/counterparty-core/tools/apicache.json index 91aec454c4..633537ab62 100644 --- a/counterparty-core/tools/apicache.json +++ b/counterparty-core/tools/apicache.json @@ -2558,5 +2558,85 @@ "status": "filled" } ] + }, + "/orders//": { + "result": [ + { + "tx_index": 2225134, + "tx_hash": "5b6e0c741d765ebd883dc16eecfb5c340c52865cabf297ca2c1432437c1348b7", + "block_index": 772817, + "source": "1FnM7akSCD8G3fRQHCUEXRCfL35gptsPZB", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "XCP", + "get_quantity": 80800000000, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 777817, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 5544, + "fee_provided_remaining": 5544, + "status": "filled" + }, + { + "tx_index": 1946026, + "tx_hash": "75dc6ee1f67317e674ef33b617d3a9839ee53bf4a2e8274c88d6202d4d89b59a", + "block_index": 727444, + "source": "1GotRejB6XsGgMsM79TvcypeanDJRJbMtg", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "XCP", + "get_quantity": 70000000000, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 732381, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 264, + "fee_provided_remaining": 264, + "status": "filled" + }, + { + "tx_index": 2202451, + "tx_hash": "77f568fc6604dbe209d2ea1b0158d7de20723c0178107eb570f4f2a719b0d7c7", + "block_index": 772817, + "source": "184gKLQTtQU29LXbxbYJkUV4if9SmW6v2d", + "give_asset": "XCP", + "give_quantity": 80800000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 773300, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 264, + "fee_provided_remaining": 264, + "status": "filled" + }, + { + "tx_index": 1946587, + "tx_hash": "b747f290cbbad6faa1c1c05d5c6d001b5a3ef487027bb0d4eefcdc9f6e865c39", + "block_index": 727444, + "source": "1AtcSh7uxenQ6AR5xqr6agAegWRUF5N4uh", + "give_asset": "XCP", + "give_quantity": 70000000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 732444, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 792, + "fee_provided_remaining": 792, + "status": "filled" + } + ] } } \ No newline at end of file From af98c9d432df01c380740b1c087225c3bccbd83c Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 29 Apr 2024 15:50:43 +0200 Subject: [PATCH 160/280] fix fixtures --- .../counterpartycore/test/fixtures/api_v2_fixtures.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json b/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json index 5abd05e306..d560b86858 100644 --- a/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json +++ b/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json @@ -979,9 +979,6 @@ "http://api:api@localhost:10009/assets/NODIVISIBLE/orders": { "result": [] }, - "http://api:api@localhost:10009/assets/NODIVISIBLE/XCP/orders": { - "result": [] - }, "http://api:api@localhost:10009/assets/NODIVISIBLE/credits": { "result": [ { @@ -1167,6 +1164,9 @@ "http://api:api@localhost:10009/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/btcpays": { "result": [] }, + "http://api:api@localhost:10009/orders/NODIVISIBLE/XCP": { + "result": [] + }, "http://api:api@localhost:10009/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42": { "result": [] }, From c8e858b5a1a116be07f738e5354ae489ac40dde5 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 29 Apr 2024 21:00:14 +0200 Subject: [PATCH 161/280] Use docker compose profile --- .github/workflows/test_compose.sh | 2 +- .github/workflows/test_compose.yml | 2 +- docker-compose.yml | 130 ++++++++++++++++++++++------- 3 files changed, 103 insertions(+), 31 deletions(-) diff --git a/.github/workflows/test_compose.sh b/.github/workflows/test_compose.sh index a1075c7fd8..efc9603726 100644 --- a/.github/workflows/test_compose.sh +++ b/.github/workflows/test_compose.sh @@ -35,7 +35,7 @@ docker build -t counterparty/counterparty:$VERSION . # sudo rm -rf ~/.local/share/counterparty-docker-data/counterparty/* # re-start containers -BITCOIN_CHAIN=test docker compose up -d +docker compose --profile testnet up -d while [ "$(docker compose logs counterparty-core 2>&1 | grep 'Ready for queries')" = "" ]; do echo "Waiting for counterparty-core to be ready" diff --git a/.github/workflows/test_compose.yml b/.github/workflows/test_compose.yml index 4d7a0ed541..e6a39862fa 100644 --- a/.github/workflows/test_compose.yml +++ b/.github/workflows/test_compose.yml @@ -2,7 +2,7 @@ name: Docker Compose on: push: - branches: ['develop', 'master'] + branches: ['develop', 'master', "compose"] jobs: build: diff --git a/docker-compose.yml b/docker-compose.yml index f23998126a..67763f0a9d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,16 +1,41 @@ version: '3' +x-bitcoind-common: &bitcoind-common + image: kylemanna/bitcoind:latest + volumes: + - data:/bitcoin/.bitcoin + +x-addrindexrs-common: &addrindexrs-common + image: counterparty/addrindexrs:v0.4.6 + volumes: + - data:/root/.bitcoin + - data:/data + environment: + - ADDRINDEXRS_JSONRPC_IMPORT=${ADDRINDEXRS_JSONRPC_IMPORT:-false} + +x-counterparty-common: &counterparty-common + image: counterparty/counterparty:v10.1.1 + volumes: + - data:/root/.bitcoin + - data:/data + environment: + - XDG_DATA_HOME=/data/ + - XDG_LOG_HOME=/data/ + services: + #################### + # Mainnet Services # + #################### + bitcoind: - image: kylemanna/bitcoind:latest - volumes: - - data:/bitcoin/.bitcoin + <<: *bitcoind-common + profiles: + - mainnet ports: - - "8332:8332" # mainnet - - "18332:18332" # testnet + - "8332:8332" command: - - "-chain=${BITCOIN_CHAIN:-main}" # export BITCOIN_CHAIN=test for testnet + - "-chain=main" - "-rpcallowip=0.0.0.0/0" - "-rpcbind=0.0.0.0" - "-rpcuser=rpc" @@ -24,44 +49,33 @@ services: - "-dbcache=4000" - "-mempoolfullrbf=1" - addrindexrs: - image: counterparty/addrindexrs:v0.4.6 + <<: *addrindexrs-common + profiles: + - mainnet links: - bitcoind - volumes: - - data:/root/.bitcoin - - data:/data ports: - - "8432:8432" # mainnet - - "18432:18432" # testnet + - "8432:8432" command: - - "--network=${BITCOIN_CHAIN:-main}" # export BITCOIN_CHAIN=test for testnet - "--indexer-rpc-host=0.0.0.0" - "--daemon-rpc-host=bitcoind" - "--cookie=rpc:rpc" - "-vvv" - "--db-dir=/data/" - environment: - - ADDRINDEXRS_JSONRPC_IMPORT=${ADDRINDEXRS_JSONRPC_IMPORT:-false} - counterparty-core: - image: counterparty/counterparty:v10.1.1 + <<: *counterparty-common + profiles: + - mainnet links: - bitcoind - addrindexrs - volumes: - - data:/root/.bitcoin - - data:/data ports: - - "4000:4000" # mainnet API v2 - - "14000:14000" # testnet API v2 - - "4100:4100" # mainnet API v1 - - "14100:14100" # testnet API v1 + - "4000:4000" # API v2 + - "4100:4100" # API v1 command: - start - - "--${BITCOIN_CHAIN:-main}net" # export BITCOIN_CHAIN=test for testnet - "--backend-connect=bitcoind" - "--indexd-connect=addrindexrs" - "--rpc-host=0.0.0.0" @@ -69,10 +83,68 @@ services: - "--catch-up=bootstrap" - "--enable-api-v1" #- "--verbose" - environment: - - "XDG_DATA_HOME=/data/" - - "XDG_LOG_HOME=/data/" + ################### + # Tesnet Services # + ################### + + bitcoind-testnet: + <<: *bitcoind-common + profiles: + - testnet + ports: + - "18332:18332" + command: + - "-chain=test" + - "-rpcallowip=0.0.0.0/0" + - "-rpcbind=0.0.0.0" + - "-rpcuser=rpc" + - "-rpcpassword=rpc" + - "-listen=1" + - "-server=1" + - "-printtoconsole=1" + - "-addresstype=legacy" + - "-txindex=1" + - "-prune=0" + - "-dbcache=4000" + - "-mempoolfullrbf=1" + + addrindexrs-testnet: + <<: *addrindexrs-common + profiles: + - testnet + links: + - bitcoind-testnet + ports: + - "18432:18432" + command: + - "--network=testnet" + - "--indexer-rpc-host=0.0.0.0" + - "--daemon-rpc-host=bitcoind-testnet" + - "--cookie=rpc:rpc" + - "-vvv" + - "--db-dir=/data/" + + counterparty-core-testnet: + <<: *counterparty-common + profiles: + - testnet + links: + - bitcoind-testnet + - addrindexrs-testnet + ports: + - "14000:14000" # API v2 + - "14100:14100" # API v1 + command: + - start + - "--testnet" + - "--backend-connect=bitcoind-testnet" + - "--indexd-connect=addrindexrs-testnet" + - "--rpc-host=0.0.0.0" + - "--api-host=0.0.0.0" + - "--catch-up=bootstrap" + - "--enable-api-v1" + #- "--verbose" volumes: data: From 805280c7035f4b4edcc18678fb75f6939b71c5af Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 30 Apr 2024 12:50:20 +0200 Subject: [PATCH 162/280] --profile needed to stop and logs --- .github/workflows/test_compose.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_compose.sh b/.github/workflows/test_compose.sh index efc9603726..c367f8b159 100644 --- a/.github/workflows/test_compose.sh +++ b/.github/workflows/test_compose.sh @@ -19,7 +19,7 @@ cd counterparty-core VERSION=$(cat docker-compose.yml | grep 'image: counterparty/counterparty:' | awk -F ":" '{print $3}') # stop the running containers -docker compose stop +docker compose --profile testnet stop # remove counterparty-core container #docker rm counterparty-core-counterparty-core-1 @@ -37,7 +37,7 @@ docker build -t counterparty/counterparty:$VERSION . # re-start containers docker compose --profile testnet up -d -while [ "$(docker compose logs counterparty-core 2>&1 | grep 'Ready for queries')" = "" ]; do +while [ "$(docker compose --profile testnet logs counterparty-core 2>&1 | grep 'Ready for queries')" = "" ]; do echo "Waiting for counterparty-core to be ready" sleep 1 done From b397a0ba8e9b2041552ad800225cf20f75aefacb Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 30 Apr 2024 13:05:05 +0200 Subject: [PATCH 163/280] fix container name --- .github/workflows/test_compose.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_compose.sh b/.github/workflows/test_compose.sh index c367f8b159..abe220c66d 100644 --- a/.github/workflows/test_compose.sh +++ b/.github/workflows/test_compose.sh @@ -37,7 +37,7 @@ docker build -t counterparty/counterparty:$VERSION . # re-start containers docker compose --profile testnet up -d -while [ "$(docker compose --profile testnet logs counterparty-core 2>&1 | grep 'Ready for queries')" = "" ]; do +while [ "$(docker compose --profile testnet logs counterparty-core-testnet 2>&1 | grep 'Ready for queries')" = "" ]; do echo "Waiting for counterparty-core to be ready" sleep 1 done From 03bd321cea0335358fc9b415e78196ba39a5f548 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 30 Apr 2024 13:40:05 +0200 Subject: [PATCH 164/280] fix typo --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 67763f0a9d..b055e280d0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -85,7 +85,7 @@ services: #- "--verbose" ################### - # Tesnet Services # + # Testnet Services # ################### bitcoind-testnet: From a562af9227dc059b7f09e22f7a2517fa8982dce3 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 30 Apr 2024 14:09:47 +0200 Subject: [PATCH 165/280] Update release notes --- release-notes/release-notes-v10.1.2.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/release-notes/release-notes-v10.1.2.md b/release-notes/release-notes-v10.1.2.md index 1043289879..e927aa17ee 100644 --- a/release-notes/release-notes-v10.1.2.md +++ b/release-notes/release-notes-v10.1.2.md @@ -5,8 +5,8 @@ # Upgrading To continue using the old API you must: -- start `counterparty-server` with the flag `----enable-api-v1` -- replace port `4100` with port `4000` for mainnet and port `14000` with port `14100` +- start `counterparty-server` with the flag `--enable-api-v1` +- replace port `4100` with port `4000` for mainnet and port `14000` with port `14100` for testnet - prefix all endpoints with `/v1/` To easily migrate to the new API, an equivalence table is available in the documentation @@ -22,6 +22,7 @@ To easily migrate to the new API, an equivalence table is available in the docum ## Command-Line Interface * Set default and minimum values for Backend Poll Interval to 3.0 seconds +* Updates `docker-compose.yml` to be able to run a `mainnet` node and a `testnet` node on the same machine # Credits * Ouziel Slama From 0039397f7df20290aa3dd2e817a2d992417bd1f7 Mon Sep 17 00:00:00 2001 From: Adam Krellenstein Date: Tue, 30 Apr 2024 14:54:55 +0200 Subject: [PATCH 166/280] Update release-notes-v10.1.2.md Signed-off-by: Adam Krellenstein --- release-notes/release-notes-v10.1.2.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/release-notes/release-notes-v10.1.2.md b/release-notes/release-notes-v10.1.2.md index e927aa17ee..f04fcb2b5a 100644 --- a/release-notes/release-notes-v10.1.2.md +++ b/release-notes/release-notes-v10.1.2.md @@ -6,9 +6,9 @@ To continue using the old API you must: - start `counterparty-server` with the flag `--enable-api-v1` -- replace port `4100` with port `4000` for mainnet and port `14000` with port `14100` for testnet +- use port `4100` for mainnet and port `14100` for testnet - prefix all endpoints with `/v1/` -To easily migrate to the new API, an equivalence table is available in the documentation +To easily migrate to the new API, an equivalence table is available in the documentation. # ChangeLog @@ -18,11 +18,11 @@ To easily migrate to the new API, an equivalence table is available in the docum ## Codebase -* New ReST API +* Implement API v2 ## Command-Line Interface * Set default and minimum values for Backend Poll Interval to 3.0 seconds -* Updates `docker-compose.yml` to be able to run a `mainnet` node and a `testnet` node on the same machine +* Update `docker-compose.yml` to use different profiles for `mainnet` and `testnet` # Credits * Ouziel Slama From b68d715cdd79ad5c9e52550dfe271471fee0acf2 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 30 Apr 2024 15:26:46 +0200 Subject: [PATCH 167/280] fix arg==None --- counterparty-core/counterpartycore/lib/api/api_server.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index e9e463d81f..b2694d091f 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -125,7 +125,8 @@ def prepare_args(route, **kwargs): if arg_name in function_args: continue str_arg = request.args.get(arg_name) - + if str_arg.lower() == "none": + str_arg = None if str_arg is None and arg["required"]: raise ValueError(f"Missing required parameter: {arg_name}") From 76c50e00b771fbeef03f7c7a1fce2ebc9f63f125 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 30 Apr 2024 15:27:11 +0200 Subject: [PATCH 168/280] generate dredd.yml with genapidoc.py --- counterparty-core/tools/genapidoc.py | 31 ++++++++++- dredd.yml | 81 ++++++++++++++++++++++------ 2 files changed, 95 insertions(+), 17 deletions(-) diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index c076e5995c..b6b6059d73 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -3,11 +3,13 @@ import sys import requests +import yaml from counterpartycore import server CURR_DIR = os.path.dirname(os.path.realpath(__file__)) API_DOC_FILE = os.path.join(CURR_DIR, "../../../Documentation/docs/advanced/api-v2/rest.md") API_BLUEPRINT_FILE = os.path.join(CURR_DIR, "../../apiary.apib") +DREDD_FILE = os.path.join(CURR_DIR, "../../dredd.yml") CACHE_FILE = os.path.join(CURR_DIR, "apicache.json") API_ROOT = "http://api:api@localhost:4000" USE_API_CACHE = True @@ -77,6 +79,23 @@ def get_example_output(path, args): """ } +DREDD_CONFIG = { + "user": "api:api", + "loglevel": "error", + "path": [], + "blueprint": "apiary.apib", + "endpoint": "http://127.0.0.1:4000", + "only": [], +} + + +def include_in_dredd(group, path): + if group in ["Compose", "bitcoin", "mempool"]: + return False + if path in ["/events/counts"]: + return False + return True + def gen_groups_toc(): toc = "" @@ -179,7 +198,13 @@ def gen_groups_toc(): title = title.replace("Pubkeyhash", "PubKeyHash") title = title.replace("Mpma", "MPMA") title = title.replace("Btcpay", "BTCPay") - md += f"\n### {title.strip()} " + title = title.strip() + + if include_in_dredd(current_group, blueprint_path): + dredd_name = f"{current_group.capitalize()} > {title} > {title}" + DREDD_CONFIG["only"].append(dredd_name) + + md += f"\n### {title} " if TARGET == "docusaurus": md += f"[GET `{blueprint_path}`]\n\n" else: @@ -230,3 +255,7 @@ def gen_groups_toc(): with open(TARGET_FILE, "w") as f: f.write(md) print(f"API documentation written to {TARGET_FILE}") + +with open(DREDD_FILE, "w") as f: + yaml.dump(DREDD_CONFIG, f) + print(f"Dredd file written to {DREDD_FILE}") diff --git a/dredd.yml b/dredd.yml index e9786bcb4f..beb3015400 100644 --- a/dredd.yml +++ b/dredd.yml @@ -1,17 +1,66 @@ -color: true -init: true -names: false -only: [] -reporter: apiary -output: [] -header: [] -sorted: false -user: api:api -inline-errors: false -details: false -method: [] -loglevel: warning -path: [] -config: ./dredd.yml blueprint: apiary.apib -endpoint: 'http://127.0.0.1:4000' +endpoint: http://127.0.0.1:4000 +loglevel: error +only: +- Blocks > Get Blocks > Get Blocks +- Blocks > Get Block > Get Block +- Blocks > Get Transactions By Block > Get Transactions By Block +- Blocks > Get Events By Block > Get Events By Block +- Blocks > Get Event Counts By Block > Get Event Counts By Block +- Blocks > Get Events By Block And Event > Get Events By Block And Event +- Blocks > Get Credits By Block > Get Credits By Block +- Blocks > Get Debits By Block > Get Debits By Block +- Blocks > Get Expirations > Get Expirations +- Blocks > Get Cancels > Get Cancels +- Blocks > Get Destructions > Get Destructions +- Blocks > Get Issuances By Block > Get Issuances By Block +- Blocks > Get Sends By Block > Get Sends By Block +- Blocks > Get Dispenses By Block > Get Dispenses By Block +- Blocks > Get Sweeps By Block > Get Sweeps By Block +- Transactions > Info > Info +- Transactions > Unpack > Unpack +- Transactions > Get Transaction By Hash > Get Transaction By Hash +- Addresses > Get Address Balances > Get Address Balances +- Addresses > Get Balance By Address And Asset > Get Balance By Address And Asset +- Addresses > Get Credits By Address > Get Credits By Address +- Addresses > Get Debits By Address > Get Debits By Address +- Addresses > Get Bet By Feed > Get Bet By Feed +- Addresses > Get Broadcasts By Source > Get Broadcasts By Source +- Addresses > Get Burns By Address > Get Burns By Address +- Addresses > Get Send By Address > Get Send By Address +- Addresses > Get Receive By Address > Get Receive By Address +- Addresses > Get Send By Address And Asset > Get Send By Address And Asset +- Addresses > Get Receive By Address And Asset > Get Receive By Address And Asset +- Addresses > Get Dispensers By Address > Get Dispensers By Address +- Addresses > Get Dispensers By Address And Asset > Get Dispensers By Address And + Asset +- Addresses > Get Sweeps By Address > Get Sweeps By Address +- Assets > Get Valid Assets > Get Valid Assets +- Assets > Get Asset Info > Get Asset Info +- Assets > Get Asset Balances > Get Asset Balances +- Assets > Get Balance By Address And Asset > Get Balance By Address And Asset +- Assets > Get Orders By Asset > Get Orders By Asset +- Assets > Get Credits By Asset > Get Credits By Asset +- Assets > Get Debits By Asset > Get Debits By Asset +- Assets > Get Dividends > Get Dividends +- Assets > Get Issuances By Asset > Get Issuances By Asset +- Assets > Get Sends By Asset > Get Sends By Asset +- Assets > Get Dispensers By Asset > Get Dispensers By Asset +- Assets > Get Dispensers By Address And Asset > Get Dispensers By Address And Asset +- Assets > Get Asset Holders > Get Asset Holders +- Orders > Get Order > Get Order +- Orders > Get Order Matches By Order > Get Order Matches By Order +- Orders > Get BTCPays By Order > Get BTCPays By Order +- Orders > Get Orders By Two Assets > Get Orders By Two Assets +- Bets > Get Bet > Get Bet +- Bets > Get Bet Matches By Bet > Get Bet Matches By Bet +- Bets > Get Resolutions By Bet > Get Resolutions By Bet +- Burns > Get All Burns > Get All Burns +- Dispensers > Get Dispenser Info By Hash > Get Dispenser Info By Hash +- Dispensers > Get Dispenses By Dispenser > Get Dispenses By Dispenser +- Events > Get All Events > Get All Events +- Events > Get Event By Index > Get Event By Index +- Events > Get Events By Name > Get Events By Name +- Z-pages > Check Server Health > Check Server Health +path: [] +user: api:api From c4fbd4b202a3129929fbd327e5a514635732ceb7 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 30 Apr 2024 15:48:45 +0200 Subject: [PATCH 169/280] fix tests --- counterparty-core/counterpartycore/lib/api/api_server.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index b2694d091f..5eff5b6429 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -124,8 +124,9 @@ def prepare_args(route, **kwargs): arg_name = arg["name"] if arg_name in function_args: continue + str_arg = request.args.get(arg_name) - if str_arg.lower() == "none": + if str_arg is not None and str_arg.lower() == "none": str_arg = None if str_arg is None and arg["required"]: raise ValueError(f"Missing required parameter: {arg_name}") From 94df1a40c1d040684785944f762b6360344fed77 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 30 Apr 2024 16:22:34 +0200 Subject: [PATCH 170/280] Cache forever /transactions/* and /blocks/* --- counterparty-core/counterpartycore/lib/api/api_server.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index e9e463d81f..3eb81e2369 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -175,7 +175,12 @@ def handle_route(**kwargs): # call the function try: + # cache everything for one block cache_key = f"{ledger.CURRENT_BLOCK_INDEX}:{request.url}" + # except for blocks and transactions cached forever + if request.path.startswith("/blocks/") or request.path.startswith("/transactions/"): + cache_key = request.url + if cache_key in BLOCK_CACHE: result = BLOCK_CACHE[cache_key] else: From 4875d953e1595ed0cac46dbe318ff3a4b252167d Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 30 Apr 2024 19:09:27 +0200 Subject: [PATCH 171/280] restart services unless stopped --- docker-compose.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index b055e280d0..592065302c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,6 +4,7 @@ x-bitcoind-common: &bitcoind-common image: kylemanna/bitcoind:latest volumes: - data:/bitcoin/.bitcoin + restart: unless-stopped x-addrindexrs-common: &addrindexrs-common image: counterparty/addrindexrs:v0.4.6 @@ -12,6 +13,7 @@ x-addrindexrs-common: &addrindexrs-common - data:/data environment: - ADDRINDEXRS_JSONRPC_IMPORT=${ADDRINDEXRS_JSONRPC_IMPORT:-false} + restart: unless-stopped x-counterparty-common: &counterparty-common image: counterparty/counterparty:v10.1.1 @@ -21,6 +23,7 @@ x-counterparty-common: &counterparty-common environment: - XDG_DATA_HOME=/data/ - XDG_LOG_HOME=/data/ + restart: unless-stopped services: From ca2d451841c65d72c92e78cb8888977ed520cb9c Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 30 Apr 2024 19:16:39 +0200 Subject: [PATCH 172/280] remove obsolete version --- docker-compose.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 592065302c..568424e1ea 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,3 @@ -version: '3' - x-bitcoind-common: &bitcoind-common image: kylemanna/bitcoind:latest volumes: From 5c9c7ef7a0bb6f9eaf0e6daceab8a76469f1021b Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 30 Apr 2024 19:33:14 +0200 Subject: [PATCH 173/280] Ready if the last block is less than 2 minutes old --- .../counterpartycore/lib/api/api_server.py | 18 ++++++++++++++++-- .../counterpartycore/lib/ledger.py | 8 ++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 3eb81e2369..eccbfda794 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -1,6 +1,7 @@ import argparse import logging import multiprocessing +import time import traceback from collections import OrderedDict from multiprocessing import Process @@ -36,6 +37,7 @@ auth = HTTPBasicAuth() BACKEND_HEIGHT = None +CURRENT_BLOCK_TIME = None REFRESH_BACKEND_HEIGHT_INTERVAL = 10 BACKEND_HEIGHT_TIMER = None BLOCK_CACHE = OrderedDict() @@ -85,7 +87,11 @@ def api_root(): def is_server_ready(): if BACKEND_HEIGHT is None: return False - return ledger.CURRENT_BLOCK_INDEX >= BACKEND_HEIGHT - 1 + if ledger.CURRENT_BLOCK_INDEX >= BACKEND_HEIGHT - 1: + return True + if time.time() - CURRENT_BLOCK_TIME < 60: + return True + return False def is_cachable(rule): @@ -153,8 +159,16 @@ def handle_route(**kwargs): if BACKEND_HEIGHT is None: return return_result(503, error="Backend still not ready. Please retry later.") db = get_db() + # update the current block index - ledger.CURRENT_BLOCK_INDEX = blocks.last_db_index(db) + global CURRENT_BLOCK_TIME # noqa F811 + last_block = ledger.get_last_block(db) + if last_block: + ledger.CURRENT_BLOCK_INDEX = last_block["block_index"] + CURRENT_BLOCK_TIME = last_block["block_time"] + else: + ledger.CURRENT_BLOCK_INDEX = 0 + CURRENT_BLOCK_TIME = 0 rule = str(request.url_rule.rule) diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index d7175af70d..e2694129b3 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -1364,6 +1364,14 @@ def get_block(db, block_index: int): return None +def get_last_block(db): + cursor = db.cursor() + query = "SELECT * FROM blocks ORDER BY block_index DESC LIMIT 1" + cursor.execute(query) + block = cursor.fetchone() + return block + + def get_transactions_by_block(db, block_index: int): """ Returns the transactions of a block From 56cd6c9f6ad1f46293fb61cd61d7ada6bdfc5569 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 30 Apr 2024 19:45:06 +0200 Subject: [PATCH 174/280] Ready if the last block is less than 2 minutes old (API v1) --- .../counterpartycore/lib/api/api_v1.py | 4 ++-- counterparty-core/counterpartycore/lib/api/util.py | 14 +++++++++----- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_v1.py b/counterparty-core/counterpartycore/lib/api/api_v1.py index cfb03dcd0d..9436084f2f 100644 --- a/counterparty-core/counterpartycore/lib/api/api_v1.py +++ b/counterparty-core/counterpartycore/lib/api/api_v1.py @@ -519,7 +519,7 @@ def run(self): check_backend_state() code = 12 logger.debug("Checking database state.") - api_util.check_last_parsed_block(backend.getblockcount()) + api_util.check_last_parsed_block(self.db, backend.getblockcount()) self.last_database_check = time.time() except (BackendError, DatabaseError) as e: exception_name = e.__class__.__name__ @@ -798,7 +798,7 @@ def get_running_info(): latest_block_index = backend.getblockcount() try: - api_util.check_last_parsed_block(latest_block_index) + api_util.check_last_parsed_block(self.db, latest_block_index) except DatabaseError: caught_up = False else: diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index 3692993889..67a6424c11 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -2,6 +2,7 @@ import inspect import json import logging +import time from logging import handlers as logging_handlers import flask @@ -11,17 +12,20 @@ logger = logging.getLogger(config.LOGGER_NAME) -def check_last_parsed_block(blockcount): +def check_last_parsed_block(db, blockcount): """Checks database to see if is caught up with backend.""" + last_block = ledger.get_last_block(db) + if time.time() - last_block["block_time"] < 60: + return if ledger.CURRENT_BLOCK_INDEX + 1 < blockcount: raise exceptions.DatabaseError(f"{config.XCP_NAME} database is behind backend.") logger.debug("Database state check passed.") -def healthz_light(): +def healthz_light(db): logger.debug("Performing light healthz check.") latest_block_index = backend.getblockcount() - check_last_parsed_block(latest_block_index) + check_last_parsed_block(db, latest_block_index) def healthz_heavy(db): @@ -43,9 +47,9 @@ def healthz_heavy(db): def healthz(db, check_type: str = "heavy"): try: if check_type == "light": - healthz_light() + healthz_light(db) else: - healthz_light() + healthz_light(db) healthz_heavy(db) except Exception as e: logger.error(f"Health check failed: {e}") From 915440991d662f2ef0ba84d2559e346a5af84483 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 30 Apr 2024 19:47:08 +0200 Subject: [PATCH 175/280] update release notes --- release-notes/release-notes-v10.1.2.md | 1 + 1 file changed, 1 insertion(+) diff --git a/release-notes/release-notes-v10.1.2.md b/release-notes/release-notes-v10.1.2.md index 1043289879..1a7650417f 100644 --- a/release-notes/release-notes-v10.1.2.md +++ b/release-notes/release-notes-v10.1.2.md @@ -19,6 +19,7 @@ To easily migrate to the new API, an equivalence table is available in the docum ## Codebase * New ReST API +* APIs return ready if the last block is less than 2 minutes old ## Command-Line Interface * Set default and minimum values for Backend Poll Interval to 3.0 seconds From 34b740fe60f10aa9b141c874c258bd286281807b Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 30 Apr 2024 20:26:48 +0200 Subject: [PATCH 176/280] fix release notes --- release-notes/release-notes-v10.1.2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release-notes/release-notes-v10.1.2.md b/release-notes/release-notes-v10.1.2.md index 1a7650417f..df6c764b8c 100644 --- a/release-notes/release-notes-v10.1.2.md +++ b/release-notes/release-notes-v10.1.2.md @@ -19,7 +19,7 @@ To easily migrate to the new API, an equivalence table is available in the docum ## Codebase * New ReST API -* APIs return ready if the last block is less than 2 minutes old +* APIs return ready if the last block is less than 1 minute old ## Command-Line Interface * Set default and minimum values for Backend Poll Interval to 3.0 seconds From b39b970942e68a5e295215b1c18c4701d558ab70 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 1 May 2024 10:37:43 +0200 Subject: [PATCH 177/280] Add test to compare hashes with v9 server --- .../counterpartycore/test/book_test.py | 2 - .../test/compare_hashes_test.py | 59 +++++++++++++++++++ .../counterpartycore/test/conftest.py | 8 +++ 3 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 counterparty-core/counterpartycore/test/compare_hashes_test.py diff --git a/counterparty-core/counterpartycore/test/book_test.py b/counterparty-core/counterpartycore/test/book_test.py index 297c57b799..0d3520713b 100644 --- a/counterparty-core/counterpartycore/test/book_test.py +++ b/counterparty-core/counterpartycore/test/book_test.py @@ -1,5 +1,3 @@ -#! /usr/bin/python3 - import pytest # this is require near the top to do setup of the test suite diff --git a/counterparty-core/counterpartycore/test/compare_hashes_test.py b/counterparty-core/counterpartycore/test/compare_hashes_test.py new file mode 100644 index 0000000000..898f827514 --- /dev/null +++ b/counterparty-core/counterpartycore/test/compare_hashes_test.py @@ -0,0 +1,59 @@ +import json + +import pytest +import requests + +from counterpartycore.test import ( + conftest, # noqa: F401 +) + +# This two servers must be up and running +API_V9_URL = "http://rpc:rpc@api1.counterparty.io:4000" +API_V10_URL = "http://api:api@localhost:4000" + + +def test_compare_hashes(skip): + if skip: + pytest.skip("Skipping test book") + return + + # get v9 last block + headers = {"content-type": "application/json"} + payload = { + "method": "get_running_info", + "jsonrpc": "2.0", + "id": 0, + } + response = requests.post(API_V9_URL, data=json.dumps(payload), headers=headers, timeout=10) + v9_block_index = response.json()["result"]["last_block"]["block_index"] + # print(v9_block_index) + + # get v10 last block + response = requests.get(f"{API_V10_URL}/", timeout=10) + v10_block_index = response.json()["result"]["counterparty_height"] + # print(v10_block_index) + + # take the lower block + last_block_index = min(v9_block_index, v10_block_index) + + # get v9 block hashes + payload = { + "method": "get_block_info", + "jsonrpc": "2.0", + "id": 0, + "params": {"block_index": last_block_index}, + } + response = requests.post(API_V9_URL, data=json.dumps(payload), headers=headers, timeout=10) + v9_ledger_hash = response.json()["result"]["ledger_hash"] + v9_txlist_hash = response.json()["result"]["txlist_hash"] + # print(v9_ledger_hash, v9_txlist_hash) + + # get v10 block hashes + response = requests.get(f"{API_V10_URL}/blocks/{last_block_index}", timeout=10) + v10_ledger_hash = response.json()["result"]["ledger_hash"] + v10_txlist_hash = response.json()["result"]["txlist_hash"] + # print(v10_ledger_hash, v10_txlist_hash) + + # compare hashes + assert v9_ledger_hash == v10_ledger_hash + assert v9_txlist_hash == v10_txlist_hash diff --git a/counterparty-core/counterpartycore/test/conftest.py b/counterparty-core/counterpartycore/test/conftest.py index 990a028180..d4f462fb7f 100644 --- a/counterparty-core/counterpartycore/test/conftest.py +++ b/counterparty-core/counterpartycore/test/conftest.py @@ -157,6 +157,8 @@ def pytest_generate_tests(metafunc): metafunc.parametrize("scenario_name, base_scenario_name, transactions, pytest_config", args) elif metafunc.function.__name__ == "test_book": metafunc.parametrize("skip", [not metafunc.config.getoption("testbook")]) + elif metafunc.function.__name__ == "test_compare_hashes": + metafunc.parametrize("skip", [not metafunc.config.getoption("comparehashes")]) def pytest_addoption(parser): @@ -185,6 +187,12 @@ def pytest_addoption(parser): default=False, help="Generate api v2 fixtures for tests", ) + parser.addoption( + "--comparehashes", + action="store_true", + default=False, + help="Compare last block hashes with v9 version", + ) @pytest.fixture(scope="function") From 9776c7ff89814fdbd7613844a099fd1748bfa52d Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 1 May 2024 10:51:42 +0200 Subject: [PATCH 178/280] Compare with a list of servers --- .../test/compare_hashes_test.py | 91 ++++++++++++------- 1 file changed, 58 insertions(+), 33 deletions(-) diff --git a/counterparty-core/counterpartycore/test/compare_hashes_test.py b/counterparty-core/counterpartycore/test/compare_hashes_test.py index 898f827514..6ca4663f41 100644 --- a/counterparty-core/counterpartycore/test/compare_hashes_test.py +++ b/counterparty-core/counterpartycore/test/compare_hashes_test.py @@ -7,53 +7,78 @@ conftest, # noqa: F401 ) -# This two servers must be up and running -API_V9_URL = "http://rpc:rpc@api1.counterparty.io:4000" -API_V10_URL = "http://api:api@localhost:4000" +LOCAL_API_URL = "http://api:api@localhost:4000" +CHECK_SERVERS = [ + ["http://rpc:rpc@api1.counterparty.io:4000", "v9"], +] -def test_compare_hashes(skip): - if skip: - pytest.skip("Skipping test book") - return - # get v9 last block +def get_last_block_v9(api_url): headers = {"content-type": "application/json"} payload = { "method": "get_running_info", "jsonrpc": "2.0", "id": 0, } - response = requests.post(API_V9_URL, data=json.dumps(payload), headers=headers, timeout=10) - v9_block_index = response.json()["result"]["last_block"]["block_index"] - # print(v9_block_index) + response = requests.post(api_url, data=json.dumps(payload), headers=headers, timeout=10) + return response.json()["result"]["last_block"]["block_index"] - # get v10 last block - response = requests.get(f"{API_V10_URL}/", timeout=10) - v10_block_index = response.json()["result"]["counterparty_height"] - # print(v10_block_index) - # take the lower block - last_block_index = min(v9_block_index, v10_block_index) +def get_last_block_v10(api_url): + response = requests.get(f"{api_url}/", timeout=10) + return response.json()["result"]["counterparty_height"] - # get v9 block hashes + +def get_block_hashes_v9(api_url, block_index): + headers = {"content-type": "application/json"} payload = { "method": "get_block_info", "jsonrpc": "2.0", "id": 0, - "params": {"block_index": last_block_index}, + "params": {"block_index": block_index}, } - response = requests.post(API_V9_URL, data=json.dumps(payload), headers=headers, timeout=10) - v9_ledger_hash = response.json()["result"]["ledger_hash"] - v9_txlist_hash = response.json()["result"]["txlist_hash"] - # print(v9_ledger_hash, v9_txlist_hash) - - # get v10 block hashes - response = requests.get(f"{API_V10_URL}/blocks/{last_block_index}", timeout=10) - v10_ledger_hash = response.json()["result"]["ledger_hash"] - v10_txlist_hash = response.json()["result"]["txlist_hash"] - # print(v10_ledger_hash, v10_txlist_hash) - - # compare hashes - assert v9_ledger_hash == v10_ledger_hash - assert v9_txlist_hash == v10_txlist_hash + response = requests.post(api_url, data=json.dumps(payload), headers=headers, timeout=10) + return response.json()["result"]["ledger_hash"], response.json()["result"]["txlist_hash"] + + +def get_block_hashes_v10(api_url, block_index): + response = requests.get(f"{api_url}/blocks/{block_index}", timeout=10) + return response.json()["result"]["ledger_hash"], response.json()["result"]["txlist_hash"] + + +def test_compare_hashes(skip): + if skip: + pytest.skip("Skipping test book") + return + + # get last blocks + local_block_index = get_last_block_v10(LOCAL_API_URL) + check_servers_block_indexes = [local_block_index] + for check_server in CHECK_SERVERS: + check_server_url, check_server_version = check_server + if check_server_version == "v9": + check_servers_block_indexes.append(get_last_block_v9(check_server_url)) + else: + check_servers_block_indexes.append(get_last_block_v10(check_server_url)) + + # take the lower block + last_block_index = min(*check_servers_block_indexes) + print(f"Last block index: {last_block_index}") + + # get block hashes + local_ledger_hash, local_txlist_hash = get_block_hashes_v10(LOCAL_API_URL, last_block_index) + for check_server in CHECK_SERVERS: + check_server_url, check_server_version = check_server + if check_server_version == "v9": + check_ledger_hash, check_txlist_hash = get_block_hashes_v9( + check_server_url, last_block_index + ) + else: + check_ledger_hash, check_txlist_hash = get_block_hashes_v10( + check_server_url, last_block_index + ) + + # compare hashes + assert check_ledger_hash == local_ledger_hash + assert check_txlist_hash == local_txlist_hash From 660018b3b66ca884f79b50a977735f3ac11e1abe Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 1 May 2024 13:22:01 +0200 Subject: [PATCH 179/280] Inject issuance when ?verbose=true --- .../counterpartycore/lib/api/api_server.py | 78 +++++++++++++++---- .../counterpartycore/lib/ledger.py | 22 ++++++ 2 files changed, 84 insertions(+), 16 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index eccbfda794..7421ac0a32 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -154,6 +154,61 @@ def prepare_args(route, **kwargs): return function_args +def execute_api_function(db, route, function_args): + # cache everything for one block + cache_key = f"{ledger.CURRENT_BLOCK_INDEX}:{request.url}" + # except for blocks and transactions cached forever + if request.path.startswith("/blocks/") or request.path.startswith("/transactions/"): + cache_key = request.url + + if cache_key in BLOCK_CACHE: + print("CACHE HIT") + result = BLOCK_CACHE[cache_key] + else: + if function_needs_db(route["function"]): + result = route["function"](db, **function_args) + else: + result = route["function"](**function_args) + BLOCK_CACHE[cache_key] = result + if len(BLOCK_CACHE) > MAX_BLOCK_CACHE_SIZE: + BLOCK_CACHE.popitem(last=False) + + return result + + +def inject_issuance(db, result): + # gather asset list + asset_list = [] + result_list = result if isinstance(result, list) else [result] + for item in result_list: + if "asset_longname" in item: + continue + for field_name in ["asset", "give_asset", "get_asset"]: + if field_name in item: + asset_list.append(item[field_name]) + + # get asset issuances + issuance_by_asset = ledger.get_assets_last_issuance(db, asset_list) + + # inject issuance + if isinstance(result, list): + for item in result: + for field_name in ["asset", "give_asset", "get_asset"]: + if field_name in item and item[field_name] in issuance_by_asset: + item[field_name + "_issuance"] = issuance_by_asset[item[field_name]] + elif isinstance(result, dict): + for field_name in ["asset", "give_asset", "get_asset"]: + if field_name in result and result[field_name] in issuance_by_asset: + result[field_name + "_issuance"] = issuance_by_asset[item[field_name]] + + return result + + +def inject_details(db, result): + result = inject_issuance(db, result) + return result + + @auth.login_required def handle_route(**kwargs): if BACKEND_HEIGHT is None: @@ -189,22 +244,7 @@ def handle_route(**kwargs): # call the function try: - # cache everything for one block - cache_key = f"{ledger.CURRENT_BLOCK_INDEX}:{request.url}" - # except for blocks and transactions cached forever - if request.path.startswith("/blocks/") or request.path.startswith("/transactions/"): - cache_key = request.url - - if cache_key in BLOCK_CACHE: - result = BLOCK_CACHE[cache_key] - else: - if function_needs_db(route["function"]): - result = route["function"](db, **function_args) - else: - result = route["function"](**function_args) - BLOCK_CACHE[cache_key] = result - if len(BLOCK_CACHE) > MAX_BLOCK_CACHE_SIZE: - BLOCK_CACHE.popitem(last=False) + result = execute_api_function(db, route, function_args) except (exceptions.ComposeError, exceptions.UnpackError) as e: return return_result(503, error=str(e)) except Exception as e: @@ -216,6 +256,12 @@ def handle_route(**kwargs): if result is None: return return_result(404, error="Not found") result = remove_rowids(result) + + # inject details + verbose = request.args.get("verbose", "False") + if verbose.lower() in ["true", "1"]: + result = inject_details(db, result) + return return_result(200, result=result) diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index e2694129b3..65d8d99444 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -1120,6 +1120,28 @@ def get_asset_info(db, asset: str): return asset_info +def get_assets_last_issuance(db, asset_list): + cursor = db.cursor() + fields = ["asset", "asset_longname", "description", "issuer", "divisible", "locked"] + query = f""" + SELECT {", ".join(fields)}, MAX(rowid) AS rowid + FROM issuances + WHERE asset IN ({",".join(["?"] * len(asset_list))}) + AND status = ? + GROUP BY asset + """ # nosec B608 # noqa: S608 + cursor.execute(query, asset_list + ["valid"]) + issuances = cursor.fetchall() + + result = {} + for issuance in issuances: + del issuance["rowid"] + asset = issuance["asset"] + del issuance["asset"] + result[asset] = issuance + return result + + def get_issuances( db, asset=None, status=None, locked=None, block_index=None, first=False, last=False ): From 235f30d27f3ec3e714c363cd1d9dc28dec4f3963 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 1 May 2024 13:26:25 +0200 Subject: [PATCH 180/280] Fix typo --- counterparty-core/counterpartycore/lib/api/api_server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 7421ac0a32..0e2066258c 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -199,7 +199,7 @@ def inject_issuance(db, result): elif isinstance(result, dict): for field_name in ["asset", "give_asset", "get_asset"]: if field_name in result and result[field_name] in issuance_by_asset: - result[field_name + "_issuance"] = issuance_by_asset[item[field_name]] + result[field_name + "_issuance"] = issuance_by_asset[result[field_name]] return result From f0f8792a82add4c78abb5713b627fad92f9023c4 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 1 May 2024 13:30:31 +0200 Subject: [PATCH 181/280] BTW fix missing indexes --- counterparty-core/counterpartycore/lib/blocks.py | 2 ++ .../test/fixtures/scenarios/multisig_1_of_2.sql | 4 ++++ .../test/fixtures/scenarios/multisig_1_of_3.sql | 4 ++++ .../test/fixtures/scenarios/multisig_2_of_2.sql | 4 ++++ .../test/fixtures/scenarios/multisig_2_of_3.sql | 4 ++++ .../test/fixtures/scenarios/multisig_3_of_3.sql | 4 ++++ .../test/fixtures/scenarios/parseblock_unittest_fixture.sql | 4 ++++ .../counterpartycore/test/fixtures/scenarios/simplesig.sql | 4 ++++ .../test/fixtures/scenarios/unittest_fixture.sql | 4 ++++ 9 files changed, 34 insertions(+) diff --git a/counterparty-core/counterpartycore/lib/blocks.py b/counterparty-core/counterpartycore/lib/blocks.py index f13c52a619..875549d519 100644 --- a/counterparty-core/counterpartycore/lib/blocks.py +++ b/counterparty-core/counterpartycore/lib/blocks.py @@ -455,6 +455,7 @@ def initialise(db): [ ["address"], ["asset"], + ["block_index"], ], ) @@ -481,6 +482,7 @@ def initialise(db): [ ["address"], ["asset"], + ["block_index"], ], ) diff --git a/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_1_of_2.sql b/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_1_of_2.sql index 8c9287afac..daadca6d12 100644 --- a/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_1_of_2.sql +++ b/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_1_of_2.sql @@ -400,6 +400,8 @@ CREATE INDEX credits_address_idx ON credits (address) ; CREATE INDEX credits_asset_idx ON credits (asset) ; +CREATE INDEX credits_block_index_idx ON credits (block_index) + ; COMMIT TRANSACTION; PRAGMA page_size=4096; @@ -446,6 +448,8 @@ CREATE INDEX debits_address_idx ON debits (address) ; CREATE INDEX debits_asset_idx ON debits (asset) ; +CREATE INDEX debits_block_index_idx ON debits (block_index) + ; COMMIT TRANSACTION; PRAGMA page_size=4096; diff --git a/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_1_of_3.sql b/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_1_of_3.sql index 0fc147148b..496e6707ed 100644 --- a/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_1_of_3.sql +++ b/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_1_of_3.sql @@ -400,6 +400,8 @@ CREATE INDEX credits_address_idx ON credits (address) ; CREATE INDEX credits_asset_idx ON credits (asset) ; +CREATE INDEX credits_block_index_idx ON credits (block_index) + ; COMMIT TRANSACTION; PRAGMA page_size=4096; @@ -446,6 +448,8 @@ CREATE INDEX debits_address_idx ON debits (address) ; CREATE INDEX debits_asset_idx ON debits (asset) ; +CREATE INDEX debits_block_index_idx ON debits (block_index) + ; COMMIT TRANSACTION; PRAGMA page_size=4096; diff --git a/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_2_of_2.sql b/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_2_of_2.sql index a6adacb8e0..95f0941980 100644 --- a/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_2_of_2.sql +++ b/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_2_of_2.sql @@ -400,6 +400,8 @@ CREATE INDEX credits_address_idx ON credits (address) ; CREATE INDEX credits_asset_idx ON credits (asset) ; +CREATE INDEX credits_block_index_idx ON credits (block_index) + ; COMMIT TRANSACTION; PRAGMA page_size=4096; @@ -446,6 +448,8 @@ CREATE INDEX debits_address_idx ON debits (address) ; CREATE INDEX debits_asset_idx ON debits (asset) ; +CREATE INDEX debits_block_index_idx ON debits (block_index) + ; COMMIT TRANSACTION; PRAGMA page_size=4096; diff --git a/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_2_of_3.sql b/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_2_of_3.sql index a98db1ec2f..a87c20a6ff 100644 --- a/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_2_of_3.sql +++ b/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_2_of_3.sql @@ -400,6 +400,8 @@ CREATE INDEX credits_address_idx ON credits (address) ; CREATE INDEX credits_asset_idx ON credits (asset) ; +CREATE INDEX credits_block_index_idx ON credits (block_index) + ; COMMIT TRANSACTION; PRAGMA page_size=4096; @@ -446,6 +448,8 @@ CREATE INDEX debits_address_idx ON debits (address) ; CREATE INDEX debits_asset_idx ON debits (asset) ; +CREATE INDEX debits_block_index_idx ON debits (block_index) + ; COMMIT TRANSACTION; PRAGMA page_size=4096; diff --git a/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_3_of_3.sql b/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_3_of_3.sql index 3305ecf6cb..fb649c2b0b 100644 --- a/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_3_of_3.sql +++ b/counterparty-core/counterpartycore/test/fixtures/scenarios/multisig_3_of_3.sql @@ -400,6 +400,8 @@ CREATE INDEX credits_address_idx ON credits (address) ; CREATE INDEX credits_asset_idx ON credits (asset) ; +CREATE INDEX credits_block_index_idx ON credits (block_index) + ; COMMIT TRANSACTION; PRAGMA page_size=4096; @@ -446,6 +448,8 @@ CREATE INDEX debits_address_idx ON debits (address) ; CREATE INDEX debits_asset_idx ON debits (asset) ; +CREATE INDEX debits_block_index_idx ON debits (block_index) + ; COMMIT TRANSACTION; PRAGMA page_size=4096; diff --git a/counterparty-core/counterpartycore/test/fixtures/scenarios/parseblock_unittest_fixture.sql b/counterparty-core/counterpartycore/test/fixtures/scenarios/parseblock_unittest_fixture.sql index e18a8038e9..105abfb2a5 100644 --- a/counterparty-core/counterpartycore/test/fixtures/scenarios/parseblock_unittest_fixture.sql +++ b/counterparty-core/counterpartycore/test/fixtures/scenarios/parseblock_unittest_fixture.sql @@ -884,6 +884,8 @@ CREATE INDEX credits_address_idx ON credits (address) ; CREATE INDEX credits_asset_idx ON credits (asset) ; +CREATE INDEX credits_block_index_idx ON credits (block_index) + ; COMMIT TRANSACTION; PRAGMA page_size=4096; @@ -946,6 +948,8 @@ CREATE INDEX debits_address_idx ON debits (address) ; CREATE INDEX debits_asset_idx ON debits (asset) ; +CREATE INDEX debits_block_index_idx ON debits (block_index) + ; COMMIT TRANSACTION; PRAGMA page_size=4096; diff --git a/counterparty-core/counterpartycore/test/fixtures/scenarios/simplesig.sql b/counterparty-core/counterpartycore/test/fixtures/scenarios/simplesig.sql index 5dda0aad4b..938224743f 100644 --- a/counterparty-core/counterpartycore/test/fixtures/scenarios/simplesig.sql +++ b/counterparty-core/counterpartycore/test/fixtures/scenarios/simplesig.sql @@ -400,6 +400,8 @@ CREATE INDEX credits_address_idx ON credits (address) ; CREATE INDEX credits_asset_idx ON credits (asset) ; +CREATE INDEX credits_block_index_idx ON credits (block_index) + ; COMMIT TRANSACTION; PRAGMA page_size=4096; @@ -446,6 +448,8 @@ CREATE INDEX debits_address_idx ON debits (address) ; CREATE INDEX debits_asset_idx ON debits (asset) ; +CREATE INDEX debits_block_index_idx ON debits (block_index) + ; COMMIT TRANSACTION; PRAGMA page_size=4096; diff --git a/counterparty-core/counterpartycore/test/fixtures/scenarios/unittest_fixture.sql b/counterparty-core/counterpartycore/test/fixtures/scenarios/unittest_fixture.sql index 83e705eb0d..17f899b8fb 100644 --- a/counterparty-core/counterpartycore/test/fixtures/scenarios/unittest_fixture.sql +++ b/counterparty-core/counterpartycore/test/fixtures/scenarios/unittest_fixture.sql @@ -883,6 +883,8 @@ CREATE INDEX credits_address_idx ON credits (address) ; CREATE INDEX credits_asset_idx ON credits (asset) ; +CREATE INDEX credits_block_index_idx ON credits (block_index) + ; COMMIT TRANSACTION; PRAGMA page_size=4096; @@ -945,6 +947,8 @@ CREATE INDEX debits_address_idx ON debits (address) ; CREATE INDEX debits_asset_idx ON debits (asset) ; +CREATE INDEX debits_block_index_idx ON debits (block_index) + ; COMMIT TRANSACTION; PRAGMA page_size=4096; From de38438c84ecdd1a62128bf7fc051c16b259b1b8 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 1 May 2024 15:35:49 +0200 Subject: [PATCH 182/280] Inject normalized quantity --- .../counterpartycore/lib/api/api_server.py | 46 +++++++++++++++---- .../counterpartycore/lib/ledger.py | 7 ++- 2 files changed, 40 insertions(+), 13 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 0e2066258c..44e1b2adb0 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -177,9 +177,15 @@ def execute_api_function(db, route, function_args): def inject_issuance(db, result): + # let's work with a list + result_list = result + result_is_dict = False + if isinstance(result, dict): + result_list = [result] + result_is_dict = True + # gather asset list asset_list = [] - result_list = result if isinstance(result, list) else [result] for item in result_list: if "asset_longname" in item: continue @@ -191,16 +197,38 @@ def inject_issuance(db, result): issuance_by_asset = ledger.get_assets_last_issuance(db, asset_list) # inject issuance - if isinstance(result, list): - for item in result: - for field_name in ["asset", "give_asset", "get_asset"]: - if field_name in item and item[field_name] in issuance_by_asset: - item[field_name + "_issuance"] = issuance_by_asset[item[field_name]] - elif isinstance(result, dict): + for item in result_list: for field_name in ["asset", "give_asset", "get_asset"]: - if field_name in result and result[field_name] in issuance_by_asset: - result[field_name + "_issuance"] = issuance_by_asset[result[field_name]] + if field_name in item and item[field_name] in issuance_by_asset: + item[field_name + "_issuance"] = issuance_by_asset[item[field_name]] + # inject normalized quantities + for item in result_list: + for field_name in [ + "quantity", + "give_quantity", + "get_quantity", + "get_remaining", + "give_remaining", + "escrow_quantity", + ]: + if field_name not in item: + continue + issuance_field_name = ( + field_name.replace("quantity", "asset").replace("remaining", "asset") + "_issuance" + ) + print("issuance_field_name", issuance_field_name) + if issuance_field_name not in item: + issuance_field_name = "asset_issuance" + if issuance_field_name not in item: + continue + is_divisible = item[issuance_field_name]["divisible"] + item[field_name + "_normalized"] = ( + item[field_name] / 10**8 if is_divisible else item[field_name] + ) + + if result_is_dict: + return result_list[0] return result diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index 65d8d99444..f48c224d40 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -1698,11 +1698,10 @@ def get_dispenser_info(db, tx_hash=None, tx_index=None): bindings.append(tx_index) # no sql injection here query = f""" - SELECT d.*, a.asset_longname - FROM dispensers d - LEFT JOIN assets a ON a.asset_name = d.asset + SELECT * + FROM dispensers WHERE ({" AND ".join(where)}) - ORDER BY d.rowid DESC LIMIT 1 + ORDER BY rowid DESC LIMIT 1 """ # nosec B608 # noqa: S608 cursor.execute(query, tuple(bindings)) return cursor.fetchall() From 327e9c9d02013f7639b46e3693078a2a24623c33 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 1 May 2024 16:04:54 +0200 Subject: [PATCH 183/280] Inject details also in events params --- .../counterpartycore/lib/api/api_server.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 44e1b2adb0..52a4cc8b69 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -162,7 +162,6 @@ def execute_api_function(db, route, function_args): cache_key = request.url if cache_key in BLOCK_CACHE: - print("CACHE HIT") result = BLOCK_CACHE[cache_key] else: if function_needs_db(route["function"]): @@ -186,9 +185,12 @@ def inject_issuance(db, result): # gather asset list asset_list = [] - for item in result_list: - if "asset_longname" in item: + for result_item in result_list: + if "asset_longname" in result_item: continue + item = result_item + if "params" in item: + item = item["params"] for field_name in ["asset", "give_asset", "get_asset"]: if field_name in item: asset_list.append(item[field_name]) @@ -197,13 +199,17 @@ def inject_issuance(db, result): issuance_by_asset = ledger.get_assets_last_issuance(db, asset_list) # inject issuance - for item in result_list: + for result_item in result_list: + item = result_item + if "params" in item: + item = item["params"] for field_name in ["asset", "give_asset", "get_asset"]: if field_name in item and item[field_name] in issuance_by_asset: item[field_name + "_issuance"] = issuance_by_asset[item[field_name]] # inject normalized quantities - for item in result_list: + for result_item in result_list: + item = result_item for field_name in [ "quantity", "give_quantity", @@ -212,12 +218,13 @@ def inject_issuance(db, result): "give_remaining", "escrow_quantity", ]: + if "params" in item: + item = item["params"] if field_name not in item: continue issuance_field_name = ( field_name.replace("quantity", "asset").replace("remaining", "asset") + "_issuance" ) - print("issuance_field_name", issuance_field_name) if issuance_field_name not in item: issuance_field_name = "asset_issuance" if issuance_field_name not in item: From 6fcd57e0b38680cccfd0b8f03499125f2d093960 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 1 May 2024 16:40:50 +0200 Subject: [PATCH 184/280] Inject dispenser when dispenser_tx_hash is present --- .../counterpartycore/lib/api/api_server.py | 46 +++++++++++++++++-- .../counterpartycore/lib/ledger.py | 19 ++++++++ 2 files changed, 62 insertions(+), 3 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 52a4cc8b69..51d48bf3cd 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -193,7 +193,8 @@ def inject_issuance(db, result): item = item["params"] for field_name in ["asset", "give_asset", "get_asset"]: if field_name in item: - asset_list.append(item[field_name]) + if item[field_name] not in asset_list: + asset_list.append(item[field_name]) # get asset issuances issuance_by_asset = ledger.get_assets_last_issuance(db, asset_list) @@ -217,9 +218,13 @@ def inject_issuance(db, result): "get_remaining", "give_remaining", "escrow_quantity", + "dispense_quantity", ]: if "params" in item: item = item["params"] + if "dispenser" in item: + item = result_item["dispenser"] + # item["asset_issuance"] = result_item["asset_issuance"] if field_name not in item: continue issuance_field_name = ( @@ -227,9 +232,12 @@ def inject_issuance(db, result): ) if issuance_field_name not in item: issuance_field_name = "asset_issuance" - if issuance_field_name not in item: + if issuance_field_name not in item and issuance_field_name not in result_item: continue - is_divisible = item[issuance_field_name]["divisible"] + if issuance_field_name not in item: + is_divisible = result_item[issuance_field_name]["divisible"] + else: + is_divisible = item[issuance_field_name]["divisible"] item[field_name + "_normalized"] = ( item[field_name] / 10**8 if is_divisible else item[field_name] ) @@ -239,7 +247,39 @@ def inject_issuance(db, result): return result +def inject_dispensers(db, result): + # let's work with a list + result_list = result + result_is_dict = False + if isinstance(result, dict): + result_list = [result] + result_is_dict = True + + # gather dispenser list + dispenser_list = [] + for result_item in result_list: + if "dispenser_tx_hash" in result_item: + if result_item["dispenser_tx_hash"] not in dispenser_list: + dispenser_list.append(result_item["dispenser_tx_hash"]) + + # get dispenser info + dispenser_info = ledger.get_dispensers_info(db, dispenser_list) + + # inject dispenser info + for result_item in result_list: + if ( + "dispenser_tx_hash" in result_item + and result_item["dispenser_tx_hash"] in dispenser_info + ): + result_item["dispenser"] = dispenser_info[result_item["dispenser_tx_hash"]] + + if result_is_dict: + return result_list[0] + return result + + def inject_details(db, result): + result = inject_dispensers(db, result) result = inject_issuance(db, result) return result diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index f48c224d40..5b01d8bb06 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -1707,6 +1707,25 @@ def get_dispenser_info(db, tx_hash=None, tx_index=None): return cursor.fetchall() +def get_dispensers_info(db, tx_hash_list): + cursor = db.cursor() + query = """ + SELECT *, MAX(rowid) AS rowid FROM dispensers + WHERE tx_hash IN ({}) + GROUP BY tx_hash + """.format(",".join(["?" for e in range(0, len(tx_hash_list))])) # nosec B608 # noqa: S608 + cursor.execute(query, tx_hash_list) + dispensers = cursor.fetchall() + result = {} + for dispenser in dispensers: + del dispenser["rowid"] + tx_hash = dispenser["tx_hash"] + del dispenser["tx_hash"] + del dispenser["asset"] + result[tx_hash] = dispenser + return result + + def get_dispenser_info_by_hash(db, dispenser_hash: str): """ Returns the dispenser information by tx_hash From 44ace48f9a4633f247a759c41d655f269028d4f0 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 1 May 2024 17:08:46 +0200 Subject: [PATCH 185/280] Inject DEX info; Normalized quantities are string --- .../counterpartycore/lib/api/api_server.py | 18 +++++++++++++++++- .../counterpartycore/lib/ledger.py | 9 ++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 51d48bf3cd..e799097195 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -1,4 +1,5 @@ import argparse +import decimal import logging import multiprocessing import time @@ -33,6 +34,7 @@ multiprocessing.set_start_method("spawn", force=True) +D = decimal.Decimal logger = logging.getLogger(config.LOGGER_NAME) auth = HTTPBasicAuth() @@ -175,6 +177,11 @@ def execute_api_function(db, route, function_args): return result +def divide(value1, value2): + decimal.getcontext().prec = 8 + return D(value1) / D(value2) + + def inject_issuance(db, result): # let's work with a list result_list = result @@ -239,8 +246,17 @@ def inject_issuance(db, result): else: is_divisible = item[issuance_field_name]["divisible"] item[field_name + "_normalized"] = ( - item[field_name] / 10**8 if is_divisible else item[field_name] + divide(item[field_name], 10**8) if is_divisible else str(item[field_name]) ) + if "get_quantity" in item and "give_quantity" in item and "market_dir" in item: + if item["market_dir"] == "SELL": + item["market_price"] = divide( + item["get_quantity_normalized"], item["give_quantity_normalized"] + ) + else: + item["market_price"] = divide( + item["give_quantity_normalized"], item["get_quantity_normalized"] + ) if result_is_dict: return result_list[0] diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index 5b01d8bb06..7812a6d80d 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -2311,7 +2311,14 @@ def get_orders_by_two_assets(db, asset1: str, asset2: str, status: str = "open") """ bindings = (asset1, asset2, asset2, asset1, status) cursor.execute(query, bindings) - return cursor.fetchall() + orders = cursor.fetchall() + for order in orders: + order["market_pair"] = f"{asset1}/{asset2}" + if order["give_asset"] == asset1: + order["market_dir"] = "SELL" + else: + order["market_dir"] = "BUY" + return orders def get_order_matches_by_order(db, order_hash: str, status: str = "pending"): From 81aa0a8214b1d80519e45fb66e93013a5825134b Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 1 May 2024 18:30:17 +0200 Subject: [PATCH 186/280] fix wrongly named functions --- .../test/compare_hashes_test.py | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/counterparty-core/counterpartycore/test/compare_hashes_test.py b/counterparty-core/counterpartycore/test/compare_hashes_test.py index 6ca4663f41..6a0f09933f 100644 --- a/counterparty-core/counterpartycore/test/compare_hashes_test.py +++ b/counterparty-core/counterpartycore/test/compare_hashes_test.py @@ -9,12 +9,13 @@ LOCAL_API_URL = "http://api:api@localhost:4000" +# [server_url, api_version] CHECK_SERVERS = [ - ["http://rpc:rpc@api1.counterparty.io:4000", "v9"], + ["http://rpc:rpc@api1.counterparty.io:4000", "v1"], # v9.61.3 ] -def get_last_block_v9(api_url): +def get_last_block_api_v1(api_url): headers = {"content-type": "application/json"} payload = { "method": "get_running_info", @@ -25,12 +26,12 @@ def get_last_block_v9(api_url): return response.json()["result"]["last_block"]["block_index"] -def get_last_block_v10(api_url): +def get_last_block_api_v2(api_url): response = requests.get(f"{api_url}/", timeout=10) return response.json()["result"]["counterparty_height"] -def get_block_hashes_v9(api_url, block_index): +def get_block_hashes_api_v1(api_url, block_index): headers = {"content-type": "application/json"} payload = { "method": "get_block_info", @@ -42,7 +43,7 @@ def get_block_hashes_v9(api_url, block_index): return response.json()["result"]["ledger_hash"], response.json()["result"]["txlist_hash"] -def get_block_hashes_v10(api_url, block_index): +def get_block_hashes_api_v2(api_url, block_index): response = requests.get(f"{api_url}/blocks/{block_index}", timeout=10) return response.json()["result"]["ledger_hash"], response.json()["result"]["txlist_hash"] @@ -53,29 +54,29 @@ def test_compare_hashes(skip): return # get last blocks - local_block_index = get_last_block_v10(LOCAL_API_URL) + local_block_index = get_last_block_api_v2(LOCAL_API_URL) check_servers_block_indexes = [local_block_index] for check_server in CHECK_SERVERS: check_server_url, check_server_version = check_server - if check_server_version == "v9": - check_servers_block_indexes.append(get_last_block_v9(check_server_url)) + if check_server_version == "v1": + check_servers_block_indexes.append(get_last_block_api_v1(check_server_url)) else: - check_servers_block_indexes.append(get_last_block_v10(check_server_url)) + check_servers_block_indexes.append(get_last_block_api_v2(check_server_url)) # take the lower block last_block_index = min(*check_servers_block_indexes) print(f"Last block index: {last_block_index}") # get block hashes - local_ledger_hash, local_txlist_hash = get_block_hashes_v10(LOCAL_API_URL, last_block_index) + local_ledger_hash, local_txlist_hash = get_block_hashes_api_v2(LOCAL_API_URL, last_block_index) for check_server in CHECK_SERVERS: check_server_url, check_server_version = check_server - if check_server_version == "v9": - check_ledger_hash, check_txlist_hash = get_block_hashes_v9( + if check_server_version == "v1": + check_ledger_hash, check_txlist_hash = get_block_hashes_api_v1( check_server_url, last_block_index ) else: - check_ledger_hash, check_txlist_hash = get_block_hashes_v10( + check_ledger_hash, check_txlist_hash = get_block_hashes_api_v2( check_server_url, last_block_index ) From 50d6cca3ed46878daa70aa0a7d1e7ad2be1a2b44 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 1 May 2024 18:45:17 +0200 Subject: [PATCH 187/280] Compare hashes with api3 --- counterparty-core/counterpartycore/test/compare_hashes_test.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/counterparty-core/counterpartycore/test/compare_hashes_test.py b/counterparty-core/counterpartycore/test/compare_hashes_test.py index 6a0f09933f..e561a935c4 100644 --- a/counterparty-core/counterpartycore/test/compare_hashes_test.py +++ b/counterparty-core/counterpartycore/test/compare_hashes_test.py @@ -12,6 +12,7 @@ # [server_url, api_version] CHECK_SERVERS = [ ["http://rpc:rpc@api1.counterparty.io:4000", "v1"], # v9.61.3 + ["http://rpc:rpc@api3.counterparty.io:4000", "v1"], # v10.1.1 ] @@ -70,6 +71,7 @@ def test_compare_hashes(skip): # get block hashes local_ledger_hash, local_txlist_hash = get_block_hashes_api_v2(LOCAL_API_URL, last_block_index) for check_server in CHECK_SERVERS: + print(f"Checking server: {check_server[0]}") check_server_url, check_server_version = check_server if check_server_version == "v1": check_ledger_hash, check_txlist_hash = get_block_hashes_api_v1( From 735fe33917ac32c8e18437b60dfd543cb24f765e Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 1 May 2024 19:18:19 +0200 Subject: [PATCH 188/280] Check server version --- .../test/compare_hashes_test.py | 36 +++++++++++-------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/counterparty-core/counterpartycore/test/compare_hashes_test.py b/counterparty-core/counterpartycore/test/compare_hashes_test.py index e561a935c4..edacb6f852 100644 --- a/counterparty-core/counterpartycore/test/compare_hashes_test.py +++ b/counterparty-core/counterpartycore/test/compare_hashes_test.py @@ -9,10 +9,10 @@ LOCAL_API_URL = "http://api:api@localhost:4000" -# [server_url, api_version] +# [server_url, api_version, server_version] CHECK_SERVERS = [ - ["http://rpc:rpc@api1.counterparty.io:4000", "v1"], # v9.61.3 - ["http://rpc:rpc@api3.counterparty.io:4000", "v1"], # v10.1.1 + ["http://rpc:rpc@api1.counterparty.io:4000", "v1", "v9.61.1"], + ["http://rpc:rpc@api3.counterparty.io:4000", "v1", "v10.1.1"], ] @@ -23,13 +23,17 @@ def get_last_block_api_v1(api_url): "jsonrpc": "2.0", "id": 0, } - response = requests.post(api_url, data=json.dumps(payload), headers=headers, timeout=10) - return response.json()["result"]["last_block"]["block_index"] + response = requests.post(api_url, data=json.dumps(payload), headers=headers, timeout=10).json() + last_block_index = response["result"]["last_block"]["block_index"] + version = f'v{response["result"]["version_major"]}.{response["result"]["version_minor"]}.{response["result"]["version_revision"]}' + return last_block_index, version def get_last_block_api_v2(api_url): - response = requests.get(f"{api_url}/", timeout=10) - return response.json()["result"]["counterparty_height"] + response = requests.get(f"{api_url}/", timeout=10).json() + last_block_index = response["result"]["counterparty_height"] + version = f'v{response["result"]["version"]}' + return last_block_index, version def get_block_hashes_api_v1(api_url, block_index): @@ -55,14 +59,17 @@ def test_compare_hashes(skip): return # get last blocks - local_block_index = get_last_block_api_v2(LOCAL_API_URL) + local_block_index, _ = get_last_block_api_v2(LOCAL_API_URL) check_servers_block_indexes = [local_block_index] for check_server in CHECK_SERVERS: - check_server_url, check_server_version = check_server - if check_server_version == "v1": - check_servers_block_indexes.append(get_last_block_api_v1(check_server_url)) + check_server_url, check_server_api_version, check_server_version = check_server + if check_server_api_version == "v1": + server_last_block_index, server_version = get_last_block_api_v1(check_server_url) + check_servers_block_indexes.append(server_last_block_index) else: - check_servers_block_indexes.append(get_last_block_api_v2(check_server_url)) + server_last_block_index, server_version = get_last_block_api_v2(check_server_url) + check_servers_block_indexes.append(server_last_block_index) + assert server_version == check_server_version # take the lower block last_block_index = min(*check_servers_block_indexes) @@ -72,8 +79,8 @@ def test_compare_hashes(skip): local_ledger_hash, local_txlist_hash = get_block_hashes_api_v2(LOCAL_API_URL, last_block_index) for check_server in CHECK_SERVERS: print(f"Checking server: {check_server[0]}") - check_server_url, check_server_version = check_server - if check_server_version == "v1": + check_server_url, check_server_api_version, check_server_version = check_server + if check_server_api_version == "v1": check_ledger_hash, check_txlist_hash = get_block_hashes_api_v1( check_server_url, last_block_index ) @@ -81,7 +88,6 @@ def test_compare_hashes(skip): check_ledger_hash, check_txlist_hash = get_block_hashes_api_v2( check_server_url, last_block_index ) - # compare hashes assert check_ledger_hash == local_ledger_hash assert check_txlist_hash == local_txlist_hash From 2f5e38e3394e460e84fa77e9360e607f3caa3676 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 1 May 2024 19:30:54 +0200 Subject: [PATCH 189/280] use format arg for get_transaction() --- counterparty-core/counterpartycore/lib/api/util.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index 67a6424c11..9b737c994c 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -120,13 +120,13 @@ def pubkeyhash_to_pubkey(address: str, provided_pubkeys: str = None): return backend.pubkeyhash_to_pubkey(address, provided_pubkeys=provided_pubkeys_list) -def get_transaction(tx_hash: str, verbose: bool = False): +def get_transaction(tx_hash: str, format: str = "json"): """ Get a transaction from the blockchain :param tx_hash: The transaction hash (e.g. 3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018) - :param verbose: Whether to return JSON output or raw hex (e.g. True) + :param format: Whether to return JSON output or raw hex (e.g. hex) """ - return backend.getrawtransaction(tx_hash, verbose=verbose) + return backend.getrawtransaction(tx_hash, verbose=(format == "json")) def get_backend_height(): From c0c41cccd6285d51a9f8e411be2113b561cf1675 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 1 May 2024 19:39:21 +0200 Subject: [PATCH 190/280] cleaning --- .../counterpartycore/lib/api/api_server.py | 123 +--------------- .../counterpartycore/lib/api/util.py | 131 ++++++++++++++++++ 2 files changed, 135 insertions(+), 119 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index e799097195..aa55b3833b 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -1,5 +1,4 @@ import argparse -import decimal import logging import multiprocessing import time @@ -23,6 +22,9 @@ function_needs_db, get_backend_height, init_api_access_log, + inject_dispensers, + inject_issuance, + inject_normalized_quantities, remove_rowids, to_json, ) @@ -34,7 +36,6 @@ multiprocessing.set_start_method("spawn", force=True) -D = decimal.Decimal logger = logging.getLogger(config.LOGGER_NAME) auth = HTTPBasicAuth() @@ -177,126 +178,10 @@ def execute_api_function(db, route, function_args): return result -def divide(value1, value2): - decimal.getcontext().prec = 8 - return D(value1) / D(value2) - - -def inject_issuance(db, result): - # let's work with a list - result_list = result - result_is_dict = False - if isinstance(result, dict): - result_list = [result] - result_is_dict = True - - # gather asset list - asset_list = [] - for result_item in result_list: - if "asset_longname" in result_item: - continue - item = result_item - if "params" in item: - item = item["params"] - for field_name in ["asset", "give_asset", "get_asset"]: - if field_name in item: - if item[field_name] not in asset_list: - asset_list.append(item[field_name]) - - # get asset issuances - issuance_by_asset = ledger.get_assets_last_issuance(db, asset_list) - - # inject issuance - for result_item in result_list: - item = result_item - if "params" in item: - item = item["params"] - for field_name in ["asset", "give_asset", "get_asset"]: - if field_name in item and item[field_name] in issuance_by_asset: - item[field_name + "_issuance"] = issuance_by_asset[item[field_name]] - - # inject normalized quantities - for result_item in result_list: - item = result_item - for field_name in [ - "quantity", - "give_quantity", - "get_quantity", - "get_remaining", - "give_remaining", - "escrow_quantity", - "dispense_quantity", - ]: - if "params" in item: - item = item["params"] - if "dispenser" in item: - item = result_item["dispenser"] - # item["asset_issuance"] = result_item["asset_issuance"] - if field_name not in item: - continue - issuance_field_name = ( - field_name.replace("quantity", "asset").replace("remaining", "asset") + "_issuance" - ) - if issuance_field_name not in item: - issuance_field_name = "asset_issuance" - if issuance_field_name not in item and issuance_field_name not in result_item: - continue - if issuance_field_name not in item: - is_divisible = result_item[issuance_field_name]["divisible"] - else: - is_divisible = item[issuance_field_name]["divisible"] - item[field_name + "_normalized"] = ( - divide(item[field_name], 10**8) if is_divisible else str(item[field_name]) - ) - if "get_quantity" in item and "give_quantity" in item and "market_dir" in item: - if item["market_dir"] == "SELL": - item["market_price"] = divide( - item["get_quantity_normalized"], item["give_quantity_normalized"] - ) - else: - item["market_price"] = divide( - item["give_quantity_normalized"], item["get_quantity_normalized"] - ) - - if result_is_dict: - return result_list[0] - return result - - -def inject_dispensers(db, result): - # let's work with a list - result_list = result - result_is_dict = False - if isinstance(result, dict): - result_list = [result] - result_is_dict = True - - # gather dispenser list - dispenser_list = [] - for result_item in result_list: - if "dispenser_tx_hash" in result_item: - if result_item["dispenser_tx_hash"] not in dispenser_list: - dispenser_list.append(result_item["dispenser_tx_hash"]) - - # get dispenser info - dispenser_info = ledger.get_dispensers_info(db, dispenser_list) - - # inject dispenser info - for result_item in result_list: - if ( - "dispenser_tx_hash" in result_item - and result_item["dispenser_tx_hash"] in dispenser_info - ): - result_item["dispenser"] = dispenser_info[result_item["dispenser_tx_hash"]] - - if result_is_dict: - return result_list[0] - return result - - def inject_details(db, result): result = inject_dispensers(db, result) result = inject_issuance(db, result) + result = inject_normalized_quantities(result) return result diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index 9b737c994c..e80d06a583 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -9,6 +9,7 @@ from counterpartycore.lib import backend, config, exceptions, ledger, transaction from docstring_parser import parse as parse_docstring +D = decimal.Decimal logger = logging.getLogger(config.LOGGER_NAME) @@ -229,3 +230,133 @@ def default(self, o): def to_json(obj, indent=None): return json.dumps(obj, cls=ApiJsonEncoder, indent=indent) + + +def divide(value1, value2): + decimal.getcontext().prec = 8 + return D(value1) / D(value2) + + +def inject_issuance(db, result): + # let's work with a list + result_list = result + result_is_dict = False + if isinstance(result, dict): + result_list = [result] + result_is_dict = True + + # gather asset list + asset_list = [] + for result_item in result_list: + if "asset_longname" in result_item: + continue + item = result_item + if "params" in item: + item = item["params"] + for field_name in ["asset", "give_asset", "get_asset"]: + if field_name in item: + if item[field_name] not in asset_list: + asset_list.append(item[field_name]) + + # get asset issuances + issuance_by_asset = ledger.get_assets_last_issuance(db, asset_list) + + # inject issuance + for result_item in result_list: + item = result_item + if "params" in item: + item = item["params"] + for field_name in ["asset", "give_asset", "get_asset"]: + if field_name in item and item[field_name] in issuance_by_asset: + item[field_name + "_issuance"] = issuance_by_asset[item[field_name]] + + if result_is_dict: + return result_list[0] + return result + + +def inject_normalized_quantities(result): + # let's work with a list + result_list = result + result_is_dict = False + if isinstance(result, dict): + result_list = [result] + result_is_dict = True + + # inject normalized quantities + for result_item in result_list: + item = result_item + for field_name in [ + "quantity", + "give_quantity", + "get_quantity", + "get_remaining", + "give_remaining", + "escrow_quantity", + "dispense_quantity", + ]: + if "params" in item: + item = item["params"] + if "dispenser" in item: + item = result_item["dispenser"] + # item["asset_issuance"] = result_item["asset_issuance"] + if field_name not in item: + continue + issuance_field_name = ( + field_name.replace("quantity", "asset").replace("remaining", "asset") + "_issuance" + ) + if issuance_field_name not in item: + issuance_field_name = "asset_issuance" + if issuance_field_name not in item and issuance_field_name not in result_item: + continue + if issuance_field_name not in item: + is_divisible = result_item[issuance_field_name]["divisible"] + else: + is_divisible = item[issuance_field_name]["divisible"] + item[field_name + "_normalized"] = ( + divide(item[field_name], 10**8) if is_divisible else str(item[field_name]) + ) + if "get_quantity" in item and "give_quantity" in item and "market_dir" in item: + if item["market_dir"] == "SELL": + item["market_price"] = divide( + item["get_quantity_normalized"], item["give_quantity_normalized"] + ) + else: + item["market_price"] = divide( + item["give_quantity_normalized"], item["get_quantity_normalized"] + ) + + if result_is_dict: + return result_list[0] + return result + + +def inject_dispensers(db, result): + # let's work with a list + result_list = result + result_is_dict = False + if isinstance(result, dict): + result_list = [result] + result_is_dict = True + + # gather dispenser list + dispenser_list = [] + for result_item in result_list: + if "dispenser_tx_hash" in result_item: + if result_item["dispenser_tx_hash"] not in dispenser_list: + dispenser_list.append(result_item["dispenser_tx_hash"]) + + # get dispenser info + dispenser_info = ledger.get_dispensers_info(db, dispenser_list) + + # inject dispenser info + for result_item in result_list: + if ( + "dispenser_tx_hash" in result_item + and result_item["dispenser_tx_hash"] in dispenser_info + ): + result_item["dispenser"] = dispenser_info[result_item["dispenser_tx_hash"]] + + if result_is_dict: + return result_list[0] + return result From 56953728e6aba1a4942020f962ea88711064caf7 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 1 May 2024 20:07:19 +0200 Subject: [PATCH 191/280] Update apib --- apiary.apib | 1653 ++++-- .../counterpartycore/lib/api/api_server.py | 2 + .../counterpartycore/lib/api/util.py | 9 + .../counterpartycore/lib/ledger.py | 15 +- counterparty-core/tools/apicache.json | 4723 ++++++++++------- counterparty-core/tools/genapidoc.py | 3 + 6 files changed, 4070 insertions(+), 2335 deletions(-) diff --git a/apiary.apib b/apiary.apib index 85abac7dd3..b73d39c356 100644 --- a/apiary.apib +++ b/apiary.apib @@ -64,7 +64,7 @@ Returns server information and the list of documented routes in JSON format. ## Group Blocks -### Get Blocks [GET /blocks{?last}{?limit}] +### Get Blocks [GET /blocks{?last}{?limit}{?verbose}] Returns the list of the last ten blocks @@ -73,6 +73,8 @@ Returns the list of the last ten blocks + Default: `None` + limit: `2` (int, optional) - The number of blocks to return + Default: `10` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -103,12 +105,14 @@ Returns the list of the last ten blocks } ``` -### Get Block [GET /blocks/{block_index}] +### Get Block [GET /blocks/{block_index}{?verbose}] Return the information of a block + Parameters + block_index: `840464` (int, required) - The index of the block to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -127,12 +131,14 @@ Return the information of a block } ``` -### Get Transactions By Block [GET /blocks/{block_index}/transactions] +### Get Transactions By Block [GET /blocks/{block_index}/transactions{?verbose}] Returns the transactions of a block + Parameters + block_index: `840464` (int, required) - The index of the block to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -156,12 +162,14 @@ Returns the transactions of a block } ``` -### Get Events By Block [GET /blocks/{block_index}/events] +### Get Events By Block [GET /blocks/{block_index}/events{?verbose}] Returns the events of a block + Parameters + block_index: `840464` (int, required) - The index of the block to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -197,7 +205,15 @@ Returns the events of a block "calling_function": "issuance", "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "quantity": 1, - "tx_index": 2726605 + "tx_index": 2726605, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" } }, { @@ -221,7 +237,15 @@ Returns the events of a block "status": "valid", "transfer": false, "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "tx_index": 2726605 + "tx_index": 2726605, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" } }, { @@ -244,7 +268,14 @@ Returns the events of a block "block_index": 840464, "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "quantity": 50000000, - "tx_index": 2726605 + "tx_index": 2726605, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "0.5" } }, { @@ -278,12 +309,14 @@ Returns the events of a block } ``` -### Get Event Counts By Block [GET /blocks/{block_index}/events/counts] +### Get Event Counts By Block [GET /blocks/{block_index}/events/counts{?verbose}] Returns the event counts of a block + Parameters + block_index: `840464` (int, required) - The index of the block to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -326,13 +359,15 @@ Returns the event counts of a block } ``` -### Get Events By Block And Event [GET /blocks/{block_index}/events/{event}] +### Get Events By Block And Event [GET /blocks/{block_index}/events/{event}{?verbose}] Returns the events of a block filtered by event + Parameters + block_index: `840464` (int, required) - The index of the block to return + event: `CREDIT` (str, required) - The event to filter by + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -349,19 +384,29 @@ Returns the events of a block filtered by event "calling_function": "issuance", "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "quantity": 1, - "tx_index": 2726605 + "tx_index": 2726605, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" } } ] } ``` -### Get Credits By Block [GET /blocks/{block_index}/credits] +### Get Credits By Block [GET /blocks/{block_index}/credits{?verbose}] Returns the credits of a block + Parameters + block_index: `840464` (int, required) - The index of the block to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -375,18 +420,28 @@ Returns the credits of a block "quantity": 1, "calling_function": "issuance", "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "tx_index": 2726605 + "tx_index": 2726605, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" } ] } ``` -### Get Debits By Block [GET /blocks/{block_index}/debits] +### Get Debits By Block [GET /blocks/{block_index}/debits{?verbose}] Returns the debits of a block + Parameters + block_index: `840464` (int, required) - The index of the block to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -400,18 +455,27 @@ Returns the debits of a block "quantity": 50000000, "action": "issuance fee", "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "tx_index": 2726605 + "tx_index": 2726605, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "0.5" } ] } ``` -### Get Expirations [GET /blocks/{block_index}/expirations] +### Get Expirations [GET /blocks/{block_index}/expirations{?verbose}] Returns the expirations of a block + Parameters + block_index: `840356` (int, required) - The index of the block to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -430,12 +494,14 @@ Returns the expirations of a block } ``` -### Get Cancels [GET /blocks/{block_index}/cancels] +### Get Cancels [GET /blocks/{block_index}/cancels{?verbose}] Returns the cancels of a block + Parameters + block_index: `839746` (int, required) - The index of the block to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -462,12 +528,14 @@ Returns the cancels of a block } ``` -### Get Destructions [GET /blocks/{block_index}/destructions] +### Get Destructions [GET /blocks/{block_index}/destructions{?verbose}] Returns the destructions of a block + Parameters + block_index: `839988` (int, required) - The index of the block to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -482,18 +550,28 @@ Returns the destructions of a block "asset": "COBBEE", "quantity": 50000, "tag": "", - "status": "valid" + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "https://easyasset.art/j/m4dl0x/COBBE.json", + "issuer": "1P3KQWLsTPXVWimiF2Q6WSES5vbJE8be5i", + "divisible": 0, + "locked": 0 + }, + "quantity_normalized": "50000" } ] } ``` -### Get Issuances By Block [GET /blocks/{block_index}/issuances] +### Get Issuances By Block [GET /blocks/{block_index}/issuances{?verbose}] Returns the issuances of a block + Parameters + block_index: `840464` (int, required) - The index of the block to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -525,7 +603,7 @@ Returns the issuances of a block } ``` -### Get Sends By Block [GET /blocks/{block_index}/sends{?limit}{?offset}] +### Get Sends By Block [GET /blocks/{block_index}/sends{?limit}{?offset}{?verbose}] Returns the sends of a block @@ -535,6 +613,8 @@ Returns the sends of a block + Default: `100` + offset: `0` (int, optional) - The offset of the sends to return + Default: `0` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -551,18 +631,28 @@ Returns the sends of a block "quantity": 1, "status": "valid", "msg_index": 0, - "memo": null + "memo": null, + "asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 0 + }, + "quantity_normalized": "1" } ] } ``` -### Get Dispenses By Block [GET /blocks/{block_index}/dispenses] +### Get Dispenses By Block [GET /blocks/{block_index}/dispenses{?verbose}] Returns the dispenses of a block + Parameters + block_index: `840322` (int, required) - The index of the block to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -578,18 +668,44 @@ Returns the dispenses of a block "destination": "bc1qzcdkhnexpjc8wvkyrpyrsn0f5xzcpu877mjmgj", "asset": "FLOCK", "dispense_quantity": 90000000000, - "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a" + "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a", + "dispenser": { + "tx_index": 2536311, + "block_index": 840322, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "give_quantity": 10000000000, + "escrow_quantity": 250000000000, + "satoshirate": 330000, + "status": 0, + "give_remaining": 140000000000, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "dispense_count": 2, + "give_quantity_normalized": "100", + "give_remaining_normalized": "1400", + "escrow_quantity_normalized": "2500" + }, + "asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "18VNeRv8vL528HF7ruKwxycrfNEeoqmHpa", + "divisible": 1, + "locked": 1 + } } ] } ``` -### Get Sweeps By Block [GET /blocks/{block_index}/sweeps] +### Get Sweeps By Block [GET /blocks/{block_index}/sweeps{?verbose}] Returns the sweeps of a block + Parameters + block_index: `836519` (int, required) - The index of the block to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -624,7 +740,7 @@ Returns the sweeps of a block ## Group Transactions -### Info [GET /transactions/info{?rawtransaction}{?block_index}] +### Info [GET /transactions/info{?rawtransaction}{?block_index}{?verbose}] Returns Counterparty information from a raw transaction in hex format. @@ -632,6 +748,8 @@ Returns Counterparty information from a raw transaction in hex format. + rawtransaction: `01000000017828697743c03aef6a3a8ba54b22bf579ffcab8161faf20e7b20c4ecd75cc986010000006b483045022100d1bd0531bb1ed2dd2cbf77d6933273e792a3dbfa84327d419169850ddd5976f502205d1ab0f7bcbf1a0cc183f0520c9aa8f711d41cb790c0c4ac39da6da4a093d798012103d3b1f711e907acb556e239f6cafb6a4f7fe40d8dd809b0e06e739c2afd73f202ffffffff0200000000000000004d6a4bf29880b93b0711524c7ef9c76835752088db8bd4113a3daf41fc45ffdc8867ebdbf26817fae377696f36790e52f51005806e9399a427172fedf348cf798ed86e548002ee96909eef0775ec3c2b0100000000001976a91443434cf159cc585fbd74daa9c4b833235b19761b88ac00000000` (str, required) - Raw transaction in hex format + block_index (int, optional) - Block index mandatory for transactions before block 335000 + Default: `None` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -665,7 +783,7 @@ Returns Counterparty information from a raw transaction in hex format. } ``` -### Unpack [GET /transactions/unpack{?datahex}{?block_index}] +### Unpack [GET /transactions/unpack{?datahex}{?block_index}{?verbose}] Unpacks Counterparty data in hex format and returns the message type and data. @@ -673,6 +791,8 @@ Unpacks Counterparty data in hex format and returns the message type and data. + datahex: `16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245` (str, required) - Data in hex format + block_index (int, optional) - Block index of the transaction containing this data + Default: `None` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -699,12 +819,14 @@ Unpacks Counterparty data in hex format and returns the message type and data. } ``` -### Get Transaction By Hash [GET /transactions/{tx_hash}] +### Get Transaction By Hash [GET /transactions/{tx_hash}{?verbose}] Returns a transaction by its hash. + Parameters + tx_hash: `876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5` (str, required) - The hash of the transaction + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -746,12 +868,14 @@ Returns a transaction by its hash. ## Group Addresses -### Get Address Balances [GET /addresses/{address}/balances] +### Get Address Balances [GET /addresses/{address}/balances{?verbose}] Returns the balances of an address + Parameters + address: `1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs` (str, required) - The address to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -761,19 +885,28 @@ Returns the balances of an address { "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", "asset": "XCP", - "quantity": 104200000000 + "quantity": 104200000000, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "1042" } ] } ``` -### Get Balance By Address And Asset [GET /addresses/{address}/balances/{asset}] +### Get Balance By Address And Asset [GET /addresses/{address}/balances/{asset}{?verbose}] Returns the balance of an address and asset + Parameters + address: `1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs` (str, required) - The address to return + asset: `XCP` (str, required) - The asset to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -782,12 +915,19 @@ Returns the balance of an address and asset "result": { "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", "asset": "XCP", - "quantity": 104200000000 + "quantity": 104200000000, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "1042" } } ``` -### Get Credits By Address [GET /addresses/{address}/credits{?limit}{?offset}] +### Get Credits By Address [GET /addresses/{address}/credits{?limit}{?offset}{?verbose}] Returns the credits of an address @@ -797,6 +937,8 @@ Returns the credits of an address + Default: `100` + offset: `0` (int, optional) - The offset of the credits to return + Default: `0` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -810,13 +952,20 @@ Returns the credits of an address "quantity": 104200000000, "calling_function": "send", "event": "7e4fbb0a1eeeee34bf499955f1027fb78c514d63a3c8ff2e28c6dad005e4d850", - "tx_index": 2677412 + "tx_index": 2677412, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "1042" } ] } ``` -### Get Debits By Address [GET /addresses/{address}/debits{?limit}{?offset}] +### Get Debits By Address [GET /addresses/{address}/debits{?limit}{?offset}{?verbose}] Returns the debits of an address @@ -826,6 +975,8 @@ Returns the debits of an address + Default: `100` + offset: `0` (int, optional) - The offset of the debits to return + Default: `0` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -839,7 +990,14 @@ Returns the debits of an address "quantity": 40000000000, "action": "open dispenser", "event": "53ed08176d3479f49986e9282293da85cebc03835b128d8e790ee587f9f1c750", - "tx_index": 2721524 + "tx_index": 2721524, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "400" }, { "block_index": 840388, @@ -848,13 +1006,20 @@ Returns the debits of an address "quantity": 250000000000, "action": "send", "event": "bc54968ba7d0a59a47b276602e2dbdcf01b14009742e0d7b50272cbae529a9a4", - "tx_index": 2726594 + "tx_index": 2726594, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "2500" } ] } ``` -### Get Bet By Feed [GET /addresses/{address}/bets{?status}] +### Get Bet By Feed [GET /addresses/{address}/bets{?status}{?verbose}] Returns the bets of a feed @@ -862,6 +1027,8 @@ Returns the bets of a feed + address: `1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk` (str, required) - The address of the feed + status: `filled` (str, optional) - The status of the bet + Default: `open` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -910,7 +1077,7 @@ Returns the bets of a feed } ``` -### Get Broadcasts By Source [GET /addresses/{address}/broadcasts{?status}{?order_by}] +### Get Broadcasts By Source [GET /addresses/{address}/broadcasts{?status}{?order_by}{?verbose}] Returns the broadcasts of a source @@ -920,6 +1087,8 @@ Returns the broadcasts of a source + Default: `valid` + order_by: `ASC` (str, optional) - The order of the broadcasts to return + Default: `DESC` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -954,12 +1123,14 @@ Returns the broadcasts of a source } ``` -### Get Burns By Address [GET /addresses/{address}/burns] +### Get Burns By Address [GET /addresses/{address}/burns{?verbose}] Returns the burns of an address + Parameters + address: `1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W` (str, required) - The address to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -979,7 +1150,7 @@ Returns the burns of an address } ``` -### Get Send By Address [GET /addresses/{address}/sends{?limit}{?offset}] +### Get Send By Address [GET /addresses/{address}/sends{?limit}{?offset}{?verbose}] Returns the sends of an address @@ -989,6 +1160,8 @@ Returns the sends of an address + Default: `100` + offset: `0` (int, optional) - The offset of the sends to return + Default: `0` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -1005,13 +1178,20 @@ Returns the sends of an address "quantity": 10000000000, "status": "valid", "msg_index": 0, - "memo": null + "memo": null, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "100" } ] } ``` -### Get Receive By Address [GET /addresses/{address}/receives{?limit}{?offset}] +### Get Receive By Address [GET /addresses/{address}/receives{?limit}{?offset}{?verbose}] Returns the receives of an address @@ -1021,6 +1201,8 @@ Returns the receives of an address + Default: `100` + offset: `0` (int, optional) - The offset of the receives to return + Default: `0` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -1037,19 +1219,28 @@ Returns the receives of an address "quantity": 104200000000, "status": "valid", "msg_index": 0, - "memo": null + "memo": null, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "1042" } ] } ``` -### Get Send By Address And Asset [GET /addresses/{address}/sends/{asset}] +### Get Send By Address And Asset [GET /addresses/{address}/sends/{asset}{?verbose}] Returns the sends of an address and asset + Parameters + address: `1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W` (str, required) - The address to return + asset: `XCP` (str, required) - The asset to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -1066,13 +1257,20 @@ Returns the sends of an address and asset "quantity": 10000000000, "status": "valid", "msg_index": 0, - "memo": null + "memo": null, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "100" } ] } ``` -### Get Receive By Address And Asset [GET /addresses/{address}/receives/{asset}{?limit}{?offset}] +### Get Receive By Address And Asset [GET /addresses/{address}/receives/{asset}{?limit}{?offset}{?verbose}] Returns the receives of an address and asset @@ -1083,6 +1281,8 @@ Returns the receives of an address and asset + Default: `100` + offset: `0` (int, optional) - The offset of the receives to return + Default: `0` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -1099,13 +1299,20 @@ Returns the receives of an address and asset "quantity": 104200000000, "status": "valid", "msg_index": 0, - "memo": null + "memo": null, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "1042" } ] } ``` -### Get Dispensers By Address [GET /addresses/{address}/dispensers{?status}] +### Get Dispensers By Address [GET /addresses/{address}/dispensers{?status}{?verbose}] Returns the dispensers of an address @@ -1113,6 +1320,8 @@ Returns the dispensers of an address + address: `bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz` (str, required) - The address to return + status (int, optional) - + Default: `0` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -1133,13 +1342,23 @@ Returns the dispensers of an address "oracle_address": null, "last_status_tx_hash": null, "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", - "dispense_count": 0 + "dispense_count": 0, + "asset_issuance": { + "asset_longname": null, + "description": "https://ipfs.io/ipfs/QmPzRXMYVTQ3zoYhaxW5ZRkt4o9vUnnzdBW4kV5CXUyjT4/ERYKAHPEPU.json", + "issuer": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "divisible": 0, + "locked": 1 + }, + "give_quantity_normalized": "1", + "give_remaining_normalized": "25", + "escrow_quantity_normalized": "25" } ] } ``` -### Get Dispensers By Address And Asset [GET /addresses/{address}/dispensers/{asset}{?status}] +### Get Dispensers By Address And Asset [GET /addresses/{address}/dispensers/{asset}{?status}{?verbose}] Returns the dispensers of an address and an asset @@ -1148,6 +1367,8 @@ Returns the dispensers of an address and an asset + asset: `ERYKAHPEPU` (str, required) - The asset to return + status (int, optional) - + Default: `0` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -1168,18 +1389,30 @@ Returns the dispensers of an address and an asset "oracle_address": null, "last_status_tx_hash": null, "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", - "dispense_count": 0 + "dispense_count": 0, + "asset_issuance": { + "asset_longname": null, + "description": "https://ipfs.io/ipfs/QmPzRXMYVTQ3zoYhaxW5ZRkt4o9vUnnzdBW4kV5CXUyjT4/ERYKAHPEPU.json", + "issuer": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "divisible": 0, + "locked": 1 + }, + "give_quantity_normalized": "1", + "give_remaining_normalized": "25", + "escrow_quantity_normalized": "25" } ] } ``` -### Get Sweeps By Address [GET /addresses/{address}/sweeps] +### Get Sweeps By Address [GET /addresses/{address}/sweeps{?verbose}] Returns the sweeps of an address + Parameters + address: `18szqTVJUWwYrtRHq98Wn4DhCGGiy3jZ87` (str, required) - The address to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -1224,7 +1457,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose Bet [GET /addresses/{address}/compose/bet{?feed_address}{?bet_type}{?deadline}{?wager_quantity}{?counterwager_quantity}{?expiration}{?leverage}{?target_value}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Bet [GET /addresses/{address}/compose/bet{?feed_address}{?bet_type}{?deadline}{?wager_quantity}{?counterwager_quantity}{?expiration}{?leverage}{?target_value}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}{?verbose}] Composes a transaction to issue a bet against a feed. @@ -1268,6 +1501,8 @@ Composes a transaction to issue a bet against a feed. + Default: `None` + segwit (bool, optional) - Use segwit + Default: `False` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -1312,7 +1547,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose Broadcast [GET /addresses/{address}/compose/broadcast{?timestamp}{?value}{?fee_fraction}{?text}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Broadcast [GET /addresses/{address}/compose/broadcast{?timestamp}{?value}{?fee_fraction}{?text}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}{?verbose}] Composes a transaction to broadcast textual and numerical information to the network. @@ -1350,6 +1585,8 @@ Composes a transaction to broadcast textual and numerical information to the net + Default: `None` + segwit (bool, optional) - Use segwit + Default: `False` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -1390,7 +1627,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose BTCPay [GET /addresses/{address}/compose/btcpay{?order_match_id}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose BTCPay [GET /addresses/{address}/compose/btcpay{?order_match_id}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}{?verbose}] Composes a transaction to pay for a BTC order match. @@ -1425,6 +1662,8 @@ Composes a transaction to pay for a BTC order match. + Default: `None` + segwit (bool, optional) - Use segwit + Default: `False` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -1462,7 +1701,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose Burn [GET /addresses/{address}/compose/burn{?quantity}{?overburn}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Burn [GET /addresses/{address}/compose/burn{?quantity}{?overburn}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}{?verbose}] Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, possible between blocks 278310 and 283810; on testnet it is still available). @@ -1499,6 +1738,8 @@ Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, poss + Default: `None` + segwit (bool, optional) - Use segwit + Default: `False` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -1537,7 +1778,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose Cancel [GET /addresses/{address}/compose/cancel{?offer_hash}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Cancel [GET /addresses/{address}/compose/cancel{?offer_hash}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}{?verbose}] Composes a transaction to cancel an open order or bet. @@ -1572,6 +1813,8 @@ Composes a transaction to cancel an open order or bet. + Default: `None` + segwit (bool, optional) - Use segwit + Default: `False` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -1609,7 +1852,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose Destroy [GET /addresses/{address}/compose/destroy{?asset}{?quantity}{?tag}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Destroy [GET /addresses/{address}/compose/destroy{?asset}{?quantity}{?tag}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}{?verbose}] Composes a transaction to destroy a quantity of an asset. @@ -1646,6 +1889,8 @@ Composes a transaction to destroy a quantity of an asset. + Default: `None` + segwit (bool, optional) - Use segwit + Default: `False` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -1685,7 +1930,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose Dispenser [GET /addresses/{address}/compose/dispenser{?asset}{?give_quantity}{?escrow_quantity}{?mainchainrate}{?status}{?open_address}{?oracle_address}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Dispenser [GET /addresses/{address}/compose/dispenser{?asset}{?give_quantity}{?escrow_quantity}{?mainchainrate}{?status}{?open_address}{?oracle_address}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}{?verbose}] Opens or closes a dispenser for a given asset at a given rate of main chain asset (BTC). Escrowed quantity on open must be equal or greater than give_quantity. It is suggested that you escrow multiples of give_quantity to ease dispenser operation. @@ -1728,6 +1973,8 @@ Opens or closes a dispenser for a given asset at a given rate of main chain asse + Default: `None` + segwit (bool, optional) - Use segwit + Default: `False` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -1771,7 +2018,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose Dividend [GET /addresses/{address}/compose/dividend{?quantity_per_unit}{?asset}{?dividend_asset}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Dividend [GET /addresses/{address}/compose/dividend{?quantity_per_unit}{?asset}{?dividend_asset}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}{?verbose}] Composes a transaction to issue a dividend to holders of a given asset. @@ -1808,6 +2055,8 @@ Composes a transaction to issue a dividend to holders of a given asset. + Default: `None` + segwit (bool, optional) - Use segwit + Default: `False` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -1847,7 +2096,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose Issuance [GET /addresses/{address}/compose/issuance{?asset}{?quantity}{?transfer_destination}{?divisible}{?lock}{?reset}{?description}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Issuance [GET /addresses/{address}/compose/issuance{?asset}{?quantity}{?transfer_destination}{?divisible}{?lock}{?reset}{?description}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}{?verbose}] Composes a transaction to Issue a new asset, issue more of an existing asset, lock an asset, reset existing supply, or transfer the ownership of an asset. @@ -1893,6 +2142,8 @@ Composes a transaction to Issue a new asset, issue more of an existing asset, lo + Default: `None` + segwit (bool, optional) - Use segwit + Default: `False` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -1936,7 +2187,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose MPMA [GET /addresses/{address}/compose/mpma{?assets}{?destinations}{?quantities}{?memo}{?memo_is_hex}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose MPMA [GET /addresses/{address}/compose/mpma{?assets}{?destinations}{?quantities}{?memo}{?memo_is_hex}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}{?verbose}] Composes a transaction to send multiple payments to multiple addresses. @@ -1975,6 +2226,8 @@ Composes a transaction to send multiple payments to multiple addresses. + Default: `None` + segwit (bool, optional) - Use segwit + Default: `False` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -2030,7 +2283,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose Order [GET /addresses/{address}/compose/order{?give_asset}{?give_quantity}{?get_asset}{?get_quantity}{?expiration}{?fee_required}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Order [GET /addresses/{address}/compose/order{?give_asset}{?give_quantity}{?get_asset}{?get_quantity}{?expiration}{?fee_required}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}{?verbose}] Composes a transaction to place an order on the distributed exchange. @@ -2070,6 +2323,8 @@ Composes a transaction to place an order on the distributed exchange. + Default: `None` + segwit (bool, optional) - Use segwit + Default: `False` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -2112,7 +2367,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose Send [GET /addresses/{address}/compose/send{?destination}{?asset}{?quantity}{?memo}{?memo_is_hex}{?use_enhanced_send}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Send [GET /addresses/{address}/compose/send{?destination}{?asset}{?quantity}{?memo}{?memo_is_hex}{?use_enhanced_send}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}{?verbose}] Composes a transaction to send a quantity of an asset to another address. @@ -2155,6 +2410,8 @@ Composes a transaction to send a quantity of an asset to another address. + Default: `None` + segwit (bool, optional) - Use segwit + Default: `False` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -2197,7 +2454,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose Sweep [GET /addresses/{address}/compose/sweep{?destination}{?flags}{?memo}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}] +### Compose Sweep [GET /addresses/{address}/compose/sweep{?destination}{?flags}{?memo}{?encoding}{?fee_per_kb}{?regular_dust_size}{?multisig_dust_size}{?pubkey}{?allow_unconfirmed_inputs}{?fee}{?fee_provided}{?unspent_tx_hash}{?dust_return_pubkey}{?disable_utxo_locks}{?extended_tx_info}{?p2sh_pretx_txid}{?segwit}{?verbose}] Composes a transaction to Sends all assets and/or transfer ownerships to a destination address. @@ -2234,6 +2491,8 @@ Composes a transaction to Sends all assets and/or transfer ownerships to a desti + Default: `None` + segwit (bool, optional) - Use segwit + Default: `False` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -2254,7 +2513,7 @@ Composes a transaction to Sends all assets and/or transfer ownerships to a desti ## Group Assets -### Get Valid Assets [GET /assets{?offset}{?limit}] +### Get Valid Assets [GET /assets{?offset}{?limit}{?verbose}] Returns the valid assets @@ -2263,6 +2522,8 @@ Returns the valid assets + Default: `0` + limit: `5` (int, optional) - The limit of the assets to return + Default: `100` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -2293,12 +2554,14 @@ Returns the valid assets } ``` -### Get Asset Info [GET /assets/{asset}] +### Get Asset Info [GET /assets/{asset}{?verbose}] Returns the asset information + Parameters + asset: `UNNEGOTIABLE` (str, required) - The asset to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -2309,16 +2572,16 @@ Returns the asset information "asset_longname": null, "owner": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", "divisible": false, - "locked": false, - "supply": 1, - "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "locked": true, + "supply": 1776, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "holder_count": 1 + "holder_count": 6 } } ``` -### Get Asset Balances [GET /assets/{asset}/balances{?exclude_zero_balances}] +### Get Asset Balances [GET /assets/{asset}/balances{?exclude_zero_balances}{?verbose}] Returns the asset balances @@ -2326,6 +2589,8 @@ Returns the asset balances + asset: `UNNEGOTIABLE` (str, required) - The asset to return + exclude_zero_balances: `True` (bool, optional) - Whether to exclude zero balances + Default: `True` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -2335,19 +2600,81 @@ Returns the asset balances { "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", "asset": "UNNEGOTIABLE", - "quantity": 1 + "quantity": 1700, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1700" + }, + { + "address": "17LV3y5KhExPdVcqS81zXuVUfNV9pmaGA", + "asset": "UNNEGOTIABLE", + "quantity": 1, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" + }, + { + "address": "1ADca8k8XRY278QfQ3f9ynWaNYFzUDhkrk", + "asset": "UNNEGOTIABLE", + "quantity": 2, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "2" + }, + { + "address": "1FmEBHzkZGqQZ7kprf53xU8XijUiv2SDYW", + "asset": "UNNEGOTIABLE", + "quantity": 1, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" + }, + { + "address": "1kEXrh8MQqotJq2qgcVLeZqdmeuDG8HXX", + "asset": "UNNEGOTIABLE", + "quantity": 1, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" } ] } ``` -### Get Balance By Address And Asset [GET /assets/{asset}/balances/{address}] +### Get Balance By Address And Asset [GET /assets/{asset}/balances/{address}{?verbose}] Returns the balance of an address and asset + Parameters + address: `1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs` (str, required) - The address to return + asset: `XCP` (str, required) - The asset to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -2356,12 +2683,19 @@ Returns the balance of an address and asset "result": { "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", "asset": "XCP", - "quantity": 104200000000 + "quantity": 104200000000, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "1042" } } ``` -### Get Orders By Asset [GET /assets/{asset}/orders{?status}] +### Get Orders By Asset [GET /assets/{asset}/orders{?status}{?verbose}] Returns the orders of an asset @@ -2369,6 +2703,8 @@ Returns the orders of an asset + asset: `NEEDPEPE` (str, required) - The asset to return + status: `filled` (str, optional) - The status of the orders to return + Default: `open` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -2392,7 +2728,25 @@ Returns the orders of an asset "fee_required_remaining": 0, "fee_provided": 46098, "fee_provided_remaining": 46098, - "status": "filled" + "status": "filled", + "give_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "get_asset_issuance": { + "asset_longname": null, + "description": "http://rarepepedirectory.com/json/pc.json", + "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", + "divisible": 1, + "locked": 1 + }, + "give_quantity_normalized": "1", + "get_quantity_normalized": "4000", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0" }, { "tx_index": 2225134, @@ -2411,7 +2765,24 @@ Returns the orders of an asset "fee_required_remaining": 0, "fee_provided": 5544, "fee_provided_remaining": 5544, - "status": "filled" + "status": "filled", + "give_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "get_asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "give_quantity_normalized": "1", + "get_quantity_normalized": "808", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0" }, { "tx_index": 1946026, @@ -2430,7 +2801,24 @@ Returns the orders of an asset "fee_required_remaining": 0, "fee_provided": 264, "fee_provided_remaining": 264, - "status": "filled" + "status": "filled", + "give_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "get_asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "give_quantity_normalized": "1", + "get_quantity_normalized": "700", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0" }, { "tx_index": 2202451, @@ -2449,7 +2837,24 @@ Returns the orders of an asset "fee_required_remaining": 0, "fee_provided": 264, "fee_provided_remaining": 264, - "status": "filled" + "status": "filled", + "give_asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "get_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "give_quantity_normalized": "808", + "get_quantity_normalized": "1", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0" }, { "tx_index": 825411, @@ -2468,7 +2873,25 @@ Returns the orders of an asset "fee_required_remaining": 0, "fee_provided": 40000, "fee_provided_remaining": 40000, - "status": "filled" + "status": "filled", + "give_asset_issuance": { + "asset_longname": null, + "description": "http://rarepepedirectory.com/json/pc.json", + "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", + "divisible": 1, + "locked": 1 + }, + "get_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "give_quantity_normalized": "3000", + "get_quantity_normalized": "1", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0" }, { "tx_index": 825403, @@ -2487,7 +2910,25 @@ Returns the orders of an asset "fee_required_remaining": 20000, "fee_provided": 50766, "fee_provided_remaining": 50766, - "status": "filled" + "status": "filled", + "give_asset_issuance": { + "asset_longname": null, + "description": "http://rarepepedirectory.com/json/pc.json", + "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", + "divisible": 1, + "locked": 1 + }, + "get_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "give_quantity_normalized": "2000", + "get_quantity_normalized": "1", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0" }, { "tx_index": 825370, @@ -2506,7 +2947,25 @@ Returns the orders of an asset "fee_required_remaining": 0, "fee_provided": 75791, "fee_provided_remaining": 75791, - "status": "filled" + "status": "filled", + "give_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "get_asset_issuance": { + "asset_longname": null, + "description": "http://rarepepedirectory.com/json/pc.json", + "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", + "divisible": 1, + "locked": 1 + }, + "give_quantity_normalized": "1", + "get_quantity_normalized": "1000", + "get_remaining_normalized": "-11", + "give_remaining_normalized": "0" }, { "tx_index": 825413, @@ -2525,7 +2984,25 @@ Returns the orders of an asset "fee_required_remaining": 0, "fee_provided": 40000, "fee_provided_remaining": 40000, - "status": "filled" + "status": "filled", + "give_asset_issuance": { + "asset_longname": null, + "description": "http://rarepepedirectory.com/json/pc.json", + "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", + "divisible": 1, + "locked": 1 + }, + "get_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "give_quantity_normalized": "4000", + "get_quantity_normalized": "1", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0" }, { "tx_index": 1946587, @@ -2544,7 +3021,24 @@ Returns the orders of an asset "fee_required_remaining": 0, "fee_provided": 792, "fee_provided_remaining": 792, - "status": "filled" + "status": "filled", + "give_asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "get_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "give_quantity_normalized": "700", + "get_quantity_normalized": "1", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0" }, { "tx_index": 825371, @@ -2563,7 +3057,25 @@ Returns the orders of an asset "fee_required_remaining": 0, "fee_provided": 46098, "fee_provided_remaining": 46098, - "status": "filled" + "status": "filled", + "give_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "get_asset_issuance": { + "asset_longname": null, + "description": "http://rarepepedirectory.com/json/pc.json", + "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", + "divisible": 1, + "locked": 1 + }, + "give_quantity_normalized": "1", + "get_quantity_normalized": "2000", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0" }, { "tx_index": 825372, @@ -2582,13 +3094,31 @@ Returns the orders of an asset "fee_required_remaining": 0, "fee_provided": 46098, "fee_provided_remaining": 46098, - "status": "filled" + "status": "filled", + "give_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "get_asset_issuance": { + "asset_longname": null, + "description": "http://rarepepedirectory.com/json/pc.json", + "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", + "divisible": 1, + "locked": 1 + }, + "give_quantity_normalized": "1", + "get_quantity_normalized": "3000", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0" } ] } ``` -### Get Credits By Asset [GET /assets/{asset}/credits{?limit}{?offset}] +### Get Credits By Asset [GET /assets/{asset}/credits{?limit}{?offset}{?verbose}] Returns the credits of an asset @@ -2598,6 +3128,8 @@ Returns the credits of an asset + Default: `100` + offset: `0` (int, optional) - The offset of the credits to return + Default: `0` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -2611,13 +3143,89 @@ Returns the credits of an asset "quantity": 1, "calling_function": "issuance", "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "tx_index": 2726605 + "tx_index": 2726605, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" + }, + { + "block_index": 840744, + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "UNNEGOTIABLE", + "quantity": 1775, + "calling_function": "issuance", + "event": "92f6d2e3b07ff6aa558357d6c2c324a763f54bbcc4b887c725d61e60a57b4a7e", + "tx_index": 2726753, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1775" + }, + { + "block_index": 840759, + "address": "1AFmKo6v7tNBm45bo6eDhB6gACZhFD8oby", + "asset": "UNNEGOTIABLE", + "quantity": 76, + "calling_function": "open dispenser empty addr", + "event": "382fcc65fddc7ac39ab37fe66b2bb24d3e431b7bf0d99e509d7e761c49e28cb8", + "tx_index": 2726781, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "76" + }, + { + "block_index": 840870, + "address": "17LV3y5KhExPdVcqS81zXuVUfNV9pmaGA", + "asset": "UNNEGOTIABLE", + "quantity": 1, + "calling_function": "dispense", + "event": "f3775d4cc481b17c860c32d175a02535fef3d5d4642d9a4e947768a6bc406207", + "tx_index": 2726916, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" + }, + { + "block_index": 840895, + "address": "1FmEBHzkZGqQZ7kprf53xU8XijUiv2SDYW", + "asset": "UNNEGOTIABLE", + "quantity": 1, + "calling_function": "dispense", + "event": "ce3c2d55978a5b7700ef543926af84bb3f8f94ae1f3312880ee32cd0ce1743fd", + "tx_index": 2726969, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" } ] } ``` -### Get Debits By Asset [GET /assets/{asset}/debits{?limit}{?offset}] +### Get Debits By Asset [GET /assets/{asset}/debits{?limit}{?offset}{?verbose}] Returns the debits of an asset @@ -2627,6 +3235,8 @@ Returns the debits of an asset + Default: `100` + offset: `0` (int, optional) - The offset of the debits to return + Default: `0` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -2640,7 +3250,14 @@ Returns the debits of an asset "quantity": 1000000000, "action": "send", "event": "1c20d6596f6be031c94def5ad93a52217d76371885adcc53c91c3b1eaf76ccce", - "tx_index": 729 + "tx_index": 729, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "10" }, { "block_index": 280112, @@ -2649,7 +3266,14 @@ Returns the debits of an asset "quantity": 1100000000, "action": "send", "event": "4dacd03d73cb497229dbfe2e7209adc4221540efe0e4c57f408b09b2fd36ece6", - "tx_index": 749 + "tx_index": 749, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "11" }, { "block_index": 280112, @@ -2658,7 +3282,14 @@ Returns the debits of an asset "quantity": 100000000, "action": "send", "event": "057d10cc33455f4f7af44d2f030b3866e3a16416ecf984e304c76abe98393c1d", - "tx_index": 752 + "tx_index": 752, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "1" }, { "block_index": 280114, @@ -2667,7 +3298,14 @@ Returns the debits of an asset "quantity": 1100000000, "action": "send", "event": "3ac6ea5b329832e2dc31ead6c5277beccb7d95f0d9f20f256f97067223c81e00", - "tx_index": 755 + "tx_index": 755, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "11" }, { "block_index": 280156, @@ -2676,18 +3314,27 @@ Returns the debits of an asset "quantity": 1100000000, "action": "send", "event": "66fc1409ac6646bd8c267de89c57d2204e31bb6dfce9ee2a3ab18416fadf9e9c", - "tx_index": 766 + "tx_index": 766, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "11" } ] } ``` -### Get Dividends [GET /assets/{asset}/dividends] +### Get Dividends [GET /assets/{asset}/dividends{?verbose}] Returns the dividends of an asset + Parameters + asset: `GMONEYPEPE` (str, required) - The asset to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -2703,7 +3350,14 @@ Returns the dividends of an asset "dividend_asset": "ENDTHEFED", "quantity_per_unit": 1, "fee_paid": 2520000, - "status": "valid" + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/GMONEYPEPE.json", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 1 + } }, { "tx_index": 1915246, @@ -2714,7 +3368,14 @@ Returns the dividends of an asset "dividend_asset": "TRUMPDANCING", "quantity_per_unit": 100, "fee_paid": 2520000, - "status": "valid" + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/GMONEYPEPE.json", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 1 + } }, { "tx_index": 1920208, @@ -2725,7 +3386,14 @@ Returns the dividends of an asset "dividend_asset": "CTRWOJACK", "quantity_per_unit": 1111, "fee_paid": 2700000, - "status": "valid" + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/GMONEYPEPE.json", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 1 + } }, { "tx_index": 1927909, @@ -2736,7 +3404,14 @@ Returns the dividends of an asset "dividend_asset": "WHITERUSSIAN", "quantity_per_unit": 1, "fee_paid": 3220000, - "status": "valid" + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/GMONEYPEPE.json", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 1 + } }, { "tx_index": 1983693, @@ -2747,7 +3422,14 @@ Returns the dividends of an asset "dividend_asset": "A4520591452211866149", "quantity_per_unit": 1, "fee_paid": 4040000, - "status": "valid" + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/GMONEYPEPE.json", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 1 + } }, { "tx_index": 1983842, @@ -2758,7 +3440,14 @@ Returns the dividends of an asset "dividend_asset": "NCSWIC", "quantity_per_unit": 1, "fee_paid": 4040000, - "status": "valid" + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/GMONEYPEPE.json", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 1 + } }, { "tx_index": 1996395, @@ -2769,7 +3458,14 @@ Returns the dividends of an asset "dividend_asset": "FUCKTHEFED", "quantity_per_unit": 1, "fee_paid": 4380000, - "status": "valid" + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/GMONEYPEPE.json", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 1 + } }, { "tx_index": 2035947, @@ -2780,7 +3476,14 @@ Returns the dividends of an asset "dividend_asset": "HOLDTHELINE", "quantity_per_unit": 1, "fee_paid": 4940000, - "status": "valid" + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/GMONEYPEPE.json", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 1 + } }, { "tx_index": 2174481, @@ -2791,7 +3494,14 @@ Returns the dividends of an asset "dividend_asset": "EOXIXIZERO", "quantity_per_unit": 1, "fee_paid": 6500000, - "status": "valid" + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/GMONEYPEPE.json", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 1 + } }, { "tx_index": 2198534, @@ -2802,7 +3512,14 @@ Returns the dividends of an asset "dividend_asset": "TRUMPCARDS", "quantity_per_unit": 1, "fee_paid": 6660000, - "status": "valid" + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/GMONEYPEPE.json", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 1 + } }, { "tx_index": 2704948, @@ -2813,7 +3530,14 @@ Returns the dividends of an asset "dividend_asset": "FUCKYOUWAR", "quantity_per_unit": 1, "fee_paid": 6840000, - "status": "valid" + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/GMONEYPEPE.json", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 1 + } }, { "tx_index": 2704949, @@ -2824,18 +3548,27 @@ Returns the dividends of an asset "dividend_asset": "MEDICINEPEPE", "quantity_per_unit": 1, "fee_paid": 6840000, - "status": "valid" + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/GMONEYPEPE.json", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 1 + } } ] } ``` -### Get Issuances By Asset [GET /assets/{asset}/issuances] +### Get Issuances By Asset [GET /assets/{asset}/issuances{?verbose}] Returns the issuances of an asset + Parameters + asset: `UNNEGOTIABLE` (str, required) - The asset to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -2862,12 +3595,75 @@ Returns the issuances of an asset "status": "valid", "asset_longname": null, "reset": 0 + }, + { + "tx_index": 2726737, + "tx_hash": "d15580fa7ba62d7e7928db41836521af9e7cbc8cce2efa06cc2cc57d22bf4f0f", + "msg_index": 0, + "block_index": 840738, + "asset": "UNNEGOTIABLE", + "quantity": 0, + "divisible": 0, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "transfer": 0, + "callable": 0, + "call_date": 0, + "call_price": 0.0, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "fee_paid": 0, + "locked": 0, + "status": "valid", + "asset_longname": null, + "reset": 0 + }, + { + "tx_index": 2726753, + "tx_hash": "92f6d2e3b07ff6aa558357d6c2c324a763f54bbcc4b887c725d61e60a57b4a7e", + "msg_index": 0, + "block_index": 840744, + "asset": "UNNEGOTIABLE", + "quantity": 1775, + "divisible": 0, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "transfer": 0, + "callable": 0, + "call_date": 0, + "call_price": 0.0, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "fee_paid": 0, + "locked": 0, + "status": "valid", + "asset_longname": null, + "reset": 0 + }, + { + "tx_index": 2726769, + "tx_hash": "935fc9682e0aa630df4e640e3cbf730b5a722a41002cb425a69eb33a66556501", + "msg_index": 0, + "block_index": 840756, + "asset": "UNNEGOTIABLE", + "quantity": 0, + "divisible": 0, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "transfer": 0, + "callable": 0, + "call_date": 0, + "call_price": 0.0, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "fee_paid": 0, + "locked": 1, + "status": "valid", + "asset_longname": null, + "reset": 0 } ] } ``` -### Get Sends By Asset [GET /assets/{asset}/sends{?limit}{?offset}] +### Get Sends By Asset [GET /assets/{asset}/sends{?limit}{?offset}{?verbose}] Returns the sends of an asset @@ -2877,6 +3673,8 @@ Returns the sends of an asset + Default: `100` + offset: `0` (int, optional) - The offset of the sends to return + Default: `0` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -2893,7 +3691,14 @@ Returns the sends of an asset "quantity": 1000000000, "status": "valid", "msg_index": 0, - "memo": null + "memo": null, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "10" }, { "tx_index": 749, @@ -2905,7 +3710,14 @@ Returns the sends of an asset "quantity": 1100000000, "status": "valid", "msg_index": 0, - "memo": null + "memo": null, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "11" }, { "tx_index": 752, @@ -2917,7 +3729,14 @@ Returns the sends of an asset "quantity": 100000000, "status": "valid", "msg_index": 0, - "memo": null + "memo": null, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "1" }, { "tx_index": 755, @@ -2929,7 +3748,14 @@ Returns the sends of an asset "quantity": 1100000000, "status": "valid", "msg_index": 0, - "memo": null + "memo": null, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "11" }, { "tx_index": 766, @@ -2941,13 +3767,20 @@ Returns the sends of an asset "quantity": 1100000000, "status": "valid", "msg_index": 0, - "memo": null + "memo": null, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "11" } ] } ``` -### Get Dispensers By Asset [GET /assets/{asset}/dispensers{?status}] +### Get Dispensers By Asset [GET /assets/{asset}/dispensers{?status}{?verbose}] Returns the dispensers of an asset @@ -2955,6 +3788,8 @@ Returns the dispensers of an asset + asset: `ERYKAHPEPU` (str, required) - The asset to return + status (int, optional) - + Default: `0` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -2975,13 +3810,23 @@ Returns the dispensers of an asset "oracle_address": null, "last_status_tx_hash": null, "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", - "dispense_count": 0 + "dispense_count": 0, + "asset_issuance": { + "asset_longname": null, + "description": "https://ipfs.io/ipfs/QmPzRXMYVTQ3zoYhaxW5ZRkt4o9vUnnzdBW4kV5CXUyjT4/ERYKAHPEPU.json", + "issuer": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "divisible": 0, + "locked": 1 + }, + "give_quantity_normalized": "1", + "give_remaining_normalized": "25", + "escrow_quantity_normalized": "25" } ] } ``` -### Get Dispensers By Address And Asset [GET /assets/{asset}/dispensers/{address}{?status}] +### Get Dispensers By Address And Asset [GET /assets/{asset}/dispensers/{address}{?status}{?verbose}] Returns the dispensers of an address and an asset @@ -2990,6 +3835,8 @@ Returns the dispensers of an address and an asset + asset: `ERYKAHPEPU` (str, required) - The asset to return + status (int, optional) - + Default: `0` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -3010,18 +3857,30 @@ Returns the dispensers of an address and an asset "oracle_address": null, "last_status_tx_hash": null, "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", - "dispense_count": 0 + "dispense_count": 0, + "asset_issuance": { + "asset_longname": null, + "description": "https://ipfs.io/ipfs/QmPzRXMYVTQ3zoYhaxW5ZRkt4o9vUnnzdBW4kV5CXUyjT4/ERYKAHPEPU.json", + "issuer": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "divisible": 0, + "locked": 1 + }, + "give_quantity_normalized": "1", + "give_remaining_normalized": "25", + "escrow_quantity_normalized": "25" } ] } ``` -### Get Asset Holders [GET /assets/{asset}/holders] +### Get Asset Holders [GET /assets/{asset}/holders{?verbose}] Returns the holders of an asset + Parameters + asset: `ERYKAHPEPU` (str, required) - The asset to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -3074,12 +3933,14 @@ Returns the holders of an asset ## Group Orders -### Get Order [GET /orders/{order_hash}] +### Get Order [GET /orders/{order_hash}{?verbose}] Returns the information of an order + Parameters + order_hash: `23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776` (str, required) - The hash of the transaction that created the order + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -3089,27 +3950,44 @@ Returns the information of an order { "tx_index": 2724132, "tx_hash": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776", - "block_index": 840381, + "block_index": 840918, "source": "15L7U55PAsHLEpQkZqz62e3eqWd9AHb2DH", "give_asset": "PEPECASH", "give_quantity": 6966600000000, - "give_remaining": 900000000000, + "give_remaining": 0, "get_asset": "XCP", "get_quantity": 11076894000, - "get_remaining": 1431000000, + "get_remaining": 0, "expiration": 5000, "expire_index": 843055, "fee_required": 0, "fee_required_remaining": 0, "fee_provided": 4488, "fee_provided_remaining": 4488, - "status": "open" + "status": "filled", + "give_asset_issuance": { + "asset_longname": null, + "description": "http://rarepepedirectory.com/json/pc.json", + "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", + "divisible": 1, + "locked": 1 + }, + "get_asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "give_quantity_normalized": "69666", + "get_quantity_normalized": "110.76894", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0" } ] } ``` -### Get Order Matches By Order [GET /orders/{order_hash}/matches{?status}] +### Get Order Matches By Order [GET /orders/{order_hash}/matches{?status}{?verbose}] Returns the order matches of an order @@ -3117,6 +3995,8 @@ Returns the order matches of an order + order_hash: `5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947` (str, required) - The hash of the transaction that created the order + status: `completed` (str, optional) - The status of the order matches to return + Default: `pending` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -3148,12 +4028,14 @@ Returns the order matches of an order } ``` -### Get BTCPays By Order [GET /orders/{order_hash}/btcpays] +### Get BTCPays By Order [GET /orders/{order_hash}/btcpays{?verbose}] Returns the BTC pays of an order + Parameters + order_hash: `299b5b648f54eacb839f3487232d49aea373cdd681b706d4cc0b5e0b03688db4` (str, required) - The hash of the transaction that created the order + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -3174,7 +4056,7 @@ Returns the BTC pays of an order } ``` -### Get Orders By Two Assets [GET /orders/{asset1}/{asset2}{?status}] +### Get Orders By Two Assets [GET /orders/{asset1}/{asset2}{?status}{?verbose}] Returns the orders to exchange two assets @@ -3183,6 +4065,8 @@ Returns the orders to exchange two assets + asset2: `XCP` (str, required) - The second asset to return + status: `filled` (str, optional) - The status of the orders to return + Default: `open` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -3206,7 +4090,27 @@ Returns the orders to exchange two assets "fee_required_remaining": 0, "fee_provided": 5544, "fee_provided_remaining": 5544, - "status": "filled" + "status": "filled", + "market_pair": "NEEDPEPE/XCP", + "market_dir": "SELL", + "give_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "get_asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "give_quantity_normalized": "1", + "get_quantity_normalized": "808", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0", + "market_price": "808" }, { "tx_index": 1946026, @@ -3225,7 +4129,27 @@ Returns the orders to exchange two assets "fee_required_remaining": 0, "fee_provided": 264, "fee_provided_remaining": 264, - "status": "filled" + "status": "filled", + "market_pair": "NEEDPEPE/XCP", + "market_dir": "SELL", + "give_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "get_asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "give_quantity_normalized": "1", + "get_quantity_normalized": "700", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0", + "market_price": "700" }, { "tx_index": 2202451, @@ -3244,7 +4168,27 @@ Returns the orders to exchange two assets "fee_required_remaining": 0, "fee_provided": 264, "fee_provided_remaining": 264, - "status": "filled" + "status": "filled", + "market_pair": "NEEDPEPE/XCP", + "market_dir": "BUY", + "give_asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "get_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "give_quantity_normalized": "808", + "get_quantity_normalized": "1", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0", + "market_price": "808" }, { "tx_index": 1946587, @@ -3263,7 +4207,27 @@ Returns the orders to exchange two assets "fee_required_remaining": 0, "fee_provided": 792, "fee_provided_remaining": 792, - "status": "filled" + "status": "filled", + "market_pair": "NEEDPEPE/XCP", + "market_dir": "BUY", + "give_asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "get_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "give_quantity_normalized": "700", + "get_quantity_normalized": "1", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0", + "market_price": "700" } ] } @@ -3271,12 +4235,14 @@ Returns the orders to exchange two assets ## Group Bets -### Get Bet [GET /bets/{bet_hash}] +### Get Bet [GET /bets/{bet_hash}{?verbose}] Returns the information of a bet + Parameters + bet_hash: `5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed` (str, required) - The hash of the transaction that created the bet + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -3306,7 +4272,7 @@ Returns the information of a bet } ``` -### Get Bet Matches By Bet [GET /bets/{bet_hash}/matches{?status}] +### Get Bet Matches By Bet [GET /bets/{bet_hash}/matches{?status}{?verbose}] Returns the bet matches of a bet @@ -3314,6 +4280,8 @@ Returns the bet matches of a bet + bet_hash: `5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed` (str, required) - The hash of the transaction that created the bet + status: `expired` (str, optional) - The status of the bet matches + Default: `pending` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -3350,12 +4318,14 @@ Returns the bet matches of a bet } ``` -### Get Resolutions By Bet [GET /bets/{bet_hash}/resolutions] +### Get Resolutions By Bet [GET /bets/{bet_hash}/resolutions{?verbose}] Returns the resolutions of a bet + Parameters + bet_hash: `36bbbb7dbd85054dac140a8ad8204eda2ee859545528bd2a9da69ad77c277ace` (str, required) - The hash of the transaction that created the bet + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -3379,7 +4349,7 @@ Returns the resolutions of a bet ## Group Burns -### Get All Burns [GET /burns{?status}{?offset}{?limit}] +### Get All Burns [GET /burns{?status}{?offset}{?limit}{?verbose}] Returns the burns @@ -3390,6 +4360,8 @@ Returns the burns + Default: `0` + limit: `5` (int, optional) - The limit of the burns to return + Default: `100` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -3447,12 +4419,14 @@ Returns the burns ## Group Dispensers -### Get Dispenser Info By Hash [GET /dispensers/{dispenser_hash}] +### Get Dispenser Info By Hash [GET /dispensers/{dispenser_hash}{?verbose}] Returns the dispenser information by tx_hash + Parameters + dispenser_hash: `753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a` (str, required) - The hash of the dispenser to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -3474,18 +4448,29 @@ Returns the dispenser information by tx_hash "last_status_tx_hash": null, "origin": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", "dispense_count": 2, - "asset_longname": null + "asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "18VNeRv8vL528HF7ruKwxycrfNEeoqmHpa", + "divisible": 1, + "locked": 1 + }, + "give_quantity_normalized": "100", + "give_remaining_normalized": "1400", + "escrow_quantity_normalized": "2500" } ] } ``` -### Get Dispenses By Dispenser [GET /dispensers/{dispenser_hash}/dispenses] +### Get Dispenses By Dispenser [GET /dispensers/{dispenser_hash}/dispenses{?verbose}] Returns the dispenses of a dispenser + Parameters + dispenser_hash: `753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a` (str, required) - The hash of the dispenser to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -3501,7 +4486,31 @@ Returns the dispenses of a dispenser "destination": "1FKYM1CP9RfttJhNG8HTNQdE2uV3YvwbRB", "asset": "FLOCK", "dispense_quantity": 20000000000, - "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a" + "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a", + "dispenser": { + "tx_index": 2536311, + "block_index": 840322, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "give_quantity": 10000000000, + "escrow_quantity": 250000000000, + "satoshirate": 330000, + "status": 0, + "give_remaining": 140000000000, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "dispense_count": 2, + "give_quantity_normalized": "100", + "give_remaining_normalized": "1400", + "escrow_quantity_normalized": "2500" + }, + "asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "18VNeRv8vL528HF7ruKwxycrfNEeoqmHpa", + "divisible": 1, + "locked": 1 + } }, { "tx_index": 2726580, @@ -3512,7 +4521,31 @@ Returns the dispenses of a dispenser "destination": "bc1qzcdkhnexpjc8wvkyrpyrsn0f5xzcpu877mjmgj", "asset": "FLOCK", "dispense_quantity": 90000000000, - "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a" + "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a", + "dispenser": { + "tx_index": 2536311, + "block_index": 840322, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "give_quantity": 10000000000, + "escrow_quantity": 250000000000, + "satoshirate": 330000, + "status": 0, + "give_remaining": 140000000000, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "dispense_count": 2, + "give_quantity_normalized": "100", + "give_remaining_normalized": "1400", + "escrow_quantity_normalized": "2500" + }, + "asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "18VNeRv8vL528HF7ruKwxycrfNEeoqmHpa", + "divisible": 1, + "locked": 1 + } } ] } @@ -3520,7 +4553,7 @@ Returns the dispenses of a dispenser ## Group Events -### Get All Events [GET /events{?last}{?limit}] +### Get All Events [GET /events{?last}{?limit}{?verbose}] Returns all events @@ -3529,6 +4562,8 @@ Returns all events + Default: `None` + limit: `5` (int, optional) - The maximum number of events to return + Default: `100` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -3558,7 +4593,15 @@ Returns all events "source": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", "status": "valid", "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", - "tx_index": 2056160 + "tx_index": 2056160, + "asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "14CepDzwxKDQritbC7oAq7FTJiiEPPauyu", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" }, "block_index": 744232, "timestamp": 1712256340 @@ -3573,7 +4616,15 @@ Returns all events "calling_function": "send", "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", "quantity": 1, - "tx_index": 2056160 + "tx_index": 2056160, + "asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "14CepDzwxKDQritbC7oAq7FTJiiEPPauyu", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" }, "block_index": 744232, "timestamp": 1712256340 @@ -3588,7 +4639,15 @@ Returns all events "block_index": 744232, "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", "quantity": 1, - "tx_index": 2056160 + "tx_index": 2056160, + "asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "14CepDzwxKDQritbC7oAq7FTJiiEPPauyu", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" }, "block_index": 744232, "timestamp": 1712256340 @@ -3608,12 +4667,14 @@ Returns all events } ``` -### Get Event By Index [GET /events/{event_index}] +### Get Event By Index [GET /events/{event_index}{?verbose}] Returns the event of an index + Parameters + event_index: `10665092` (int, required) - The index of the event to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -3635,207 +4696,15 @@ Returns the event of an index } ``` -### Get All Events Counts [GET /events/counts] +### Get All Events Counts [GET /events/counts{?verbose}] Returns the event counts of all blocks -+ Response 200 (application/json) - ``` - { - "result": [ - { - "event": "ASSET_CREATION", - "event_count": 235860 - }, - { - "event": "ASSET_DESTRUCTION", - "event_count": 11141 - }, - { - "event": "ASSET_DIVIDEND", - "event_count": 4092 - }, - { - "event": "ASSET_ISSUANCE", - "event_count": 322678 - }, - { - "event": "ASSET_TRANSFER", - "event_count": 10639 - }, - { - "event": "BET_EXPIRATION", - "event_count": 588 - }, - { - "event": "BET_MATCH", - "event_count": 397 - }, - { - "event": "BET_MATCH_EXPIRATION", - "event_count": 9 - }, - { - "event": "BET_MATCH_RESOLUTON", - "event_count": 387 - }, - { - "event": "BET_MATCH_UPDATE", - "event_count": 397 - }, - { - "event": "BET_UPDATE", - "event_count": 1474 - }, - { - "event": "BLOCK_PARSED", - "event_count": 562364 - }, - { - "event": "BROADCAST", - "event_count": 106518 - }, - { - "event": "BTC_PAY", - "event_count": 2921 - }, - { - "event": "BURN", - "event_count": 2576 - }, - { - "event": "CANCEL_BET", - "event_count": 101 - }, - { - "event": "CANCEL_ORDER", - "event_count": 80168 - }, - { - "event": "CREDIT", - "event_count": 3659293 - }, - { - "event": "DEBIT", - "event_count": 2617404 - }, - { - "event": "DISPENSE", - "event_count": 190873 - }, - { - "event": "DISPENSER_UPDATE", - "event_count": 228954 - }, - { - "event": "ENHANCED_SEND", - "event_count": 538426 - }, - { - "event": "MPMA_SEND", - "event_count": 279142 - }, - { - "event": "NEW_BLOCK", - "event_count": 1992 - }, - { - "event": "NEW_TRANSACTION", - "event_count": 4498 - }, - { - "event": "NEW_TRANSACTION_OUTPUT", - "event_count": 596 - }, - { - "event": "OPEN_BET", - "event_count": 1149 - }, - { - "event": "OPEN_DISPENSER", - "event_count": 88229 - }, - { - "event": "OPEN_ORDER", - "event_count": 530117 - }, - { - "event": "OPEN_RPS", - "event_count": 266 - }, - { - "event": "ORDER_EXPIRATION", - "event_count": 195968 - }, - { - "event": "ORDER_FILLED", - "event_count": 805 - }, - { - "event": "ORDER_MATCH", - "event_count": 209415 - }, - { - "event": "ORDER_MATCH_EXPIRATION", - "event_count": 20860 - }, - { - "event": "ORDER_MATCH_UPDATE", - "event_count": 23689 - }, - { - "event": "ORDER_UPDATE", - "event_count": 732646 - }, - { - "event": "REFILL_DISPENSER", - "event_count": 187 - }, - { - "event": "RESET_ISSUANCE", - "event_count": 454 - }, - { - "event": "RPS_EXPIRATION", - "event_count": 59 - }, - { - "event": "RPS_MATCH", - "event_count": 171 - }, - { - "event": "RPS_MATCH_EXPIRATION", - "event_count": 145 - }, - { - "event": "RPS_MATCH_UPDATE", - "event_count": 271 - }, - { - "event": "RPS_RESOLVE", - "event_count": 129 - }, - { - "event": "RPS_UPDATE", - "event_count": 540 - }, - { - "event": "SEND", - "event_count": 805983 - }, - { - "event": "SWEEP", - "event_count": 1020 - }, - { - "event": "TRANSACTION_PARSED", - "event_count": 2723802 - } - ] - } - ``` ++ Parameters + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` -### Get Events By Name [GET /events/{event}{?last}{?limit}] +### Get Events By Name [GET /events/{event}{?last}{?limit}{?verbose}] Returns the events filtered by event name @@ -3845,6 +4714,8 @@ Returns the events filtered by event name + Default: `None` + limit: `5` (int, optional) - The maximum number of events to return + Default: `100` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -3861,7 +4732,15 @@ Returns the events filtered by event name "calling_function": "send", "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", "quantity": 1, - "tx_index": 2056160 + "tx_index": 2056160, + "asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "14CepDzwxKDQritbC7oAq7FTJiiEPPauyu", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" }, "block_index": 744232, "timestamp": 1712256340 @@ -3876,7 +4755,14 @@ Returns the events filtered by event name "calling_function": "dispense", "event": "bbb2dfa7e7a32288a702ef0091ece8b2a929f94fd967a18e6071cd9c2b085eaf", "quantity": 10000000000, - "tx_index": 2056159 + "tx_index": 2056159, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "100" }, "block_index": 744232, "timestamp": 1712256340 @@ -3891,7 +4777,15 @@ Returns the events filtered by event name "calling_function": "send", "event": "b419d19729c2be813405c548431f4840d5c909b875f94b7c56aeca134e328ef6", "quantity": 1, - "tx_index": 2056158 + "tx_index": 2056158, + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/FREEDOMKEK.json", + "issuer": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "divisible": 0, + "locked": 0 + }, + "quantity_normalized": "1" }, "block_index": 744232, "timestamp": 1712256340 @@ -3906,7 +4800,15 @@ Returns the events filtered by event name "calling_function": "send", "event": "145ebf6c563c4e91a2bc488954ef701dad730fc065697979c80d6d85cbba63e1", "quantity": 1, - "tx_index": 2056157 + "tx_index": 2056157, + "asset_issuance": { + "asset_longname": null, + "description": "https://easyasset.art/j/gnyrdg/PEPEFRIDAY.json", + "issuer": "1CCPbFbST8ruJrTGjm2Ss5aTAaqng4naBN", + "divisible": 0, + "locked": 0 + }, + "quantity_normalized": "1" }, "block_index": 744232, "timestamp": 1712256340 @@ -3921,7 +4823,15 @@ Returns the events filtered by event name "calling_function": "send", "event": "388c7208d52bf617c1a3eef238a668f694a4f72dc97b3be92562fe636ca646fa", "quantity": 2, - "tx_index": 2056156 + "tx_index": 2056156, + "asset_issuance": { + "asset_longname": null, + "description": "https://easyasset.art/j/gnyrdg/PEPEFRIDAY.json", + "issuer": "1CCPbFbST8ruJrTGjm2Ss5aTAaqng4naBN", + "divisible": 0, + "locked": 0 + }, + "quantity_normalized": "2" }, "block_index": 744232, "timestamp": 1712256340 @@ -3932,13 +4842,15 @@ Returns the events filtered by event name ## Group Z-pages -### Check Server Health [GET /healthz{?check_type}] +### Check Server Health [GET /healthz{?check_type}{?verbose}] Health check route. + Parameters + check_type: `light` (str, optional) - Type of health check to perform. Options are 'light' and 'heavy' + Default: `heavy` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -3952,7 +4864,7 @@ Health check route. ## Group Bitcoin -### Get Transactions By Address [GET /bitcoin/addresses/{address}/transactions{?unconfirmed}{?only_tx_hashes}] +### Get Transactions By Address [GET /bitcoin/addresses/{address}/transactions{?unconfirmed}{?only_tx_hashes}{?verbose}] Returns all transactions involving a given address @@ -3962,6 +4874,8 @@ Returns all transactions involving a given address + Default: `True` + only_tx_hashes: `True` (bool, optional) - Return only the tx hashes + Default: `False` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -4008,7 +4922,7 @@ Returns all transactions involving a given address } ``` -### Get Oldest Transaction By Address [GET /bitcoin/addresses/{address}/transactions/oldest{?block_index}] +### Get Oldest Transaction By Address [GET /bitcoin/addresses/{address}/transactions/oldest{?block_index}{?verbose}] Get the oldest transaction for an address. @@ -4016,6 +4930,8 @@ Get the oldest transaction for an address. + address: `14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS` (str, required) - The address to search for. + block_index (int, optional) - The block index to search from. + Default: `None` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -4028,7 +4944,7 @@ Get the oldest transaction for an address. } ``` -### Get Unspent Txouts [GET /bitcoin/addresses/{address}/utxos{?unconfirmed}{?unspent_tx_hash}] +### Get Unspent Txouts [GET /bitcoin/addresses/{address}/utxos{?unconfirmed}{?unspent_tx_hash}{?verbose}] Returns a list of unspent outputs for a specific address @@ -4038,6 +4954,8 @@ Returns a list of unspent outputs for a specific address + Default: `False` + unspent_tx_hash (str, optional) - Filter by unspent_tx_hash + Default: `None` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -4128,7 +5046,7 @@ Returns a list of unspent outputs for a specific address } ``` -### PubKeyHash To Pubkey [GET /bitcoin/addresses/{address}/pubkey{?provided_pubkeys}] +### PubKeyHash To Pubkey [GET /bitcoin/addresses/{address}/pubkey{?provided_pubkeys}{?verbose}] Get pubkey for an address. @@ -4136,6 +5054,8 @@ Get pubkey for an address. + address: `14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS` (str, required) - Address to get pubkey for. + provided_pubkeys (str, optional) - Comma separated list of provided pubkeys. + Default: `None` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -4145,14 +5065,16 @@ Get pubkey for an address. } ``` -### Get Transaction [GET /bitcoin/transactions/{tx_hash}{?verbose}] +### Get Transaction [GET /bitcoin/transactions/{tx_hash}{?format}{?verbose}] Get a transaction from the blockchain + Parameters + tx_hash: `3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018` (str, required) - The transaction hash - + verbose: `True` (bool, optional) - Whether to return JSON output or raw hex - + Default: `False` + + format: `hex` (str, optional) - Whether to return JSON output or raw hex + + Default: `json` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -4203,7 +5125,7 @@ Get a transaction from the blockchain } ``` -### Fee Per Kb [GET /bitcoin/estimatesmartfee{?conf_target}{?mode}] +### Fee Per Kb [GET /bitcoin/estimatesmartfee{?conf_target}{?mode}{?verbose}] Get the fee per kilobyte for a transaction to be confirmed in `conf_target` blocks. @@ -4212,6 +5134,8 @@ Get the fee per kilobyte for a transaction to be confirmed in `conf_target` bloc + Default: `3` + mode: `CONSERVATIVE` (str, optional) - The fee estimate mode. + Default: `CONSERVATIVE` + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) @@ -4223,23 +5147,22 @@ Get the fee per kilobyte for a transaction to be confirmed in `conf_target` bloc ## Group Mempool -### Get All Mempool Events [GET /mempool/events] +### Get All Mempool Events [GET /mempool/events{?verbose}] Returns all mempool events -+ Response 200 (application/json) - ``` - { - "result": [] - } - ``` ++ Parameters + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` -### Get Mempool Events By Name [GET /mempool/events/{event}] +### Get Mempool Events By Name [GET /mempool/events/{event}{?verbose}] Returns the mempool events filtered by event name + Parameters + event: `OPEN_ORDER` (str, required) - The event to return + + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + + Default: `false` + Response 200 (application/json) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index aa55b3833b..52da33f5de 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -131,6 +131,8 @@ def prepare_args(route, **kwargs): # inject args from request.args for arg in route["args"]: arg_name = arg["name"] + if arg_name == "verbose": + continue if arg_name in function_args: continue str_arg = request.args.get(arg_name) diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index e80d06a583..803b4b0a49 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -200,6 +200,15 @@ def prepare_route_args(function): if arg_name in args_description: route_arg["description"] = args_description[arg_name] args.append(route_arg) + args.append( + { + "name": "verbose", + "type": "bool", + "default": "false", + "description": "Include asset and dispenser info and normalized quantities in the response.", + "required": False, + } + ) return args diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index 7812a6d80d..42896a00f5 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -1133,7 +1133,20 @@ def get_assets_last_issuance(db, asset_list): cursor.execute(query, asset_list + ["valid"]) issuances = cursor.fetchall() - result = {} + result = { + "BTC": { + "divisible": True, + "asset_longname": "Bitcoin", + "description": "The Bitcoin cryptocurrency", + "locked": False, + }, + "XCP": { + "divisible": True, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": True, + }, + } for issuance in issuances: del issuance["rowid"] asset = issuance["asset"] diff --git a/counterparty-core/tools/apicache.json b/counterparty-core/tools/apicache.json index 633537ab62..e58a979a6e 100644 --- a/counterparty-core/tools/apicache.json +++ b/counterparty-core/tools/apicache.json @@ -35,134 +35,6 @@ } ] }, - "/blocks//credits": { - "result": [ - { - "block_index": 840464, - "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "asset": "UNNEGOTIABLE", - "quantity": 1, - "calling_function": "issuance", - "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "tx_index": 2726605 - } - ] - }, - "/blocks//debits": { - "result": [ - { - "block_index": 840464, - "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "asset": "XCP", - "quantity": 50000000, - "action": "issuance fee", - "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "tx_index": 2726605 - } - ] - }, - "/blocks//expirations": { - "result": [ - { - "type": "order", - "object_id": "533d5c0ecd8ca9c2946d3298cc5e570eee55b62b887dd85c95de6de4fdc7f441" - }, - { - "type": "order", - "object_id": "b048661afeee3f266792481168024abc0d7648fe0e019e4a1e0fd9867c2c0ffc" - } - ] - }, - "/blocks//cancels": { - "result": [ - { - "tx_index": 2725738, - "tx_hash": "793af9129c7368f974c3ea0c87ad38131f0d82d19fbaf1adf8aaf2e657ec42b8", - "block_index": 839746, - "source": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", - "offer_hash": "04b258ac37f73e3b9a8575110320d67c752e1baace0f516da75845f388911735", - "status": "valid" - }, - { - "tx_index": 2725739, - "tx_hash": "2071e8a6fbc0c443b152d513c754356f8f962db2fa694de8c6826b57413cc190", - "block_index": 839746, - "source": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", - "offer_hash": "b1622dbe4f0ce740cb6c18f6f136876bc4949c40a62bc8cceefa81fd6679a57f", - "status": "valid" - } - ] - }, - "/blocks//destructions": { - "result": [ - { - "tx_index": 2726496, - "tx_hash": "f5609facc8dac6cdf70b15c514ea15a9acc24a9bd86dcac2b845d5740fbcc50b", - "block_index": 839988, - "source": "1FpLAtreZjTVCMcj1pq1AHWuqcs3n7obMm", - "asset": "COBBEE", - "quantity": 50000, - "tag": "", - "status": "valid" - } - ] - }, - "/blocks//issuances": { - "result": [ - { - "tx_index": 2726605, - "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "msg_index": 0, - "block_index": 840464, - "asset": "UNNEGOTIABLE", - "quantity": 1, - "divisible": 0, - "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "transfer": 0, - "callable": 0, - "call_date": 0, - "call_price": 0.0, - "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", - "fee_paid": 50000000, - "locked": 0, - "status": "valid", - "asset_longname": null, - "reset": 0 - } - ] - }, - "/blocks//sends": { - "result": [ - { - "tx_index": 2726604, - "tx_hash": "b4bbb14c99dd260eb634243e5c595e1b7213459979857a32850de84989bb71ec", - "block_index": 840459, - "source": "13Hnmhs5gy2yXKVBx4wSM5HCBdKnaSBZJH", - "destination": "1LfT83WAxbN9qKhtrXxcQA6xgdhfZk21Hz", - "asset": "GAMESOFTRUMP", - "quantity": 1, - "status": "valid", - "msg_index": 0, - "memo": null - } - ] - }, - "/blocks//dispenses": { - "result": [ - { - "tx_index": 2726580, - "dispense_index": 0, - "tx_hash": "e7f0f2c9bef7a492b714a5952ec61b283be344419c5bc33f405f9af41ebfa48b", - "block_index": 840322, - "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", - "destination": "bc1qzcdkhnexpjc8wvkyrpyrsn0f5xzcpu877mjmgj", - "asset": "FLOCK", - "dispense_quantity": 90000000000, - "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a" - } - ] - }, "/blocks//sweeps": { "result": [ { @@ -236,58 +108,90 @@ } } }, - "/addresses/
/balances": { + "/addresses/
/sweeps": { "result": [ { - "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", - "asset": "XCP", - "quantity": 104200000000 + "tx_index": 2720537, + "tx_hash": "d8db6281abffdbf6c320d5ade06aeb6fad2f7bfa1a2c2243c6726020a27107d3", + "block_index": 836519, + "source": "18szqTVJUWwYrtRHq98Wn4DhCGGiy3jZ87", + "destination": "1HC2q92SfH1ZHzS4CrDwp6KAipV4FqUL4T", + "flags": 3, + "status": "valid", + "memo": null, + "fee_paid": 1400000 } ] }, - "/addresses/
/balances/": { + "/addresses/
/compose/btcpay": { "result": { - "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", - "asset": "XCP", - "quantity": 104200000000 + "rawtransaction": "0200000000010161101e1990879ee64168cce92c9caf338bb571e9cb246b1c2ab87124b95091900200000016001482f2ccc569325050e36c13b55a4065113d985066ffffffff0383c3040000000000160014a9943f67bcd30331d5a4ec6d902cbe03789a1b9700000000000000004b6a49aae396d448ed266a7785be1f6fcfa38dbe3e6e043e3d67691f678d6aa3b30e423f66ffad71eaf3231ef8f05dd5cc2f5b1ea14d33274b9cddacca5bd816a1ce6d5b4d498eb66a981db7add758000000000016001482f2ccc569325050e36c13b55a4065113d98506602000000000000", + "params": { + "source": "bc1qsteve3tfxfg9pcmvzw645sr9zy7es5rx645p6l", + "order_match_id": "e470416a9500fb046835192da013f48e6468a07dba1bede4a0b68e666ed23c8d_4953bde3d9417b103615c2d3d4b284d4fcf7cbd820e5dd19ac0084e9ebd090b2" + }, + "name": "btcpay" } }, - "/addresses/
/credits": { + "/assets//holders": { "result": [ { - "block_index": 830981, - "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", - "asset": "XCP", - "quantity": 104200000000, - "calling_function": "send", - "event": "7e4fbb0a1eeeee34bf499955f1027fb78c514d63a3c8ff2e28c6dad005e4d850", - "tx_index": 2677412 + "address": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "address_quantity": 63, + "escrow": null + }, + { + "address": "16yRstRXStVJJ1TN2S4DCWifyrCsetpma7", + "address_quantity": 1, + "escrow": null + }, + { + "address": "bc1qsvqsa9arwz30g2z0w09twzn8gz3380h36yxacs", + "address_quantity": 2, + "escrow": null + }, + { + "address": "17PnWBjHkekZKQPVagmTR5HiD51pN8WHC8", + "address_quantity": 1, + "escrow": null + }, + { + "address": "1FRxFpP9XoRsvZFVqGtt4fjjgKe1h5tbAh", + "address_quantity": 1, + "escrow": null + }, + { + "address": "1AdHg2q3M2rMFRgZyZ7RQyNHdwjSib7wSZ", + "address_quantity": 2, + "escrow": null + }, + { + "address": "1CTnziWXidHzY3qT8gwLa1ZxZK37A7HreR", + "address_quantity": 1, + "escrow": null + }, + { + "address": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", + "address_quantity": 25, + "escrow": null } ] }, - "/addresses/
/debits": { + "/orders//btcpays": { "result": [ { - "block_index": 836949, - "address": "bc1q7787j6msqczs58asdtetchl3zwe8ruj57p9r9y", - "asset": "XCP", - "quantity": 40000000000, - "action": "open dispenser", - "event": "53ed08176d3479f49986e9282293da85cebc03835b128d8e790ee587f9f1c750", - "tx_index": 2721524 - }, - { - "block_index": 840388, - "address": "bc1q7787j6msqczs58asdtetchl3zwe8ruj57p9r9y", - "asset": "XCP", - "quantity": 250000000000, - "action": "send", - "event": "bc54968ba7d0a59a47b276602e2dbdcf01b14009742e0d7b50272cbae529a9a4", - "tx_index": 2726594 + "tx_index": 2719343, + "tx_hash": "6cfa7f31b43a46e5ad74a9db810bd6cac56235a8ebc73ec63d01b38ea7ea2414", + "block_index": 836188, + "source": "1NfJnJdAdmm2rJCFW54NsAKqqTTMexCNJ3", + "destination": "1BepkwAhEmEuEGF349XjmEUrRvoy9a7Biv", + "btc_amount": 4500000, + "order_match_id": "0a1387df82a8a7e9cec01c52c8fee01f6995c4e39dc5804e1d2bf40d9368f5c5_299b5b648f54eacb839f3487232d49aea373cdd681b706d4cc0b5e0b03688db4", + "status": "valid" } ] }, - "/addresses/
/bets": { + "/bets/": { "result": [ { "tx_index": 15106, @@ -307,1727 +211,2814 @@ "expire_index": 304073, "fee_fraction_int": 1000000, "status": "filled" - }, - { - "tx_index": 61338, - "tx_hash": "0fcc7f5190c028f6c5534554d10ec5b4a9246d63826421cd58be2d572d11f088", - "block_index": 320704, - "source": "1Ew38GxczvV1KxjzZsq9f8UuRzHkHQrL5C", - "feed_address": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", - "bet_type": 2, - "deadline": 1410728400, - "wager_quantity": 1000000, - "wager_remaining": 0, - "counterwager_quantity": 1999991, - "counterwager_remaining": 0, - "target_value": 1.0, - "leverage": 5040, - "expiration": 13, - "expire_index": 320715, - "fee_fraction_int": 1000000, - "status": "filled" } ] }, - "/addresses/
/broadcasts": { + "/bets//matches": { "result": [ { - "tx_index": 15055, - "tx_hash": "774887e555a6ae5a8c058ebc0185058307977f01a2d4d326e71f37d6dd977154", - "block_index": 304048, - "source": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", - "timestamp": 1401815290, - "value": -1.0, - "fee_fraction_int": 1000000, - "text": "xbet.io/feed/1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", - "locked": 0, - "status": "valid" - }, - { - "tx_index": 61477, - "tx_hash": "5d49993bec727622c7b41c84e2b1e65c368f33390d633d217131ffcc5b592f0d", - "block_index": 320718, - "source": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", - "timestamp": 1410732503, - "value": 1.0, + "id": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed_cb5f888c299a50967d523513daed71636d927e6ef3dbda85feb11ff112ae4330", + "tx0_index": 15106, + "tx0_hash": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed", + "tx0_address": "18ZNyaAcH4HugeofwbrpLoUNiayxJRH65c", + "tx1_index": 15108, + "tx1_hash": "cb5f888c299a50967d523513daed71636d927e6ef3dbda85feb11ff112ae4330", + "tx1_address": "1PTqJmRCMGs4qBEh2APAFSrBv95Uf1hfiD", + "tx0_bet_type": 3, + "tx1_bet_type": 2, + "feed_address": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "initial_value": -1, + "deadline": 1401828300, + "target_value": 1.0, + "leverage": 5040, + "forward_quantity": 50000000, + "backward_quantity": 50000000, + "tx0_block_index": 304062, + "tx1_block_index": 304063, + "block_index": 306379, + "tx0_expiration": 11, + "tx1_expiration": 1459, + "match_expire_index": 304073, "fee_fraction_int": 1000000, - "text": "xbet.io/feed/1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", - "locked": 0, - "status": "valid" + "status": "expired" } ] }, - "/addresses/
/burns": { + "/bets//resolutions": { "result": [ { - "tx_index": 3070, - "tx_hash": "4560d0e3d04927108b615ab106040489aca9c4aceedcf69d2b71f63b3139c7ae", - "block_index": 283810, - "source": "1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W", - "burned": 10000000, - "earned": 10000000000, - "status": "valid" + "bet_match_id": "36bbbb7dbd85054dac140a8ad8204eda2ee859545528bd2a9da69ad77c277ace_d70ee4e44f02fe6258ee0c267f33f304a0fc61d4ce424852f58c28967dc1924f", + "bet_match_type_id": 5, + "block_index": 401128, + "winner": "Equal", + "settled": null, + "bull_credit": null, + "bear_credit": null, + "escrow_less_fee": 2000000, + "fee": 0 } ] }, - "/addresses/
/sends": { + "/burns": { "result": [ { - "tx_index": 163106, - "tx_hash": "1c447b41816f1cfbb83f125c8e05faeaae70dbf27255745ba7393f809bd388eb", - "block_index": 343049, - "source": "1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W", - "destination": "16cRBUNnTWiUh2sXWNn1P7KHyJUmyMkdfH", - "asset": "XCP", - "quantity": 10000000000, - "status": "valid", - "msg_index": 0, - "memo": null - } - ] - }, - "/addresses/
/receives": { - "result": [ + "tx_index": 10, + "tx_hash": "41bbe1ec81da008a0e92758efb6084af3a6b6acf483983456ec797ee59c0e0f1", + "block_index": 278511, + "source": "12crRpZpn93PKTQ4WYxHMw4xi6ckh1CFR3", + "burned": 99900000, + "earned": 148024554545, + "status": "valid" + }, { - "tx_index": 2677412, - "tx_hash": "7e4fbb0a1eeeee34bf499955f1027fb78c514d63a3c8ff2e28c6dad005e4d850", - "block_index": 830981, - "source": "bc1qqxr9grqw73dm95cen3g56mzswuj6eqjedu6csx", - "destination": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", - "asset": "XCP", - "quantity": 104200000000, - "status": "valid", - "msg_index": 0, - "memo": null - } - ] - }, - "/addresses/
/sends/": { - "result": [ + "tx_index": 11, + "tx_hash": "c403a92281b568c7d428d942354d026594dc54ae35c21f53ecf5c918208c45de", + "block_index": 278511, + "source": "13UXh9dBEhA48gJiegJNodqe91PK88f4pW", + "burned": 99900000, + "earned": 148024554545, + "status": "valid" + }, { - "tx_index": 163106, - "tx_hash": "1c447b41816f1cfbb83f125c8e05faeaae70dbf27255745ba7393f809bd388eb", - "block_index": 343049, - "source": "1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W", - "destination": "16cRBUNnTWiUh2sXWNn1P7KHyJUmyMkdfH", - "asset": "XCP", - "quantity": 10000000000, - "status": "valid", - "msg_index": 0, - "memo": null - } - ] - }, - "/addresses/
/receives/": { - "result": [ + "tx_index": 12, + "tx_hash": "749ba1c2bd314f7b98e9cfb44575495b4ad2cf624901c65488fbc4f57a3dc0ac", + "block_index": 278511, + "source": "19Ht3rkW7JB9VuC7rsZEGZju96ujzchaZZ", + "burned": 99900000, + "earned": 148024554545, + "status": "valid" + }, { - "tx_index": 2677412, - "tx_hash": "7e4fbb0a1eeeee34bf499955f1027fb78c514d63a3c8ff2e28c6dad005e4d850", - "block_index": 830981, - "source": "bc1qqxr9grqw73dm95cen3g56mzswuj6eqjedu6csx", - "destination": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", - "asset": "XCP", - "quantity": 104200000000, - "status": "valid", - "msg_index": 0, - "memo": null - } - ] - }, - "/addresses/
/dispensers": { - "result": [ + "tx_index": 13, + "tx_hash": "da330160b71138f9bda5e126df0d5d6248c0879d88e16255c74135274d8ebd27", + "block_index": 278511, + "source": "16Fu8Edsvxqixg6VnaHKPWE2TEsqQMwXfV", + "burned": 99900000, + "earned": 148024554545, + "status": "valid" + }, { - "tx_index": 2726460, - "tx_hash": "b592d8ca4994d182e4ec63e1659dc4282b1a84466b7d71ed68c281ce63ed4897", - "block_index": 839964, - "source": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", - "asset": "ERYKAHPEPU", - "give_quantity": 1, - "escrow_quantity": 25, - "satoshirate": 50000, - "status": 0, - "give_remaining": 25, - "oracle_address": null, - "last_status_tx_hash": null, - "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", - "dispense_count": 0 + "tx_index": 14, + "tx_hash": "66994176733650e77ae0cf34349f63e6538649f40f86d2719013d915bbb7701e", + "block_index": 278517, + "source": "14FFaRsfzYQxhZQv1YsMn65MvMLfJShgM8", + "burned": 99900000, + "earned": 147970063636, + "status": "valid" } ] }, - "/addresses/
/dispensers/": { + "/events/counts": { "result": [ { - "tx_index": 2726460, - "tx_hash": "b592d8ca4994d182e4ec63e1659dc4282b1a84466b7d71ed68c281ce63ed4897", - "block_index": 839964, - "source": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", - "asset": "ERYKAHPEPU", - "give_quantity": 1, - "escrow_quantity": 25, - "satoshirate": 50000, - "status": 0, - "give_remaining": 25, - "oracle_address": null, - "last_status_tx_hash": null, - "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", - "dispense_count": 0 - } - ] - }, - "/addresses/
/sweeps": { - "result": [ + "event": "ASSET_CREATION", + "event_count": 235860 + }, { - "tx_index": 2720537, - "tx_hash": "d8db6281abffdbf6c320d5ade06aeb6fad2f7bfa1a2c2243c6726020a27107d3", - "block_index": 836519, - "source": "18szqTVJUWwYrtRHq98Wn4DhCGGiy3jZ87", - "destination": "1HC2q92SfH1ZHzS4CrDwp6KAipV4FqUL4T", - "flags": 3, - "status": "valid", - "memo": null, - "fee_paid": 1400000 - } - ] - }, - "/addresses/
/compose/btcpay": { - "result": { - "rawtransaction": "0200000000010161101e1990879ee64168cce92c9caf338bb571e9cb246b1c2ab87124b95091900200000016001482f2ccc569325050e36c13b55a4065113d985066ffffffff0383c3040000000000160014a9943f67bcd30331d5a4ec6d902cbe03789a1b9700000000000000004b6a49aae396d448ed266a7785be1f6fcfa38dbe3e6e043e3d67691f678d6aa3b30e423f66ffad71eaf3231ef8f05dd5cc2f5b1ea14d33274b9cddacca5bd816a1ce6d5b4d498eb66a981db7add758000000000016001482f2ccc569325050e36c13b55a4065113d98506602000000000000", - "params": { - "source": "bc1qsteve3tfxfg9pcmvzw645sr9zy7es5rx645p6l", - "order_match_id": "e470416a9500fb046835192da013f48e6468a07dba1bede4a0b68e666ed23c8d_4953bde3d9417b103615c2d3d4b284d4fcf7cbd820e5dd19ac0084e9ebd090b2" + "event": "ASSET_DESTRUCTION", + "event_count": 11141 }, - "name": "btcpay" - } - }, - "/assets": { - "result": [ { - "asset": "A100000000000000000", - "asset_longname": null + "event": "ASSET_DIVIDEND", + "event_count": 4092 }, { - "asset": "A1000000000000000000", - "asset_longname": null + "event": "ASSET_ISSUANCE", + "event_count": 322678 }, { - "asset": "A10000000000000000000", - "asset_longname": null + "event": "ASSET_TRANSFER", + "event_count": 10639 }, { - "asset": "A10000000000000000001", - "asset_longname": null + "event": "BET_EXPIRATION", + "event_count": 588 }, { - "asset": "A10000000000000000002", - "asset_longname": null - } - ] - }, - "/assets/": { - "result": { - "asset": "UNNEGOTIABLE", - "asset_longname": null, - "owner": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "divisible": false, - "locked": false, - "supply": 1, - "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", - "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "holder_count": 1 - } - }, - "/assets//balances": { - "result": [ + "event": "BET_MATCH", + "event_count": 397 + }, { - "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "asset": "UNNEGOTIABLE", - "quantity": 1 - } - ] - }, - "/assets//balances/
": { - "result": { - "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", - "asset": "XCP", - "quantity": 104200000000 - } - }, - "/assets//orders": { - "result": [ + "event": "BET_MATCH_EXPIRATION", + "event_count": 9 + }, { - "tx_index": 825373, - "tx_hash": "0129611a0aece52adddf6d929e75c703baa9cdcb7e4ce887aa859f9640aa9640", - "block_index": 455461, - "source": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", - "give_asset": "NEEDPEPE", - "give_quantity": 1, - "give_remaining": 0, - "get_asset": "PEPECASH", - "get_quantity": 400000000000, - "get_remaining": 0, - "expiration": 1000, - "expire_index": 456457, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 46098, - "fee_provided_remaining": 46098, - "status": "filled" + "event": "BET_MATCH_RESOLUTON", + "event_count": 387 }, { - "tx_index": 2225134, - "tx_hash": "5b6e0c741d765ebd883dc16eecfb5c340c52865cabf297ca2c1432437c1348b7", - "block_index": 772817, - "source": "1FnM7akSCD8G3fRQHCUEXRCfL35gptsPZB", - "give_asset": "NEEDPEPE", - "give_quantity": 1, - "give_remaining": 0, - "get_asset": "XCP", - "get_quantity": 80800000000, - "get_remaining": 0, - "expiration": 5000, - "expire_index": 777817, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 5544, - "fee_provided_remaining": 5544, - "status": "filled" + "event": "BET_MATCH_UPDATE", + "event_count": 397 }, { - "tx_index": 1946026, - "tx_hash": "75dc6ee1f67317e674ef33b617d3a9839ee53bf4a2e8274c88d6202d4d89b59a", - "block_index": 727444, - "source": "1GotRejB6XsGgMsM79TvcypeanDJRJbMtg", - "give_asset": "NEEDPEPE", - "give_quantity": 1, - "give_remaining": 0, - "get_asset": "XCP", - "get_quantity": 70000000000, - "get_remaining": 0, - "expiration": 5000, - "expire_index": 732381, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 264, - "fee_provided_remaining": 264, - "status": "filled" + "event": "BET_UPDATE", + "event_count": 1474 }, { - "tx_index": 2202451, - "tx_hash": "77f568fc6604dbe209d2ea1b0158d7de20723c0178107eb570f4f2a719b0d7c7", - "block_index": 772817, - "source": "184gKLQTtQU29LXbxbYJkUV4if9SmW6v2d", - "give_asset": "XCP", - "give_quantity": 80800000000, - "give_remaining": 0, - "get_asset": "NEEDPEPE", - "get_quantity": 1, - "get_remaining": 0, - "expiration": 5000, - "expire_index": 773300, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 264, - "fee_provided_remaining": 264, - "status": "filled" + "event": "BLOCK_PARSED", + "event_count": 562364 }, { - "tx_index": 825411, - "tx_hash": "7b2369f40078f4d98a3d3a7733315a1c4efd7977c75f7066dd447d5c7eed7f20", - "block_index": 455461, - "source": "18cmgoX99Nrm411YKpmTQsp23qczWdxS6w", - "give_asset": "PEPECASH", - "give_quantity": 300000000000, - "give_remaining": 0, - "get_asset": "NEEDPEPE", - "get_quantity": 1, - "get_remaining": 0, - "expiration": 5000, - "expire_index": 460461, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 40000, - "fee_provided_remaining": 40000, - "status": "filled" + "event": "BROADCAST", + "event_count": 106518 }, { - "tx_index": 825403, - "tx_hash": "7e1abf6ad57eb61227015fc7a333da034b4dd2f1c4e23cf106864b60a20feef7", - "block_index": 455460, - "source": "18cmgoX99Nrm411YKpmTQsp23qczWdxS6w", - "give_asset": "PEPECASH", - "give_quantity": 200000000000, - "give_remaining": 0, - "get_asset": "NEEDPEPE", - "get_quantity": 1, - "get_remaining": 0, - "expiration": 1000, - "expire_index": 456460, - "fee_required": 20000, - "fee_required_remaining": 20000, - "fee_provided": 50766, - "fee_provided_remaining": 50766, - "status": "filled" + "event": "BTC_PAY", + "event_count": 2921 }, { - "tx_index": 825370, - "tx_hash": "8e4d324407b62de773af53f8f7a556882ac82a217c216491a28072f293918fe6", - "block_index": 455457, - "source": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", - "give_asset": "NEEDPEPE", - "give_quantity": 1, - "give_remaining": 0, - "get_asset": "PEPECASH", - "get_quantity": 100000000000, - "get_remaining": -1100000000, - "expiration": 1000, - "expire_index": 456457, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 75791, - "fee_provided_remaining": 75791, - "status": "filled" + "event": "BURN", + "event_count": 2576 }, { - "tx_index": 825413, - "tx_hash": "927878fa98edb6d24310c45254c324f3d5a7f625e2a3a0e7fd1e749b49493750", - "block_index": 455461, - "source": "18cmgoX99Nrm411YKpmTQsp23qczWdxS6w", - "give_asset": "PEPECASH", - "give_quantity": 400000000000, - "give_remaining": 0, - "get_asset": "NEEDPEPE", - "get_quantity": 1, - "get_remaining": 0, - "expiration": 5000, - "expire_index": 460461, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 40000, - "fee_provided_remaining": 40000, - "status": "filled" + "event": "CANCEL_BET", + "event_count": 101 }, { - "tx_index": 1946587, - "tx_hash": "b747f290cbbad6faa1c1c05d5c6d001b5a3ef487027bb0d4eefcdc9f6e865c39", - "block_index": 727444, - "source": "1AtcSh7uxenQ6AR5xqr6agAegWRUF5N4uh", - "give_asset": "XCP", - "give_quantity": 70000000000, - "give_remaining": 0, - "get_asset": "NEEDPEPE", - "get_quantity": 1, - "get_remaining": 0, - "expiration": 5000, - "expire_index": 732444, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 792, - "fee_provided_remaining": 792, - "status": "filled" + "event": "CANCEL_ORDER", + "event_count": 80168 }, { - "tx_index": 825371, - "tx_hash": "b83c96217214decb6316c3619bc88a3471d17e46eb3708406c8f878dedd61610", - "block_index": 455460, - "source": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", - "give_asset": "NEEDPEPE", - "give_quantity": 1, - "give_remaining": 0, - "get_asset": "PEPECASH", - "get_quantity": 200000000000, - "get_remaining": 0, - "expiration": 1000, - "expire_index": 456457, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 46098, - "fee_provided_remaining": 46098, - "status": "filled" + "event": "CREDIT", + "event_count": 3659293 }, { - "tx_index": 825372, - "tx_hash": "e32154f8ade796df0b121604de140703d062d22d1e82e77e629e6096668c812f", - "block_index": 455461, - "source": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", - "give_asset": "NEEDPEPE", - "give_quantity": 1, - "give_remaining": 0, - "get_asset": "PEPECASH", - "get_quantity": 300000000000, - "get_remaining": 0, - "expiration": 1000, - "expire_index": 456457, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 46098, - "fee_provided_remaining": 46098, - "status": "filled" - } - ] - }, - "/assets//credits": { - "result": [ - { - "block_index": 840464, - "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "asset": "UNNEGOTIABLE", - "quantity": 1, - "calling_function": "issuance", - "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "tx_index": 2726605 - } - ] - }, - "/assets//debits": { - "result": [ - { - "block_index": 280091, - "address": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", - "asset": "XCP", - "quantity": 1000000000, - "action": "send", - "event": "1c20d6596f6be031c94def5ad93a52217d76371885adcc53c91c3b1eaf76ccce", - "tx_index": 729 + "event": "DEBIT", + "event_count": 2617404 }, { - "block_index": 280112, - "address": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", - "asset": "XCP", - "quantity": 1100000000, - "action": "send", - "event": "4dacd03d73cb497229dbfe2e7209adc4221540efe0e4c57f408b09b2fd36ece6", - "tx_index": 749 + "event": "DISPENSE", + "event_count": 190873 }, { - "block_index": 280112, - "address": "1PMacKVWDszkBRbb2iWWvX63BwhKUTsSBd", - "asset": "XCP", - "quantity": 100000000, - "action": "send", - "event": "057d10cc33455f4f7af44d2f030b3866e3a16416ecf984e304c76abe98393c1d", - "tx_index": 752 + "event": "DISPENSER_UPDATE", + "event_count": 228954 }, { - "block_index": 280114, - "address": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", - "asset": "XCP", - "quantity": 1100000000, - "action": "send", - "event": "3ac6ea5b329832e2dc31ead6c5277beccb7d95f0d9f20f256f97067223c81e00", - "tx_index": 755 + "event": "ENHANCED_SEND", + "event_count": 538426 }, { - "block_index": 280156, - "address": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", - "asset": "XCP", - "quantity": 1100000000, - "action": "send", - "event": "66fc1409ac6646bd8c267de89c57d2204e31bb6dfce9ee2a3ab18416fadf9e9c", - "tx_index": 766 - } - ] - }, - "/assets//dividends": { - "result": [ + "event": "MPMA_SEND", + "event_count": 279142 + }, { - "tx_index": 1914456, - "tx_hash": "30760e413947ebdc80ed7a5ada1bd4466800b87e9976bbe811ad4e2b46546359", - "block_index": 724381, - "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", - "asset": "GMONEYPEPE", - "dividend_asset": "ENDTHEFED", - "quantity_per_unit": 1, - "fee_paid": 2520000, - "status": "valid" + "event": "NEW_BLOCK", + "event_count": 1992 }, { - "tx_index": 1915246, - "tx_hash": "827794cbab3299f80a5b8b8cb8ec29ec3aee1373f7da2c05a156bed902bf4684", - "block_index": 724479, - "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", - "asset": "GMONEYPEPE", - "dividend_asset": "TRUMPDANCING", - "quantity_per_unit": 100, - "fee_paid": 2520000, - "status": "valid" + "event": "NEW_TRANSACTION", + "event_count": 4498 }, { - "tx_index": 1920208, - "tx_hash": "7014f1e259531ba9632ca5000c35df5bd47f237318e48955900453ce9c07e917", - "block_index": 724931, - "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", - "asset": "GMONEYPEPE", - "dividend_asset": "CTRWOJACK", - "quantity_per_unit": 1111, - "fee_paid": 2700000, - "status": "valid" + "event": "NEW_TRANSACTION_OUTPUT", + "event_count": 596 }, { - "tx_index": 1927909, - "tx_hash": "5556fd2b0802cf3bc0abd5001ecbac3adbc5b7c5c46a145a78daeef358c308de", - "block_index": 725654, - "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", - "asset": "GMONEYPEPE", - "dividend_asset": "WHITERUSSIAN", - "quantity_per_unit": 1, - "fee_paid": 3220000, - "status": "valid" + "event": "OPEN_BET", + "event_count": 1149 }, { - "tx_index": 1983693, - "tx_hash": "cda646285cc63f758d19b5403070f23e2a6e4b34eb3b86b63a0f56f971345657", - "block_index": 730568, - "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", - "asset": "GMONEYPEPE", - "dividend_asset": "A4520591452211866149", - "quantity_per_unit": 1, - "fee_paid": 4040000, - "status": "valid" + "event": "OPEN_DISPENSER", + "event_count": 88229 }, { - "tx_index": 1983842, - "tx_hash": "e4b73dc974cc279b873b78e5dc4a347c08788b02143ae27aa0582f900289be10", - "block_index": 730588, - "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", - "asset": "GMONEYPEPE", - "dividend_asset": "NCSWIC", - "quantity_per_unit": 1, - "fee_paid": 4040000, - "status": "valid" + "event": "OPEN_ORDER", + "event_count": 530117 }, { - "tx_index": 1996395, - "tx_hash": "b342feb1421df107010ad3c8ee2043ded802bdf6cd619862459da3d0f87d6a99", - "block_index": 731994, - "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", - "asset": "GMONEYPEPE", - "dividend_asset": "FUCKTHEFED", - "quantity_per_unit": 1, - "fee_paid": 4380000, - "status": "valid" + "event": "OPEN_RPS", + "event_count": 266 }, { - "tx_index": 2035947, - "tx_hash": "02d715fd9e8b7bbc782b1b2d92a1b9ffae9326bfc88ba76c453c515ad7c8c2bc", - "block_index": 738763, - "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", - "asset": "GMONEYPEPE", - "dividend_asset": "HOLDTHELINE", - "quantity_per_unit": 1, - "fee_paid": 4940000, - "status": "valid" + "event": "ORDER_EXPIRATION", + "event_count": 195968 }, { - "tx_index": 2174481, - "tx_hash": "b935a06fc34d8fa4f0c526984085b1b12c78e899415e595b625f1bee84ce3709", - "block_index": 762733, - "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", - "asset": "GMONEYPEPE", - "dividend_asset": "EOXIXIZERO", - "quantity_per_unit": 1, - "fee_paid": 6500000, - "status": "valid" + "event": "ORDER_FILLED", + "event_count": 805 }, { - "tx_index": 2198534, - "tx_hash": "a063e9a745b9f6bc3201f72abff196de20ec106bcc71d820673d516ddbb3aa90", - "block_index": 767569, - "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", - "asset": "GMONEYPEPE", - "dividend_asset": "TRUMPCARDS", - "quantity_per_unit": 1, - "fee_paid": 6660000, - "status": "valid" + "event": "ORDER_MATCH", + "event_count": 209415 }, { - "tx_index": 2704948, - "tx_hash": "437102ca4698f63a12e369f6168e3c7f5f8eef3e225395d515775673e33d39c1", - "block_index": 832745, - "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", - "asset": "GMONEYPEPE", - "dividend_asset": "FUCKYOUWAR", - "quantity_per_unit": 1, - "fee_paid": 6840000, - "status": "valid" + "event": "ORDER_MATCH_EXPIRATION", + "event_count": 20860 }, { - "tx_index": 2704949, - "tx_hash": "7d3807cc58fa2d9751b2b0089bfa8fa86ef795821be6d8e9418ab3a819eba299", - "block_index": 832745, - "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", - "asset": "GMONEYPEPE", - "dividend_asset": "MEDICINEPEPE", - "quantity_per_unit": 1, - "fee_paid": 6840000, - "status": "valid" - } - ] - }, - "/assets//issuances": { - "result": [ + "event": "ORDER_MATCH_UPDATE", + "event_count": 23689 + }, { - "tx_index": 2726605, - "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "msg_index": 0, - "block_index": 840464, - "asset": "UNNEGOTIABLE", - "quantity": 1, - "divisible": 0, - "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "transfer": 0, - "callable": 0, - "call_date": 0, - "call_price": 0.0, - "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", - "fee_paid": 50000000, - "locked": 0, - "status": "valid", - "asset_longname": null, - "reset": 0 - } - ] - }, - "/assets//sends": { - "result": [ + "event": "ORDER_UPDATE", + "event_count": 732646 + }, { - "tx_index": 729, - "tx_hash": "1c20d6596f6be031c94def5ad93a52217d76371885adcc53c91c3b1eaf76ccce", - "block_index": 280091, - "source": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", - "destination": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", - "asset": "XCP", - "quantity": 1000000000, - "status": "valid", - "msg_index": 0, - "memo": null + "event": "REFILL_DISPENSER", + "event_count": 187 }, { - "tx_index": 749, - "tx_hash": "4dacd03d73cb497229dbfe2e7209adc4221540efe0e4c57f408b09b2fd36ece6", - "block_index": 280112, - "source": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", - "destination": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", - "asset": "XCP", - "quantity": 1100000000, - "status": "valid", - "msg_index": 0, - "memo": null + "event": "RESET_ISSUANCE", + "event_count": 454 }, { - "tx_index": 752, - "tx_hash": "057d10cc33455f4f7af44d2f030b3866e3a16416ecf984e304c76abe98393c1d", - "block_index": 280112, - "source": "1PMacKVWDszkBRbb2iWWvX63BwhKUTsSBd", - "destination": "1PMacKVWDszkBRbb2iWWvX63BwhKUTsSBd", - "asset": "XCP", - "quantity": 100000000, - "status": "valid", - "msg_index": 0, - "memo": null + "event": "RPS_EXPIRATION", + "event_count": 59 }, { - "tx_index": 755, - "tx_hash": "3ac6ea5b329832e2dc31ead6c5277beccb7d95f0d9f20f256f97067223c81e00", - "block_index": 280114, - "source": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", - "destination": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", - "asset": "XCP", - "quantity": 1100000000, - "status": "valid", - "msg_index": 0, - "memo": null + "event": "RPS_MATCH", + "event_count": 171 }, { - "tx_index": 766, - "tx_hash": "66fc1409ac6646bd8c267de89c57d2204e31bb6dfce9ee2a3ab18416fadf9e9c", - "block_index": 280156, - "source": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", - "destination": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", - "asset": "XCP", - "quantity": 1100000000, - "status": "valid", - "msg_index": 0, - "memo": null - } - ] - }, - "/assets//dispensers": { - "result": [ + "event": "RPS_MATCH_EXPIRATION", + "event_count": 145 + }, { - "tx_index": 2726460, - "tx_hash": "b592d8ca4994d182e4ec63e1659dc4282b1a84466b7d71ed68c281ce63ed4897", - "block_index": 839964, - "source": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", - "asset": "ERYKAHPEPU", - "give_quantity": 1, - "escrow_quantity": 25, - "satoshirate": 50000, - "status": 0, - "give_remaining": 25, - "oracle_address": null, - "last_status_tx_hash": null, - "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", - "dispense_count": 0 - } - ] - }, - "/assets//dispensers/
": { - "result": [ + "event": "RPS_MATCH_UPDATE", + "event_count": 271 + }, { - "tx_index": 2726460, - "tx_hash": "b592d8ca4994d182e4ec63e1659dc4282b1a84466b7d71ed68c281ce63ed4897", - "block_index": 839964, - "source": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", - "asset": "ERYKAHPEPU", - "give_quantity": 1, - "escrow_quantity": 25, - "satoshirate": 50000, - "status": 0, - "give_remaining": 25, - "oracle_address": null, - "last_status_tx_hash": null, - "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", - "dispense_count": 0 + "event": "RPS_RESOLVE", + "event_count": 129 + }, + { + "event": "RPS_UPDATE", + "event_count": 540 + }, + { + "event": "SEND", + "event_count": 805983 + }, + { + "event": "SWEEP", + "event_count": 1020 + }, + { + "event": "TRANSACTION_PARSED", + "event_count": 2723802 } ] }, - "/assets//holders": { + "/addresses/
/compose/broadcast": { + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0200000000000000002b6a290d1e454cefefcbe17b1100cb21d3398ec45d2594e5d1d822df41d03a332741261ce2f9aee7827cd91c340c0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "timestamp": 4003903983, + "value": 100.0, + "fee_fraction": 0.05, + "text": "\"Hello, world!\"" + }, + "name": "broadcast" + } + }, + "/addresses/
/compose/bet": { + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0322020000000000001976a914bce6191bf2fd5981313cae869e9fafe164f7dbaf88ac0000000000000000316a2f0d1e454cefefcbe14dffa4c01ecd608ec45d2594e5d27c699f4ef2725648c509bf828ec195ee18f83e052061236deff2db0306000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "feed_address": "1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev", + "bet_type": 2, + "deadline": 3000000000, + "wager_quantity": 1000, + "counterwager_quantity": 1000, + "target_value": 1000, + "leverage": 5040, + "expiration": 100 + }, + "name": "bet" + } + }, + "/addresses/
/compose/burn": { + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff02e8030000000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ace61b0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "quantity": 1000, + "overburn": false + }, + "name": "burn" + } + }, + "/addresses/
/compose/cancel": { + "result": { + "rawtransaction": "01000000014709bd6af5d4d7f518f80539d4fe9acd5220a520a7b4287416a7379af9e66154020000001976a91432dff6deb7ca3bbc14f7037fa6ef8a8cf8e39fb988acffffffff0200000000000000002b6a292f3720d2b8ae7343c6d0456802c531e1216f466ceb12b96c6fbe417a97291a0660e51fc47fcc1ee1a878667900000000001976a91432dff6deb7ca3bbc14f7037fa6ef8a8cf8e39fb988ac00000000", + "params": { + "source": "15e15ua6A3FJqjMevtrWcFSzKn9k6bMQeA", + "offer_hash": "8ce3335391bf71f8f12c0573b4f85b9adc4882a9955d9f8e5ababfdd0060279a" + }, + "name": "cancel" + } + }, + "/addresses/
/compose/destroy": { + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000226a200d1e454cefefcbe10bffa672ce93608ec55d2594e5d1946a776c900731380c6b94160406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "asset": "XCP", + "quantity": 1000, + "tag": "\"bugs!\"" + }, + "name": "destroy" + } + }, + "/addresses/
/compose/dispenser": { + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0200000000000000002c6a2a0d1e454cefefcbe169ffa672ce93608ec55d2594e5d1946a774ef272564b2d4ad8c28ec195ee18f85a160c0b0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "asset": "XCP", + "give_quantity": 1000, + "escrow_quantity": 1000, + "mainchainrate": 100, + "status": 0, + "open_address": null, + "oracle_address": null + }, + "name": "dispenser" + } + }, + "/addresses/
/compose/dividend": { + "result": { + "rawtransaction": "01000000010af94458ae5aa794c49cd27f7b800a7c68c8dd4f59ff66c99db4e9e353c06d93010000001976a914a9055398b92818794b38b15794096f752167e25f88acffffffff020000000000000000236a21068a00268d252c3a8ed0bddb5ef79f823894aa7de1e196c005510f4d787c936a979b230000000000001976a914a9055398b92818794b38b15794096f752167e25f88ac00000000", + "params": { + "source": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", + "quantity_per_unit": 1, + "asset": "PEPECASH", + "dividend_asset": "XCP" + }, + "name": "dividend" + } + }, + "/addresses/
/compose/issuance": { + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0322020000000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac0000000000000000236a210d1e454cefefcbe173ffa672cf3a36751b5d2594e5d1946a774ff272960578057c17ec0306000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "asset": "XCPTEST", + "quantity": 1000, + "transfer_destination": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "divisible": true, + "lock": false, + "reset": false, + "description": null + }, + "name": "issuance" + } + }, + "/addresses/
/compose/mpma": { + "result": { + "rawtransaction": "0100000001fc9b7b3a0552bdfc3c62096e9d7669fb72d5482c7b4f9618138fdffdc831d60b000000001976a914a39dbfab6f1da182af53a4d14799ee545a6176be88acffffffff04e80300000000000069512103ce014780415d0eafbdadfacfa0cf2604a005a87157042f277627c952eedcbb1f2103abf2b72459ee70e6240a7b2ade1a6fa41c7f38cc1db5e63c6f92c01b859017ee2102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53aee80300000000000069512102ce014780415d0eafbd2fcbf00e308d420b59df89ebba83369fea96a9a06fcf562102373ec5e1389ccadf0a972ec451f8aea015104ded7a57b936d374d0ecfe8067412102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53aee80300000000000069512103d0014780415d0eafbd76dacca0b613dda4b8f37e3015031f11220ac5cf43ef4e21034051b78cdcbde85f0c120261e6ab383015104ded7a57b93cd374d900776d4e132102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53ae22fd0200000000001976a914a39dbfab6f1da182af53a4d14799ee545a6176be88ac00000000", + "params": { + "source": "1Fv87qmdtjQDP9d4p9E5ncBQvYB4a3Rhy6", + "asset_dest_quant_list": [ + [ + "BAABAABLKSHP", + "1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev", + 1 + ], + [ + "BADHAIRDAY", + "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", + 2 + ], + [ + "BADWOJAK", + "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + 3 + ] + ], + "memo": "\"Hello, world!\"", + "memo_is_hex": false + }, + "name": "mpma" + } + }, + "/addresses/
/compose/order": { + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000356a330d1e454cefefcbe16fffa672ce93608ec55d2594e5d1946a774ef2724a2a4f457bc28ec195ee18fbd616f461236d8be718616dac000406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "give_asset": "XCP", + "give_quantity": 1000, + "get_asset": "PEPECASH", + "get_quantity": 1000, + "expiration": 100, + "fee_required": 100 + }, + "name": "order" + } + }, + "/addresses/
/compose/send": { + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000306a2e0d1e454cefefcbe167ffa672ce93608ec55d2594e5d1946a774e4e944f50dfb46943bffd3b68866791f7f496f8c270060406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "destination": "1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev", + "asset": "XCP", + "quantity": 1000, + "memo": null, + "memo_is_hex": false, + "use_enhanced_send": true + }, + "name": "send" + } + }, + "/addresses/
/compose/sweep": { + "result": { + "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000236a210d1e454cefefcbe161ff1a94d78892739ddc14a84b570af630af96858de42ab6cf6e150406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", + "params": { + "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", + "destination": "1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev", + "flags": 7, + "memo": "FFFF" + }, + "name": "sweep" + } + }, + "/bitcoin/addresses/
/transactions": { "result": [ { - "address": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", - "address_quantity": 63, - "escrow": null + "tx_hash": "eae4f1dba4d75bda9dd0de12f69a980be267bbc16b7a280a2a4b40c4b3bbb70a" }, { - "address": "16yRstRXStVJJ1TN2S4DCWifyrCsetpma7", - "address_quantity": 1, - "escrow": null + "tx_hash": "7ec16c461e3ba2d3acae48fcc8f58c04fba9f307b00c391eab507337ddc0bf16" }, { - "address": "bc1qsvqsa9arwz30g2z0w09twzn8gz3380h36yxacs", - "address_quantity": 2, - "escrow": null + "tx_hash": "ad35f05767aadd39019122b4f4828ccb059b8121c07be6d36eb1e2ddbe9ac317" }, { - "address": "17PnWBjHkekZKQPVagmTR5HiD51pN8WHC8", - "address_quantity": 1, - "escrow": null + "tx_hash": "3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018" }, { - "address": "1FRxFpP9XoRsvZFVqGtt4fjjgKe1h5tbAh", - "address_quantity": 1, - "escrow": null + "tx_hash": "aba5810714aa6196fec5538a83bbc281077a84ef2cbce2045b4c9f3c4439f14f" }, { - "address": "1AdHg2q3M2rMFRgZyZ7RQyNHdwjSib7wSZ", - "address_quantity": 2, - "escrow": null + "tx_hash": "23758832e0fc92a7ea303623b8f743219cb8e637e7e7ac9fb6f90641efac9379" }, { - "address": "1CTnziWXidHzY3qT8gwLa1ZxZK37A7HreR", - "address_quantity": 1, - "escrow": null + "tx_hash": "98bef616ef265dd2f6004683e908d7df97e0c5f322cdf2fb2ebea9a9131cfa79" }, { - "address": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", - "address_quantity": 25, - "escrow": null - } - ] - }, - "/orders/": { - "result": [ + "tx_hash": "687b875d1dc472aa2fb994c5753c9b9b56e5c6fd1a6de18a92fcb3dc7ba8067e" + }, { - "tx_index": 2724132, - "tx_hash": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776", - "block_index": 840381, - "source": "15L7U55PAsHLEpQkZqz62e3eqWd9AHb2DH", - "give_asset": "PEPECASH", - "give_quantity": 6966600000000, - "give_remaining": 900000000000, - "get_asset": "XCP", - "get_quantity": 11076894000, - "get_remaining": 1431000000, - "expiration": 5000, - "expire_index": 843055, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 4488, - "fee_provided_remaining": 4488, - "status": "open" - } - ] - }, - "/orders//matches": { - "result": [ - { - "id": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776_5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947", - "tx0_index": 2724132, - "tx0_hash": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776", - "tx0_address": "15L7U55PAsHLEpQkZqz62e3eqWd9AHb2DH", - "tx1_index": 2726591, - "tx1_hash": "5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947", - "tx1_address": "15e15ua6A3FJqjMevtrWcFSzKn9k6bMQeA", - "forward_asset": "PEPECASH", - "forward_quantity": 6066600000000, - "backward_asset": "XCP", - "backward_quantity": 9645894000, - "tx0_block_index": 838055, - "tx1_block_index": 840381, - "block_index": 840381, - "tx0_expiration": 5000, - "tx1_expiration": 8064, - "match_expire_index": 840401, - "fee_paid": 0, - "status": "completed" - } - ] - }, - "/orders//btcpays": { - "result": [ - { - "tx_index": 2719343, - "tx_hash": "6cfa7f31b43a46e5ad74a9db810bd6cac56235a8ebc73ec63d01b38ea7ea2414", - "block_index": 836188, - "source": "1NfJnJdAdmm2rJCFW54NsAKqqTTMexCNJ3", - "destination": "1BepkwAhEmEuEGF349XjmEUrRvoy9a7Biv", - "btc_amount": 4500000, - "order_match_id": "0a1387df82a8a7e9cec01c52c8fee01f6995c4e39dc5804e1d2bf40d9368f5c5_299b5b648f54eacb839f3487232d49aea373cdd681b706d4cc0b5e0b03688db4", - "status": "valid" - } - ] - }, - "/bets/": { - "result": [ - { - "tx_index": 15106, - "tx_hash": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed", - "block_index": 304063, - "source": "18ZNyaAcH4HugeofwbrpLoUNiayxJRH65c", - "feed_address": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", - "bet_type": 3, - "deadline": 1401828300, - "wager_quantity": 50000000, - "wager_remaining": 0, - "counterwager_quantity": 50000000, - "counterwager_remaining": 0, - "target_value": 1.0, - "leverage": 5040, - "expiration": 11, - "expire_index": 304073, - "fee_fraction_int": 1000000, - "status": "filled" - } - ] - }, - "/bets//matches": { - "result": [ - { - "id": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed_cb5f888c299a50967d523513daed71636d927e6ef3dbda85feb11ff112ae4330", - "tx0_index": 15106, - "tx0_hash": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed", - "tx0_address": "18ZNyaAcH4HugeofwbrpLoUNiayxJRH65c", - "tx1_index": 15108, - "tx1_hash": "cb5f888c299a50967d523513daed71636d927e6ef3dbda85feb11ff112ae4330", - "tx1_address": "1PTqJmRCMGs4qBEh2APAFSrBv95Uf1hfiD", - "tx0_bet_type": 3, - "tx1_bet_type": 2, - "feed_address": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", - "initial_value": -1, - "deadline": 1401828300, - "target_value": 1.0, - "leverage": 5040, - "forward_quantity": 50000000, - "backward_quantity": 50000000, - "tx0_block_index": 304062, - "tx1_block_index": 304063, - "block_index": 306379, - "tx0_expiration": 11, - "tx1_expiration": 1459, - "match_expire_index": 304073, - "fee_fraction_int": 1000000, - "status": "expired" - } - ] - }, - "/bets//resolutions": { - "result": [ - { - "bet_match_id": "36bbbb7dbd85054dac140a8ad8204eda2ee859545528bd2a9da69ad77c277ace_d70ee4e44f02fe6258ee0c267f33f304a0fc61d4ce424852f58c28967dc1924f", - "bet_match_type_id": 5, - "block_index": 401128, - "winner": "Equal", - "settled": null, - "bull_credit": null, - "bear_credit": null, - "escrow_less_fee": 2000000, - "fee": 0 - } - ] - }, - "/burns": { - "result": [ - { - "tx_index": 10, - "tx_hash": "41bbe1ec81da008a0e92758efb6084af3a6b6acf483983456ec797ee59c0e0f1", - "block_index": 278511, - "source": "12crRpZpn93PKTQ4WYxHMw4xi6ckh1CFR3", - "burned": 99900000, - "earned": 148024554545, - "status": "valid" - }, - { - "tx_index": 11, - "tx_hash": "c403a92281b568c7d428d942354d026594dc54ae35c21f53ecf5c918208c45de", - "block_index": 278511, - "source": "13UXh9dBEhA48gJiegJNodqe91PK88f4pW", - "burned": 99900000, - "earned": 148024554545, - "status": "valid" + "tx_hash": "ec97c11ff5cb318505ebe20d7aa3c033816824a79f9a49821ffb584ed7d6c78f" }, { - "tx_index": 12, - "tx_hash": "749ba1c2bd314f7b98e9cfb44575495b4ad2cf624901c65488fbc4f57a3dc0ac", - "block_index": 278511, - "source": "19Ht3rkW7JB9VuC7rsZEGZju96ujzchaZZ", - "burned": 99900000, - "earned": 148024554545, - "status": "valid" + "tx_hash": "c732f0906eeada2113524c6652c17b2784780110bffd4333eb8f719ac0eff3be" }, { - "tx_index": 13, - "tx_hash": "da330160b71138f9bda5e126df0d5d6248c0879d88e16255c74135274d8ebd27", - "block_index": 278511, - "source": "16Fu8Edsvxqixg6VnaHKPWE2TEsqQMwXfV", - "burned": 99900000, - "earned": 148024554545, - "status": "valid" + "tx_hash": "2c8bc3eede9ec60d26c6fd7f44829adc64da593552044a28c673022220f560c3" }, { - "tx_index": 14, - "tx_hash": "66994176733650e77ae0cf34349f63e6538649f40f86d2719013d915bbb7701e", - "block_index": 278517, - "source": "14FFaRsfzYQxhZQv1YsMn65MvMLfJShgM8", - "burned": 99900000, - "earned": 147970063636, - "status": "valid" + "tx_hash": "a209e345549cffef6e2190b53ac0222afc965fd618843df5ccbd645a6a7999ee" } ] }, - "/dispensers/": { - "result": [ - { - "tx_index": 2536311, - "tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a", - "block_index": 840322, - "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", - "asset": "FLOCK", - "give_quantity": 10000000000, - "escrow_quantity": 250000000000, - "satoshirate": 330000, - "status": 0, - "give_remaining": 140000000000, - "oracle_address": null, - "last_status_tx_hash": null, - "origin": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", - "dispense_count": 2, - "asset_longname": null - } - ] + "/bitcoin/addresses/
/transactions/oldest": { + "result": { + "block_index": 833187, + "tx_hash": "2c8bc3eede9ec60d26c6fd7f44829adc64da593552044a28c673022220f560c3" + } }, - "/dispensers//dispenses": { + "/bitcoin/addresses/
/utxos": { "result": [ { - "tx_index": 2610745, - "dispense_index": 0, - "tx_hash": "8c95cc6afc8fd466c784fd1c02749c585988999bbc66251b944c443dc31af757", - "block_index": 821450, - "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", - "destination": "1FKYM1CP9RfttJhNG8HTNQdE2uV3YvwbRB", - "asset": "FLOCK", - "dispense_quantity": 20000000000, - "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a" + "vout": 6, + "height": 833559, + "value": 34611, + "confirmations": 7083, + "amount": 0.00034611, + "txid": "98bef616ef265dd2f6004683e908d7df97e0c5f322cdf2fb2ebea9a9131cfa79" }, { - "tx_index": 2726580, - "dispense_index": 0, - "tx_hash": "e7f0f2c9bef7a492b714a5952ec61b283be344419c5bc33f405f9af41ebfa48b", - "block_index": 840322, - "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", - "destination": "bc1qzcdkhnexpjc8wvkyrpyrsn0f5xzcpu877mjmgj", - "asset": "FLOCK", - "dispense_quantity": 90000000000, - "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a" - } - ] - }, - "/events/counts": { - "result": [ - { - "event": "ASSET_CREATION", - "event_count": 235860 + "vout": 0, + "height": 833187, + "value": 619481, + "confirmations": 7455, + "amount": 0.00619481, + "txid": "2c8bc3eede9ec60d26c6fd7f44829adc64da593552044a28c673022220f560c3" }, { - "event": "ASSET_DESTRUCTION", - "event_count": 11141 + "vout": 0, + "height": 837379, + "value": 992721, + "confirmations": 3263, + "amount": 0.00992721, + "txid": "ad35f05767aadd39019122b4f4828ccb059b8121c07be6d36eb1e2ddbe9ac317" }, { - "event": "ASSET_DIVIDEND", - "event_count": 4092 + "vout": 0, + "height": 840640, + "value": 838185, + "confirmations": 2, + "amount": 0.00838185, + "txid": "3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018" }, { - "event": "ASSET_ISSUANCE", - "event_count": 322678 + "vout": 0, + "height": 839421, + "value": 336973, + "confirmations": 1221, + "amount": 0.00336973, + "txid": "c732f0906eeada2113524c6652c17b2784780110bffd4333eb8f719ac0eff3be" }, { - "event": "ASSET_TRANSFER", - "event_count": 10639 + "vout": 0, + "height": 839462, + "value": 78615, + "confirmations": 1180, + "amount": 0.00078615, + "txid": "eae4f1dba4d75bda9dd0de12f69a980be267bbc16b7a280a2a4b40c4b3bbb70a" }, { - "event": "BET_EXPIRATION", - "event_count": 588 - }, - { - "event": "BET_MATCH", - "event_count": 397 + "vout": 0, + "height": 838442, + "value": 557283, + "confirmations": 2200, + "amount": 0.00557283, + "txid": "aba5810714aa6196fec5538a83bbc281077a84ef2cbce2045b4c9f3c4439f14f" }, { - "event": "BET_MATCH_EXPIRATION", - "event_count": 9 + "vout": 0, + "height": 838608, + "value": 77148, + "confirmations": 2034, + "amount": 0.00077148, + "txid": "ec97c11ff5cb318505ebe20d7aa3c033816824a79f9a49821ffb584ed7d6c78f" }, { - "event": "BET_MATCH_RESOLUTON", - "event_count": 387 + "vout": 0, + "height": 837402, + "value": 70501, + "confirmations": 3240, + "amount": 0.00070501, + "txid": "687b875d1dc472aa2fb994c5753c9b9b56e5c6fd1a6de18a92fcb3dc7ba8067e" }, { - "event": "BET_MATCH_UPDATE", - "event_count": 397 - }, + "vout": 0, + "height": 839021, + "value": 12354, + "confirmations": 1621, + "amount": 0.00012354, + "txid": "23758832e0fc92a7ea303623b8f743219cb8e637e7e7ac9fb6f90641efac9379" + } + ] + }, + "/bitcoin/addresses/
/pubkey": { + "result": "0388ef0905568d425f1ffd4031d93dda4ef0e220c9b5fc4a6cbaf11544c4a5ca49" + }, + "/bitcoin/transactions/": { + "result": { + "txid": "3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018", + "hash": "417c24d7a5539bc5b8496e26528382ac297a85a1c6b891b220f72712405ec300", + "version": 2, + "size": 195, + "vsize": 113, + "weight": 450, + "locktime": 0, + "vin": [ + { + "txid": "fc940430637d22a3d276bde8f7eb489760265cab642d8392f6017d73df94cd7a", + "vout": 2, + "scriptSig": { + "asm": "", + "hex": "" + }, + "txinwitness": [ + "3045022100e4a30e5c0e0f7a28dfcec566cda00d0775a4207744ed6f223a4234cbed87a8ac02205b2403279ba7d8235ea1e8b6497465b97b46f3b3066a58c326822a9b1c25b4a501", + "020e66cffeb4657b40a89063340cf7066030af3c6ce55744ed3570a7aecaa6b0da" + ], + "sequence": 4294967295 + } + ], + "vout": [ + { + "value": 0.00838185, + "n": 0, + "scriptPubKey": { + "asm": "OP_DUP OP_HASH160 25f70b0f1512c1742d3301fe34370894c79127bb OP_EQUALVERIFY OP_CHECKSIG", + "desc": "addr(14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS)#68uhm9u9", + "hex": "76a91425f70b0f1512c1742d3301fe34370894c79127bb88ac", + "address": "14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS", + "type": "pubkeyhash" + } + } + ], + "hex": "020000000001017acd94df737d01f692832d64ab5c26609748ebf7e8bd76d2a3227d63300494fc0200000000ffffffff0129ca0c00000000001976a91425f70b0f1512c1742d3301fe34370894c79127bb88ac02483045022100e4a30e5c0e0f7a28dfcec566cda00d0775a4207744ed6f223a4234cbed87a8ac02205b2403279ba7d8235ea1e8b6497465b97b46f3b3066a58c326822a9b1c25b4a50121020e66cffeb4657b40a89063340cf7066030af3c6ce55744ed3570a7aecaa6b0da00000000", + "blockhash": "000000000000000000020f596ed481076b7754143284b47fc8d32642202e5f76", + "confirmations": 2, + "time": 1713951767, + "blocktime": 1713951767 + } + }, + "/healthz": { + "result": { + "status": "Healthy" + } + }, + "/bitcoin/estimatesmartfee": { + "result": 295443 + }, + "/mempool/events": { + "result": [] + }, + "/mempool/events/": { + "result": [] + }, + "/blocks": { + "result": [ { - "event": "BET_UPDATE", - "event_count": 1474 + "block_index": 840000, + "block_hash": "0000000000000000000320283a032748cef8227873ff4872689bf23f1cda83a5", + "block_time": 1713571767, + "previous_block_hash": "0000000000000000000172014ba58d66455762add0512355ad651207918494ab", + "difficulty": 86388558925171.02, + "ledger_hash": "b91dd54cfbd3aff07b358a038bf6174ddc06f36bd00cdccf048e8281bcd56224", + "txlist_hash": "b641c3e190b9941fcd5c84a7c07e66c03559ef26dcea892e2db1cf1d8392a4f2", + "messages_hash": "5c5de34009839ee66ebc3097ecd28bd5deee9553966b3ee39e8a08e123ac9adc" }, { - "event": "BLOCK_PARSED", - "event_count": 562364 - }, + "block_index": 839999, + "block_hash": "0000000000000000000172014ba58d66455762add0512355ad651207918494ab", + "block_time": 1713571533, + "previous_block_hash": "00000000000000000001dcce6ce7c8a45872cafd1fb04732b447a14a91832591", + "difficulty": 86388558925171.02, + "ledger_hash": "e2b2e23c2ac1060dafe2395da01fe5907f323b5a644816f45f003411c612ac30", + "txlist_hash": "f33f800ef166e6ef5b3df15a0733f9fd3ebb0b799f39ef1951e6709118b7c0fd", + "messages_hash": "16b7d40543b7b80587f4d98c84fcdfdceb2d1c18abba82c7064c09c2795b7ab2" + } + ] + }, + "/blocks/": { + "result": { + "block_index": 840464, + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_time": 1713852783, + "previous_block_hash": "00000000000000000002db1e5aa19784eec3de949f98ec757e7a7f2fc392079d", + "difficulty": 86388558925171.02, + "ledger_hash": "b3f8cbb50b0705a5c4a8495f8b5128de13a32daebd8ac5e8316a010f0d203584", + "txlist_hash": "84bdc5b9073f775a2b65de7da2b10b89a2235f3501883b0a836e41e68cd00d46", + "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540" + } + }, + "/blocks//transactions": { + "result": [ { - "event": "BROADCAST", - "event_count": 106518 - }, + "tx_index": 2726605, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "block_index": 840464, + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_time": 1713852783, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "destination": "", + "btc_amount": 0, + "fee": 56565, + "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", + "supported": 1 + } + ] + }, + "/blocks//events": { + "result": [ { - "event": "BTC_PAY", - "event_count": 2921 + "event_index": 14194760, + "event": "BLOCK_PARSED", + "params": { + "block_index": 840464, + "ledger_hash": "b3f8cbb50b0705a5c4a8495f8b5128de13a32daebd8ac5e8316a010f0d203584", + "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540", + "txlist_hash": "84bdc5b9073f775a2b65de7da2b10b89a2235f3501883b0a836e41e68cd00d46" + } }, { - "event": "BURN", - "event_count": 2576 + "event_index": 14194759, + "event": "TRANSACTION_PARSED", + "params": { + "supported": true, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605 + } }, { - "event": "CANCEL_BET", - "event_count": 101 + "event_index": 14194758, + "event": "CREDIT", + "params": { + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "UNNEGOTIABLE", + "block_index": 840464, + "calling_function": "issuance", + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "quantity": 1, + "tx_index": 2726605, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" + } }, { - "event": "CANCEL_ORDER", - "event_count": 80168 + "event_index": 14194757, + "event": "ASSET_ISSUANCE", + "params": { + "asset": "UNNEGOTIABLE", + "asset_longname": null, + "block_index": 840464, + "call_date": 0, + "call_price": 0.0, + "callable": false, + "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "divisible": false, + "fee_paid": 50000000, + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "locked": false, + "quantity": 1, + "reset": false, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "status": "valid", + "transfer": false, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" + } }, { - "event": "CREDIT", - "event_count": 3659293 + "event_index": 14194756, + "event": "ASSET_CREATION", + "params": { + "asset_id": "75313533584419238", + "asset_longname": null, + "asset_name": "UNNEGOTIABLE", + "block_index": 840464 + } }, { + "event_index": 14194755, "event": "DEBIT", - "event_count": 2617404 + "params": { + "action": "issuance fee", + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "XCP", + "block_index": 840464, + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "quantity": 50000000, + "tx_index": 2726605, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "0.5" + } }, { - "event": "DISPENSE", - "event_count": 190873 + "event_index": 14194754, + "event": "NEW_TRANSACTION", + "params": { + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_index": 840464, + "block_time": 1713852783, + "btc_amount": 0, + "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", + "destination": "", + "fee": 56565, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605 + } }, { - "event": "DISPENSER_UPDATE", - "event_count": 228954 - }, + "event_index": 14194753, + "event": "NEW_BLOCK", + "params": { + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_index": 840464, + "block_time": 1713852783, + "difficulty": 86388558925171.02, + "previous_block_hash": "00000000000000000002db1e5aa19784eec3de949f98ec757e7a7f2fc392079d" + } + } + ] + }, + "/blocks//events/": { + "result": [ + { + "event_index": 14194758, + "event": "CREDIT", + "params": { + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "UNNEGOTIABLE", + "block_index": 840464, + "calling_function": "issuance", + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "quantity": 1, + "tx_index": 2726605, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" + } + } + ] + }, + "/blocks//credits": { + "result": [ + { + "block_index": 840464, + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "UNNEGOTIABLE", + "quantity": 1, + "calling_function": "issuance", + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" + } + ] + }, + "/blocks//debits": { + "result": [ + { + "block_index": 840464, + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "XCP", + "quantity": 50000000, + "action": "issuance fee", + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "0.5" + } + ] + }, + "/blocks//expirations": { + "result": [ + { + "type": "order", + "object_id": "533d5c0ecd8ca9c2946d3298cc5e570eee55b62b887dd85c95de6de4fdc7f441" + }, + { + "type": "order", + "object_id": "b048661afeee3f266792481168024abc0d7648fe0e019e4a1e0fd9867c2c0ffc" + } + ] + }, + "/blocks//cancels": { + "result": [ + { + "tx_index": 2725738, + "tx_hash": "793af9129c7368f974c3ea0c87ad38131f0d82d19fbaf1adf8aaf2e657ec42b8", + "block_index": 839746, + "source": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "offer_hash": "04b258ac37f73e3b9a8575110320d67c752e1baace0f516da75845f388911735", + "status": "valid" + }, + { + "tx_index": 2725739, + "tx_hash": "2071e8a6fbc0c443b152d513c754356f8f962db2fa694de8c6826b57413cc190", + "block_index": 839746, + "source": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "offer_hash": "b1622dbe4f0ce740cb6c18f6f136876bc4949c40a62bc8cceefa81fd6679a57f", + "status": "valid" + } + ] + }, + "/blocks//destructions": { + "result": [ + { + "tx_index": 2726496, + "tx_hash": "f5609facc8dac6cdf70b15c514ea15a9acc24a9bd86dcac2b845d5740fbcc50b", + "block_index": 839988, + "source": "1FpLAtreZjTVCMcj1pq1AHWuqcs3n7obMm", + "asset": "COBBEE", + "quantity": 50000, + "tag": "", + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "https://easyasset.art/j/m4dl0x/COBBE.json", + "issuer": "1P3KQWLsTPXVWimiF2Q6WSES5vbJE8be5i", + "divisible": 0, + "locked": 0 + }, + "quantity_normalized": "50000" + } + ] + }, + "/blocks//issuances": { + "result": [ + { + "tx_index": 2726605, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "msg_index": 0, + "block_index": 840464, + "asset": "UNNEGOTIABLE", + "quantity": 1, + "divisible": 0, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "transfer": 0, + "callable": 0, + "call_date": 0, + "call_price": 0.0, + "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "fee_paid": 50000000, + "locked": 0, + "status": "valid", + "asset_longname": null, + "reset": 0 + } + ] + }, + "/blocks//sends": { + "result": [ + { + "tx_index": 2726604, + "tx_hash": "b4bbb14c99dd260eb634243e5c595e1b7213459979857a32850de84989bb71ec", + "block_index": 840459, + "source": "13Hnmhs5gy2yXKVBx4wSM5HCBdKnaSBZJH", + "destination": "1LfT83WAxbN9qKhtrXxcQA6xgdhfZk21Hz", + "asset": "GAMESOFTRUMP", + "quantity": 1, + "status": "valid", + "msg_index": 0, + "memo": null, + "asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 0 + }, + "quantity_normalized": "1" + } + ] + }, + "/blocks//dispenses": { + "result": [ + { + "tx_index": 2726580, + "dispense_index": 0, + "tx_hash": "e7f0f2c9bef7a492b714a5952ec61b283be344419c5bc33f405f9af41ebfa48b", + "block_index": 840322, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "destination": "bc1qzcdkhnexpjc8wvkyrpyrsn0f5xzcpu877mjmgj", + "asset": "FLOCK", + "dispense_quantity": 90000000000, + "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a", + "dispenser": { + "tx_index": 2536311, + "block_index": 840322, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "give_quantity": 10000000000, + "escrow_quantity": 250000000000, + "satoshirate": 330000, + "status": 0, + "give_remaining": 140000000000, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "dispense_count": 2, + "give_quantity_normalized": "100", + "give_remaining_normalized": "1400", + "escrow_quantity_normalized": "2500" + }, + "asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "18VNeRv8vL528HF7ruKwxycrfNEeoqmHpa", + "divisible": 1, + "locked": 1 + } + } + ] + }, + "/transactions/": { + "result": { + "tx_index": 2726605, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "block_index": 840464, + "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", + "block_time": 1713852783, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "destination": "", + "btc_amount": 0, + "fee": 56565, + "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", + "supported": 1, + "unpacked_data": { + "message_type": "issuance", + "message_type_id": 22, + "message_data": { + "asset_id": 75313533584419238, + "asset": "UNNEGOTIABLE", + "subasset_longname": null, + "quantity": 1, + "divisible": false, + "lock": false, + "reset": false, + "callable": false, + "call_date": 0, + "call_price": 0.0, + "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "status": "valid" + } + } + } + }, + "/addresses/
/balances": { + "result": [ + { + "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + "asset": "XCP", + "quantity": 104200000000, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "1042" + } + ] + }, + "/addresses/
/balances/": { + "result": { + "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + "asset": "XCP", + "quantity": 104200000000, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "1042" + } + }, + "/addresses/
/credits": { + "result": [ + { + "block_index": 830981, + "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + "asset": "XCP", + "quantity": 104200000000, + "calling_function": "send", + "event": "7e4fbb0a1eeeee34bf499955f1027fb78c514d63a3c8ff2e28c6dad005e4d850", + "tx_index": 2677412, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "1042" + } + ] + }, + "/addresses/
/debits": { + "result": [ + { + "block_index": 836949, + "address": "bc1q7787j6msqczs58asdtetchl3zwe8ruj57p9r9y", + "asset": "XCP", + "quantity": 40000000000, + "action": "open dispenser", + "event": "53ed08176d3479f49986e9282293da85cebc03835b128d8e790ee587f9f1c750", + "tx_index": 2721524, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "400" + }, + { + "block_index": 840388, + "address": "bc1q7787j6msqczs58asdtetchl3zwe8ruj57p9r9y", + "asset": "XCP", + "quantity": 250000000000, + "action": "send", + "event": "bc54968ba7d0a59a47b276602e2dbdcf01b14009742e0d7b50272cbae529a9a4", + "tx_index": 2726594, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "2500" + } + ] + }, + "/addresses/
/bets": { + "result": [ + { + "tx_index": 15106, + "tx_hash": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed", + "block_index": 304063, + "source": "18ZNyaAcH4HugeofwbrpLoUNiayxJRH65c", + "feed_address": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "bet_type": 3, + "deadline": 1401828300, + "wager_quantity": 50000000, + "wager_remaining": 0, + "counterwager_quantity": 50000000, + "counterwager_remaining": 0, + "target_value": 1.0, + "leverage": 5040, + "expiration": 11, + "expire_index": 304073, + "fee_fraction_int": 1000000, + "status": "filled" + }, + { + "tx_index": 61338, + "tx_hash": "0fcc7f5190c028f6c5534554d10ec5b4a9246d63826421cd58be2d572d11f088", + "block_index": 320704, + "source": "1Ew38GxczvV1KxjzZsq9f8UuRzHkHQrL5C", + "feed_address": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "bet_type": 2, + "deadline": 1410728400, + "wager_quantity": 1000000, + "wager_remaining": 0, + "counterwager_quantity": 1999991, + "counterwager_remaining": 0, + "target_value": 1.0, + "leverage": 5040, + "expiration": 13, + "expire_index": 320715, + "fee_fraction_int": 1000000, + "status": "filled" + } + ] + }, + "/addresses/
/broadcasts": { + "result": [ + { + "tx_index": 15055, + "tx_hash": "774887e555a6ae5a8c058ebc0185058307977f01a2d4d326e71f37d6dd977154", + "block_index": 304048, + "source": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "timestamp": 1401815290, + "value": -1.0, + "fee_fraction_int": 1000000, + "text": "xbet.io/feed/1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "locked": 0, + "status": "valid" + }, + { + "tx_index": 61477, + "tx_hash": "5d49993bec727622c7b41c84e2b1e65c368f33390d633d217131ffcc5b592f0d", + "block_index": 320718, + "source": "1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "timestamp": 1410732503, + "value": 1.0, + "fee_fraction_int": 1000000, + "text": "xbet.io/feed/1QKEpuxEmdp428KEBSDZAKL46noSXWJBkk", + "locked": 0, + "status": "valid" + } + ] + }, + "/addresses/
/burns": { + "result": [ + { + "tx_index": 3070, + "tx_hash": "4560d0e3d04927108b615ab106040489aca9c4aceedcf69d2b71f63b3139c7ae", + "block_index": 283810, + "source": "1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W", + "burned": 10000000, + "earned": 10000000000, + "status": "valid" + } + ] + }, + "/addresses/
/sends": { + "result": [ { - "event": "ENHANCED_SEND", - "event_count": 538426 - }, + "tx_index": 163106, + "tx_hash": "1c447b41816f1cfbb83f125c8e05faeaae70dbf27255745ba7393f809bd388eb", + "block_index": 343049, + "source": "1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W", + "destination": "16cRBUNnTWiUh2sXWNn1P7KHyJUmyMkdfH", + "asset": "XCP", + "quantity": 10000000000, + "status": "valid", + "msg_index": 0, + "memo": null, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "100" + } + ] + }, + "/addresses/
/receives": { + "result": [ { - "event": "MPMA_SEND", - "event_count": 279142 - }, + "tx_index": 2677412, + "tx_hash": "7e4fbb0a1eeeee34bf499955f1027fb78c514d63a3c8ff2e28c6dad005e4d850", + "block_index": 830981, + "source": "bc1qqxr9grqw73dm95cen3g56mzswuj6eqjedu6csx", + "destination": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + "asset": "XCP", + "quantity": 104200000000, + "status": "valid", + "msg_index": 0, + "memo": null, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "1042" + } + ] + }, + "/addresses/
/sends/": { + "result": [ { - "event": "NEW_BLOCK", - "event_count": 1992 - }, + "tx_index": 163106, + "tx_hash": "1c447b41816f1cfbb83f125c8e05faeaae70dbf27255745ba7393f809bd388eb", + "block_index": 343049, + "source": "1HVgrYx3U258KwvBEvuG7R8ss1RN2Z9J1W", + "destination": "16cRBUNnTWiUh2sXWNn1P7KHyJUmyMkdfH", + "asset": "XCP", + "quantity": 10000000000, + "status": "valid", + "msg_index": 0, + "memo": null, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "100" + } + ] + }, + "/addresses/
/receives/": { + "result": [ { - "event": "NEW_TRANSACTION", - "event_count": 4498 - }, + "tx_index": 2677412, + "tx_hash": "7e4fbb0a1eeeee34bf499955f1027fb78c514d63a3c8ff2e28c6dad005e4d850", + "block_index": 830981, + "source": "bc1qqxr9grqw73dm95cen3g56mzswuj6eqjedu6csx", + "destination": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + "asset": "XCP", + "quantity": 104200000000, + "status": "valid", + "msg_index": 0, + "memo": null, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "1042" + } + ] + }, + "/addresses/
/dispensers": { + "result": [ { - "event": "NEW_TRANSACTION_OUTPUT", - "event_count": 596 - }, + "tx_index": 2726460, + "tx_hash": "b592d8ca4994d182e4ec63e1659dc4282b1a84466b7d71ed68c281ce63ed4897", + "block_index": 839964, + "source": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", + "asset": "ERYKAHPEPU", + "give_quantity": 1, + "escrow_quantity": 25, + "satoshirate": 50000, + "status": 0, + "give_remaining": 25, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "dispense_count": 0, + "asset_issuance": { + "asset_longname": null, + "description": "https://ipfs.io/ipfs/QmPzRXMYVTQ3zoYhaxW5ZRkt4o9vUnnzdBW4kV5CXUyjT4/ERYKAHPEPU.json", + "issuer": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "divisible": 0, + "locked": 1 + }, + "give_quantity_normalized": "1", + "give_remaining_normalized": "25", + "escrow_quantity_normalized": "25" + } + ] + }, + "/addresses/
/dispensers/": { + "result": [ { - "event": "OPEN_BET", - "event_count": 1149 - }, + "tx_index": 2726460, + "tx_hash": "b592d8ca4994d182e4ec63e1659dc4282b1a84466b7d71ed68c281ce63ed4897", + "block_index": 839964, + "source": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", + "asset": "ERYKAHPEPU", + "give_quantity": 1, + "escrow_quantity": 25, + "satoshirate": 50000, + "status": 0, + "give_remaining": 25, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "dispense_count": 0, + "asset_issuance": { + "asset_longname": null, + "description": "https://ipfs.io/ipfs/QmPzRXMYVTQ3zoYhaxW5ZRkt4o9vUnnzdBW4kV5CXUyjT4/ERYKAHPEPU.json", + "issuer": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "divisible": 0, + "locked": 1 + }, + "give_quantity_normalized": "1", + "give_remaining_normalized": "25", + "escrow_quantity_normalized": "25" + } + ] + }, + "/assets": { + "result": [ { - "event": "OPEN_DISPENSER", - "event_count": 88229 + "asset": "A100000000000000000", + "asset_longname": null }, { - "event": "OPEN_ORDER", - "event_count": 530117 + "asset": "A1000000000000000000", + "asset_longname": null }, { - "event": "OPEN_RPS", - "event_count": 266 + "asset": "A10000000000000000000", + "asset_longname": null }, { - "event": "ORDER_EXPIRATION", - "event_count": 195968 + "asset": "A10000000000000000001", + "asset_longname": null }, { - "event": "ORDER_FILLED", - "event_count": 805 + "asset": "A10000000000000000002", + "asset_longname": null + } + ] + }, + "/assets/": { + "result": { + "asset": "UNNEGOTIABLE", + "asset_longname": null, + "owner": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": false, + "locked": true, + "supply": 1776, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "holder_count": 6 + } + }, + "/assets//balances": { + "result": [ + { + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "UNNEGOTIABLE", + "quantity": 1700, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1700" }, { - "event": "ORDER_MATCH", - "event_count": 209415 + "address": "17LV3y5KhExPdVcqS81zXuVUfNV9pmaGA", + "asset": "UNNEGOTIABLE", + "quantity": 1, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" }, { - "event": "ORDER_MATCH_EXPIRATION", - "event_count": 20860 + "address": "1ADca8k8XRY278QfQ3f9ynWaNYFzUDhkrk", + "asset": "UNNEGOTIABLE", + "quantity": 2, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "2" }, { - "event": "ORDER_MATCH_UPDATE", - "event_count": 23689 + "address": "1FmEBHzkZGqQZ7kprf53xU8XijUiv2SDYW", + "asset": "UNNEGOTIABLE", + "quantity": 1, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" }, { - "event": "ORDER_UPDATE", - "event_count": 732646 + "address": "1kEXrh8MQqotJq2qgcVLeZqdmeuDG8HXX", + "asset": "UNNEGOTIABLE", + "quantity": 1, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" + } + ] + }, + "/assets//balances/
": { + "result": { + "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", + "asset": "XCP", + "quantity": 104200000000, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true }, + "quantity_normalized": "1042" + } + }, + "/assets//orders": { + "result": [ { - "event": "REFILL_DISPENSER", - "event_count": 187 + "tx_index": 825373, + "tx_hash": "0129611a0aece52adddf6d929e75c703baa9cdcb7e4ce887aa859f9640aa9640", + "block_index": 455461, + "source": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "PEPECASH", + "get_quantity": 400000000000, + "get_remaining": 0, + "expiration": 1000, + "expire_index": 456457, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 46098, + "fee_provided_remaining": 46098, + "status": "filled", + "give_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "get_asset_issuance": { + "asset_longname": null, + "description": "http://rarepepedirectory.com/json/pc.json", + "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", + "divisible": 1, + "locked": 1 + }, + "give_quantity_normalized": "1", + "get_quantity_normalized": "4000", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0" }, { - "event": "RESET_ISSUANCE", - "event_count": 454 + "tx_index": 2225134, + "tx_hash": "5b6e0c741d765ebd883dc16eecfb5c340c52865cabf297ca2c1432437c1348b7", + "block_index": 772817, + "source": "1FnM7akSCD8G3fRQHCUEXRCfL35gptsPZB", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "XCP", + "get_quantity": 80800000000, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 777817, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 5544, + "fee_provided_remaining": 5544, + "status": "filled", + "give_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "get_asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "give_quantity_normalized": "1", + "get_quantity_normalized": "808", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0" }, { - "event": "RPS_EXPIRATION", - "event_count": 59 + "tx_index": 1946026, + "tx_hash": "75dc6ee1f67317e674ef33b617d3a9839ee53bf4a2e8274c88d6202d4d89b59a", + "block_index": 727444, + "source": "1GotRejB6XsGgMsM79TvcypeanDJRJbMtg", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "XCP", + "get_quantity": 70000000000, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 732381, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 264, + "fee_provided_remaining": 264, + "status": "filled", + "give_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "get_asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "give_quantity_normalized": "1", + "get_quantity_normalized": "700", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0" }, { - "event": "RPS_MATCH", - "event_count": 171 + "tx_index": 2202451, + "tx_hash": "77f568fc6604dbe209d2ea1b0158d7de20723c0178107eb570f4f2a719b0d7c7", + "block_index": 772817, + "source": "184gKLQTtQU29LXbxbYJkUV4if9SmW6v2d", + "give_asset": "XCP", + "give_quantity": 80800000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 773300, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 264, + "fee_provided_remaining": 264, + "status": "filled", + "give_asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "get_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "give_quantity_normalized": "808", + "get_quantity_normalized": "1", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0" }, { - "event": "RPS_MATCH_EXPIRATION", - "event_count": 145 + "tx_index": 825411, + "tx_hash": "7b2369f40078f4d98a3d3a7733315a1c4efd7977c75f7066dd447d5c7eed7f20", + "block_index": 455461, + "source": "18cmgoX99Nrm411YKpmTQsp23qczWdxS6w", + "give_asset": "PEPECASH", + "give_quantity": 300000000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 460461, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 40000, + "fee_provided_remaining": 40000, + "status": "filled", + "give_asset_issuance": { + "asset_longname": null, + "description": "http://rarepepedirectory.com/json/pc.json", + "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", + "divisible": 1, + "locked": 1 + }, + "get_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "give_quantity_normalized": "3000", + "get_quantity_normalized": "1", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0" }, { - "event": "RPS_MATCH_UPDATE", - "event_count": 271 + "tx_index": 825403, + "tx_hash": "7e1abf6ad57eb61227015fc7a333da034b4dd2f1c4e23cf106864b60a20feef7", + "block_index": 455460, + "source": "18cmgoX99Nrm411YKpmTQsp23qczWdxS6w", + "give_asset": "PEPECASH", + "give_quantity": 200000000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 1000, + "expire_index": 456460, + "fee_required": 20000, + "fee_required_remaining": 20000, + "fee_provided": 50766, + "fee_provided_remaining": 50766, + "status": "filled", + "give_asset_issuance": { + "asset_longname": null, + "description": "http://rarepepedirectory.com/json/pc.json", + "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", + "divisible": 1, + "locked": 1 + }, + "get_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "give_quantity_normalized": "2000", + "get_quantity_normalized": "1", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0" }, { - "event": "RPS_RESOLVE", - "event_count": 129 + "tx_index": 825370, + "tx_hash": "8e4d324407b62de773af53f8f7a556882ac82a217c216491a28072f293918fe6", + "block_index": 455457, + "source": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "PEPECASH", + "get_quantity": 100000000000, + "get_remaining": -1100000000, + "expiration": 1000, + "expire_index": 456457, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 75791, + "fee_provided_remaining": 75791, + "status": "filled", + "give_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "get_asset_issuance": { + "asset_longname": null, + "description": "http://rarepepedirectory.com/json/pc.json", + "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", + "divisible": 1, + "locked": 1 + }, + "give_quantity_normalized": "1", + "get_quantity_normalized": "1000", + "get_remaining_normalized": "-11", + "give_remaining_normalized": "0" }, { - "event": "RPS_UPDATE", - "event_count": 540 + "tx_index": 825413, + "tx_hash": "927878fa98edb6d24310c45254c324f3d5a7f625e2a3a0e7fd1e749b49493750", + "block_index": 455461, + "source": "18cmgoX99Nrm411YKpmTQsp23qczWdxS6w", + "give_asset": "PEPECASH", + "give_quantity": 400000000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 460461, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 40000, + "fee_provided_remaining": 40000, + "status": "filled", + "give_asset_issuance": { + "asset_longname": null, + "description": "http://rarepepedirectory.com/json/pc.json", + "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", + "divisible": 1, + "locked": 1 + }, + "get_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "give_quantity_normalized": "4000", + "get_quantity_normalized": "1", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0" }, { - "event": "SEND", - "event_count": 805983 + "tx_index": 1946587, + "tx_hash": "b747f290cbbad6faa1c1c05d5c6d001b5a3ef487027bb0d4eefcdc9f6e865c39", + "block_index": 727444, + "source": "1AtcSh7uxenQ6AR5xqr6agAegWRUF5N4uh", + "give_asset": "XCP", + "give_quantity": 70000000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 732444, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 792, + "fee_provided_remaining": 792, + "status": "filled", + "give_asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "get_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "give_quantity_normalized": "700", + "get_quantity_normalized": "1", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0" }, { - "event": "SWEEP", - "event_count": 1020 + "tx_index": 825371, + "tx_hash": "b83c96217214decb6316c3619bc88a3471d17e46eb3708406c8f878dedd61610", + "block_index": 455460, + "source": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "PEPECASH", + "get_quantity": 200000000000, + "get_remaining": 0, + "expiration": 1000, + "expire_index": 456457, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 46098, + "fee_provided_remaining": 46098, + "status": "filled", + "give_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "get_asset_issuance": { + "asset_longname": null, + "description": "http://rarepepedirectory.com/json/pc.json", + "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", + "divisible": 1, + "locked": 1 + }, + "give_quantity_normalized": "1", + "get_quantity_normalized": "2000", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0" }, { - "event": "TRANSACTION_PARSED", - "event_count": 2723802 + "tx_index": 825372, + "tx_hash": "e32154f8ade796df0b121604de140703d062d22d1e82e77e629e6096668c812f", + "block_index": 455461, + "source": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "PEPECASH", + "get_quantity": 300000000000, + "get_remaining": 0, + "expiration": 1000, + "expire_index": 456457, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 46098, + "fee_provided_remaining": 46098, + "status": "filled", + "give_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "get_asset_issuance": { + "asset_longname": null, + "description": "http://rarepepedirectory.com/json/pc.json", + "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", + "divisible": 1, + "locked": 1 + }, + "give_quantity_normalized": "1", + "get_quantity_normalized": "3000", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0" } ] }, - "/addresses/
/compose/broadcast": { - "result": { - "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0200000000000000002b6a290d1e454cefefcbe17b1100cb21d3398ec45d2594e5d1d822df41d03a332741261ce2f9aee7827cd91c340c0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", - "params": { - "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", - "timestamp": 4003903983, - "value": 100.0, - "fee_fraction": 0.05, - "text": "\"Hello, world!\"" - }, - "name": "broadcast" - } - }, - "/addresses/
/compose/bet": { - "result": { - "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0322020000000000001976a914bce6191bf2fd5981313cae869e9fafe164f7dbaf88ac0000000000000000316a2f0d1e454cefefcbe14dffa4c01ecd608ec45d2594e5d27c699f4ef2725648c509bf828ec195ee18f83e052061236deff2db0306000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", - "params": { - "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", - "feed_address": "1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev", - "bet_type": 2, - "deadline": 3000000000, - "wager_quantity": 1000, - "counterwager_quantity": 1000, - "target_value": 1000, - "leverage": 5040, - "expiration": 100 - }, - "name": "bet" - } - }, - "/addresses/
/compose/burn": { - "result": { - "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff02e8030000000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ace61b0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", - "params": { - "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", - "quantity": 1000, - "overburn": false - }, - "name": "burn" - } - }, - "/addresses/
/compose/cancel": { - "result": { - "rawtransaction": "01000000014709bd6af5d4d7f518f80539d4fe9acd5220a520a7b4287416a7379af9e66154020000001976a91432dff6deb7ca3bbc14f7037fa6ef8a8cf8e39fb988acffffffff0200000000000000002b6a292f3720d2b8ae7343c6d0456802c531e1216f466ceb12b96c6fbe417a97291a0660e51fc47fcc1ee1a878667900000000001976a91432dff6deb7ca3bbc14f7037fa6ef8a8cf8e39fb988ac00000000", - "params": { - "source": "15e15ua6A3FJqjMevtrWcFSzKn9k6bMQeA", - "offer_hash": "8ce3335391bf71f8f12c0573b4f85b9adc4882a9955d9f8e5ababfdd0060279a" - }, - "name": "cancel" - } - }, - "/addresses/
/compose/destroy": { - "result": { - "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000226a200d1e454cefefcbe10bffa672ce93608ec55d2594e5d1946a776c900731380c6b94160406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", - "params": { - "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", - "asset": "XCP", - "quantity": 1000, - "tag": "\"bugs!\"" - }, - "name": "destroy" - } - }, - "/addresses/
/compose/dispenser": { - "result": { - "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0200000000000000002c6a2a0d1e454cefefcbe169ffa672ce93608ec55d2594e5d1946a774ef272564b2d4ad8c28ec195ee18f85a160c0b0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", - "params": { - "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", - "asset": "XCP", - "give_quantity": 1000, - "escrow_quantity": 1000, - "mainchainrate": 100, - "status": 0, - "open_address": null, - "oracle_address": null + "/assets//credits": { + "result": [ + { + "block_index": 840464, + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "UNNEGOTIABLE", + "quantity": 1, + "calling_function": "issuance", + "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "tx_index": 2726605, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" }, - "name": "dispenser" - } - }, - "/addresses/
/compose/dividend": { - "result": { - "rawtransaction": "01000000010af94458ae5aa794c49cd27f7b800a7c68c8dd4f59ff66c99db4e9e353c06d93010000001976a914a9055398b92818794b38b15794096f752167e25f88acffffffff020000000000000000236a21068a00268d252c3a8ed0bddb5ef79f823894aa7de1e196c005510f4d787c936a979b230000000000001976a914a9055398b92818794b38b15794096f752167e25f88ac00000000", - "params": { - "source": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", - "quantity_per_unit": 1, - "asset": "PEPECASH", - "dividend_asset": "XCP" + { + "block_index": 840744, + "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "asset": "UNNEGOTIABLE", + "quantity": 1775, + "calling_function": "issuance", + "event": "92f6d2e3b07ff6aa558357d6c2c324a763f54bbcc4b887c725d61e60a57b4a7e", + "tx_index": 2726753, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1775" }, - "name": "dividend" - } - }, - "/addresses/
/compose/issuance": { - "result": { - "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0322020000000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac0000000000000000236a210d1e454cefefcbe173ffa672cf3a36751b5d2594e5d1946a774ff272960578057c17ec0306000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", - "params": { - "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", - "asset": "XCPTEST", - "quantity": 1000, - "transfer_destination": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", - "divisible": true, - "lock": false, - "reset": false, - "description": null + { + "block_index": 840759, + "address": "1AFmKo6v7tNBm45bo6eDhB6gACZhFD8oby", + "asset": "UNNEGOTIABLE", + "quantity": 76, + "calling_function": "open dispenser empty addr", + "event": "382fcc65fddc7ac39ab37fe66b2bb24d3e431b7bf0d99e509d7e761c49e28cb8", + "tx_index": 2726781, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "76" }, - "name": "issuance" - } - }, - "/addresses/
/compose/mpma": { - "result": { - "rawtransaction": "0100000001fc9b7b3a0552bdfc3c62096e9d7669fb72d5482c7b4f9618138fdffdc831d60b000000001976a914a39dbfab6f1da182af53a4d14799ee545a6176be88acffffffff04e80300000000000069512103ce014780415d0eafbdadfacfa0cf2604a005a87157042f277627c952eedcbb1f2103abf2b72459ee70e6240a7b2ade1a6fa41c7f38cc1db5e63c6f92c01b859017ee2102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53aee80300000000000069512102ce014780415d0eafbd2fcbf00e308d420b59df89ebba83369fea96a9a06fcf562102373ec5e1389ccadf0a972ec451f8aea015104ded7a57b936d374d0ecfe8067412102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53aee80300000000000069512103d0014780415d0eafbd76dacca0b613dda4b8f37e3015031f11220ac5cf43ef4e21034051b78cdcbde85f0c120261e6ab383015104ded7a57b93cd374d900776d4e132102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53ae22fd0200000000001976a914a39dbfab6f1da182af53a4d14799ee545a6176be88ac00000000", - "params": { - "source": "1Fv87qmdtjQDP9d4p9E5ncBQvYB4a3Rhy6", - "asset_dest_quant_list": [ - [ - "BAABAABLKSHP", - "1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev", - 1 - ], - [ - "BADHAIRDAY", - "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", - 2 - ], - [ - "BADWOJAK", - "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", - 3 - ] - ], - "memo": "\"Hello, world!\"", - "memo_is_hex": false + { + "block_index": 840870, + "address": "17LV3y5KhExPdVcqS81zXuVUfNV9pmaGA", + "asset": "UNNEGOTIABLE", + "quantity": 1, + "calling_function": "dispense", + "event": "f3775d4cc481b17c860c32d175a02535fef3d5d4642d9a4e947768a6bc406207", + "tx_index": 2726916, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" }, - "name": "mpma" - } + { + "block_index": 840895, + "address": "1FmEBHzkZGqQZ7kprf53xU8XijUiv2SDYW", + "asset": "UNNEGOTIABLE", + "quantity": 1, + "calling_function": "dispense", + "event": "ce3c2d55978a5b7700ef543926af84bb3f8f94ae1f3312880ee32cd0ce1743fd", + "tx_index": 2726969, + "asset_issuance": { + "asset_longname": null, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" + } + ] }, - "/addresses/
/compose/order": { - "result": { - "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000356a330d1e454cefefcbe16fffa672ce93608ec55d2594e5d1946a774ef2724a2a4f457bc28ec195ee18fbd616f461236d8be718616dac000406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", - "params": { - "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", - "give_asset": "XCP", - "give_quantity": 1000, - "get_asset": "PEPECASH", - "get_quantity": 1000, - "expiration": 100, - "fee_required": 100 + "/assets//debits": { + "result": [ + { + "block_index": 280091, + "address": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1000000000, + "action": "send", + "event": "1c20d6596f6be031c94def5ad93a52217d76371885adcc53c91c3b1eaf76ccce", + "tx_index": 729, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "10" }, - "name": "order" - } - }, - "/addresses/
/compose/send": { - "result": { - "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000306a2e0d1e454cefefcbe167ffa672ce93608ec55d2594e5d1946a774e4e944f50dfb46943bffd3b68866791f7f496f8c270060406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", - "params": { - "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", - "destination": "1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev", + { + "block_index": 280112, + "address": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", "asset": "XCP", - "quantity": 1000, - "memo": null, - "memo_is_hex": false, - "use_enhanced_send": true + "quantity": 1100000000, + "action": "send", + "event": "4dacd03d73cb497229dbfe2e7209adc4221540efe0e4c57f408b09b2fd36ece6", + "tx_index": 749, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "11" }, - "name": "send" - } - }, - "/addresses/
/compose/sweep": { - "result": { - "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000236a210d1e454cefefcbe161ff1a94d78892739ddc14a84b570af630af96858de42ab6cf6e150406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", - "params": { - "source": "1CounterpartyXXXXXXXXXXXXXXXUWLpVr", - "destination": "1JDogZS6tQcSxwfxhv6XKKjcyicYA4Feev", - "flags": 7, - "memo": "FFFF" + { + "block_index": 280112, + "address": "1PMacKVWDszkBRbb2iWWvX63BwhKUTsSBd", + "asset": "XCP", + "quantity": 100000000, + "action": "send", + "event": "057d10cc33455f4f7af44d2f030b3866e3a16416ecf984e304c76abe98393c1d", + "tx_index": 752, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "1" }, - "name": "sweep" - } + { + "block_index": 280114, + "address": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1100000000, + "action": "send", + "event": "3ac6ea5b329832e2dc31ead6c5277beccb7d95f0d9f20f256f97067223c81e00", + "tx_index": 755, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "11" + }, + { + "block_index": 280156, + "address": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1100000000, + "action": "send", + "event": "66fc1409ac6646bd8c267de89c57d2204e31bb6dfce9ee2a3ab18416fadf9e9c", + "tx_index": 766, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "11" + } + ] }, - "/bitcoin/addresses/
/transactions": { + "/assets//dividends": { "result": [ { - "tx_hash": "eae4f1dba4d75bda9dd0de12f69a980be267bbc16b7a280a2a4b40c4b3bbb70a" + "tx_index": 1914456, + "tx_hash": "30760e413947ebdc80ed7a5ada1bd4466800b87e9976bbe811ad4e2b46546359", + "block_index": 724381, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "ENDTHEFED", + "quantity_per_unit": 1, + "fee_paid": 2520000, + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/GMONEYPEPE.json", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 1 + } }, { - "tx_hash": "7ec16c461e3ba2d3acae48fcc8f58c04fba9f307b00c391eab507337ddc0bf16" + "tx_index": 1915246, + "tx_hash": "827794cbab3299f80a5b8b8cb8ec29ec3aee1373f7da2c05a156bed902bf4684", + "block_index": 724479, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "TRUMPDANCING", + "quantity_per_unit": 100, + "fee_paid": 2520000, + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/GMONEYPEPE.json", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 1 + } }, { - "tx_hash": "ad35f05767aadd39019122b4f4828ccb059b8121c07be6d36eb1e2ddbe9ac317" + "tx_index": 1920208, + "tx_hash": "7014f1e259531ba9632ca5000c35df5bd47f237318e48955900453ce9c07e917", + "block_index": 724931, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "CTRWOJACK", + "quantity_per_unit": 1111, + "fee_paid": 2700000, + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/GMONEYPEPE.json", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 1 + } }, { - "tx_hash": "3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018" + "tx_index": 1927909, + "tx_hash": "5556fd2b0802cf3bc0abd5001ecbac3adbc5b7c5c46a145a78daeef358c308de", + "block_index": 725654, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "WHITERUSSIAN", + "quantity_per_unit": 1, + "fee_paid": 3220000, + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/GMONEYPEPE.json", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 1 + } }, { - "tx_hash": "aba5810714aa6196fec5538a83bbc281077a84ef2cbce2045b4c9f3c4439f14f" + "tx_index": 1983693, + "tx_hash": "cda646285cc63f758d19b5403070f23e2a6e4b34eb3b86b63a0f56f971345657", + "block_index": 730568, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "A4520591452211866149", + "quantity_per_unit": 1, + "fee_paid": 4040000, + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/GMONEYPEPE.json", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 1 + } }, { - "tx_hash": "23758832e0fc92a7ea303623b8f743219cb8e637e7e7ac9fb6f90641efac9379" + "tx_index": 1983842, + "tx_hash": "e4b73dc974cc279b873b78e5dc4a347c08788b02143ae27aa0582f900289be10", + "block_index": 730588, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "NCSWIC", + "quantity_per_unit": 1, + "fee_paid": 4040000, + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/GMONEYPEPE.json", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 1 + } }, { - "tx_hash": "98bef616ef265dd2f6004683e908d7df97e0c5f322cdf2fb2ebea9a9131cfa79" + "tx_index": 1996395, + "tx_hash": "b342feb1421df107010ad3c8ee2043ded802bdf6cd619862459da3d0f87d6a99", + "block_index": 731994, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "FUCKTHEFED", + "quantity_per_unit": 1, + "fee_paid": 4380000, + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/GMONEYPEPE.json", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 1 + } }, { - "tx_hash": "687b875d1dc472aa2fb994c5753c9b9b56e5c6fd1a6de18a92fcb3dc7ba8067e" + "tx_index": 2035947, + "tx_hash": "02d715fd9e8b7bbc782b1b2d92a1b9ffae9326bfc88ba76c453c515ad7c8c2bc", + "block_index": 738763, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "HOLDTHELINE", + "quantity_per_unit": 1, + "fee_paid": 4940000, + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/GMONEYPEPE.json", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 1 + } }, { - "tx_hash": "ec97c11ff5cb318505ebe20d7aa3c033816824a79f9a49821ffb584ed7d6c78f" + "tx_index": 2174481, + "tx_hash": "b935a06fc34d8fa4f0c526984085b1b12c78e899415e595b625f1bee84ce3709", + "block_index": 762733, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "EOXIXIZERO", + "quantity_per_unit": 1, + "fee_paid": 6500000, + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/GMONEYPEPE.json", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 1 + } }, { - "tx_hash": "c732f0906eeada2113524c6652c17b2784780110bffd4333eb8f719ac0eff3be" + "tx_index": 2198534, + "tx_hash": "a063e9a745b9f6bc3201f72abff196de20ec106bcc71d820673d516ddbb3aa90", + "block_index": 767569, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "TRUMPCARDS", + "quantity_per_unit": 1, + "fee_paid": 6660000, + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/GMONEYPEPE.json", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 1 + } }, { - "tx_hash": "2c8bc3eede9ec60d26c6fd7f44829adc64da593552044a28c673022220f560c3" + "tx_index": 2704948, + "tx_hash": "437102ca4698f63a12e369f6168e3c7f5f8eef3e225395d515775673e33d39c1", + "block_index": 832745, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "FUCKYOUWAR", + "quantity_per_unit": 1, + "fee_paid": 6840000, + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/GMONEYPEPE.json", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 1 + } }, { - "tx_hash": "a209e345549cffef6e2190b53ac0222afc965fd618843df5ccbd645a6a7999ee" + "tx_index": 2704949, + "tx_hash": "7d3807cc58fa2d9751b2b0089bfa8fa86ef795821be6d8e9418ab3a819eba299", + "block_index": 832745, + "source": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "asset": "GMONEYPEPE", + "dividend_asset": "MEDICINEPEPE", + "quantity_per_unit": 1, + "fee_paid": 6840000, + "status": "valid", + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/GMONEYPEPE.json", + "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", + "divisible": 0, + "locked": 1 + } } ] }, - "/bitcoin/addresses/
/transactions/oldest": { - "result": { - "block_index": 833187, - "tx_hash": "2c8bc3eede9ec60d26c6fd7f44829adc64da593552044a28c673022220f560c3" - } - }, - "/bitcoin/addresses/
/utxos": { + "/assets//issuances": { "result": [ { - "vout": 6, - "height": 833559, - "value": 34611, - "confirmations": 7083, - "amount": 0.00034611, - "txid": "98bef616ef265dd2f6004683e908d7df97e0c5f322cdf2fb2ebea9a9131cfa79" - }, - { - "vout": 0, - "height": 833187, - "value": 619481, - "confirmations": 7455, - "amount": 0.00619481, - "txid": "2c8bc3eede9ec60d26c6fd7f44829adc64da593552044a28c673022220f560c3" + "tx_index": 2726605, + "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", + "msg_index": 0, + "block_index": 840464, + "asset": "UNNEGOTIABLE", + "quantity": 1, + "divisible": 0, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "transfer": 0, + "callable": 0, + "call_date": 0, + "call_price": 0.0, + "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", + "fee_paid": 50000000, + "locked": 0, + "status": "valid", + "asset_longname": null, + "reset": 0 }, { - "vout": 0, - "height": 837379, - "value": 992721, - "confirmations": 3263, - "amount": 0.00992721, - "txid": "ad35f05767aadd39019122b4f4828ccb059b8121c07be6d36eb1e2ddbe9ac317" + "tx_index": 2726737, + "tx_hash": "d15580fa7ba62d7e7928db41836521af9e7cbc8cce2efa06cc2cc57d22bf4f0f", + "msg_index": 0, + "block_index": 840738, + "asset": "UNNEGOTIABLE", + "quantity": 0, + "divisible": 0, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "transfer": 0, + "callable": 0, + "call_date": 0, + "call_price": 0.0, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "fee_paid": 0, + "locked": 0, + "status": "valid", + "asset_longname": null, + "reset": 0 }, { - "vout": 0, - "height": 840640, - "value": 838185, - "confirmations": 2, - "amount": 0.00838185, - "txid": "3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018" + "tx_index": 2726753, + "tx_hash": "92f6d2e3b07ff6aa558357d6c2c324a763f54bbcc4b887c725d61e60a57b4a7e", + "msg_index": 0, + "block_index": 840744, + "asset": "UNNEGOTIABLE", + "quantity": 1775, + "divisible": 0, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "transfer": 0, + "callable": 0, + "call_date": 0, + "call_price": 0.0, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "fee_paid": 0, + "locked": 0, + "status": "valid", + "asset_longname": null, + "reset": 0 }, { - "vout": 0, - "height": 839421, - "value": 336973, - "confirmations": 1221, - "amount": 0.00336973, - "txid": "c732f0906eeada2113524c6652c17b2784780110bffd4333eb8f719ac0eff3be" - }, + "tx_index": 2726769, + "tx_hash": "935fc9682e0aa630df4e640e3cbf730b5a722a41002cb425a69eb33a66556501", + "msg_index": 0, + "block_index": 840756, + "asset": "UNNEGOTIABLE", + "quantity": 0, + "divisible": 0, + "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", + "transfer": 0, + "callable": 0, + "call_date": 0, + "call_price": 0.0, + "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", + "fee_paid": 0, + "locked": 1, + "status": "valid", + "asset_longname": null, + "reset": 0 + } + ] + }, + "/assets//sends": { + "result": [ { - "vout": 0, - "height": 839462, - "value": 78615, - "confirmations": 1180, - "amount": 0.00078615, - "txid": "eae4f1dba4d75bda9dd0de12f69a980be267bbc16b7a280a2a4b40c4b3bbb70a" + "tx_index": 729, + "tx_hash": "1c20d6596f6be031c94def5ad93a52217d76371885adcc53c91c3b1eaf76ccce", + "block_index": 280091, + "source": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "destination": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1000000000, + "status": "valid", + "msg_index": 0, + "memo": null, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "10" }, { - "vout": 0, - "height": 838442, - "value": 557283, - "confirmations": 2200, - "amount": 0.00557283, - "txid": "aba5810714aa6196fec5538a83bbc281077a84ef2cbce2045b4c9f3c4439f14f" + "tx_index": 749, + "tx_hash": "4dacd03d73cb497229dbfe2e7209adc4221540efe0e4c57f408b09b2fd36ece6", + "block_index": 280112, + "source": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "destination": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1100000000, + "status": "valid", + "msg_index": 0, + "memo": null, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "11" }, { - "vout": 0, - "height": 838608, - "value": 77148, - "confirmations": 2034, - "amount": 0.00077148, - "txid": "ec97c11ff5cb318505ebe20d7aa3c033816824a79f9a49821ffb584ed7d6c78f" + "tx_index": 752, + "tx_hash": "057d10cc33455f4f7af44d2f030b3866e3a16416ecf984e304c76abe98393c1d", + "block_index": 280112, + "source": "1PMacKVWDszkBRbb2iWWvX63BwhKUTsSBd", + "destination": "1PMacKVWDszkBRbb2iWWvX63BwhKUTsSBd", + "asset": "XCP", + "quantity": 100000000, + "status": "valid", + "msg_index": 0, + "memo": null, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "1" }, { - "vout": 0, - "height": 837402, - "value": 70501, - "confirmations": 3240, - "amount": 0.00070501, - "txid": "687b875d1dc472aa2fb994c5753c9b9b56e5c6fd1a6de18a92fcb3dc7ba8067e" + "tx_index": 755, + "tx_hash": "3ac6ea5b329832e2dc31ead6c5277beccb7d95f0d9f20f256f97067223c81e00", + "block_index": 280114, + "source": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "destination": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1100000000, + "status": "valid", + "msg_index": 0, + "memo": null, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "11" }, { - "vout": 0, - "height": 839021, - "value": 12354, - "confirmations": 1621, - "amount": 0.00012354, - "txid": "23758832e0fc92a7ea303623b8f743219cb8e637e7e7ac9fb6f90641efac9379" + "tx_index": 766, + "tx_hash": "66fc1409ac6646bd8c267de89c57d2204e31bb6dfce9ee2a3ab18416fadf9e9c", + "block_index": 280156, + "source": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "destination": "1Pcpxw6wJwXABhjCspe3CNf3gqSeh6eien", + "asset": "XCP", + "quantity": 1100000000, + "status": "valid", + "msg_index": 0, + "memo": null, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "11" } ] }, - "/bitcoin/addresses/
/pubkey": { - "result": "0388ef0905568d425f1ffd4031d93dda4ef0e220c9b5fc4a6cbaf11544c4a5ca49" - }, - "/bitcoin/transactions/": { - "result": { - "txid": "3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018", - "hash": "417c24d7a5539bc5b8496e26528382ac297a85a1c6b891b220f72712405ec300", - "version": 2, - "size": 195, - "vsize": 113, - "weight": 450, - "locktime": 0, - "vin": [ - { - "txid": "fc940430637d22a3d276bde8f7eb489760265cab642d8392f6017d73df94cd7a", - "vout": 2, - "scriptSig": { - "asm": "", - "hex": "" - }, - "txinwitness": [ - "3045022100e4a30e5c0e0f7a28dfcec566cda00d0775a4207744ed6f223a4234cbed87a8ac02205b2403279ba7d8235ea1e8b6497465b97b46f3b3066a58c326822a9b1c25b4a501", - "020e66cffeb4657b40a89063340cf7066030af3c6ce55744ed3570a7aecaa6b0da" - ], - "sequence": 4294967295 - } - ], - "vout": [ - { - "value": 0.00838185, - "n": 0, - "scriptPubKey": { - "asm": "OP_DUP OP_HASH160 25f70b0f1512c1742d3301fe34370894c79127bb OP_EQUALVERIFY OP_CHECKSIG", - "desc": "addr(14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS)#68uhm9u9", - "hex": "76a91425f70b0f1512c1742d3301fe34370894c79127bb88ac", - "address": "14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS", - "type": "pubkeyhash" - } - } - ], - "hex": "020000000001017acd94df737d01f692832d64ab5c26609748ebf7e8bd76d2a3227d63300494fc0200000000ffffffff0129ca0c00000000001976a91425f70b0f1512c1742d3301fe34370894c79127bb88ac02483045022100e4a30e5c0e0f7a28dfcec566cda00d0775a4207744ed6f223a4234cbed87a8ac02205b2403279ba7d8235ea1e8b6497465b97b46f3b3066a58c326822a9b1c25b4a50121020e66cffeb4657b40a89063340cf7066030af3c6ce55744ed3570a7aecaa6b0da00000000", - "blockhash": "000000000000000000020f596ed481076b7754143284b47fc8d32642202e5f76", - "confirmations": 2, - "time": 1713951767, - "blocktime": 1713951767 - } - }, - "/blocks": { + "/assets//dispensers": { "result": [ { - "block_index": 840000, - "block_hash": "0000000000000000000320283a032748cef8227873ff4872689bf23f1cda83a5", - "block_time": 1713571767, - "previous_block_hash": "0000000000000000000172014ba58d66455762add0512355ad651207918494ab", - "difficulty": 86388558925171.02, - "ledger_hash": "b91dd54cfbd3aff07b358a038bf6174ddc06f36bd00cdccf048e8281bcd56224", - "txlist_hash": "b641c3e190b9941fcd5c84a7c07e66c03559ef26dcea892e2db1cf1d8392a4f2", - "messages_hash": "5c5de34009839ee66ebc3097ecd28bd5deee9553966b3ee39e8a08e123ac9adc" - }, - { - "block_index": 839999, - "block_hash": "0000000000000000000172014ba58d66455762add0512355ad651207918494ab", - "block_time": 1713571533, - "previous_block_hash": "00000000000000000001dcce6ce7c8a45872cafd1fb04732b447a14a91832591", - "difficulty": 86388558925171.02, - "ledger_hash": "e2b2e23c2ac1060dafe2395da01fe5907f323b5a644816f45f003411c612ac30", - "txlist_hash": "f33f800ef166e6ef5b3df15a0733f9fd3ebb0b799f39ef1951e6709118b7c0fd", - "messages_hash": "16b7d40543b7b80587f4d98c84fcdfdceb2d1c18abba82c7064c09c2795b7ab2" + "tx_index": 2726460, + "tx_hash": "b592d8ca4994d182e4ec63e1659dc4282b1a84466b7d71ed68c281ce63ed4897", + "block_index": 839964, + "source": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", + "asset": "ERYKAHPEPU", + "give_quantity": 1, + "escrow_quantity": 25, + "satoshirate": 50000, + "status": 0, + "give_remaining": 25, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "dispense_count": 0, + "asset_issuance": { + "asset_longname": null, + "description": "https://ipfs.io/ipfs/QmPzRXMYVTQ3zoYhaxW5ZRkt4o9vUnnzdBW4kV5CXUyjT4/ERYKAHPEPU.json", + "issuer": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "divisible": 0, + "locked": 1 + }, + "give_quantity_normalized": "1", + "give_remaining_normalized": "25", + "escrow_quantity_normalized": "25" } ] }, - "/blocks/": { - "result": { - "block_index": 840464, - "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", - "block_time": 1713852783, - "previous_block_hash": "00000000000000000002db1e5aa19784eec3de949f98ec757e7a7f2fc392079d", - "difficulty": 86388558925171.02, - "ledger_hash": "b3f8cbb50b0705a5c4a8495f8b5128de13a32daebd8ac5e8316a010f0d203584", - "txlist_hash": "84bdc5b9073f775a2b65de7da2b10b89a2235f3501883b0a836e41e68cd00d46", - "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540" - } - }, - "/blocks//transactions": { + "/assets//dispensers/
": { "result": [ { - "tx_index": 2726605, - "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "block_index": 840464, - "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", - "block_time": 1713852783, - "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "destination": "", - "btc_amount": 0, - "fee": 56565, - "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", - "supported": 1 + "tx_index": 2726460, + "tx_hash": "b592d8ca4994d182e4ec63e1659dc4282b1a84466b7d71ed68c281ce63ed4897", + "block_index": 839964, + "source": "bc1qlzkcy8c5fa6y6xvd8zn4axnvmhndfhku3hmdpz", + "asset": "ERYKAHPEPU", + "give_quantity": 1, + "escrow_quantity": 25, + "satoshirate": 50000, + "status": 0, + "give_remaining": 25, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "dispense_count": 0, + "asset_issuance": { + "asset_longname": null, + "description": "https://ipfs.io/ipfs/QmPzRXMYVTQ3zoYhaxW5ZRkt4o9vUnnzdBW4kV5CXUyjT4/ERYKAHPEPU.json", + "issuer": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "divisible": 0, + "locked": 1 + }, + "give_quantity_normalized": "1", + "give_remaining_normalized": "25", + "escrow_quantity_normalized": "25" } ] }, - "/healthz": { - "result": { - "status": "Healthy" - } - }, - "/bitcoin/estimatesmartfee": { - "result": 295443 - }, "/orders/": { "result": [ { "tx_index": 2724132, "tx_hash": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776", - "block_index": 840381, + "block_index": 840918, "source": "15L7U55PAsHLEpQkZqz62e3eqWd9AHb2DH", "give_asset": "PEPECASH", "give_quantity": 6966600000000, - "give_remaining": 900000000000, + "give_remaining": 0, "get_asset": "XCP", "get_quantity": 11076894000, - "get_remaining": 1431000000, + "get_remaining": 0, "expiration": 5000, "expire_index": 843055, "fee_required": 0, "fee_required_remaining": 0, - "fee_provided": 4488, - "fee_provided_remaining": 4488, - "status": "open" - } - ] - }, - "/orders//matches": { - "result": [ - { - "id": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776_5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947", - "tx0_index": 2724132, - "tx0_hash": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776", - "tx0_address": "15L7U55PAsHLEpQkZqz62e3eqWd9AHb2DH", - "tx1_index": 2726591, - "tx1_hash": "5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947", - "tx1_address": "15e15ua6A3FJqjMevtrWcFSzKn9k6bMQeA", - "forward_asset": "PEPECASH", - "forward_quantity": 6066600000000, - "backward_asset": "XCP", - "backward_quantity": 9645894000, - "tx0_block_index": 838055, - "tx1_block_index": 840381, - "block_index": 840381, - "tx0_expiration": 5000, - "tx1_expiration": 8064, - "match_expire_index": 840401, - "fee_paid": 0, - "status": "completed" - } - ] - }, - "/orders//btcpays": { - "result": [ + "fee_provided": 4488, + "fee_provided_remaining": 4488, + "status": "filled", + "give_asset_issuance": { + "asset_longname": null, + "description": "http://rarepepedirectory.com/json/pc.json", + "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", + "divisible": 1, + "locked": 1 + }, + "get_asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "give_quantity_normalized": "69666", + "get_quantity_normalized": "110.76894", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0" + } + ] + }, + "/orders//matches": { + "result": [ + { + "id": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776_5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947", + "tx0_index": 2724132, + "tx0_hash": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776", + "tx0_address": "15L7U55PAsHLEpQkZqz62e3eqWd9AHb2DH", + "tx1_index": 2726591, + "tx1_hash": "5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947", + "tx1_address": "15e15ua6A3FJqjMevtrWcFSzKn9k6bMQeA", + "forward_asset": "PEPECASH", + "forward_quantity": 6066600000000, + "backward_asset": "XCP", + "backward_quantity": 9645894000, + "tx0_block_index": 838055, + "tx1_block_index": 840381, + "block_index": 840381, + "tx0_expiration": 5000, + "tx1_expiration": 8064, + "match_expire_index": 840401, + "fee_paid": 0, + "status": "completed" + } + ] + }, + "/orders//btcpays": { + "result": [ + { + "tx_index": 2719343, + "tx_hash": "6cfa7f31b43a46e5ad74a9db810bd6cac56235a8ebc73ec63d01b38ea7ea2414", + "block_index": 836188, + "source": "1NfJnJdAdmm2rJCFW54NsAKqqTTMexCNJ3", + "destination": "1BepkwAhEmEuEGF349XjmEUrRvoy9a7Biv", + "btc_amount": 4500000, + "order_match_id": "0a1387df82a8a7e9cec01c52c8fee01f6995c4e39dc5804e1d2bf40d9368f5c5_299b5b648f54eacb839f3487232d49aea373cdd681b706d4cc0b5e0b03688db4", + "status": "valid" + } + ] + }, + "/orders//": { + "result": [ + { + "tx_index": 2225134, + "tx_hash": "5b6e0c741d765ebd883dc16eecfb5c340c52865cabf297ca2c1432437c1348b7", + "block_index": 772817, + "source": "1FnM7akSCD8G3fRQHCUEXRCfL35gptsPZB", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "XCP", + "get_quantity": 80800000000, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 777817, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 5544, + "fee_provided_remaining": 5544, + "status": "filled", + "market_pair": "NEEDPEPE/XCP", + "market_dir": "SELL", + "give_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "get_asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "give_quantity_normalized": "1", + "get_quantity_normalized": "808", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0", + "market_price": "808" + }, + { + "tx_index": 1946026, + "tx_hash": "75dc6ee1f67317e674ef33b617d3a9839ee53bf4a2e8274c88d6202d4d89b59a", + "block_index": 727444, + "source": "1GotRejB6XsGgMsM79TvcypeanDJRJbMtg", + "give_asset": "NEEDPEPE", + "give_quantity": 1, + "give_remaining": 0, + "get_asset": "XCP", + "get_quantity": 70000000000, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 732381, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 264, + "fee_provided_remaining": 264, + "status": "filled", + "market_pair": "NEEDPEPE/XCP", + "market_dir": "SELL", + "give_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "get_asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "give_quantity_normalized": "1", + "get_quantity_normalized": "700", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0", + "market_price": "700" + }, + { + "tx_index": 2202451, + "tx_hash": "77f568fc6604dbe209d2ea1b0158d7de20723c0178107eb570f4f2a719b0d7c7", + "block_index": 772817, + "source": "184gKLQTtQU29LXbxbYJkUV4if9SmW6v2d", + "give_asset": "XCP", + "give_quantity": 80800000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 773300, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 264, + "fee_provided_remaining": 264, + "status": "filled", + "market_pair": "NEEDPEPE/XCP", + "market_dir": "BUY", + "give_asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "get_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "give_quantity_normalized": "808", + "get_quantity_normalized": "1", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0", + "market_price": "808" + }, { - "tx_index": 2719343, - "tx_hash": "6cfa7f31b43a46e5ad74a9db810bd6cac56235a8ebc73ec63d01b38ea7ea2414", - "block_index": 836188, - "source": "1NfJnJdAdmm2rJCFW54NsAKqqTTMexCNJ3", - "destination": "1BepkwAhEmEuEGF349XjmEUrRvoy9a7Biv", - "btc_amount": 4500000, - "order_match_id": "0a1387df82a8a7e9cec01c52c8fee01f6995c4e39dc5804e1d2bf40d9368f5c5_299b5b648f54eacb839f3487232d49aea373cdd681b706d4cc0b5e0b03688db4", - "status": "valid" + "tx_index": 1946587, + "tx_hash": "b747f290cbbad6faa1c1c05d5c6d001b5a3ef487027bb0d4eefcdc9f6e865c39", + "block_index": 727444, + "source": "1AtcSh7uxenQ6AR5xqr6agAegWRUF5N4uh", + "give_asset": "XCP", + "give_quantity": 70000000000, + "give_remaining": 0, + "get_asset": "NEEDPEPE", + "get_quantity": 1, + "get_remaining": 0, + "expiration": 5000, + "expire_index": 732444, + "fee_required": 0, + "fee_required_remaining": 0, + "fee_provided": 792, + "fee_provided_remaining": 792, + "status": "filled", + "market_pair": "NEEDPEPE/XCP", + "market_dir": "BUY", + "give_asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "get_asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", + "divisible": 0, + "locked": 1 + }, + "give_quantity_normalized": "700", + "get_quantity_normalized": "1", + "get_remaining_normalized": "0", + "give_remaining_normalized": "0", + "market_price": "700" } ] }, @@ -2083,225 +3074,122 @@ "status": "expired" } ] - }, - "/bets//resolutions": { - "result": [ - { - "bet_match_id": "36bbbb7dbd85054dac140a8ad8204eda2ee859545528bd2a9da69ad77c277ace_d70ee4e44f02fe6258ee0c267f33f304a0fc61d4ce424852f58c28967dc1924f", - "bet_match_type_id": 5, - "block_index": 401128, - "winner": "Equal", - "settled": null, - "bull_credit": null, - "bear_credit": null, - "escrow_less_fee": 2000000, - "fee": 0 - } - ] - }, - "/dispensers/": { - "result": [ - { - "tx_index": 2536311, - "tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a", - "block_index": 840322, - "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", - "asset": "FLOCK", - "give_quantity": 10000000000, - "escrow_quantity": 250000000000, - "satoshirate": 330000, - "status": 0, - "give_remaining": 140000000000, - "oracle_address": null, - "last_status_tx_hash": null, - "origin": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", - "dispense_count": 2, - "asset_longname": null - } - ] - }, - "/dispensers//dispenses": { - "result": [ - { - "tx_index": 2610745, - "dispense_index": 0, - "tx_hash": "8c95cc6afc8fd466c784fd1c02749c585988999bbc66251b944c443dc31af757", - "block_index": 821450, - "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", - "destination": "1FKYM1CP9RfttJhNG8HTNQdE2uV3YvwbRB", - "asset": "FLOCK", - "dispense_quantity": 20000000000, - "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a" - }, - { - "tx_index": 2726580, - "dispense_index": 0, - "tx_hash": "e7f0f2c9bef7a492b714a5952ec61b283be344419c5bc33f405f9af41ebfa48b", - "block_index": 840322, - "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", - "destination": "bc1qzcdkhnexpjc8wvkyrpyrsn0f5xzcpu877mjmgj", - "asset": "FLOCK", - "dispense_quantity": 90000000000, - "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a" - } - ] - }, - "/transactions/": { - "result": { - "tx_index": 2726605, - "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "block_index": 840464, - "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", - "block_time": 1713852783, - "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "destination": "", - "btc_amount": 0, - "fee": 56565, - "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", - "supported": 1, - "unpacked_data": { - "message_type": "issuance", - "message_type_id": 22, - "message_data": { - "asset_id": 75313533584419238, - "asset": "UNNEGOTIABLE", - "subasset_longname": null, - "quantity": 1, - "divisible": false, - "lock": false, - "reset": false, - "callable": false, - "call_date": 0, - "call_price": 0.0, - "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", - "status": "valid" - } - } - } - }, - "/blocks//events": { - "result": [ - { - "event_index": 14194760, - "event": "BLOCK_PARSED", - "params": { - "block_index": 840464, - "ledger_hash": "b3f8cbb50b0705a5c4a8495f8b5128de13a32daebd8ac5e8316a010f0d203584", - "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540", - "txlist_hash": "84bdc5b9073f775a2b65de7da2b10b89a2235f3501883b0a836e41e68cd00d46" - } - }, - { - "event_index": 14194759, - "event": "TRANSACTION_PARSED", - "params": { - "supported": true, - "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "tx_index": 2726605 - } - }, - { - "event_index": 14194758, - "event": "CREDIT", - "params": { - "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "asset": "UNNEGOTIABLE", - "block_index": 840464, - "calling_function": "issuance", - "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "quantity": 1, - "tx_index": 2726605 - } - }, - { - "event_index": 14194757, - "event": "ASSET_ISSUANCE", - "params": { - "asset": "UNNEGOTIABLE", - "asset_longname": null, - "block_index": 840464, - "call_date": 0, - "call_price": 0.0, - "callable": false, - "description": "UNNEGOTIABLE WE MUST BECOME UNNEGOTIABLE WE ARE", - "divisible": false, - "fee_paid": 50000000, - "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "locked": false, - "quantity": 1, - "reset": false, - "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "status": "valid", - "transfer": false, - "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "tx_index": 2726605 - } - }, - { - "event_index": 14194756, - "event": "ASSET_CREATION", - "params": { - "asset_id": "75313533584419238", - "asset_longname": null, - "asset_name": "UNNEGOTIABLE", - "block_index": 840464 - } - }, - { - "event_index": 14194755, - "event": "DEBIT", - "params": { - "action": "issuance fee", - "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "asset": "XCP", - "block_index": 840464, - "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "quantity": 50000000, - "tx_index": 2726605 - } - }, - { - "event_index": 14194754, - "event": "NEW_TRANSACTION", - "params": { - "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", - "block_index": 840464, - "block_time": 1713852783, - "btc_amount": 0, - "data": "16010b9142801429a60000000000000001000000554e4e45474f544941424c45205745204d555354204245434f4d4520554e4e45474f544941424c4520574520415245", - "destination": "", - "fee": 56565, - "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "tx_index": 2726605 - } - }, + }, + "/bets//resolutions": { + "result": [ { - "event_index": 14194753, - "event": "NEW_BLOCK", - "params": { - "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", - "block_index": 840464, - "block_time": 1713852783, - "difficulty": 86388558925171.02, - "previous_block_hash": "00000000000000000002db1e5aa19784eec3de949f98ec757e7a7f2fc392079d" - } + "bet_match_id": "36bbbb7dbd85054dac140a8ad8204eda2ee859545528bd2a9da69ad77c277ace_d70ee4e44f02fe6258ee0c267f33f304a0fc61d4ce424852f58c28967dc1924f", + "bet_match_type_id": 5, + "block_index": 401128, + "winner": "Equal", + "settled": null, + "bull_credit": null, + "bear_credit": null, + "escrow_less_fee": 2000000, + "fee": 0 } ] }, - "/blocks//events/": { + "/dispensers/": { "result": [ { - "event_index": 14194758, - "event": "CREDIT", - "params": { - "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", - "asset": "UNNEGOTIABLE", - "block_index": 840464, - "calling_function": "issuance", - "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", - "quantity": 1, - "tx_index": 2726605 + "tx_index": 2536311, + "tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a", + "block_index": 840322, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "asset": "FLOCK", + "give_quantity": 10000000000, + "escrow_quantity": 250000000000, + "satoshirate": 330000, + "status": 0, + "give_remaining": 140000000000, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "dispense_count": 2, + "asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "18VNeRv8vL528HF7ruKwxycrfNEeoqmHpa", + "divisible": 1, + "locked": 1 + }, + "give_quantity_normalized": "100", + "give_remaining_normalized": "1400", + "escrow_quantity_normalized": "2500" + } + ] + }, + "/dispensers//dispenses": { + "result": [ + { + "tx_index": 2610745, + "dispense_index": 0, + "tx_hash": "8c95cc6afc8fd466c784fd1c02749c585988999bbc66251b944c443dc31af757", + "block_index": 821450, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "destination": "1FKYM1CP9RfttJhNG8HTNQdE2uV3YvwbRB", + "asset": "FLOCK", + "dispense_quantity": 20000000000, + "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a", + "dispenser": { + "tx_index": 2536311, + "block_index": 840322, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "give_quantity": 10000000000, + "escrow_quantity": 250000000000, + "satoshirate": 330000, + "status": 0, + "give_remaining": 140000000000, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "dispense_count": 2, + "give_quantity_normalized": "100", + "give_remaining_normalized": "1400", + "escrow_quantity_normalized": "2500" + }, + "asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "18VNeRv8vL528HF7ruKwxycrfNEeoqmHpa", + "divisible": 1, + "locked": 1 + } + }, + { + "tx_index": 2726580, + "dispense_index": 0, + "tx_hash": "e7f0f2c9bef7a492b714a5952ec61b283be344419c5bc33f405f9af41ebfa48b", + "block_index": 840322, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "destination": "bc1qzcdkhnexpjc8wvkyrpyrsn0f5xzcpu877mjmgj", + "asset": "FLOCK", + "dispense_quantity": 90000000000, + "dispenser_tx_hash": "753787004d6e93e71f6e0aa1e0932cc74457d12276d53856424b2e4088cc542a", + "dispenser": { + "tx_index": 2536311, + "block_index": 840322, + "source": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "give_quantity": 10000000000, + "escrow_quantity": 250000000000, + "satoshirate": 330000, + "status": 0, + "give_remaining": 140000000000, + "oracle_address": null, + "last_status_tx_hash": null, + "origin": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", + "dispense_count": 2, + "give_quantity_normalized": "100", + "give_remaining_normalized": "1400", + "escrow_quantity_normalized": "2500" + }, + "asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "18VNeRv8vL528HF7ruKwxycrfNEeoqmHpa", + "divisible": 1, + "locked": 1 } } ] @@ -2331,7 +3219,15 @@ "source": "173cE6ScUFCmBLCqZeG18ij6r9KHRPbAjC", "status": "valid", "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", - "tx_index": 2056160 + "tx_index": 2056160, + "asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "14CepDzwxKDQritbC7oAq7FTJiiEPPauyu", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" }, "block_index": 744232, "timestamp": 1712256340 @@ -2346,7 +3242,15 @@ "calling_function": "send", "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", "quantity": 1, - "tx_index": 2056160 + "tx_index": 2056160, + "asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "14CepDzwxKDQritbC7oAq7FTJiiEPPauyu", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" }, "block_index": 744232, "timestamp": 1712256340 @@ -2361,7 +3265,15 @@ "block_index": 744232, "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", "quantity": 1, - "tx_index": 2056160 + "tx_index": 2056160, + "asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "14CepDzwxKDQritbC7oAq7FTJiiEPPauyu", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" }, "block_index": 744232, "timestamp": 1712256340 @@ -2406,7 +3318,15 @@ "calling_function": "send", "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", "quantity": 1, - "tx_index": 2056160 + "tx_index": 2056160, + "asset_issuance": { + "asset_longname": null, + "description": "", + "issuer": "14CepDzwxKDQritbC7oAq7FTJiiEPPauyu", + "divisible": 0, + "locked": 1 + }, + "quantity_normalized": "1" }, "block_index": 744232, "timestamp": 1712256340 @@ -2421,7 +3341,14 @@ "calling_function": "dispense", "event": "bbb2dfa7e7a32288a702ef0091ece8b2a929f94fd967a18e6071cd9c2b085eaf", "quantity": 10000000000, - "tx_index": 2056159 + "tx_index": 2056159, + "asset_issuance": { + "divisible": true, + "asset_longname": "Counterparty", + "description": "The Counterparty protocol native currency", + "locked": true + }, + "quantity_normalized": "100" }, "block_index": 744232, "timestamp": 1712256340 @@ -2436,7 +3363,15 @@ "calling_function": "send", "event": "b419d19729c2be813405c548431f4840d5c909b875f94b7c56aeca134e328ef6", "quantity": 1, - "tx_index": 2056158 + "tx_index": 2056158, + "asset_issuance": { + "asset_longname": null, + "description": "xcp.coindaddy.io/FREEDOMKEK.json", + "issuer": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", + "divisible": 0, + "locked": 0 + }, + "quantity_normalized": "1" }, "block_index": 744232, "timestamp": 1712256340 @@ -2451,7 +3386,15 @@ "calling_function": "send", "event": "145ebf6c563c4e91a2bc488954ef701dad730fc065697979c80d6d85cbba63e1", "quantity": 1, - "tx_index": 2056157 + "tx_index": 2056157, + "asset_issuance": { + "asset_longname": null, + "description": "https://easyasset.art/j/gnyrdg/PEPEFRIDAY.json", + "issuer": "1CCPbFbST8ruJrTGjm2Ss5aTAaqng4naBN", + "divisible": 0, + "locked": 0 + }, + "quantity_normalized": "1" }, "block_index": 744232, "timestamp": 1712256340 @@ -2466,177 +3409,19 @@ "calling_function": "send", "event": "388c7208d52bf617c1a3eef238a668f694a4f72dc97b3be92562fe636ca646fa", "quantity": 2, - "tx_index": 2056156 + "tx_index": 2056156, + "asset_issuance": { + "asset_longname": null, + "description": "https://easyasset.art/j/gnyrdg/PEPEFRIDAY.json", + "issuer": "1CCPbFbST8ruJrTGjm2Ss5aTAaqng4naBN", + "divisible": 0, + "locked": 0 + }, + "quantity_normalized": "2" }, "block_index": 744232, "timestamp": 1712256340 } ] - }, - "/mempool/events": { - "result": [] - }, - "/mempool/events/": { - "result": [] - }, - "/assets///orders": { - "result": [ - { - "tx_index": 2225134, - "tx_hash": "5b6e0c741d765ebd883dc16eecfb5c340c52865cabf297ca2c1432437c1348b7", - "block_index": 772817, - "source": "1FnM7akSCD8G3fRQHCUEXRCfL35gptsPZB", - "give_asset": "NEEDPEPE", - "give_quantity": 1, - "give_remaining": 0, - "get_asset": "XCP", - "get_quantity": 80800000000, - "get_remaining": 0, - "expiration": 5000, - "expire_index": 777817, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 5544, - "fee_provided_remaining": 5544, - "status": "filled" - }, - { - "tx_index": 1946026, - "tx_hash": "75dc6ee1f67317e674ef33b617d3a9839ee53bf4a2e8274c88d6202d4d89b59a", - "block_index": 727444, - "source": "1GotRejB6XsGgMsM79TvcypeanDJRJbMtg", - "give_asset": "NEEDPEPE", - "give_quantity": 1, - "give_remaining": 0, - "get_asset": "XCP", - "get_quantity": 70000000000, - "get_remaining": 0, - "expiration": 5000, - "expire_index": 732381, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 264, - "fee_provided_remaining": 264, - "status": "filled" - }, - { - "tx_index": 2202451, - "tx_hash": "77f568fc6604dbe209d2ea1b0158d7de20723c0178107eb570f4f2a719b0d7c7", - "block_index": 772817, - "source": "184gKLQTtQU29LXbxbYJkUV4if9SmW6v2d", - "give_asset": "XCP", - "give_quantity": 80800000000, - "give_remaining": 0, - "get_asset": "NEEDPEPE", - "get_quantity": 1, - "get_remaining": 0, - "expiration": 5000, - "expire_index": 773300, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 264, - "fee_provided_remaining": 264, - "status": "filled" - }, - { - "tx_index": 1946587, - "tx_hash": "b747f290cbbad6faa1c1c05d5c6d001b5a3ef487027bb0d4eefcdc9f6e865c39", - "block_index": 727444, - "source": "1AtcSh7uxenQ6AR5xqr6agAegWRUF5N4uh", - "give_asset": "XCP", - "give_quantity": 70000000000, - "give_remaining": 0, - "get_asset": "NEEDPEPE", - "get_quantity": 1, - "get_remaining": 0, - "expiration": 5000, - "expire_index": 732444, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 792, - "fee_provided_remaining": 792, - "status": "filled" - } - ] - }, - "/orders//": { - "result": [ - { - "tx_index": 2225134, - "tx_hash": "5b6e0c741d765ebd883dc16eecfb5c340c52865cabf297ca2c1432437c1348b7", - "block_index": 772817, - "source": "1FnM7akSCD8G3fRQHCUEXRCfL35gptsPZB", - "give_asset": "NEEDPEPE", - "give_quantity": 1, - "give_remaining": 0, - "get_asset": "XCP", - "get_quantity": 80800000000, - "get_remaining": 0, - "expiration": 5000, - "expire_index": 777817, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 5544, - "fee_provided_remaining": 5544, - "status": "filled" - }, - { - "tx_index": 1946026, - "tx_hash": "75dc6ee1f67317e674ef33b617d3a9839ee53bf4a2e8274c88d6202d4d89b59a", - "block_index": 727444, - "source": "1GotRejB6XsGgMsM79TvcypeanDJRJbMtg", - "give_asset": "NEEDPEPE", - "give_quantity": 1, - "give_remaining": 0, - "get_asset": "XCP", - "get_quantity": 70000000000, - "get_remaining": 0, - "expiration": 5000, - "expire_index": 732381, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 264, - "fee_provided_remaining": 264, - "status": "filled" - }, - { - "tx_index": 2202451, - "tx_hash": "77f568fc6604dbe209d2ea1b0158d7de20723c0178107eb570f4f2a719b0d7c7", - "block_index": 772817, - "source": "184gKLQTtQU29LXbxbYJkUV4if9SmW6v2d", - "give_asset": "XCP", - "give_quantity": 80800000000, - "give_remaining": 0, - "get_asset": "NEEDPEPE", - "get_quantity": 1, - "get_remaining": 0, - "expiration": 5000, - "expire_index": 773300, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 264, - "fee_provided_remaining": 264, - "status": "filled" - }, - { - "tx_index": 1946587, - "tx_hash": "b747f290cbbad6faa1c1c05d5c6d001b5a3ef487027bb0d4eefcdc9f6e865c39", - "block_index": 727444, - "source": "1AtcSh7uxenQ6AR5xqr6agAegWRUF5N4uh", - "give_asset": "XCP", - "give_quantity": 70000000000, - "give_remaining": 0, - "get_asset": "NEEDPEPE", - "get_quantity": 1, - "get_remaining": 0, - "expiration": 5000, - "expire_index": 732444, - "fee_required": 0, - "fee_required_remaining": 0, - "fee_provided": 792, - "fee_provided_remaining": 792, - "status": "filled" - } - ] } } \ No newline at end of file diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index e467ccf869..f14c3a3c92 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -31,6 +31,7 @@ def get_example_output(path, args): args.pop(key) url = f"{API_ROOT}{path}" print(f"GET {url}") + args["verbose"] = "true" response = requests.get(url, params=args) # noqa S113 return response.json() @@ -204,6 +205,8 @@ def gen_groups_toc(): description = desc_arr[0].replace("\n", " ").strip() example_args[arg["name"]] = desc_arr[1].replace(")", "") example_arg = f": `{example_args[arg['name']]}`" + elif arg["name"] == "verbose": + example_arg = ": `true`" md += f" + {arg['name']}{example_arg} ({arg['type']}, {required}) - {description}\n" if not arg["required"]: md += f" + Default: `{arg.get('default', '')}`\n" From 098ffa7fd2813563bc6defe57472a97148ae654f Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 1 May 2024 20:31:24 +0200 Subject: [PATCH 192/280] fix doc file --- counterparty-core/tools/genapidoc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index f14c3a3c92..9c21e59a8b 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -6,7 +6,7 @@ from counterpartycore import server CURR_DIR = os.path.dirname(os.path.realpath(__file__)) -API_DOC_FILE = os.path.join(CURR_DIR, "../../../Documentation/docs/advanced/api-v2/rest.md") +API_DOC_FILE = os.path.join(CURR_DIR, "../../../Documentation/docs/advanced/api-v2/node-api.md") API_BLUEPRINT_FILE = os.path.join(CURR_DIR, "../../apiary.apib") CACHE_FILE = os.path.join(CURR_DIR, "apicache.json") API_ROOT = "http://api:api@localhost:4000" From 9f4094724bb085965b28c851f446f9afd0545485 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 1 May 2024 20:33:38 +0200 Subject: [PATCH 193/280] update release notes --- release-notes/release-notes-v10.1.2.md | 1 + 1 file changed, 1 insertion(+) diff --git a/release-notes/release-notes-v10.1.2.md b/release-notes/release-notes-v10.1.2.md index df6c764b8c..64d807ee1d 100644 --- a/release-notes/release-notes-v10.1.2.md +++ b/release-notes/release-notes-v10.1.2.md @@ -20,6 +20,7 @@ To easily migrate to the new API, an equivalence table is available in the docum ## Codebase * New ReST API * APIs return ready if the last block is less than 1 minute old +* Add an index to the `block_index` field on the `credits` and `debits` tables ## Command-Line Interface * Set default and minimum values for Backend Poll Interval to 3.0 seconds From a489672534d2e1393ae3d6dbbc23b34c5ad1877a Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Wed, 1 May 2024 20:38:17 +0200 Subject: [PATCH 194/280] Update release procedure --- RELEASE.md | 1 + 1 file changed, 1 insertion(+) diff --git a/RELEASE.md b/RELEASE.md index 5e10cec22d..a7dcc22301 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -6,6 +6,7 @@ - [ ] Review all open pull requests - [ ] Write release notes - [ ] Add a checkpoint verified on all supported versions +- [ ] Update the list of servers to compare hashes with (in `test/compare_hashes_test.py`) - [ ] Create pull request against `master` - [ ] Ensure all tests pass in CI - [ ] Merge PR into `master` From 65bb08244ad8be86d74f2911ec312fce1ccca9f6 Mon Sep 17 00:00:00 2001 From: Adam Krellenstein Date: Wed, 1 May 2024 22:53:49 +0200 Subject: [PATCH 195/280] Typo Signed-off-by: Adam Krellenstein --- release-notes/release-notes-v10.1.2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release-notes/release-notes-v10.1.2.md b/release-notes/release-notes-v10.1.2.md index 64d807ee1d..690006eb18 100644 --- a/release-notes/release-notes-v10.1.2.md +++ b/release-notes/release-notes-v10.1.2.md @@ -20,7 +20,7 @@ To easily migrate to the new API, an equivalence table is available in the docum ## Codebase * New ReST API * APIs return ready if the last block is less than 1 minute old -* Add an index to the `block_index` field on the `credits` and `debits` tables +* Add an index on the `block_index` field in the `credits` and `debits` tables ## Command-Line Interface * Set default and minimum values for Backend Poll Interval to 3.0 seconds From b1dc72f4f040fc77e84022799377dc52cd55ad5d Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 2 May 2024 09:02:32 +0200 Subject: [PATCH 196/280] _issuance -> _info --- apiary.apib | 196 +++++++++--------- .../counterpartycore/lib/api/util.py | 7 +- counterparty-core/tools/apicache.json | 196 +++++++++--------- 3 files changed, 199 insertions(+), 200 deletions(-) diff --git a/apiary.apib b/apiary.apib index b73d39c356..a8b03de3be 100644 --- a/apiary.apib +++ b/apiary.apib @@ -206,7 +206,7 @@ Returns the events of a block "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "quantity": 1, "tx_index": 2726605, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -238,7 +238,7 @@ Returns the events of a block "transfer": false, "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "tx_index": 2726605, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -269,7 +269,7 @@ Returns the events of a block "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "quantity": 50000000, "tx_index": 2726605, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -385,7 +385,7 @@ Returns the events of a block filtered by event "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "quantity": 1, "tx_index": 2726605, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -421,7 +421,7 @@ Returns the credits of a block "calling_function": "issuance", "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "tx_index": 2726605, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -456,7 +456,7 @@ Returns the debits of a block "action": "issuance fee", "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "tx_index": 2726605, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -551,7 +551,7 @@ Returns the destructions of a block "quantity": 50000, "tag": "", "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://easyasset.art/j/m4dl0x/COBBE.json", "issuer": "1P3KQWLsTPXVWimiF2Q6WSES5vbJE8be5i", @@ -632,7 +632,7 @@ Returns the sends of a block "status": "valid", "msg_index": 0, "memo": null, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -686,7 +686,7 @@ Returns the dispenses of a block "give_remaining_normalized": "1400", "escrow_quantity_normalized": "2500" }, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "", "issuer": "18VNeRv8vL528HF7ruKwxycrfNEeoqmHpa", @@ -886,7 +886,7 @@ Returns the balances of an address "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", "asset": "XCP", "quantity": 104200000000, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -916,7 +916,7 @@ Returns the balance of an address and asset "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", "asset": "XCP", "quantity": 104200000000, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -953,7 +953,7 @@ Returns the credits of an address "calling_function": "send", "event": "7e4fbb0a1eeeee34bf499955f1027fb78c514d63a3c8ff2e28c6dad005e4d850", "tx_index": 2677412, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -991,7 +991,7 @@ Returns the debits of an address "action": "open dispenser", "event": "53ed08176d3479f49986e9282293da85cebc03835b128d8e790ee587f9f1c750", "tx_index": 2721524, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -1007,7 +1007,7 @@ Returns the debits of an address "action": "send", "event": "bc54968ba7d0a59a47b276602e2dbdcf01b14009742e0d7b50272cbae529a9a4", "tx_index": 2726594, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -1179,7 +1179,7 @@ Returns the sends of an address "status": "valid", "msg_index": 0, "memo": null, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -1220,7 +1220,7 @@ Returns the receives of an address "status": "valid", "msg_index": 0, "memo": null, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -1258,7 +1258,7 @@ Returns the sends of an address and asset "status": "valid", "msg_index": 0, "memo": null, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -1300,7 +1300,7 @@ Returns the receives of an address and asset "status": "valid", "msg_index": 0, "memo": null, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -1343,7 +1343,7 @@ Returns the dispensers of an address "last_status_tx_hash": null, "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", "dispense_count": 0, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://ipfs.io/ipfs/QmPzRXMYVTQ3zoYhaxW5ZRkt4o9vUnnzdBW4kV5CXUyjT4/ERYKAHPEPU.json", "issuer": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", @@ -1390,7 +1390,7 @@ Returns the dispensers of an address and an asset "last_status_tx_hash": null, "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", "dispense_count": 0, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://ipfs.io/ipfs/QmPzRXMYVTQ3zoYhaxW5ZRkt4o9vUnnzdBW4kV5CXUyjT4/ERYKAHPEPU.json", "issuer": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", @@ -2601,7 +2601,7 @@ Returns the asset balances "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", "asset": "UNNEGOTIABLE", "quantity": 1700, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -2614,7 +2614,7 @@ Returns the asset balances "address": "17LV3y5KhExPdVcqS81zXuVUfNV9pmaGA", "asset": "UNNEGOTIABLE", "quantity": 1, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -2627,7 +2627,7 @@ Returns the asset balances "address": "1ADca8k8XRY278QfQ3f9ynWaNYFzUDhkrk", "asset": "UNNEGOTIABLE", "quantity": 2, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -2640,7 +2640,7 @@ Returns the asset balances "address": "1FmEBHzkZGqQZ7kprf53xU8XijUiv2SDYW", "asset": "UNNEGOTIABLE", "quantity": 1, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -2653,7 +2653,7 @@ Returns the asset balances "address": "1kEXrh8MQqotJq2qgcVLeZqdmeuDG8HXX", "asset": "UNNEGOTIABLE", "quantity": 1, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -2684,7 +2684,7 @@ Returns the balance of an address and asset "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", "asset": "XCP", "quantity": 104200000000, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -2729,14 +2729,14 @@ Returns the orders of an asset "fee_provided": 46098, "fee_provided_remaining": 46098, "status": "filled", - "give_asset_issuance": { + "give_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", "divisible": 0, "locked": 1 }, - "get_asset_issuance": { + "get_asset_info": { "asset_longname": null, "description": "http://rarepepedirectory.com/json/pc.json", "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", @@ -2766,14 +2766,14 @@ Returns the orders of an asset "fee_provided": 5544, "fee_provided_remaining": 5544, "status": "filled", - "give_asset_issuance": { + "give_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", "divisible": 0, "locked": 1 }, - "get_asset_issuance": { + "get_asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -2802,14 +2802,14 @@ Returns the orders of an asset "fee_provided": 264, "fee_provided_remaining": 264, "status": "filled", - "give_asset_issuance": { + "give_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", "divisible": 0, "locked": 1 }, - "get_asset_issuance": { + "get_asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -2838,13 +2838,13 @@ Returns the orders of an asset "fee_provided": 264, "fee_provided_remaining": 264, "status": "filled", - "give_asset_issuance": { + "give_asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", "locked": true }, - "get_asset_issuance": { + "get_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", @@ -2874,14 +2874,14 @@ Returns the orders of an asset "fee_provided": 40000, "fee_provided_remaining": 40000, "status": "filled", - "give_asset_issuance": { + "give_asset_info": { "asset_longname": null, "description": "http://rarepepedirectory.com/json/pc.json", "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", "divisible": 1, "locked": 1 }, - "get_asset_issuance": { + "get_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", @@ -2911,14 +2911,14 @@ Returns the orders of an asset "fee_provided": 50766, "fee_provided_remaining": 50766, "status": "filled", - "give_asset_issuance": { + "give_asset_info": { "asset_longname": null, "description": "http://rarepepedirectory.com/json/pc.json", "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", "divisible": 1, "locked": 1 }, - "get_asset_issuance": { + "get_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", @@ -2948,14 +2948,14 @@ Returns the orders of an asset "fee_provided": 75791, "fee_provided_remaining": 75791, "status": "filled", - "give_asset_issuance": { + "give_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", "divisible": 0, "locked": 1 }, - "get_asset_issuance": { + "get_asset_info": { "asset_longname": null, "description": "http://rarepepedirectory.com/json/pc.json", "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", @@ -2985,14 +2985,14 @@ Returns the orders of an asset "fee_provided": 40000, "fee_provided_remaining": 40000, "status": "filled", - "give_asset_issuance": { + "give_asset_info": { "asset_longname": null, "description": "http://rarepepedirectory.com/json/pc.json", "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", "divisible": 1, "locked": 1 }, - "get_asset_issuance": { + "get_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", @@ -3022,13 +3022,13 @@ Returns the orders of an asset "fee_provided": 792, "fee_provided_remaining": 792, "status": "filled", - "give_asset_issuance": { + "give_asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", "locked": true }, - "get_asset_issuance": { + "get_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", @@ -3058,14 +3058,14 @@ Returns the orders of an asset "fee_provided": 46098, "fee_provided_remaining": 46098, "status": "filled", - "give_asset_issuance": { + "give_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", "divisible": 0, "locked": 1 }, - "get_asset_issuance": { + "get_asset_info": { "asset_longname": null, "description": "http://rarepepedirectory.com/json/pc.json", "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", @@ -3095,14 +3095,14 @@ Returns the orders of an asset "fee_provided": 46098, "fee_provided_remaining": 46098, "status": "filled", - "give_asset_issuance": { + "give_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", "divisible": 0, "locked": 1 }, - "get_asset_issuance": { + "get_asset_info": { "asset_longname": null, "description": "http://rarepepedirectory.com/json/pc.json", "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", @@ -3144,7 +3144,7 @@ Returns the credits of an asset "calling_function": "issuance", "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "tx_index": 2726605, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -3161,7 +3161,7 @@ Returns the credits of an asset "calling_function": "issuance", "event": "92f6d2e3b07ff6aa558357d6c2c324a763f54bbcc4b887c725d61e60a57b4a7e", "tx_index": 2726753, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -3178,7 +3178,7 @@ Returns the credits of an asset "calling_function": "open dispenser empty addr", "event": "382fcc65fddc7ac39ab37fe66b2bb24d3e431b7bf0d99e509d7e761c49e28cb8", "tx_index": 2726781, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -3195,7 +3195,7 @@ Returns the credits of an asset "calling_function": "dispense", "event": "f3775d4cc481b17c860c32d175a02535fef3d5d4642d9a4e947768a6bc406207", "tx_index": 2726916, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -3212,7 +3212,7 @@ Returns the credits of an asset "calling_function": "dispense", "event": "ce3c2d55978a5b7700ef543926af84bb3f8f94ae1f3312880ee32cd0ce1743fd", "tx_index": 2726969, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -3251,7 +3251,7 @@ Returns the debits of an asset "action": "send", "event": "1c20d6596f6be031c94def5ad93a52217d76371885adcc53c91c3b1eaf76ccce", "tx_index": 729, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -3267,7 +3267,7 @@ Returns the debits of an asset "action": "send", "event": "4dacd03d73cb497229dbfe2e7209adc4221540efe0e4c57f408b09b2fd36ece6", "tx_index": 749, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -3283,7 +3283,7 @@ Returns the debits of an asset "action": "send", "event": "057d10cc33455f4f7af44d2f030b3866e3a16416ecf984e304c76abe98393c1d", "tx_index": 752, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -3299,7 +3299,7 @@ Returns the debits of an asset "action": "send", "event": "3ac6ea5b329832e2dc31ead6c5277beccb7d95f0d9f20f256f97067223c81e00", "tx_index": 755, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -3315,7 +3315,7 @@ Returns the debits of an asset "action": "send", "event": "66fc1409ac6646bd8c267de89c57d2204e31bb6dfce9ee2a3ab18416fadf9e9c", "tx_index": 766, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -3351,7 +3351,7 @@ Returns the dividends of an asset "quantity_per_unit": 1, "fee_paid": 2520000, "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/GMONEYPEPE.json", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -3369,7 +3369,7 @@ Returns the dividends of an asset "quantity_per_unit": 100, "fee_paid": 2520000, "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/GMONEYPEPE.json", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -3387,7 +3387,7 @@ Returns the dividends of an asset "quantity_per_unit": 1111, "fee_paid": 2700000, "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/GMONEYPEPE.json", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -3405,7 +3405,7 @@ Returns the dividends of an asset "quantity_per_unit": 1, "fee_paid": 3220000, "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/GMONEYPEPE.json", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -3423,7 +3423,7 @@ Returns the dividends of an asset "quantity_per_unit": 1, "fee_paid": 4040000, "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/GMONEYPEPE.json", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -3441,7 +3441,7 @@ Returns the dividends of an asset "quantity_per_unit": 1, "fee_paid": 4040000, "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/GMONEYPEPE.json", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -3459,7 +3459,7 @@ Returns the dividends of an asset "quantity_per_unit": 1, "fee_paid": 4380000, "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/GMONEYPEPE.json", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -3477,7 +3477,7 @@ Returns the dividends of an asset "quantity_per_unit": 1, "fee_paid": 4940000, "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/GMONEYPEPE.json", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -3495,7 +3495,7 @@ Returns the dividends of an asset "quantity_per_unit": 1, "fee_paid": 6500000, "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/GMONEYPEPE.json", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -3513,7 +3513,7 @@ Returns the dividends of an asset "quantity_per_unit": 1, "fee_paid": 6660000, "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/GMONEYPEPE.json", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -3531,7 +3531,7 @@ Returns the dividends of an asset "quantity_per_unit": 1, "fee_paid": 6840000, "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/GMONEYPEPE.json", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -3549,7 +3549,7 @@ Returns the dividends of an asset "quantity_per_unit": 1, "fee_paid": 6840000, "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/GMONEYPEPE.json", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -3692,7 +3692,7 @@ Returns the sends of an asset "status": "valid", "msg_index": 0, "memo": null, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -3711,7 +3711,7 @@ Returns the sends of an asset "status": "valid", "msg_index": 0, "memo": null, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -3730,7 +3730,7 @@ Returns the sends of an asset "status": "valid", "msg_index": 0, "memo": null, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -3749,7 +3749,7 @@ Returns the sends of an asset "status": "valid", "msg_index": 0, "memo": null, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -3768,7 +3768,7 @@ Returns the sends of an asset "status": "valid", "msg_index": 0, "memo": null, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -3811,7 +3811,7 @@ Returns the dispensers of an asset "last_status_tx_hash": null, "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", "dispense_count": 0, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://ipfs.io/ipfs/QmPzRXMYVTQ3zoYhaxW5ZRkt4o9vUnnzdBW4kV5CXUyjT4/ERYKAHPEPU.json", "issuer": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", @@ -3858,7 +3858,7 @@ Returns the dispensers of an address and an asset "last_status_tx_hash": null, "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", "dispense_count": 0, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://ipfs.io/ipfs/QmPzRXMYVTQ3zoYhaxW5ZRkt4o9vUnnzdBW4kV5CXUyjT4/ERYKAHPEPU.json", "issuer": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", @@ -3965,14 +3965,14 @@ Returns the information of an order "fee_provided": 4488, "fee_provided_remaining": 4488, "status": "filled", - "give_asset_issuance": { + "give_asset_info": { "asset_longname": null, "description": "http://rarepepedirectory.com/json/pc.json", "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", "divisible": 1, "locked": 1 }, - "get_asset_issuance": { + "get_asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -4093,14 +4093,14 @@ Returns the orders to exchange two assets "status": "filled", "market_pair": "NEEDPEPE/XCP", "market_dir": "SELL", - "give_asset_issuance": { + "give_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", "divisible": 0, "locked": 1 }, - "get_asset_issuance": { + "get_asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -4132,14 +4132,14 @@ Returns the orders to exchange two assets "status": "filled", "market_pair": "NEEDPEPE/XCP", "market_dir": "SELL", - "give_asset_issuance": { + "give_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", "divisible": 0, "locked": 1 }, - "get_asset_issuance": { + "get_asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -4171,13 +4171,13 @@ Returns the orders to exchange two assets "status": "filled", "market_pair": "NEEDPEPE/XCP", "market_dir": "BUY", - "give_asset_issuance": { + "give_asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", "locked": true }, - "get_asset_issuance": { + "get_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", @@ -4210,13 +4210,13 @@ Returns the orders to exchange two assets "status": "filled", "market_pair": "NEEDPEPE/XCP", "market_dir": "BUY", - "give_asset_issuance": { + "give_asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", "locked": true }, - "get_asset_issuance": { + "get_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", @@ -4448,7 +4448,7 @@ Returns the dispenser information by tx_hash "last_status_tx_hash": null, "origin": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", "dispense_count": 2, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "", "issuer": "18VNeRv8vL528HF7ruKwxycrfNEeoqmHpa", @@ -4504,7 +4504,7 @@ Returns the dispenses of a dispenser "give_remaining_normalized": "1400", "escrow_quantity_normalized": "2500" }, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "", "issuer": "18VNeRv8vL528HF7ruKwxycrfNEeoqmHpa", @@ -4539,7 +4539,7 @@ Returns the dispenses of a dispenser "give_remaining_normalized": "1400", "escrow_quantity_normalized": "2500" }, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "", "issuer": "18VNeRv8vL528HF7ruKwxycrfNEeoqmHpa", @@ -4594,7 +4594,7 @@ Returns all events "status": "valid", "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", "tx_index": 2056160, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "", "issuer": "14CepDzwxKDQritbC7oAq7FTJiiEPPauyu", @@ -4617,7 +4617,7 @@ Returns all events "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", "quantity": 1, "tx_index": 2056160, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "", "issuer": "14CepDzwxKDQritbC7oAq7FTJiiEPPauyu", @@ -4640,7 +4640,7 @@ Returns all events "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", "quantity": 1, "tx_index": 2056160, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "", "issuer": "14CepDzwxKDQritbC7oAq7FTJiiEPPauyu", @@ -4733,7 +4733,7 @@ Returns the events filtered by event name "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", "quantity": 1, "tx_index": 2056160, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "", "issuer": "14CepDzwxKDQritbC7oAq7FTJiiEPPauyu", @@ -4756,7 +4756,7 @@ Returns the events filtered by event name "event": "bbb2dfa7e7a32288a702ef0091ece8b2a929f94fd967a18e6071cd9c2b085eaf", "quantity": 10000000000, "tx_index": 2056159, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -4778,7 +4778,7 @@ Returns the events filtered by event name "event": "b419d19729c2be813405c548431f4840d5c909b875f94b7c56aeca134e328ef6", "quantity": 1, "tx_index": 2056158, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/FREEDOMKEK.json", "issuer": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", @@ -4801,7 +4801,7 @@ Returns the events filtered by event name "event": "145ebf6c563c4e91a2bc488954ef701dad730fc065697979c80d6d85cbba63e1", "quantity": 1, "tx_index": 2056157, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://easyasset.art/j/gnyrdg/PEPEFRIDAY.json", "issuer": "1CCPbFbST8ruJrTGjm2Ss5aTAaqng4naBN", @@ -4824,7 +4824,7 @@ Returns the events filtered by event name "event": "388c7208d52bf617c1a3eef238a668f694a4f72dc97b3be92562fe636ca646fa", "quantity": 2, "tx_index": 2056156, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://easyasset.art/j/gnyrdg/PEPEFRIDAY.json", "issuer": "1CCPbFbST8ruJrTGjm2Ss5aTAaqng4naBN", diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index 803b4b0a49..7fc1c535e7 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -277,7 +277,7 @@ def inject_issuance(db, result): item = item["params"] for field_name in ["asset", "give_asset", "get_asset"]: if field_name in item and item[field_name] in issuance_by_asset: - item[field_name + "_issuance"] = issuance_by_asset[item[field_name]] + item[field_name + "_info"] = issuance_by_asset[item[field_name]] if result_is_dict: return result_list[0] @@ -308,14 +308,13 @@ def inject_normalized_quantities(result): item = item["params"] if "dispenser" in item: item = result_item["dispenser"] - # item["asset_issuance"] = result_item["asset_issuance"] if field_name not in item: continue issuance_field_name = ( - field_name.replace("quantity", "asset").replace("remaining", "asset") + "_issuance" + field_name.replace("quantity", "asset").replace("remaining", "asset") + "_info" ) if issuance_field_name not in item: - issuance_field_name = "asset_issuance" + issuance_field_name = "asset_info" if issuance_field_name not in item and issuance_field_name not in result_item: continue if issuance_field_name not in item: diff --git a/counterparty-core/tools/apicache.json b/counterparty-core/tools/apicache.json index e58a979a6e..e366a449d2 100644 --- a/counterparty-core/tools/apicache.json +++ b/counterparty-core/tools/apicache.json @@ -953,7 +953,7 @@ "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "quantity": 1, "tx_index": 2726605, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -985,7 +985,7 @@ "transfer": false, "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "tx_index": 2726605, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -1016,7 +1016,7 @@ "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "quantity": 50000000, "tx_index": 2726605, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -1067,7 +1067,7 @@ "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "quantity": 1, "tx_index": 2726605, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -1089,7 +1089,7 @@ "calling_function": "issuance", "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "tx_index": 2726605, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -1110,7 +1110,7 @@ "action": "issuance fee", "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "tx_index": 2726605, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -1163,7 +1163,7 @@ "quantity": 50000, "tag": "", "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://easyasset.art/j/m4dl0x/COBBE.json", "issuer": "1P3KQWLsTPXVWimiF2Q6WSES5vbJE8be5i", @@ -1212,7 +1212,7 @@ "status": "valid", "msg_index": 0, "memo": null, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -1252,7 +1252,7 @@ "give_remaining_normalized": "1400", "escrow_quantity_normalized": "2500" }, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "", "issuer": "18VNeRv8vL528HF7ruKwxycrfNEeoqmHpa", @@ -1301,7 +1301,7 @@ "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", "asset": "XCP", "quantity": 104200000000, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -1316,7 +1316,7 @@ "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", "asset": "XCP", "quantity": 104200000000, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -1335,7 +1335,7 @@ "calling_function": "send", "event": "7e4fbb0a1eeeee34bf499955f1027fb78c514d63a3c8ff2e28c6dad005e4d850", "tx_index": 2677412, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -1355,7 +1355,7 @@ "action": "open dispenser", "event": "53ed08176d3479f49986e9282293da85cebc03835b128d8e790ee587f9f1c750", "tx_index": 2721524, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -1371,7 +1371,7 @@ "action": "send", "event": "bc54968ba7d0a59a47b276602e2dbdcf01b14009742e0d7b50272cbae529a9a4", "tx_index": 2726594, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -1477,7 +1477,7 @@ "status": "valid", "msg_index": 0, "memo": null, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -1500,7 +1500,7 @@ "status": "valid", "msg_index": 0, "memo": null, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -1523,7 +1523,7 @@ "status": "valid", "msg_index": 0, "memo": null, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -1546,7 +1546,7 @@ "status": "valid", "msg_index": 0, "memo": null, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -1573,7 +1573,7 @@ "last_status_tx_hash": null, "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", "dispense_count": 0, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://ipfs.io/ipfs/QmPzRXMYVTQ3zoYhaxW5ZRkt4o9vUnnzdBW4kV5CXUyjT4/ERYKAHPEPU.json", "issuer": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", @@ -1603,7 +1603,7 @@ "last_status_tx_hash": null, "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", "dispense_count": 0, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://ipfs.io/ipfs/QmPzRXMYVTQ3zoYhaxW5ZRkt4o9vUnnzdBW4kV5CXUyjT4/ERYKAHPEPU.json", "issuer": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", @@ -1659,7 +1659,7 @@ "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", "asset": "UNNEGOTIABLE", "quantity": 1700, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -1672,7 +1672,7 @@ "address": "17LV3y5KhExPdVcqS81zXuVUfNV9pmaGA", "asset": "UNNEGOTIABLE", "quantity": 1, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -1685,7 +1685,7 @@ "address": "1ADca8k8XRY278QfQ3f9ynWaNYFzUDhkrk", "asset": "UNNEGOTIABLE", "quantity": 2, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -1698,7 +1698,7 @@ "address": "1FmEBHzkZGqQZ7kprf53xU8XijUiv2SDYW", "asset": "UNNEGOTIABLE", "quantity": 1, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -1711,7 +1711,7 @@ "address": "1kEXrh8MQqotJq2qgcVLeZqdmeuDG8HXX", "asset": "UNNEGOTIABLE", "quantity": 1, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -1727,7 +1727,7 @@ "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", "asset": "XCP", "quantity": 104200000000, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -1756,14 +1756,14 @@ "fee_provided": 46098, "fee_provided_remaining": 46098, "status": "filled", - "give_asset_issuance": { + "give_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", "divisible": 0, "locked": 1 }, - "get_asset_issuance": { + "get_asset_info": { "asset_longname": null, "description": "http://rarepepedirectory.com/json/pc.json", "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", @@ -1793,14 +1793,14 @@ "fee_provided": 5544, "fee_provided_remaining": 5544, "status": "filled", - "give_asset_issuance": { + "give_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", "divisible": 0, "locked": 1 }, - "get_asset_issuance": { + "get_asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -1829,14 +1829,14 @@ "fee_provided": 264, "fee_provided_remaining": 264, "status": "filled", - "give_asset_issuance": { + "give_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", "divisible": 0, "locked": 1 }, - "get_asset_issuance": { + "get_asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -1865,13 +1865,13 @@ "fee_provided": 264, "fee_provided_remaining": 264, "status": "filled", - "give_asset_issuance": { + "give_asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", "locked": true }, - "get_asset_issuance": { + "get_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", @@ -1901,14 +1901,14 @@ "fee_provided": 40000, "fee_provided_remaining": 40000, "status": "filled", - "give_asset_issuance": { + "give_asset_info": { "asset_longname": null, "description": "http://rarepepedirectory.com/json/pc.json", "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", "divisible": 1, "locked": 1 }, - "get_asset_issuance": { + "get_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", @@ -1938,14 +1938,14 @@ "fee_provided": 50766, "fee_provided_remaining": 50766, "status": "filled", - "give_asset_issuance": { + "give_asset_info": { "asset_longname": null, "description": "http://rarepepedirectory.com/json/pc.json", "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", "divisible": 1, "locked": 1 }, - "get_asset_issuance": { + "get_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", @@ -1975,14 +1975,14 @@ "fee_provided": 75791, "fee_provided_remaining": 75791, "status": "filled", - "give_asset_issuance": { + "give_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", "divisible": 0, "locked": 1 }, - "get_asset_issuance": { + "get_asset_info": { "asset_longname": null, "description": "http://rarepepedirectory.com/json/pc.json", "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", @@ -2012,14 +2012,14 @@ "fee_provided": 40000, "fee_provided_remaining": 40000, "status": "filled", - "give_asset_issuance": { + "give_asset_info": { "asset_longname": null, "description": "http://rarepepedirectory.com/json/pc.json", "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", "divisible": 1, "locked": 1 }, - "get_asset_issuance": { + "get_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", @@ -2049,13 +2049,13 @@ "fee_provided": 792, "fee_provided_remaining": 792, "status": "filled", - "give_asset_issuance": { + "give_asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", "locked": true }, - "get_asset_issuance": { + "get_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", @@ -2085,14 +2085,14 @@ "fee_provided": 46098, "fee_provided_remaining": 46098, "status": "filled", - "give_asset_issuance": { + "give_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", "divisible": 0, "locked": 1 }, - "get_asset_issuance": { + "get_asset_info": { "asset_longname": null, "description": "http://rarepepedirectory.com/json/pc.json", "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", @@ -2122,14 +2122,14 @@ "fee_provided": 46098, "fee_provided_remaining": 46098, "status": "filled", - "give_asset_issuance": { + "give_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", "divisible": 0, "locked": 1 }, - "get_asset_issuance": { + "get_asset_info": { "asset_longname": null, "description": "http://rarepepedirectory.com/json/pc.json", "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", @@ -2153,7 +2153,7 @@ "calling_function": "issuance", "event": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", "tx_index": 2726605, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -2170,7 +2170,7 @@ "calling_function": "issuance", "event": "92f6d2e3b07ff6aa558357d6c2c324a763f54bbcc4b887c725d61e60a57b4a7e", "tx_index": 2726753, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -2187,7 +2187,7 @@ "calling_function": "open dispenser empty addr", "event": "382fcc65fddc7ac39ab37fe66b2bb24d3e431b7bf0d99e509d7e761c49e28cb8", "tx_index": 2726781, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -2204,7 +2204,7 @@ "calling_function": "dispense", "event": "f3775d4cc481b17c860c32d175a02535fef3d5d4642d9a4e947768a6bc406207", "tx_index": 2726916, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -2221,7 +2221,7 @@ "calling_function": "dispense", "event": "ce3c2d55978a5b7700ef543926af84bb3f8f94ae1f3312880ee32cd0ce1743fd", "tx_index": 2726969, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://zawqddvy75sz6dwqllsrupumldqwi26kk3amlz4fqci7hrsuqcfq.arweave.net/yC0Bjrj_ZZ8O0FrlGj6MWOFka8pWwMXnhYCR88ZUgIs/UNNEG.json", "issuer": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -2242,7 +2242,7 @@ "action": "send", "event": "1c20d6596f6be031c94def5ad93a52217d76371885adcc53c91c3b1eaf76ccce", "tx_index": 729, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -2258,7 +2258,7 @@ "action": "send", "event": "4dacd03d73cb497229dbfe2e7209adc4221540efe0e4c57f408b09b2fd36ece6", "tx_index": 749, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -2274,7 +2274,7 @@ "action": "send", "event": "057d10cc33455f4f7af44d2f030b3866e3a16416ecf984e304c76abe98393c1d", "tx_index": 752, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -2290,7 +2290,7 @@ "action": "send", "event": "3ac6ea5b329832e2dc31ead6c5277beccb7d95f0d9f20f256f97067223c81e00", "tx_index": 755, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -2306,7 +2306,7 @@ "action": "send", "event": "66fc1409ac6646bd8c267de89c57d2204e31bb6dfce9ee2a3ab18416fadf9e9c", "tx_index": 766, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -2328,7 +2328,7 @@ "quantity_per_unit": 1, "fee_paid": 2520000, "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/GMONEYPEPE.json", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -2346,7 +2346,7 @@ "quantity_per_unit": 100, "fee_paid": 2520000, "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/GMONEYPEPE.json", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -2364,7 +2364,7 @@ "quantity_per_unit": 1111, "fee_paid": 2700000, "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/GMONEYPEPE.json", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -2382,7 +2382,7 @@ "quantity_per_unit": 1, "fee_paid": 3220000, "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/GMONEYPEPE.json", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -2400,7 +2400,7 @@ "quantity_per_unit": 1, "fee_paid": 4040000, "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/GMONEYPEPE.json", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -2418,7 +2418,7 @@ "quantity_per_unit": 1, "fee_paid": 4040000, "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/GMONEYPEPE.json", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -2436,7 +2436,7 @@ "quantity_per_unit": 1, "fee_paid": 4380000, "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/GMONEYPEPE.json", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -2454,7 +2454,7 @@ "quantity_per_unit": 1, "fee_paid": 4940000, "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/GMONEYPEPE.json", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -2472,7 +2472,7 @@ "quantity_per_unit": 1, "fee_paid": 6500000, "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/GMONEYPEPE.json", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -2490,7 +2490,7 @@ "quantity_per_unit": 1, "fee_paid": 6660000, "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/GMONEYPEPE.json", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -2508,7 +2508,7 @@ "quantity_per_unit": 1, "fee_paid": 6840000, "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/GMONEYPEPE.json", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -2526,7 +2526,7 @@ "quantity_per_unit": 1, "fee_paid": 6840000, "status": "valid", - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/GMONEYPEPE.json", "issuer": "1JJP986hdU9Qy9b49rafM9FoXdbz1Mgbjo", @@ -2637,7 +2637,7 @@ "status": "valid", "msg_index": 0, "memo": null, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -2656,7 +2656,7 @@ "status": "valid", "msg_index": 0, "memo": null, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -2675,7 +2675,7 @@ "status": "valid", "msg_index": 0, "memo": null, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -2694,7 +2694,7 @@ "status": "valid", "msg_index": 0, "memo": null, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -2713,7 +2713,7 @@ "status": "valid", "msg_index": 0, "memo": null, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -2740,7 +2740,7 @@ "last_status_tx_hash": null, "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", "dispense_count": 0, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://ipfs.io/ipfs/QmPzRXMYVTQ3zoYhaxW5ZRkt4o9vUnnzdBW4kV5CXUyjT4/ERYKAHPEPU.json", "issuer": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", @@ -2770,7 +2770,7 @@ "last_status_tx_hash": null, "origin": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", "dispense_count": 0, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://ipfs.io/ipfs/QmPzRXMYVTQ3zoYhaxW5ZRkt4o9vUnnzdBW4kV5CXUyjT4/ERYKAHPEPU.json", "issuer": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", @@ -2803,14 +2803,14 @@ "fee_provided": 4488, "fee_provided_remaining": 4488, "status": "filled", - "give_asset_issuance": { + "give_asset_info": { "asset_longname": null, "description": "http://rarepepedirectory.com/json/pc.json", "issuer": "1GQhaWqejcGJ4GhQar7SjcCfadxvf5DNBD", "divisible": 1, "locked": 1 }, - "get_asset_issuance": { + "get_asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -2884,14 +2884,14 @@ "status": "filled", "market_pair": "NEEDPEPE/XCP", "market_dir": "SELL", - "give_asset_issuance": { + "give_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", "divisible": 0, "locked": 1 }, - "get_asset_issuance": { + "get_asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -2923,14 +2923,14 @@ "status": "filled", "market_pair": "NEEDPEPE/XCP", "market_dir": "SELL", - "give_asset_issuance": { + "give_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", "divisible": 0, "locked": 1 }, - "get_asset_issuance": { + "get_asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -2962,13 +2962,13 @@ "status": "filled", "market_pair": "NEEDPEPE/XCP", "market_dir": "BUY", - "give_asset_issuance": { + "give_asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", "locked": true }, - "get_asset_issuance": { + "get_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", @@ -3001,13 +3001,13 @@ "status": "filled", "market_pair": "NEEDPEPE/XCP", "market_dir": "BUY", - "give_asset_issuance": { + "give_asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", "locked": true }, - "get_asset_issuance": { + "get_asset_info": { "asset_longname": null, "description": "", "issuer": "1Fpx9NPBJsRbx6RXkvfZ3n1iCYj7n7VaJR", @@ -3107,7 +3107,7 @@ "last_status_tx_hash": null, "origin": "bc1qq735dv8peps2ayr3qwwwdwylq4ddwcgrpyg9r2", "dispense_count": 2, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "", "issuer": "18VNeRv8vL528HF7ruKwxycrfNEeoqmHpa", @@ -3149,7 +3149,7 @@ "give_remaining_normalized": "1400", "escrow_quantity_normalized": "2500" }, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "", "issuer": "18VNeRv8vL528HF7ruKwxycrfNEeoqmHpa", @@ -3184,7 +3184,7 @@ "give_remaining_normalized": "1400", "escrow_quantity_normalized": "2500" }, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "", "issuer": "18VNeRv8vL528HF7ruKwxycrfNEeoqmHpa", @@ -3220,7 +3220,7 @@ "status": "valid", "tx_hash": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", "tx_index": 2056160, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "", "issuer": "14CepDzwxKDQritbC7oAq7FTJiiEPPauyu", @@ -3243,7 +3243,7 @@ "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", "quantity": 1, "tx_index": 2056160, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "", "issuer": "14CepDzwxKDQritbC7oAq7FTJiiEPPauyu", @@ -3266,7 +3266,7 @@ "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", "quantity": 1, "tx_index": 2056160, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "", "issuer": "14CepDzwxKDQritbC7oAq7FTJiiEPPauyu", @@ -3319,7 +3319,7 @@ "event": "7b39d3ebd9fe8293004a1a8b8eb2d01f1664e5d8b05e8cb94f30b1da2c2f9650", "quantity": 1, "tx_index": 2056160, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "", "issuer": "14CepDzwxKDQritbC7oAq7FTJiiEPPauyu", @@ -3342,7 +3342,7 @@ "event": "bbb2dfa7e7a32288a702ef0091ece8b2a929f94fd967a18e6071cd9c2b085eaf", "quantity": 10000000000, "tx_index": 2056159, - "asset_issuance": { + "asset_info": { "divisible": true, "asset_longname": "Counterparty", "description": "The Counterparty protocol native currency", @@ -3364,7 +3364,7 @@ "event": "b419d19729c2be813405c548431f4840d5c909b875f94b7c56aeca134e328ef6", "quantity": 1, "tx_index": 2056158, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "xcp.coindaddy.io/FREEDOMKEK.json", "issuer": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", @@ -3387,7 +3387,7 @@ "event": "145ebf6c563c4e91a2bc488954ef701dad730fc065697979c80d6d85cbba63e1", "quantity": 1, "tx_index": 2056157, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://easyasset.art/j/gnyrdg/PEPEFRIDAY.json", "issuer": "1CCPbFbST8ruJrTGjm2Ss5aTAaqng4naBN", @@ -3410,7 +3410,7 @@ "event": "388c7208d52bf617c1a3eef238a668f694a4f72dc97b3be92562fe636ca646fa", "quantity": 2, "tx_index": 2056156, - "asset_issuance": { + "asset_info": { "asset_longname": null, "description": "https://easyasset.art/j/gnyrdg/PEPEFRIDAY.json", "issuer": "1CCPbFbST8ruJrTGjm2Ss5aTAaqng4naBN", From ed87f70bfceaa20b03a84a0293e7f211506f0a9c Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 2 May 2024 12:19:46 +0200 Subject: [PATCH 197/280] Add TRACE log level --- counterparty-core/counterpartycore/lib/blocks.py | 6 +++--- counterparty-core/counterpartycore/lib/log.py | 11 ++++++++++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/blocks.py b/counterparty-core/counterpartycore/lib/blocks.py index 875549d519..3955cefee2 100644 --- a/counterparty-core/counterpartycore/lib/blocks.py +++ b/counterparty-core/counterpartycore/lib/blocks.py @@ -1158,7 +1158,7 @@ def follow(db): # Get block count everytime we parse some mempool_txs. If there is a new block, we just interrupt this process if parsed_txs_count % 100 == 0: if len(parse_txs) > 1000: - logger.info( + logger.trace( f"Mempool parsed txs count:{parsed_txs_count} from {len(parse_txs)}" ) @@ -1266,7 +1266,7 @@ def follow(db): else 0 ) - logger.getChild("mempool").debug( + logger.trace( f"Mempool refreshed ({len(xcp_mempool)} Counterparty / {len(raw_mempool)} Bitcoin transactions)" ) @@ -1275,7 +1275,7 @@ def follow(db): time.sleep(sleep_time) else: # Wait - # logger.debug(f"Waiting for new blocks. Block index: {block_index}") + # logger.trace(f"Waiting for new blocks. Block index: {block_index}") # db.wal_checkpoint(mode=apsw.SQLITE_CHECKPOINT_PASSIVE) time.sleep(config.BACKEND_POLL_INTERVAL) diff --git a/counterparty-core/counterpartycore/lib/log.py b/counterparty-core/counterpartycore/lib/log.py index 4ff3cea510..3ce88d4284 100644 --- a/counterparty-core/counterpartycore/lib/log.py +++ b/counterparty-core/counterpartycore/lib/log.py @@ -11,11 +11,20 @@ from counterpartycore.lib import config +logging.TRACE = logging.DEBUG - 5 +logging.addLevelName(logging.TRACE, "TRACE") logger = logging.getLogger(config.LOGGER_NAME) + D = decimal.Decimal +def trace(self, msg, *args, **kwargs): + self._log(logging.TRACE, msg, args, **kwargs) + + def set_up(verbose=False, quiet=True, log_file=None, log_in_console=False): + logging.Logger.trace = trace + loggers = [logging.getLogger(name) for name in logging.root.manager.loggerDict] for logger in loggers: logger.handlers.clear() @@ -36,7 +45,7 @@ def set_up(verbose=False, quiet=True, log_file=None, log_in_console=False): if log_file: max_log_size = 20 * 1024 * 1024 # 20 MB fileh = RotatingFileHandler(log_file, maxBytes=max_log_size, backupCount=5) - fileh.setLevel(log_level) + fileh.setLevel(logging.TRACE) log_format = "%(asctime)s [%(levelname)s] %(message)s" formatter = logging.Formatter(log_format, "%Y-%m-%d-T%H:%M:%S%z") fileh.setFormatter(formatter) From 2689b96ea027b0b55bc2a1483b4c953c0a321355 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 2 May 2024 12:21:35 +0200 Subject: [PATCH 198/280] update release notes --- release-notes/release-notes-v10.1.2.md | 1 + 1 file changed, 1 insertion(+) diff --git a/release-notes/release-notes-v10.1.2.md b/release-notes/release-notes-v10.1.2.md index 690006eb18..7474f790fd 100644 --- a/release-notes/release-notes-v10.1.2.md +++ b/release-notes/release-notes-v10.1.2.md @@ -21,6 +21,7 @@ To easily migrate to the new API, an equivalence table is available in the docum * New ReST API * APIs return ready if the last block is less than 1 minute old * Add an index on the `block_index` field in the `credits` and `debits` tables +* Add TRACE level to python logging ## Command-Line Interface * Set default and minimum values for Backend Poll Interval to 3.0 seconds From c0aef979908fbbeba567ed11bac24be753ae35a0 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 2 May 2024 12:59:10 +0200 Subject: [PATCH 199/280] --verbose flag can be repeated to increase verbosity --- counterparty-core/counterpartycore/cli.py | 6 +++--- counterparty-core/counterpartycore/lib/log.py | 10 +++++++--- counterparty-core/counterpartycore/server.py | 4 ++-- counterparty-core/counterpartycore/test/conftest.py | 2 +- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/counterparty-core/counterpartycore/cli.py b/counterparty-core/counterpartycore/cli.py index 0ccd2caeea..1bc6366cc5 100755 --- a/counterparty-core/counterpartycore/cli.py +++ b/counterparty-core/counterpartycore/cli.py @@ -33,9 +33,9 @@ def float_range_checker(arg): ("-v", "--verbose"), { "dest": "verbose", - "action": "store_true", - "default": False, - "help": "sets log level to DEBUG", + "action": "count", + "default": 0, + "help": "verbose output (repeat for increased verbosity)", }, ], [ diff --git a/counterparty-core/counterpartycore/lib/log.py b/counterparty-core/counterpartycore/lib/log.py index 3ce88d4284..7be9ef2f13 100644 --- a/counterparty-core/counterpartycore/lib/log.py +++ b/counterparty-core/counterpartycore/lib/log.py @@ -22,7 +22,7 @@ def trace(self, msg, *args, **kwargs): self._log(logging.TRACE, msg, args, **kwargs) -def set_up(verbose=False, quiet=True, log_file=None, log_in_console=False): +def set_up(verbose=0, quiet=True, log_file=None, log_in_console=False): logging.Logger.trace = trace loggers = [logging.getLogger(name) for name in logging.root.manager.loggerDict] @@ -34,10 +34,14 @@ def set_up(verbose=False, quiet=True, log_file=None, log_in_console=False): logger = logging.getLogger(config.LOGGER_NAME) log_level = logging.ERROR - if verbose == quiet: + if quiet: + log_level = logging.ERROR + elif verbose == 0: log_level = logging.INFO - elif verbose: + elif verbose == 1: log_level = logging.DEBUG + elif verbose > 1: + log_level = logging.TRACE logger.setLevel(log_level) diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index 9cfcea909a..b67931f910 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -76,7 +76,7 @@ def get_lock(): def initialise(*args, **kwargs): initialise_log_config( - verbose=kwargs.pop("verbose", False), + verbose=kwargs.pop("verbose", 0), quiet=kwargs.pop("quiet", False), log_file=kwargs.pop("log_file", None), api_log_file=kwargs.pop("api_log_file", None), @@ -90,7 +90,7 @@ def initialise(*args, **kwargs): def initialise_log_config( - verbose=False, + verbose=0, quiet=False, log_file=None, api_log_file=None, diff --git a/counterparty-core/counterpartycore/test/conftest.py b/counterparty-core/counterpartycore/test/conftest.py index d4f462fb7f..fd0f43402f 100644 --- a/counterparty-core/counterpartycore/test/conftest.py +++ b/counterparty-core/counterpartycore/test/conftest.py @@ -284,7 +284,7 @@ def api_server_v2(request, cp_server): "utxo_locks_max_age": config.DEFAULT_UTXO_LOCKS_MAX_AGE, "estimate_fee_per_kb": None, "customnet": None, - "verbose": False, + "verbose": 0, "quiet": False, "log_file": None, "api_log_file": None, From 8f864335d8e4f63e797b1b88d918403512308e48 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 2 May 2024 13:02:15 +0200 Subject: [PATCH 200/280] update release notes --- release-notes/release-notes-v10.1.2.md | 1 + 1 file changed, 1 insertion(+) diff --git a/release-notes/release-notes-v10.1.2.md b/release-notes/release-notes-v10.1.2.md index 7474f790fd..e6d894b5db 100644 --- a/release-notes/release-notes-v10.1.2.md +++ b/release-notes/release-notes-v10.1.2.md @@ -25,6 +25,7 @@ To easily migrate to the new API, an equivalence table is available in the docum ## Command-Line Interface * Set default and minimum values for Backend Poll Interval to 3.0 seconds +* The `--verbose` flag can be repeated to increase verbosity, `-vv` is also supported # Credits * Ouziel Slama From 12f5b2a4726d24755a90a81509a89c12d25d1c12 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 2 May 2024 14:18:42 +0200 Subject: [PATCH 201/280] Check WAL before connecting to the DB --- .../counterpartycore/lib/database.py | 52 ++++++++++++++++--- .../counterpartycore/lib/exceptions.py | 4 ++ counterparty-core/counterpartycore/server.py | 1 + counterparty-core/requirements.txt | 1 + 4 files changed, 52 insertions(+), 6 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/database.py b/counterparty-core/counterpartycore/lib/database.py index 7841822c90..af4bf334b8 100644 --- a/counterparty-core/counterpartycore/lib/database.py +++ b/counterparty-core/counterpartycore/lib/database.py @@ -1,14 +1,14 @@ +import logging +import os + import apsw import apsw.bestpractice - -apsw.bestpractice.apply(apsw.bestpractice.recommended) # includes WAL mode -import collections # noqa: E402, F401 -import copy # noqa: E402, F401 -import logging # noqa: E402 -import time # noqa: E402, F401 +import psutil from counterpartycore.lib import config, exceptions, ledger, log # noqa: E402, F401 +apsw.bestpractice.apply(apsw.bestpractice.recommended) # includes WAL mode + logger = logging.getLogger(config.LOGGER_NAME) @@ -20,10 +20,46 @@ def rowtracer(cursor, sql): return dictionary +def get_file_openers(filename): + pids = [] + for proc in psutil.process_iter(): + try: + # this returns the list of opened files by the current process + flist = proc.open_files() + if flist: + for nt in flist: + if filename in nt.path: + pids.append(proc.pid) + break + # This catches a race condition where a process ends + # before we can examine its files + except (psutil.NoSuchProcess, psutil.AccessDenied): + pass + return pids + + +def check_wal_file(): + wal_file = f"{config.DATABASE}-wal" + if os.path.exists(wal_file): + pids = get_file_openers(wal_file) + if len(pids) > 0: + raise exceptions.DatabaseError(f"Database already opened by a process ({pids}).") + raise exceptions.WALFileFoundError("Found WAL file. Database may be corrupted.") + + def get_connection(read_only=True): """Connects to the SQLite database, returning a db `Connection` object""" logger.debug(f"Creating connection to `{config.DATABASE}`.") + need_quick_check = False + try: + check_wal_file() + except exceptions.WALFileFoundError: + logger.warning( + "Found WAL file. Database may be corrupted. Running a quick check after connection." + ) + need_quick_check = True + if read_only: db = apsw.Connection(config.DATABASE, flags=apsw.SQLITE_OPEN_READONLY) else: @@ -39,6 +75,10 @@ def get_connection(read_only=True): cursor.execute("PRAGMA foreign_keys = ON") cursor.execute("PRAGMA defer_foreign_keys = ON") + if need_quick_check: + logger.info("Running a quick check...") + cursor.execute("PRAGMA quick_check") + db.setrowtrace(rowtracer) cursor.close() diff --git a/counterparty-core/counterpartycore/lib/exceptions.py b/counterparty-core/counterpartycore/lib/exceptions.py index cbe5260481..9444a2b2ee 100644 --- a/counterparty-core/counterpartycore/lib/exceptions.py +++ b/counterparty-core/counterpartycore/lib/exceptions.py @@ -5,6 +5,10 @@ class DatabaseError(Exception): pass +class WALFileFoundError(Exception): + pass + + class TransactionError(Exception): pass diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index 9cfcea909a..47734cffea 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -681,6 +681,7 @@ def start_all(args): api_server_v1 = None api_server_v2 = None telemetry_daemon = None + db = None try: if not os.path.exists(config.DATABASE) and args.catch_up == "bootstrap": diff --git a/counterparty-core/requirements.txt b/counterparty-core/requirements.txt index c3a87c474c..b6da8e53b0 100644 --- a/counterparty-core/requirements.txt +++ b/counterparty-core/requirements.txt @@ -28,4 +28,5 @@ termcolor==2.4.0 sentry-sdk==1.45.0 Flask-Cors==4.0.0 docstring_parser==0.16 +psutil==5.9.8 counterparty-rs==10.1.1 From 7b9d8e082eb77f16d966631d03d86c4b1579a1e6 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 2 May 2024 14:21:00 +0200 Subject: [PATCH 202/280] Remove old not working lock --- counterparty-core/counterpartycore/server.py | 33 -------------------- 1 file changed, 33 deletions(-) diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index 47734cffea..ddccd4a3af 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -4,8 +4,6 @@ import decimal import logging import os -import platform -import socket import tarfile import tempfile import time @@ -47,33 +45,6 @@ class ConfigurationError(Exception): pass -# Lock database access by opening a socket. -class LockingError(Exception): - pass - - -def get_lock(): - logger.info("Acquiring lock.") - - # Cross‐platform. - if platform.system() == "Darwin": # Windows or OS X - # Not database‐specific. - socket_family = socket.AF_INET - socket_address = ("localhost", 8999) - error = "Another copy of server is currently running." - else: - socket_family = socket.AF_UNIX - socket_address = "\0" + config.DATABASE - error = f"Another copy of server is currently writing to database {config.DATABASE}" - - lock_socket = socket.socket(socket_family, socket.SOCK_DGRAM) - try: - lock_socket.bind(socket_address) - except socket.error: - raise LockingError(error) # noqa: B904 - logger.info("Lock acquired.") - - def initialise(*args, **kwargs): initialise_log_config( verbose=kwargs.pop("verbose", False), @@ -639,10 +610,6 @@ def initialise_db(): if config.FORCE: cprint("THE OPTION `--force` IS NOT FOR USE ON PRODUCTION SYSTEMS.", "yellow") - # Lock - if not config.FORCE: - get_lock() - # Database logger.info(f"Connecting to database (SQLite {apsw.apswversion()}).") db = database.get_connection(read_only=False) From 740b39022c648f8aefc405dded372f62b34304ca Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 2 May 2024 14:24:56 +0200 Subject: [PATCH 203/280] Check WAL for write connection only; Skip quick check when --force --- .../counterpartycore/lib/database.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/database.py b/counterparty-core/counterpartycore/lib/database.py index af4bf334b8..068e81c3a0 100644 --- a/counterparty-core/counterpartycore/lib/database.py +++ b/counterparty-core/counterpartycore/lib/database.py @@ -52,13 +52,14 @@ def get_connection(read_only=True): logger.debug(f"Creating connection to `{config.DATABASE}`.") need_quick_check = False - try: - check_wal_file() - except exceptions.WALFileFoundError: - logger.warning( - "Found WAL file. Database may be corrupted. Running a quick check after connection." - ) - need_quick_check = True + if not read_only: + try: + check_wal_file() + except exceptions.WALFileFoundError: + logger.warning( + "Found WAL file. Database may be corrupted. Running a quick check after connection." + ) + need_quick_check = True if read_only: db = apsw.Connection(config.DATABASE, flags=apsw.SQLITE_OPEN_READONLY) @@ -75,7 +76,7 @@ def get_connection(read_only=True): cursor.execute("PRAGMA foreign_keys = ON") cursor.execute("PRAGMA defer_foreign_keys = ON") - if need_quick_check: + if need_quick_check and not config.FORCE: logger.info("Running a quick check...") cursor.execute("PRAGMA quick_check") From fc72476c229926a35f40c7ffc221005d5d6f280f Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 2 May 2024 14:32:10 +0200 Subject: [PATCH 204/280] fix tests --- counterparty-core/counterpartycore/test/conftest.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/counterparty-core/counterpartycore/test/conftest.py b/counterparty-core/counterpartycore/test/conftest.py index d4f462fb7f..e276530844 100644 --- a/counterparty-core/counterpartycore/test/conftest.py +++ b/counterparty-core/counterpartycore/test/conftest.py @@ -530,6 +530,9 @@ def init_arc4(seed): else: return ARC4.new(binascii.unhexlify("00" * 32)) + def check_wal_file(): + pass + monkeypatch.setattr("counterpartycore.lib.transaction.arc4.init_arc4", init_arc4) monkeypatch.setattr("counterpartycore.lib.backend.get_unspent_txouts", get_unspent_txouts) monkeypatch.setattr("counterpartycore.lib.log.isodt", isodt) @@ -550,3 +553,4 @@ def init_arc4(seed): "counterpartycore.lib.backend.multisig_pubkeyhashes_to_pubkeys", multisig_pubkeyhashes_to_pubkeys, ) + monkeypatch.setattr("counterpartycore.lib.database.check_wal_file", check_wal_file) From 2136b9295ed6bd5b525e385d05c75bd2f3a95566 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 2 May 2024 14:34:54 +0200 Subject: [PATCH 205/280] update release notes --- release-notes/release-notes-v10.1.2.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/release-notes/release-notes-v10.1.2.md b/release-notes/release-notes-v10.1.2.md index 690006eb18..502164efa6 100644 --- a/release-notes/release-notes-v10.1.2.md +++ b/release-notes/release-notes-v10.1.2.md @@ -24,6 +24,8 @@ To easily migrate to the new API, an equivalence table is available in the docum ## Command-Line Interface * Set default and minimum values for Backend Poll Interval to 3.0 seconds +* Checks that another process is not connected to the database before starting the server +* At startup, launches a quick check if the database has not been correctly closed # Credits * Ouziel Slama From 8f5c522eccc93c35ef50815d6e0cf330a0667221 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 2 May 2024 15:47:41 +0200 Subject: [PATCH 206/280] Clean unused imports --- .../counterpartycore/lib/address.py | 3 +-- .../counterpartycore/lib/backend/__init__.py | 4 +--- .../lib/backend/addrindexrs.py | 4 ---- .../counterpartycore/lib/blocks.py | 20 +++++-------------- .../counterpartycore/lib/check.py | 3 +-- .../counterpartycore/lib/config.py | 2 -- .../counterpartycore/lib/database.py | 11 ++++------ .../counterpartycore/lib/gettxinfo.py | 3 --- .../lib/kickstart/bc_data_stream.py | 1 - .../lib/kickstart/blocks_parser.py | 1 - .../counterpartycore/lib/messages/bet.py | 1 - .../lib/messages/broadcast.py | 1 - .../counterpartycore/lib/messages/btcpay.py | 2 -- .../counterpartycore/lib/messages/burn.py | 1 - .../counterpartycore/lib/messages/rps.py | 1 - .../lib/telemetry/collector.py | 2 +- .../counterpartycore/lib/transaction.py | 2 +- .../lib/transaction_helper/p2sh_encoding.py | 2 -- .../lib/transaction_helper/serializer.py | 12 +---------- counterparty-core/tools/updatetxids.py | 2 -- 20 files changed, 15 insertions(+), 63 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/address.py b/counterparty-core/counterpartycore/lib/address.py index ab63b18631..cb05af86e8 100644 --- a/counterparty-core/counterpartycore/lib/address.py +++ b/counterparty-core/counterpartycore/lib/address.py @@ -1,9 +1,8 @@ import logging -import struct # noqa: F401 import bitcoin -from counterpartycore.lib import config, exceptions, ledger, script # noqa: F401 +from counterpartycore.lib import config, exceptions, script # noqa: F401 logger = logging.getLogger(config.LOGGER_NAME) diff --git a/counterparty-core/counterpartycore/lib/backend/__init__.py b/counterparty-core/counterpartycore/lib/backend/__init__.py index e99bde9b37..b94072b983 100644 --- a/counterparty-core/counterpartycore/lib/backend/__init__.py +++ b/counterparty-core/counterpartycore/lib/backend/__init__.py @@ -2,13 +2,11 @@ import logging import sys import time -from decimal import Decimal as D # noqa: F401 import bitcoin as bitcoinlib -import bitcoin.rpc as bitcoinlib_rpc # noqa: F401 from bitcoin.core import CBlock -from counterpartycore.lib import config, exceptions, ledger, prefetcher, script, util # noqa: F401 +from counterpartycore.lib import config, ledger, prefetcher, script, util from counterpartycore.lib.backend import addrindexrs # noqa: F401 logger = logging.getLogger(config.LOGGER_NAME) diff --git a/counterparty-core/counterpartycore/lib/backend/addrindexrs.py b/counterparty-core/counterpartycore/lib/backend/addrindexrs.py index ae2b4c66ed..9103c612d1 100644 --- a/counterparty-core/counterpartycore/lib/backend/addrindexrs.py +++ b/counterparty-core/counterpartycore/lib/backend/addrindexrs.py @@ -1,13 +1,10 @@ -import binascii # noqa: F401 import collections import concurrent.futures import functools import hashlib import json import logging -import os # noqa: F401 import queue -import signal # noqa: F401 import socket import sys import threading @@ -15,7 +12,6 @@ import bitcoin.wallet import requests -from pkg_resources import parse_version # noqa: F401 from requests.exceptions import ChunkedEncodingError, ConnectionError, ReadTimeout, Timeout from counterpartycore.lib import config, exceptions, ledger, util diff --git a/counterparty-core/counterpartycore/lib/blocks.py b/counterparty-core/counterpartycore/lib/blocks.py index 875549d519..9d5d9ed481 100644 --- a/counterparty-core/counterpartycore/lib/blocks.py +++ b/counterparty-core/counterpartycore/lib/blocks.py @@ -5,45 +5,34 @@ """ import binascii +import collections # noqa: E402 +import csv # noqa: E402 import decimal +import http # noqa: E402 +import logging # noqa: E402 import os import struct import time from datetime import timedelta -D = decimal.Decimal -import collections # noqa: E402 -import copy # noqa: E402, F401 -import csv # noqa: E402 -import http # noqa: E402 -import logging # noqa: E402 -import platform # noqa: E402, F401 - import bitcoin as bitcoinlib # noqa: E402 -from bitcoin.core.script import CScriptInvalidError # noqa: E402, F401 from halo import Halo # noqa: E402 from termcolor import colored # noqa: E402 from counterpartycore.lib import ( # noqa: E402 - arc4, # noqa: F401 backend, check, config, database, exceptions, ledger, - log, # noqa: F401 message_type, prefetcher, - script, # noqa: F401 - util, # noqa: F401 ) from counterpartycore.lib.gettxinfo import get_tx_info # noqa: E402 from counterpartycore.lib.kickstart.blocks_parser import BlockchainParser # noqa: E402 from counterpartycore.lib.transaction_helper import p2sh_encoding # noqa: E402, F401 -from .exceptions import BTCOnlyError, DecodeError # noqa: E402, F401 -from .kickstart.utils import ib2h # noqa: E402, F401 from .messages import ( # noqa: E402 bet, broadcast, @@ -62,6 +51,7 @@ ) from .messages.versions import enhanced_send, mpma # noqa: E402 +D = decimal.Decimal logger = logging.getLogger(config.LOGGER_NAME) NUM_PREFETCHER_THREADS = 3 diff --git a/counterparty-core/counterpartycore/lib/check.py b/counterparty-core/counterpartycore/lib/check.py index f1bc2d3f44..682812e6b4 100644 --- a/counterparty-core/counterpartycore/lib/check.py +++ b/counterparty-core/counterpartycore/lib/check.py @@ -1,12 +1,11 @@ import json import logging import sys -import time # noqa: F401 import warnings import requests -from counterpartycore.lib import config, database, exceptions, ledger, util # noqa: F401 +from counterpartycore.lib import config, database, ledger, util # noqa: F401 logger = logging.getLogger(config.LOGGER_NAME) diff --git a/counterparty-core/counterpartycore/lib/config.py b/counterparty-core/counterpartycore/lib/config.py index f9b608b707..31823af793 100644 --- a/counterparty-core/counterpartycore/lib/config.py +++ b/counterparty-core/counterpartycore/lib/config.py @@ -1,5 +1,3 @@ -import sys # noqa: F401 - """Variables prefixed with `DEFAULT` should be able to be overridden by configuration file and command‐line arguments.""" diff --git a/counterparty-core/counterpartycore/lib/database.py b/counterparty-core/counterpartycore/lib/database.py index 7841822c90..c1d5c59412 100644 --- a/counterparty-core/counterpartycore/lib/database.py +++ b/counterparty-core/counterpartycore/lib/database.py @@ -1,14 +1,11 @@ +import logging + import apsw import apsw.bestpractice -apsw.bestpractice.apply(apsw.bestpractice.recommended) # includes WAL mode -import collections # noqa: E402, F401 -import copy # noqa: E402, F401 -import logging # noqa: E402 -import time # noqa: E402, F401 - -from counterpartycore.lib import config, exceptions, ledger, log # noqa: E402, F401 +from counterpartycore.lib import config, exceptions # noqa: E402, F401 +apsw.bestpractice.apply(apsw.bestpractice.recommended) # includes WAL mode logger = logging.getLogger(config.LOGGER_NAME) diff --git a/counterparty-core/counterpartycore/lib/gettxinfo.py b/counterparty-core/counterpartycore/lib/gettxinfo.py index d44134db7a..19154c5d9c 100644 --- a/counterparty-core/counterpartycore/lib/gettxinfo.py +++ b/counterparty-core/counterpartycore/lib/gettxinfo.py @@ -2,9 +2,6 @@ import logging import struct -import bitcoin as bitcoinlib # noqa: F401 -from bitcoin.core.script import CScriptInvalidError # noqa: F401 - from counterpartycore.lib import arc4, backend, config, ledger, script from counterpartycore.lib.exceptions import BTCOnlyError, DecodeError from counterpartycore.lib.kickstart.blocks_parser import BlockchainParser diff --git a/counterparty-core/counterpartycore/lib/kickstart/bc_data_stream.py b/counterparty-core/counterpartycore/lib/kickstart/bc_data_stream.py index d863da265c..f65c1ea3b0 100644 --- a/counterparty-core/counterpartycore/lib/kickstart/bc_data_stream.py +++ b/counterparty-core/counterpartycore/lib/kickstart/bc_data_stream.py @@ -3,7 +3,6 @@ # import mmap import struct -from io import BytesIO # noqa: F401 from .exceptions import SerializationError diff --git a/counterparty-core/counterpartycore/lib/kickstart/blocks_parser.py b/counterparty-core/counterpartycore/lib/kickstart/blocks_parser.py index 116a7f6e7f..a20c3921c5 100644 --- a/counterparty-core/counterpartycore/lib/kickstart/blocks_parser.py +++ b/counterparty-core/counterpartycore/lib/kickstart/blocks_parser.py @@ -6,7 +6,6 @@ # Used to pickle and unpickle blocks from shared_memory import pickle # nosec B403 import signal -import time # noqa: F401 from collections import OrderedDict from multiprocessing import JoinableQueue, Process, shared_memory diff --git a/counterparty-core/counterpartycore/lib/messages/bet.py b/counterparty-core/counterpartycore/lib/messages/bet.py index 7a9c453e10..4f4437b2da 100644 --- a/counterparty-core/counterpartycore/lib/messages/bet.py +++ b/counterparty-core/counterpartycore/lib/messages/bet.py @@ -24,7 +24,6 @@ database, exceptions, ledger, - log, # noqa: F401 message_type, util, ) diff --git a/counterparty-core/counterpartycore/lib/messages/broadcast.py b/counterparty-core/counterpartycore/lib/messages/broadcast.py index 0b55e0eee1..541454985f 100644 --- a/counterparty-core/counterpartycore/lib/messages/broadcast.py +++ b/counterparty-core/counterpartycore/lib/messages/broadcast.py @@ -36,7 +36,6 @@ database, exceptions, ledger, - log, # noqa: F401 message_type, util, ) diff --git a/counterparty-core/counterpartycore/lib/messages/btcpay.py b/counterparty-core/counterpartycore/lib/messages/btcpay.py index 49308b5e14..987a37dacf 100644 --- a/counterparty-core/counterpartycore/lib/messages/btcpay.py +++ b/counterparty-core/counterpartycore/lib/messages/btcpay.py @@ -3,7 +3,6 @@ import binascii import json import logging -import pprint # noqa: F401 import struct from counterpartycore.lib import ( # noqa: F401 @@ -11,7 +10,6 @@ database, exceptions, ledger, - log, message_type, util, ) diff --git a/counterparty-core/counterpartycore/lib/messages/burn.py b/counterparty-core/counterpartycore/lib/messages/burn.py index f7cc8f2a8d..d70556dad5 100644 --- a/counterparty-core/counterpartycore/lib/messages/burn.py +++ b/counterparty-core/counterpartycore/lib/messages/burn.py @@ -2,7 +2,6 @@ import decimal import json import logging -import struct # noqa: F401 D = decimal.Decimal from fractions import Fraction # noqa: E402 diff --git a/counterparty-core/counterpartycore/lib/messages/rps.py b/counterparty-core/counterpartycore/lib/messages/rps.py index 134dd89f38..01fed73517 100644 --- a/counterparty-core/counterpartycore/lib/messages/rps.py +++ b/counterparty-core/counterpartycore/lib/messages/rps.py @@ -30,7 +30,6 @@ database, exceptions, ledger, - log, message_type, util, ) diff --git a/counterparty-core/counterpartycore/lib/telemetry/collector.py b/counterparty-core/counterpartycore/lib/telemetry/collector.py index d5dfd81507..100b31654f 100644 --- a/counterparty-core/counterpartycore/lib/telemetry/collector.py +++ b/counterparty-core/counterpartycore/lib/telemetry/collector.py @@ -1,5 +1,5 @@ # INTERFACE -from counterpartycore.lib import config, blocks, ledger # noqa: I001, F401 +from counterpartycore.lib import config, ledger # noqa: I001, F401 import os import counterpartycore.lib.telemetry.util as util diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index 94854a7ec3..b09b03054a 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -18,7 +18,7 @@ from bitcoin.core import CTransaction from counterpartycore.lib import ( - arc4, # noqa: F401 + arc4, # noqa: F401 # TODO: need for test: clean that up backend, config, exceptions, diff --git a/counterparty-core/counterpartycore/lib/transaction_helper/p2sh_encoding.py b/counterparty-core/counterpartycore/lib/transaction_helper/p2sh_encoding.py index 4e2ec40e1b..73c5cbdf72 100644 --- a/counterparty-core/counterpartycore/lib/transaction_helper/p2sh_encoding.py +++ b/counterparty-core/counterpartycore/lib/transaction_helper/p2sh_encoding.py @@ -4,9 +4,7 @@ import binascii import logging -import math # noqa: F401 import struct -import traceback # not needed if not printing exceptions on p2sh decoding # noqa: F401 import bitcoin as bitcoinlib from bitcoin.core.script import CScript diff --git a/counterparty-core/counterpartycore/lib/transaction_helper/serializer.py b/counterparty-core/counterpartycore/lib/transaction_helper/serializer.py index 90009f49a0..cd75ed25d0 100644 --- a/counterparty-core/counterpartycore/lib/transaction_helper/serializer.py +++ b/counterparty-core/counterpartycore/lib/transaction_helper/serializer.py @@ -7,22 +7,12 @@ import binascii import decimal import hashlib -import json # noqa: F401 import logging -import os # noqa: F401 -import re # noqa: F401 -import sys # noqa: F401 -import time # noqa: F401 import bitcoin as bitcoinlib -import cachetools # noqa: F401 -import requests # noqa: F401 from bitcoin.bech32 import CBech32Data -from bitcoin.core import Hash160 # noqa: F401 -from bitcoin.core.script import CScript # noqa: F401 -from bitcoin.wallet import P2PKHBitcoinAddress, P2SHBitcoinAddress # noqa: F401 -from counterpartycore.lib import arc4, backend, config, exceptions, script, util # noqa: F401 +from counterpartycore.lib import arc4, backend, config, exceptions, script # noqa: F401 from counterpartycore.lib.transaction_helper import p2sh_encoding logger = logging.getLogger(config.LOGGER_NAME) diff --git a/counterparty-core/tools/updatetxids.py b/counterparty-core/tools/updatetxids.py index ead8c76cdd..8fdb6a98e1 100755 --- a/counterparty-core/tools/updatetxids.py +++ b/counterparty-core/tools/updatetxids.py @@ -2,9 +2,7 @@ import binascii import os -import pprint # noqa: F401 import re -import shutil # noqa: F401 import sys COMMIT = "8906a8188ba841599f66627157e29a270ca838cf" From 070ff947f641dd1a932478923b70eb7f69f17bb0 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 2 May 2024 16:11:14 +0200 Subject: [PATCH 207/280] tweak help message --- counterparty-core/counterpartycore/cli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/counterparty-core/counterpartycore/cli.py b/counterparty-core/counterpartycore/cli.py index 1bc6366cc5..298739f720 100755 --- a/counterparty-core/counterpartycore/cli.py +++ b/counterparty-core/counterpartycore/cli.py @@ -35,7 +35,7 @@ def float_range_checker(arg): "dest": "verbose", "action": "count", "default": 0, - "help": "verbose output (repeat for increased verbosity)", + "help": "verbose output (-v for DEBUG, -vv for TRACE)", }, ], [ From 6a3f7ac53bed8ac2eeb5d74a8639a1b217710eba Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 2 May 2024 16:39:22 +0200 Subject: [PATCH 208/280] 'backend' is not supposed to know about 'ledger' --- counterparty-core/counterpartycore/lib/backend/__init__.py | 6 +++--- counterparty-core/counterpartycore/lib/blocks.py | 5 ++++- counterparty-core/counterpartycore/lib/prefetcher.py | 5 ++++- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/backend/__init__.py b/counterparty-core/counterpartycore/lib/backend/__init__.py index b94072b983..a6d30d0caf 100644 --- a/counterparty-core/counterpartycore/lib/backend/__init__.py +++ b/counterparty-core/counterpartycore/lib/backend/__init__.py @@ -6,7 +6,7 @@ import bitcoin as bitcoinlib from bitcoin.core import CBlock -from counterpartycore.lib import config, ledger, prefetcher, script, util +from counterpartycore.lib import config, prefetcher, script, util from counterpartycore.lib.backend import addrindexrs # noqa: F401 logger = logging.getLogger(config.LOGGER_NAME) @@ -155,12 +155,12 @@ def get_txhash_list(block): return [bitcoinlib.core.b2lx(ctx.GetHash()) for ctx in block.vtx] -def get_tx_list(block, block_index=None): +def get_tx_list(block, correct_segwit=True): raw_transactions = {} tx_hash_list = [] for ctx in block.vtx: - if ledger.enabled("correct_segwit_txids", block_index=block_index): + if correct_segwit: hsh = ctx.GetTxid() else: hsh = ctx.GetHash() diff --git a/counterparty-core/counterpartycore/lib/blocks.py b/counterparty-core/counterpartycore/lib/blocks.py index 88bfa0d5c4..9cccf77681 100644 --- a/counterparty-core/counterpartycore/lib/blocks.py +++ b/counterparty-core/counterpartycore/lib/blocks.py @@ -1039,7 +1039,10 @@ def follow(db): block = backend.getblock(block_hash) previous_block_hash = bitcoinlib.core.b2lx(block.hashPrevBlock) block_time = block.nTime - txhash_list, raw_transactions = backend.get_tx_list(block) + txhash_list, raw_transactions = backend.get_tx_list( + block, + correct_segwit=ledger.enabled("correct_segwit_txids", block_index=block_index), + ) block_difficulty = block.difficulty with db: diff --git a/counterparty-core/counterpartycore/lib/prefetcher.py b/counterparty-core/counterpartycore/lib/prefetcher.py index 90bcc72632..ee3499d108 100644 --- a/counterparty-core/counterpartycore/lib/prefetcher.py +++ b/counterparty-core/counterpartycore/lib/prefetcher.py @@ -54,7 +54,10 @@ def run(self): ) block_hash = backend.getblockhash(block_index) block = backend.getblock(block_hash) - txhash_list, raw_transactions = backend.get_tx_list(block, block_index=block_index) + txhash_list, raw_transactions = backend.get_tx_list( + block, + correct_segwit=ledger.enabled("correct_segwit_txids", block_index=block_index), + ) BLOCKCHAIN_CACHE[block_index] = { "block_hash": block_hash, "txhash_list": txhash_list, From 00121a0afeee6fef5fa287661543af42fead6330 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 2 May 2024 16:53:11 +0200 Subject: [PATCH 209/280] 'addrindexrs' is not supposed to know about 'ledger' --- counterparty-core/counterpartycore/lib/api/api_v1.py | 2 +- counterparty-core/counterpartycore/lib/api/routes.py | 2 +- counterparty-core/counterpartycore/lib/api/util.py | 9 +++++++++ .../counterpartycore/lib/backend/__init__.py | 11 +---------- .../counterpartycore/lib/backend/addrindexrs.py | 12 +++++++----- .../counterpartycore/lib/messages/dispenser.py | 4 +++- 6 files changed, 22 insertions(+), 18 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_v1.py b/counterparty-core/counterpartycore/lib/api/api_v1.py index 9436084f2f..8f7cfed6ea 100644 --- a/counterparty-core/counterpartycore/lib/api/api_v1.py +++ b/counterparty-core/counterpartycore/lib/api/api_v1.py @@ -931,7 +931,7 @@ def search_raw_transactions(address, unconfirmed=True, only_tx_hashes=False): @dispatcher.add_method def get_oldest_tx(address): - return backend.get_oldest_tx(address) + return backend.get_oldest_tx(address, block_index=ledger.CURRENT_BLOCK_INDEX) @dispatcher.add_method def get_unspent_txouts(address, unconfirmed=False, unspent_tx_hash=None, order_by=None): diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index 7aae6bd372..7861d8bf6d 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -94,7 +94,7 @@ "/healthz": util.check_server_health, ### /bitcoin ### "/bitcoin/addresses/
/transactions": backend.get_transactions_by_address, - "/bitcoin/addresses/
/transactions/oldest": backend.get_oldest_transaction_by_address, + "/bitcoin/addresses/
/transactions/oldest": util.get_oldest_transaction_by_address, "/bitcoin/addresses/
/utxos": backend.get_unspent_txouts, "/bitcoin/addresses/
/pubkey": util.pubkeyhash_to_pubkey, "/bitcoin/transactions/": util.get_transaction, diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index 7fc1c535e7..165ffca5c5 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -130,6 +130,15 @@ def get_transaction(tx_hash: str, format: str = "json"): return backend.getrawtransaction(tx_hash, verbose=(format == "json")) +def get_oldest_transaction_by_address(address: str, block_index: int = None): + """ + Get the oldest transaction for an address. + :param address: The address to search for. (e.g. 14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS) + :param block_index: The block index to search from. + """ + return backend.get_oldest_tx(address, block_index=block_index or ledger.CURRENT_BLOCK_INDEX) + + def get_backend_height(): block_count = backend.getblockcount() blocks_behind = backend.getindexblocksbehind() diff --git a/counterparty-core/counterpartycore/lib/backend/__init__.py b/counterparty-core/counterpartycore/lib/backend/__init__.py index a6d30d0caf..71290c0080 100644 --- a/counterparty-core/counterpartycore/lib/backend/__init__.py +++ b/counterparty-core/counterpartycore/lib/backend/__init__.py @@ -252,19 +252,10 @@ def get_transactions_by_address( return search_raw_transactions(address, unconfirmed, only_tx_hashes) -def get_oldest_tx(address: str, block_index: int = None): +def get_oldest_tx(address: str, block_index: int): return backend().get_oldest_tx(address, block_index=block_index) -def get_oldest_transaction_by_address(address: str, block_index: int = None): - """ - Get the oldest transaction for an address. - :param address: The address to search for. (e.g. 14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS) - :param block_index: The block index to search from. - """ - return get_oldest_tx(address, block_index=block_index) - - class UnknownPubKeyError(Exception): pass diff --git a/counterparty-core/counterpartycore/lib/backend/addrindexrs.py b/counterparty-core/counterpartycore/lib/backend/addrindexrs.py index 9103c612d1..41947e9ab2 100644 --- a/counterparty-core/counterpartycore/lib/backend/addrindexrs.py +++ b/counterparty-core/counterpartycore/lib/backend/addrindexrs.py @@ -14,7 +14,7 @@ import requests from requests.exceptions import ChunkedEncodingError, ConnectionError, ReadTimeout, Timeout -from counterpartycore.lib import config, exceptions, ledger, util +from counterpartycore.lib import config, exceptions, util logger = logging.getLogger(config.LOGGER_NAME) @@ -782,11 +782,11 @@ def send(self, query, timeout=ADDRINDEXRS_CLIENT_TIMEOUT, retry=0): self.connect() return self.send(query, timeout=timeout, retry=retry + 1) - def get_oldest_tx(self, address, timeout=ADDRINDEXRS_CLIENT_TIMEOUT, block_index=None): + def get_oldest_tx(self, address, block_index, timeout=ADDRINDEXRS_CLIENT_TIMEOUT): hsh = _address_to_hash(address) query = { "method": "blockchain.scripthash.get_oldest_tx", - "params": [hsh, block_index or ledger.CURRENT_BLOCK_INDEX], + "params": [hsh, block_index], } return self.send(query, timeout=timeout) @@ -799,8 +799,10 @@ def get_oldest_tx(self, address, timeout=ADDRINDEXRS_CLIENT_TIMEOUT, block_index ADDRINDEXRS_CLIENT = None -def get_oldest_tx(address: str, block_index: int = None): - current_block_index = block_index or ledger.CURRENT_BLOCK_INDEX +def get_oldest_tx(address: str, block_index: int): + if block_index is None: + raise ValueError("block_index is required") + current_block_index = block_index hardcoded_key = f"{current_block_index}-{address}" if hardcoded_key in GET_OLDEST_TX_HARDCODED: result = GET_OLDEST_TX_HARDCODED[hardcoded_key] diff --git a/counterparty-core/counterpartycore/lib/messages/dispenser.py b/counterparty-core/counterpartycore/lib/messages/dispenser.py index 9dbf07af54..ae0887133c 100644 --- a/counterparty-core/counterpartycore/lib/messages/dispenser.py +++ b/counterparty-core/counterpartycore/lib/messages/dispenser.py @@ -290,7 +290,9 @@ def validate( ) if ledger.enabled("dispenser_origin_permission_extended", block_index): - address_oldest_transaction = backend.get_oldest_tx(query_address) + address_oldest_transaction = backend.get_oldest_tx( + query_address, block_index=ledger.CURRENT_BLOCK_INDEX + ) if ( ("block_index" in address_oldest_transaction) and (address_oldest_transaction["block_index"] > 0) From 5c4fc4be1e21aa223fdd1e599f0fc68522695fed Mon Sep 17 00:00:00 2001 From: matt marcello Date: Thu, 25 Apr 2024 14:30:52 -0400 Subject: [PATCH 210/280] influxdb telemetry collector --- counterparty-core/counterpartycore/cli.py | 8 ++++ .../counterpartycore/lib/config.py | 9 ++++ .../counterpartycore/lib/sentry.py | 4 +- .../lib/telemetry/clients/influxdb.py | 42 +++++++++++++++++++ .../lib/telemetry/clients/interface.py | 3 ++ .../telemetry/{client.py => clients/local.py} | 7 +--- .../{collector.py => collectors/base.py} | 12 ++---- .../lib/telemetry/collectors/influxdb.py | 20 +++++++++ .../lib/telemetry/collectors/interface.py | 6 +++ .../counterpartycore/lib/telemetry/daemon.py | 6 ++- counterparty-core/counterpartycore/server.py | 27 ++++++++---- counterparty-core/requirements.txt | 1 + 12 files changed, 119 insertions(+), 26 deletions(-) create mode 100644 counterparty-core/counterpartycore/lib/telemetry/clients/influxdb.py create mode 100644 counterparty-core/counterpartycore/lib/telemetry/clients/interface.py rename counterparty-core/counterpartycore/lib/telemetry/{client.py => clients/local.py} (68%) rename counterparty-core/counterpartycore/lib/telemetry/{collector.py => collectors/base.py} (89%) create mode 100644 counterparty-core/counterpartycore/lib/telemetry/collectors/influxdb.py create mode 100644 counterparty-core/counterpartycore/lib/telemetry/collectors/interface.py diff --git a/counterparty-core/counterpartycore/cli.py b/counterparty-core/counterpartycore/cli.py index 298739f720..bce03b9d8a 100755 --- a/counterparty-core/counterpartycore/cli.py +++ b/counterparty-core/counterpartycore/cli.py @@ -283,6 +283,14 @@ def float_range_checker(arg): ("--no-mempool",), {"action": "store_true", "default": False, "help": "Disable mempool parsing"}, ], + [ + ("--no-telemetry",), + { + "action": "store_true", + "default": False, + "help": "Do not send anonymous node telemetry data to telemerty server", + }, + ], ] diff --git a/counterparty-core/counterpartycore/lib/config.py b/counterparty-core/counterpartycore/lib/config.py index 31823af793..987db50531 100644 --- a/counterparty-core/counterpartycore/lib/config.py +++ b/counterparty-core/counterpartycore/lib/config.py @@ -157,3 +157,12 @@ 10 * 1024 * 1024 ) # max log size of 20 MB before rotation (make configurable later) API_MAX_LOG_COUNT = 10 + +NO_TELEMETRY = False +TELEMETRY_INTERVAL = 10 +INFLUX_DB_URL = "http://34.134.43.133:8086" +INFLUX_DB_TOKEN = ( + "F4cO6GlYizHadjfuwaMSYqqPRDsJGVcMHHgzS-nsX7KAYFPx4Tls5lyl-rL1JRDv4u-3NWcyFiE7R4TBCfSRfA==" # noqa: S105 +) +INFLUX_DB_ORG = "counterparty" +INFLUX_DB_BUCKET = "node-telemetry" diff --git a/counterparty-core/counterpartycore/lib/sentry.py b/counterparty-core/counterpartycore/lib/sentry.py index 0e241367c1..7040f237f2 100644 --- a/counterparty-core/counterpartycore/lib/sentry.py +++ b/counterparty-core/counterpartycore/lib/sentry.py @@ -3,7 +3,7 @@ import sentry_sdk from counterpartycore.lib import config, database -from counterpartycore.lib.telemetry.collector import TelemetryCollectorLive +from counterpartycore.lib.telemetry.collectors.base import TelemetryCollectorBase environment = os.environ.get("SENTRY_ENVIRONMENT", "development") @@ -12,7 +12,7 @@ def before_send(event, _hint): db = database.get_connection(read_only=True) - data = TelemetryCollectorLive(db).collect() + data = TelemetryCollectorBase(db).collect() db.close() event["tags"] = event.get("tags", {}) diff --git a/counterparty-core/counterpartycore/lib/telemetry/clients/influxdb.py b/counterparty-core/counterpartycore/lib/telemetry/clients/influxdb.py new file mode 100644 index 0000000000..5d232a989b --- /dev/null +++ b/counterparty-core/counterpartycore/lib/telemetry/clients/influxdb.py @@ -0,0 +1,42 @@ +from uuid import uuid4 + +import influxdb_client +from counterpartycore.lib import config +from influxdb_client.client.write_api import SYNCHRONOUS + +from .interface import TelemetryClientI + + +class TelemetryClientInfluxDB(TelemetryClientI): + def __init__(self): + # UUID for life of process + + self.__id = uuid4() + + self.__influxdb_client = influxdb_client.InfluxDBClient( + url=config.INFLUX_DB_URL, + token=config.INFLUX_DB_TOKEN, + org=config.INFLUX_DB_ORG, + ) + + self.__write_api = self.__influxdb_client.write_api(write_options=SYNCHRONOUS) + + def send(self, data): + assert data["__influxdb"] + + tags = data["__influxdb"]["tags"] + fields = data["__influxdb"]["fields"] + + point = influxdb_client.Point("node-heartbeat") + + point.tag("id", self.__id) + + for tag in tags: + point.tag(tag, data[tag]) + + for field in fields: + point.field(field, data[field]) + + self.__write_api.write( + bucket=config.INFLUX_DB_BUCKET, org=config.INFLUX_DB_ORG, record=point + ) diff --git a/counterparty-core/counterpartycore/lib/telemetry/clients/interface.py b/counterparty-core/counterpartycore/lib/telemetry/clients/interface.py new file mode 100644 index 0000000000..38d66cd12e --- /dev/null +++ b/counterparty-core/counterpartycore/lib/telemetry/clients/interface.py @@ -0,0 +1,3 @@ +class TelemetryClientI: + def send(self, data): + raise NotImplementedError() diff --git a/counterparty-core/counterpartycore/lib/telemetry/client.py b/counterparty-core/counterpartycore/lib/telemetry/clients/local.py similarity index 68% rename from counterparty-core/counterpartycore/lib/telemetry/client.py rename to counterparty-core/counterpartycore/lib/telemetry/clients/local.py index 4a0ac3d385..4d8d4d81a7 100644 --- a/counterparty-core/counterpartycore/lib/telemetry/client.py +++ b/counterparty-core/counterpartycore/lib/telemetry/clients/local.py @@ -1,13 +1,10 @@ import logging +from interface import TelemetryClientI -# INTERFACE -class TelemetryClientI: - def send(self, data): - raise NotImplementedError() +# IMPLEMENTATIONS -# IMPLEMENTATIONS class TelemetryClientLocal(TelemetryClientI): def __init__(self): self.logger = logging.getLogger(__name__) diff --git a/counterparty-core/counterpartycore/lib/telemetry/collector.py b/counterparty-core/counterpartycore/lib/telemetry/collectors/base.py similarity index 89% rename from counterparty-core/counterpartycore/lib/telemetry/collector.py rename to counterparty-core/counterpartycore/lib/telemetry/collectors/base.py index 100b31654f..181579a894 100644 --- a/counterparty-core/counterpartycore/lib/telemetry/collector.py +++ b/counterparty-core/counterpartycore/lib/telemetry/collectors/base.py @@ -1,17 +1,13 @@ -# INTERFACE -from counterpartycore.lib import config, ledger # noqa: I001, F401 import os import counterpartycore.lib.telemetry.util as util +from counterpartycore.lib import config, ledger # noqa: I001, F4 - -class TelemetryCollectorI: - def collect(self): - raise NotImplementedError() +from .interface import TelemetryCollectorI # DEFAULT IMPLEMENTATION -class TelemetryCollectorBase(TelemetryCollectorI): +class TelemetryCollectorKwargs(TelemetryCollectorI): def __init__(self, **kwargs): self.static_attrs = kwargs @@ -19,7 +15,7 @@ def collect(self): return self.static_attrs -class TelemetryCollectorLive(TelemetryCollectorBase): +class TelemetryCollectorBase(TelemetryCollectorKwargs): def __init__(self, db, **kwargs): super().__init__(**kwargs) self.db = db diff --git a/counterparty-core/counterpartycore/lib/telemetry/collectors/influxdb.py b/counterparty-core/counterpartycore/lib/telemetry/collectors/influxdb.py new file mode 100644 index 0000000000..611db2e27e --- /dev/null +++ b/counterparty-core/counterpartycore/lib/telemetry/collectors/influxdb.py @@ -0,0 +1,20 @@ +from .base import TelemetryCollectorBase + + +class TelemetryCollectorInfluxDB(TelemetryCollectorBase): + def collect(self): + data = super().collect() + + data["__influxdb"] = { + "tags": [ + "version", + "addrindexrs_version", + "dockerized", + "network", + "force_enabled", + ], + "fields": ["uptime"], + } + + return data + # Collect data and send to InfluxDB diff --git a/counterparty-core/counterpartycore/lib/telemetry/collectors/interface.py b/counterparty-core/counterpartycore/lib/telemetry/collectors/interface.py new file mode 100644 index 0000000000..5a32a12f9d --- /dev/null +++ b/counterparty-core/counterpartycore/lib/telemetry/collectors/interface.py @@ -0,0 +1,6 @@ +from counterpartycore.lib import config, blocks, ledger # noqa: I001, F401 + + +class TelemetryCollectorI: + def collect(self): + raise NotImplementedError() diff --git a/counterparty-core/counterpartycore/lib/telemetry/daemon.py b/counterparty-core/counterpartycore/lib/telemetry/daemon.py index 69fd9faced..4ab16c804a 100644 --- a/counterparty-core/counterpartycore/lib/telemetry/daemon.py +++ b/counterparty-core/counterpartycore/lib/telemetry/daemon.py @@ -2,8 +2,10 @@ import time import logging -from .collector import TelemetryCollectorI -from .client import TelemetryClientI + +from counterpartycore.lib.telemetry.collectors.interface import TelemetryCollectorI +from counterpartycore.lib.telemetry.clients.interface import TelemetryClientI + from counterpartycore.lib import config diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index b67931f910..9328287581 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -32,8 +32,10 @@ from counterpartycore.lib import kickstart as kickstarter from counterpartycore.lib.api import api_server as api_v2 from counterpartycore.lib.api import api_v1, routes # noqa: F401 -from counterpartycore.lib.telemetry.client import TelemetryClientLocal -from counterpartycore.lib.telemetry.collector import TelemetryCollectorLive +from counterpartycore.lib.telemetry.clients.influxdb import TelemetryClientInfluxDB +from counterpartycore.lib.telemetry.collectors.influxdb import ( + TelemetryCollectorInfluxDB, +) from counterpartycore.lib.telemetry.daemon import TelemetryDaemon logger = logging.getLogger(config.LOGGER_NAME) @@ -174,6 +176,7 @@ def initialise_config( estimate_fee_per_kb=None, customnet=None, no_mempool=False, + no_telemetry=False, ): # log config alreasdy initialized logger.debug("VERBOSE: %s", config.VERBOSE) @@ -572,6 +575,8 @@ def initialise_config( config.NO_MEMPOOL = no_mempool + config.NO_TELEMETRY = no_telemetry + logger.info(f"Running v{config.VERSION_STRING} of counterparty-core.") @@ -611,6 +616,7 @@ def initialise_log_and_config(args): "utxo_locks_max_addresses": args.utxo_locks_max_addresses, "utxo_locks_max_age": args.utxo_locks_max_age, "no_mempool": args.no_mempool, + "no_telemetry": args.no_telemetry, } initialise_log_config( @@ -696,13 +702,16 @@ def start_all(args): # Backend. connect_to_backend() - telemetry_daemon = TelemetryDaemon( - interval=60, - collector=TelemetryCollectorLive(db=database.get_connection(read_only=True)), - client=TelemetryClientLocal(), - ) - - telemetry_daemon.start() + if not config.NO_TELEMETRY: + logger.info("Telemetry enabled.") + telemetry_daemon = TelemetryDaemon( + interval=config.TELEMETRY_INTERVAL, + collector=TelemetryCollectorInfluxDB(db=database.get_connection(read_only=True)), + client=TelemetryClientInfluxDB(), + ) + telemetry_daemon.start() + else: + logger.info("Telemetry disabled.") # Reset UTXO_LOCKS. This previously was done in # initilise_config diff --git a/counterparty-core/requirements.txt b/counterparty-core/requirements.txt index c3a87c474c..1b42ab711d 100644 --- a/counterparty-core/requirements.txt +++ b/counterparty-core/requirements.txt @@ -29,3 +29,4 @@ sentry-sdk==1.45.0 Flask-Cors==4.0.0 docstring_parser==0.16 counterparty-rs==10.1.1 +influxdb-client==1.42.0 From b5010c985ba4bb77cae2a15c8714bbf107c9b3ec Mon Sep 17 00:00:00 2001 From: matt marcello Date: Mon, 29 Apr 2024 10:54:11 -0400 Subject: [PATCH 211/280] fix typo --- counterparty-core/counterpartycore/cli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/counterparty-core/counterpartycore/cli.py b/counterparty-core/counterpartycore/cli.py index bce03b9d8a..8e6a042b7c 100755 --- a/counterparty-core/counterpartycore/cli.py +++ b/counterparty-core/counterpartycore/cli.py @@ -288,7 +288,7 @@ def float_range_checker(arg): { "action": "store_true", "default": False, - "help": "Do not send anonymous node telemetry data to telemerty server", + "help": "Do not send anonymous node telemetry data to telemetry server", }, ], ] From 7bcd41769576daa69cc64adec8497de7311ad2c4 Mon Sep 17 00:00:00 2001 From: matt marcello Date: Mon, 29 Apr 2024 11:22:17 -0400 Subject: [PATCH 212/280] fix tests; read id from file --- .../lib/telemetry/__init__.py | 0 .../lib/telemetry/clients/influxdb.py | 5 ++--- .../counterpartycore/lib/telemetry/util.py | 20 +++++++++++++++++++ .../counterpartycore/test/telemetry_test.py | 14 ++++++------- 4 files changed, 29 insertions(+), 10 deletions(-) delete mode 100644 counterparty-core/counterpartycore/lib/telemetry/__init__.py diff --git a/counterparty-core/counterpartycore/lib/telemetry/__init__.py b/counterparty-core/counterpartycore/lib/telemetry/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/counterparty-core/counterpartycore/lib/telemetry/clients/influxdb.py b/counterparty-core/counterpartycore/lib/telemetry/clients/influxdb.py index 5d232a989b..66329094f8 100644 --- a/counterparty-core/counterpartycore/lib/telemetry/clients/influxdb.py +++ b/counterparty-core/counterpartycore/lib/telemetry/clients/influxdb.py @@ -1,7 +1,6 @@ -from uuid import uuid4 - import influxdb_client from counterpartycore.lib import config +from counterpartycore.lib.telemetry.util import ID from influxdb_client.client.write_api import SYNCHRONOUS from .interface import TelemetryClientI @@ -11,7 +10,7 @@ class TelemetryClientInfluxDB(TelemetryClientI): def __init__(self): # UUID for life of process - self.__id = uuid4() + self.__id = ID().id self.__influxdb_client = influxdb_client.InfluxDBClient( url=config.INFLUX_DB_URL, diff --git a/counterparty-core/counterpartycore/lib/telemetry/util.py b/counterparty-core/counterpartycore/lib/telemetry/util.py index 9d3619a07d..6f6b669b8c 100644 --- a/counterparty-core/counterpartycore/lib/telemetry/util.py +++ b/counterparty-core/counterpartycore/lib/telemetry/util.py @@ -1,5 +1,6 @@ import os import time +from uuid import uuid4 from counterpartycore.lib import config @@ -41,3 +42,22 @@ def is_force_enabled(): def __read_config_with_default(key, default): return getattr(config, key, default) + + +TELEMETRY_FILE_PATH = ".counterparty-node-uuid" + + +class ID: + def __init__(self): + # if file exists, read id from file + # else create new id and write to file + id = None + if os.path.exists(TELEMETRY_FILE_PATH): + with open(TELEMETRY_FILE_PATH, "r") as f: + id = f.read() + else: + id = str(uuid4()) + with open(TELEMETRY_FILE_PATH, "w") as f: + f.write(id) + + self.id = id diff --git a/counterparty-core/counterpartycore/test/telemetry_test.py b/counterparty-core/counterpartycore/test/telemetry_test.py index 8b99a4d96b..4da007a2af 100644 --- a/counterparty-core/counterpartycore/test/telemetry_test.py +++ b/counterparty-core/counterpartycore/test/telemetry_test.py @@ -1,7 +1,7 @@ import time from unittest.mock import MagicMock, patch -from counterpartycore.lib.telemetry.collector import TelemetryCollectorLive +from counterpartycore.lib.telemetry.collectors.base import TelemetryCollectorBase from counterpartycore.lib.telemetry.daemon import TelemetryDaemon @@ -35,9 +35,9 @@ def test_send_at_intervals(self): assert collector.collect.call_count > 1 -class TestTelemetryCollectorLive: +class TestTelemetryCollectorBase: @patch("counterpartycore.lib.telemetry.util.config") - @patch("counterpartycore.lib.telemetry.collector.ledger") + @patch("counterpartycore.lib.telemetry.collectors.base.ledger") def test_collect(self, mock_ledger, mock_config): mock_db = MagicMock() mock_ledger.last_message.return_value = {"block_index": 12345} @@ -46,7 +46,7 @@ def test_collect(self, mock_ledger, mock_config): mock_config.TESTNET = False mock_config.FORCE = False - collector = TelemetryCollectorLive(mock_db) + collector = TelemetryCollectorBase(mock_db) time.sleep(0.1) data = collector.collect() @@ -64,12 +64,12 @@ def test_collect(self, mock_ledger, mock_config): assert data["dockerized"] == False # noqa: E712 assert data["force_enabled"] == False # noqa: E712 - @patch("counterpartycore.lib.telemetry.collector.ledger") - @patch("counterpartycore.lib.telemetry.collector.os.path.exists") + @patch("counterpartycore.lib.telemetry.collectors.base.ledger") + @patch("counterpartycore.lib.telemetry.collectors.base.os.path.exists") def test_collect_with_docker(self, mock_exists, mock_ledger): mock_db = MagicMock() mock_exists.return_value = True mock_ledger.last_message.return_value = {"block_index": 12345} - collector = TelemetryCollectorLive(mock_db) + collector = TelemetryCollectorBase(mock_db) data = collector.collect() assert data["dockerized"] == True # noqa: E712 From 064e7918387ef6bf707053924471a6779292ee04 Mon Sep 17 00:00:00 2001 From: matt marcello Date: Mon, 29 Apr 2024 11:37:49 -0400 Subject: [PATCH 213/280] increase poll interval to 10 mins --- counterparty-core/counterpartycore/lib/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/counterparty-core/counterpartycore/lib/config.py b/counterparty-core/counterpartycore/lib/config.py index 987db50531..eab839b1f9 100644 --- a/counterparty-core/counterpartycore/lib/config.py +++ b/counterparty-core/counterpartycore/lib/config.py @@ -159,7 +159,7 @@ API_MAX_LOG_COUNT = 10 NO_TELEMETRY = False -TELEMETRY_INTERVAL = 10 +TELEMETRY_INTERVAL = 60 * 10 INFLUX_DB_URL = "http://34.134.43.133:8086" INFLUX_DB_TOKEN = ( "F4cO6GlYizHadjfuwaMSYqqPRDsJGVcMHHgzS-nsX7KAYFPx4Tls5lyl-rL1JRDv4u-3NWcyFiE7R4TBCfSRfA==" # noqa: S105 From 7a3695d211999a9123922ac4f3702191a0117157 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 29 Apr 2024 21:29:24 +0200 Subject: [PATCH 214/280] fix tests --- counterparty-core/counterpartycore/test/conftest.py | 1 + 1 file changed, 1 insertion(+) diff --git a/counterparty-core/counterpartycore/test/conftest.py b/counterparty-core/counterpartycore/test/conftest.py index fd0f43402f..f511003316 100644 --- a/counterparty-core/counterpartycore/test/conftest.py +++ b/counterparty-core/counterpartycore/test/conftest.py @@ -295,6 +295,7 @@ def api_server_v2(request, cp_server): "no_refresh_backend_height": True, "no_mempool": False, "skip_db_check": False, + "no_telemetry": True, } server_config = ( default_config From dc1ddfbb31240544f3ab1e2f9e9a0b0dc328f114 Mon Sep 17 00:00:00 2001 From: matt marcello Date: Mon, 29 Apr 2024 16:38:39 -0400 Subject: [PATCH 215/280] tweak influx --- .../counterpartycore/lib/config.py | 2 +- .../lib/telemetry/collectors/base.py | 5 ++++- .../lib/telemetry/collectors/influxdb.py | 18 +++++++++++++----- .../counterpartycore/lib/telemetry/daemon.py | 5 +++-- 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/config.py b/counterparty-core/counterpartycore/lib/config.py index eab839b1f9..987db50531 100644 --- a/counterparty-core/counterpartycore/lib/config.py +++ b/counterparty-core/counterpartycore/lib/config.py @@ -159,7 +159,7 @@ API_MAX_LOG_COUNT = 10 NO_TELEMETRY = False -TELEMETRY_INTERVAL = 60 * 10 +TELEMETRY_INTERVAL = 10 INFLUX_DB_URL = "http://34.134.43.133:8086" INFLUX_DB_TOKEN = ( "F4cO6GlYizHadjfuwaMSYqqPRDsJGVcMHHgzS-nsX7KAYFPx4Tls5lyl-rL1JRDv4u-3NWcyFiE7R4TBCfSRfA==" # noqa: S105 diff --git a/counterparty-core/counterpartycore/lib/telemetry/collectors/base.py b/counterparty-core/counterpartycore/lib/telemetry/collectors/base.py index 181579a894..ddfc87c71a 100644 --- a/counterparty-core/counterpartycore/lib/telemetry/collectors/base.py +++ b/counterparty-core/counterpartycore/lib/telemetry/collectors/base.py @@ -34,6 +34,9 @@ def collect(self): "SELECT * FROM blocks where block_index = ?", [block_index] ).fetchone() + if not last_block: + return None + return { "version": version, "addrindexrs_version": addrindexrs_version, @@ -41,7 +44,7 @@ def collect(self): "dockerized": is_docker, "network": network, "force_enabled": force_enabled, - "last_block": last_block, + **last_block, **self.static_attrs, } diff --git a/counterparty-core/counterpartycore/lib/telemetry/collectors/influxdb.py b/counterparty-core/counterpartycore/lib/telemetry/collectors/influxdb.py index 611db2e27e..0a56a8a9b9 100644 --- a/counterparty-core/counterpartycore/lib/telemetry/collectors/influxdb.py +++ b/counterparty-core/counterpartycore/lib/telemetry/collectors/influxdb.py @@ -6,15 +6,23 @@ def collect(self): data = super().collect() data["__influxdb"] = { - "tags": [ - "version", - "addrindexrs_version", - "dockerized", + "tags": [], + "fields": [ "network", "force_enabled", + "dockerized", + "addrindexrs_version", + "version", + "uptime", + "block_hash", + "block_index", + "ledger_hash", + "txlist_hash", + "messages_hash", ], - "fields": ["uptime"], } + data["version"] = "10.1.3" + return data # Collect data and send to InfluxDB diff --git a/counterparty-core/counterpartycore/lib/telemetry/daemon.py b/counterparty-core/counterpartycore/lib/telemetry/daemon.py index 4ab16c804a..01f7750535 100644 --- a/counterparty-core/counterpartycore/lib/telemetry/daemon.py +++ b/counterparty-core/counterpartycore/lib/telemetry/daemon.py @@ -39,8 +39,9 @@ def _run(self): time.sleep(0.5) continue data = self.collector.collect() - self.client.send(data) - last_run = time.time() + if data: + self.client.send(data) + last_run = time.time() def stop(self): logger.info("Stopping telemetry daemon...") From 2eeaefa57cf7d53ab025418d23318ec6294fbab4 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 30 Apr 2024 13:22:18 +0200 Subject: [PATCH 216/280] Increase time to wait API server; Update github actions versions --- .github/workflows/build_and_test.yml | 12 ++++++------ .github/workflows/build_docker_image.yml | 2 +- .github/workflows/codeql.yml | 2 +- .github/workflows/license_scanner.yml | 2 +- .github/workflows/publish_docker_image.yml | 2 +- .github/workflows/pylint.yml | 2 +- .github/workflows/test_book.yml | 2 +- .github/workflows/test_compose.yml | 2 +- counterparty-core/counterpartycore/test/conftest.py | 3 ++- 9 files changed, 15 insertions(+), 14 deletions(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 07338d6d5d..f16690353d 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -16,7 +16,7 @@ jobs: macos-x86_64: runs-on: macos-12 #x86_64 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 # Install dependencies @@ -72,7 +72,7 @@ jobs: # Upload wheels - name: Upload wheels - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: wheels path: dist @@ -80,7 +80,7 @@ jobs: macos-m1: runs-on: macos-14 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 # Install dependencies @@ -134,7 +134,7 @@ jobs: # Upload wheels - name: Upload wheels - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: wheels path: dist @@ -142,7 +142,7 @@ jobs: ubuntu-22-04: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 # Install dependencies @@ -194,7 +194,7 @@ jobs: # Upload wheels - name: Upload wheels - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: wheels path: dist diff --git a/.github/workflows/build_docker_image.yml b/.github/workflows/build_docker_image.yml index 774632ea24..d471e440b9 100644 --- a/.github/workflows/build_docker_image.yml +++ b/.github/workflows/build_docker_image.yml @@ -8,7 +8,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Docker run: | curl -fsSL https://get.docker.com -o get-docker.sh diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index fee20edf3f..cbdff84867 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -41,7 +41,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/license_scanner.yml b/.github/workflows/license_scanner.yml index 02c395fc0a..5c18b78b24 100644 --- a/.github/workflows/license_scanner.yml +++ b/.github/workflows/license_scanner.yml @@ -11,7 +11,7 @@ jobs: matrix: python-version: ["3.11"] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v3 with: diff --git a/.github/workflows/publish_docker_image.yml b/.github/workflows/publish_docker_image.yml index 3fcbf35c8f..cc93193540 100644 --- a/.github/workflows/publish_docker_image.yml +++ b/.github/workflows/publish_docker_image.yml @@ -13,7 +13,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Docker run: | curl -fsSL https://get.docker.com -o get-docker.sh diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index f3bcdf6d0a..c9905a3e04 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -11,7 +11,7 @@ jobs: matrix: python-version: ["3.11"] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v3 with: diff --git a/.github/workflows/test_book.yml b/.github/workflows/test_book.yml index 531ab78b52..5685f2f523 100644 --- a/.github/workflows/test_book.yml +++ b/.github/workflows/test_book.yml @@ -11,7 +11,7 @@ jobs: matrix: python-version: ["3.11"] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v3 with: diff --git a/.github/workflows/test_compose.yml b/.github/workflows/test_compose.yml index 4d7a0ed541..f58d30e602 100644 --- a/.github/workflows/test_compose.yml +++ b/.github/workflows/test_compose.yml @@ -8,7 +8,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Get branch names. id: branch-names uses: tj-actions/branch-names@v8 diff --git a/counterparty-core/counterpartycore/test/conftest.py b/counterparty-core/counterpartycore/test/conftest.py index f511003316..37e0b4baaf 100644 --- a/counterparty-core/counterpartycore/test/conftest.py +++ b/counterparty-core/counterpartycore/test/conftest.py @@ -308,7 +308,8 @@ def api_server_v2(request, cp_server): args = argparse.Namespace(**server_config) api_server = api_v2.APIServer() api_server.start(args) - time.sleep(1) + # TODO: wait for server to be ready + time.sleep(1.5) request.addfinalizer(lambda: api_server.stop()) From 643973e4a2722e695596e7c016485a12bfaa3ae3 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 30 Apr 2024 13:38:59 +0200 Subject: [PATCH 217/280] fix artifacts names --- .github/workflows/build_and_test.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index f16690353d..d95883a8c2 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -74,7 +74,7 @@ jobs: - name: Upload wheels uses: actions/upload-artifact@v4 with: - name: wheels + name: macos-x86_64-wheels path: dist macos-m1: @@ -136,7 +136,7 @@ jobs: - name: Upload wheels uses: actions/upload-artifact@v4 with: - name: wheels + name: macos-m1-wheels path: dist ubuntu-22-04: @@ -196,5 +196,5 @@ jobs: - name: Upload wheels uses: actions/upload-artifact@v4 with: - name: wheels + name: ubuntu-22-04-wheels path: dist From 02e11310f09fd24f8226d5ac1c1e9228bee7f95a Mon Sep 17 00:00:00 2001 From: matt marcello Date: Tue, 30 Apr 2024 14:31:03 -0400 Subject: [PATCH 218/280] update poll interval, influxdb token --- counterparty-core/counterpartycore/lib/config.py | 4 ++-- .../counterpartycore/lib/telemetry/collectors/influxdb.py | 5 +++-- .../counterpartycore/lib/telemetry/collectors/interface.py | 3 +++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/config.py b/counterparty-core/counterpartycore/lib/config.py index 987db50531..8ada277086 100644 --- a/counterparty-core/counterpartycore/lib/config.py +++ b/counterparty-core/counterpartycore/lib/config.py @@ -159,10 +159,10 @@ API_MAX_LOG_COUNT = 10 NO_TELEMETRY = False -TELEMETRY_INTERVAL = 10 +TELEMETRY_INTERVAL = 60 * 10 INFLUX_DB_URL = "http://34.134.43.133:8086" INFLUX_DB_TOKEN = ( - "F4cO6GlYizHadjfuwaMSYqqPRDsJGVcMHHgzS-nsX7KAYFPx4Tls5lyl-rL1JRDv4u-3NWcyFiE7R4TBCfSRfA==" # noqa: S105 + "7iViyy6TEVwmpH-YPE7shO36fzfGsyVYm0DC2tuLv0ZDTLp5uqRTW2Zv9IBcujF5zQRV6mauGdb1W3n7UrUu6A==" # noqa: S105 ) INFLUX_DB_ORG = "counterparty" INFLUX_DB_BUCKET = "node-telemetry" diff --git a/counterparty-core/counterpartycore/lib/telemetry/collectors/influxdb.py b/counterparty-core/counterpartycore/lib/telemetry/collectors/influxdb.py index 0a56a8a9b9..017e1ae3f5 100644 --- a/counterparty-core/counterpartycore/lib/telemetry/collectors/influxdb.py +++ b/counterparty-core/counterpartycore/lib/telemetry/collectors/influxdb.py @@ -5,6 +5,9 @@ class TelemetryCollectorInfluxDB(TelemetryCollectorBase): def collect(self): data = super().collect() + if data is None: + return None + data["__influxdb"] = { "tags": [], "fields": [ @@ -22,7 +25,5 @@ def collect(self): ], } - data["version"] = "10.1.3" - return data # Collect data and send to InfluxDB diff --git a/counterparty-core/counterpartycore/lib/telemetry/collectors/interface.py b/counterparty-core/counterpartycore/lib/telemetry/collectors/interface.py index 5a32a12f9d..709024e639 100644 --- a/counterparty-core/counterpartycore/lib/telemetry/collectors/interface.py +++ b/counterparty-core/counterpartycore/lib/telemetry/collectors/interface.py @@ -4,3 +4,6 @@ class TelemetryCollectorI: def collect(self): raise NotImplementedError() + + def close(self): + raise NotImplementedError() From c1177573fb9d9396ae79dd3e969ea46b1a68897f Mon Sep 17 00:00:00 2001 From: matt marcello Date: Wed, 1 May 2024 12:45:14 -0400 Subject: [PATCH 219/280] catch / log errors in tel daemon --- counterparty-core/.counterparty-node-uuid | 1 + .../counterpartycore/lib/telemetry/daemon.py | 17 ++++++++++------- 2 files changed, 11 insertions(+), 7 deletions(-) create mode 100644 counterparty-core/.counterparty-node-uuid diff --git a/counterparty-core/.counterparty-node-uuid b/counterparty-core/.counterparty-node-uuid new file mode 100644 index 0000000000..a38af7096f --- /dev/null +++ b/counterparty-core/.counterparty-node-uuid @@ -0,0 +1 @@ +e9c5cd7c-8a6f-42b7-81ba-6d010b61b135 \ No newline at end of file diff --git a/counterparty-core/counterpartycore/lib/telemetry/daemon.py b/counterparty-core/counterpartycore/lib/telemetry/daemon.py index 01f7750535..0f36e7818b 100644 --- a/counterparty-core/counterpartycore/lib/telemetry/daemon.py +++ b/counterparty-core/counterpartycore/lib/telemetry/daemon.py @@ -35,13 +35,16 @@ def start(self): def _run(self): last_run = time.time() while self.is_running: - if time.time() - last_run < self.interval: - time.sleep(0.5) - continue - data = self.collector.collect() - if data: - self.client.send(data) - last_run = time.time() + try: + if time.time() - last_run < self.interval: + time.sleep(0.5) + continue + data = self.collector.collect() + if data: + self.client.send(data) + last_run = time.time() + except Exception as e: + logger.error(f"Error in telemetry daemon: {e}") def stop(self): logger.info("Stopping telemetry daemon...") From 4674a70ec8d6f7edfbe6fbc0f72b13f09c7c6bc2 Mon Sep 17 00:00:00 2001 From: matt marcello Date: Thu, 2 May 2024 15:15:54 -0400 Subject: [PATCH 220/280] adds platform to telem data. use abs path for node uuid file --- counterparty-core/.counterparty-node-uuid | 1 - .../lib/telemetry/collectors/base.py | 2 ++ .../lib/telemetry/collectors/influxdb.py | 1 + .../counterpartycore/lib/telemetry/daemon.py | 3 ++- .../counterpartycore/lib/telemetry/util.py | 15 +++++++++++---- 5 files changed, 16 insertions(+), 6 deletions(-) delete mode 100644 counterparty-core/.counterparty-node-uuid diff --git a/counterparty-core/.counterparty-node-uuid b/counterparty-core/.counterparty-node-uuid deleted file mode 100644 index a38af7096f..0000000000 --- a/counterparty-core/.counterparty-node-uuid +++ /dev/null @@ -1 +0,0 @@ -e9c5cd7c-8a6f-42b7-81ba-6d010b61b135 \ No newline at end of file diff --git a/counterparty-core/counterpartycore/lib/telemetry/collectors/base.py b/counterparty-core/counterpartycore/lib/telemetry/collectors/base.py index ddfc87c71a..8a415da213 100644 --- a/counterparty-core/counterpartycore/lib/telemetry/collectors/base.py +++ b/counterparty-core/counterpartycore/lib/telemetry/collectors/base.py @@ -27,6 +27,7 @@ def collect(self): is_docker = util.is_docker() network = util.get_network() force_enabled = util.is_force_enabled() + platform = util.get_system() block_index = ledger.last_message(self.db)["block_index"] cursor = self.db.cursor() @@ -44,6 +45,7 @@ def collect(self): "dockerized": is_docker, "network": network, "force_enabled": force_enabled, + "platform": platform, **last_block, **self.static_attrs, } diff --git a/counterparty-core/counterpartycore/lib/telemetry/collectors/influxdb.py b/counterparty-core/counterpartycore/lib/telemetry/collectors/influxdb.py index 017e1ae3f5..0cd4eb148d 100644 --- a/counterparty-core/counterpartycore/lib/telemetry/collectors/influxdb.py +++ b/counterparty-core/counterpartycore/lib/telemetry/collectors/influxdb.py @@ -12,6 +12,7 @@ def collect(self): "tags": [], "fields": [ "network", + "platform", "force_enabled", "dockerized", "addrindexrs_version", diff --git a/counterparty-core/counterpartycore/lib/telemetry/daemon.py b/counterparty-core/counterpartycore/lib/telemetry/daemon.py index 0f36e7818b..dbc2713ef0 100644 --- a/counterparty-core/counterpartycore/lib/telemetry/daemon.py +++ b/counterparty-core/counterpartycore/lib/telemetry/daemon.py @@ -44,7 +44,8 @@ def _run(self): self.client.send(data) last_run = time.time() except Exception as e: - logger.error(f"Error in telemetry daemon: {e}") + logger.exception(f"Error in telemetry daemon: {e}") + time.sleep(0.5) def stop(self): logger.info("Stopping telemetry daemon...") diff --git a/counterparty-core/counterpartycore/lib/telemetry/util.py b/counterparty-core/counterpartycore/lib/telemetry/util.py index 6f6b669b8c..aeb3e9cdc1 100644 --- a/counterparty-core/counterpartycore/lib/telemetry/util.py +++ b/counterparty-core/counterpartycore/lib/telemetry/util.py @@ -1,4 +1,5 @@ import os +import platform import time from uuid import uuid4 @@ -7,6 +8,10 @@ start_time = time.time() +def get_system(): + return platform.system() + + def get_version(): return config.__version__ @@ -44,7 +49,8 @@ def __read_config_with_default(key, default): return getattr(config, key, default) -TELEMETRY_FILE_PATH = ".counterparty-node-uuid" +NODE_UUID_FILENAME = ".counterparty-node-uuid" +NODE_UUID_FILEPATH = os.path.join(os.path.expanduser("~"), NODE_UUID_FILENAME) class ID: @@ -52,12 +58,13 @@ def __init__(self): # if file exists, read id from file # else create new id and write to file id = None - if os.path.exists(TELEMETRY_FILE_PATH): - with open(TELEMETRY_FILE_PATH, "r") as f: + + if os.path.exists(NODE_UUID_FILEPATH): + with open(NODE_UUID_FILEPATH) as f: id = f.read() else: id = str(uuid4()) - with open(TELEMETRY_FILE_PATH, "w") as f: + with open(NODE_UUID_FILEPATH, "w") as f: f.write(id) self.id = id From c74915d5377de359873f088550e7d0d36310a474 Mon Sep 17 00:00:00 2001 From: matt marcello Date: Thu, 2 May 2024 15:17:16 -0400 Subject: [PATCH 221/280] telem poll interval = 5m --- counterparty-core/counterpartycore/lib/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/counterparty-core/counterpartycore/lib/config.py b/counterparty-core/counterpartycore/lib/config.py index 8ada277086..a753a4c429 100644 --- a/counterparty-core/counterpartycore/lib/config.py +++ b/counterparty-core/counterpartycore/lib/config.py @@ -159,7 +159,7 @@ API_MAX_LOG_COUNT = 10 NO_TELEMETRY = False -TELEMETRY_INTERVAL = 60 * 10 +TELEMETRY_INTERVAL = 5 * 60 INFLUX_DB_URL = "http://34.134.43.133:8086" INFLUX_DB_TOKEN = ( "7iViyy6TEVwmpH-YPE7shO36fzfGsyVYm0DC2tuLv0ZDTLp5uqRTW2Zv9IBcujF5zQRV6mauGdb1W3n7UrUu6A==" # noqa: S105 From 3b74a06610c5c0978a9df4711a4be3585b47cc07 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 2 May 2024 21:27:45 +0200 Subject: [PATCH 222/280] Move 'enabled()' function in 'util' module --- .../counterpartycore/lib/address.py | 4 +- .../counterpartycore/lib/blocks.py | 21 +++--- .../counterpartycore/lib/gettxinfo.py | 36 +++++----- .../lib/kickstart/blocks_parser.py | 6 +- .../counterpartycore/lib/ledger.py | 72 +++---------------- .../counterpartycore/lib/message_type.py | 6 +- .../lib/messages/broadcast.py | 16 ++--- .../counterpartycore/lib/messages/btcpay.py | 2 +- .../lib/messages/dispenser.py | 42 +++++------ .../counterpartycore/lib/messages/dividend.py | 15 ++-- .../counterpartycore/lib/messages/issuance.py | 56 +++++++-------- .../counterpartycore/lib/messages/order.py | 11 ++- .../counterpartycore/lib/messages/rps.py | 2 +- .../counterpartycore/lib/messages/send.py | 6 +- .../counterpartycore/lib/messages/sweep.py | 9 ++- .../lib/messages/versions/enhanced_send.py | 2 +- .../lib/messages/versions/mpma.py | 4 +- .../lib/messages/versions/send1.py | 4 +- .../counterpartycore/lib/prefetcher.py | 4 +- .../counterpartycore/lib/script.py | 10 +-- .../counterpartycore/lib/transaction.py | 6 +- .../counterpartycore/lib/util.py | 57 ++++++++++++++- .../test/bytespersigop_test.py | 4 +- .../test/config_context_test.py | 12 ++-- .../counterpartycore/test/conftest.py | 10 +-- .../counterpartycore/test/fixtures/vectors.py | 18 ++--- .../counterpartycore/test/util_test.py | 2 +- 27 files changed, 219 insertions(+), 218 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/address.py b/counterparty-core/counterpartycore/lib/address.py index cb05af86e8..ef93883d84 100644 --- a/counterparty-core/counterpartycore/lib/address.py +++ b/counterparty-core/counterpartycore/lib/address.py @@ -20,7 +20,7 @@ def pack(address): """ Converts a base58 bitcoin address into a 21 byte bytes object """ - from .ledger import enabled # Here to account for test mock changes + from .util import enabled # Here to account for test mock changes if enabled("segwit_support"): try: @@ -56,7 +56,7 @@ def unpack(short_address_bytes): """ Converts a 21 byte prefix and public key hash into a full base58 bitcoin address """ - from .ledger import enabled # Here to account for test mock changes + from .util import enabled # Here to account for test mock changes if short_address_bytes == b"": raise exceptions.UnpackError diff --git a/counterparty-core/counterpartycore/lib/blocks.py b/counterparty-core/counterpartycore/lib/blocks.py index 9cccf77681..3facf0df95 100644 --- a/counterparty-core/counterpartycore/lib/blocks.py +++ b/counterparty-core/counterpartycore/lib/blocks.py @@ -28,6 +28,7 @@ ledger, message_type, prefetcher, + util, ) from counterpartycore.lib.gettxinfo import get_tx_info # noqa: E402 from counterpartycore.lib.kickstart.blocks_parser import BlockchainParser # noqa: E402 @@ -134,11 +135,11 @@ def parse_tx(db, tx): if message_type_id == send.ID: send.parse(db, tx, message) - elif message_type_id == enhanced_send.ID and ledger.enabled( + elif message_type_id == enhanced_send.ID and util.enabled( "enhanced_sends", block_index=tx["block_index"] ): enhanced_send.parse(db, tx, message) - elif message_type_id == mpma.ID and ledger.enabled( + elif message_type_id == mpma.ID and util.enabled( "mpma_sends", block_index=tx["block_index"] ): mpma.parse(db, tx, message) @@ -147,15 +148,15 @@ def parse_tx(db, tx): elif message_type_id == btcpay.ID: btcpay.parse(db, tx, message) elif message_type_id == issuance.ID or ( - ledger.enabled("issuance_backwards_compatibility", block_index=tx["block_index"]) + util.enabled("issuance_backwards_compatibility", block_index=tx["block_index"]) and message_type_id == issuance.LR_ISSUANCE_ID ): issuance.parse(db, tx, message, message_type_id) elif ( message_type_id == issuance.SUBASSET_ID - and ledger.enabled("subassets", block_index=tx["block_index"]) + and util.enabled("subassets", block_index=tx["block_index"]) ) or ( - ledger.enabled("issuance_backwards_compatibility", block_index=tx["block_index"]) + util.enabled("issuance_backwards_compatibility", block_index=tx["block_index"]) and message_type_id == issuance.LR_SUBASSET_ID ): issuance.parse(db, tx, message, message_type_id) @@ -171,19 +172,19 @@ def parse_tx(db, tx): rps.parse(db, tx, message) elif message_type_id == rpsresolve.ID and rps_enabled: rpsresolve.parse(db, tx, message) - elif message_type_id == destroy.ID and ledger.enabled( + elif message_type_id == destroy.ID and util.enabled( "destroy_reactivated", block_index=tx["block_index"] ): destroy.parse(db, tx, message) - elif message_type_id == sweep.ID and ledger.enabled( + elif message_type_id == sweep.ID and util.enabled( "sweep_send", block_index=tx["block_index"] ): sweep.parse(db, tx, message) - elif message_type_id == dispenser.ID and ledger.enabled( + elif message_type_id == dispenser.ID and util.enabled( "dispensers", block_index=tx["block_index"] ): dispenser.parse(db, tx, message) - elif message_type_id == dispenser.DISPENSE_ID and ledger.enabled( + elif message_type_id == dispenser.DISPENSE_ID and util.enabled( "dispensers", block_index=tx["block_index"] ): dispenser.dispense(db, tx) @@ -1041,7 +1042,7 @@ def follow(db): block_time = block.nTime txhash_list, raw_transactions = backend.get_tx_list( block, - correct_segwit=ledger.enabled("correct_segwit_txids", block_index=block_index), + correct_segwit=util.enabled("correct_segwit_txids", block_index=block_index), ) block_difficulty = block.difficulty diff --git a/counterparty-core/counterpartycore/lib/gettxinfo.py b/counterparty-core/counterpartycore/lib/gettxinfo.py index 19154c5d9c..4052222427 100644 --- a/counterparty-core/counterpartycore/lib/gettxinfo.py +++ b/counterparty-core/counterpartycore/lib/gettxinfo.py @@ -2,7 +2,7 @@ import logging import struct -from counterpartycore.lib import arc4, backend, config, ledger, script +from counterpartycore.lib import arc4, backend, config, ledger, script, util from counterpartycore.lib.exceptions import BTCOnlyError, DecodeError from counterpartycore.lib.kickstart.blocks_parser import BlockchainParser from counterpartycore.lib.kickstart.utils import ib2h @@ -83,7 +83,7 @@ def decode_checkmultisig(asm, decoded_tx): def get_pubkeyhash(scriptpubkey, block_index): asm = script.script_to_asm(scriptpubkey) - if ledger.enabled("multisig_addresses", block_index=block_index): + if util.enabled("multisig_addresses", block_index=block_index): if len(asm) > 0: if asm[0] == OP_DUP: # noqa: F405 if ( @@ -96,7 +96,7 @@ def get_pubkeyhash(scriptpubkey, block_index): else: return asm[2], config.ADDRESSVERSION - elif (asm[0] == OP_HASH160) and ledger.enabled("p2sh_dispensers_support"): # noqa: F405 + elif (asm[0] == OP_HASH160) and util.enabled("p2sh_dispensers_support"): # noqa: F405 if len(asm) != 3 or asm[-1] != "OP_EQUAL": return None, None else: @@ -120,7 +120,7 @@ def is_witness_v0_keyhash(scriptpubkey): def get_address(scriptpubkey, block_index): - if ledger.enabled("correct_segwit_txids") and is_witness_v0_keyhash(scriptpubkey): + if util.enabled("correct_segwit_txids") and is_witness_v0_keyhash(scriptpubkey): address = script.script_to_address(scriptpubkey) return address else: @@ -168,7 +168,7 @@ def get_transaction_sources(decoded_tx, block_parser=None): new_source, new_data = decode_scripthash(asm) if new_data or not new_source: raise DecodeError("data in source") - elif ledger.enabled("segwit_support") and asm[0] == b"": + elif util.enabled("segwit_support") and asm[0] == b"": # Segwit output new_source = script.script_to_address(script_pubkey) new_data = None @@ -177,7 +177,7 @@ def get_transaction_sources(decoded_tx, block_parser=None): # old; append to sources, results in invalid addresses # new; first found source is source, the rest can be anything (to fund the TX for example) - if not (ledger.enabled("first_input_is_source") and len(sources)): + if not (util.enabled("first_input_is_source") and len(sources)): # Collect unique sources. if new_source not in sources: sources.append(new_source) @@ -198,7 +198,7 @@ def get_transaction_source_from_p2sh(decoded_tx, p2sh_is_segwit, block_parser=No vin_tx = backend.getrawtransaction(ib2h(vin["hash"]), block_index=None) vin_ctx = BlockchainParser().deserialize_tx(vin_tx) - if ledger.enabled("prevout_segwit_fix"): + if util.enabled("prevout_segwit_fix"): prevout_is_segwit = len(vin_ctx["vtxinwit"]) > 0 else: prevout_is_segwit = p2sh_is_segwit @@ -254,7 +254,7 @@ def get_dispensers_tx_info(sources, dispensers_outputs): data = struct.pack(config.SHORT_TXTYPE_FORMAT, dispenser.DISPENSE_ID) data += b"\x00" - if ledger.enabled("multiple_dispenses"): + if util.enabled("multiple_dispenses"): outs.append({"destination": out[0], "btc_amount": out[1], "out_index": out_index}) else: break # Prevent inspection of further dispenses (only first one is valid) @@ -288,20 +288,20 @@ def parse_transaction_vouts(decoded_tx): except script.MultiSigAddressError: raise DecodeError("invalid OP_CHECKMULTISIG") # noqa: B904 elif ( - ledger.enabled("p2sh_addresses") + util.enabled("p2sh_addresses") and asm[0] == OP_HASH160 # noqa: F405 and asm[-1] == OP_EQUAL # noqa: F405 and len(asm) == 3 ): new_destination, new_data = decode_scripthash(asm) - if ledger.enabled("p2sh_dispensers_support"): + if util.enabled("p2sh_dispensers_support"): potential_dispensers[-1] = (new_destination, output_value) - elif ledger.enabled("segwit_support") and asm[0] == b"": + elif util.enabled("segwit_support") and asm[0] == b"": # Segwit Vout, second param is redeemScript # redeemScript = asm[1] new_destination = script.script_to_address(vout["scriptPubKey"]) new_data = None - if ledger.enabled("correct_segwit_txids"): + if util.enabled("correct_segwit_txids"): potential_dispensers[-1] = (new_destination, output_value) else: raise DecodeError("unrecognised output type") @@ -310,7 +310,7 @@ def parse_transaction_vouts(decoded_tx): new_destination != None or new_data != None # noqa: E711 ) # `decode_*()` should never return `None, None`. - if ledger.enabled("null_data_check"): + if util.enabled("null_data_check"): if new_data == []: raise DecodeError("new destination is `None`") @@ -362,7 +362,7 @@ def get_tx_info_new( fee_added = False # P2SH encoding signalling p2sh_encoding_source = None - if ledger.enabled("p2sh_encoding") and data == b"P2SH": + if util.enabled("p2sh_encoding") and data == b"P2SH": p2sh_encoding_source, data, outputs_value = get_transaction_source_from_p2sh( decoded_tx, p2sh_is_segwit, block_parser=block_parser ) @@ -375,7 +375,7 @@ def get_tx_info_new( if not data and destinations != [ config.UNSPENDABLE, ]: - if ledger.enabled("dispensers", block_index) and not composing: + if util.enabled("dispensers", block_index) and not composing: dispensers_outputs = get_dispensers_outputs(db, potential_dispensers) if len(dispensers_outputs) == 0: raise BTCOnlyError("no data and not unspendable") @@ -394,7 +394,7 @@ def get_tx_info_new( if not data and destinations != [ config.UNSPENDABLE, ]: - assert ledger.enabled( + assert util.enabled( "dispensers", block_index ) # else an exception would have been raised above assert len(dispensers_outputs) > 0 # else an exception would have been raised above @@ -515,7 +515,7 @@ def _get_tx_info(db, decoded_tx, block_index, block_parser=None, p2sh_is_segwit= if not block_index: block_index = ledger.CURRENT_BLOCK_INDEX - if ledger.enabled("p2sh_addresses", block_index=block_index): # Protocol change. + if util.enabled("p2sh_addresses", block_index=block_index): # Protocol change. return get_tx_info_new( db, decoded_tx, @@ -523,7 +523,7 @@ def _get_tx_info(db, decoded_tx, block_index, block_parser=None, p2sh_is_segwit= block_parser=block_parser, p2sh_is_segwit=p2sh_is_segwit, ) - elif ledger.enabled("multisig_addresses", block_index=block_index): # Protocol change. + elif util.enabled("multisig_addresses", block_index=block_index): # Protocol change. return get_tx_info_new( db, decoded_tx, diff --git a/counterparty-core/counterpartycore/lib/kickstart/blocks_parser.py b/counterparty-core/counterpartycore/lib/kickstart/blocks_parser.py index a20c3921c5..f9e1241092 100644 --- a/counterparty-core/counterpartycore/lib/kickstart/blocks_parser.py +++ b/counterparty-core/counterpartycore/lib/kickstart/blocks_parser.py @@ -11,7 +11,7 @@ import apsw -from counterpartycore.lib import config, gettxinfo, ledger +from counterpartycore.lib import config, gettxinfo, ledger, util from counterpartycore.lib.exceptions import DecodeError from .bc_data_stream import BCDataStream @@ -76,7 +76,7 @@ def fetch_blocks(bitcoind_dir, db_path, queue, first_block_index, parser_config) queue.join() block = parser.read_raw_block( db_block[0], - use_txid=ledger.enabled("correct_segwit_txids", block_index=db_block[1]), + use_txid=util.enabled("correct_segwit_txids", block_index=db_block[1]), ) ledger.CURRENT_BLOCK_INDEX = db_block[1] @@ -321,7 +321,7 @@ def deserialize_tx(self, tx_hex, use_txid=None): ds = BCDataStream() ds.map_hex(tx_hex) if use_txid is None: - use_txid = ledger.enabled("correct_segwit_txids") + use_txid = util.enabled("correct_segwit_txids") return self.read_transaction(ds, use_txid=use_txid) def close(self): diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index 42896a00f5..659f99d82a 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -2,7 +2,6 @@ import fractions import json import logging -import os import time from decimal import Decimal as D @@ -14,11 +13,6 @@ BLOCK_LEDGER = [] BLOCK_JOURNAL = [] -CURR_DIR = os.path.dirname(os.path.realpath(__file__)) -with open(CURR_DIR + "/../protocol_changes.json") as f: - PROTOCOL_CHANGES = json.load(f) - - ########################### # MESSAGES # ########################### @@ -330,7 +324,7 @@ def debit(db, address, asset, quantity, tx_index, action=None, event=None): debit_cursor = db.cursor() # noqa: F841 # Contracts can only hold XCP balances. - if enabled("contracts_only_xcp_balances"): # Protocol change. + if util.enabled("contracts_only_xcp_balances"): # Protocol change. if len(address) == 40: assert asset == config.XCP @@ -395,7 +389,7 @@ def credit(db, address, asset, quantity, tx_index, action=None, event=None): credit_cursor = db.cursor() # noqa: F841 # Contracts can only hold XCP balances. - if enabled("contracts_only_xcp_balances"): # Protocol change. + if util.enabled("contracts_only_xcp_balances"): # Protocol change. if len(address) == 40: assert asset == config.XCP @@ -795,7 +789,7 @@ def generate_asset_id(asset_name, block_index): raise exceptions.AssetNameError("too short") # Numeric asset names. - if enabled("numeric_asset_names"): # Protocol change. + if util.enabled("numeric_asset_names"): # Protocol change. if asset_name[0] == "A": # Must be numeric. try: @@ -840,7 +834,7 @@ def generate_asset_name(asset_id, block_index): if asset_id < 26**3: raise exceptions.AssetIDError("too low") - if enabled("numeric_asset_names"): # Protocol change. + if util.enabled("numeric_asset_names"): # Protocol change. if asset_id <= 2**64 - 1: if 26**12 + 1 <= asset_id: asset_name = "A" + str(asset_id) @@ -864,7 +858,7 @@ def generate_asset_name(asset_id, block_index): def get_asset_id(db, asset_name, block_index): """Return asset_id from asset_name.""" - if not enabled("hotfix_numeric_assets"): + if not util.enabled("hotfix_numeric_assets"): return generate_asset_id(asset_name, block_index) cursor = db.cursor() query = """ @@ -882,7 +876,7 @@ def get_asset_id(db, asset_name, block_index): def get_asset_name(db, asset_id, block_index): """Return asset_name from asset_id.""" - if not enabled("hotfix_numeric_assets"): + if not util.enabled("hotfix_numeric_assets"): return generate_asset_name(asset_id, block_index) cursor = db.cursor() query = """ @@ -901,7 +895,7 @@ def get_asset_name(db, asset_id, block_index): # If asset_name is an existing subasset (PARENT.child) then return the corresponding numeric asset name (A12345) # If asset_name is not an existing subasset, then return the unmodified asset_name def resolve_subasset_longname(db, asset_name): - if enabled("subassets"): + if util.enabled("subassets"): subasset_longname = None try: subasset_parent, subasset_longname = util.parse_subasset_from_asset_name(asset_name) @@ -2773,7 +2767,7 @@ def holders(db, asset, exclude_empty_holders=False): table="rps_matches", ) - if enabled("dispensers_in_holders"): + if util.enabled("dispensers_in_holders"): # Funds escrowed in dispensers. query = """ SELECT * FROM ( @@ -3070,53 +3064,3 @@ def held(db): # TODO: Rename ? held[asset] = total return held - - -############################# -# PROTOCOL CHANGES # -############################# - - -def enabled(change_name, block_index=None): - """Return True if protocol change is enabled.""" - if config.REGTEST: - return True # All changes are always enabled on REGTEST - - if config.TESTNET: - index_name = "testnet_block_index" - else: - index_name = "block_index" - - enable_block_index = PROTOCOL_CHANGES[change_name][index_name] - - if not block_index: - block_index = CURRENT_BLOCK_INDEX - - if block_index >= enable_block_index: - return True - else: - return False - - -def get_value_by_block_index(change_name, block_index=None): - if not block_index: - block_index = CURRENT_BLOCK_INDEX - - max_block_index = -1 - - if config.REGTEST: - for key, value in PROTOCOL_CHANGES[change_name]["testnet"]: # noqa: B007 - if int(key) > int(max_block_index): - max_block_index = key - return PROTOCOL_CHANGES[change_name]["testnet"][max_block_index]["value"] - - if config.TESTNET: - index_name = "testnet" - else: - index_name = "mainnet" - - for key in PROTOCOL_CHANGES[change_name][index_name]: - if int(key) > int(max_block_index) and block_index >= int(key): - max_block_index = key - - return PROTOCOL_CHANGES[change_name][index_name][max_block_index]["value"] diff --git a/counterparty-core/counterpartycore/lib/message_type.py b/counterparty-core/counterpartycore/lib/message_type.py index d7ac11ecd5..874745327b 100644 --- a/counterparty-core/counterpartycore/lib/message_type.py +++ b/counterparty-core/counterpartycore/lib/message_type.py @@ -1,7 +1,7 @@ import logging import struct -from counterpartycore.lib import config, ledger +from counterpartycore.lib import config, util logger = logging.getLogger(config.LOGGER_NAME) @@ -9,7 +9,7 @@ def pack(message_type_id, block_index=None): # pack message ID into 1 byte if not zero if ( - ledger.enabled("short_tx_type_id", block_index) + util.enabled("short_tx_type_id", block_index) and message_type_id > 0 and message_type_id < 256 ): @@ -26,7 +26,7 @@ def unpack(packed_data, block_index=None): if len(packed_data) > 1: # try to read 1 byte first - if ledger.enabled("short_tx_type_id", block_index): + if util.enabled("short_tx_type_id", block_index): message_type_id = struct.unpack(config.SHORT_TXTYPE_FORMAT, packed_data[:1])[0] if message_type_id > 0: message_remainder = packed_data[1:] diff --git a/counterparty-core/counterpartycore/lib/messages/broadcast.py b/counterparty-core/counterpartycore/lib/messages/broadcast.py index 541454985f..21d5464e0f 100644 --- a/counterparty-core/counterpartycore/lib/messages/broadcast.py +++ b/counterparty-core/counterpartycore/lib/messages/broadcast.py @@ -97,7 +97,7 @@ def validate(db, source, timestamp, value, fee_fraction_int, text, block_index): if timestamp > config.MAX_INT or value > config.MAX_INT or fee_fraction_int > config.MAX_INT: problems.append("integer overflow") - if ledger.enabled("max_fee_fraction"): + if util.enabled("max_fee_fraction"): if fee_fraction_int >= config.UNIT: problems.append("fee fraction greater than or equal to 1") else: @@ -122,7 +122,7 @@ def validate(db, source, timestamp, value, fee_fraction_int, text, block_index): if len(text) > 52: problems.append("text too long") - if ledger.enabled("options_require_memo") and text and text.lower().startswith("options"): + if util.enabled("options_require_memo") and text and text.lower().startswith("options"): try: # Check for options and if they are valid. options = util.parse_options_from_string(text) @@ -147,7 +147,7 @@ def compose(db, source: str, timestamp: int, value: float, fee_fraction: float, data = message_type.pack(ID) # always use custom length byte instead of problematic usage of 52p format and make sure to encode('utf-8') for length - if ledger.enabled("broadcast_pack_text"): + if util.enabled("broadcast_pack_text"): data += struct.pack(FORMAT, timestamp, value, fee_fraction_int) data += VarIntSerializer.serialize(len(text.encode("utf-8"))) data += text.encode("utf-8") @@ -163,7 +163,7 @@ def compose(db, source: str, timestamp: int, value: float, fee_fraction: float, def unpack(message, block_index, return_dict=False): try: - if ledger.enabled("broadcast_pack_text", block_index): + if util.enabled("broadcast_pack_text", block_index): timestamp, value, fee_fraction_int, rawtext = struct.unpack( FORMAT + f"{len(message) - LENGTH}s", message ) @@ -250,11 +250,11 @@ def parse(db, tx, message): logger.debug(f"Bindings: {json.dumps(bindings)}") # stop processing if broadcast is invalid for any reason - if ledger.enabled("broadcast_invalid_check") and status != "valid": + if util.enabled("broadcast_invalid_check") and status != "valid": return # Options? Should not fail to parse due to above checks. - if ledger.enabled("options_require_memo") and text and text.lower().startswith("options"): + if util.enabled("options_require_memo") and text and text.lower().startswith("options"): options = util.parse_options_from_string(text) if options is not False: op_bindings = { @@ -281,7 +281,7 @@ def parse(db, tx, message): # stop processing if broadcast is invalid for any reason # @TODO: remove this check once broadcast_invalid_check has been activated - if ledger.enabled("max_fee_fraction") and status != "valid": + if util.enabled("max_fee_fraction") and status != "valid": return # Handle bet matches that use this feed. @@ -298,7 +298,7 @@ def parse(db, tx, message): # to betters. total_escrow = bet_match["forward_quantity"] + bet_match["backward_quantity"] - if ledger.enabled("inmutable_fee_fraction"): + if util.enabled("inmutable_fee_fraction"): fee_fraction = bet_match["fee_fraction_int"] / config.UNIT else: fee_fraction = fee_fraction_int / config.UNIT diff --git a/counterparty-core/counterpartycore/lib/messages/btcpay.py b/counterparty-core/counterpartycore/lib/messages/btcpay.py index 987a37dacf..6e46158f14 100644 --- a/counterparty-core/counterpartycore/lib/messages/btcpay.py +++ b/counterparty-core/counterpartycore/lib/messages/btcpay.py @@ -189,7 +189,7 @@ def parse(db, tx, message): ledger.update_order_match_status(db, order_match_id, "completed") # Update give and get order status as filled if order_match is completed - if ledger.enabled("btc_order_filled"): + if util.enabled("btc_order_filled"): order_matches = ledger.get_pending_order_matches(db, tx0_hash, tx1_hash) if len(order_matches) == 0: # mark both btc get and give orders as filled when order_match is completed and give or get remaining = 0 diff --git a/counterparty-core/counterpartycore/lib/messages/dispenser.py b/counterparty-core/counterpartycore/lib/messages/dispenser.py index ae0887133c..3242849ae2 100644 --- a/counterparty-core/counterpartycore/lib/messages/dispenser.py +++ b/counterparty-core/counterpartycore/lib/messages/dispenser.py @@ -222,7 +222,7 @@ def validate( open_dispensers = [] if ( - ledger.enabled("dispenser_origin_permission_extended", block_index) + util.enabled("dispenser_origin_permission_extended", block_index) and status == STATUS_CLOSED and open_address and open_address != source @@ -239,7 +239,7 @@ def validate( if len(open_dispensers) == 0 or open_dispensers[0]["status"] != STATUS_CLOSING: if status == STATUS_OPEN or status == STATUS_OPEN_EMPTY_ADDRESS: if len(open_dispensers) > 0: - max_refills = ledger.get_value_by_block_index("max_refills", block_index) + max_refills = util.get_value_by_block_index("max_refills", block_index) refilling_count = 0 if max_refills > 0: refilling_count = ledger.get_refilling_count( @@ -269,7 +269,7 @@ def validate( if status == STATUS_OPEN_EMPTY_ADDRESS: # If an address is trying to refill a dispenser in a different address and it's the creator if not ( - ledger.enabled("dispenser_origin_permission_extended", block_index) + util.enabled("dispenser_origin_permission_extended", block_index) and (len(open_dispensers) > 0) and (open_dispensers[0]["origin"] == source) ): @@ -278,7 +278,7 @@ def validate( ) if not ( - ledger.enabled("dispenser_origin_permission_extended", block_index) + util.enabled("dispenser_origin_permission_extended", block_index) and dispensers_from_same_origin_count > 0 ): # It means that the same origin has not opened other dispensers in this address @@ -289,7 +289,7 @@ def validate( "cannot open on another address if it has any balance history" ) - if ledger.enabled("dispenser_origin_permission_extended", block_index): + if util.enabled("dispenser_origin_permission_extended", block_index): address_oldest_transaction = backend.get_oldest_tx( query_address, block_index=ledger.CURRENT_BLOCK_INDEX ) @@ -315,7 +315,7 @@ def validate( cursor.close() - if oracle_address is not None and ledger.enabled("oracle_dispensers", block_index): + if oracle_address is not None and util.enabled("oracle_dispensers", block_index): last_price, last_fee, last_label, last_updated = ledger.get_oracle_last_price( db, oracle_address, block_index ) @@ -368,13 +368,13 @@ def compose( data = message_type.pack(ID) data += struct.pack(FORMAT, assetid, give_quantity, escrow_quantity, mainchainrate, status) if (status == STATUS_OPEN_EMPTY_ADDRESS and open_address) or ( - ledger.enabled("dispenser_origin_permission_extended") + util.enabled("dispenser_origin_permission_extended") and status == STATUS_CLOSED and open_address and open_address != source ): data += address.pack(open_address) - if oracle_address is not None and ledger.enabled("oracle_dispensers"): + if oracle_address is not None and util.enabled("oracle_dispensers"): oracle_fee = calculate_oracle_fee( db, escrow_quantity, @@ -420,7 +420,7 @@ def unpack(message, return_dict=False): ) read = LENGTH if dispenser_status == STATUS_OPEN_EMPTY_ADDRESS or ( - ledger.enabled("dispenser_origin_permission_extended") + util.enabled("dispenser_origin_permission_extended") and dispenser_status == STATUS_CLOSED and len(message) > read ): @@ -483,7 +483,7 @@ def parse(db, tx, message): action_address = tx["source"] if status == "valid": - if ledger.enabled("dispenser_parsing_validation", ledger.CURRENT_BLOCK_INDEX): + if util.enabled("dispenser_parsing_validation", ledger.CURRENT_BLOCK_INDEX): asset_id, problems = validate( db, tx["source"], @@ -510,7 +510,7 @@ def parse(db, tx, message): ) if len(existing) == 0: - if (oracle_address != None) and ledger.enabled( # noqa: E711 + if (oracle_address != None) and util.enabled( # noqa: E711 "oracle_dispensers", tx["block_index"] ): oracle_fee = calculate_oracle_fee( @@ -601,7 +601,7 @@ def parse(db, tx, message): "dispense_count": 0, } - if ledger.enabled("dispenser_origin_permission_extended"): + if util.enabled("dispenser_origin_permission_extended"): bindings["origin"] = tx["source"] ledger.insert_record(db, "dispensers", bindings, "OPEN_DISPENSER") @@ -611,10 +611,10 @@ def parse(db, tx, message): and existing[0]["give_quantity"] == give_quantity ): if tx["source"] == action_address or ( - ledger.enabled("dispenser_origin_permission_extended", tx["block_index"]) + util.enabled("dispenser_origin_permission_extended", tx["block_index"]) and tx["source"] == existing[0]["origin"] ): - if (oracle_address != None) and ledger.enabled( # noqa: E711 + if (oracle_address != None) and util.enabled( # noqa: E711 "oracle_dispensers", tx["block_index"] ): oracle_fee = calculate_oracle_fee( @@ -682,11 +682,11 @@ def parse(db, tx, message): status = "can only have one open dispenser per asset per address" elif dispenser_status == STATUS_CLOSED: - close_delay = ledger.get_value_by_block_index( + close_delay = util.get_value_by_block_index( "dispenser_close_delay", tx["block_index"] ) close_from_another_address = ( - ledger.enabled("dispenser_origin_permission_extended", tx["block_index"]) + util.enabled("dispenser_origin_permission_extended", tx["block_index"]) and action_address and action_address != tx["source"] ) @@ -762,7 +762,7 @@ def dispense(db, tx): cursor = db.cursor() outs = [] - if ledger.enabled("multiple_dispenses"): + if util.enabled("multiple_dispenses"): outs = ledger.get_vouts(db, tx["tx_hash"]) else: outs = [tx] @@ -786,7 +786,7 @@ def dispense(db, tx): give_quantity = dispenser["give_quantity"] if satoshirate > 0 and give_quantity > 0: - if (dispenser["oracle_address"] != None) and ledger.enabled( # noqa: E711 + if (dispenser["oracle_address"] != None) and util.enabled( # noqa: E711 "oracle_dispensers", next_out["block_index"] ): last_price, last_fee, last_fiat_label, last_updated = ( @@ -808,7 +808,7 @@ def dispense(db, tx): assert give_remaining >= 0 # Skip dispense if quantity is 0 - if ledger.enabled("zero_quantity_value_adjustment_1") and actually_given == 0: + if util.enabled("zero_quantity_value_adjustment_1") and actually_given == 0: continue ledger.credit( @@ -822,7 +822,7 @@ def dispense(db, tx): ) # Checking if the dispenser reach its max dispenses limit - max_dispenses_limit = ledger.get_value_by_block_index( + max_dispenses_limit = util.get_value_by_block_index( "max_dispenses_limit", next_out["block_index"] ) max_dispenser_limit_hit = False @@ -892,7 +892,7 @@ def dispense(db, tx): def close_pending(db, block_index): - block_delay = ledger.get_value_by_block_index("dispenser_close_delay", block_index) + block_delay = util.get_value_by_block_index("dispenser_close_delay", block_index) if block_delay > 0: pending_dispensers = ledger.get_pending_dispensers( diff --git a/counterparty-core/counterpartycore/lib/messages/dividend.py b/counterparty-core/counterpartycore/lib/messages/dividend.py index d7f5afe433..141a20f7a9 100644 --- a/counterparty-core/counterpartycore/lib/messages/dividend.py +++ b/counterparty-core/counterpartycore/lib/messages/dividend.py @@ -9,7 +9,14 @@ D = decimal.Decimal import logging # noqa: E402 -from counterpartycore.lib import config, database, exceptions, ledger, message_type # noqa: E402 +from counterpartycore.lib import ( # noqa: E402 + config, + database, + exceptions, + ledger, + message_type, + util, +) logger = logging.getLogger(config.LOGGER_NAME) @@ -99,7 +106,7 @@ def validate(db, source, quantity_per_unit, asset, dividend_asset, block_index): # Calculate dividend quantities. exclude_empty = False - if ledger.enabled("zero_quantity_value_adjustment_1"): + if util.enabled("zero_quantity_value_adjustment_1"): exclude_empty = True holders = ledger.holders(db, asset, exclude_empty) @@ -122,7 +129,7 @@ def validate(db, source, quantity_per_unit, asset, dividend_asset, block_index): if divisible: dividend_quantity /= config.UNIT - if not ledger.enabled("nondivisible_dividend_fix") and not dividend_divisible: + if not util.enabled("nondivisible_dividend_fix") and not dividend_divisible: dividend_quantity /= config.UNIT # Pre-fix behaviour if dividend_asset == config.BTC and dividend_quantity < config.DEFAULT_MULTISIG_DUST_SIZE: @@ -285,7 +292,7 @@ def parse(db, tx, message): # Credit. for output in outputs: - if not ledger.enabled("dont_credit_zero_dividend") or output["dividend_quantity"] > 0: + if not util.enabled("dont_credit_zero_dividend") or output["dividend_quantity"] > 0: ledger.credit( db, output["address"], diff --git a/counterparty-core/counterpartycore/lib/messages/issuance.py b/counterparty-core/counterpartycore/lib/messages/issuance.py index 81d1a6ff81..24765425cc 100644 --- a/counterparty-core/counterpartycore/lib/messages/issuance.py +++ b/counterparty-core/counterpartycore/lib/messages/issuance.py @@ -207,7 +207,7 @@ def validate( last_issuance = issuances[-1] reissued_asset_longname = last_issuance["asset_longname"] issuance_locked = False - if ledger.enabled("issuance_lock_fix"): + if util.enabled("issuance_lock_fix"): for issuance in issuances: if issuance["locked"]: issuance_locked = True @@ -219,10 +219,10 @@ def validate( if last_issuance["issuer"] != source: problems.append("issued by another address") if (bool(last_issuance["divisible"]) != bool(divisible)) and ( - (not ledger.enabled("cip03", block_index)) or (not reset) + (not util.enabled("cip03", block_index)) or (not reset) ): problems.append("cannot change divisibility") - if (not ledger.enabled("issuance_callability_parameters_removal", block_index)) and bool( + if (not util.enabled("issuance_callability_parameters_removal", block_index)) and bool( last_issuance["callable"] ) != bool(callable_): problems.append("cannot change callability") @@ -275,10 +275,8 @@ def validate( cursor = db.cursor() balance = ledger.get_balance(db, source, config.XCP) cursor.close() - if ledger.enabled("numeric_asset_names"): # Protocol change. - if subasset_longname is not None and ledger.enabled( - "subassets" - ): # Protocol change. + if util.enabled("numeric_asset_names"): # Protocol change. + if subasset_longname is not None and util.enabled("subassets"): # Protocol change. # subasset issuance is 0.25 fee = int(0.25 * config.UNIT) elif len(asset) >= 13: @@ -301,7 +299,7 @@ def validate( # For SQLite3 call_date = min(call_date, config.MAX_INT) assert isinstance(quantity, int) - if reset and ledger.enabled("cip03", block_index): # reset will overwrite the quantity + if reset and util.enabled("cip03", block_index): # reset will overwrite the quantity if quantity > config.MAX_INT: problems.append("total quantity overflow") else: @@ -309,7 +307,7 @@ def validate( if total + quantity > config.MAX_INT: problems.append("total quantity overflow") - if ledger.enabled("cip03", block_index) and reset and issuances: + if util.enabled("cip03", block_index) and reset and issuances: # Checking that all supply are held by the owner of the asset balances = ledger.get_asset_balances(db, asset) @@ -326,7 +324,7 @@ def validate( # problems.append('cannot issue and transfer simultaneously') # For SQLite3 - if ledger.enabled("integer_overflow_fix", block_index=block_index) and ( + if util.enabled("integer_overflow_fix", block_index=block_index) and ( fee > config.MAX_INT or quantity > config.MAX_INT ): problems.append("integer overflow") @@ -372,7 +370,7 @@ def compose( # check subasset subasset_parent = None subasset_longname = None - if ledger.enabled("subassets"): # Protocol change. + if util.enabled("subassets"): # Protocol change. subasset_parent, subasset_longname = util.parse_subasset_from_asset_name(asset) if subasset_longname is not None: # try to find an existing subasset @@ -422,24 +420,24 @@ def compose( raise exceptions.ComposeError(problems) if subasset_longname is None or reissuance: - asset_format = ledger.get_value_by_block_index("issuance_asset_serialization_format") - asset_format_length = ledger.get_value_by_block_index("issuance_asset_serialization_length") + asset_format = util.get_value_by_block_index("issuance_asset_serialization_format") + asset_format_length = util.get_value_by_block_index("issuance_asset_serialization_length") # Type 20 standard issuance FORMAT_2 >QQ??If # used for standard issuances and all reissuances - if ledger.enabled("issuance_backwards_compatibility"): + if util.enabled("issuance_backwards_compatibility"): data = message_type.pack(LR_ISSUANCE_ID) else: data = message_type.pack(ID) - if description == None and ledger.enabled("issuance_description_special_null"): # noqa: E711 + if description == None and util.enabled("issuance_description_special_null"): # noqa: E711 # a special message is created to be catched by the parse function curr_format = ( asset_format + f"{len(DESCRIPTION_MARK_BYTE) + len(DESCRIPTION_NULL_ACTION)}s" ) encoded_description = DESCRIPTION_MARK_BYTE + DESCRIPTION_NULL_ACTION.encode("utf-8") else: - if (len(validated_description) <= 42) and not ledger.enabled("pascal_string_removed"): + if (len(validated_description) <= 42) and not util.enabled("pascal_string_removed"): curr_format = FORMAT_2 + f"{len(validated_description) + 1}p" else: curr_format = asset_format + f"{len(validated_description)}s" @@ -493,10 +491,10 @@ def compose( encoded_description, ) else: - subasset_format = ledger.get_value_by_block_index( + subasset_format = util.get_value_by_block_index( "issuance_subasset_serialization_format", ledger.CURRENT_BLOCK_INDEX ) - subasset_format_length = ledger.get_value_by_block_index( + subasset_format_length = util.get_value_by_block_index( "issuance_subasset_serialization_length", ledger.CURRENT_BLOCK_INDEX ) @@ -505,12 +503,12 @@ def compose( # compacts a subasset name to save space compacted_subasset_longname = util.compact_subasset_longname(subasset_longname) compacted_subasset_length = len(compacted_subasset_longname) - if ledger.enabled("issuance_backwards_compatibility"): + if util.enabled("issuance_backwards_compatibility"): data = message_type.pack(LR_SUBASSET_ID) else: data = message_type.pack(SUBASSET_ID) - if description == None and ledger.enabled("issuance_description_special_null"): # noqa: E711 + if description == None and util.enabled("issuance_description_special_null"): # noqa: E711 # a special message is created to be catched by the parse function curr_format = ( subasset_format @@ -566,16 +564,14 @@ def compose( def unpack(db, message, message_type_id, block_index, return_dict=False): - asset_format = ledger.get_value_by_block_index( - "issuance_asset_serialization_format", block_index - ) - asset_format_length = ledger.get_value_by_block_index( + asset_format = util.get_value_by_block_index("issuance_asset_serialization_format", block_index) + asset_format_length = util.get_value_by_block_index( "issuance_asset_serialization_length", block_index ) - subasset_format = ledger.get_value_by_block_index( + subasset_format = util.get_value_by_block_index( "issuance_subasset_serialization_format", block_index ) - subasset_format_length = ledger.get_value_by_block_index( + subasset_format_length = util.get_value_by_block_index( "issuance_subasset_serialization_length", block_index ) @@ -583,7 +579,7 @@ def unpack(db, message, message_type_id, block_index, return_dict=False): try: subasset_longname = None if message_type_id == LR_SUBASSET_ID or message_type_id == SUBASSET_ID: - if not ledger.enabled("subassets", block_index=block_index): + if not util.enabled("subassets", block_index=block_index): logger.warning(f"subassets are not enabled at block {block_index}") raise exceptions.UnpackError @@ -628,7 +624,7 @@ def unpack(db, message, message_type_id, block_index, return_dict=False): elif (block_index > 283271 or config.TESTNET or config.REGTEST) and len( message ) >= asset_format_length: # Protocol change. - if (len(message) - asset_format_length <= 42) and not ledger.enabled( + if (len(message) - asset_format_length <= 42) and not util.enabled( "pascal_string_removed" ): curr_format = asset_format + f"{len(message) - asset_format_length}p" @@ -836,13 +832,13 @@ def parse(db, tx, message, message_type_id): if problems: status = "invalid: " + "; ".join(problems) if ( - not ledger.enabled("integer_overflow_fix", block_index=tx["block_index"]) + not util.enabled("integer_overflow_fix", block_index=tx["block_index"]) and "total quantity overflow" in problems ): quantity = 0 # Reset? - if (status == "valid") and reset and ledger.enabled("cip03", tx["block_index"]): + if (status == "valid") and reset and util.enabled("cip03", tx["block_index"]): balances_result = ledger.get_asset_balances(db, asset) if len(balances_result) <= 1: diff --git a/counterparty-core/counterpartycore/lib/messages/order.py b/counterparty-core/counterpartycore/lib/messages/order.py index 29d87356eb..151d30b973 100644 --- a/counterparty-core/counterpartycore/lib/messages/order.py +++ b/counterparty-core/counterpartycore/lib/messages/order.py @@ -12,7 +12,6 @@ database, exceptions, ledger, - log, message_type, util, ) @@ -277,7 +276,7 @@ def cancel_order_match(db, order_match, status, block_index, tx_index): if ( tx0_order_status == "filled" - and ledger.enabled("reopen_order_when_btcpay_expires_fix", block_index) + and util.enabled("reopen_order_when_btcpay_expires_fix", block_index) ): # This case could happen if a BTCpay expires and before the expiration, the order was filled by a correct BTCpay tx0_order_status = "open" # So, we have to open the order again @@ -319,7 +318,7 @@ def cancel_order_match(db, order_match, status, block_index, tx_index): tx1_order_status = tx1_order["status"] if ( tx1_order_status == "filled" - and ledger.enabled("reopen_order_when_btcpay_expires_fix", block_index) + and util.enabled("reopen_order_when_btcpay_expires_fix", block_index) ): # This case could happen if a BTCpay expires and before the expiration, the order was filled by a correct BTCpay tx1_order_status = "open" # So, we have to open the order again @@ -550,9 +549,9 @@ def parse(db, tx, message): if problems: status = "invalid: " + "; ".join(problems) - if ledger.enabled("btc_order_minimum"): + if util.enabled("btc_order_minimum"): min_btc_quantity = 0.001 * config.UNIT # 0.001 BTC - if ledger.enabled("btc_order_minimum_adjustment_1"): + if util.enabled("btc_order_minimum_adjustment_1"): min_btc_quantity = 0.00001 * config.UNIT # 0.00001 BTC if (give_asset == config.BTC and give_quantity < min_btc_quantity) or ( @@ -956,7 +955,7 @@ def expire(db, block_index): ) # tx_index=0 for block action # Expire btc sell order if match expires - if ledger.enabled("btc_sell_expire_on_match_expire"): + if util.enabled("btc_sell_expire_on_match_expire"): # Check for other pending order matches involving either tx0_hash or tx1_hash order_matches_pending = ledger.get_pending_order_matches( db, tx0_hash=order_match["tx0_hash"], tx1_hash=order_match["tx1_hash"] diff --git a/counterparty-core/counterpartycore/lib/messages/rps.py b/counterparty-core/counterpartycore/lib/messages/rps.py index 01fed73517..15da899975 100644 --- a/counterparty-core/counterpartycore/lib/messages/rps.py +++ b/counterparty-core/counterpartycore/lib/messages/rps.py @@ -243,7 +243,7 @@ def update_rps_match_status(db, rps_match, status, block_index, tx_index): def validate(db, source, possible_moves, wager, move_random_hash, expiration, block_index): problems = [] - if ledger.enabled("disable_rps"): + if util.enabled("disable_rps"): problems.append("rps disabled") if not isinstance(possible_moves, int): diff --git a/counterparty-core/counterpartycore/lib/messages/send.py b/counterparty-core/counterpartycore/lib/messages/send.py index decce16caa..b0317e5e2e 100644 --- a/counterparty-core/counterpartycore/lib/messages/send.py +++ b/counterparty-core/counterpartycore/lib/messages/send.py @@ -1,6 +1,6 @@ #! /usr/bin/python3 -from counterpartycore.lib import config, database, exceptions, ledger, util +from counterpartycore.lib import config, database, exceptions, util from counterpartycore.lib.messages.versions import enhanced_send, mpma, send1 ID = send1.ID @@ -123,10 +123,10 @@ def compose( ): # special case - enhanced_send replaces send by default when it is enabled # but it can be explicitly disabled with an API parameter - if ledger.enabled("enhanced_sends"): + if util.enabled("enhanced_sends"): # Another special case, if destination, asset and quantity are arrays, it's an MPMA send if isinstance(destination, list) and isinstance(asset, list) and isinstance(quantity, list): - if ledger.enabled("mpma_sends"): + if util.enabled("mpma_sends"): if len(destination) == len(asset) and len(asset) == len(quantity): # Sending memos in a MPMA message can be done by several approaches: # 1. Send a list of memos, there must be one for each send and they correspond to the sends by index diff --git a/counterparty-core/counterpartycore/lib/messages/sweep.py b/counterparty-core/counterpartycore/lib/messages/sweep.py index 89d7427fd6..bc6656bec1 100644 --- a/counterparty-core/counterpartycore/lib/messages/sweep.py +++ b/counterparty-core/counterpartycore/lib/messages/sweep.py @@ -3,7 +3,7 @@ import logging import struct -from counterpartycore.lib import address, config, database, exceptions, ledger, message_type +from counterpartycore.lib import address, config, database, exceptions, ledger, message_type, util from counterpartycore.lib.exceptions import * # noqa: F403 logger = logging.getLogger(config.LOGGER_NAME) @@ -71,7 +71,7 @@ def validate(db, source, destination, flags, memo, block_index): result = ledger.get_balance(db, source, "XCP") - antispamfee = ledger.get_value_by_block_index("sweep_antispam_fee", block_index) * config.UNIT + antispamfee = util.get_value_by_block_index("sweep_antispam_fee", block_index) * config.UNIT total_fee = ANTISPAM_FEE if antispamfee > 0: @@ -191,8 +191,7 @@ def parse(db, tx, message): if status == "valid": try: antispamfee = ( - ledger.get_value_by_block_index("sweep_antispam_fee", tx["block_index"]) - * config.UNIT + util.get_value_by_block_index("sweep_antispam_fee", tx["block_index"]) * config.UNIT ) if antispamfee > 0: @@ -247,7 +246,7 @@ def parse(db, tx, message): sweep_pos = 0 assets_issued = balances - if ledger.enabled("zero_balance_ownership_sweep_fix", tx["block_index"]): + if util.enabled("zero_balance_ownership_sweep_fix", tx["block_index"]): assets_issued = ledger.get_asset_issued(db, tx["source"]) for next_asset_issued in assets_issued: diff --git a/counterparty-core/counterpartycore/lib/messages/versions/enhanced_send.py b/counterparty-core/counterpartycore/lib/messages/versions/enhanced_send.py index b423af2f9f..56df533e2d 100644 --- a/counterparty-core/counterpartycore/lib/messages/versions/enhanced_send.py +++ b/counterparty-core/counterpartycore/lib/messages/versions/enhanced_send.py @@ -81,7 +81,7 @@ def validate(db, source, destination, asset, quantity, memo_bytes, block_index): if memo_bytes is not None and len(memo_bytes) > MAX_MEMO_LENGTH: problems.append("memo is too long") - if ledger.enabled("options_require_memo"): + if util.enabled("options_require_memo"): cursor = db.cursor() try: results = ledger.get_addresses(db, address=destination) diff --git a/counterparty-core/counterpartycore/lib/messages/versions/mpma.py b/counterparty-core/counterpartycore/lib/messages/versions/mpma.py index 2d6a2c5c48..a843258831 100644 --- a/counterparty-core/counterpartycore/lib/messages/versions/mpma.py +++ b/counterparty-core/counterpartycore/lib/messages/versions/mpma.py @@ -82,7 +82,7 @@ def validate(db, source, asset_dest_quant_list, block_index): if not destination: problems.append(f"destination is required for {asset}") - if ledger.enabled("options_require_memo"): + if util.enabled("options_require_memo"): results = ledger.get_addresses(db, address=destination) if destination else None if results: result = results[0] @@ -103,7 +103,7 @@ def compose(db, source: str, asset_dest_quant_list: list, memo: str, memo_is_hex out_balances = util.accumulate([(t[0], t[2]) for t in asset_dest_quant_list]) for asset, quantity in out_balances: - if ledger.enabled("mpma_subasset_support"): + if util.enabled("mpma_subasset_support"): # resolve subassets asset = ledger.resolve_subasset_longname(db, asset) # noqa: PLW2901 diff --git a/counterparty-core/counterpartycore/lib/messages/versions/send1.py b/counterparty-core/counterpartycore/lib/messages/versions/send1.py index 459c166d48..2ce66afc7a 100644 --- a/counterparty-core/counterpartycore/lib/messages/versions/send1.py +++ b/counterparty-core/counterpartycore/lib/messages/versions/send1.py @@ -48,11 +48,11 @@ def validate(db, source, destination, asset, quantity, block_index): if quantity > config.MAX_INT: problems.append("integer overflow") - if ledger.enabled("send_destination_required"): # Protocol change. + if util.enabled("send_destination_required"): # Protocol change. if not destination: problems.append("destination is required") - if ledger.enabled("options_require_memo"): + if util.enabled("options_require_memo"): # Check destination address options cursor = db.cursor() diff --git a/counterparty-core/counterpartycore/lib/prefetcher.py b/counterparty-core/counterpartycore/lib/prefetcher.py index ee3499d108..c68ac0ef4d 100644 --- a/counterparty-core/counterpartycore/lib/prefetcher.py +++ b/counterparty-core/counterpartycore/lib/prefetcher.py @@ -5,7 +5,7 @@ import bitcoin as bitcoinlib -from counterpartycore.lib import backend, config, ledger +from counterpartycore.lib import backend, config, ledger, util logger = logging.getLogger(config.LOGGER_NAME) @@ -56,7 +56,7 @@ def run(self): block = backend.getblock(block_hash) txhash_list, raw_transactions = backend.get_tx_list( block, - correct_segwit=ledger.enabled("correct_segwit_txids", block_index=block_index), + correct_segwit=util.enabled("correct_segwit_txids", block_index=block_index), ) BLOCKCHAIN_CACHE[block_index] = { "block_hash": block_hash, diff --git a/counterparty-core/counterpartycore/lib/script.py b/counterparty-core/counterpartycore/lib/script.py index df8424571d..6e405fa5e7 100644 --- a/counterparty-core/counterpartycore/lib/script.py +++ b/counterparty-core/counterpartycore/lib/script.py @@ -20,7 +20,7 @@ from pycoin.encoding.sec import public_pair_to_sec from ripemd import ripemd160 as RIPEMD160 # nosec B413 -from counterpartycore.lib import config, exceptions, ledger, opcodes, util +from counterpartycore.lib import config, exceptions, opcodes, util from counterpartycore.lib.opcodes import * # noqa: F403 B58_DIGITS = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" @@ -64,7 +64,7 @@ def validate(address, allow_p2sh=True): # Check validity by attempting to decode. for pubkeyhash in pubkeyhashes: try: - if ledger.enabled("segwit_support"): + if util.enabled("segwit_support"): if not is_bech32(pubkeyhash): base58_check_decode(pubkeyhash, config.ADDRESSVERSION) else: @@ -74,7 +74,7 @@ def validate(address, allow_p2sh=True): raise e base58_check_decode(pubkeyhash, config.P2SH_ADDRESSVERSION) except Base58Error as e: - if not ledger.enabled("segwit_support") or not is_bech32(pubkeyhash): + if not util.enabled("segwit_support") or not is_bech32(pubkeyhash): raise e @@ -484,7 +484,7 @@ def make_pubkeyhash(address): pubkeyhashes.append(pubkeyhash) pubkeyhash_address = construct_array(signatures_required, pubkeyhashes, signatures_possible) else: - if ledger.enabled("segwit_support") and is_bech32(address): + if util.enabled("segwit_support") and is_bech32(address): pubkeyhash_address = address # Some bech32 addresses are valid base58 data elif is_pubkeyhash(address): pubkeyhash_address = address @@ -505,7 +505,7 @@ def extract_pubkeys(pub): pubkeys.append(pub) elif is_p2sh(pub): pass - elif ledger.enabled("segwit_support") and is_bech32(pub): + elif util.enabled("segwit_support") and is_bech32(pub): pass else: if not is_pubkeyhash(pub): diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index b09b03054a..6149c1eaa8 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -344,7 +344,7 @@ def construct_coin_selection( final_fee = fee_per_kb desired_input_count = 1 - if encoding == "multisig" and data_array and ledger.enabled("bytespersigop"): + if encoding == "multisig" and data_array and util.enabled("bytespersigop"): desired_input_count = len(data_array) * 2 # pop inputs until we can pay for the fee @@ -540,11 +540,11 @@ def construct( else: encoding = ( "p2sh" - if not old_style_api and ledger.enabled("p2sh_encoding") + if not old_style_api and util.enabled("p2sh_encoding") else "multisig" ) # p2sh is not possible with old_style_api - elif desired_encoding == "p2sh" and not ledger.enabled("p2sh_encoding"): + elif desired_encoding == "p2sh" and not util.enabled("p2sh_encoding"): raise exceptions.TransactionError("P2SH encoding not enabled yet") elif encoding not in ("pubkeyhash", "multisig", "opreturn", "p2sh"): diff --git a/counterparty-core/counterpartycore/lib/util.py b/counterparty-core/counterpartycore/lib/util.py index 61c39f417f..f412d55189 100644 --- a/counterparty-core/counterpartycore/lib/util.py +++ b/counterparty-core/counterpartycore/lib/util.py @@ -5,6 +5,7 @@ import itertools import json import logging +import os import random import re import sys @@ -14,7 +15,7 @@ import requests -from counterpartycore.lib import config, exceptions +from counterpartycore.lib import config, exceptions, ledger logger = logging.getLogger(config.LOGGER_NAME) @@ -456,3 +457,57 @@ def clean_url_for_log(url): # ORACLES def satoshirate_to_fiat(satoshirate): return round(satoshirate / 100.0, 2) + + +############################# +# PROTOCOL CHANGES # +############################# + +CURR_DIR = os.path.dirname(os.path.realpath(__file__)) +with open(CURR_DIR + "/../protocol_changes.json") as f: + PROTOCOL_CHANGES = json.load(f) + + +def enabled(change_name, block_index=None): + """Return True if protocol change is enabled.""" + if config.REGTEST: + return True # All changes are always enabled on REGTEST + + if config.TESTNET: + index_name = "testnet_block_index" + else: + index_name = "block_index" + + enable_block_index = PROTOCOL_CHANGES[change_name][index_name] + + if not block_index: + block_index = ledger.CURRENT_BLOCK_INDEX + + if block_index >= enable_block_index: + return True + else: + return False + + +def get_value_by_block_index(change_name, block_index=None): + if not block_index: + block_index = ledger.CURRENT_BLOCK_INDEX + + max_block_index = -1 + + if config.REGTEST: + for key, value in PROTOCOL_CHANGES[change_name]["testnet"]: # noqa: B007 + if int(key) > int(max_block_index): + max_block_index = key + return PROTOCOL_CHANGES[change_name]["testnet"][max_block_index]["value"] + + if config.TESTNET: + index_name = "testnet" + else: + index_name = "mainnet" + + for key in PROTOCOL_CHANGES[change_name][index_name]: + if int(key) > int(max_block_index) and block_index >= int(key): + max_block_index = key + + return PROTOCOL_CHANGES[change_name][index_name][max_block_index]["value"] diff --git a/counterparty-core/counterpartycore/test/bytespersigop_test.py b/counterparty-core/counterpartycore/test/bytespersigop_test.py index ee246d9471..98a613c90b 100644 --- a/counterparty-core/counterpartycore/test/bytespersigop_test.py +++ b/counterparty-core/counterpartycore/test/bytespersigop_test.py @@ -19,7 +19,7 @@ def test_bytespersigop(server_db): - assert ledger.enabled("bytespersigop") == False # noqa: E712 + assert util.enabled("bytespersigop") == False # noqa: E712 transaction.initialise() @@ -66,7 +66,7 @@ def test_bytespersigop(server_db): # enable byterpersigop with util_test.MockProtocolChangesContext(bytespersigop=True): - assert ledger.enabled("bytespersigop") == True # noqa: E712 + assert util.enabled("bytespersigop") == True # noqa: E712 # ADDR[0], bytespersigop=True, desc 41 bytes, opreturn txhex = transaction.compose_transaction( diff --git a/counterparty-core/counterpartycore/test/config_context_test.py b/counterparty-core/counterpartycore/test/config_context_test.py index 3033168208..c0c798727a 100644 --- a/counterparty-core/counterpartycore/test/config_context_test.py +++ b/counterparty-core/counterpartycore/test/config_context_test.py @@ -2,7 +2,7 @@ import pprint # noqa: F401 import tempfile -from counterpartycore.lib import blocks, config, ledger # noqa: F401 +from counterpartycore.lib import config, util # noqa: F401 from counterpartycore.test import ( conftest, # noqa: F401 util_test, @@ -31,14 +31,14 @@ def test_config_context(cp_server): def test_mock_protocol_changes(cp_server): - assert ledger.enabled("multisig_addresses") == True # noqa: E712 + assert util.enabled("multisig_addresses") == True # noqa: E712 with util_test.MockProtocolChangesContext(multisig_addresses=False): - assert ledger.enabled("multisig_addresses") == False # noqa: E712 + assert util.enabled("multisig_addresses") == False # noqa: E712 with util_test.MockProtocolChangesContext(multisig_addresses=None): - assert ledger.enabled("multisig_addresses") == None # noqa: E711 + assert util.enabled("multisig_addresses") == None # noqa: E711 - assert ledger.enabled("multisig_addresses") == False # noqa: E712 + assert util.enabled("multisig_addresses") == False # noqa: E712 - assert ledger.enabled("multisig_addresses") == True # noqa: E712 + assert util.enabled("multisig_addresses") == True # noqa: E712 diff --git a/counterparty-core/counterpartycore/test/conftest.py b/counterparty-core/counterpartycore/test/conftest.py index fd0f43402f..ad41842f9e 100644 --- a/counterparty-core/counterpartycore/test/conftest.py +++ b/counterparty-core/counterpartycore/test/conftest.py @@ -30,7 +30,7 @@ # used to increment RPC port between test modules to avoid conflicts TEST_RPC_PORT = 9999 -# we swap out ledger.enabled with a custom one which has the option to mock the protocol changes +# we swap out util.enabled with a custom one which has the option to mock the protocol changes MOCK_PROTOCOL_CHANGES = { "bytespersigop": False, # default to False to avoid all old vectors breaking } @@ -65,7 +65,7 @@ False # if true, always check MOCK_PROTOCOL_CHANGES_AT_BLOCK ) ALWAYS_LATEST_PROTOCOL_CHANGES = False # Even when this is true, this can be overridden if allow_always_latest is False in MOCK_PROTOCOL_CHANGES_AT_BLOCK -_enabled = ledger.enabled +_enabled = util.enabled def enabled(change_name, block_index=None): @@ -84,8 +84,8 @@ def enabled(change_name, block_index=None): # used to force unit tests to always run against latest protocol changes if ALWAYS_LATEST_PROTOCOL_CHANGES: - # KeyError to mimic real ledger.enabled - if change_name not in ledger.PROTOCOL_CHANGES: + # KeyError to mimic real util.enabled + if change_name not in util.PROTOCOL_CHANGES: raise KeyError(change_name) # print(f"ALWAYS_LATEST_PROTOCOL_CHANGES {change_name} {block_index or ledger.CURRENT_BLOCK_INDEX} enabled: True") @@ -95,7 +95,7 @@ def enabled(change_name, block_index=None): return _enabled(change_name, block_index) -ledger.enabled = enabled +util.enabled = enabled # This is true if ENABLE_MOCK_PROTOCOL_CHANGES_AT_BLOCK is set diff --git a/counterparty-core/counterpartycore/test/fixtures/vectors.py b/counterparty-core/counterpartycore/test/fixtures/vectors.py index 43717b875b..c264c64466 100644 --- a/counterparty-core/counterpartycore/test/fixtures/vectors.py +++ b/counterparty-core/counterpartycore/test/fixtures/vectors.py @@ -8755,15 +8755,6 @@ {"in": (0, DP["default_block_index"]), "out": "BTC"}, {"in": (453, DP["default_block_index"]), "out": 0}, ], - "enabled": [ - {"in": ("numeric_asset_names",), "out": True}, - {"in": ("foobar",), "error": (KeyError, "foobar")}, - { - "mock_protocol_changes": {"numeric_asset_names": False}, - "in": ("numeric_asset_names",), - "out": False, - }, - ], "holders": [ { "in": ("XCP",), @@ -9544,6 +9535,15 @@ "out": "PARENT.a-zA-Z0-9.-_@!", }, ], + "enabled": [ + {"in": ("numeric_asset_names",), "out": True}, + {"in": ("foobar",), "error": (KeyError, "foobar")}, + { + "mock_protocol_changes": {"numeric_asset_names": False}, + "in": ("numeric_asset_names",), + "out": False, + }, + ], }, "database": { "version": [{"in": (), "out": (config.VERSION_MAJOR, config.VERSION_MINOR)}], diff --git a/counterparty-core/counterpartycore/test/util_test.py b/counterparty-core/counterpartycore/test/util_test.py index 70bea57256..56713288fb 100644 --- a/counterparty-core/counterpartycore/test/util_test.py +++ b/counterparty-core/counterpartycore/test/util_test.py @@ -755,6 +755,7 @@ def exec_tested_method(tx_name, method, tested_method, inputs, server_db): "parse_subasset_from_asset_name", "compact_subasset_longname", "expand_subasset_longname", + "enabled", ] ) ) @@ -766,7 +767,6 @@ def exec_tested_method(tx_name, method, tested_method, inputs, server_db): "price", "generate_asset_id", "generate_asset_name", - "enabled", ] ) ) From 716e55a3a78f8129fdda54d9b80722f329314bb5 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Thu, 2 May 2024 21:39:31 +0200 Subject: [PATCH 223/280] Move CURRENT_BLOCK_INDEX in util --- .../counterpartycore/lib/api/api_server.py | 13 +++++++------ .../counterpartycore/lib/api/api_v1.py | 12 ++++++------ .../counterpartycore/lib/api/util.py | 6 +++--- .../counterpartycore/lib/blocks.py | 14 +++++++------- .../counterpartycore/lib/check.py | 4 ++-- .../counterpartycore/lib/gettxinfo.py | 4 ++-- .../lib/kickstart/__init__.py | 4 ++-- .../lib/kickstart/blocks_parser.py | 4 ++-- .../counterpartycore/lib/ledger.py | 19 ++++++++++--------- .../counterpartycore/lib/messages/bet.py | 2 +- .../lib/messages/broadcast.py | 2 +- .../counterpartycore/lib/messages/btcpay.py | 4 ++-- .../counterpartycore/lib/messages/burn.py | 4 ++-- .../counterpartycore/lib/messages/destroy.py | 10 ++++------ .../lib/messages/dispenser.py | 12 ++++++------ .../counterpartycore/lib/messages/dividend.py | 6 +++--- .../counterpartycore/lib/messages/issuance.py | 10 +++++----- .../counterpartycore/lib/messages/order.py | 6 +++--- .../counterpartycore/lib/messages/rps.py | 2 +- .../lib/messages/rpsresolve.py | 2 +- .../counterpartycore/lib/messages/sweep.py | 2 +- .../lib/messages/versions/enhanced_send.py | 2 +- .../lib/messages/versions/mpma.py | 2 +- .../lib/messages/versions/send1.py | 2 +- .../counterpartycore/lib/prefetcher.py | 4 ++-- .../counterpartycore/lib/transaction.py | 4 ++-- .../counterpartycore/lib/util.py | 8 +++++--- counterparty-core/counterpartycore/server.py | 5 ++--- .../counterpartycore/test/conftest.py | 8 ++++---- .../test/p2sh_encoding_test.py | 12 ++++++------ .../counterpartycore/test/util_test.py | 12 ++++++------ 31 files changed, 101 insertions(+), 100 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 52da33f5de..3b09fd794a 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -16,6 +16,7 @@ exceptions, ledger, transaction, + util, ) from counterpartycore.lib.api.routes import ROUTES from counterpartycore.lib.api.util import ( @@ -90,7 +91,7 @@ def api_root(): def is_server_ready(): if BACKEND_HEIGHT is None: return False - if ledger.CURRENT_BLOCK_INDEX >= BACKEND_HEIGHT - 1: + if util.CURRENT_BLOCK_INDEX >= BACKEND_HEIGHT - 1: return True if time.time() - CURRENT_BLOCK_TIME < 60: return True @@ -119,7 +120,7 @@ def return_result(http_code, result=None, error=None): if error is not None: api_result["error"] = error response = flask.make_response(to_json(api_result), http_code) - response.headers["X-COUNTERPARTY-HEIGHT"] = ledger.CURRENT_BLOCK_INDEX + response.headers["X-COUNTERPARTY-HEIGHT"] = util.CURRENT_BLOCK_INDEX response.headers["X-COUNTERPARTY-READY"] = is_server_ready() response.headers["X-BITCOIN-HEIGHT"] = BACKEND_HEIGHT response.headers["Content-Type"] = "application/json" @@ -161,7 +162,7 @@ def prepare_args(route, **kwargs): def execute_api_function(db, route, function_args): # cache everything for one block - cache_key = f"{ledger.CURRENT_BLOCK_INDEX}:{request.url}" + cache_key = f"{util.CURRENT_BLOCK_INDEX}:{request.url}" # except for blocks and transactions cached forever if request.path.startswith("/blocks/") or request.path.startswith("/transactions/"): cache_key = request.url @@ -197,10 +198,10 @@ def handle_route(**kwargs): global CURRENT_BLOCK_TIME # noqa F811 last_block = ledger.get_last_block(db) if last_block: - ledger.CURRENT_BLOCK_INDEX = last_block["block_index"] + util.CURRENT_BLOCK_INDEX = last_block["block_index"] CURRENT_BLOCK_TIME = last_block["block_time"] else: - ledger.CURRENT_BLOCK_INDEX = 0 + util.CURRENT_BLOCK_INDEX = 0 CURRENT_BLOCK_TIME = 0 rule = str(request.url_rule.rule) @@ -254,7 +255,7 @@ def run_api_server(args): # Initialise the API access log init_api_access_log(app) # Get the last block index - ledger.CURRENT_BLOCK_INDEX = blocks.last_db_index(get_db()) + util.CURRENT_BLOCK_INDEX = blocks.last_db_index(get_db()) # Add routes app.add_url_rule("/", view_func=handle_route) for path in ROUTES: diff --git a/counterparty-core/counterpartycore/lib/api/api_v1.py b/counterparty-core/counterpartycore/lib/api/api_v1.py index 8f7cfed6ea..1ad79beac7 100644 --- a/counterparty-core/counterpartycore/lib/api/api_v1.py +++ b/counterparty-core/counterpartycore/lib/api/api_v1.py @@ -348,7 +348,7 @@ def value_to_marker(value): # legacy filters if not show_expired and table == "orders": # Ignore BTC orders one block early. - expire_index = ledger.CURRENT_BLOCK_INDEX + 1 + expire_index = util.CURRENT_BLOCK_INDEX + 1 more_conditions.append("""((give_asset == ? AND expire_index > ?) OR give_asset != ?)""") bindings += [config.BTC, expire_index, config.BTC] @@ -809,7 +809,7 @@ def get_running_info(): blocks = list( cursor.execute( """SELECT * FROM blocks WHERE block_index = ?""", - (ledger.CURRENT_BLOCK_INDEX,), + (util.CURRENT_BLOCK_INDEX,), ) ) assert len(blocks) == 1 @@ -931,7 +931,7 @@ def search_raw_transactions(address, unconfirmed=True, only_tx_hashes=False): @dispatcher.add_method def get_oldest_tx(address): - return backend.get_oldest_tx(address, block_index=ledger.CURRENT_BLOCK_INDEX) + return backend.get_oldest_tx(address, block_index=util.CURRENT_BLOCK_INDEX) @dispatcher.add_method def get_unspent_txouts(address, unconfirmed=False, unspent_tx_hash=None, order_by=None): @@ -981,9 +981,9 @@ def unpack(data_hex): # TODO: Enabled only for `send`. if message_type_id == send.ID: - unpacked = send.unpack(self.db, message, ledger.CURRENT_BLOCK_INDEX) + unpacked = send.unpack(self.db, message, util.CURRENT_BLOCK_INDEX) elif message_type_id == enhanced_send.ID: - unpacked = enhanced_send.unpack(message, ledger.CURRENT_BLOCK_INDEX) + unpacked = enhanced_send.unpack(message, util.CURRENT_BLOCK_INDEX) else: raise APIError("unsupported message type") return message_type_id, unpacked @@ -1020,7 +1020,7 @@ def get_dispenser_info(tx_hash=None, tx_index=None): oracle_fiat_label, oracle_price_last_updated, ) = ledger.get_oracle_last_price( - self.db, dispenser["oracle_address"], ledger.CURRENT_BLOCK_INDEX + self.db, dispenser["oracle_address"], util.CURRENT_BLOCK_INDEX ) if oracle_price > 0: diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index 165ffca5c5..70c27668cb 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -6,7 +6,7 @@ from logging import handlers as logging_handlers import flask -from counterpartycore.lib import backend, config, exceptions, ledger, transaction +from counterpartycore.lib import backend, config, exceptions, ledger, transaction, util from docstring_parser import parse as parse_docstring D = decimal.Decimal @@ -18,7 +18,7 @@ def check_last_parsed_block(db, blockcount): last_block = ledger.get_last_block(db) if time.time() - last_block["block_time"] < 60: return - if ledger.CURRENT_BLOCK_INDEX + 1 < blockcount: + if util.CURRENT_BLOCK_INDEX + 1 < blockcount: raise exceptions.DatabaseError(f"{config.XCP_NAME} database is behind backend.") logger.debug("Database state check passed.") @@ -136,7 +136,7 @@ def get_oldest_transaction_by_address(address: str, block_index: int = None): :param address: The address to search for. (e.g. 14TjwxgnuqgB4HcDcSZk2m7WKwcGVYxRjS) :param block_index: The block index to search from. """ - return backend.get_oldest_tx(address, block_index=block_index or ledger.CURRENT_BLOCK_INDEX) + return backend.get_oldest_tx(address, block_index=block_index or util.CURRENT_BLOCK_INDEX) def get_backend_height(): diff --git a/counterparty-core/counterpartycore/lib/blocks.py b/counterparty-core/counterpartycore/lib/blocks.py index 3facf0df95..cfc7774bed 100644 --- a/counterparty-core/counterpartycore/lib/blocks.py +++ b/counterparty-core/counterpartycore/lib/blocks.py @@ -246,7 +246,7 @@ def parse_block( ledger.BLOCK_LEDGER = [] ledger.BLOCK_JOURNAL = [] - assert block_index == ledger.CURRENT_BLOCK_INDEX + assert block_index == util.CURRENT_BLOCK_INDEX # Expire orders, bets and rps. order.expire(db, block_index) @@ -671,7 +671,7 @@ def list_tx( block_hash = config.MEMPOOL_BLOCK_HASH block_index = config.MEMPOOL_BLOCK_INDEX else: - assert block_index == ledger.CURRENT_BLOCK_INDEX + assert block_index == util.CURRENT_BLOCK_INDEX if source and (data or destination == config.UNSPENDABLE or dispensers_outs): logger.debug(f"Saving transaction: {tx_hash}") @@ -764,7 +764,7 @@ def rollback(db, block_index=0): clean_transactions_tables(cursor, block_index=block_index) cursor.close() logger.info(f"Database rolled back to block_index {block_index}") - ledger.CURRENT_BLOCK_INDEX = block_index - 1 + util.CURRENT_BLOCK_INDEX = block_index - 1 print(f"{OK_GREEN} {step}") print(f"Rollback done in {time.time() - start_time:.2f}s") @@ -823,7 +823,7 @@ def reparse(db, block_index=0): ) for block in cursor.fetchall(): start_time_block_parse = time.time() - ledger.CURRENT_BLOCK_INDEX = block["block_index"] + util.CURRENT_BLOCK_INDEX = block["block_index"] # Add event manually to journal because block already exists ledger.add_to_journal( db, @@ -894,12 +894,12 @@ def follow(db): last_software_check = time.time() # Get index of last block. - if ledger.CURRENT_BLOCK_INDEX == 0: + if util.CURRENT_BLOCK_INDEX == 0: logger.warning("New database.") block_index = config.BLOCK_FIRST database.update_version(db) else: - block_index = ledger.CURRENT_BLOCK_INDEX + 1 + block_index = util.CURRENT_BLOCK_INDEX + 1 # Check database version. try: @@ -1047,7 +1047,7 @@ def follow(db): block_difficulty = block.difficulty with db: - ledger.CURRENT_BLOCK_INDEX = block_index + util.CURRENT_BLOCK_INDEX = block_index # List the block. block_bindings = { diff --git a/counterparty-core/counterpartycore/lib/check.py b/counterparty-core/counterpartycore/lib/check.py index 682812e6b4..8e30598ee1 100644 --- a/counterparty-core/counterpartycore/lib/check.py +++ b/counterparty-core/counterpartycore/lib/check.py @@ -810,7 +810,7 @@ def consensus_hash(db, field, previous_consensus_hash, content): assert field in ("ledger_hash", "txlist_hash", "messages_hash") cursor = db.cursor() - block_index = ledger.CURRENT_BLOCK_INDEX + block_index = util.CURRENT_BLOCK_INDEX # Initialise previous hash on first block. if block_index <= config.BLOCK_FIRST: @@ -937,7 +937,7 @@ def check_change(protocol_change, change_name): explanation += ( f"Reason: ‘{change_name}’. Please upgrade to the latest version and restart the server." ) - if ledger.CURRENT_BLOCK_INDEX >= protocol_change["block_index"]: + if util.CURRENT_BLOCK_INDEX >= protocol_change["block_index"]: raise VersionUpdateRequiredError(explanation) else: warnings.warn(explanation) # noqa: B028 diff --git a/counterparty-core/counterpartycore/lib/gettxinfo.py b/counterparty-core/counterpartycore/lib/gettxinfo.py index 4052222427..1fdffcc33f 100644 --- a/counterparty-core/counterpartycore/lib/gettxinfo.py +++ b/counterparty-core/counterpartycore/lib/gettxinfo.py @@ -2,7 +2,7 @@ import logging import struct -from counterpartycore.lib import arc4, backend, config, ledger, script, util +from counterpartycore.lib import arc4, backend, config, script, util from counterpartycore.lib.exceptions import BTCOnlyError, DecodeError from counterpartycore.lib.kickstart.blocks_parser import BlockchainParser from counterpartycore.lib.kickstart.utils import ib2h @@ -513,7 +513,7 @@ def get_tx_info_legacy(decoded_tx, block_index, block_parser=None): def _get_tx_info(db, decoded_tx, block_index, block_parser=None, p2sh_is_segwit=False): """Get the transaction info. Calls one of two subfunctions depending on signature type.""" if not block_index: - block_index = ledger.CURRENT_BLOCK_INDEX + block_index = util.CURRENT_BLOCK_INDEX if util.enabled("p2sh_addresses", block_index=block_index): # Protocol change. return get_tx_info_new( diff --git a/counterparty-core/counterpartycore/lib/kickstart/__init__.py b/counterparty-core/counterpartycore/lib/kickstart/__init__.py index c309a3df65..3d3e384309 100644 --- a/counterparty-core/counterpartycore/lib/kickstart/__init__.py +++ b/counterparty-core/counterpartycore/lib/kickstart/__init__.py @@ -11,7 +11,7 @@ from termcolor import colored from counterpartycore import server -from counterpartycore.lib import backend, blocks, config, database, ledger, log # noqa: F401 +from counterpartycore.lib import backend, blocks, config, database, ledger, util # noqa: F401 from counterpartycore.lib.backend.addrindexrs import AddrindexrsSocket # noqa: F401 from counterpartycore.lib.kickstart.blocks_parser import BlockchainParser, ChainstateParser from counterpartycore.lib.kickstart.utils import remove_shm_from_resource_tracker @@ -296,7 +296,7 @@ def backup_if_needed(new_database, resuming): def parse_block(kickstart_db, cursor, block, block_parser, tx_index): - ledger.CURRENT_BLOCK_INDEX = block["block_index"] + util.CURRENT_BLOCK_INDEX = block["block_index"] with kickstart_db: # ensure all the block or nothing # insert block diff --git a/counterparty-core/counterpartycore/lib/kickstart/blocks_parser.py b/counterparty-core/counterpartycore/lib/kickstart/blocks_parser.py index f9e1241092..e5719b27be 100644 --- a/counterparty-core/counterpartycore/lib/kickstart/blocks_parser.py +++ b/counterparty-core/counterpartycore/lib/kickstart/blocks_parser.py @@ -11,7 +11,7 @@ import apsw -from counterpartycore.lib import config, gettxinfo, ledger, util +from counterpartycore.lib import config, gettxinfo, util from counterpartycore.lib.exceptions import DecodeError from .bc_data_stream import BCDataStream @@ -79,7 +79,7 @@ def fetch_blocks(bitcoind_dir, db_path, queue, first_block_index, parser_config) use_txid=util.enabled("correct_segwit_txids", block_index=db_block[1]), ) - ledger.CURRENT_BLOCK_INDEX = db_block[1] + util.CURRENT_BLOCK_INDEX = db_block[1] for i, transaction in enumerate(block["transactions"]): # noqa: B007 try: block["transactions"][i]["parsed_vouts"] = gettxinfo.parse_transaction_vouts( diff --git a/counterparty-core/counterpartycore/lib/ledger.py b/counterparty-core/counterpartycore/lib/ledger.py index 659f99d82a..eb9a06b0f4 100644 --- a/counterparty-core/counterpartycore/lib/ledger.py +++ b/counterparty-core/counterpartycore/lib/ledger.py @@ -9,7 +9,6 @@ logger = logging.getLogger(config.LOGGER_NAME) -CURRENT_BLOCK_INDEX = None BLOCK_LEDGER = [] BLOCK_JOURNAL = [] @@ -294,7 +293,7 @@ def remove_from_balance(db, address, asset, quantity, tx_index): "quantity": balance, "address": address, "asset": asset, - "block_index": CURRENT_BLOCK_INDEX, + "block_index": util.CURRENT_BLOCK_INDEX, "tx_index": tx_index, } query = """ @@ -310,7 +309,7 @@ class DebitError(Exception): def debit(db, address, asset, quantity, tx_index, action=None, event=None): """Debit given address by quantity of asset.""" - block_index = CURRENT_BLOCK_INDEX + block_index = util.CURRENT_BLOCK_INDEX if type(quantity) != int: # noqa: E721 raise DebitError("Quantity must be an integer.") @@ -359,7 +358,7 @@ def add_to_balance(db, address, asset, quantity, tx_index): "quantity": balance, "address": address, "asset": asset, - "block_index": CURRENT_BLOCK_INDEX, + "block_index": util.CURRENT_BLOCK_INDEX, "tx_index": tx_index, } query = """ @@ -375,7 +374,7 @@ class CreditError(Exception): def credit(db, address, asset, quantity, tx_index, action=None, event=None): """Credit given address by quantity of asset.""" - block_index = CURRENT_BLOCK_INDEX + block_index = util.CURRENT_BLOCK_INDEX if type(quantity) != int: # noqa: E721 raise CreditError("Quantity must be an integer.") @@ -952,7 +951,7 @@ def value_in(db, quantity, asset, divisible=None): def price(numerator, denominator): """Return price as Fraction or Decimal.""" - if CURRENT_BLOCK_INDEX >= 294500 or config.TESTNET or config.REGTEST: # Protocol change. + if util.CURRENT_BLOCK_INDEX >= 294500 or config.TESTNET or config.REGTEST: # Protocol change. return fractions.Fraction(numerator, denominator) else: numerator = D(numerator) @@ -1558,7 +1557,7 @@ def insert_record(db, table_name, record, event): cursor.execute(query, record) cursor.close() # Add event to journal - add_to_journal(db, CURRENT_BLOCK_INDEX, "insert", table_name, event, record) + add_to_journal(db, util.CURRENT_BLOCK_INDEX, "insert", table_name, event, record) # This function allows you to update a record using an INSERT. @@ -1583,7 +1582,7 @@ def insert_update(db, table_name, id_name, id_value, update_data, event, event_i for key, value in update_data.items(): new_record[key] = value # new block_index and tx_index - new_record["block_index"] = CURRENT_BLOCK_INDEX + new_record["block_index"] = util.CURRENT_BLOCK_INDEX # let's keep the original tx_index so we can preserve order # with the old queries (ordered by default by old primary key) # TODO: restore with protocol change and checkpoints update @@ -1602,7 +1601,9 @@ def insert_update(db, table_name, id_name, id_value, update_data, event, event_i event_paylod = update_data | {id_name: id_value} | event_info if "rowid" in event_paylod: del event_paylod["rowid"] - add_to_journal(db, CURRENT_BLOCK_INDEX, "update", table_name, event, update_data | event_paylod) + add_to_journal( + db, util.CURRENT_BLOCK_INDEX, "update", table_name, event, update_data | event_paylod + ) MUTABLE_FIELDS = { diff --git a/counterparty-core/counterpartycore/lib/messages/bet.py b/counterparty-core/counterpartycore/lib/messages/bet.py index 4f4437b2da..360fe307e1 100644 --- a/counterparty-core/counterpartycore/lib/messages/bet.py +++ b/counterparty-core/counterpartycore/lib/messages/bet.py @@ -381,7 +381,7 @@ def compose( target_value, leverage, expiration, - ledger.CURRENT_BLOCK_INDEX, + util.CURRENT_BLOCK_INDEX, ) if util.date_passed(deadline): problems.append("deadline passed") diff --git a/counterparty-core/counterpartycore/lib/messages/broadcast.py b/counterparty-core/counterpartycore/lib/messages/broadcast.py index 21d5464e0f..de15b0623b 100644 --- a/counterparty-core/counterpartycore/lib/messages/broadcast.py +++ b/counterparty-core/counterpartycore/lib/messages/broadcast.py @@ -139,7 +139,7 @@ def compose(db, source: str, timestamp: int, value: float, fee_fraction: float, fee_fraction_int = int(fee_fraction * 1e8) problems = validate( - db, source, timestamp, value, fee_fraction_int, text, ledger.CURRENT_BLOCK_INDEX + db, source, timestamp, value, fee_fraction_int, text, util.CURRENT_BLOCK_INDEX ) if problems: raise exceptions.ComposeError(problems) diff --git a/counterparty-core/counterpartycore/lib/messages/btcpay.py b/counterparty-core/counterpartycore/lib/messages/btcpay.py index 6e46158f14..c9351d14e6 100644 --- a/counterparty-core/counterpartycore/lib/messages/btcpay.py +++ b/counterparty-core/counterpartycore/lib/messages/btcpay.py @@ -108,13 +108,13 @@ def compose(db, source: str, order_match_id: str): tx0_hash, tx1_hash = util.parse_id(order_match_id) destination, btc_quantity, escrowed_asset, escrowed_quantity, order_match, problems = validate( - db, source, order_match_id, ledger.CURRENT_BLOCK_INDEX + db, source, order_match_id, util.CURRENT_BLOCK_INDEX ) if problems: raise exceptions.ComposeError(problems) # Warn if down to the wire. - time_left = order_match["match_expire_index"] - ledger.CURRENT_BLOCK_INDEX + time_left = order_match["match_expire_index"] - util.CURRENT_BLOCK_INDEX if time_left < 4: logger.warning( f"Only {time_left} blocks until that order match expires. The payment might not make into the blockchain in time." diff --git a/counterparty-core/counterpartycore/lib/messages/burn.py b/counterparty-core/counterpartycore/lib/messages/burn.py index d70556dad5..45bf536c23 100644 --- a/counterparty-core/counterpartycore/lib/messages/burn.py +++ b/counterparty-core/counterpartycore/lib/messages/burn.py @@ -6,7 +6,7 @@ D = decimal.Decimal from fractions import Fraction # noqa: E402 -from counterpartycore.lib import config, database, exceptions, ledger # noqa: E402 +from counterpartycore.lib import config, database, exceptions, ledger, util # noqa: E402 logger = logging.getLogger(config.LOGGER_NAME) @@ -75,7 +75,7 @@ def compose(db, source: str, quantity: int, overburn: bool = False): cursor = db.cursor() destination = config.UNSPENDABLE problems = validate( - db, source, destination, quantity, ledger.CURRENT_BLOCK_INDEX, overburn=overburn + db, source, destination, quantity, util.CURRENT_BLOCK_INDEX, overburn=overburn ) if problems: raise exceptions.ComposeError(problems) diff --git a/counterparty-core/counterpartycore/lib/messages/destroy.py b/counterparty-core/counterpartycore/lib/messages/destroy.py index 1e556b58d6..975fa59384 100644 --- a/counterparty-core/counterpartycore/lib/messages/destroy.py +++ b/counterparty-core/counterpartycore/lib/messages/destroy.py @@ -6,7 +6,7 @@ import logging import struct -from counterpartycore.lib import config, database, ledger, message_type, script +from counterpartycore.lib import config, database, ledger, message_type, script, util from counterpartycore.lib.exceptions import * # noqa: F403 from counterpartycore.lib.script import AddressError @@ -61,9 +61,7 @@ def pack(db, asset, quantity, tag): else: tag = b"" - data += struct.pack( - FORMAT, ledger.get_asset_id(db, asset, ledger.CURRENT_BLOCK_INDEX), quantity - ) + data += struct.pack(FORMAT, ledger.get_asset_id(db, asset, util.CURRENT_BLOCK_INDEX), quantity) data += tag return data @@ -72,7 +70,7 @@ def unpack(db, message, return_dict=False): try: asset_id, quantity = struct.unpack(FORMAT, message[0:16]) tag = message[16:] - asset = ledger.get_asset_name(db, asset_id, ledger.CURRENT_BLOCK_INDEX) + asset = ledger.get_asset_name(db, asset_id, util.CURRENT_BLOCK_INDEX) except struct.error: raise UnpackError("could not unpack") # noqa: B904, F405 @@ -87,7 +85,7 @@ def unpack(db, message, return_dict=False): def validate(db, source, destination, asset, quantity): try: - ledger.get_asset_id(db, asset, ledger.CURRENT_BLOCK_INDEX) + ledger.get_asset_id(db, asset, util.CURRENT_BLOCK_INDEX) except AssetError: # noqa: F405 raise ValidateError("asset invalid") # noqa: B904, F405 diff --git a/counterparty-core/counterpartycore/lib/messages/dispenser.py b/counterparty-core/counterpartycore/lib/messages/dispenser.py index 3242849ae2..2f89df44f0 100644 --- a/counterparty-core/counterpartycore/lib/messages/dispenser.py +++ b/counterparty-core/counterpartycore/lib/messages/dispenser.py @@ -291,7 +291,7 @@ def validate( if util.enabled("dispenser_origin_permission_extended", block_index): address_oldest_transaction = backend.get_oldest_tx( - query_address, block_index=ledger.CURRENT_BLOCK_INDEX + query_address, block_index=util.CURRENT_BLOCK_INDEX ) if ( ("block_index" in address_oldest_transaction) @@ -358,7 +358,7 @@ def compose( mainchainrate, status, open_address, - ledger.CURRENT_BLOCK_INDEX, + util.CURRENT_BLOCK_INDEX, oracle_address, ) if problems: @@ -381,7 +381,7 @@ def compose( give_quantity, mainchainrate, oracle_address, - ledger.CURRENT_BLOCK_INDEX, + util.CURRENT_BLOCK_INDEX, ) if oracle_fee >= config.DEFAULT_REGULAR_DUST_SIZE: @@ -428,7 +428,7 @@ def unpack(message, return_dict=False): read = LENGTH + 21 if len(message) > read: oracle_address = address.unpack(message[read : read + 21]) - asset = ledger.generate_asset_name(assetid, ledger.CURRENT_BLOCK_INDEX) + asset = ledger.generate_asset_name(assetid, util.CURRENT_BLOCK_INDEX) status = "valid" except (exceptions.UnpackError, struct.error) as e: # noqa: F841 ( @@ -483,7 +483,7 @@ def parse(db, tx, message): action_address = tx["source"] if status == "valid": - if util.enabled("dispenser_parsing_validation", ledger.CURRENT_BLOCK_INDEX): + if util.enabled("dispenser_parsing_validation", util.CURRENT_BLOCK_INDEX): asset_id, problems = validate( db, tx["source"], @@ -744,7 +744,7 @@ def is_dispensable(db, address, amount): for next_dispenser in dispensers: if next_dispenser["oracle_address"] != None: # noqa: E711 last_price, last_fee, last_fiat_label, last_updated = ledger.get_oracle_last_price( - db, next_dispenser["oracle_address"], ledger.CURRENT_BLOCK_INDEX + db, next_dispenser["oracle_address"], util.CURRENT_BLOCK_INDEX ) fiatrate = util.satoshirate_to_fiat(next_dispenser["satoshirate"]) if fiatrate == 0 or last_price == 0: diff --git a/counterparty-core/counterpartycore/lib/messages/dividend.py b/counterparty-core/counterpartycore/lib/messages/dividend.py index 141a20f7a9..8a8d37ff21 100644 --- a/counterparty-core/counterpartycore/lib/messages/dividend.py +++ b/counterparty-core/counterpartycore/lib/messages/dividend.py @@ -192,7 +192,7 @@ def compose(db, source: str, quantity_per_unit: int, asset: str, dividend_asset: dividend_asset = ledger.resolve_subasset_longname(db, dividend_asset) dividend_total, outputs, problems, fee = validate( - db, source, quantity_per_unit, asset, dividend_asset, ledger.CURRENT_BLOCK_INDEX + db, source, quantity_per_unit, asset, dividend_asset, util.CURRENT_BLOCK_INDEX ) if problems: raise exceptions.ComposeError(problems) @@ -207,8 +207,8 @@ def compose(db, source: str, quantity_per_unit: int, asset: str, dividend_asset: None, ) - asset_id = ledger.get_asset_id(db, asset, ledger.CURRENT_BLOCK_INDEX) - dividend_asset_id = ledger.get_asset_id(db, dividend_asset, ledger.CURRENT_BLOCK_INDEX) + asset_id = ledger.get_asset_id(db, asset, util.CURRENT_BLOCK_INDEX) + dividend_asset_id = ledger.get_asset_id(db, dividend_asset, util.CURRENT_BLOCK_INDEX) data = message_type.pack(ID) data += struct.pack(FORMAT_2, quantity_per_unit, asset_id, dividend_asset_id) return (source, [], data) diff --git a/counterparty-core/counterpartycore/lib/messages/issuance.py b/counterparty-core/counterpartycore/lib/messages/issuance.py index 24765425cc..9fdde2204e 100644 --- a/counterparty-core/counterpartycore/lib/messages/issuance.py +++ b/counterparty-core/counterpartycore/lib/messages/issuance.py @@ -383,9 +383,9 @@ def compose( # generate a random numeric asset id which will map to this subasset asset = util.generate_random_asset() - asset_id = ledger.generate_asset_id(asset, ledger.CURRENT_BLOCK_INDEX) + asset_id = ledger.generate_asset_id(asset, util.CURRENT_BLOCK_INDEX) asset_name = ledger.generate_asset_name( - asset_id, ledger.CURRENT_BLOCK_INDEX + asset_id, util.CURRENT_BLOCK_INDEX ) # This will remove leading zeros in the numeric assets ( @@ -414,7 +414,7 @@ def compose( description, subasset_parent, subasset_longname, - ledger.CURRENT_BLOCK_INDEX, + util.CURRENT_BLOCK_INDEX, ) if problems: raise exceptions.ComposeError(problems) @@ -492,10 +492,10 @@ def compose( ) else: subasset_format = util.get_value_by_block_index( - "issuance_subasset_serialization_format", ledger.CURRENT_BLOCK_INDEX + "issuance_subasset_serialization_format", util.CURRENT_BLOCK_INDEX ) subasset_format_length = util.get_value_by_block_index( - "issuance_subasset_serialization_length", ledger.CURRENT_BLOCK_INDEX + "issuance_subasset_serialization_length", util.CURRENT_BLOCK_INDEX ) # Type 21 subasset issuance SUBASSET_FORMAT >QQ?B diff --git a/counterparty-core/counterpartycore/lib/messages/order.py b/counterparty-core/counterpartycore/lib/messages/order.py index 151d30b973..79cb1d1f45 100644 --- a/counterparty-core/counterpartycore/lib/messages/order.py +++ b/counterparty-core/counterpartycore/lib/messages/order.py @@ -461,13 +461,13 @@ def compose( get_quantity, expiration, fee_required, - ledger.CURRENT_BLOCK_INDEX, + util.CURRENT_BLOCK_INDEX, ) if problems: raise exceptions.ComposeError(problems) - give_id = ledger.get_asset_id(db, give_asset, ledger.CURRENT_BLOCK_INDEX) - get_id = ledger.get_asset_id(db, get_asset, ledger.CURRENT_BLOCK_INDEX) + give_id = ledger.get_asset_id(db, give_asset, util.CURRENT_BLOCK_INDEX) + get_id = ledger.get_asset_id(db, get_asset, util.CURRENT_BLOCK_INDEX) data = message_type.pack(ID) data += struct.pack( FORMAT, give_id, give_quantity, get_id, get_quantity, expiration, fee_required diff --git a/counterparty-core/counterpartycore/lib/messages/rps.py b/counterparty-core/counterpartycore/lib/messages/rps.py index 15da899975..cb2569ee7c 100644 --- a/counterparty-core/counterpartycore/lib/messages/rps.py +++ b/counterparty-core/counterpartycore/lib/messages/rps.py @@ -285,7 +285,7 @@ def compose( db, source: str, possible_moves: int, wager: int, move_random_hash: str, expiration: int ): problems = validate( - db, source, possible_moves, wager, move_random_hash, expiration, ledger.CURRENT_BLOCK_INDEX + db, source, possible_moves, wager, move_random_hash, expiration, util.CURRENT_BLOCK_INDEX ) if problems: diff --git a/counterparty-core/counterpartycore/lib/messages/rpsresolve.py b/counterparty-core/counterpartycore/lib/messages/rpsresolve.py index 77c8bf4ca0..06a2c26b30 100644 --- a/counterparty-core/counterpartycore/lib/messages/rpsresolve.py +++ b/counterparty-core/counterpartycore/lib/messages/rpsresolve.py @@ -114,7 +114,7 @@ def compose(db, source: str, move: int, random: str, rps_match_id: str): raise exceptions.ComposeError(problems) # Warn if down to the wire. - time_left = rps_match["match_expire_index"] - ledger.CURRENT_BLOCK_INDEX + time_left = rps_match["match_expire_index"] - util.CURRENT_BLOCK_INDEX if time_left < 4: logger.warning( f"Only {time_left} blocks until that rps match expires. The conclusion might not make into the blockchain in time." diff --git a/counterparty-core/counterpartycore/lib/messages/sweep.py b/counterparty-core/counterpartycore/lib/messages/sweep.py index bc6656bec1..a4034aadd9 100644 --- a/counterparty-core/counterpartycore/lib/messages/sweep.py +++ b/counterparty-core/counterpartycore/lib/messages/sweep.py @@ -113,7 +113,7 @@ def compose(db, source: str, destination: str, flags: int, memo: str): memo = memo.encode("utf-8") memo = struct.pack(f">{len(memo)}s", memo) - block_index = ledger.CURRENT_BLOCK_INDEX + block_index = util.CURRENT_BLOCK_INDEX problems, total_fee = validate(db, source, destination, flags, memo, block_index) if problems: raise exceptions.ComposeError(problems) diff --git a/counterparty-core/counterpartycore/lib/messages/versions/enhanced_send.py b/counterparty-core/counterpartycore/lib/messages/versions/enhanced_send.py index 56df533e2d..6156bb4a36 100644 --- a/counterparty-core/counterpartycore/lib/messages/versions/enhanced_send.py +++ b/counterparty-core/counterpartycore/lib/messages/versions/enhanced_send.py @@ -128,7 +128,7 @@ def compose( memo = memo.encode("utf-8") memo_bytes = struct.pack(f">{len(memo)}s", memo) - block_index = ledger.CURRENT_BLOCK_INDEX + block_index = util.CURRENT_BLOCK_INDEX problems = validate(db, source, destination, asset, quantity, memo_bytes, block_index) if problems: diff --git a/counterparty-core/counterpartycore/lib/messages/versions/mpma.py b/counterparty-core/counterpartycore/lib/messages/versions/mpma.py index a843258831..34990d1c5e 100644 --- a/counterparty-core/counterpartycore/lib/messages/versions/mpma.py +++ b/counterparty-core/counterpartycore/lib/messages/versions/mpma.py @@ -114,7 +114,7 @@ def compose(db, source: str, asset_dest_quant_list: list, memo: str, memo_is_hex if balance < quantity: raise exceptions.ComposeError(f"insufficient funds for {asset}") - block_index = ledger.CURRENT_BLOCK_INDEX + block_index = util.CURRENT_BLOCK_INDEX cursor.close() diff --git a/counterparty-core/counterpartycore/lib/messages/versions/send1.py b/counterparty-core/counterpartycore/lib/messages/versions/send1.py index 2ce66afc7a..b67f4ec45d 100644 --- a/counterparty-core/counterpartycore/lib/messages/versions/send1.py +++ b/counterparty-core/counterpartycore/lib/messages/versions/send1.py @@ -87,7 +87,7 @@ def compose(db, source: str, destination: str, asset: str, quantity: int): if balance < quantity: raise exceptions.ComposeError("insufficient funds") - block_index = ledger.CURRENT_BLOCK_INDEX + block_index = util.CURRENT_BLOCK_INDEX problems = validate(db, source, destination, asset, quantity, block_index) if problems: diff --git a/counterparty-core/counterpartycore/lib/prefetcher.py b/counterparty-core/counterpartycore/lib/prefetcher.py index c68ac0ef4d..a45de437e7 100644 --- a/counterparty-core/counterpartycore/lib/prefetcher.py +++ b/counterparty-core/counterpartycore/lib/prefetcher.py @@ -5,7 +5,7 @@ import bitcoin as bitcoinlib -from counterpartycore.lib import backend, config, ledger, util +from counterpartycore.lib import backend, config, util logger = logging.getLogger(config.LOGGER_NAME) @@ -71,7 +71,7 @@ def run(self): def start_all(num_prefetcher_threads): # Block Prefetcher and Indexer block_first = config.BLOCK_FIRST_TESTNET if config.TESTNET else config.BLOCK_FIRST - block_first = ledger.CURRENT_BLOCK_INDEX or block_first + block_first = util.CURRENT_BLOCK_INDEX or block_first NEXT_BLOCK_TO_PREFETCH.put(block_first) for thread_index in range(1, num_prefetcher_threads + 1): prefetcher_thread = Prefetcher(thread_index) diff --git a/counterparty-core/counterpartycore/lib/transaction.py b/counterparty-core/counterpartycore/lib/transaction.py index 6149c1eaa8..519c32372b 100644 --- a/counterparty-core/counterpartycore/lib/transaction.py +++ b/counterparty-core/counterpartycore/lib/transaction.py @@ -837,7 +837,7 @@ def construct( gettxinfo.get_tx_info_new( db, BlockchainParser().deserialize_tx(unsigned_tx_hex), - ledger.CURRENT_BLOCK_INDEX, + util.CURRENT_BLOCK_INDEX, p2sh_is_segwit=script.is_bech32(desired_source), composing=True, ) @@ -1688,7 +1688,7 @@ def unpack(db, datahex: str, block_index: int = None): """ data = binascii.unhexlify(datahex) message_type_id, message = message_type.unpack(data) - block_index = block_index or ledger.CURRENT_BLOCK_INDEX + block_index = block_index or util.CURRENT_BLOCK_INDEX issuance_ids = [ messages.issuance.ID, diff --git a/counterparty-core/counterpartycore/lib/util.py b/counterparty-core/counterpartycore/lib/util.py index f412d55189..b862773395 100644 --- a/counterparty-core/counterpartycore/lib/util.py +++ b/counterparty-core/counterpartycore/lib/util.py @@ -15,10 +15,12 @@ import requests -from counterpartycore.lib import config, exceptions, ledger +from counterpartycore.lib import config, exceptions logger = logging.getLogger(config.LOGGER_NAME) +CURRENT_BLOCK_INDEX = None + D = decimal.Decimal B26_DIGITS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" @@ -481,7 +483,7 @@ def enabled(change_name, block_index=None): enable_block_index = PROTOCOL_CHANGES[change_name][index_name] if not block_index: - block_index = ledger.CURRENT_BLOCK_INDEX + block_index = CURRENT_BLOCK_INDEX if block_index >= enable_block_index: return True @@ -491,7 +493,7 @@ def enabled(change_name, block_index=None): def get_value_by_block_index(change_name, block_index=None): if not block_index: - block_index = ledger.CURRENT_BLOCK_INDEX + block_index = CURRENT_BLOCK_INDEX max_block_index = -1 diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index b67931f910..08c1467b73 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -24,7 +24,6 @@ check, config, database, - ledger, log, transaction, util, @@ -647,7 +646,7 @@ def initialise_db(): logger.info(f"Connecting to database (SQLite {apsw.apswversion()}).") db = database.get_connection(read_only=False) - ledger.CURRENT_BLOCK_INDEX = blocks.last_db_index(db) + util.CURRENT_BLOCK_INDEX = blocks.last_db_index(db) return db @@ -660,7 +659,7 @@ def connect_to_backend(): def connect_to_addrindexrs(): step = "Connecting to `addrindexrs`..." with Halo(text=step, spinner=SPINNER_STYLE): - ledger.CURRENT_BLOCK_INDEX = 0 + util.CURRENT_BLOCK_INDEX = 0 backend.backend() check_addrindexrs = {} while check_addrindexrs == {}: diff --git a/counterparty-core/counterpartycore/test/conftest.py b/counterparty-core/counterpartycore/test/conftest.py index ad41842f9e..93076f436b 100644 --- a/counterparty-core/counterpartycore/test/conftest.py +++ b/counterparty-core/counterpartycore/test/conftest.py @@ -17,7 +17,7 @@ from pycoin.coins.bitcoin import Tx # noqa: F401 from counterpartycore import server -from counterpartycore.lib import arc4, config, database, ledger, log, script, util +from counterpartycore.lib import arc4, config, database, log, script, util from counterpartycore.lib.api import api_server as api_v2 from counterpartycore.lib.api import api_v1 as api from counterpartycore.test import util_test @@ -77,7 +77,7 @@ def enabled(change_name, block_index=None): if shouldCheckForMockProtocolChangesAtBlock(change_name): _block_index = block_index if _block_index is None: - _block_index = ledger.CURRENT_BLOCK_INDEX + _block_index = util.CURRENT_BLOCK_INDEX if _block_index >= MOCK_PROTOCOL_CHANGES_AT_BLOCK[change_name]["block_index"]: return True return False @@ -88,10 +88,10 @@ def enabled(change_name, block_index=None): if change_name not in util.PROTOCOL_CHANGES: raise KeyError(change_name) - # print(f"ALWAYS_LATEST_PROTOCOL_CHANGES {change_name} {block_index or ledger.CURRENT_BLOCK_INDEX} enabled: True") + # print(f"ALWAYS_LATEST_PROTOCOL_CHANGES {change_name} {block_index or util.CURRENT_BLOCK_INDEX} enabled: True") return True else: - # print(f"ALWAYS_LATEST_PROTOCOL_CHANGES {change_name} {block_index or ledger.CURRENT_BLOCK_INDEX} enabled: {_enabled(change_name, block_index)}") + # print(f"ALWAYS_LATEST_PROTOCOL_CHANGES {change_name} {block_index or util.CURRENT_BLOCK_INDEX} enabled: {_enabled(change_name, block_index)}") return _enabled(change_name, block_index) diff --git a/counterparty-core/counterpartycore/test/p2sh_encoding_test.py b/counterparty-core/counterpartycore/test/p2sh_encoding_test.py index 06c1bf4088..c3ea505ccc 100644 --- a/counterparty-core/counterpartycore/test/p2sh_encoding_test.py +++ b/counterparty-core/counterpartycore/test/p2sh_encoding_test.py @@ -22,9 +22,9 @@ config, exceptions, gettxinfo, - ledger, script, transaction, + util, ) from counterpartycore.lib.kickstart.blocks_parser import BlockchainParser # noqa: E402 from counterpartycore.lib.transaction_helper import p2sh_encoding, serializer # noqa: E402, F401 @@ -48,7 +48,7 @@ def test_p2sh_encoding_composed(server_db): gettxinfo._get_tx_info( server_db, BlockchainParser().deserialize_tx(datatxhex, True), - ledger.CURRENT_BLOCK_INDEX, + util.CURRENT_BLOCK_INDEX, ) ) print("!!!!!!!!!!!!!!!!>1") @@ -138,7 +138,7 @@ def test_p2sh_encoding(server_db): gettxinfo._get_tx_info( server_db, BlockchainParser().deserialize_tx(pretxhex, True), - ledger.CURRENT_BLOCK_INDEX, + util.CURRENT_BLOCK_INDEX, ) # store transaction @@ -214,7 +214,7 @@ def test_p2sh_encoding(server_db): gettxinfo._get_tx_info( server_db, BlockchainParser().deserialize_tx(datatxhex, True), - ledger.CURRENT_BLOCK_INDEX, + util.CURRENT_BLOCK_INDEX, ) ) # assert parsed_source == source # make_canonical cannot calculate this address @@ -406,7 +406,7 @@ def test_p2sh_encoding_long_data(server_db): gettxinfo._get_tx_info( server_db, BlockchainParser().deserialize_tx(datatxhex, True), - ledger.CURRENT_BLOCK_INDEX, + util.CURRENT_BLOCK_INDEX, ) ) # assert parsed_source == source # make_canonical can't calculate this address @@ -527,7 +527,7 @@ def test_p2sh_encoding_manual_multisig_transaction(server_db): gettxinfo._get_tx_info( server_db, BlockchainParser().deserialize_tx(datatxhex, True), - ledger.CURRENT_BLOCK_INDEX, + util.CURRENT_BLOCK_INDEX, ) ) assert parsed_source == source diff --git a/counterparty-core/counterpartycore/test/util_test.py b/counterparty-core/counterpartycore/test/util_test.py index 56713288fb..7fcf4c95e9 100644 --- a/counterparty-core/counterpartycore/test/util_test.py +++ b/counterparty-core/counterpartycore/test/util_test.py @@ -99,10 +99,10 @@ def reset_current_block_index(db): latest_block = list( cursor.execute("""SELECT * FROM blocks ORDER BY block_index DESC LIMIT 1""") )[0] - ledger.CURRENT_BLOCK_INDEX = latest_block["block_index"] + util.CURRENT_BLOCK_INDEX = latest_block["block_index"] cursor.close() - return ledger.CURRENT_BLOCK_INDEX + return util.CURRENT_BLOCK_INDEX def dump_database(db): @@ -162,7 +162,7 @@ def insert_block(db, block_index, parse_block=True): "difficulty": None, } ledger.insert_record(db, "blocks", bindings, "NEW_BLOCK") - ledger.CURRENT_BLOCK_INDEX = block_index # TODO: Correct?! + util.CURRENT_BLOCK_INDEX = block_index # TODO: Correct?! if parse_block: blocks.parse_block(db, block_index, block_time) @@ -233,7 +233,7 @@ def insert_raw_transaction(raw_transaction, db): MOCK_UTXO_SET.add_raw_transaction(raw_transaction, tx_id=tx_hash, confirmations=1) - ledger.CURRENT_BLOCK_INDEX = block_index + util.CURRENT_BLOCK_INDEX = block_index blocks.parse_block(db, block_index, block_time) return tx_hash, tx @@ -253,7 +253,7 @@ def insert_unconfirmed_raw_transaction(raw_transaction, db): tx_index = tx_index + 1 source, destination, btc_amount, fee, data, extra = gettxinfo._get_tx_info( - db, BlockchainParser().deserialize_tx(raw_transaction, True), ledger.CURRENT_BLOCK_INDEX + db, BlockchainParser().deserialize_tx(raw_transaction, True), util.CURRENT_BLOCK_INDEX ) tx = { "tx_index": tx_index, @@ -340,7 +340,7 @@ def insert_transaction(transaction, db): db, "transaction_outputs", transaction_outputs_bindings, "NEW_TRANSACTION_OUTPUT" ) - ledger.CURRENT_BLOCK_INDEX = transaction["block_index"] + util.CURRENT_BLOCK_INDEX = transaction["block_index"] def initialise_rawtransactions_db(db): From b1ca55b9b4445e18115196f77bcd6458a3479517 Mon Sep 17 00:00:00 2001 From: Adam Krellenstein Date: Thu, 2 May 2024 22:05:41 +0200 Subject: [PATCH 224/280] Typo --- RELEASE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RELEASE.md b/RELEASE.md index a7dcc22301..03b979261e 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -22,7 +22,7 @@ # Announcements -- [ ] [Official Forums](https://forums.counterparty.io/t/new-version-announcements-counterparty-and-counterpartyd/363)) +- [ ] [Official Forums](https://forums.counterparty.io/t/new-version-announcements-counterparty-and-counterpartyd/363) - [ ] Mailing list - [ ] Telegram - [ ] Twitter From af856ae6b60893423c1708de9c782d7e6d60491c Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 3 May 2024 11:38:50 +0200 Subject: [PATCH 225/280] Filter 'handle_healthz' transactions --- counterparty-core/counterpartycore/lib/sentry.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/counterparty-core/counterpartycore/lib/sentry.py b/counterparty-core/counterpartycore/lib/sentry.py index 0e241367c1..ca835ccc37 100644 --- a/counterparty-core/counterpartycore/lib/sentry.py +++ b/counterparty-core/counterpartycore/lib/sentry.py @@ -29,6 +29,14 @@ def before_send(event, _hint): return event +def filter_transactions(event, _hint): + if "transaction" not in event: + return event + if event["transaction"] == "handle_healthz": + return None + return event + + def init(): # No-op if SENTRY_DSN is not set if not os.environ.get("SENTRY_DSN"): @@ -40,4 +48,5 @@ def init(): release=release, traces_sample_rate=1.0, before_send=before_send, + before_send_transaction=filter_transactions, ) From 220807c9321f8b07a50131e9fc52eb79a01b76b7 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 3 May 2024 11:44:13 +0200 Subject: [PATCH 226/280] Add EXCLUDED_TRANSACTIONS list --- counterparty-core/counterpartycore/lib/sentry.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/counterparty-core/counterpartycore/lib/sentry.py b/counterparty-core/counterpartycore/lib/sentry.py index ca835ccc37..ee1f6f3919 100644 --- a/counterparty-core/counterpartycore/lib/sentry.py +++ b/counterparty-core/counterpartycore/lib/sentry.py @@ -9,6 +9,8 @@ release = os.environ.get("SENTRY_RELEASE", config.__version__) +EXCLUDED_TRANSACTIONS = ["handle_healthz"] + def before_send(event, _hint): db = database.get_connection(read_only=True) @@ -32,7 +34,8 @@ def before_send(event, _hint): def filter_transactions(event, _hint): if "transaction" not in event: return event - if event["transaction"] == "handle_healthz": + if event["transaction"] in EXCLUDED_TRANSACTIONS: + print("SKIP") return None return event From 094744dae1dbdacec7600a0645c539d1c3116220 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 3 May 2024 11:58:33 +0200 Subject: [PATCH 227/280] Enable Sentry in API v2 --- .../counterpartycore/lib/api/api_server.py | 3 +++ counterparty-core/counterpartycore/lib/sentry.py | 10 ++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 52da33f5de..754842936c 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -15,6 +15,7 @@ database, exceptions, ledger, + sentry, transaction, ) from counterpartycore.lib.api.routes import ROUTES @@ -244,6 +245,8 @@ def handle_route(**kwargs): def run_api_server(args): + logger.info("Starting API Server v2.") + sentry.init() app = Flask(config.APP_NAME) # Initialise log and config server.initialise_log_and_config(argparse.Namespace(**args)) diff --git a/counterparty-core/counterpartycore/lib/sentry.py b/counterparty-core/counterpartycore/lib/sentry.py index ee1f6f3919..9fb196563c 100644 --- a/counterparty-core/counterpartycore/lib/sentry.py +++ b/counterparty-core/counterpartycore/lib/sentry.py @@ -9,7 +9,7 @@ release = os.environ.get("SENTRY_RELEASE", config.__version__) -EXCLUDED_TRANSACTIONS = ["handle_healthz"] +EXCLUDED_URL = ["/healthz"] def before_send(event, _hint): @@ -34,9 +34,11 @@ def before_send(event, _hint): def filter_transactions(event, _hint): if "transaction" not in event: return event - if event["transaction"] in EXCLUDED_TRANSACTIONS: - print("SKIP") - return None + if "request" not in event: + return event + for excluded in EXCLUDED_URL: + if excluded in event["request"]["url"]: + return None return event From 9e3edf3c8d94dcd596292c1dc7a661c4fff59007 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 3 May 2024 12:21:27 +0200 Subject: [PATCH 228/280] Use fonction name as transaction name --- .../counterpartycore/lib/api/api_server.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 754842936c..05a4797537 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -33,6 +33,7 @@ from flask import g as flask_globals from flask_cors import CORS from flask_httpauth import HTTPBasicAuth +from sentry_sdk import configure_scope as configure_sentry_scope from werkzeug.serving import make_server multiprocessing.set_start_method("spawn", force=True) @@ -188,6 +189,12 @@ def inject_details(db, result): return result +def get_transaction_name(rule): + if rule == "/": + return "APIRoot" + return "".join([part.capitalize() for part in ROUTES[rule]["function"].__name__.split("_")]) + + @auth.login_required def handle_route(**kwargs): if BACKEND_HEIGHT is None: @@ -206,6 +213,9 @@ def handle_route(**kwargs): rule = str(request.url_rule.rule) + with configure_sentry_scope() as scope: + scope.set_transaction_name(get_transaction_name(rule)) + # check if server must be ready if not is_server_ready() and not return_result_if_not_ready(rule): return return_result(503, error="Counterparty not ready") From dda2910e28792258707c8fba8d2d2d65494c071e Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 3 May 2024 12:29:41 +0200 Subject: [PATCH 229/280] use RPC method name as transaction name --- counterparty-core/counterpartycore/lib/api/api_v1.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/counterparty-core/counterpartycore/lib/api/api_v1.py b/counterparty-core/counterpartycore/lib/api/api_v1.py index 9436084f2f..f05a6a3171 100644 --- a/counterparty-core/counterpartycore/lib/api/api_v1.py +++ b/counterparty-core/counterpartycore/lib/api/api_v1.py @@ -60,6 +60,7 @@ from flask_httpauth import HTTPBasicAuth from jsonrpc import dispatcher from jsonrpc.exceptions import JSONRPCDispatchException +from sentry_sdk import configure_scope as configure_sentry_scope from werkzeug.serving import make_server from xmltodict import unparse as serialize_to_xml @@ -1127,6 +1128,9 @@ def handle_rpc_post(request_json): ) return flask.Response(obj_error.json.encode(), 400, mimetype="application/json") + with configure_sentry_scope() as scope: + scope.set_transaction_name(request_data["method"]) + # Only arguments passed as a `dict` are supported. if request_data.get("params", None) and not isinstance(request_data["params"], dict): obj_error = jsonrpc.exceptions.JSONRPCInvalidRequest( From fe14c8f318bb0c8ad682504fcf448ea33d3c7f2b Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 3 May 2024 13:14:54 +0200 Subject: [PATCH 230/280] Move BLOCKCHAIN_CACHE in backend --- .../counterpartycore/lib/backend/__init__.py | 7 ++++--- .../counterpartycore/lib/blocks.py | 20 +++++++++---------- .../counterpartycore/lib/prefetcher.py | 5 ++--- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/backend/__init__.py b/counterparty-core/counterpartycore/lib/backend/__init__.py index 71290c0080..08d0a0a379 100644 --- a/counterparty-core/counterpartycore/lib/backend/__init__.py +++ b/counterparty-core/counterpartycore/lib/backend/__init__.py @@ -6,7 +6,7 @@ import bitcoin as bitcoinlib from bitcoin.core import CBlock -from counterpartycore.lib import config, prefetcher, script, util +from counterpartycore.lib import config, script, util from counterpartycore.lib.backend import addrindexrs # noqa: F401 logger = logging.getLogger(config.LOGGER_NAME) @@ -14,6 +14,7 @@ MEMPOOL_CACHE_INITIALIZED = False INITIALIZED = False +BLOCKCHAIN_CACHE = {} PRETX_CACHE = {} @@ -73,8 +74,8 @@ def clear_pretx(txid): def getrawtransaction( tx_hash: str, verbose: bool = False, skip_missing: bool = False, block_index: int = None ): - if block_index and block_index in prefetcher.BLOCKCHAIN_CACHE: - return prefetcher.BLOCKCHAIN_CACHE[block_index]["raw_transactions"][tx_hash] + if block_index and block_index in BLOCKCHAIN_CACHE: + return BLOCKCHAIN_CACHE[block_index]["raw_transactions"][tx_hash] if tx_hash in PRETX_CACHE: return PRETX_CACHE[tx_hash] diff --git a/counterparty-core/counterpartycore/lib/blocks.py b/counterparty-core/counterpartycore/lib/blocks.py index cfc7774bed..06f1148c64 100644 --- a/counterparty-core/counterpartycore/lib/blocks.py +++ b/counterparty-core/counterpartycore/lib/blocks.py @@ -1021,18 +1021,16 @@ def follow(db): check.software_version() # Get and parse transactions in this block (atomically). - # logger.debug(f'Blockchain cache size: {len(prefetcher.BLOCKCHAIN_CACHE)}') - if current_index in prefetcher.BLOCKCHAIN_CACHE: + # logger.debug(f'Blockchain cache size: {len(backend.BLOCKCHAIN_CACHE)}') + if current_index in backend.BLOCKCHAIN_CACHE: # logger.debug(f'Blockchain cache hit! Block index: {current_index}') - block_hash = prefetcher.BLOCKCHAIN_CACHE[current_index]["block_hash"] - txhash_list = prefetcher.BLOCKCHAIN_CACHE[current_index]["txhash_list"] - raw_transactions = prefetcher.BLOCKCHAIN_CACHE[current_index]["raw_transactions"] - previous_block_hash = prefetcher.BLOCKCHAIN_CACHE[current_index][ - "previous_block_hash" - ] - block_time = prefetcher.BLOCKCHAIN_CACHE[current_index]["block_time"] - block_difficulty = prefetcher.BLOCKCHAIN_CACHE[current_index]["block_difficulty"] - del prefetcher.BLOCKCHAIN_CACHE[current_index] + block_hash = backend.BLOCKCHAIN_CACHE[current_index]["block_hash"] + txhash_list = backend.BLOCKCHAIN_CACHE[current_index]["txhash_list"] + raw_transactions = backend.BLOCKCHAIN_CACHE[current_index]["raw_transactions"] + previous_block_hash = backend.BLOCKCHAIN_CACHE[current_index]["previous_block_hash"] + block_time = backend.BLOCKCHAIN_CACHE[current_index]["block_time"] + block_difficulty = backend.BLOCKCHAIN_CACHE[current_index]["block_difficulty"] + del backend.BLOCKCHAIN_CACHE[current_index] else: if block_index < block_count - 100: logger.warning(f"Blockchain cache miss :/ Block index: {current_index}") diff --git a/counterparty-core/counterpartycore/lib/prefetcher.py b/counterparty-core/counterpartycore/lib/prefetcher.py index a45de437e7..28d9b069a0 100644 --- a/counterparty-core/counterpartycore/lib/prefetcher.py +++ b/counterparty-core/counterpartycore/lib/prefetcher.py @@ -10,7 +10,6 @@ logger = logging.getLogger(config.LOGGER_NAME) -BLOCKCHAIN_CACHE = {} BLOCKCHAIN_CACHE_MAX_SIZE = 100 PREFETCHER_THREADS = [] NEXT_BLOCK_TO_PREFETCH = queue.Queue() @@ -38,7 +37,7 @@ def run(self): if self.stop_event.is_set(): break - if len(BLOCKCHAIN_CACHE) >= BLOCKCHAIN_CACHE_MAX_SIZE: + if len(backend.BLOCKCHAIN_CACHE) >= BLOCKCHAIN_CACHE_MAX_SIZE: logger.debug( f"Blockchain cache is full. Sleeping Prefetcher thread {self.thread_index}." ) @@ -58,7 +57,7 @@ def run(self): block, correct_segwit=util.enabled("correct_segwit_txids", block_index=block_index), ) - BLOCKCHAIN_CACHE[block_index] = { + backend.BLOCKCHAIN_CACHE[block_index] = { "block_hash": block_hash, "txhash_list": txhash_list, "raw_transactions": raw_transactions, From 58749208bf953ce99b99c84b535130d11b7a7cc6 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 3 May 2024 13:42:22 +0200 Subject: [PATCH 231/280] v2 is the default --- counterparty-core/counterpartycore/lib/api/api_server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 05a4797537..b6bbb3e8cd 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -255,7 +255,7 @@ def handle_route(**kwargs): def run_api_server(args): - logger.info("Starting API Server v2.") + logger.info("Starting API Server.") sentry.init() app = Flask(config.APP_NAME) # Initialise log and config From 5c22cb5242f62839654dcd7c3e4f0e2452d4993c Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 3 May 2024 14:06:40 +0200 Subject: [PATCH 232/280] Remove filter client side; Rename healthz routes with 'healthcheck' --- .../counterpartycore/lib/api/api_server.py | 2 ++ .../counterpartycore/lib/api/api_v1.py | 2 ++ counterparty-core/counterpartycore/lib/sentry.py | 14 -------------- 3 files changed, 4 insertions(+), 14 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index b6bbb3e8cd..6fcc668e05 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -192,6 +192,8 @@ def inject_details(db, result): def get_transaction_name(rule): if rule == "/": return "APIRoot" + if rule == "/healthz": + return "healthcheck" return "".join([part.capitalize() for part in ROUTES[rule]["function"].__name__.split("_")]) diff --git a/counterparty-core/counterpartycore/lib/api/api_v1.py b/counterparty-core/counterpartycore/lib/api/api_v1.py index f05a6a3171..141641b5aa 100644 --- a/counterparty-core/counterpartycore/lib/api/api_v1.py +++ b/counterparty-core/counterpartycore/lib/api/api_v1.py @@ -1063,6 +1063,8 @@ def _set_cors_headers(response): @app.route("/healthz", methods=["GET"]) def handle_healthz(): + with configure_sentry_scope() as scope: + scope.set_transaction_name("healthcheck") check_type = request.args.get("type", "light") return api_util.handle_healthz_route(self.db, check_type) diff --git a/counterparty-core/counterpartycore/lib/sentry.py b/counterparty-core/counterpartycore/lib/sentry.py index 9fb196563c..0e241367c1 100644 --- a/counterparty-core/counterpartycore/lib/sentry.py +++ b/counterparty-core/counterpartycore/lib/sentry.py @@ -9,8 +9,6 @@ release = os.environ.get("SENTRY_RELEASE", config.__version__) -EXCLUDED_URL = ["/healthz"] - def before_send(event, _hint): db = database.get_connection(read_only=True) @@ -31,17 +29,6 @@ def before_send(event, _hint): return event -def filter_transactions(event, _hint): - if "transaction" not in event: - return event - if "request" not in event: - return event - for excluded in EXCLUDED_URL: - if excluded in event["request"]["url"]: - return None - return event - - def init(): # No-op if SENTRY_DSN is not set if not os.environ.get("SENTRY_DSN"): @@ -53,5 +40,4 @@ def init(): release=release, traces_sample_rate=1.0, before_send=before_send, - before_send_transaction=filter_transactions, ) From 8964443d660aa0ec116bf4d079b0ee546ad13e5d Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Fri, 3 May 2024 14:56:37 +0200 Subject: [PATCH 233/280] Pass profile as argument for test_compose.sh --- .github/workflows/test_compose.sh | 19 +++++++++++++------ .github/workflows/test_compose.yml | 5 +++-- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/.github/workflows/test_compose.sh b/.github/workflows/test_compose.sh index abe220c66d..4b8af763d2 100644 --- a/.github/workflows/test_compose.sh +++ b/.github/workflows/test_compose.sh @@ -10,6 +10,13 @@ fi touch "./DOCKER_COMPOSE_TEST_LOCK" GIT_BRANCH="$1" +PROFILE="$2" + +if [ "$PROFILE" = "testnet" ]; then + PORT=14000 +else + PORT=4000 +fi # pull the latest code rm -rf counterparty-core @@ -19,7 +26,7 @@ cd counterparty-core VERSION=$(cat docker-compose.yml | grep 'image: counterparty/counterparty:' | awk -F ":" '{print $3}') # stop the running containers -docker compose --profile testnet stop +docker compose --profile $PROFILE stop # remove counterparty-core container #docker rm counterparty-core-counterparty-core-1 @@ -35,16 +42,16 @@ docker build -t counterparty/counterparty:$VERSION . # sudo rm -rf ~/.local/share/counterparty-docker-data/counterparty/* # re-start containers -docker compose --profile testnet up -d +docker compose --profile $PROFILE up -d -while [ "$(docker compose --profile testnet logs counterparty-core-testnet 2>&1 | grep 'Ready for queries')" = "" ]; do - echo "Waiting for counterparty-core to be ready" +while [ "$(docker compose --profile $PROFILE logs counterparty-core-$PROFILE 2>&1 | grep 'Ready for queries')" = "" ]; do + echo "Waiting for counterparty-core $PROFILE to be ready" sleep 1 done rm -f ../DOCKER_COMPOSE_TEST_LOCK -server_response_v1=$(curl -X POST http://127.0.0.1:14100/v1/api/ \ +server_response_v1=$(curl -X POST http://127.0.0.1:$PORT/v1/api/ \ --user rpc:rpc \ -H 'Content-Type: application/json; charset=UTF-8'\ -H 'Accept: application/json, text/javascript' \ @@ -56,7 +63,7 @@ if [ "$server_response_v1" -ne 200 ]; then exit 1 fi -server_response_v2=$(curl http://api:api@127.0.0.1:14000/ \ +server_response_v2=$(curl http://api:api@127.0.0.1:$PORT/ \ --write-out '%{http_code}' --silent --output /dev/null) if [ "$server_response_v2" -ne 200 ]; then diff --git a/.github/workflows/test_compose.yml b/.github/workflows/test_compose.yml index e6a39862fa..76690b8883 100644 --- a/.github/workflows/test_compose.yml +++ b/.github/workflows/test_compose.yml @@ -2,7 +2,7 @@ name: Docker Compose on: push: - branches: ['develop', 'master', "compose"] + branches: ['develop', 'master', "_compose"] jobs: build: @@ -22,4 +22,5 @@ jobs: scp: | .github/workflows/test_compose.sh ${{ secrets.TEST_SERVER_USER }}@${{ secrets.TEST_SERVER_IP }}:~/test_compose.sh ssh_after: | - sh test_compose.sh ${{ steps.branch-names.outputs.current_branch }} \ No newline at end of file + sh test_compose.sh ${{ steps.branch-names.outputs.current_branch }} testnet + sh test_compose.sh ${{ steps.branch-names.outputs.current_branch }} mainnet From 10a9598a0f376412ae81d9157e379edda61cf866 Mon Sep 17 00:00:00 2001 From: matt marcello Date: Fri, 3 May 2024 12:07:14 -0400 Subject: [PATCH 234/280] raw ip -> telemetry.counterparty.io --- counterparty-core/counterpartycore/lib/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/counterparty-core/counterpartycore/lib/config.py b/counterparty-core/counterpartycore/lib/config.py index a753a4c429..b8d8ed377d 100644 --- a/counterparty-core/counterpartycore/lib/config.py +++ b/counterparty-core/counterpartycore/lib/config.py @@ -160,7 +160,7 @@ NO_TELEMETRY = False TELEMETRY_INTERVAL = 5 * 60 -INFLUX_DB_URL = "http://34.134.43.133:8086" +INFLUX_DB_URL = "http://telemetry.counterparty.io:8086" INFLUX_DB_TOKEN = ( "7iViyy6TEVwmpH-YPE7shO36fzfGsyVYm0DC2tuLv0ZDTLp5uqRTW2Zv9IBcujF5zQRV6mauGdb1W3n7UrUu6A==" # noqa: S105 ) From a0bbca7d873d62e9f097483790b707f3bab8a0e3 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sat, 4 May 2024 16:50:54 +0200 Subject: [PATCH 235/280] Run dredd and compare hash test if profile is mainnet --- .github/workflows/test_compose.sh | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_compose.sh b/.github/workflows/test_compose.sh index 4b8af763d2..d70fea71d0 100644 --- a/.github/workflows/test_compose.sh +++ b/.github/workflows/test_compose.sh @@ -49,7 +49,18 @@ while [ "$(docker compose --profile $PROFILE logs counterparty-core-$PROFILE 2>& sleep 1 done -rm -f ../DOCKER_COMPOSE_TEST_LOCK +if [ "$PROFILE" = "mainnet" ]; then + # Run dredd rest + dredd + # Run compare hashes test + pip uninstall -y counterparty-rs + pip install -e counterparty-rs + cd counterparty-core + hatch env prune + hatch run pytest counterpartycore/test/compare_hashes_test.py --comparehashes + cd .. +fi + server_response_v1=$(curl -X POST http://127.0.0.1:$PORT/v1/api/ \ --user rpc:rpc \ @@ -60,6 +71,7 @@ server_response_v1=$(curl -X POST http://127.0.0.1:$PORT/v1/api/ \ if [ "$server_response_v1" -ne 200 ]; then echo "Failed to get_running_info" + rm -f ../DOCKER_COMPOSE_TEST_LOCK exit 1 fi @@ -68,5 +80,9 @@ server_response_v2=$(curl http://api:api@127.0.0.1:$PORT/ \ if [ "$server_response_v2" -ne 200 ]; then echo "Failed to get API v2 root" + rm -f ../DOCKER_COMPOSE_TEST_LOCK exit 1 -fi \ No newline at end of file +fi + +rm -f ../DOCKER_COMPOSE_TEST_LOCK +exit 0 \ No newline at end of file From a2f7c99fa9d5d97b79e1f74e1bb30d8792e6e0ec Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sat, 4 May 2024 16:55:44 +0200 Subject: [PATCH 236/280] fix container name --- .github/workflows/test_compose.sh | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test_compose.sh b/.github/workflows/test_compose.sh index d70fea71d0..42f9f4a296 100644 --- a/.github/workflows/test_compose.sh +++ b/.github/workflows/test_compose.sh @@ -44,10 +44,17 @@ docker build -t counterparty/counterparty:$VERSION . # re-start containers docker compose --profile $PROFILE up -d -while [ "$(docker compose --profile $PROFILE logs counterparty-core-$PROFILE 2>&1 | grep 'Ready for queries')" = "" ]; do - echo "Waiting for counterparty-core $PROFILE to be ready" - sleep 1 -done +if [ "$PROFILE" = "mainnet" ]; then + while [ "$(docker compose logs counterparty-core 2>&1 | grep 'Ready for queries')" = "" ]; do + echo "Waiting for counterparty-core $PROFILE to be ready" + sleep 1 + done +else + while [ "$(docker compose logs counterparty-core-testnet 2>&1 | grep 'Ready for queries')" = "" ]; do + echo "Waiting for counterparty-core $PROFILE to be ready" + sleep 1 + done +fi if [ "$PROFILE" = "mainnet" ]; then # Run dredd rest From 324ed45c38614a59b5e2fb40eba205540e65050d Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sat, 4 May 2024 17:01:42 +0200 Subject: [PATCH 237/280] fix api ports --- .github/workflows/test_compose.sh | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test_compose.sh b/.github/workflows/test_compose.sh index 42f9f4a296..b21b708146 100644 --- a/.github/workflows/test_compose.sh +++ b/.github/workflows/test_compose.sh @@ -13,9 +13,11 @@ GIT_BRANCH="$1" PROFILE="$2" if [ "$PROFILE" = "testnet" ]; then - PORT=14000 + PORT_V1=14100 + PORT_V2=14000 else - PORT=4000 + PORT_V1=4100 + PORT_V2=4000 fi # pull the latest code @@ -69,7 +71,7 @@ if [ "$PROFILE" = "mainnet" ]; then fi -server_response_v1=$(curl -X POST http://127.0.0.1:$PORT/v1/api/ \ +server_response_v1=$(curl -X POST http://127.0.0.1:$PORT_V1/v1/api/ \ --user rpc:rpc \ -H 'Content-Type: application/json; charset=UTF-8'\ -H 'Accept: application/json, text/javascript' \ @@ -82,7 +84,7 @@ if [ "$server_response_v1" -ne 200 ]; then exit 1 fi -server_response_v2=$(curl http://api:api@127.0.0.1:$PORT/ \ +server_response_v2=$(curl http://api:api@127.0.0.1:$PORT_V2/ \ --write-out '%{http_code}' --silent --output /dev/null) if [ "$server_response_v2" -ne 200 ]; then From cb139b1fd7cd3c9284c0f68870bdc248382b945f Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sat, 4 May 2024 19:57:10 +0200 Subject: [PATCH 238/280] Don't build the image twice --- .github/workflows/test_compose.sh | 104 +++++++++++++++++------------ .github/workflows/test_compose.yml | 3 +- 2 files changed, 61 insertions(+), 46 deletions(-) diff --git a/.github/workflows/test_compose.sh b/.github/workflows/test_compose.sh index b21b708146..d1afe62a2b 100644 --- a/.github/workflows/test_compose.sh +++ b/.github/workflows/test_compose.sh @@ -10,15 +10,6 @@ fi touch "./DOCKER_COMPOSE_TEST_LOCK" GIT_BRANCH="$1" -PROFILE="$2" - -if [ "$PROFILE" = "testnet" ]; then - PORT_V1=14100 - PORT_V2=14000 -else - PORT_V1=4100 - PORT_V2=4000 -fi # pull the latest code rm -rf counterparty-core @@ -28,7 +19,8 @@ cd counterparty-core VERSION=$(cat docker-compose.yml | grep 'image: counterparty/counterparty:' | awk -F ":" '{print $3}') # stop the running containers -docker compose --profile $PROFILE stop +docker compose --profile mainnet stop +docker compose --profile testnet stop # remove counterparty-core container #docker rm counterparty-core-counterparty-core-1 @@ -40,58 +32,82 @@ docker rmi counterparty/counterparty:$VERSION || true # build the counterparty-core new image docker build -t counterparty/counterparty:$VERSION . -# remove the counterparty-core data -# sudo rm -rf ~/.local/share/counterparty-docker-data/counterparty/* - # re-start containers -docker compose --profile $PROFILE up -d - -if [ "$PROFILE" = "mainnet" ]; then - while [ "$(docker compose logs counterparty-core 2>&1 | grep 'Ready for queries')" = "" ]; do - echo "Waiting for counterparty-core $PROFILE to be ready" - sleep 1 - done -else - while [ "$(docker compose logs counterparty-core-testnet 2>&1 | grep 'Ready for queries')" = "" ]; do - echo "Waiting for counterparty-core $PROFILE to be ready" - sleep 1 - done -fi +docker compose --profile mainnet up -d +docker compose --profile testnet up -d -if [ "$PROFILE" = "mainnet" ]; then - # Run dredd rest - dredd - # Run compare hashes test - pip uninstall -y counterparty-rs - pip install -e counterparty-rs - cd counterparty-core - hatch env prune - hatch run pytest counterpartycore/test/compare_hashes_test.py --comparehashes - cd .. -fi +# wait for counterparty-core to be ready +while [ "$(docker compose logs counterparty-core 2>&1 | grep 'Ready for queries')" = "" ]; do + echo "Waiting for counterparty-core mainnet to be ready" + sleep 1 +done +while [ "$(docker compose logs counterparty-core-testnet 2>&1 | grep 'Ready for queries')" = "" ]; do + echo "Waiting for counterparty-core testnet to be ready" + sleep 1 +done + + +# check running info with API v1 mainnet +response_v1_mainnet=$(curl -X POST http://127.0.0.1:4000/v1/api/ \ + --user rpc:rpc \ + -H 'Content-Type: application/json; charset=UTF-8'\ + -H 'Accept: application/json, text/javascript' \ + --data-binary '{ "jsonrpc": "2.0", "id": 0, "method": "get_running_info" }' \ + --write-out '%{http_code}' --silent --output /dev/null) + +if [ "$response_v1_mainnet" -ne 200 ]; then + echo "Failed to get_running_info mainnet" + rm -f ../DOCKER_COMPOSE_TEST_LOCK + exit 1 +fi -server_response_v1=$(curl -X POST http://127.0.0.1:$PORT_V1/v1/api/ \ +# check running info with API v1 testnet +response_v1_testnet=$(curl -X POST http://127.0.0.1:14100/v1/api/ \ --user rpc:rpc \ -H 'Content-Type: application/json; charset=UTF-8'\ -H 'Accept: application/json, text/javascript' \ --data-binary '{ "jsonrpc": "2.0", "id": 0, "method": "get_running_info" }' \ --write-out '%{http_code}' --silent --output /dev/null) -if [ "$server_response_v1" -ne 200 ]; then - echo "Failed to get_running_info" +if [ "$response_v1_testnet" -ne 200 ]; then + echo "Failed to get_running_info testnet" rm -f ../DOCKER_COMPOSE_TEST_LOCK exit 1 fi -server_response_v2=$(curl http://api:api@127.0.0.1:$PORT_V2/ \ +# check running info with API v2 mainnet +response_v2_mainnet=$(curl http://api:api@127.0.0.1:4000/ \ --write-out '%{http_code}' --silent --output /dev/null) -if [ "$server_response_v2" -ne 200 ]; then - echo "Failed to get API v2 root" +if [ "$response_v2_mainnet" -ne 200 ]; then + echo "Failed to get API v2 root mainnet" rm -f ../DOCKER_COMPOSE_TEST_LOCK exit 1 fi +# check running info with API v2 testnet +response_v2_testnet=$(curl http://api:api@127.0.0.1:14000/ \ + --write-out '%{http_code}' --silent --output /dev/null) + +if [ "$response_v2_mainnet" -ne 200 ]; then + echo "Failed to get API v2 root mainnet" + rm -f ../DOCKER_COMPOSE_TEST_LOCK + exit 1 +fi + + +# Run dredd rest +dredd + +# Run compare hashes test +pip uninstall -y counterparty-rs +pip install -e counterparty-rs +cd counterparty-core +hatch env prune +hatch run pytest counterpartycore/test/compare_hashes_test.py --comparehashes +cd .. + + rm -f ../DOCKER_COMPOSE_TEST_LOCK -exit 0 \ No newline at end of file +exit 0 diff --git a/.github/workflows/test_compose.yml b/.github/workflows/test_compose.yml index 2de8863dfc..43e7dbef03 100644 --- a/.github/workflows/test_compose.yml +++ b/.github/workflows/test_compose.yml @@ -22,5 +22,4 @@ jobs: scp: | .github/workflows/test_compose.sh ${{ secrets.TEST_SERVER_USER }}@${{ secrets.TEST_SERVER_IP }}:~/test_compose.sh ssh_after: | - sh test_compose.sh ${{ steps.branch-names.outputs.current_branch }} testnet - sh test_compose.sh ${{ steps.branch-names.outputs.current_branch }} mainnet + sh test_compose.sh ${{ steps.branch-names.outputs.current_branch }} From b4e6e49d21489e9655c3020884b27ef8950932a0 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sat, 4 May 2024 20:07:37 +0200 Subject: [PATCH 239/280] Remove lock only in case of success --- .github/workflows/test_compose.sh | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/test_compose.sh b/.github/workflows/test_compose.sh index d1afe62a2b..92859ff901 100644 --- a/.github/workflows/test_compose.sh +++ b/.github/workflows/test_compose.sh @@ -4,7 +4,7 @@ set -e set -x if [ -f "./DOCKER_COMPOSE_TEST_LOCK" ]; then - echo "A test is already running. Exiting." + echo "A test is already running or the last one failed. Exiting." exit 1 fi touch "./DOCKER_COMPOSE_TEST_LOCK" @@ -58,7 +58,6 @@ response_v1_mainnet=$(curl -X POST http://127.0.0.1:4000/v1/api/ \ if [ "$response_v1_mainnet" -ne 200 ]; then echo "Failed to get_running_info mainnet" - rm -f ../DOCKER_COMPOSE_TEST_LOCK exit 1 fi @@ -72,7 +71,6 @@ response_v1_testnet=$(curl -X POST http://127.0.0.1:14100/v1/api/ \ if [ "$response_v1_testnet" -ne 200 ]; then echo "Failed to get_running_info testnet" - rm -f ../DOCKER_COMPOSE_TEST_LOCK exit 1 fi @@ -82,7 +80,6 @@ response_v2_mainnet=$(curl http://api:api@127.0.0.1:4000/ \ if [ "$response_v2_mainnet" -ne 200 ]; then echo "Failed to get API v2 root mainnet" - rm -f ../DOCKER_COMPOSE_TEST_LOCK exit 1 fi @@ -92,7 +89,6 @@ response_v2_testnet=$(curl http://api:api@127.0.0.1:14000/ \ if [ "$response_v2_mainnet" -ne 200 ]; then echo "Failed to get API v2 root mainnet" - rm -f ../DOCKER_COMPOSE_TEST_LOCK exit 1 fi From 81d911599c3eb6d19076a024b8f965a1468316e1 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sat, 4 May 2024 21:02:22 +0200 Subject: [PATCH 240/280] don't stop bitoind and addrindexrs --- .github/workflows/test_compose.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_compose.sh b/.github/workflows/test_compose.sh index 92859ff901..3d43b6d3fb 100644 --- a/.github/workflows/test_compose.sh +++ b/.github/workflows/test_compose.sh @@ -19,8 +19,8 @@ cd counterparty-core VERSION=$(cat docker-compose.yml | grep 'image: counterparty/counterparty:' | awk -F ":" '{print $3}') # stop the running containers -docker compose --profile mainnet stop -docker compose --profile testnet stop +docker compose --profile mainnet stop counterparty-core +docker compose --profile testnet stop counterparty-core-testnet # remove counterparty-core container #docker rm counterparty-core-counterparty-core-1 From dbf19fff87f09c6fbe3faf2f707aefc46360dba9 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sat, 4 May 2024 21:33:41 +0200 Subject: [PATCH 241/280] fix typo --- .github/workflows/test_compose.sh | 2 +- .github/workflows/test_compose.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_compose.sh b/.github/workflows/test_compose.sh index 3d43b6d3fb..9d12e9286f 100644 --- a/.github/workflows/test_compose.sh +++ b/.github/workflows/test_compose.sh @@ -49,7 +49,7 @@ done # check running info with API v1 mainnet -response_v1_mainnet=$(curl -X POST http://127.0.0.1:4000/v1/api/ \ +response_v1_mainnet=$(curl -X POST http://127.0.0.1:4100/v1/rpc/ \ --user rpc:rpc \ -H 'Content-Type: application/json; charset=UTF-8'\ -H 'Accept: application/json, text/javascript' \ diff --git a/.github/workflows/test_compose.yml b/.github/workflows/test_compose.yml index 43e7dbef03..b97df3d9f1 100644 --- a/.github/workflows/test_compose.yml +++ b/.github/workflows/test_compose.yml @@ -2,7 +2,7 @@ name: Docker Compose on: push: - branches: ['develop', 'master', "_compose"] + branches: ['develop', 'master', "compose"] jobs: build: From e77f14ca367bfed095c22f71f012e6b7e27e954f Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sun, 5 May 2024 11:32:39 +0200 Subject: [PATCH 242/280] sudo for pip install; Temporary use --force --- .github/workflows/test_compose.sh | 2 +- docker-compose.yml | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test_compose.sh b/.github/workflows/test_compose.sh index 9d12e9286f..f0332750cb 100644 --- a/.github/workflows/test_compose.sh +++ b/.github/workflows/test_compose.sh @@ -98,7 +98,7 @@ dredd # Run compare hashes test pip uninstall -y counterparty-rs -pip install -e counterparty-rs +sudo pip install -e counterparty-rs cd counterparty-core hatch env prune hatch run pytest counterpartycore/test/compare_hashes_test.py --comparehashes diff --git a/docker-compose.yml b/docker-compose.yml index 568424e1ea..7dcd05adf1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -83,6 +83,7 @@ services: - "--api-host=0.0.0.0" - "--catch-up=bootstrap" - "--enable-api-v1" + - "--force" #- "--verbose" ################### @@ -145,6 +146,7 @@ services: - "--api-host=0.0.0.0" - "--catch-up=bootstrap" - "--enable-api-v1" + - "--force" #- "--verbose" volumes: From 48d626b71008dd7e6856b23aa7451b078a6322c2 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sun, 5 May 2024 11:54:39 +0200 Subject: [PATCH 243/280] fix compare hashes test --- .github/workflows/test_compose.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/test_compose.sh b/.github/workflows/test_compose.sh index f0332750cb..ce7c3b04c0 100644 --- a/.github/workflows/test_compose.sh +++ b/.github/workflows/test_compose.sh @@ -97,8 +97,7 @@ fi dredd # Run compare hashes test -pip uninstall -y counterparty-rs -sudo pip install -e counterparty-rs +. "$HOME/.profile" cd counterparty-core hatch env prune hatch run pytest counterpartycore/test/compare_hashes_test.py --comparehashes From 2c80cde3d7eba98986bdabfc4baf7fb73aa3111e Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sun, 5 May 2024 13:24:53 +0200 Subject: [PATCH 244/280] Raise KeyboardInterrupt on SIGTERM and SIGINT --- counterparty-core/counterpartycore/server.py | 10 ++++++++++ docker-compose.yml | 4 ++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index 0c7e69fa88..aa100cce95 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -4,6 +4,7 @@ import decimal import logging import os +import signal import tarfile import tempfile import time @@ -46,6 +47,14 @@ class ConfigurationError(Exception): pass +def handle_interrupt_signal(signum, _frame): + raise KeyboardInterrupt(f"Received signal {signal.strsignal(signum)}") + + +signal.signal(signal.SIGINT, handle_interrupt_signal) +signal.signal(signal.SIGTERM, handle_interrupt_signal) + + def initialise(*args, **kwargs): initialise_log_config( verbose=kwargs.pop("verbose", 0), @@ -698,6 +707,7 @@ def start_all(args): # Server blocks.follow(db) except KeyboardInterrupt: + logger.info("Keyboard interrupt.") pass finally: if telemetry_daemon: diff --git a/docker-compose.yml b/docker-compose.yml index 7dcd05adf1..9ed14658b4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,6 @@ x-bitcoind-common: &bitcoind-common image: kylemanna/bitcoind:latest + stop_grace_period: 1m volumes: - data:/bitcoin/.bitcoin restart: unless-stopped @@ -15,6 +16,7 @@ x-addrindexrs-common: &addrindexrs-common x-counterparty-common: &counterparty-common image: counterparty/counterparty:v10.1.1 + stop_grace_period: 1m volumes: - data:/root/.bitcoin - data:/data @@ -83,7 +85,6 @@ services: - "--api-host=0.0.0.0" - "--catch-up=bootstrap" - "--enable-api-v1" - - "--force" #- "--verbose" ################### @@ -146,7 +147,6 @@ services: - "--api-host=0.0.0.0" - "--catch-up=bootstrap" - "--enable-api-v1" - - "--force" #- "--verbose" volumes: From e75f1127f2b01dccd6aef189bae2cdafbd229a4d Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sun, 5 May 2024 17:56:53 +0200 Subject: [PATCH 245/280] Fix typos --- .github/workflows/test_compose.sh | 2 +- apiary.apib | 252 --------------------------- counterparty-core/tools/genapidoc.py | 4 +- 3 files changed, 3 insertions(+), 255 deletions(-) diff --git a/.github/workflows/test_compose.sh b/.github/workflows/test_compose.sh index ce7c3b04c0..7a5e1bf507 100644 --- a/.github/workflows/test_compose.sh +++ b/.github/workflows/test_compose.sh @@ -93,7 +93,7 @@ if [ "$response_v2_mainnet" -ne 200 ]; then fi -# Run dredd rest +# Run dredd test dredd # Run compare hashes test diff --git a/apiary.apib b/apiary.apib index 49dcf020e6..fa90ee3c2a 100644 --- a/apiary.apib +++ b/apiary.apib @@ -1526,27 +1526,6 @@ Composes a transaction to issue a bet against a feed. } ``` - -**Notes about optional parameter `encoding`.** - -By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: - -- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. - - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. -- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. - - `pubkey` should be set to the hex-encoded public key of the source address. - - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). -- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. - - `pubkey` should be set to the hex-encoded public key of the source address. -- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. - - First call the `create_` method with the `encoding` set to `P2SH`. - - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). - - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. - - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. - - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section - - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. - - ### Compose Broadcast [GET /addresses/{address}/compose/broadcast{?timestamp}{&value}{&fee_fraction}{&text}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Composes a transaction to broadcast textual and numerical information to the network. @@ -1606,27 +1585,6 @@ Composes a transaction to broadcast textual and numerical information to the net } ``` - -**Notes about optional parameter `encoding`.** - -By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: - -- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. - - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. -- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. - - `pubkey` should be set to the hex-encoded public key of the source address. - - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). -- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. - - `pubkey` should be set to the hex-encoded public key of the source address. -- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. - - First call the `create_` method with the `encoding` set to `P2SH`. - - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). - - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. - - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. - - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section - - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. - - ### Compose BTCPay [GET /addresses/{address}/compose/btcpay{?order_match_id}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Composes a transaction to pay for a BTC order match. @@ -1680,27 +1638,6 @@ Composes a transaction to pay for a BTC order match. } ``` - -**Notes about optional parameter `encoding`.** - -By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: - -- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. - - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. -- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. - - `pubkey` should be set to the hex-encoded public key of the source address. - - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). -- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. - - `pubkey` should be set to the hex-encoded public key of the source address. -- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. - - First call the `create_` method with the `encoding` set to `P2SH`. - - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). - - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. - - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. - - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section - - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. - - ### Compose Burn [GET /addresses/{address}/compose/burn{?quantity}{&overburn}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, possible between blocks 278310 and 283810; on testnet it is still available). @@ -1757,27 +1694,6 @@ Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, poss } ``` - -**Notes about optional parameter `encoding`.** - -By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: - -- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. - - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. -- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. - - `pubkey` should be set to the hex-encoded public key of the source address. - - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). -- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. - - `pubkey` should be set to the hex-encoded public key of the source address. -- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. - - First call the `create_` method with the `encoding` set to `P2SH`. - - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). - - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. - - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. - - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section - - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. - - ### Compose Cancel [GET /addresses/{address}/compose/cancel{?offer_hash}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Composes a transaction to cancel an open order or bet. @@ -1831,27 +1747,6 @@ Composes a transaction to cancel an open order or bet. } ``` - -**Notes about optional parameter `encoding`.** - -By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: - -- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. - - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. -- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. - - `pubkey` should be set to the hex-encoded public key of the source address. - - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). -- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. - - `pubkey` should be set to the hex-encoded public key of the source address. -- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. - - First call the `create_` method with the `encoding` set to `P2SH`. - - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). - - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. - - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. - - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section - - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. - - ### Compose Destroy [GET /addresses/{address}/compose/destroy{?asset}{&quantity}{&tag}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Composes a transaction to destroy a quantity of an asset. @@ -1909,27 +1804,6 @@ Composes a transaction to destroy a quantity of an asset. } ``` - -**Notes about optional parameter `encoding`.** - -By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: - -- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. - - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. -- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. - - `pubkey` should be set to the hex-encoded public key of the source address. - - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). -- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. - - `pubkey` should be set to the hex-encoded public key of the source address. -- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. - - First call the `create_` method with the `encoding` set to `P2SH`. - - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). - - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. - - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. - - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section - - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. - - ### Compose Dispenser [GET /addresses/{address}/compose/dispenser{?asset}{&give_quantity}{&escrow_quantity}{&mainchainrate}{&status}{&open_address}{&oracle_address}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Opens or closes a dispenser for a given asset at a given rate of main chain asset (BTC). Escrowed quantity on open must be equal or greater than give_quantity. It is suggested that you escrow multiples of give_quantity to ease dispenser operation. @@ -1997,27 +1871,6 @@ Opens or closes a dispenser for a given asset at a given rate of main chain asse } ``` - -**Notes about optional parameter `encoding`.** - -By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: - -- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. - - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. -- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. - - `pubkey` should be set to the hex-encoded public key of the source address. - - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). -- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. - - `pubkey` should be set to the hex-encoded public key of the source address. -- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. - - First call the `create_` method with the `encoding` set to `P2SH`. - - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). - - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. - - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. - - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section - - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. - - ### Compose Dividend [GET /addresses/{address}/compose/dividend{?quantity_per_unit}{&asset}{÷nd_asset}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Composes a transaction to issue a dividend to holders of a given asset. @@ -2075,27 +1928,6 @@ Composes a transaction to issue a dividend to holders of a given asset. } ``` - -**Notes about optional parameter `encoding`.** - -By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: - -- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. - - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. -- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. - - `pubkey` should be set to the hex-encoded public key of the source address. - - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). -- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. - - `pubkey` should be set to the hex-encoded public key of the source address. -- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. - - First call the `create_` method with the `encoding` set to `P2SH`. - - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). - - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. - - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. - - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section - - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. - - ### Compose Issuance [GET /addresses/{address}/compose/issuance{?asset}{&quantity}{&transfer_destination}{&divisible}{&lock}{&reset}{&description}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Composes a transaction to Issue a new asset, issue more of an existing asset, lock an asset, reset existing supply, or transfer the ownership of an asset. @@ -2166,27 +1998,6 @@ Composes a transaction to Issue a new asset, issue more of an existing asset, lo } ``` - -**Notes about optional parameter `encoding`.** - -By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: - -- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. - - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. -- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. - - `pubkey` should be set to the hex-encoded public key of the source address. - - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). -- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. - - `pubkey` should be set to the hex-encoded public key of the source address. -- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. - - First call the `create_` method with the `encoding` set to `P2SH`. - - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). - - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. - - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. - - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section - - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. - - ### Compose MPMA [GET /addresses/{address}/compose/mpma{?assets}{&destinations}{&quantities}{&memo}{&memo_is_hex}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Composes a transaction to send multiple payments to multiple addresses. @@ -2262,27 +2073,6 @@ Composes a transaction to send multiple payments to multiple addresses. } ``` - -**Notes about optional parameter `encoding`.** - -By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: - -- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. - - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. -- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. - - `pubkey` should be set to the hex-encoded public key of the source address. - - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). -- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. - - `pubkey` should be set to the hex-encoded public key of the source address. -- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. - - First call the `create_` method with the `encoding` set to `P2SH`. - - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). - - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. - - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. - - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section - - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. - - ### Compose Order [GET /addresses/{address}/compose/order{?give_asset}{&give_quantity}{&get_asset}{&get_quantity}{&expiration}{&fee_required}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Composes a transaction to place an order on the distributed exchange. @@ -2346,27 +2136,6 @@ Composes a transaction to place an order on the distributed exchange. } ``` - -**Notes about optional parameter `encoding`.** - -By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: - -- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. - - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. -- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. - - `pubkey` should be set to the hex-encoded public key of the source address. - - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). -- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. - - `pubkey` should be set to the hex-encoded public key of the source address. -- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. - - First call the `create_` method with the `encoding` set to `P2SH`. - - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). - - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. - - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. - - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section - - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. - - ### Compose Send [GET /addresses/{address}/compose/send{?destination}{&asset}{&quantity}{&memo}{&memo_is_hex}{&use_enhanced_send}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Composes a transaction to send a quantity of an asset to another address. @@ -2433,27 +2202,6 @@ Composes a transaction to send a quantity of an asset to another address. } ``` - -**Notes about optional parameter `encoding`.** - -By default the default value of the `encoding` parameter detailed above is `auto`, which means that `counterparty-server` automatically determines the best way to encode the Counterparty protocol data into a new transaction. If you know what you are doing and would like to explicitly specify an encoding: - -- To return the transaction as an **OP_RETURN** transaction, specify `opreturn` for the `encoding` parameter. - - **OP_RETURN** transactions cannot have more than 80 bytes of data. If you force OP_RETURN encoding and your transaction would have more than this amount, an exception will be generated. -- To return the transaction as a **multisig** transaction, specify `multisig` for the `encoding` parameter. - - `pubkey` should be set to the hex-encoded public key of the source address. - - Note that with the newest versions of Bitcoin (0.12.1 onward), bare multisig encoding does not reliably propagate. More information on this is documented [here](https://github.com/rubensayshi/counterparty-core/pull/9). -- To return the transaction as a **pubkeyhash** transaction, specify `pubkeyhash` for the `encoding` parameter. - - `pubkey` should be set to the hex-encoded public key of the source address. -- To return the transaction as a 2 part **P2SH** transaction, specify `P2SH` for the encoding parameter. - - First call the `create_` method with the `encoding` set to `P2SH`. - - Sign the transaction as usual and broadcast it. It's recommended but not required to wait the transaction to confirm as malleability is an issue here (P2SH isn't yet supported on segwit addresses). - - The resulting `txid` must be passed again on an identic call to the `create_` method, but now passing an additional parameter `p2sh_pretx_txid` with the value of the previous transaction's id. - - The resulting transaction is a `P2SH` encoded message, using the redeem script on the transaction inputs as data carrying mechanism. - - Sign the transaction following the `Bitcoinjs-lib on javascript, signing a P2SH redeeming transaction` section - - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. - - ### Compose Sweep [GET /addresses/{address}/compose/sweep{?destination}{&flags}{&memo}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Composes a transaction to Sends all assets and/or transfer ownerships to a destination address. diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index 89677b02bd..d8a747746c 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -191,8 +191,8 @@ def gen_groups_toc(): current_group = "Z-Pages" md += f"\n## Group {current_group.capitalize()}\n" - if current_group in GROUP_DOCS: - md += GROUP_DOCS[current_group] + if current_group in GROUP_DOCS: + md += GROUP_DOCS[current_group] blueprint_path = path.replace("<", "{").replace(">", "}").replace("int:", "") title = " ".join([part.capitalize() for part in str(route["function"].__name__).split("_")]) From 93a8e379917a016680cecf0bff34cda1ab04340c Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sun, 5 May 2024 18:00:18 +0200 Subject: [PATCH 246/280] fix blueprint --- apiary.apib | 205 +++++++++++++++++++++++++++ counterparty-core/tools/genapidoc.py | 2 +- 2 files changed, 206 insertions(+), 1 deletion(-) diff --git a/apiary.apib b/apiary.apib index fa90ee3c2a..e0fa5089da 100644 --- a/apiary.apib +++ b/apiary.apib @@ -4452,6 +4452,203 @@ Returns the event counts of all blocks + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + Default: `false` ++ Response 200 (application/json) + + ``` + { + "result": [ + { + "event": "ASSET_CREATION", + "event_count": 235860 + }, + { + "event": "ASSET_DESTRUCTION", + "event_count": 11141 + }, + { + "event": "ASSET_DIVIDEND", + "event_count": 4092 + }, + { + "event": "ASSET_ISSUANCE", + "event_count": 322678 + }, + { + "event": "ASSET_TRANSFER", + "event_count": 10639 + }, + { + "event": "BET_EXPIRATION", + "event_count": 588 + }, + { + "event": "BET_MATCH", + "event_count": 397 + }, + { + "event": "BET_MATCH_EXPIRATION", + "event_count": 9 + }, + { + "event": "BET_MATCH_RESOLUTON", + "event_count": 387 + }, + { + "event": "BET_MATCH_UPDATE", + "event_count": 397 + }, + { + "event": "BET_UPDATE", + "event_count": 1474 + }, + { + "event": "BLOCK_PARSED", + "event_count": 562364 + }, + { + "event": "BROADCAST", + "event_count": 106518 + }, + { + "event": "BTC_PAY", + "event_count": 2921 + }, + { + "event": "BURN", + "event_count": 2576 + }, + { + "event": "CANCEL_BET", + "event_count": 101 + }, + { + "event": "CANCEL_ORDER", + "event_count": 80168 + }, + { + "event": "CREDIT", + "event_count": 3659293 + }, + { + "event": "DEBIT", + "event_count": 2617404 + }, + { + "event": "DISPENSE", + "event_count": 190873 + }, + { + "event": "DISPENSER_UPDATE", + "event_count": 228954 + }, + { + "event": "ENHANCED_SEND", + "event_count": 538426 + }, + { + "event": "MPMA_SEND", + "event_count": 279142 + }, + { + "event": "NEW_BLOCK", + "event_count": 1992 + }, + { + "event": "NEW_TRANSACTION", + "event_count": 4498 + }, + { + "event": "NEW_TRANSACTION_OUTPUT", + "event_count": 596 + }, + { + "event": "OPEN_BET", + "event_count": 1149 + }, + { + "event": "OPEN_DISPENSER", + "event_count": 88229 + }, + { + "event": "OPEN_ORDER", + "event_count": 530117 + }, + { + "event": "OPEN_RPS", + "event_count": 266 + }, + { + "event": "ORDER_EXPIRATION", + "event_count": 195968 + }, + { + "event": "ORDER_FILLED", + "event_count": 805 + }, + { + "event": "ORDER_MATCH", + "event_count": 209415 + }, + { + "event": "ORDER_MATCH_EXPIRATION", + "event_count": 20860 + }, + { + "event": "ORDER_MATCH_UPDATE", + "event_count": 23689 + }, + { + "event": "ORDER_UPDATE", + "event_count": 732646 + }, + { + "event": "REFILL_DISPENSER", + "event_count": 187 + }, + { + "event": "RESET_ISSUANCE", + "event_count": 454 + }, + { + "event": "RPS_EXPIRATION", + "event_count": 59 + }, + { + "event": "RPS_MATCH", + "event_count": 171 + }, + { + "event": "RPS_MATCH_EXPIRATION", + "event_count": 145 + }, + { + "event": "RPS_MATCH_UPDATE", + "event_count": 271 + }, + { + "event": "RPS_RESOLVE", + "event_count": 129 + }, + { + "event": "RPS_UPDATE", + "event_count": 540 + }, + { + "event": "SEND", + "event_count": 805983 + }, + { + "event": "SWEEP", + "event_count": 1020 + }, + { + "event": "TRANSACTION_PARSED", + "event_count": 2723802 + } + ] + } + ``` + ### Get Events By Name [GET /events/{event}{?last}{&limit}{&verbose}] Returns the events filtered by event name @@ -4903,6 +5100,14 @@ Returns all mempool events + verbose: `true` (bool, optional) - Include asset and dispenser info and normalized quantities in the response. + Default: `false` ++ Response 200 (application/json) + + ``` + { + "result": [] + } + ``` + ### Get Mempool Events By Name [GET /mempool/events/{event}{?verbose}] Returns the mempool events filtered by event name diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index d8a747746c..915cacc7f0 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -239,7 +239,7 @@ def gen_groups_toc(): if not arg["required"]: md += f" + Default: `{arg.get('default', '')}`\n" - if example_args != {} or route["args"] == []: + if example_args != {} or len(route["args"]) == 1: # min 1 for verbose arg if not USE_API_CACHE or path not in cache: example_output = get_example_output(path, example_args) cache[path] = example_output From f29f917d4a5da42e05225a289821e942d3da6404 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sun, 5 May 2024 18:19:04 +0200 Subject: [PATCH 247/280] Better Docker file caching --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 382d544316..46afacdcae 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,16 +14,16 @@ ENV PATH="/root/.cargo/bin:${PATH}" # install maturin RUN pip3 install maturin -# copy repository +# copy README COPY README.md /README.md -COPY ./counterparty-rs /counterparty-rs -COPY ./counterparty-core /counterparty-core # install counterparty-rs +COPY ./counterparty-rs /counterparty-rs WORKDIR /counterparty-rs RUN pip3 install . # install counterparty-core +COPY ./counterparty-core /counterparty-core WORKDIR /counterparty-core RUN pip3 install . From 4e3fd27651a3b6a776424a89b838e7a26c9480a4 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sun, 5 May 2024 18:42:58 +0200 Subject: [PATCH 248/280] Bump version --- apiary.apib | 2 +- counterparty-core/counterpartycore/lib/config.py | 2 +- counterparty-core/requirements.txt | 2 +- counterparty-core/tools/genapidoc.py | 2 +- counterparty-rs/Cargo.lock | 2 +- counterparty-rs/Cargo.toml | 2 +- counterparty-wallet/requirements.txt | 2 +- docker-compose.yml | 2 +- release-notes/release-notes-v10.1.2.md | 2 ++ 9 files changed, 10 insertions(+), 8 deletions(-) diff --git a/apiary.apib b/apiary.apib index e0fa5089da..9f22aeecca 100644 --- a/apiary.apib +++ b/apiary.apib @@ -52,7 +52,7 @@ Returns server information and the list of documented routes in JSON format. { "server_ready": true, "network": "mainnet", - "version": "10.1.1", + "version": "10.1.2", "backend_height": 840796, "counterparty_height": 840796, "routes": [ diff --git a/counterparty-core/counterpartycore/lib/config.py b/counterparty-core/counterpartycore/lib/config.py index b8d8ed377d..28a1182ecd 100644 --- a/counterparty-core/counterpartycore/lib/config.py +++ b/counterparty-core/counterpartycore/lib/config.py @@ -5,7 +5,7 @@ # Semantic Version -__version__ = "10.1.1" # for hatch +__version__ = "10.1.2" # for hatch VERSION_STRING = __version__ version = VERSION_STRING.split("-")[0].split(".") VERSION_MAJOR = int(version[0]) diff --git a/counterparty-core/requirements.txt b/counterparty-core/requirements.txt index 3c4dcd1eaf..c510ba8aa9 100644 --- a/counterparty-core/requirements.txt +++ b/counterparty-core/requirements.txt @@ -29,5 +29,5 @@ sentry-sdk==1.45.0 Flask-Cors==4.0.0 docstring_parser==0.16 psutil==5.9.8 -counterparty-rs==10.1.1 +counterparty-rs==10.1.2 influxdb-client==1.42.0 diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index 915cacc7f0..e19fda58c8 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -163,7 +163,7 @@ def gen_groups_toc(): { "server_ready": true, "network": "mainnet", - "version": "10.1.1", + "version": "10.1.2", "backend_height": 840796, "counterparty_height": 840796, "routes": [ diff --git a/counterparty-rs/Cargo.lock b/counterparty-rs/Cargo.lock index 4d546a6246..461a4f432a 100644 --- a/counterparty-rs/Cargo.lock +++ b/counterparty-rs/Cargo.lock @@ -198,7 +198,7 @@ checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "counterparty-rs" -version = "10.1.1" +version = "10.1.2" dependencies = [ "bip32", "bitcoin", diff --git a/counterparty-rs/Cargo.toml b/counterparty-rs/Cargo.toml index 161da89745..bd3752e24e 100644 --- a/counterparty-rs/Cargo.toml +++ b/counterparty-rs/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "counterparty-rs" -version = "10.1.1" +version = "10.1.2" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/counterparty-wallet/requirements.txt b/counterparty-wallet/requirements.txt index 95ef2ba0db..63e0303600 100644 --- a/counterparty-wallet/requirements.txt +++ b/counterparty-wallet/requirements.txt @@ -5,4 +5,4 @@ colorlog==6.8.0 python-dateutil==2.8.2 requests==2.31.0 termcolor==2.4.0 -counterparty-core==10.1.1 +counterparty-core==10.1.2 diff --git a/docker-compose.yml b/docker-compose.yml index 9ed14658b4..a730cf3295 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -15,7 +15,7 @@ x-addrindexrs-common: &addrindexrs-common restart: unless-stopped x-counterparty-common: &counterparty-common - image: counterparty/counterparty:v10.1.1 + image: counterparty/counterparty:v10.1.2 stop_grace_period: 1m volumes: - data:/root/.bitcoin diff --git a/release-notes/release-notes-v10.1.2.md b/release-notes/release-notes-v10.1.2.md index 7a2819f79c..1afbc26cf3 100644 --- a/release-notes/release-notes-v10.1.2.md +++ b/release-notes/release-notes-v10.1.2.md @@ -22,6 +22,7 @@ To easily migrate to the new API, an equivalence table is available in the docum * APIs return ready if the last block is less than 1 minute old * Add an index on the `block_index` field in the `credits` and `debits` tables * Add TRACE level to python logging +* Add basic node telemetry ## Command-Line Interface * Set default and minimum values for Backend Poll Interval to 3.0 seconds @@ -29,6 +30,7 @@ To easily migrate to the new API, an equivalence table is available in the docum * Checks that another process is not connected to the database before starting the server * At startup, launches a quick check if the database has not been correctly closed * The `--verbose` flag can be repeated to increase verbosity, `-vv` is also supported +* Add `--no-telemetry` flag to not send anonymous node telemetry data to telemetry server # Credits * Ouziel Slama From 379c9fc9d0f17475f03d1045913ce75a46fe930d Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sun, 5 May 2024 18:54:27 +0200 Subject: [PATCH 249/280] Add checkpoint --- counterparty-core/counterpartycore/lib/check.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/counterparty-core/counterpartycore/lib/check.py b/counterparty-core/counterpartycore/lib/check.py index 8e30598ee1..b41da0bf1d 100644 --- a/counterparty-core/counterpartycore/lib/check.py +++ b/counterparty-core/counterpartycore/lib/check.py @@ -631,6 +631,10 @@ "ledger_hash": "e41bae2ddd431d1ddfeb9403b1b2f04e2ea75baeb991636e1a7fc5b4302605f4", "txlist_hash": "76ff941f15588a41124839acc80cc655407242154ba452285a348f17146807b7", }, + 842208: { + "ledger_hash": "6440b7d750fd29c2e9714df93989859cac1adef2b6098a7e1ef6d5ca7bb4f366", + "txlist_hash": "6e49153c8042f20227ffc52b4df7a450a8f8416230081e373dabf11e9aceb63d", + }, } CONSENSUS_HASH_VERSION_TESTNET = 7 From a49f5f3577fb5f66d5821b09a1e014c6cb32f8ee Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sun, 5 May 2024 19:28:19 +0200 Subject: [PATCH 250/280] Fix ctrl-c again --- counterparty-core/counterpartycore/lib/api/api_v1.py | 8 +++----- counterparty-core/counterpartycore/server.py | 7 +++---- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_v1.py b/counterparty-core/counterpartycore/lib/api/api_v1.py index 709c38af5b..3c4ea86678 100644 --- a/counterparty-core/counterpartycore/lib/api/api_v1.py +++ b/counterparty-core/counterpartycore/lib/api/api_v1.py @@ -499,8 +499,7 @@ def stop(self): logger.info("Stopping API Status Poller...") self.stopping = True self.db.close() - while not self.stopped: - time.sleep(0.1) + self.join() def run(self): logger.debug("Starting API Status Poller...") @@ -534,9 +533,8 @@ def run(self): else: CURRENT_API_STATUS_CODE = None CURRENT_API_STATUS_RESPONSE_JSON = None - time.sleep(0.5) # sleep for 0.5 seconds - if self.stopping: - self.stopped = True + if not self.stopping: + time.sleep(0.5) # sleep for 0.5 seconds class APIServer(threading.Thread): diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index aa100cce95..3a067143bf 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -51,10 +51,6 @@ def handle_interrupt_signal(signum, _frame): raise KeyboardInterrupt(f"Received signal {signal.strsignal(signum)}") -signal.signal(signal.SIGINT, handle_interrupt_signal) -signal.signal(signal.SIGTERM, handle_interrupt_signal) - - def initialise(*args, **kwargs): initialise_log_config( verbose=kwargs.pop("verbose", 0), @@ -665,6 +661,9 @@ def start_all(args): db = None try: + signal.signal(signal.SIGINT, handle_interrupt_signal) + signal.signal(signal.SIGTERM, handle_interrupt_signal) + if not os.path.exists(config.DATABASE) and args.catch_up == "bootstrap": bootstrap(no_confirm=True) From e6f694e645da9ff2f7dbc97c287341e5b67b1244 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Sun, 5 May 2024 20:13:51 +0200 Subject: [PATCH 251/280] Update release notes --- release-notes/release-notes-v10.1.2.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/release-notes/release-notes-v10.1.2.md b/release-notes/release-notes-v10.1.2.md index 1afbc26cf3..ee57838838 100644 --- a/release-notes/release-notes-v10.1.2.md +++ b/release-notes/release-notes-v10.1.2.md @@ -1,6 +1,6 @@ -# Release Notes - Counterparty Core v10.1.2 (2024-04-??) - +# Release Notes - Counterparty Core v10.1.2 (2024-05-05) +This release enables the new ReST API and basic node telemetry. # Upgrading From 7e78dba7287dd8b0ab35d66b0b31938b359687a6 Mon Sep 17 00:00:00 2001 From: Adam Krellenstein Date: Sun, 5 May 2024 22:07:11 +0200 Subject: [PATCH 252/280] Tweak Language in Release Notes --- release-notes/release-notes-v10.1.2.md | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/release-notes/release-notes-v10.1.2.md b/release-notes/release-notes-v10.1.2.md index ee57838838..85b3a762f6 100644 --- a/release-notes/release-notes-v10.1.2.md +++ b/release-notes/release-notes-v10.1.2.md @@ -1,14 +1,17 @@ # Release Notes - Counterparty Core v10.1.2 (2024-05-05) -This release enables the new ReST API and basic node telemetry. +This version of Counterparty Core most importantly marks the release of API v2, a new RESTful API For documentation on the new API, see the [official project documentation](https://docs.counterparty.io/docs/advanced/api-v2/node-api/). + # Upgrading -To continue using the old API you must: +The v1 API has been deprecated but not yet removed from the node software. To continue using it, you must: - start `counterparty-server` with the flag `--enable-api-v1` - use port `4100` for mainnet and port `14100` for testnet - prefix all endpoints with `/v1/` -To easily migrate to the new API, an equivalence table is available in the documentation. + +There is a [migration guide](https://docs.counterparty.io/docs/advanced/api-v2/v1-to-v2/) in the documentation, which specifies equivalences between old and new functionality. + # ChangeLog @@ -18,19 +21,20 @@ To easily migrate to the new API, an equivalence table is available in the docum ## Codebase -* New ReST API -* APIs return ready if the last block is less than 1 minute old +* Release API v2; deprecate API v1 +* Have API return `ready` if the last block is less than one minute old * Add an index on the `block_index` field in the `credits` and `debits` tables -* Add TRACE level to python logging -* Add basic node telemetry +* Add `TRACE level to Python logging +* Add basic anonymous node telemetry ## Command-Line Interface * Set default and minimum values for Backend Poll Interval to 3.0 seconds * Update `docker-compose.yml` to use different profiles for `mainnet` and `testnet` -* Checks that another process is not connected to the database before starting the server -* At startup, launches a quick check if the database has not been correctly closed -* The `--verbose` flag can be repeated to increase verbosity, `-vv` is also supported -* Add `--no-telemetry` flag to not send anonymous node telemetry data to telemetry server +* Check that another process is not connected to the database before starting the server +* Launches database quick check on startup if the database was not been correctly shut down +* Support an additional level of verbosity with the CLI flags `-vv` +* Add the `--no-telemetry` flag to disable node telemetry + # Credits * Ouziel Slama From 25a1385eb9af057faf975ced07155eced9698c40 Mon Sep 17 00:00:00 2001 From: Adam Krellenstein Date: Sun, 5 May 2024 22:07:50 +0200 Subject: [PATCH 253/280] =?UTF-8?q?"REST"=20is=20actually=20standard,=20no?= =?UTF-8?q?t=20"ReST"=E2=80=94My=20Bad?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- counterparty-core/tools/genapidoc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index e19fda58c8..2858e6a5c8 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -110,7 +110,7 @@ def gen_groups_toc(): if TARGET == "docusaurus": md = """--- -title: ReST API V2 +title: API v2 --- """ From 520fbc816d117c67005981c65e2b6f1b2cba60a6 Mon Sep 17 00:00:00 2001 From: warrenpuffet Date: Sun, 5 May 2024 17:26:41 -0400 Subject: [PATCH 254/280] check script length and conditionally raise exception --- .gitignore | 3 +++ counterparty-rs/src/utils.rs | 8 ++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 7c110e02c7..50bb6cceda 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,9 @@ env venv docs/_build/* target/ +typings/ +pyrightconfig.json +.DS_Store profile.txt diff --git a/counterparty-rs/src/utils.rs b/counterparty-rs/src/utils.rs index c957073d32..b59e4370e5 100644 --- a/counterparty-rs/src/utils.rs +++ b/counterparty-rs/src/utils.rs @@ -40,10 +40,14 @@ fn script_to_address(script_pubkey: Vec, network: &str) -> PyResult Err(_) => return Err(PyErr::new::("Invalid version value")), }; + let n = 22; + if script.len() < n{ + return Err(PyErr::new::("Script length is less than 22")) + } let address = Address { payload: Payload::WitnessProgram { - version: version, - program: script[2..22].to_vec(), + version, + program: script[2..n].to_vec(), }, network: network_enum, }; From 40c080be30456d39f9c3e549a9efe8253e6265f9 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 6 May 2024 09:16:21 +0200 Subject: [PATCH 255/280] API v1 is the default API --- .github/workflows/test_compose.sh | 8 +++--- counterparty-core/counterpartycore/cli.py | 4 --- .../counterpartycore/lib/api/api_v1.py | 16 +++++------ .../counterpartycore/lib/config.py | 12 ++++---- counterparty-core/counterpartycore/server.py | 28 +++++++++---------- counterparty-core/tools/genapidoc.py | 4 +-- docker-compose.yml | 2 -- dredd.yml | 2 +- release-notes/release-notes-v10.1.2.md | 9 +----- 9 files changed, 35 insertions(+), 50 deletions(-) diff --git a/.github/workflows/test_compose.sh b/.github/workflows/test_compose.sh index 7a5e1bf507..cdda09ec92 100644 --- a/.github/workflows/test_compose.sh +++ b/.github/workflows/test_compose.sh @@ -49,7 +49,7 @@ done # check running info with API v1 mainnet -response_v1_mainnet=$(curl -X POST http://127.0.0.1:4100/v1/rpc/ \ +response_v1_mainnet=$(curl -X POST http://127.0.0.1:4000/ \ --user rpc:rpc \ -H 'Content-Type: application/json; charset=UTF-8'\ -H 'Accept: application/json, text/javascript' \ @@ -62,7 +62,7 @@ if [ "$response_v1_mainnet" -ne 200 ]; then fi # check running info with API v1 testnet -response_v1_testnet=$(curl -X POST http://127.0.0.1:14100/v1/api/ \ +response_v1_testnet=$(curl -X POST http://127.0.0.1:14000/ \ --user rpc:rpc \ -H 'Content-Type: application/json; charset=UTF-8'\ -H 'Accept: application/json, text/javascript' \ @@ -75,7 +75,7 @@ if [ "$response_v1_testnet" -ne 200 ]; then fi # check running info with API v2 mainnet -response_v2_mainnet=$(curl http://api:api@127.0.0.1:4000/ \ +response_v2_mainnet=$(curl http://api:api@127.0.0.1:4200/ \ --write-out '%{http_code}' --silent --output /dev/null) if [ "$response_v2_mainnet" -ne 200 ]; then @@ -84,7 +84,7 @@ if [ "$response_v2_mainnet" -ne 200 ]; then fi # check running info with API v2 testnet -response_v2_testnet=$(curl http://api:api@127.0.0.1:14000/ \ +response_v2_testnet=$(curl http://api:api@127.0.0.1:14200/ \ --write-out '%{http_code}' --silent --output /dev/null) if [ "$response_v2_mainnet" -ne 200 ]; then diff --git a/counterparty-core/counterpartycore/cli.py b/counterparty-core/counterpartycore/cli.py index 8e6a042b7c..cf14c4cad0 100755 --- a/counterparty-core/counterpartycore/cli.py +++ b/counterparty-core/counterpartycore/cli.py @@ -251,10 +251,6 @@ def float_range_checker(arg): "help": "log API requests to the specified file", }, ], - [ - ("--enable-api-v1",), - {"action": "store_true", "default": False, "help": "Enable the API v1"}, - ], [ ("--no-log-files",), {"action": "store_true", "default": False, "help": "Don't write log files"}, diff --git a/counterparty-core/counterpartycore/lib/api/api_v1.py b/counterparty-core/counterpartycore/lib/api/api_v1.py index 3c4ea86678..8815222e78 100644 --- a/counterparty-core/counterpartycore/lib/api/api_v1.py +++ b/counterparty-core/counterpartycore/lib/api/api_v1.py @@ -1074,9 +1074,9 @@ def handle_root(args_path): """Handle all paths, decide where to forward the query.""" request_path = args_path.lower() if ( - request_path == "old" - or request_path.startswith("v1/api/") - or request_path.startswith("v1/rpc/") + request_path == "" + or request_path.startswith("api/") + or request_path.startswith("rpc/") ): if flask.request.method == "POST": # Need to get those here because it might not be available in this aux function. @@ -1108,7 +1108,7 @@ def handle_root(args_path): def handle_rpc_options(): response = flask.Response("", 204) _set_cors_headers(response) - response.headers["X-API-WARN"] = "Deprecated API" + # response.headers["X-API-WARN"] = "Deprecated API" return response def handle_rpc_post(request_json): @@ -1151,10 +1151,10 @@ def handle_rpc_post(request_json): jsonrpc_response.json.encode(), 200, mimetype="application/json" ) _set_cors_headers(response) - response.headers["X-API-WARN"] = "Deprecated API" - logger.warning( - "API v1 is deprecated and should be removed soon. Please migrate to REST API." - ) + # response.headers["X-API-WARN"] = "Deprecated API" + # logger.warning( + # "API v1 is deprecated and should be removed soon. Please migrate to REST API." + # ) return response ###################### diff --git a/counterparty-core/counterpartycore/lib/config.py b/counterparty-core/counterpartycore/lib/config.py index 28a1182ecd..ef6fbb4a40 100644 --- a/counterparty-core/counterpartycore/lib/config.py +++ b/counterparty-core/counterpartycore/lib/config.py @@ -51,13 +51,13 @@ FULL_APP_NAME = "Counterparty Core" LOGGER_NAME = APP_NAME -DEFAULT_API_PORT_REGTEST = 24000 -DEFAULT_API_PORT_TESTNET = 14000 -DEFAULT_API_PORT = 4000 +DEFAULT_API_PORT_REGTEST = 24200 +DEFAULT_API_PORT_TESTNET = 14200 +DEFAULT_API_PORT = 4200 -DEFAULT_RPC_PORT_REGTEST = 24100 -DEFAULT_RPC_PORT_TESTNET = 14100 -DEFAULT_RPC_PORT = 4100 +DEFAULT_RPC_PORT_REGTEST = 24000 +DEFAULT_RPC_PORT_TESTNET = 14000 +DEFAULT_RPC_PORT = 4000 DEFAULT_BACKEND_PORT_REGTEST = 28332 DEFAULT_BACKEND_PORT_TESTNET = 18332 diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index 3a067143bf..b655e74739 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -351,7 +351,7 @@ def initialise_config( config.RPC_HOST = "localhost" # The web root directory for API calls, eg. localhost:14000/rpc/ - config.RPC_WEBROOT = "/v1/rpc/" + config.RPC_WEBROOT = "/rpc/" # Server API RPC port if rpc_port: @@ -692,16 +692,15 @@ def start_all(args): # initilise_config transaction.initialise() - if args.enable_api_v1: - # API Status Poller. - api_status_poller = api_v1.APIStatusPoller() - api_status_poller.daemon = True - api_status_poller.start() + # API Status Poller. + api_status_poller = api_v1.APIStatusPoller() + api_status_poller.daemon = True + api_status_poller.start() - # API Server v1. - api_server_v1 = api_v1.APIServer() - api_server_v1.daemon = True - api_server_v1.start() + # API Server v1. + api_server_v1 = api_v1.APIServer() + api_server_v1.daemon = True + api_server_v1.start() # Server blocks.follow(db) @@ -711,11 +710,10 @@ def start_all(args): finally: if telemetry_daemon: telemetry_daemon.stop() - if args.enable_api_v1: - if api_status_poller: - api_status_poller.stop() - if api_server_v1: - api_server_v1.stop() + if api_status_poller: + api_status_poller.stop() + if api_server_v1: + api_server_v1.stop() if api_server_v2: api_server_v2.stop() backend.stop() diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index 2858e6a5c8..bf7fbd1b66 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -11,7 +11,7 @@ API_BLUEPRINT_FILE = os.path.join(CURR_DIR, "../../apiary.apib") DREDD_FILE = os.path.join(CURR_DIR, "../../dredd.yml") CACHE_FILE = os.path.join(CURR_DIR, "apicache.json") -API_ROOT = "http://api:api@localhost:4000" +API_ROOT = "http://api:api@localhost:4200" USE_API_CACHE = True TARGET_FILE = API_DOC_FILE @@ -85,7 +85,7 @@ def get_example_output(path, args): "loglevel": "error", "path": [], "blueprint": "apiary.apib", - "endpoint": "http://127.0.0.1:4000", + "endpoint": "http://127.0.0.1:4200", "only": [], } diff --git a/docker-compose.yml b/docker-compose.yml index a730cf3295..547bf1f437 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -84,7 +84,6 @@ services: - "--rpc-host=0.0.0.0" - "--api-host=0.0.0.0" - "--catch-up=bootstrap" - - "--enable-api-v1" #- "--verbose" ################### @@ -146,7 +145,6 @@ services: - "--rpc-host=0.0.0.0" - "--api-host=0.0.0.0" - "--catch-up=bootstrap" - - "--enable-api-v1" #- "--verbose" volumes: diff --git a/dredd.yml b/dredd.yml index beb3015400..2590b40ae7 100644 --- a/dredd.yml +++ b/dredd.yml @@ -1,5 +1,5 @@ blueprint: apiary.apib -endpoint: http://127.0.0.1:4000 +endpoint: http://127.0.0.1:4200 loglevel: error only: - Blocks > Get Blocks > Get Blocks diff --git a/release-notes/release-notes-v10.1.2.md b/release-notes/release-notes-v10.1.2.md index 85b3a762f6..f41b8bf0c0 100644 --- a/release-notes/release-notes-v10.1.2.md +++ b/release-notes/release-notes-v10.1.2.md @@ -5,13 +5,6 @@ This version of Counterparty Core most importantly marks the release of API v2, # Upgrading -The v1 API has been deprecated but not yet removed from the node software. To continue using it, you must: -- start `counterparty-server` with the flag `--enable-api-v1` -- use port `4100` for mainnet and port `14100` for testnet -- prefix all endpoints with `/v1/` - -There is a [migration guide](https://docs.counterparty.io/docs/advanced/api-v2/v1-to-v2/) in the documentation, which specifies equivalences between old and new functionality. - # ChangeLog @@ -21,7 +14,7 @@ There is a [migration guide](https://docs.counterparty.io/docs/advanced/api-v2/v ## Codebase -* Release API v2; deprecate API v1 +* Release API v2; * Have API return `ready` if the last block is less than one minute old * Add an index on the `block_index` field in the `credits` and `debits` tables * Add `TRACE level to Python logging From 33a5fe68c3ca17f405666d49991bdd36d4acf141 Mon Sep 17 00:00:00 2001 From: Adam Krellenstein Date: Mon, 6 May 2024 10:02:19 +0200 Subject: [PATCH 256/280] Tweak Language in Release Notes --- release-notes/release-notes-v10.1.2.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/release-notes/release-notes-v10.1.2.md b/release-notes/release-notes-v10.1.2.md index f41b8bf0c0..966258badb 100644 --- a/release-notes/release-notes-v10.1.2.md +++ b/release-notes/release-notes-v10.1.2.md @@ -1,10 +1,14 @@ -# Release Notes - Counterparty Core v10.1.2 (2024-05-05) +# Release Notes - Counterparty Core v10.1.2 (2024-05-06) -This version of Counterparty Core most importantly marks the release of API v2, a new RESTful API For documentation on the new API, see the [official project documentation](https://docs.counterparty.io/docs/advanced/api-v2/node-api/). +This version of Counterparty Core most importantly marks the release of API v2, a new RESTful API—see the [official project documentation](https://docs.counterparty.io/docs/advanced/api-v2/node-api/). The new API is available at `/v2/`, while the old API is now available at `/v1/` in addition to `/`. # Upgrading +There is a [guide for migrating from the v1 to the v2 API](https://docs.counterparty.io/docs/advanced/api-v2/v1-to-v2/) in the documentation, which specifies equivalences between old and new functionality. + +This release maintains full backwards-compatibility and includes no protocol changes. + # ChangeLog @@ -14,7 +18,7 @@ This version of Counterparty Core most importantly marks the release of API v2, ## Codebase -* Release API v2; +* Release API v2 * Have API return `ready` if the last block is less than one minute old * Add an index on the `block_index` field in the `credits` and `debits` tables * Add `TRACE level to Python logging From 0893d1d4b34355316a408b292d3ba1bff3a6495f Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 6 May 2024 13:18:05 +0200 Subject: [PATCH 257/280] Add proxy route to API v1 --- apiary.apib | 21 ++++++++++ .../counterpartycore/lib/api/api_server.py | 14 +++++-- .../counterpartycore/lib/api/routes.py | 2 + .../counterpartycore/lib/api/util.py | 38 ++++++++++++++----- counterparty-core/tools/apicache.json | 6 +++ counterparty-core/tools/genapidoc.py | 7 +++- dredd.yml | 1 + 7 files changed, 75 insertions(+), 14 deletions(-) diff --git a/apiary.apib b/apiary.apib index 9f22aeecca..4e6dd5c587 100644 --- a/apiary.apib +++ b/apiary.apib @@ -18,6 +18,7 @@ API routes are divided into 11 groups: - [`/events`](#/reference/events) - [`/mempool`](#/reference/mempool) - [`/bitcoin`](#/reference/bitcoin) +- [`/v1`](#/reference/v1) Notes: @@ -5124,3 +5125,23 @@ Returns the mempool events filtered by event name "result": [] } ``` + +## Group V1 + +### Redirect To Api V1 [GET /v1/{subpath}] + +Redirect to the API v1. + ++ Parameters + + subpath: `healthz` (str, required) - The path to redirect to + ++ Response 200 (application/json) + + ``` + { + "result": { + "result": "Healthy", + "success": true + } + } + ``` diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 6ccf1cdbde..246d1e8865 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -178,9 +178,11 @@ def execute_api_function(db, route, function_args): result = route["function"](db, **function_args) else: result = route["function"](**function_args) - BLOCK_CACHE[cache_key] = result - if len(BLOCK_CACHE) > MAX_BLOCK_CACHE_SIZE: - BLOCK_CACHE.popitem(last=False) + # don't cache API v1 + if route["function"].__name__ != "refirect_to_api_v1": + BLOCK_CACHE[cache_key] = result + if len(BLOCK_CACHE) > MAX_BLOCK_CACHE_SIZE: + BLOCK_CACHE.popitem(last=False) return result @@ -249,6 +251,7 @@ def handle_route(**kwargs): # clean up and return the result if result is None: return return_result(404, error="Not found") + result = remove_rowids(result) # inject details @@ -276,7 +279,10 @@ def run_api_server(args): # Add routes app.add_url_rule("/", view_func=handle_route) for path in ROUTES: - app.add_url_rule(path, view_func=handle_route) + methods = ["GET"] + if path == "/v1/": + methods = ["GET", "POST"] + app.add_url_rule(path, view_func=handle_route, methods=methods) # run the scheduler to refresh the backend height # `no_refresh_backend_height` used only for testing. TODO: find a way to mock it if "no_refresh_backend_height" not in args or not args["no_refresh_backend_height"]: diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index 7861d8bf6d..340716d63e 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -102,5 +102,7 @@ ### /mempool ### "/mempool/events": ledger.get_all_mempool_events, "/mempool/events/": ledger.get_mempool_events_by_name, + ### API v1 ### + "/v1/": util.redirect_to_api_v1, } ) diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index 70c27668cb..7b42a3c45f 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -6,6 +6,7 @@ from logging import handlers as logging_handlers import flask +import requests from counterpartycore.lib import backend, config, exceptions, ledger, transaction, util from docstring_parser import parse as parse_docstring @@ -209,15 +210,16 @@ def prepare_route_args(function): if arg_name in args_description: route_arg["description"] = args_description[arg_name] args.append(route_arg) - args.append( - { - "name": "verbose", - "type": "bool", - "default": "false", - "description": "Include asset and dispenser info and normalized quantities in the response.", - "required": False, - } - ) + if function.__name__ != "redirect_to_api_v1": + args.append( + { + "name": "verbose", + "type": "bool", + "default": "false", + "description": "Include asset and dispenser info and normalized quantities in the response.", + "required": False, + } + ) return args @@ -377,3 +379,21 @@ def inject_dispensers(db, result): if result_is_dict: return result_list[0] return result + + +def redirect_to_api_v1(subpath: str): + """ + Redirect to the API v1. + :param subpath: The path to redirect to (e.g. healthz) + """ + query_params = { + "headers": flask.request.headers, + "auth": (config.RPC_USER, config.RPC_PASSWORD), + } + url = f"http://localhost:4000/{subpath}" + if flask.request.query_string: + url += f"?{flask.request.query_string}" + request_function = getattr(requests, flask.request.method.lower()) + if flask.request.method == "POST": + query_params["json"] = flask.request.json + return request_function(url, **query_params).json() diff --git a/counterparty-core/tools/apicache.json b/counterparty-core/tools/apicache.json index e366a449d2..5c9134cd5e 100644 --- a/counterparty-core/tools/apicache.json +++ b/counterparty-core/tools/apicache.json @@ -3423,5 +3423,11 @@ "timestamp": 1712256340 } ] + }, + "/v1/": { + "result": { + "result": "Healthy", + "success": true + } } } \ No newline at end of file diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index bf7fbd1b66..09cfeee9d8 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -23,11 +23,13 @@ def get_example_output(path, args): + print(f"args: {args}") url_keys = [] for key, value in args.items(): if f"{key}>" in path: path = path.replace(f"<{key}>", value) path = path.replace(f"", value) + path = path.replace(f"", value) url_keys.append(key) for key in url_keys: args.pop(key) @@ -53,6 +55,7 @@ def get_example_output(path, args): "/events", "/mempool", "/bitcoin", + "/v1", ] GROUP_DOCS = { @@ -194,7 +197,9 @@ def gen_groups_toc(): if current_group in GROUP_DOCS: md += GROUP_DOCS[current_group] - blueprint_path = path.replace("<", "{").replace(">", "}").replace("int:", "") + blueprint_path = ( + path.replace("<", "{").replace(">", "}").replace("int:", "").replace("path:", "") + ) title = " ".join([part.capitalize() for part in str(route["function"].__name__).split("_")]) title = title.replace("Pubkeyhash", "PubKeyHash") title = title.replace("Mpma", "MPMA") diff --git a/dredd.yml b/dredd.yml index 2590b40ae7..02315fb642 100644 --- a/dredd.yml +++ b/dredd.yml @@ -62,5 +62,6 @@ only: - Events > Get Event By Index > Get Event By Index - Events > Get Events By Name > Get Events By Name - Z-pages > Check Server Health > Check Server Health +- V1 > Redirect To Api V1 > Redirect To Api V1 path: [] user: api:api From 11387b03a185954297627a5b6da536700039f028 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 6 May 2024 13:25:58 +0200 Subject: [PATCH 258/280] API v1 accepts v1/ path --- .github/workflows/test_compose.sh | 4 ++-- counterparty-core/counterpartycore/lib/api/api_v1.py | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_compose.sh b/.github/workflows/test_compose.sh index cdda09ec92..6ca991050f 100644 --- a/.github/workflows/test_compose.sh +++ b/.github/workflows/test_compose.sh @@ -49,7 +49,7 @@ done # check running info with API v1 mainnet -response_v1_mainnet=$(curl -X POST http://127.0.0.1:4000/ \ +response_v1_mainnet=$(curl -X POST http://127.0.0.1:4000/v1/ \ --user rpc:rpc \ -H 'Content-Type: application/json; charset=UTF-8'\ -H 'Accept: application/json, text/javascript' \ @@ -62,7 +62,7 @@ if [ "$response_v1_mainnet" -ne 200 ]; then fi # check running info with API v1 testnet -response_v1_testnet=$(curl -X POST http://127.0.0.1:14000/ \ +response_v1_testnet=$(curl -X POST http://127.0.0.1:14000/v1/ \ --user rpc:rpc \ -H 'Content-Type: application/json; charset=UTF-8'\ -H 'Accept: application/json, text/javascript' \ diff --git a/counterparty-core/counterpartycore/lib/api/api_v1.py b/counterparty-core/counterpartycore/lib/api/api_v1.py index 8815222e78..6cd07e9403 100644 --- a/counterparty-core/counterpartycore/lib/api/api_v1.py +++ b/counterparty-core/counterpartycore/lib/api/api_v1.py @@ -1077,6 +1077,7 @@ def handle_root(args_path): request_path == "" or request_path.startswith("api/") or request_path.startswith("rpc/") + or request_path.startswith("v1/") ): if flask.request.method == "POST": # Need to get those here because it might not be available in this aux function. From 010a69470cde1a34f923c568e7eed7ba89ed622b Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 6 May 2024 13:29:39 +0200 Subject: [PATCH 259/280] use port 4100 for the API v2 --- .github/workflows/test_compose.sh | 4 ++-- counterparty-core/counterpartycore/lib/config.py | 6 +++--- counterparty-core/tools/genapidoc.py | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/test_compose.sh b/.github/workflows/test_compose.sh index 6ca991050f..b022d70b94 100644 --- a/.github/workflows/test_compose.sh +++ b/.github/workflows/test_compose.sh @@ -75,7 +75,7 @@ if [ "$response_v1_testnet" -ne 200 ]; then fi # check running info with API v2 mainnet -response_v2_mainnet=$(curl http://api:api@127.0.0.1:4200/ \ +response_v2_mainnet=$(curl http://api:api@127.0.0.1:4100/ \ --write-out '%{http_code}' --silent --output /dev/null) if [ "$response_v2_mainnet" -ne 200 ]; then @@ -84,7 +84,7 @@ if [ "$response_v2_mainnet" -ne 200 ]; then fi # check running info with API v2 testnet -response_v2_testnet=$(curl http://api:api@127.0.0.1:14200/ \ +response_v2_testnet=$(curl http://api:api@127.0.0.1:14100/ \ --write-out '%{http_code}' --silent --output /dev/null) if [ "$response_v2_mainnet" -ne 200 ]; then diff --git a/counterparty-core/counterpartycore/lib/config.py b/counterparty-core/counterpartycore/lib/config.py index ef6fbb4a40..532660dc7d 100644 --- a/counterparty-core/counterpartycore/lib/config.py +++ b/counterparty-core/counterpartycore/lib/config.py @@ -51,9 +51,9 @@ FULL_APP_NAME = "Counterparty Core" LOGGER_NAME = APP_NAME -DEFAULT_API_PORT_REGTEST = 24200 -DEFAULT_API_PORT_TESTNET = 14200 -DEFAULT_API_PORT = 4200 +DEFAULT_API_PORT_REGTEST = 24100 +DEFAULT_API_PORT_TESTNET = 14100 +DEFAULT_API_PORT = 4100 DEFAULT_RPC_PORT_REGTEST = 24000 DEFAULT_RPC_PORT_TESTNET = 14000 diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index 09cfeee9d8..88be11efe4 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -11,7 +11,7 @@ API_BLUEPRINT_FILE = os.path.join(CURR_DIR, "../../apiary.apib") DREDD_FILE = os.path.join(CURR_DIR, "../../dredd.yml") CACHE_FILE = os.path.join(CURR_DIR, "apicache.json") -API_ROOT = "http://api:api@localhost:4200" +API_ROOT = "http://api:api@localhost:4100" USE_API_CACHE = True TARGET_FILE = API_DOC_FILE From 2c8aaf662335b5fcc1ef5b8c7eb401edb036f391 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 6 May 2024 13:33:27 +0200 Subject: [PATCH 260/280] fix test --- counterparty-core/counterpartycore/test/api_v2_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/counterparty-core/counterpartycore/test/api_v2_test.py b/counterparty-core/counterpartycore/test/api_v2_test.py index 2ba842268e..6ca417fca2 100644 --- a/counterparty-core/counterpartycore/test/api_v2_test.py +++ b/counterparty-core/counterpartycore/test/api_v2_test.py @@ -33,7 +33,7 @@ def test_api_v2(request): dispenser_hash = "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498" event = "CREDIT" event_index = 10 - exclude_routes = ["compose", "unpack", "info", "mempool", "healthz", "bitcoin"] + exclude_routes = ["compose", "unpack", "info", "mempool", "healthz", "bitcoin", "v1"] results = {} fixtures = {} with open(API_V2_FIXTURES, "r") as f: From c60581f332370eadd50ae2d966b4049602e2485e Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 6 May 2024 13:52:21 +0200 Subject: [PATCH 261/280] Prefix all routes with /v2/ --- .github/workflows/test_compose.sh | 4 +- apiary.apib | 164 +++++++------- .../counterpartycore/lib/api/api_server.py | 6 +- .../counterpartycore/lib/api/routes.py | 162 +++++++------- .../counterpartycore/test/api_v2_test.py | 18 +- .../test/fixtures/api_v2_fixtures.json | 114 +++++----- counterparty-core/tools/apicache.json | 204 ++++++++++-------- counterparty-core/tools/genapidoc.py | 2 +- dredd.yml | 2 +- 9 files changed, 356 insertions(+), 320 deletions(-) diff --git a/.github/workflows/test_compose.sh b/.github/workflows/test_compose.sh index b022d70b94..9396875480 100644 --- a/.github/workflows/test_compose.sh +++ b/.github/workflows/test_compose.sh @@ -75,7 +75,7 @@ if [ "$response_v1_testnet" -ne 200 ]; then fi # check running info with API v2 mainnet -response_v2_mainnet=$(curl http://api:api@127.0.0.1:4100/ \ +response_v2_mainnet=$(curl http://api:api@127.0.0.1:4100/v2/ \ --write-out '%{http_code}' --silent --output /dev/null) if [ "$response_v2_mainnet" -ne 200 ]; then @@ -84,7 +84,7 @@ if [ "$response_v2_mainnet" -ne 200 ]; then fi # check running info with API v2 testnet -response_v2_testnet=$(curl http://api:api@127.0.0.1:14100/ \ +response_v2_testnet=$(curl http://api:api@127.0.0.1:14100/v2/ \ --write-out '%{http_code}' --silent --output /dev/null) if [ "$response_v2_mainnet" -ne 200 ]; then diff --git a/apiary.apib b/apiary.apib index 4e6dd5c587..c268512aab 100644 --- a/apiary.apib +++ b/apiary.apib @@ -65,7 +65,7 @@ Returns server information and the list of documented routes in JSON format. ## Group Blocks -### Get Blocks [GET /blocks{?last}{&limit}{&verbose}] +### Get Blocks [GET /v2/blocks{?last}{&limit}{&verbose}] Returns the list of the last ten blocks @@ -106,7 +106,7 @@ Returns the list of the last ten blocks } ``` -### Get Block [GET /blocks/{block_index}{?verbose}] +### Get Block [GET /v2/blocks/{block_index}{?verbose}] Return the information of a block @@ -132,7 +132,7 @@ Return the information of a block } ``` -### Get Transactions By Block [GET /blocks/{block_index}/transactions{?verbose}] +### Get Transactions By Block [GET /v2/blocks/{block_index}/transactions{?verbose}] Returns the transactions of a block @@ -163,7 +163,7 @@ Returns the transactions of a block } ``` -### Get Events By Block [GET /blocks/{block_index}/events{?verbose}] +### Get Events By Block [GET /v2/blocks/{block_index}/events{?verbose}] Returns the events of a block @@ -310,7 +310,7 @@ Returns the events of a block } ``` -### Get Event Counts By Block [GET /blocks/{block_index}/events/counts{?verbose}] +### Get Event Counts By Block [GET /v2/blocks/{block_index}/events/counts{?verbose}] Returns the event counts of a block @@ -360,7 +360,7 @@ Returns the event counts of a block } ``` -### Get Events By Block And Event [GET /blocks/{block_index}/events/{event}{?verbose}] +### Get Events By Block And Event [GET /v2/blocks/{block_index}/events/{event}{?verbose}] Returns the events of a block filtered by event @@ -400,7 +400,7 @@ Returns the events of a block filtered by event } ``` -### Get Credits By Block [GET /blocks/{block_index}/credits{?verbose}] +### Get Credits By Block [GET /v2/blocks/{block_index}/credits{?verbose}] Returns the credits of a block @@ -435,7 +435,7 @@ Returns the credits of a block } ``` -### Get Debits By Block [GET /blocks/{block_index}/debits{?verbose}] +### Get Debits By Block [GET /v2/blocks/{block_index}/debits{?verbose}] Returns the debits of a block @@ -469,7 +469,7 @@ Returns the debits of a block } ``` -### Get Expirations [GET /blocks/{block_index}/expirations{?verbose}] +### Get Expirations [GET /v2/blocks/{block_index}/expirations{?verbose}] Returns the expirations of a block @@ -495,7 +495,7 @@ Returns the expirations of a block } ``` -### Get Cancels [GET /blocks/{block_index}/cancels{?verbose}] +### Get Cancels [GET /v2/blocks/{block_index}/cancels{?verbose}] Returns the cancels of a block @@ -529,7 +529,7 @@ Returns the cancels of a block } ``` -### Get Destructions [GET /blocks/{block_index}/destructions{?verbose}] +### Get Destructions [GET /v2/blocks/{block_index}/destructions{?verbose}] Returns the destructions of a block @@ -565,7 +565,7 @@ Returns the destructions of a block } ``` -### Get Issuances By Block [GET /blocks/{block_index}/issuances{?verbose}] +### Get Issuances By Block [GET /v2/blocks/{block_index}/issuances{?verbose}] Returns the issuances of a block @@ -604,7 +604,7 @@ Returns the issuances of a block } ``` -### Get Sends By Block [GET /blocks/{block_index}/sends{?limit}{&offset}{&verbose}] +### Get Sends By Block [GET /v2/blocks/{block_index}/sends{?limit}{&offset}{&verbose}] Returns the sends of a block @@ -646,7 +646,7 @@ Returns the sends of a block } ``` -### Get Dispenses By Block [GET /blocks/{block_index}/dispenses{?verbose}] +### Get Dispenses By Block [GET /v2/blocks/{block_index}/dispenses{?verbose}] Returns the dispenses of a block @@ -699,7 +699,7 @@ Returns the dispenses of a block } ``` -### Get Sweeps By Block [GET /blocks/{block_index}/sweeps{?verbose}] +### Get Sweeps By Block [GET /v2/blocks/{block_index}/sweeps{?verbose}] Returns the sweeps of a block @@ -741,7 +741,7 @@ Returns the sweeps of a block ## Group Transactions -### Info [GET /transactions/info{?rawtransaction}{&block_index}{&verbose}] +### Info [GET /v2/transactions/info{?rawtransaction}{&block_index}{&verbose}] Returns Counterparty information from a raw transaction in hex format. @@ -784,7 +784,7 @@ Returns Counterparty information from a raw transaction in hex format. } ``` -### Unpack [GET /transactions/unpack{?datahex}{&block_index}{&verbose}] +### Unpack [GET /v2/transactions/unpack{?datahex}{&block_index}{&verbose}] Unpacks Counterparty data in hex format and returns the message type and data. @@ -820,7 +820,7 @@ Unpacks Counterparty data in hex format and returns the message type and data. } ``` -### Get Transaction By Hash [GET /transactions/{tx_hash}{?verbose}] +### Get Transaction By Hash [GET /v2/transactions/{tx_hash}{?verbose}] Returns a transaction by its hash. @@ -869,7 +869,7 @@ Returns a transaction by its hash. ## Group Addresses -### Get Address Balances [GET /addresses/{address}/balances{?verbose}] +### Get Address Balances [GET /v2/addresses/{address}/balances{?verbose}] Returns the balances of an address @@ -899,7 +899,7 @@ Returns the balances of an address } ``` -### Get Balance By Address And Asset [GET /addresses/{address}/balances/{asset}{?verbose}] +### Get Balance By Address And Asset [GET /v2/addresses/{address}/balances/{asset}{?verbose}] Returns the balance of an address and asset @@ -928,7 +928,7 @@ Returns the balance of an address and asset } ``` -### Get Credits By Address [GET /addresses/{address}/credits{?limit}{&offset}{&verbose}] +### Get Credits By Address [GET /v2/addresses/{address}/credits{?limit}{&offset}{&verbose}] Returns the credits of an address @@ -966,7 +966,7 @@ Returns the credits of an address } ``` -### Get Debits By Address [GET /addresses/{address}/debits{?limit}{&offset}{&verbose}] +### Get Debits By Address [GET /v2/addresses/{address}/debits{?limit}{&offset}{&verbose}] Returns the debits of an address @@ -1020,7 +1020,7 @@ Returns the debits of an address } ``` -### Get Bet By Feed [GET /addresses/{address}/bets{?status}{&verbose}] +### Get Bet By Feed [GET /v2/addresses/{address}/bets{?status}{&verbose}] Returns the bets of a feed @@ -1078,7 +1078,7 @@ Returns the bets of a feed } ``` -### Get Broadcasts By Source [GET /addresses/{address}/broadcasts{?status}{&order_by}{&verbose}] +### Get Broadcasts By Source [GET /v2/addresses/{address}/broadcasts{?status}{&order_by}{&verbose}] Returns the broadcasts of a source @@ -1124,7 +1124,7 @@ Returns the broadcasts of a source } ``` -### Get Burns By Address [GET /addresses/{address}/burns{?verbose}] +### Get Burns By Address [GET /v2/addresses/{address}/burns{?verbose}] Returns the burns of an address @@ -1151,7 +1151,7 @@ Returns the burns of an address } ``` -### Get Send By Address [GET /addresses/{address}/sends{?limit}{&offset}{&verbose}] +### Get Send By Address [GET /v2/addresses/{address}/sends{?limit}{&offset}{&verbose}] Returns the sends of an address @@ -1192,7 +1192,7 @@ Returns the sends of an address } ``` -### Get Receive By Address [GET /addresses/{address}/receives{?limit}{&offset}{&verbose}] +### Get Receive By Address [GET /v2/addresses/{address}/receives{?limit}{&offset}{&verbose}] Returns the receives of an address @@ -1233,7 +1233,7 @@ Returns the receives of an address } ``` -### Get Send By Address And Asset [GET /addresses/{address}/sends/{asset}{?verbose}] +### Get Send By Address And Asset [GET /v2/addresses/{address}/sends/{asset}{?verbose}] Returns the sends of an address and asset @@ -1271,7 +1271,7 @@ Returns the sends of an address and asset } ``` -### Get Receive By Address And Asset [GET /addresses/{address}/receives/{asset}{?limit}{&offset}{&verbose}] +### Get Receive By Address And Asset [GET /v2/addresses/{address}/receives/{asset}{?limit}{&offset}{&verbose}] Returns the receives of an address and asset @@ -1313,7 +1313,7 @@ Returns the receives of an address and asset } ``` -### Get Dispensers By Address [GET /addresses/{address}/dispensers{?status}{&verbose}] +### Get Dispensers By Address [GET /v2/addresses/{address}/dispensers{?status}{&verbose}] Returns the dispensers of an address @@ -1359,7 +1359,7 @@ Returns the dispensers of an address } ``` -### Get Dispensers By Address And Asset [GET /addresses/{address}/dispensers/{asset}{?status}{&verbose}] +### Get Dispensers By Address And Asset [GET /v2/addresses/{address}/dispensers/{asset}{?status}{&verbose}] Returns the dispensers of an address and an asset @@ -1406,7 +1406,7 @@ Returns the dispensers of an address and an asset } ``` -### Get Sweeps By Address [GET /addresses/{address}/sweeps{?verbose}] +### Get Sweeps By Address [GET /v2/addresses/{address}/sweeps{?verbose}] Returns the sweeps of an address @@ -1458,7 +1458,7 @@ By default the default value of the `encoding` parameter detailed above is `auto - **NOTE**: Don't leave pretxs hanging without transmitting the second transaction as this pollutes the UTXO set and risks making bitcoin harder to run on low spec nodes. -### Compose Bet [GET /addresses/{address}/compose/bet{?feed_address}{&bet_type}{&deadline}{&wager_quantity}{&counterwager_quantity}{&expiration}{&leverage}{&target_value}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] +### Compose Bet [GET /v2/addresses/{address}/compose/bet{?feed_address}{&bet_type}{&deadline}{&wager_quantity}{&counterwager_quantity}{&expiration}{&leverage}{&target_value}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Composes a transaction to issue a bet against a feed. @@ -1527,7 +1527,7 @@ Composes a transaction to issue a bet against a feed. } ``` -### Compose Broadcast [GET /addresses/{address}/compose/broadcast{?timestamp}{&value}{&fee_fraction}{&text}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] +### Compose Broadcast [GET /v2/addresses/{address}/compose/broadcast{?timestamp}{&value}{&fee_fraction}{&text}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Composes a transaction to broadcast textual and numerical information to the network. @@ -1586,7 +1586,7 @@ Composes a transaction to broadcast textual and numerical information to the net } ``` -### Compose BTCPay [GET /addresses/{address}/compose/btcpay{?order_match_id}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] +### Compose BTCPay [GET /v2/addresses/{address}/compose/btcpay{?order_match_id}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Composes a transaction to pay for a BTC order match. @@ -1639,7 +1639,7 @@ Composes a transaction to pay for a BTC order match. } ``` -### Compose Burn [GET /addresses/{address}/compose/burn{?quantity}{&overburn}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] +### Compose Burn [GET /v2/addresses/{address}/compose/burn{?quantity}{&overburn}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, possible between blocks 278310 and 283810; on testnet it is still available). @@ -1695,7 +1695,7 @@ Composes a transaction to burn a given quantity of BTC for XCP (on mainnet, poss } ``` -### Compose Cancel [GET /addresses/{address}/compose/cancel{?offer_hash}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] +### Compose Cancel [GET /v2/addresses/{address}/compose/cancel{?offer_hash}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Composes a transaction to cancel an open order or bet. @@ -1748,7 +1748,7 @@ Composes a transaction to cancel an open order or bet. } ``` -### Compose Destroy [GET /addresses/{address}/compose/destroy{?asset}{&quantity}{&tag}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] +### Compose Destroy [GET /v2/addresses/{address}/compose/destroy{?asset}{&quantity}{&tag}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Composes a transaction to destroy a quantity of an asset. @@ -1805,7 +1805,7 @@ Composes a transaction to destroy a quantity of an asset. } ``` -### Compose Dispenser [GET /addresses/{address}/compose/dispenser{?asset}{&give_quantity}{&escrow_quantity}{&mainchainrate}{&status}{&open_address}{&oracle_address}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] +### Compose Dispenser [GET /v2/addresses/{address}/compose/dispenser{?asset}{&give_quantity}{&escrow_quantity}{&mainchainrate}{&status}{&open_address}{&oracle_address}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Opens or closes a dispenser for a given asset at a given rate of main chain asset (BTC). Escrowed quantity on open must be equal or greater than give_quantity. It is suggested that you escrow multiples of give_quantity to ease dispenser operation. @@ -1872,7 +1872,7 @@ Opens or closes a dispenser for a given asset at a given rate of main chain asse } ``` -### Compose Dividend [GET /addresses/{address}/compose/dividend{?quantity_per_unit}{&asset}{÷nd_asset}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] +### Compose Dividend [GET /v2/addresses/{address}/compose/dividend{?quantity_per_unit}{&asset}{÷nd_asset}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Composes a transaction to issue a dividend to holders of a given asset. @@ -1929,7 +1929,7 @@ Composes a transaction to issue a dividend to holders of a given asset. } ``` -### Compose Issuance [GET /addresses/{address}/compose/issuance{?asset}{&quantity}{&transfer_destination}{&divisible}{&lock}{&reset}{&description}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] +### Compose Issuance [GET /v2/addresses/{address}/compose/issuance{?asset}{&quantity}{&transfer_destination}{&divisible}{&lock}{&reset}{&description}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Composes a transaction to Issue a new asset, issue more of an existing asset, lock an asset, reset existing supply, or transfer the ownership of an asset. @@ -1999,7 +1999,7 @@ Composes a transaction to Issue a new asset, issue more of an existing asset, lo } ``` -### Compose MPMA [GET /addresses/{address}/compose/mpma{?assets}{&destinations}{&quantities}{&memo}{&memo_is_hex}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] +### Compose MPMA [GET /v2/addresses/{address}/compose/mpma{?assets}{&destinations}{&quantities}{&memo}{&memo_is_hex}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Composes a transaction to send multiple payments to multiple addresses. @@ -2074,7 +2074,7 @@ Composes a transaction to send multiple payments to multiple addresses. } ``` -### Compose Order [GET /addresses/{address}/compose/order{?give_asset}{&give_quantity}{&get_asset}{&get_quantity}{&expiration}{&fee_required}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] +### Compose Order [GET /v2/addresses/{address}/compose/order{?give_asset}{&give_quantity}{&get_asset}{&get_quantity}{&expiration}{&fee_required}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Composes a transaction to place an order on the distributed exchange. @@ -2137,7 +2137,7 @@ Composes a transaction to place an order on the distributed exchange. } ``` -### Compose Send [GET /addresses/{address}/compose/send{?destination}{&asset}{&quantity}{&memo}{&memo_is_hex}{&use_enhanced_send}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] +### Compose Send [GET /v2/addresses/{address}/compose/send{?destination}{&asset}{&quantity}{&memo}{&memo_is_hex}{&use_enhanced_send}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Composes a transaction to send a quantity of an asset to another address. @@ -2203,7 +2203,7 @@ Composes a transaction to send a quantity of an asset to another address. } ``` -### Compose Sweep [GET /addresses/{address}/compose/sweep{?destination}{&flags}{&memo}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] +### Compose Sweep [GET /v2/addresses/{address}/compose/sweep{?destination}{&flags}{&memo}{&encoding}{&fee_per_kb}{®ular_dust_size}{&multisig_dust_size}{&pubkey}{&allow_unconfirmed_inputs}{&fee}{&fee_provided}{&unspent_tx_hash}{&dust_return_pubkey}{&disable_utxo_locks}{&extended_tx_info}{&p2sh_pretx_txid}{&segwit}{&verbose}] Composes a transaction to Sends all assets and/or transfer ownerships to a destination address. @@ -2262,7 +2262,7 @@ Composes a transaction to Sends all assets and/or transfer ownerships to a desti ## Group Assets -### Get Valid Assets [GET /assets{?offset}{&limit}{&verbose}] +### Get Valid Assets [GET /v2/assets{?offset}{&limit}{&verbose}] Returns the valid assets @@ -2303,7 +2303,7 @@ Returns the valid assets } ``` -### Get Asset Info [GET /assets/{asset}{?verbose}] +### Get Asset Info [GET /v2/assets/{asset}{?verbose}] Returns the asset information @@ -2330,7 +2330,7 @@ Returns the asset information } ``` -### Get Asset Balances [GET /assets/{asset}/balances{?exclude_zero_balances}{&verbose}] +### Get Asset Balances [GET /v2/assets/{asset}/balances{?exclude_zero_balances}{&verbose}] Returns the asset balances @@ -2415,7 +2415,7 @@ Returns the asset balances } ``` -### Get Balance By Address And Asset [GET /assets/{asset}/balances/{address}{?verbose}] +### Get Balance By Address And Asset [GET /v2/assets/{asset}/balances/{address}{?verbose}] Returns the balance of an address and asset @@ -2444,7 +2444,7 @@ Returns the balance of an address and asset } ``` -### Get Orders By Asset [GET /assets/{asset}/orders{?status}{&verbose}] +### Get Orders By Asset [GET /v2/assets/{asset}/orders{?status}{&verbose}] Returns the orders of an asset @@ -2867,7 +2867,7 @@ Returns the orders of an asset } ``` -### Get Credits By Asset [GET /assets/{asset}/credits{?limit}{&offset}{&verbose}] +### Get Credits By Asset [GET /v2/assets/{asset}/credits{?limit}{&offset}{&verbose}] Returns the credits of an asset @@ -2974,7 +2974,7 @@ Returns the credits of an asset } ``` -### Get Debits By Asset [GET /assets/{asset}/debits{?limit}{&offset}{&verbose}] +### Get Debits By Asset [GET /v2/assets/{asset}/debits{?limit}{&offset}{&verbose}] Returns the debits of an asset @@ -3076,7 +3076,7 @@ Returns the debits of an asset } ``` -### Get Dividends [GET /assets/{asset}/dividends{?verbose}] +### Get Dividends [GET /v2/assets/{asset}/dividends{?verbose}] Returns the dividends of an asset @@ -3310,7 +3310,7 @@ Returns the dividends of an asset } ``` -### Get Issuances By Asset [GET /assets/{asset}/issuances{?verbose}] +### Get Issuances By Asset [GET /v2/assets/{asset}/issuances{?verbose}] Returns the issuances of an asset @@ -3412,7 +3412,7 @@ Returns the issuances of an asset } ``` -### Get Sends By Asset [GET /assets/{asset}/sends{?limit}{&offset}{&verbose}] +### Get Sends By Asset [GET /v2/assets/{asset}/sends{?limit}{&offset}{&verbose}] Returns the sends of an asset @@ -3529,7 +3529,7 @@ Returns the sends of an asset } ``` -### Get Dispensers By Asset [GET /assets/{asset}/dispensers{?status}{&verbose}] +### Get Dispensers By Asset [GET /v2/assets/{asset}/dispensers{?status}{&verbose}] Returns the dispensers of an asset @@ -3575,7 +3575,7 @@ Returns the dispensers of an asset } ``` -### Get Dispensers By Address And Asset [GET /assets/{asset}/dispensers/{address}{?status}{&verbose}] +### Get Dispensers By Address And Asset [GET /v2/assets/{asset}/dispensers/{address}{?status}{&verbose}] Returns the dispensers of an address and an asset @@ -3622,7 +3622,7 @@ Returns the dispensers of an address and an asset } ``` -### Get Asset Holders [GET /assets/{asset}/holders{?verbose}] +### Get Asset Holders [GET /v2/assets/{asset}/holders{?verbose}] Returns the holders of an asset @@ -3682,7 +3682,7 @@ Returns the holders of an asset ## Group Orders -### Get Order [GET /orders/{order_hash}{?verbose}] +### Get Order [GET /v2/orders/{order_hash}{?verbose}] Returns the information of an order @@ -3736,7 +3736,7 @@ Returns the information of an order } ``` -### Get Order Matches By Order [GET /orders/{order_hash}/matches{?status}{&verbose}] +### Get Order Matches By Order [GET /v2/orders/{order_hash}/matches{?status}{&verbose}] Returns the order matches of an order @@ -3777,7 +3777,7 @@ Returns the order matches of an order } ``` -### Get BTCPays By Order [GET /orders/{order_hash}/btcpays{?verbose}] +### Get BTCPays By Order [GET /v2/orders/{order_hash}/btcpays{?verbose}] Returns the BTC pays of an order @@ -3805,7 +3805,7 @@ Returns the BTC pays of an order } ``` -### Get Orders By Two Assets [GET /orders/{asset1}/{asset2}{?status}{&verbose}] +### Get Orders By Two Assets [GET /v2/orders/{asset1}/{asset2}{?status}{&verbose}] Returns the orders to exchange two assets @@ -3984,7 +3984,7 @@ Returns the orders to exchange two assets ## Group Bets -### Get Bet [GET /bets/{bet_hash}{?verbose}] +### Get Bet [GET /v2/bets/{bet_hash}{?verbose}] Returns the information of a bet @@ -4021,7 +4021,7 @@ Returns the information of a bet } ``` -### Get Bet Matches By Bet [GET /bets/{bet_hash}/matches{?status}{&verbose}] +### Get Bet Matches By Bet [GET /v2/bets/{bet_hash}/matches{?status}{&verbose}] Returns the bet matches of a bet @@ -4067,7 +4067,7 @@ Returns the bet matches of a bet } ``` -### Get Resolutions By Bet [GET /bets/{bet_hash}/resolutions{?verbose}] +### Get Resolutions By Bet [GET /v2/bets/{bet_hash}/resolutions{?verbose}] Returns the resolutions of a bet @@ -4098,7 +4098,7 @@ Returns the resolutions of a bet ## Group Burns -### Get All Burns [GET /burns{?status}{&offset}{&limit}{&verbose}] +### Get All Burns [GET /v2/burns{?status}{&offset}{&limit}{&verbose}] Returns the burns @@ -4168,7 +4168,7 @@ Returns the burns ## Group Dispensers -### Get Dispenser Info By Hash [GET /dispensers/{dispenser_hash}{?verbose}] +### Get Dispenser Info By Hash [GET /v2/dispensers/{dispenser_hash}{?verbose}] Returns the dispenser information by tx_hash @@ -4212,7 +4212,7 @@ Returns the dispenser information by tx_hash } ``` -### Get Dispenses By Dispenser [GET /dispensers/{dispenser_hash}/dispenses{?verbose}] +### Get Dispenses By Dispenser [GET /v2/dispensers/{dispenser_hash}/dispenses{?verbose}] Returns the dispenses of a dispenser @@ -4302,7 +4302,7 @@ Returns the dispenses of a dispenser ## Group Events -### Get All Events [GET /events{?last}{&limit}{&verbose}] +### Get All Events [GET /v2/events{?last}{&limit}{&verbose}] Returns all events @@ -4416,7 +4416,7 @@ Returns all events } ``` -### Get Event By Index [GET /events/{event_index}{?verbose}] +### Get Event By Index [GET /v2/events/{event_index}{?verbose}] Returns the event of an index @@ -4445,7 +4445,7 @@ Returns the event of an index } ``` -### Get All Events Counts [GET /events/counts{?verbose}] +### Get All Events Counts [GET /v2/events/counts{?verbose}] Returns the event counts of all blocks @@ -4650,7 +4650,7 @@ Returns the event counts of all blocks } ``` -### Get Events By Name [GET /events/{event}{?last}{&limit}{&verbose}] +### Get Events By Name [GET /v2/events/{event}{?last}{&limit}{&verbose}] Returns the events filtered by event name @@ -4788,7 +4788,7 @@ Returns the events filtered by event name ## Group Z-pages -### Check Server Health [GET /healthz{?check_type}{&verbose}] +### Check Server Health [GET /v2/healthz{?check_type}{&verbose}] Health check route. @@ -4810,7 +4810,7 @@ Health check route. ## Group Bitcoin -### Get Transactions By Address [GET /bitcoin/addresses/{address}/transactions{?unconfirmed}{&only_tx_hashes}{&verbose}] +### Get Transactions By Address [GET /v2/bitcoin/addresses/{address}/transactions{?unconfirmed}{&only_tx_hashes}{&verbose}] Returns all transactions involving a given address @@ -4868,7 +4868,7 @@ Returns all transactions involving a given address } ``` -### Get Oldest Transaction By Address [GET /bitcoin/addresses/{address}/transactions/oldest{?block_index}{&verbose}] +### Get Oldest Transaction By Address [GET /v2/bitcoin/addresses/{address}/transactions/oldest{?block_index}{&verbose}] Get the oldest transaction for an address. @@ -4890,7 +4890,7 @@ Get the oldest transaction for an address. } ``` -### Get Unspent Txouts [GET /bitcoin/addresses/{address}/utxos{?unconfirmed}{&unspent_tx_hash}{&verbose}] +### Get Unspent Txouts [GET /v2/bitcoin/addresses/{address}/utxos{?unconfirmed}{&unspent_tx_hash}{&verbose}] Returns a list of unspent outputs for a specific address @@ -4992,7 +4992,7 @@ Returns a list of unspent outputs for a specific address } ``` -### PubKeyHash To Pubkey [GET /bitcoin/addresses/{address}/pubkey{?provided_pubkeys}{&verbose}] +### PubKeyHash To Pubkey [GET /v2/bitcoin/addresses/{address}/pubkey{?provided_pubkeys}{&verbose}] Get pubkey for an address. @@ -5011,7 +5011,7 @@ Get pubkey for an address. } ``` -### Get Transaction [GET /bitcoin/transactions/{tx_hash}{?format}{&verbose}] +### Get Transaction [GET /v2/bitcoin/transactions/{tx_hash}{?format}{&verbose}] Get a transaction from the blockchain @@ -5071,7 +5071,7 @@ Get a transaction from the blockchain } ``` -### Fee Per Kb [GET /bitcoin/estimatesmartfee{?conf_target}{&mode}{&verbose}] +### Fee Per Kb [GET /v2/bitcoin/estimatesmartfee{?conf_target}{&mode}{&verbose}] Get the fee per kilobyte for a transaction to be confirmed in `conf_target` blocks. @@ -5093,7 +5093,7 @@ Get the fee per kilobyte for a transaction to be confirmed in `conf_target` bloc ## Group Mempool -### Get All Mempool Events [GET /mempool/events{?verbose}] +### Get All Mempool Events [GET /v2/mempool/events{?verbose}] Returns all mempool events @@ -5109,7 +5109,7 @@ Returns all mempool events } ``` -### Get Mempool Events By Name [GET /mempool/events/{event}{?verbose}] +### Get Mempool Events By Name [GET /v2/mempool/events/{event}{?verbose}] Returns the mempool events filtered by event name @@ -5126,7 +5126,7 @@ Returns the mempool events filtered by event name } ``` -## Group V1 +## Group ### Redirect To Api V1 [GET /v1/{subpath}] diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 246d1e8865..06811e24c6 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -195,7 +195,7 @@ def inject_details(db, result): def get_transaction_name(rule): - if rule == "/": + if rule == "/v2/": return "APIRoot" if rule == "/healthz": return "healthcheck" @@ -227,7 +227,7 @@ def handle_route(**kwargs): if not is_server_ready() and not return_result_if_not_ready(rule): return return_result(503, error="Counterparty not ready") - if rule == "/": + if rule == "/v2/": return return_result(200, result=api_root()) route = ROUTES.get(rule) @@ -277,7 +277,7 @@ def run_api_server(args): # Get the last block index util.CURRENT_BLOCK_INDEX = blocks.last_db_index(get_db()) # Add routes - app.add_url_rule("/", view_func=handle_route) + app.add_url_rule("/v2/", view_func=handle_route) for path in ROUTES: methods = ["GET"] if path == "/v1/": diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index 340716d63e..716afeb5c6 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -9,99 +9,99 @@ ROUTES = util.prepare_routes( { ### /blocks ### - "/blocks": ledger.get_blocks, - "/blocks/": ledger.get_block, - "/blocks//transactions": ledger.get_transactions_by_block, - "/blocks//events": ledger.get_events_by_block, - "/blocks//events/counts": ledger.get_event_counts_by_block, - "/blocks//events/": ledger.get_events_by_block_and_event, - "/blocks//credits": ledger.get_credits_by_block, - "/blocks//debits": ledger.get_debits_by_block, - "/blocks//expirations": ledger.get_expirations, - "/blocks//cancels": ledger.get_cancels, - "/blocks//destructions": ledger.get_destructions, - "/blocks//issuances": ledger.get_issuances_by_block, - "/blocks//sends": ledger.get_sends_by_block, - "/blocks//dispenses": ledger.get_dispenses_by_block, - "/blocks//sweeps": ledger.get_sweeps_by_block, + "/v2/blocks": ledger.get_blocks, + "/v2/blocks/": ledger.get_block, + "/v2/blocks//transactions": ledger.get_transactions_by_block, + "/v2/blocks//events": ledger.get_events_by_block, + "/v2/blocks//events/counts": ledger.get_event_counts_by_block, + "/v2/blocks//events/": ledger.get_events_by_block_and_event, + "/v2/blocks//credits": ledger.get_credits_by_block, + "/v2/blocks//debits": ledger.get_debits_by_block, + "/v2/blocks//expirations": ledger.get_expirations, + "/v2/blocks//cancels": ledger.get_cancels, + "/v2/blocks//destructions": ledger.get_destructions, + "/v2/blocks//issuances": ledger.get_issuances_by_block, + "/v2/blocks//sends": ledger.get_sends_by_block, + "/v2/blocks//dispenses": ledger.get_dispenses_by_block, + "/v2/blocks//sweeps": ledger.get_sweeps_by_block, ### /transactions ### - "/transactions/info": transaction.info, - "/transactions/unpack": transaction.unpack, - "/transactions/": transaction.get_transaction_by_hash, + "/v2/transactions/info": transaction.info, + "/v2/transactions/unpack": transaction.unpack, + "/v2/transactions/": transaction.get_transaction_by_hash, ### /addresses ### - "/addresses/
/balances": ledger.get_address_balances, - "/addresses/
/balances/": ledger.get_balance_by_address_and_asset, - "/addresses/
/credits": ledger.get_credits_by_address, - "/addresses/
/debits": ledger.get_debits_by_address, - "/addresses/
/bets": ledger.get_bet_by_feed, - "/addresses/
/broadcasts": ledger.get_broadcasts_by_source, - "/addresses/
/burns": ledger.get_burns_by_address, - "/addresses/
/sends": ledger.get_send_by_address, - "/addresses/
/receives": ledger.get_receive_by_address, - "/addresses/
/sends/": ledger.get_send_by_address_and_asset, - "/addresses/
/receives/": ledger.get_receive_by_address_and_asset, - "/addresses/
/dispensers": ledger.get_dispensers_by_address, - "/addresses/
/dispensers/": ledger.get_dispensers_by_address_and_asset, - "/addresses/
/sweeps": ledger.get_sweeps_by_address, + "/v2/addresses/
/balances": ledger.get_address_balances, + "/v2/addresses/
/balances/": ledger.get_balance_by_address_and_asset, + "/v2/addresses/
/credits": ledger.get_credits_by_address, + "/v2/addresses/
/debits": ledger.get_debits_by_address, + "/v2/addresses/
/bets": ledger.get_bet_by_feed, + "/v2/addresses/
/broadcasts": ledger.get_broadcasts_by_source, + "/v2/addresses/
/burns": ledger.get_burns_by_address, + "/v2/addresses/
/sends": ledger.get_send_by_address, + "/v2/addresses/
/receives": ledger.get_receive_by_address, + "/v2/addresses/
/sends/": ledger.get_send_by_address_and_asset, + "/v2/addresses/
/receives/": ledger.get_receive_by_address_and_asset, + "/v2/addresses/
/dispensers": ledger.get_dispensers_by_address, + "/v2/addresses/
/dispensers/": ledger.get_dispensers_by_address_and_asset, + "/v2/addresses/
/sweeps": ledger.get_sweeps_by_address, ### /addresses/
/compose/ ### - "/addresses/
/compose/bet": transaction.compose_bet, - "/addresses/
/compose/broadcast": transaction.compose_broadcast, - "/addresses/
/compose/btcpay": transaction.compose_btcpay, - "/addresses/
/compose/burn": transaction.compose_burn, - "/addresses/
/compose/cancel": transaction.compose_cancel, - "/addresses/
/compose/destroy": transaction.compose_destroy, - "/addresses/
/compose/dispenser": transaction.compose_dispenser, - "/addresses/
/compose/dividend": transaction.compose_dividend, - "/addresses/
/compose/issuance": transaction.compose_issuance, - "/addresses/
/compose/mpma": transaction.compose_mpma, - "/addresses/
/compose/order": transaction.compose_order, - "/addresses/
/compose/send": transaction.compose_send, - "/addresses/
/compose/sweep": transaction.compose_sweep, + "/v2/addresses/
/compose/bet": transaction.compose_bet, + "/v2/addresses/
/compose/broadcast": transaction.compose_broadcast, + "/v2/addresses/
/compose/btcpay": transaction.compose_btcpay, + "/v2/addresses/
/compose/burn": transaction.compose_burn, + "/v2/addresses/
/compose/cancel": transaction.compose_cancel, + "/v2/addresses/
/compose/destroy": transaction.compose_destroy, + "/v2/addresses/
/compose/dispenser": transaction.compose_dispenser, + "/v2/addresses/
/compose/dividend": transaction.compose_dividend, + "/v2/addresses/
/compose/issuance": transaction.compose_issuance, + "/v2/addresses/
/compose/mpma": transaction.compose_mpma, + "/v2/addresses/
/compose/order": transaction.compose_order, + "/v2/addresses/
/compose/send": transaction.compose_send, + "/v2/addresses/
/compose/sweep": transaction.compose_sweep, ### /assets ### - "/assets": ledger.get_valid_assets, - "/assets/": ledger.get_asset_info, - "/assets//balances": ledger.get_asset_balances, - "/assets//balances/
": ledger.get_balance_by_address_and_asset, - "/assets//orders": ledger.get_orders_by_asset, - "/assets//credits": ledger.get_credits_by_asset, - "/assets//debits": ledger.get_debits_by_asset, - "/assets//dividends": ledger.get_dividends, - "/assets//issuances": ledger.get_issuances_by_asset, - "/assets//sends": ledger.get_sends_by_asset, - "/assets//dispensers": ledger.get_dispensers_by_asset, - "/assets//dispensers/
": ledger.get_dispensers_by_address_and_asset, - "/assets//holders": ledger.get_asset_holders, + "/v2/assets": ledger.get_valid_assets, + "/v2/assets/": ledger.get_asset_info, + "/v2/assets//balances": ledger.get_asset_balances, + "/v2/assets//balances/
": ledger.get_balance_by_address_and_asset, + "/v2/assets//orders": ledger.get_orders_by_asset, + "/v2/assets//credits": ledger.get_credits_by_asset, + "/v2/assets//debits": ledger.get_debits_by_asset, + "/v2/assets//dividends": ledger.get_dividends, + "/v2/assets//issuances": ledger.get_issuances_by_asset, + "/v2/assets//sends": ledger.get_sends_by_asset, + "/v2/assets//dispensers": ledger.get_dispensers_by_asset, + "/v2/assets//dispensers/
": ledger.get_dispensers_by_address_and_asset, + "/v2/assets//holders": ledger.get_asset_holders, ### /orders ### - "/orders/": ledger.get_order, - "/orders//matches": ledger.get_order_matches_by_order, - "/orders//btcpays": ledger.get_btcpays_by_order, - "/orders//": ledger.get_orders_by_two_assets, + "/v2/orders/": ledger.get_order, + "/v2/orders//matches": ledger.get_order_matches_by_order, + "/v2/orders//btcpays": ledger.get_btcpays_by_order, + "/v2/orders//": ledger.get_orders_by_two_assets, ### /bets ### - "/bets/": ledger.get_bet, - "/bets//matches": ledger.get_bet_matches_by_bet, - "/bets//resolutions": ledger.get_resolutions_by_bet, + "/v2/bets/": ledger.get_bet, + "/v2/bets//matches": ledger.get_bet_matches_by_bet, + "/v2/bets//resolutions": ledger.get_resolutions_by_bet, ### /burns ### - "/burns": ledger.get_all_burns, + "/v2/burns": ledger.get_all_burns, ### /dispensers ### - "/dispensers/": ledger.get_dispenser_info_by_hash, - "/dispensers//dispenses": ledger.get_dispenses_by_dispenser, + "/v2/dispensers/": ledger.get_dispenser_info_by_hash, + "/v2/dispensers//dispenses": ledger.get_dispenses_by_dispenser, ### /events ### - "/events": ledger.get_all_events, - "/events/": ledger.get_event_by_index, - "/events/counts": ledger.get_all_events_counts, - "/events/": ledger.get_events_by_name, + "/v2/events": ledger.get_all_events, + "/v2/events/": ledger.get_event_by_index, + "/v2/events/counts": ledger.get_all_events_counts, + "/v2/events/": ledger.get_events_by_name, ### /healthz ### - "/healthz": util.check_server_health, + "/v2/healthz": util.check_server_health, ### /bitcoin ### - "/bitcoin/addresses/
/transactions": backend.get_transactions_by_address, - "/bitcoin/addresses/
/transactions/oldest": util.get_oldest_transaction_by_address, - "/bitcoin/addresses/
/utxos": backend.get_unspent_txouts, - "/bitcoin/addresses/
/pubkey": util.pubkeyhash_to_pubkey, - "/bitcoin/transactions/": util.get_transaction, - "/bitcoin/estimatesmartfee": backend.fee_per_kb, + "/v2/bitcoin/addresses/
/transactions": backend.get_transactions_by_address, + "/v2/bitcoin/addresses/
/transactions/oldest": util.get_oldest_transaction_by_address, + "/v2/bitcoin/addresses/
/utxos": backend.get_unspent_txouts, + "/v2/bitcoin/addresses/
/pubkey": util.pubkeyhash_to_pubkey, + "/v2/bitcoin/transactions/": util.get_transaction, + "/v2/bitcoin/estimatesmartfee": backend.fee_per_kb, ### /mempool ### - "/mempool/events": ledger.get_all_mempool_events, - "/mempool/events/": ledger.get_mempool_events_by_name, + "/v2/mempool/events": ledger.get_all_mempool_events, + "/v2/mempool/events/": ledger.get_mempool_events_by_name, ### API v1 ### "/v1/": util.redirect_to_api_v1, } diff --git a/counterparty-core/counterpartycore/test/api_v2_test.py b/counterparty-core/counterpartycore/test/api_v2_test.py index 6ca417fca2..c669732594 100644 --- a/counterparty-core/counterpartycore/test/api_v2_test.py +++ b/counterparty-core/counterpartycore/test/api_v2_test.py @@ -53,7 +53,7 @@ def test_api_v2(request): url = url.replace("", bet_hash) url = url.replace("", dispenser_hash) url = url.replace("", tx_hash) - if route.startswith("/events"): + if route.startswith("/v2/events"): url += "?limit=5" print(url) result = requests.get(url) # noqa: S113 @@ -72,7 +72,7 @@ def test_api_v2(request): def test_api_v2_unpack(request, server_db): with open(CURR_DIR + "/fixtures/api_v2_unpack_fixtures.json", "r") as f: datas = json.load(f) - url = f"{API_ROOT}/transactions/unpack" + url = f"{API_ROOT}/v2/transactions/unpack" for data in datas: result = requests.get(url, params={"datahex": data["datahex"]}) # noqa: S113 @@ -83,7 +83,7 @@ def test_api_v2_unpack(request, server_db): @pytest.mark.usefixtures("api_server_v2") def test_new_get_balances_by_address(): alice = ADDR[0] - url = f"{API_ROOT}/addresses/{alice}/balances" + url = f"{API_ROOT}/v2/addresses/{alice}/balances" result = requests.get(url) # noqa: S113 assert result.json()["result"] == [ { @@ -132,7 +132,7 @@ def test_new_get_balances_by_address(): @pytest.mark.usefixtures("api_server_v2") def test_new_get_balances_by_asset(): asset = "XCP" - url = f"{API_ROOT}/assets/{asset}/balances" + url = f"{API_ROOT}/v2/assets/{asset}/balances" result = requests.get(url) # noqa: S113 assert result.json()["result"] == [ { @@ -192,7 +192,7 @@ def test_new_get_balances_by_asset(): @pytest.mark.usefixtures("api_server_v2") def test_new_get_balances_vs_old(): asset = "XCP" - url = f"{API_ROOT}/assets/{asset}/balances" + url = f"{API_ROOT}/v2/assets/{asset}/balances" new_balances = requests.get(url).json()["result"] # noqa: S113 old_balance = util.api( "get_balances", @@ -215,7 +215,7 @@ def test_new_get_balances_vs_old(): @pytest.mark.usefixtures("api_server_v2") def test_new_get_asset_info(): asset = "NODIVISIBLE" - url = f"{API_ROOT}/assets/{asset}" + url = f"{API_ROOT}/v2/assets/{asset}" result = requests.get(url) # noqa: S113 assert result.json()["result"] == { @@ -234,7 +234,7 @@ def test_new_get_asset_info(): @pytest.mark.usefixtures("api_server_v2") def test_new_get_asset_orders(): asset = "XCP" - url = f"{API_ROOT}/assets/{asset}/orders" + url = f"{API_ROOT}/v2/assets/{asset}/orders" result = requests.get(url).json()["result"] # noqa: S113 assert len(result) == 6 assert result[0] == { @@ -261,7 +261,7 @@ def test_new_get_asset_orders(): @pytest.mark.usefixtures("api_server_v2") def test_new_get_order_info(): tx_hash = "1899b2e6ec36ba4bc9d035e6640b0a62b08c3a147c77c89183a77d9ed9081b3a" - url = f"{API_ROOT}/orders/{tx_hash}" + url = f"{API_ROOT}/v2/orders/{tx_hash}" result = requests.get(url).json()["result"] # noqa: S113 assert result[0] == { "tx_index": 11, @@ -287,7 +287,7 @@ def test_new_get_order_info(): @pytest.mark.usefixtures("api_server_v2") def test_new_get_order_matches(): tx_hash = "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498" - url = f"{API_ROOT}/orders/{tx_hash}/matches" + url = f"{API_ROOT}/v2/orders/{tx_hash}/matches" result = requests.get(url).json()["result"] # noqa: S113 assert result[0] == { "id": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498_1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81", diff --git a/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json b/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json index d560b86858..5513a5d225 100644 --- a/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json +++ b/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json @@ -1,5 +1,5 @@ { - "http://api:api@localhost:10009/blocks": { + "http://api:api@localhost:10009/v2/blocks": { "result": [ { "block_index": 310500, @@ -103,7 +103,7 @@ } ] }, - "http://api:api@localhost:10009/blocks/310491": { + "http://api:api@localhost:10009/v2/blocks/310491": { "result": { "block_index": 310491, "block_hash": "811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16", @@ -115,7 +115,7 @@ "messages_hash": "9671cfedb3124b67ed996c547cb26a32e95490009ad56065c79be54a28c45994" } }, - "http://api:api@localhost:10009/blocks/310491/transactions": { + "http://api:api@localhost:10009/v2/blocks/310491/transactions": { "result": [ { "tx_index": 492, @@ -132,7 +132,7 @@ } ] }, - "http://api:api@localhost:10009/blocks/310491/events": { + "http://api:api@localhost:10009/v2/blocks/310491/events": { "result": [ { "event_index": 1183, @@ -221,7 +221,7 @@ } ] }, - "http://api:api@localhost:10009/blocks/310491/events/counts": { + "http://api:api@localhost:10009/v2/blocks/310491/events/counts": { "result": [ { "event": "BLOCK_PARSED", @@ -249,13 +249,13 @@ } ] }, - "http://api:api@localhost:10009/blocks/310491/events/CREDIT": { + "http://api:api@localhost:10009/v2/blocks/310491/events/CREDIT": { "result": [] }, - "http://api:api@localhost:10009/blocks/310491/credits": { + "http://api:api@localhost:10009/v2/blocks/310491/credits": { "result": [] }, - "http://api:api@localhost:10009/blocks/310491/debits": { + "http://api:api@localhost:10009/v2/blocks/310491/debits": { "result": [ { "block_index": 310491, @@ -268,28 +268,28 @@ } ] }, - "http://api:api@localhost:10009/blocks/310491/expirations": { + "http://api:api@localhost:10009/v2/blocks/310491/expirations": { "result": [] }, - "http://api:api@localhost:10009/blocks/310491/cancels": { + "http://api:api@localhost:10009/v2/blocks/310491/cancels": { "result": [] }, - "http://api:api@localhost:10009/blocks/310491/destructions": { + "http://api:api@localhost:10009/v2/blocks/310491/destructions": { "result": [] }, - "http://api:api@localhost:10009/blocks/310491/issuances": { + "http://api:api@localhost:10009/v2/blocks/310491/issuances": { "result": [] }, - "http://api:api@localhost:10009/blocks/310491/sends": { + "http://api:api@localhost:10009/v2/blocks/310491/sends": { "result": [] }, - "http://api:api@localhost:10009/blocks/310491/dispenses": { + "http://api:api@localhost:10009/v2/blocks/310491/dispenses": { "result": [] }, - "http://api:api@localhost:10009/blocks/310491/sweeps": { + "http://api:api@localhost:10009/v2/blocks/310491/sweeps": { "result": [] }, - "http://api:api@localhost:10009/transactions/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { + "http://api:api@localhost:10009/v2/transactions/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { "result": { "tx_index": 492, "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", @@ -317,7 +317,7 @@ } } }, - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/balances": { + "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/balances": { "result": [ { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", @@ -361,14 +361,14 @@ } ] }, - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/balances/NODIVISIBLE": { + "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/balances/NODIVISIBLE": { "result": { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", "asset": "NODIVISIBLE", "quantity": 985 } }, - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/credits": { + "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/credits": { "result": [ { "block_index": 310000, @@ -480,7 +480,7 @@ } ] }, - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/debits": { + "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/debits": { "result": [ { "block_index": 310001, @@ -673,7 +673,7 @@ } ] }, - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/bets": { + "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/bets": { "result": [ { "tx_index": 102, @@ -696,7 +696,7 @@ } ] }, - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/broadcasts": { + "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/broadcasts": { "result": [ { "tx_index": 103, @@ -724,7 +724,7 @@ } ] }, - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/burns": { + "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/burns": { "result": [ { "tx_index": 1, @@ -737,7 +737,7 @@ } ] }, - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sends": { + "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sends": { "result": [ { "tx_index": 8, @@ -837,7 +837,7 @@ } ] }, - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/receives": { + "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/receives": { "result": [ { "tx_index": 483, @@ -853,7 +853,7 @@ } ] }, - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sends/NODIVISIBLE": { + "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sends/NODIVISIBLE": { "result": [ { "tx_index": 15, @@ -881,19 +881,19 @@ } ] }, - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/receives/NODIVISIBLE": { + "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/receives/NODIVISIBLE": { "result": [] }, - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/dispensers": { + "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/dispensers": { "result": [] }, - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/dispensers/NODIVISIBLE": { + "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/dispensers/NODIVISIBLE": { "result": [] }, - "http://api:api@localhost:10009/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sweeps": { + "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sweeps": { "result": [] }, - "http://api:api@localhost:10009/assets": { + "http://api:api@localhost:10009/v2/assets": { "result": [ { "asset": "A95428956661682277", @@ -937,7 +937,7 @@ } ] }, - "http://api:api@localhost:10009/assets/NODIVISIBLE": { + "http://api:api@localhost:10009/v2/assets/NODIVISIBLE": { "result": { "asset": "NODIVISIBLE", "asset_longname": null, @@ -950,7 +950,7 @@ "holder_count": 3 } }, - "http://api:api@localhost:10009/assets/NODIVISIBLE/balances": { + "http://api:api@localhost:10009/v2/assets/NODIVISIBLE/balances": { "result": [ { "address": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", @@ -969,17 +969,17 @@ } ] }, - "http://api:api@localhost:10009/assets/NODIVISIBLE/balances/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc": { + "http://api:api@localhost:10009/v2/assets/NODIVISIBLE/balances/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc": { "result": { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", "asset": "NODIVISIBLE", "quantity": 985 } }, - "http://api:api@localhost:10009/assets/NODIVISIBLE/orders": { + "http://api:api@localhost:10009/v2/assets/NODIVISIBLE/orders": { "result": [] }, - "http://api:api@localhost:10009/assets/NODIVISIBLE/credits": { + "http://api:api@localhost:10009/v2/assets/NODIVISIBLE/credits": { "result": [ { "block_index": 310002, @@ -1010,7 +1010,7 @@ } ] }, - "http://api:api@localhost:10009/assets/NODIVISIBLE/debits": { + "http://api:api@localhost:10009/v2/assets/NODIVISIBLE/debits": { "result": [ { "block_index": 310014, @@ -1032,10 +1032,10 @@ } ] }, - "http://api:api@localhost:10009/assets/NODIVISIBLE/dividends": { + "http://api:api@localhost:10009/v2/assets/NODIVISIBLE/dividends": { "result": [] }, - "http://api:api@localhost:10009/assets/NODIVISIBLE/issuances": { + "http://api:api@localhost:10009/v2/assets/NODIVISIBLE/issuances": { "result": [ { "tx_index": 3, @@ -1060,7 +1060,7 @@ } ] }, - "http://api:api@localhost:10009/assets/NODIVISIBLE/sends": { + "http://api:api@localhost:10009/v2/assets/NODIVISIBLE/sends": { "result": [ { "tx_index": 15, @@ -1088,13 +1088,13 @@ } ] }, - "http://api:api@localhost:10009/assets/NODIVISIBLE/dispensers": { + "http://api:api@localhost:10009/v2/assets/NODIVISIBLE/dispensers": { "result": [] }, - "http://api:api@localhost:10009/assets/NODIVISIBLE/dispensers/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc": { + "http://api:api@localhost:10009/v2/assets/NODIVISIBLE/dispensers/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc": { "result": [] }, - "http://api:api@localhost:10009/assets/NODIVISIBLE/holders": { + "http://api:api@localhost:10009/v2/assets/NODIVISIBLE/holders": { "result": [ { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", @@ -1113,7 +1113,7 @@ } ] }, - "http://api:api@localhost:10009/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { + "http://api:api@localhost:10009/v2/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { "result": [ { "tx_index": 492, @@ -1136,7 +1136,7 @@ } ] }, - "http://api:api@localhost:10009/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/matches": { + "http://api:api@localhost:10009/v2/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/matches": { "result": [ { "id": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498_1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81", @@ -1161,22 +1161,22 @@ } ] }, - "http://api:api@localhost:10009/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/btcpays": { + "http://api:api@localhost:10009/v2/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/btcpays": { "result": [] }, - "http://api:api@localhost:10009/orders/NODIVISIBLE/XCP": { + "http://api:api@localhost:10009/v2/orders/NODIVISIBLE/XCP": { "result": [] }, - "http://api:api@localhost:10009/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42": { + "http://api:api@localhost:10009/v2/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42": { "result": [] }, - "http://api:api@localhost:10009/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42/matches": { + "http://api:api@localhost:10009/v2/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42/matches": { "result": [] }, - "http://api:api@localhost:10009/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42/resolutions": { + "http://api:api@localhost:10009/v2/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42/resolutions": { "result": [] }, - "http://api:api@localhost:10009/burns": { + "http://api:api@localhost:10009/v2/burns": { "result": [ { "tx_index": 1, @@ -1252,13 +1252,13 @@ } ] }, - "http://api:api@localhost:10009/dispensers/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { + "http://api:api@localhost:10009/v2/dispensers/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { "result": [] }, - "http://api:api@localhost:10009/dispensers/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/dispenses": { + "http://api:api@localhost:10009/v2/dispensers/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/dispenses": { "result": [] }, - "http://api:api@localhost:10009/events?limit=5": { + "http://api:api@localhost:10009/v2/events?limit=5": { "result": [ { "event_index": 1237, @@ -1328,7 +1328,7 @@ } ] }, - "http://api:api@localhost:10009/events/10?limit=5": { + "http://api:api@localhost:10009/v2/events/10?limit=5": { "result": [ { "event_index": 10, @@ -1344,7 +1344,7 @@ } ] }, - "http://api:api@localhost:10009/events/counts?limit=5": { + "http://api:api@localhost:10009/v2/events/counts?limit=5": { "result": [ { "event": "ASSET_CREATION", @@ -1432,7 +1432,7 @@ } ] }, - "http://api:api@localhost:10009/events/CREDIT?limit=5": { + "http://api:api@localhost:10009/v2/events/CREDIT?limit=5": { "result": [ { "event_index": 1231, diff --git a/counterparty-core/tools/apicache.json b/counterparty-core/tools/apicache.json index 5c9134cd5e..2479f25170 100644 --- a/counterparty-core/tools/apicache.json +++ b/counterparty-core/tools/apicache.json @@ -35,7 +35,7 @@ } ] }, - "/blocks//sweeps": { + "/v2/blocks//sweeps": { "result": [ { "tx_index": 2720536, @@ -61,7 +61,7 @@ } ] }, - "/transactions/info": { + "/v2/transactions/info": { "result": { "source": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", "destination": "", @@ -88,7 +88,7 @@ } } }, - "/transactions/unpack": { + "/v2/transactions/unpack": { "result": { "message_type": "issuance", "message_type_id": 22, @@ -108,7 +108,7 @@ } } }, - "/addresses/
/sweeps": { + "/v2/addresses/
/sweeps": { "result": [ { "tx_index": 2720537, @@ -123,7 +123,7 @@ } ] }, - "/addresses/
/compose/btcpay": { + "/v2/addresses/
/compose/btcpay": { "result": { "rawtransaction": "0200000000010161101e1990879ee64168cce92c9caf338bb571e9cb246b1c2ab87124b95091900200000016001482f2ccc569325050e36c13b55a4065113d985066ffffffff0383c3040000000000160014a9943f67bcd30331d5a4ec6d902cbe03789a1b9700000000000000004b6a49aae396d448ed266a7785be1f6fcfa38dbe3e6e043e3d67691f678d6aa3b30e423f66ffad71eaf3231ef8f05dd5cc2f5b1ea14d33274b9cddacca5bd816a1ce6d5b4d498eb66a981db7add758000000000016001482f2ccc569325050e36c13b55a4065113d98506602000000000000", "params": { @@ -133,7 +133,7 @@ "name": "btcpay" } }, - "/assets//holders": { + "/v2/assets//holders": { "result": [ { "address": "1E6tyJ2zCyX74XgEK8t9iNMjxjNVLCGR1u", @@ -177,7 +177,7 @@ } ] }, - "/orders//btcpays": { + "/v2/orders//btcpays": { "result": [ { "tx_index": 2719343, @@ -191,7 +191,7 @@ } ] }, - "/bets/": { + "/v2/bets/": { "result": [ { "tx_index": 15106, @@ -214,7 +214,7 @@ } ] }, - "/bets//matches": { + "/v2/bets//matches": { "result": [ { "id": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed_cb5f888c299a50967d523513daed71636d927e6ef3dbda85feb11ff112ae4330", @@ -244,7 +244,7 @@ } ] }, - "/bets//resolutions": { + "/v2/bets//resolutions": { "result": [ { "bet_match_id": "36bbbb7dbd85054dac140a8ad8204eda2ee859545528bd2a9da69ad77c277ace_d70ee4e44f02fe6258ee0c267f33f304a0fc61d4ce424852f58c28967dc1924f", @@ -259,7 +259,7 @@ } ] }, - "/burns": { + "/v2/burns": { "result": [ { "tx_index": 10, @@ -308,7 +308,7 @@ } ] }, - "/events/counts": { + "/v2/events/counts": { "result": [ { "event": "ASSET_CREATION", @@ -500,7 +500,7 @@ } ] }, - "/addresses/
/compose/broadcast": { + "/v2/addresses/
/compose/broadcast": { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0200000000000000002b6a290d1e454cefefcbe17b1100cb21d3398ec45d2594e5d1d822df41d03a332741261ce2f9aee7827cd91c340c0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -513,7 +513,7 @@ "name": "broadcast" } }, - "/addresses/
/compose/bet": { + "/v2/addresses/
/compose/bet": { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0322020000000000001976a914bce6191bf2fd5981313cae869e9fafe164f7dbaf88ac0000000000000000316a2f0d1e454cefefcbe14dffa4c01ecd608ec45d2594e5d27c699f4ef2725648c509bf828ec195ee18f83e052061236deff2db0306000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -530,7 +530,7 @@ "name": "bet" } }, - "/addresses/
/compose/burn": { + "/v2/addresses/
/compose/burn": { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff02e8030000000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ace61b0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -541,7 +541,7 @@ "name": "burn" } }, - "/addresses/
/compose/cancel": { + "/v2/addresses/
/compose/cancel": { "result": { "rawtransaction": "01000000014709bd6af5d4d7f518f80539d4fe9acd5220a520a7b4287416a7379af9e66154020000001976a91432dff6deb7ca3bbc14f7037fa6ef8a8cf8e39fb988acffffffff0200000000000000002b6a292f3720d2b8ae7343c6d0456802c531e1216f466ceb12b96c6fbe417a97291a0660e51fc47fcc1ee1a878667900000000001976a91432dff6deb7ca3bbc14f7037fa6ef8a8cf8e39fb988ac00000000", "params": { @@ -551,7 +551,7 @@ "name": "cancel" } }, - "/addresses/
/compose/destroy": { + "/v2/addresses/
/compose/destroy": { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000226a200d1e454cefefcbe10bffa672ce93608ec55d2594e5d1946a776c900731380c6b94160406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -563,7 +563,7 @@ "name": "destroy" } }, - "/addresses/
/compose/dispenser": { + "/v2/addresses/
/compose/dispenser": { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0200000000000000002c6a2a0d1e454cefefcbe169ffa672ce93608ec55d2594e5d1946a774ef272564b2d4ad8c28ec195ee18f85a160c0b0406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -579,7 +579,7 @@ "name": "dispenser" } }, - "/addresses/
/compose/dividend": { + "/v2/addresses/
/compose/dividend": { "result": { "rawtransaction": "01000000010af94458ae5aa794c49cd27f7b800a7c68c8dd4f59ff66c99db4e9e353c06d93010000001976a914a9055398b92818794b38b15794096f752167e25f88acffffffff020000000000000000236a21068a00268d252c3a8ed0bddb5ef79f823894aa7de1e196c005510f4d787c936a979b230000000000001976a914a9055398b92818794b38b15794096f752167e25f88ac00000000", "params": { @@ -591,7 +591,7 @@ "name": "dividend" } }, - "/addresses/
/compose/issuance": { + "/v2/addresses/
/compose/issuance": { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff0322020000000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac0000000000000000236a210d1e454cefefcbe173ffa672cf3a36751b5d2594e5d1946a774ff272960578057c17ec0306000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -607,7 +607,7 @@ "name": "issuance" } }, - "/addresses/
/compose/mpma": { + "/v2/addresses/
/compose/mpma": { "result": { "rawtransaction": "0100000001fc9b7b3a0552bdfc3c62096e9d7669fb72d5482c7b4f9618138fdffdc831d60b000000001976a914a39dbfab6f1da182af53a4d14799ee545a6176be88acffffffff04e80300000000000069512103ce014780415d0eafbdadfacfa0cf2604a005a87157042f277627c952eedcbb1f2103abf2b72459ee70e6240a7b2ade1a6fa41c7f38cc1db5e63c6f92c01b859017ee2102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53aee80300000000000069512102ce014780415d0eafbd2fcbf00e308d420b59df89ebba83369fea96a9a06fcf562102373ec5e1389ccadf0a972ec451f8aea015104ded7a57b936d374d0ecfe8067412102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53aee80300000000000069512103d0014780415d0eafbd76dacca0b613dda4b8f37e3015031f11220ac5cf43ef4e21034051b78cdcbde85f0c120261e6ab383015104ded7a57b93cd374d900776d4e132102e849a65234e77627daab722dd75aee7a8f35981ec1dbd5ec5ee7220075b2cd2d53ae22fd0200000000001976a914a39dbfab6f1da182af53a4d14799ee545a6176be88ac00000000", "params": { @@ -635,7 +635,7 @@ "name": "mpma" } }, - "/addresses/
/compose/order": { + "/v2/addresses/
/compose/order": { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000356a330d1e454cefefcbe16fffa672ce93608ec55d2594e5d1946a774ef2724a2a4f457bc28ec195ee18fbd616f461236d8be718616dac000406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -650,7 +650,7 @@ "name": "order" } }, - "/addresses/
/compose/send": { + "/v2/addresses/
/compose/send": { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000306a2e0d1e454cefefcbe167ffa672ce93608ec55d2594e5d1946a774e4e944f50dfb46943bffd3b68866791f7f496f8c270060406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -665,7 +665,7 @@ "name": "send" } }, - "/addresses/
/compose/sweep": { + "/v2/addresses/
/compose/sweep": { "result": { "rawtransaction": "01000000017004c1186a4a6a11708e1739839488180dbb6dbf4a9bf52228faa5b3173cdb05000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188acffffffff020000000000000000236a210d1e454cefefcbe161ff1a94d78892739ddc14a84b570af630af96858de42ab6cf6e150406000000001976a914818895f3dc2c178629d3d2d8fa3ec4a3f817982188ac00000000", "params": { @@ -677,7 +677,7 @@ "name": "sweep" } }, - "/bitcoin/addresses/
/transactions": { + "/v2/bitcoin/addresses/
/transactions": { "result": [ { "tx_hash": "eae4f1dba4d75bda9dd0de12f69a980be267bbc16b7a280a2a4b40c4b3bbb70a" @@ -717,13 +717,13 @@ } ] }, - "/bitcoin/addresses/
/transactions/oldest": { + "/v2/bitcoin/addresses/
/transactions/oldest": { "result": { "block_index": 833187, "tx_hash": "2c8bc3eede9ec60d26c6fd7f44829adc64da593552044a28c673022220f560c3" } }, - "/bitcoin/addresses/
/utxos": { + "/v2/bitcoin/addresses/
/utxos": { "result": [ { "vout": 6, @@ -807,10 +807,10 @@ } ] }, - "/bitcoin/addresses/
/pubkey": { + "/v2/bitcoin/addresses/
/pubkey": { "result": "0388ef0905568d425f1ffd4031d93dda4ef0e220c9b5fc4a6cbaf11544c4a5ca49" }, - "/bitcoin/transactions/": { + "/v2/bitcoin/transactions/": { "result": { "txid": "3190047bf2320bdcd0fade655ae49be309519d151330aa478573815229cc0018", "hash": "417c24d7a5539bc5b8496e26528382ac297a85a1c6b891b220f72712405ec300", @@ -854,21 +854,21 @@ "blocktime": 1713951767 } }, - "/healthz": { + "/v2/healthz": { "result": { "status": "Healthy" } }, - "/bitcoin/estimatesmartfee": { + "/v2/bitcoin/estimatesmartfee": { "result": 295443 }, - "/mempool/events": { + "/v2/mempool/events": { "result": [] }, - "/mempool/events/": { + "/v2/mempool/events/": { "result": [] }, - "/blocks": { + "/v2/blocks": { "result": [ { "block_index": 840000, @@ -892,7 +892,7 @@ } ] }, - "/blocks/": { + "/v2/blocks/": { "result": { "block_index": 840464, "block_hash": "00000000000000000001093d4d6b21b80800fff6e5ea15cce6d65066f482cce9", @@ -904,7 +904,7 @@ "messages_hash": "801d961c45a257f85ef0f10a6a8fdf048a520ae4861c0903f26365b3eaaaf540" } }, - "/blocks//transactions": { + "/v2/blocks//transactions": { "result": [ { "tx_index": 2726605, @@ -921,7 +921,7 @@ } ] }, - "/blocks//events": { + "/v2/blocks//events": { "result": [ { "event_index": 14194760, @@ -1054,7 +1054,7 @@ } ] }, - "/blocks//events/": { + "/v2/blocks//events/": { "result": [ { "event_index": 14194758, @@ -1079,7 +1079,7 @@ } ] }, - "/blocks//credits": { + "/v2/blocks//credits": { "result": [ { "block_index": 840464, @@ -1100,7 +1100,7 @@ } ] }, - "/blocks//debits": { + "/v2/blocks//debits": { "result": [ { "block_index": 840464, @@ -1120,7 +1120,7 @@ } ] }, - "/blocks//expirations": { + "/v2/blocks//expirations": { "result": [ { "type": "order", @@ -1132,7 +1132,7 @@ } ] }, - "/blocks//cancels": { + "/v2/blocks//cancels": { "result": [ { "tx_index": 2725738, @@ -1152,7 +1152,7 @@ } ] }, - "/blocks//destructions": { + "/v2/blocks//destructions": { "result": [ { "tx_index": 2726496, @@ -1174,7 +1174,7 @@ } ] }, - "/blocks//issuances": { + "/v2/blocks//issuances": { "result": [ { "tx_index": 2726605, @@ -1199,7 +1199,7 @@ } ] }, - "/blocks//sends": { + "/v2/blocks//sends": { "result": [ { "tx_index": 2726604, @@ -1223,7 +1223,7 @@ } ] }, - "/blocks//dispenses": { + "/v2/blocks//dispenses": { "result": [ { "tx_index": 2726580, @@ -1262,7 +1262,7 @@ } ] }, - "/transactions/": { + "/v2/transactions/": { "result": { "tx_index": 2726605, "tx_hash": "876a6cfbd4aa22ba4fa85c2e1953a1c66649468a43a961ad16ea4d5329e3e4c5", @@ -1295,7 +1295,7 @@ } } }, - "/addresses/
/balances": { + "/v2/addresses/
/balances": { "result": [ { "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", @@ -1311,7 +1311,7 @@ } ] }, - "/addresses/
/balances/": { + "/v2/addresses/
/balances/": { "result": { "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", "asset": "XCP", @@ -1325,7 +1325,7 @@ "quantity_normalized": "1042" } }, - "/addresses/
/credits": { + "/v2/addresses/
/credits": { "result": [ { "block_index": 830981, @@ -1345,7 +1345,7 @@ } ] }, - "/addresses/
/debits": { + "/v2/addresses/
/debits": { "result": [ { "block_index": 836949, @@ -1381,7 +1381,7 @@ } ] }, - "/addresses/
/bets": { + "/v2/addresses/
/bets": { "result": [ { "tx_index": 15106, @@ -1423,7 +1423,7 @@ } ] }, - "/addresses/
/broadcasts": { + "/v2/addresses/
/broadcasts": { "result": [ { "tx_index": 15055, @@ -1451,7 +1451,7 @@ } ] }, - "/addresses/
/burns": { + "/v2/addresses/
/burns": { "result": [ { "tx_index": 3070, @@ -1464,7 +1464,7 @@ } ] }, - "/addresses/
/sends": { + "/v2/addresses/
/sends": { "result": [ { "tx_index": 163106, @@ -1487,7 +1487,7 @@ } ] }, - "/addresses/
/receives": { + "/v2/addresses/
/receives": { "result": [ { "tx_index": 2677412, @@ -1510,7 +1510,7 @@ } ] }, - "/addresses/
/sends/": { + "/v2/addresses/
/sends/": { "result": [ { "tx_index": 163106, @@ -1533,7 +1533,7 @@ } ] }, - "/addresses/
/receives/": { + "/v2/addresses/
/receives/": { "result": [ { "tx_index": 2677412, @@ -1556,7 +1556,7 @@ } ] }, - "/addresses/
/dispensers": { + "/v2/addresses/
/dispensers": { "result": [ { "tx_index": 2726460, @@ -1586,7 +1586,7 @@ } ] }, - "/addresses/
/dispensers/": { + "/v2/addresses/
/dispensers/": { "result": [ { "tx_index": 2726460, @@ -1616,7 +1616,7 @@ } ] }, - "/assets": { + "/v2/assets": { "result": [ { "asset": "A100000000000000000", @@ -1640,7 +1640,7 @@ } ] }, - "/assets/": { + "/v2/assets/": { "result": { "asset": "UNNEGOTIABLE", "asset_longname": null, @@ -1653,7 +1653,7 @@ "holder_count": 6 } }, - "/assets//balances": { + "/v2/assets//balances": { "result": [ { "address": "178etygrwEeeyQso9we85rUqYZbkiqzL4A", @@ -1722,7 +1722,7 @@ } ] }, - "/assets//balances/
": { + "/v2/assets//balances/
": { "result": { "address": "1C3uGcoSGzKVgFqyZ3kM2DBq9CYttTMAVs", "asset": "XCP", @@ -1736,7 +1736,7 @@ "quantity_normalized": "1042" } }, - "/assets//orders": { + "/v2/assets//orders": { "result": [ { "tx_index": 825373, @@ -2143,7 +2143,7 @@ } ] }, - "/assets//credits": { + "/v2/assets//credits": { "result": [ { "block_index": 840464, @@ -2232,7 +2232,7 @@ } ] }, - "/assets//debits": { + "/v2/assets//debits": { "result": [ { "block_index": 280091, @@ -2316,7 +2316,7 @@ } ] }, - "/assets//dividends": { + "/v2/assets//dividends": { "result": [ { "tx_index": 1914456, @@ -2536,7 +2536,7 @@ } ] }, - "/assets//issuances": { + "/v2/assets//issuances": { "result": [ { "tx_index": 2726605, @@ -2624,7 +2624,7 @@ } ] }, - "/assets//sends": { + "/v2/assets//sends": { "result": [ { "tx_index": 729, @@ -2723,7 +2723,7 @@ } ] }, - "/assets//dispensers": { + "/v2/assets//dispensers": { "result": [ { "tx_index": 2726460, @@ -2753,7 +2753,7 @@ } ] }, - "/assets//dispensers/
": { + "/v2/assets//dispensers/
": { "result": [ { "tx_index": 2726460, @@ -2783,7 +2783,7 @@ } ] }, - "/orders/": { + "/v2/orders/": { "result": [ { "tx_index": 2724132, @@ -2823,7 +2823,7 @@ } ] }, - "/orders//matches": { + "/v2/orders//matches": { "result": [ { "id": "23f68fdf934e81144cca31ce8ef69062d553c521321a039166e7ba99aede0776_5461e6f99a37a7167428b4a720a52052cd9afed43905f818f5d7d4f56abd0947", @@ -2848,7 +2848,7 @@ } ] }, - "/orders//btcpays": { + "/v2/orders//btcpays": { "result": [ { "tx_index": 2719343, @@ -2862,7 +2862,7 @@ } ] }, - "/orders//": { + "/v2/orders//": { "result": [ { "tx_index": 2225134, @@ -3022,7 +3022,7 @@ } ] }, - "/bets/": { + "/v2/bets/": { "result": [ { "tx_index": 15106, @@ -3045,7 +3045,7 @@ } ] }, - "/bets//matches": { + "/v2/bets//matches": { "result": [ { "id": "5d097b4729cb74d927b4458d365beb811a26fcee7f8712f049ecbe780eb496ed_cb5f888c299a50967d523513daed71636d927e6ef3dbda85feb11ff112ae4330", @@ -3075,7 +3075,7 @@ } ] }, - "/bets//resolutions": { + "/v2/bets//resolutions": { "result": [ { "bet_match_id": "36bbbb7dbd85054dac140a8ad8204eda2ee859545528bd2a9da69ad77c277ace_d70ee4e44f02fe6258ee0c267f33f304a0fc61d4ce424852f58c28967dc1924f", @@ -3090,7 +3090,7 @@ } ] }, - "/dispensers/": { + "/v2/dispensers/": { "result": [ { "tx_index": 2536311, @@ -3120,7 +3120,7 @@ } ] }, - "/dispensers//dispenses": { + "/v2/dispensers//dispenses": { "result": [ { "tx_index": 2610745, @@ -3194,7 +3194,7 @@ } ] }, - "/events": { + "/v2/events": { "result": [ { "event_index": 10665092, @@ -3291,7 +3291,7 @@ } ] }, - "/events/": { + "/v2/events/": { "result": [ { "event_index": 10665092, @@ -3306,7 +3306,7 @@ } ] }, - "/events/": { + "/v2/events/": { "result": [ { "event_index": 10665090, @@ -3424,6 +3424,42 @@ } ] }, + "/v2/blocks//events/counts": { + "result": [ + { + "event": "ASSET_CREATION", + "event_count": 1 + }, + { + "event": "ASSET_ISSUANCE", + "event_count": 1 + }, + { + "event": "BLOCK_PARSED", + "event_count": 1 + }, + { + "event": "CREDIT", + "event_count": 1 + }, + { + "event": "DEBIT", + "event_count": 1 + }, + { + "event": "NEW_BLOCK", + "event_count": 1 + }, + { + "event": "NEW_TRANSACTION", + "event_count": 1 + }, + { + "event": "TRANSACTION_PARSED", + "event_count": 1 + } + ] + }, "/v1/": { "result": { "result": "Healthy", diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index 88be11efe4..93b3489b75 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -185,7 +185,7 @@ def gen_groups_toc(): current_group = None for path, route in server.routes.ROUTES.items(): - route_group = path.split("/")[1] + route_group = path.split("/")[2] if "compose" in path: route_group = "Compose" if route_group != current_group: diff --git a/dredd.yml b/dredd.yml index 02315fb642..61612fdebe 100644 --- a/dredd.yml +++ b/dredd.yml @@ -1,5 +1,5 @@ blueprint: apiary.apib -endpoint: http://127.0.0.1:4200 +endpoint: http://127.0.0.1:4100 loglevel: error only: - Blocks > Get Blocks > Get Blocks From 1313349d7a193a46144026e9bed0eae19b673530 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 6 May 2024 14:27:39 +0200 Subject: [PATCH 262/280] Add legacy aliases for API v1 --- apiary.apib | 81 ++++++++++++++++++- .../counterpartycore/lib/api/api_server.py | 2 +- .../counterpartycore/lib/api/routes.py | 4 + .../counterpartycore/lib/api/util.py | 2 +- counterparty-core/tools/apicache.json | 24 ++++++ counterparty-core/tools/genapidoc.py | 6 +- dredd.yml | 7 +- 7 files changed, 120 insertions(+), 6 deletions(-) diff --git a/apiary.apib b/apiary.apib index c268512aab..2d6db40ee7 100644 --- a/apiary.apib +++ b/apiary.apib @@ -5126,14 +5126,91 @@ Returns the mempool events filtered by event name } ``` -## Group +## Group V1 + +### Redirect To Api V1 [GET /{?subpath}] + +Redirect to the API v1. + ++ Parameters + + subpath: `healthz` (str, optional) - The path to redirect to + + Default: `` + ++ Response 200 (application/json) + + ``` + { + "result": { + "result": "Healthy", + "success": true + } + } + ``` ### Redirect To Api V1 [GET /v1/{subpath}] Redirect to the API v1. + Parameters - + subpath: `healthz` (str, required) - The path to redirect to + + subpath: `healthz` (str, optional) - The path to redirect to + + Default: `` + ++ Response 200 (application/json) + + ``` + { + "result": { + "result": "Healthy", + "success": true + } + } + ``` + +### Redirect To Api V1 [GET /api/{subpath}] + +Redirect to the API v1. + ++ Parameters + + subpath: `healthz` (str, optional) - The path to redirect to + + Default: `` + ++ Response 200 (application/json) + + ``` + { + "result": { + "result": "Healthy", + "success": true + } + } + ``` + +### Redirect To Api V1 [GET /rpc/{subpath}] + +Redirect to the API v1. + ++ Parameters + + subpath: `healthz` (str, optional) - The path to redirect to + + Default: `` + ++ Response 200 (application/json) + + ``` + { + "result": { + "result": "Healthy", + "success": true + } + } + ``` + +### Redirect To Api V1 [GET /{subpath}] + +Redirect to the API v1. + ++ Parameters + + subpath: `healthz` (str, optional) - The path to redirect to + + Default: `` + Response 200 (application/json) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 06811e24c6..01207e943a 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -280,7 +280,7 @@ def run_api_server(args): app.add_url_rule("/v2/", view_func=handle_route) for path in ROUTES: methods = ["GET"] - if path == "/v1/": + if not path.startswith("/v2/"): methods = ["GET", "POST"] app.add_url_rule(path, view_func=handle_route, methods=methods) # run the scheduler to refresh the backend height diff --git a/counterparty-core/counterpartycore/lib/api/routes.py b/counterparty-core/counterpartycore/lib/api/routes.py index 716afeb5c6..d51ff4e236 100644 --- a/counterparty-core/counterpartycore/lib/api/routes.py +++ b/counterparty-core/counterpartycore/lib/api/routes.py @@ -103,6 +103,10 @@ "/v2/mempool/events": ledger.get_all_mempool_events, "/v2/mempool/events/": ledger.get_mempool_events_by_name, ### API v1 ### + "/": util.redirect_to_api_v1, "/v1/": util.redirect_to_api_v1, + "/api/": util.redirect_to_api_v1, + "/rpc/": util.redirect_to_api_v1, + "/": util.redirect_to_api_v1, } ) diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index 7b42a3c45f..a0999cab12 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -381,7 +381,7 @@ def inject_dispensers(db, result): return result -def redirect_to_api_v1(subpath: str): +def redirect_to_api_v1(subpath: str = ""): """ Redirect to the API v1. :param subpath: The path to redirect to (e.g. healthz) diff --git a/counterparty-core/tools/apicache.json b/counterparty-core/tools/apicache.json index 2479f25170..e8eb7342d3 100644 --- a/counterparty-core/tools/apicache.json +++ b/counterparty-core/tools/apicache.json @@ -3465,5 +3465,29 @@ "result": "Healthy", "success": true } + }, + "/api/": { + "result": { + "result": "Healthy", + "success": true + } + }, + "/rpc/": { + "result": { + "result": "Healthy", + "success": true + } + }, + "/": { + "result": { + "result": "Healthy", + "success": true + } + }, + "/": { + "result": { + "result": "Healthy", + "success": true + } } } \ No newline at end of file diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index 93b3489b75..a4cd04e038 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -185,7 +185,11 @@ def gen_groups_toc(): current_group = None for path, route in server.routes.ROUTES.items(): - route_group = path.split("/")[2] + path_parts = path.split("/") + if path_parts[1] == "v2": + route_group = path.split("/")[2] + else: + route_group = "v1" if "compose" in path: route_group = "Compose" if route_group != current_group: diff --git a/dredd.yml b/dredd.yml index 61612fdebe..4ba1ed0488 100644 --- a/dredd.yml +++ b/dredd.yml @@ -1,5 +1,5 @@ blueprint: apiary.apib -endpoint: http://127.0.0.1:4100 +endpoint: http://127.0.0.1:4200 loglevel: error only: - Blocks > Get Blocks > Get Blocks @@ -60,8 +60,13 @@ only: - Dispensers > Get Dispenses By Dispenser > Get Dispenses By Dispenser - Events > Get All Events > Get All Events - Events > Get Event By Index > Get Event By Index +- Events > Get All Events Counts > Get All Events Counts - Events > Get Events By Name > Get Events By Name - Z-pages > Check Server Health > Check Server Health - V1 > Redirect To Api V1 > Redirect To Api V1 +- V1 > Redirect To Api V1 > Redirect To Api V1 +- V1 > Redirect To Api V1 > Redirect To Api V1 +- V1 > Redirect To Api V1 > Redirect To Api V1 +- V1 > Redirect To Api V1 > Redirect To Api V1 path: [] user: api:api From 882ab16f37b1599f42aea32873efc33c68933fd0 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 6 May 2024 14:39:20 +0200 Subject: [PATCH 263/280] udpate ports --- .github/workflows/test_compose.sh | 8 ++++---- counterparty-core/counterpartycore/lib/api/util.py | 2 +- counterparty-core/counterpartycore/lib/config.py | 12 ++++++------ 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/test_compose.sh b/.github/workflows/test_compose.sh index 9396875480..13b7151d60 100644 --- a/.github/workflows/test_compose.sh +++ b/.github/workflows/test_compose.sh @@ -49,7 +49,7 @@ done # check running info with API v1 mainnet -response_v1_mainnet=$(curl -X POST http://127.0.0.1:4000/v1/ \ +response_v1_mainnet=$(curl -X POST http://127.0.0.1:4100/v1/ \ --user rpc:rpc \ -H 'Content-Type: application/json; charset=UTF-8'\ -H 'Accept: application/json, text/javascript' \ @@ -62,7 +62,7 @@ if [ "$response_v1_mainnet" -ne 200 ]; then fi # check running info with API v1 testnet -response_v1_testnet=$(curl -X POST http://127.0.0.1:14000/v1/ \ +response_v1_testnet=$(curl -X POST http://127.0.0.1:14100/v1/ \ --user rpc:rpc \ -H 'Content-Type: application/json; charset=UTF-8'\ -H 'Accept: application/json, text/javascript' \ @@ -75,7 +75,7 @@ if [ "$response_v1_testnet" -ne 200 ]; then fi # check running info with API v2 mainnet -response_v2_mainnet=$(curl http://api:api@127.0.0.1:4100/v2/ \ +response_v2_mainnet=$(curl http://api:api@127.0.0.1:4000/v2/ \ --write-out '%{http_code}' --silent --output /dev/null) if [ "$response_v2_mainnet" -ne 200 ]; then @@ -84,7 +84,7 @@ if [ "$response_v2_mainnet" -ne 200 ]; then fi # check running info with API v2 testnet -response_v2_testnet=$(curl http://api:api@127.0.0.1:14100/v2/ \ +response_v2_testnet=$(curl http://api:api@127.0.0.1:14000/v2/ \ --write-out '%{http_code}' --silent --output /dev/null) if [ "$response_v2_mainnet" -ne 200 ]; then diff --git a/counterparty-core/counterpartycore/lib/api/util.py b/counterparty-core/counterpartycore/lib/api/util.py index a0999cab12..5f0780db0c 100644 --- a/counterparty-core/counterpartycore/lib/api/util.py +++ b/counterparty-core/counterpartycore/lib/api/util.py @@ -390,7 +390,7 @@ def redirect_to_api_v1(subpath: str = ""): "headers": flask.request.headers, "auth": (config.RPC_USER, config.RPC_PASSWORD), } - url = f"http://localhost:4000/{subpath}" + url = f"http://localhost:{config.RPC_PORT}/{subpath}" if flask.request.query_string: url += f"?{flask.request.query_string}" request_function = getattr(requests, flask.request.method.lower()) diff --git a/counterparty-core/counterpartycore/lib/config.py b/counterparty-core/counterpartycore/lib/config.py index 532660dc7d..28a1182ecd 100644 --- a/counterparty-core/counterpartycore/lib/config.py +++ b/counterparty-core/counterpartycore/lib/config.py @@ -51,13 +51,13 @@ FULL_APP_NAME = "Counterparty Core" LOGGER_NAME = APP_NAME -DEFAULT_API_PORT_REGTEST = 24100 -DEFAULT_API_PORT_TESTNET = 14100 -DEFAULT_API_PORT = 4100 +DEFAULT_API_PORT_REGTEST = 24000 +DEFAULT_API_PORT_TESTNET = 14000 +DEFAULT_API_PORT = 4000 -DEFAULT_RPC_PORT_REGTEST = 24000 -DEFAULT_RPC_PORT_TESTNET = 14000 -DEFAULT_RPC_PORT = 4000 +DEFAULT_RPC_PORT_REGTEST = 24100 +DEFAULT_RPC_PORT_TESTNET = 14100 +DEFAULT_RPC_PORT = 4100 DEFAULT_BACKEND_PORT_REGTEST = 28332 DEFAULT_BACKEND_PORT_TESTNET = 18332 From bf022531b0197e9293a14974987f8b254c06b799 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 6 May 2024 14:55:02 +0200 Subject: [PATCH 264/280] replace 'api' by 'rpc' for default user --- counterparty-core/counterpartycore/cli.py | 4 ++-- counterparty-core/counterpartycore/server.py | 4 ++-- counterparty-core/counterpartycore/test/api_v2_test.py | 2 +- counterparty-core/counterpartycore/test/conftest.py | 4 ++-- counterparty-core/tools/genapidoc.py | 6 +++--- dredd.yml | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/counterparty-core/counterpartycore/cli.py b/counterparty-core/counterpartycore/cli.py index cf14c4cad0..45d0bfbd1f 100755 --- a/counterparty-core/counterpartycore/cli.py +++ b/counterparty-core/counterpartycore/cli.py @@ -202,14 +202,14 @@ def float_range_checker(arg): [ ("--api-user",), { - "default": "api", + "default": "rpc", "help": f"required username to use the {config.APP_NAME} API (via HTTP basic auth)", }, ], [ ("--api-password",), { - "default": "api", + "default": "rpc", "help": f"required password (for rpc-user) to use the {config.APP_NAME} API (via HTTP basic auth)", }, ], diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index b655e74739..562018606f 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -442,12 +442,12 @@ def initialise_config( if api_user: config.API_USER = api_user else: - config.API_USER = "api" + config.API_USER = "rpc" if api_password: config.API_PASSWORD = api_password else: - config.API_PASSWORD = "api" # noqa: S105 + config.API_PASSWORD = "rpc" # noqa: S105 if api_no_allow_cors: config.API_NO_ALLOW_CORS = api_no_allow_cors diff --git a/counterparty-core/counterpartycore/test/api_v2_test.py b/counterparty-core/counterpartycore/test/api_v2_test.py index c669732594..319ad22730 100644 --- a/counterparty-core/counterpartycore/test/api_v2_test.py +++ b/counterparty-core/counterpartycore/test/api_v2_test.py @@ -17,7 +17,7 @@ FIXTURE_SQL_FILE = CURR_DIR + "/fixtures/scenarios/unittest_fixture.sql" FIXTURE_DB = tempfile.gettempdir() + "/fixtures.unittest_fixture.db" API_V2_FIXTURES = CURR_DIR + "/fixtures/api_v2_fixtures.json" -API_ROOT = "http://api:api@localhost:10009" +API_ROOT = "http://rpc:rpc@localhost:10009" @pytest.mark.usefixtures("api_server_v2") diff --git a/counterparty-core/counterpartycore/test/conftest.py b/counterparty-core/counterpartycore/test/conftest.py index be649df563..4d2ff5677f 100644 --- a/counterparty-core/counterpartycore/test/conftest.py +++ b/counterparty-core/counterpartycore/test/conftest.py @@ -270,8 +270,8 @@ def api_server_v2(request, cp_server): "rpc_password": None, "rpc_no_allow_cors": False, "api_host": "localhost", - "api_user": "api", - "api_password": "api", + "api_user": "rpc", + "api_password": "rpc", "api_no_allow_cors": False, "force": False, "requests_timeout": config.DEFAULT_REQUESTS_TIMEOUT, diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index a4cd04e038..bcd1fc5cdd 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -11,7 +11,7 @@ API_BLUEPRINT_FILE = os.path.join(CURR_DIR, "../../apiary.apib") DREDD_FILE = os.path.join(CURR_DIR, "../../dredd.yml") CACHE_FILE = os.path.join(CURR_DIR, "apicache.json") -API_ROOT = "http://api:api@localhost:4100" +API_ROOT = "http://rpc:rpc@localhost:4000" USE_API_CACHE = True TARGET_FILE = API_DOC_FILE @@ -84,11 +84,11 @@ def get_example_output(path, args): } DREDD_CONFIG = { - "user": "api:api", + "user": "rpc:rpc", "loglevel": "error", "path": [], "blueprint": "apiary.apib", - "endpoint": "http://127.0.0.1:4200", + "endpoint": "http://127.0.0.1:4000", "only": [], } diff --git a/dredd.yml b/dredd.yml index 4ba1ed0488..39d1fcb3db 100644 --- a/dredd.yml +++ b/dredd.yml @@ -1,5 +1,5 @@ blueprint: apiary.apib -endpoint: http://127.0.0.1:4200 +endpoint: http://127.0.0.1:4000 loglevel: error only: - Blocks > Get Blocks > Get Blocks @@ -69,4 +69,4 @@ only: - V1 > Redirect To Api V1 > Redirect To Api V1 - V1 > Redirect To Api V1 > Redirect To Api V1 path: [] -user: api:api +user: rpc:rpc From abac40de2c8ea402c2e967ba9ba49b304e7cf31e Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 6 May 2024 15:09:55 +0200 Subject: [PATCH 265/280] fix tests --- .../counterpartycore/test/api_v2_test.py | 14 ++- .../test/fixtures/api_v2_fixtures.json | 114 +++++++++--------- .../counterpartycore/test/util_test.py | 2 +- 3 files changed, 71 insertions(+), 59 deletions(-) diff --git a/counterparty-core/counterpartycore/test/api_v2_test.py b/counterparty-core/counterpartycore/test/api_v2_test.py index 319ad22730..af9152d272 100644 --- a/counterparty-core/counterpartycore/test/api_v2_test.py +++ b/counterparty-core/counterpartycore/test/api_v2_test.py @@ -33,13 +33,25 @@ def test_api_v2(request): dispenser_hash = "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498" event = "CREDIT" event_index = 10 - exclude_routes = ["compose", "unpack", "info", "mempool", "healthz", "bitcoin", "v1"] + exclude_routes = [ + "compose", + "unpack", + "info", + "mempool", + "healthz", + "bitcoin", + "v1", + "rpc", + "api", + ] results = {} fixtures = {} with open(API_V2_FIXTURES, "r") as f: fixtures = json.load(f) for route in routes.ROUTES: + if route == "/" or route == "/": + continue if any([exclude in route for exclude in exclude_routes]): continue diff --git a/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json b/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json index 5513a5d225..e561d4e5e5 100644 --- a/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json +++ b/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json @@ -1,5 +1,5 @@ { - "http://api:api@localhost:10009/v2/blocks": { + "http://rpc:rpc@localhost:10009/v2/blocks": { "result": [ { "block_index": 310500, @@ -103,7 +103,7 @@ } ] }, - "http://api:api@localhost:10009/v2/blocks/310491": { + "http://rpc:rpc@localhost:10009/v2/blocks/310491": { "result": { "block_index": 310491, "block_hash": "811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16", @@ -115,7 +115,7 @@ "messages_hash": "9671cfedb3124b67ed996c547cb26a32e95490009ad56065c79be54a28c45994" } }, - "http://api:api@localhost:10009/v2/blocks/310491/transactions": { + "http://rpc:rpc@localhost:10009/v2/blocks/310491/transactions": { "result": [ { "tx_index": 492, @@ -132,7 +132,7 @@ } ] }, - "http://api:api@localhost:10009/v2/blocks/310491/events": { + "http://rpc:rpc@localhost:10009/v2/blocks/310491/events": { "result": [ { "event_index": 1183, @@ -221,7 +221,7 @@ } ] }, - "http://api:api@localhost:10009/v2/blocks/310491/events/counts": { + "http://rpc:rpc@localhost:10009/v2/blocks/310491/events/counts": { "result": [ { "event": "BLOCK_PARSED", @@ -249,13 +249,13 @@ } ] }, - "http://api:api@localhost:10009/v2/blocks/310491/events/CREDIT": { + "http://rpc:rpc@localhost:10009/v2/blocks/310491/events/CREDIT": { "result": [] }, - "http://api:api@localhost:10009/v2/blocks/310491/credits": { + "http://rpc:rpc@localhost:10009/v2/blocks/310491/credits": { "result": [] }, - "http://api:api@localhost:10009/v2/blocks/310491/debits": { + "http://rpc:rpc@localhost:10009/v2/blocks/310491/debits": { "result": [ { "block_index": 310491, @@ -268,28 +268,28 @@ } ] }, - "http://api:api@localhost:10009/v2/blocks/310491/expirations": { + "http://rpc:rpc@localhost:10009/v2/blocks/310491/expirations": { "result": [] }, - "http://api:api@localhost:10009/v2/blocks/310491/cancels": { + "http://rpc:rpc@localhost:10009/v2/blocks/310491/cancels": { "result": [] }, - "http://api:api@localhost:10009/v2/blocks/310491/destructions": { + "http://rpc:rpc@localhost:10009/v2/blocks/310491/destructions": { "result": [] }, - "http://api:api@localhost:10009/v2/blocks/310491/issuances": { + "http://rpc:rpc@localhost:10009/v2/blocks/310491/issuances": { "result": [] }, - "http://api:api@localhost:10009/v2/blocks/310491/sends": { + "http://rpc:rpc@localhost:10009/v2/blocks/310491/sends": { "result": [] }, - "http://api:api@localhost:10009/v2/blocks/310491/dispenses": { + "http://rpc:rpc@localhost:10009/v2/blocks/310491/dispenses": { "result": [] }, - "http://api:api@localhost:10009/v2/blocks/310491/sweeps": { + "http://rpc:rpc@localhost:10009/v2/blocks/310491/sweeps": { "result": [] }, - "http://api:api@localhost:10009/v2/transactions/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { + "http://rpc:rpc@localhost:10009/v2/transactions/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { "result": { "tx_index": 492, "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", @@ -317,7 +317,7 @@ } } }, - "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/balances": { + "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/balances": { "result": [ { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", @@ -361,14 +361,14 @@ } ] }, - "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/balances/NODIVISIBLE": { + "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/balances/NODIVISIBLE": { "result": { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", "asset": "NODIVISIBLE", "quantity": 985 } }, - "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/credits": { + "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/credits": { "result": [ { "block_index": 310000, @@ -480,7 +480,7 @@ } ] }, - "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/debits": { + "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/debits": { "result": [ { "block_index": 310001, @@ -673,7 +673,7 @@ } ] }, - "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/bets": { + "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/bets": { "result": [ { "tx_index": 102, @@ -696,7 +696,7 @@ } ] }, - "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/broadcasts": { + "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/broadcasts": { "result": [ { "tx_index": 103, @@ -724,7 +724,7 @@ } ] }, - "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/burns": { + "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/burns": { "result": [ { "tx_index": 1, @@ -737,7 +737,7 @@ } ] }, - "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sends": { + "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sends": { "result": [ { "tx_index": 8, @@ -837,7 +837,7 @@ } ] }, - "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/receives": { + "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/receives": { "result": [ { "tx_index": 483, @@ -853,7 +853,7 @@ } ] }, - "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sends/NODIVISIBLE": { + "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sends/NODIVISIBLE": { "result": [ { "tx_index": 15, @@ -881,19 +881,19 @@ } ] }, - "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/receives/NODIVISIBLE": { + "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/receives/NODIVISIBLE": { "result": [] }, - "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/dispensers": { + "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/dispensers": { "result": [] }, - "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/dispensers/NODIVISIBLE": { + "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/dispensers/NODIVISIBLE": { "result": [] }, - "http://api:api@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sweeps": { + "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sweeps": { "result": [] }, - "http://api:api@localhost:10009/v2/assets": { + "http://rpc:rpc@localhost:10009/v2/assets": { "result": [ { "asset": "A95428956661682277", @@ -937,7 +937,7 @@ } ] }, - "http://api:api@localhost:10009/v2/assets/NODIVISIBLE": { + "http://rpc:rpc@localhost:10009/v2/assets/NODIVISIBLE": { "result": { "asset": "NODIVISIBLE", "asset_longname": null, @@ -950,7 +950,7 @@ "holder_count": 3 } }, - "http://api:api@localhost:10009/v2/assets/NODIVISIBLE/balances": { + "http://rpc:rpc@localhost:10009/v2/assets/NODIVISIBLE/balances": { "result": [ { "address": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", @@ -969,17 +969,17 @@ } ] }, - "http://api:api@localhost:10009/v2/assets/NODIVISIBLE/balances/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc": { + "http://rpc:rpc@localhost:10009/v2/assets/NODIVISIBLE/balances/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc": { "result": { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", "asset": "NODIVISIBLE", "quantity": 985 } }, - "http://api:api@localhost:10009/v2/assets/NODIVISIBLE/orders": { + "http://rpc:rpc@localhost:10009/v2/assets/NODIVISIBLE/orders": { "result": [] }, - "http://api:api@localhost:10009/v2/assets/NODIVISIBLE/credits": { + "http://rpc:rpc@localhost:10009/v2/assets/NODIVISIBLE/credits": { "result": [ { "block_index": 310002, @@ -1010,7 +1010,7 @@ } ] }, - "http://api:api@localhost:10009/v2/assets/NODIVISIBLE/debits": { + "http://rpc:rpc@localhost:10009/v2/assets/NODIVISIBLE/debits": { "result": [ { "block_index": 310014, @@ -1032,10 +1032,10 @@ } ] }, - "http://api:api@localhost:10009/v2/assets/NODIVISIBLE/dividends": { + "http://rpc:rpc@localhost:10009/v2/assets/NODIVISIBLE/dividends": { "result": [] }, - "http://api:api@localhost:10009/v2/assets/NODIVISIBLE/issuances": { + "http://rpc:rpc@localhost:10009/v2/assets/NODIVISIBLE/issuances": { "result": [ { "tx_index": 3, @@ -1060,7 +1060,7 @@ } ] }, - "http://api:api@localhost:10009/v2/assets/NODIVISIBLE/sends": { + "http://rpc:rpc@localhost:10009/v2/assets/NODIVISIBLE/sends": { "result": [ { "tx_index": 15, @@ -1088,13 +1088,13 @@ } ] }, - "http://api:api@localhost:10009/v2/assets/NODIVISIBLE/dispensers": { + "http://rpc:rpc@localhost:10009/v2/assets/NODIVISIBLE/dispensers": { "result": [] }, - "http://api:api@localhost:10009/v2/assets/NODIVISIBLE/dispensers/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc": { + "http://rpc:rpc@localhost:10009/v2/assets/NODIVISIBLE/dispensers/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc": { "result": [] }, - "http://api:api@localhost:10009/v2/assets/NODIVISIBLE/holders": { + "http://rpc:rpc@localhost:10009/v2/assets/NODIVISIBLE/holders": { "result": [ { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", @@ -1113,7 +1113,7 @@ } ] }, - "http://api:api@localhost:10009/v2/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { + "http://rpc:rpc@localhost:10009/v2/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { "result": [ { "tx_index": 492, @@ -1136,7 +1136,7 @@ } ] }, - "http://api:api@localhost:10009/v2/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/matches": { + "http://rpc:rpc@localhost:10009/v2/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/matches": { "result": [ { "id": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498_1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81", @@ -1161,22 +1161,22 @@ } ] }, - "http://api:api@localhost:10009/v2/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/btcpays": { + "http://rpc:rpc@localhost:10009/v2/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/btcpays": { "result": [] }, - "http://api:api@localhost:10009/v2/orders/NODIVISIBLE/XCP": { + "http://rpc:rpc@localhost:10009/v2/orders/NODIVISIBLE/XCP": { "result": [] }, - "http://api:api@localhost:10009/v2/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42": { + "http://rpc:rpc@localhost:10009/v2/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42": { "result": [] }, - "http://api:api@localhost:10009/v2/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42/matches": { + "http://rpc:rpc@localhost:10009/v2/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42/matches": { "result": [] }, - "http://api:api@localhost:10009/v2/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42/resolutions": { + "http://rpc:rpc@localhost:10009/v2/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42/resolutions": { "result": [] }, - "http://api:api@localhost:10009/v2/burns": { + "http://rpc:rpc@localhost:10009/v2/burns": { "result": [ { "tx_index": 1, @@ -1252,13 +1252,13 @@ } ] }, - "http://api:api@localhost:10009/v2/dispensers/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { + "http://rpc:rpc@localhost:10009/v2/dispensers/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { "result": [] }, - "http://api:api@localhost:10009/v2/dispensers/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/dispenses": { + "http://rpc:rpc@localhost:10009/v2/dispensers/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/dispenses": { "result": [] }, - "http://api:api@localhost:10009/v2/events?limit=5": { + "http://rpc:rpc@localhost:10009/v2/events?limit=5": { "result": [ { "event_index": 1237, @@ -1328,7 +1328,7 @@ } ] }, - "http://api:api@localhost:10009/v2/events/10?limit=5": { + "http://rpc:rpc@localhost:10009/v2/events/10?limit=5": { "result": [ { "event_index": 10, @@ -1344,7 +1344,7 @@ } ] }, - "http://api:api@localhost:10009/v2/events/counts?limit=5": { + "http://rpc:rpc@localhost:10009/v2/events/counts?limit=5": { "result": [ { "event": "ASSET_CREATION", @@ -1432,7 +1432,7 @@ } ] }, - "http://api:api@localhost:10009/v2/events/CREDIT?limit=5": { + "http://rpc:rpc@localhost:10009/v2/events/CREDIT?limit=5": { "result": [ { "event_index": 1231, diff --git a/counterparty-core/counterpartycore/test/util_test.py b/counterparty-core/counterpartycore/test/util_test.py index 7fcf4c95e9..4943a87119 100644 --- a/counterparty-core/counterpartycore/test/util_test.py +++ b/counterparty-core/counterpartycore/test/util_test.py @@ -67,7 +67,7 @@ "testcoin": False, "rpc_port": 9999, "rpc_password": "pass", - "api_password": "api", + "api_password": "rpc", "backend_port": 18332, "backend_password": "pass", "backend_ssl_no_verify": True, From 09c7ba1274f241fb8a29674069912eea38f6fb80 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 6 May 2024 15:20:34 +0200 Subject: [PATCH 266/280] No basic auth by default --- counterparty-core/counterpartycore/cli.py | 6 +++--- counterparty-core/counterpartycore/lib/api/api_server.py | 2 ++ counterparty-core/counterpartycore/server.py | 5 +---- counterparty-core/tools/genapidoc.py | 3 +-- dredd.yml | 1 - 5 files changed, 7 insertions(+), 10 deletions(-) diff --git a/counterparty-core/counterpartycore/cli.py b/counterparty-core/counterpartycore/cli.py index 45d0bfbd1f..378a8a59c0 100755 --- a/counterparty-core/counterpartycore/cli.py +++ b/counterparty-core/counterpartycore/cli.py @@ -202,15 +202,15 @@ def float_range_checker(arg): [ ("--api-user",), { - "default": "rpc", + "default": None, "help": f"required username to use the {config.APP_NAME} API (via HTTP basic auth)", }, ], [ ("--api-password",), { - "default": "rpc", - "help": f"required password (for rpc-user) to use the {config.APP_NAME} API (via HTTP basic auth)", + "default": None, + "help": f"required password (for api-user) to use the {config.APP_NAME} API (via HTTP basic auth)", }, ], [ diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 01207e943a..82751be348 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -59,6 +59,8 @@ def get_db(): @auth.verify_password def verify_password(username, password): + if config.API_PASSWORD is None: + return True return username == config.API_USER and password == config.API_PASSWORD diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index 562018606f..f441f1c867 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -444,10 +444,7 @@ def initialise_config( else: config.API_USER = "rpc" - if api_password: - config.API_PASSWORD = api_password - else: - config.API_PASSWORD = "rpc" # noqa: S105 + config.API_PASSWORD = api_password if api_no_allow_cors: config.API_NO_ALLOW_CORS = api_no_allow_cors diff --git a/counterparty-core/tools/genapidoc.py b/counterparty-core/tools/genapidoc.py index bcd1fc5cdd..f95cb3edb6 100644 --- a/counterparty-core/tools/genapidoc.py +++ b/counterparty-core/tools/genapidoc.py @@ -11,7 +11,7 @@ API_BLUEPRINT_FILE = os.path.join(CURR_DIR, "../../apiary.apib") DREDD_FILE = os.path.join(CURR_DIR, "../../dredd.yml") CACHE_FILE = os.path.join(CURR_DIR, "apicache.json") -API_ROOT = "http://rpc:rpc@localhost:4000" +API_ROOT = "http://localhost:4000" USE_API_CACHE = True TARGET_FILE = API_DOC_FILE @@ -84,7 +84,6 @@ def get_example_output(path, args): } DREDD_CONFIG = { - "user": "rpc:rpc", "loglevel": "error", "path": [], "blueprint": "apiary.apib", diff --git a/dredd.yml b/dredd.yml index 39d1fcb3db..d06ccf6892 100644 --- a/dredd.yml +++ b/dredd.yml @@ -69,4 +69,3 @@ only: - V1 > Redirect To Api V1 > Redirect To Api V1 - V1 > Redirect To Api V1 > Redirect To Api V1 path: [] -user: rpc:rpc From 4197183f83fce5dbe9906c6301b13874aaccb3bb Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 6 May 2024 15:32:58 +0200 Subject: [PATCH 267/280] fix url in compare hashes test --- .../counterpartycore/test/compare_hashes_test.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/counterparty-core/counterpartycore/test/compare_hashes_test.py b/counterparty-core/counterpartycore/test/compare_hashes_test.py index edacb6f852..90b4eaed32 100644 --- a/counterparty-core/counterpartycore/test/compare_hashes_test.py +++ b/counterparty-core/counterpartycore/test/compare_hashes_test.py @@ -7,7 +7,7 @@ conftest, # noqa: F401 ) -LOCAL_API_URL = "http://api:api@localhost:4000" +LOCAL_API_URL = "http://localhost:4000" # [server_url, api_version, server_version] CHECK_SERVERS = [ @@ -30,7 +30,7 @@ def get_last_block_api_v1(api_url): def get_last_block_api_v2(api_url): - response = requests.get(f"{api_url}/", timeout=10).json() + response = requests.get(f"{api_url}/v2/", timeout=10).json() last_block_index = response["result"]["counterparty_height"] version = f'v{response["result"]["version"]}' return last_block_index, version @@ -49,7 +49,7 @@ def get_block_hashes_api_v1(api_url, block_index): def get_block_hashes_api_v2(api_url, block_index): - response = requests.get(f"{api_url}/blocks/{block_index}", timeout=10) + response = requests.get(f"{api_url}/v2/blocks/{block_index}", timeout=10) return response.json()["result"]["ledger_hash"], response.json()["result"]["txlist_hash"] @@ -60,6 +60,7 @@ def test_compare_hashes(skip): # get last blocks local_block_index, _ = get_last_block_api_v2(LOCAL_API_URL) + print(f"Local block index: {local_block_index}") check_servers_block_indexes = [local_block_index] for check_server in CHECK_SERVERS: check_server_url, check_server_api_version, check_server_version = check_server From c9b028e1763d5ed47ae1943677efc5008eaa2463 Mon Sep 17 00:00:00 2001 From: Adam Krellenstein Date: Mon, 6 May 2024 15:52:33 +0200 Subject: [PATCH 268/280] Tweak Language in Release Notes --- release-notes/release-notes-v10.1.2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release-notes/release-notes-v10.1.2.md b/release-notes/release-notes-v10.1.2.md index 966258badb..38cf7f5b69 100644 --- a/release-notes/release-notes-v10.1.2.md +++ b/release-notes/release-notes-v10.1.2.md @@ -19,7 +19,7 @@ This release maintains full backwards-compatibility and includes no protocol cha ## Codebase * Release API v2 -* Have API return `ready` if the last block is less than one minute old +* Have both API v1 and v2 return `ready` if the last block is less than one minute old * Add an index on the `block_index` field in the `credits` and `debits` tables * Add `TRACE level to Python logging * Add basic anonymous node telemetry From 2b80ae93aaa2a28c475cfc126863f6f9f4e1f741 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Mon, 6 May 2024 16:11:55 +0200 Subject: [PATCH 269/280] remove password from tests --- .../counterpartycore/test/api_v2_test.py | 2 +- .../counterpartycore/test/conftest.py | 2 +- .../test/fixtures/api_v2_fixtures.json | 114 +++++++++--------- .../counterpartycore/test/util_test.py | 2 +- 4 files changed, 60 insertions(+), 60 deletions(-) diff --git a/counterparty-core/counterpartycore/test/api_v2_test.py b/counterparty-core/counterpartycore/test/api_v2_test.py index af9152d272..ffd12eb43e 100644 --- a/counterparty-core/counterpartycore/test/api_v2_test.py +++ b/counterparty-core/counterpartycore/test/api_v2_test.py @@ -17,7 +17,7 @@ FIXTURE_SQL_FILE = CURR_DIR + "/fixtures/scenarios/unittest_fixture.sql" FIXTURE_DB = tempfile.gettempdir() + "/fixtures.unittest_fixture.db" API_V2_FIXTURES = CURR_DIR + "/fixtures/api_v2_fixtures.json" -API_ROOT = "http://rpc:rpc@localhost:10009" +API_ROOT = "http://localhost:10009" @pytest.mark.usefixtures("api_server_v2") diff --git a/counterparty-core/counterpartycore/test/conftest.py b/counterparty-core/counterpartycore/test/conftest.py index 4d2ff5677f..bc3ecf7ab3 100644 --- a/counterparty-core/counterpartycore/test/conftest.py +++ b/counterparty-core/counterpartycore/test/conftest.py @@ -271,7 +271,7 @@ def api_server_v2(request, cp_server): "rpc_no_allow_cors": False, "api_host": "localhost", "api_user": "rpc", - "api_password": "rpc", + "api_password": None, "api_no_allow_cors": False, "force": False, "requests_timeout": config.DEFAULT_REQUESTS_TIMEOUT, diff --git a/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json b/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json index e561d4e5e5..e3c3ad162c 100644 --- a/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json +++ b/counterparty-core/counterpartycore/test/fixtures/api_v2_fixtures.json @@ -1,5 +1,5 @@ { - "http://rpc:rpc@localhost:10009/v2/blocks": { + "http://localhost:10009/v2/blocks": { "result": [ { "block_index": 310500, @@ -103,7 +103,7 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/blocks/310491": { + "http://localhost:10009/v2/blocks/310491": { "result": { "block_index": 310491, "block_hash": "811abd7cf2b768cfdaa84ab44c63f4463c96a368ead52125bf149cf0c7447b16", @@ -115,7 +115,7 @@ "messages_hash": "9671cfedb3124b67ed996c547cb26a32e95490009ad56065c79be54a28c45994" } }, - "http://rpc:rpc@localhost:10009/v2/blocks/310491/transactions": { + "http://localhost:10009/v2/blocks/310491/transactions": { "result": [ { "tx_index": 492, @@ -132,7 +132,7 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/blocks/310491/events": { + "http://localhost:10009/v2/blocks/310491/events": { "result": [ { "event_index": 1183, @@ -221,7 +221,7 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/blocks/310491/events/counts": { + "http://localhost:10009/v2/blocks/310491/events/counts": { "result": [ { "event": "BLOCK_PARSED", @@ -249,13 +249,13 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/blocks/310491/events/CREDIT": { + "http://localhost:10009/v2/blocks/310491/events/CREDIT": { "result": [] }, - "http://rpc:rpc@localhost:10009/v2/blocks/310491/credits": { + "http://localhost:10009/v2/blocks/310491/credits": { "result": [] }, - "http://rpc:rpc@localhost:10009/v2/blocks/310491/debits": { + "http://localhost:10009/v2/blocks/310491/debits": { "result": [ { "block_index": 310491, @@ -268,28 +268,28 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/blocks/310491/expirations": { + "http://localhost:10009/v2/blocks/310491/expirations": { "result": [] }, - "http://rpc:rpc@localhost:10009/v2/blocks/310491/cancels": { + "http://localhost:10009/v2/blocks/310491/cancels": { "result": [] }, - "http://rpc:rpc@localhost:10009/v2/blocks/310491/destructions": { + "http://localhost:10009/v2/blocks/310491/destructions": { "result": [] }, - "http://rpc:rpc@localhost:10009/v2/blocks/310491/issuances": { + "http://localhost:10009/v2/blocks/310491/issuances": { "result": [] }, - "http://rpc:rpc@localhost:10009/v2/blocks/310491/sends": { + "http://localhost:10009/v2/blocks/310491/sends": { "result": [] }, - "http://rpc:rpc@localhost:10009/v2/blocks/310491/dispenses": { + "http://localhost:10009/v2/blocks/310491/dispenses": { "result": [] }, - "http://rpc:rpc@localhost:10009/v2/blocks/310491/sweeps": { + "http://localhost:10009/v2/blocks/310491/sweeps": { "result": [] }, - "http://rpc:rpc@localhost:10009/v2/transactions/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { + "http://localhost:10009/v2/transactions/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { "result": { "tx_index": 492, "tx_hash": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498", @@ -317,7 +317,7 @@ } } }, - "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/balances": { + "http://localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/balances": { "result": [ { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", @@ -361,14 +361,14 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/balances/NODIVISIBLE": { + "http://localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/balances/NODIVISIBLE": { "result": { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", "asset": "NODIVISIBLE", "quantity": 985 } }, - "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/credits": { + "http://localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/credits": { "result": [ { "block_index": 310000, @@ -480,7 +480,7 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/debits": { + "http://localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/debits": { "result": [ { "block_index": 310001, @@ -673,7 +673,7 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/bets": { + "http://localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/bets": { "result": [ { "tx_index": 102, @@ -696,7 +696,7 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/broadcasts": { + "http://localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/broadcasts": { "result": [ { "tx_index": 103, @@ -724,7 +724,7 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/burns": { + "http://localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/burns": { "result": [ { "tx_index": 1, @@ -737,7 +737,7 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sends": { + "http://localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sends": { "result": [ { "tx_index": 8, @@ -837,7 +837,7 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/receives": { + "http://localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/receives": { "result": [ { "tx_index": 483, @@ -853,7 +853,7 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sends/NODIVISIBLE": { + "http://localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sends/NODIVISIBLE": { "result": [ { "tx_index": 15, @@ -881,19 +881,19 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/receives/NODIVISIBLE": { + "http://localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/receives/NODIVISIBLE": { "result": [] }, - "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/dispensers": { + "http://localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/dispensers": { "result": [] }, - "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/dispensers/NODIVISIBLE": { + "http://localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/dispensers/NODIVISIBLE": { "result": [] }, - "http://rpc:rpc@localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sweeps": { + "http://localhost:10009/v2/addresses/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc/sweeps": { "result": [] }, - "http://rpc:rpc@localhost:10009/v2/assets": { + "http://localhost:10009/v2/assets": { "result": [ { "asset": "A95428956661682277", @@ -937,7 +937,7 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/assets/NODIVISIBLE": { + "http://localhost:10009/v2/assets/NODIVISIBLE": { "result": { "asset": "NODIVISIBLE", "asset_longname": null, @@ -950,7 +950,7 @@ "holder_count": 3 } }, - "http://rpc:rpc@localhost:10009/v2/assets/NODIVISIBLE/balances": { + "http://localhost:10009/v2/assets/NODIVISIBLE/balances": { "result": [ { "address": "1_mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc_mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns_2", @@ -969,17 +969,17 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/assets/NODIVISIBLE/balances/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc": { + "http://localhost:10009/v2/assets/NODIVISIBLE/balances/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc": { "result": { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", "asset": "NODIVISIBLE", "quantity": 985 } }, - "http://rpc:rpc@localhost:10009/v2/assets/NODIVISIBLE/orders": { + "http://localhost:10009/v2/assets/NODIVISIBLE/orders": { "result": [] }, - "http://rpc:rpc@localhost:10009/v2/assets/NODIVISIBLE/credits": { + "http://localhost:10009/v2/assets/NODIVISIBLE/credits": { "result": [ { "block_index": 310002, @@ -1010,7 +1010,7 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/assets/NODIVISIBLE/debits": { + "http://localhost:10009/v2/assets/NODIVISIBLE/debits": { "result": [ { "block_index": 310014, @@ -1032,10 +1032,10 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/assets/NODIVISIBLE/dividends": { + "http://localhost:10009/v2/assets/NODIVISIBLE/dividends": { "result": [] }, - "http://rpc:rpc@localhost:10009/v2/assets/NODIVISIBLE/issuances": { + "http://localhost:10009/v2/assets/NODIVISIBLE/issuances": { "result": [ { "tx_index": 3, @@ -1060,7 +1060,7 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/assets/NODIVISIBLE/sends": { + "http://localhost:10009/v2/assets/NODIVISIBLE/sends": { "result": [ { "tx_index": 15, @@ -1088,13 +1088,13 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/assets/NODIVISIBLE/dispensers": { + "http://localhost:10009/v2/assets/NODIVISIBLE/dispensers": { "result": [] }, - "http://rpc:rpc@localhost:10009/v2/assets/NODIVISIBLE/dispensers/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc": { + "http://localhost:10009/v2/assets/NODIVISIBLE/dispensers/mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc": { "result": [] }, - "http://rpc:rpc@localhost:10009/v2/assets/NODIVISIBLE/holders": { + "http://localhost:10009/v2/assets/NODIVISIBLE/holders": { "result": [ { "address": "mn6q3dS2EnDUx3bmyWc6D4szJNVGtaR7zc", @@ -1113,7 +1113,7 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { + "http://localhost:10009/v2/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { "result": [ { "tx_index": 492, @@ -1136,7 +1136,7 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/matches": { + "http://localhost:10009/v2/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/matches": { "result": [ { "id": "74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498_1b294dd8592e76899b1c106782e4c96e63114abd8e3fa09ab6d2d52496b5bf81", @@ -1161,22 +1161,22 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/btcpays": { + "http://localhost:10009/v2/orders/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/btcpays": { "result": [] }, - "http://rpc:rpc@localhost:10009/v2/orders/NODIVISIBLE/XCP": { + "http://localhost:10009/v2/orders/NODIVISIBLE/XCP": { "result": [] }, - "http://rpc:rpc@localhost:10009/v2/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42": { + "http://localhost:10009/v2/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42": { "result": [] }, - "http://rpc:rpc@localhost:10009/v2/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42/matches": { + "http://localhost:10009/v2/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42/matches": { "result": [] }, - "http://rpc:rpc@localhost:10009/v2/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42/resolutions": { + "http://localhost:10009/v2/bets/e566ab052d414d2c9b9d6ffc643bc5d2b31d80976dffe7acceaf2576246f9e42/resolutions": { "result": [] }, - "http://rpc:rpc@localhost:10009/v2/burns": { + "http://localhost:10009/v2/burns": { "result": [ { "tx_index": 1, @@ -1252,13 +1252,13 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/dispensers/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { + "http://localhost:10009/v2/dispensers/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498": { "result": [] }, - "http://rpc:rpc@localhost:10009/v2/dispensers/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/dispenses": { + "http://localhost:10009/v2/dispensers/74db175c4669a3d3a59e3fcddce9e97fcd7d12c35b58ef31845a1b20a1739498/dispenses": { "result": [] }, - "http://rpc:rpc@localhost:10009/v2/events?limit=5": { + "http://localhost:10009/v2/events?limit=5": { "result": [ { "event_index": 1237, @@ -1328,7 +1328,7 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/events/10?limit=5": { + "http://localhost:10009/v2/events/10?limit=5": { "result": [ { "event_index": 10, @@ -1344,7 +1344,7 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/events/counts?limit=5": { + "http://localhost:10009/v2/events/counts?limit=5": { "result": [ { "event": "ASSET_CREATION", @@ -1432,7 +1432,7 @@ } ] }, - "http://rpc:rpc@localhost:10009/v2/events/CREDIT?limit=5": { + "http://localhost:10009/v2/events/CREDIT?limit=5": { "result": [ { "event_index": 1231, diff --git a/counterparty-core/counterpartycore/test/util_test.py b/counterparty-core/counterpartycore/test/util_test.py index 4943a87119..75cecd61b7 100644 --- a/counterparty-core/counterpartycore/test/util_test.py +++ b/counterparty-core/counterpartycore/test/util_test.py @@ -67,7 +67,7 @@ "testcoin": False, "rpc_port": 9999, "rpc_password": "pass", - "api_password": "rpc", + "api_password": None, "backend_port": 18332, "backend_password": "pass", "backend_ssl_no_verify": True, From ce2022f2935cca14877ef6f581db262e5e43df14 Mon Sep 17 00:00:00 2001 From: Adam Krellenstein Date: Mon, 6 May 2024 16:14:17 +0200 Subject: [PATCH 270/280] Add Entry for Fixed Issue --- release-notes/release-notes-v10.1.2.md | 1 + 1 file changed, 1 insertion(+) diff --git a/release-notes/release-notes-v10.1.2.md b/release-notes/release-notes-v10.1.2.md index 85b3a762f6..c18a56e4cb 100644 --- a/release-notes/release-notes-v10.1.2.md +++ b/release-notes/release-notes-v10.1.2.md @@ -18,6 +18,7 @@ There is a [migration guide](https://docs.counterparty.io/docs/advanced/api-v2/v ## Bugfixes * Fix logging of some raw tracebacks (#1715) * Retry on `ChunkedEncodingError` with AddrIndexRs; break loop on all errors +* Fix bad logging of Rust module panic (#1721) ## Codebase From f53a74432822b787f0230ebd1bdcb132dc98a07b Mon Sep 17 00:00:00 2001 From: warrenpuffet Date: Sun, 5 May 2024 18:47:12 -0400 Subject: [PATCH 271/280] Creat and test gpg verify signature util --- .../counterpartycore/lib/util.py | 22 +++++++++++++++++- .../test/fixtures/test_public_key.asc | 13 +++++++++++ .../test/fixtures/test_snapshot.sig | Bin 0 -> 119 bytes .../test/fixtures/test_snapshot.tar.gz | Bin 0 -> 177 bytes .../test/verify_signature_test.py | 16 +++++++++++++ 5 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 counterparty-core/counterpartycore/test/fixtures/test_public_key.asc create mode 100644 counterparty-core/counterpartycore/test/fixtures/test_snapshot.sig create mode 100644 counterparty-core/counterpartycore/test/fixtures/test_snapshot.tar.gz create mode 100644 counterparty-core/counterpartycore/test/verify_signature_test.py diff --git a/counterparty-core/counterpartycore/lib/util.py b/counterparty-core/counterpartycore/lib/util.py index b862773395..da2fbd4821 100644 --- a/counterparty-core/counterpartycore/lib/util.py +++ b/counterparty-core/counterpartycore/lib/util.py @@ -8,13 +8,15 @@ import os import random import re +import shutil import sys +import tempfile import threading import time from operator import itemgetter +import gnupg import requests - from counterpartycore.lib import config, exceptions logger = logging.getLogger(config.LOGGER_NAME) @@ -456,6 +458,24 @@ def clean_url_for_log(url): return url +def verify_signature(public_key_data, signature_path, snapshot_path): + temp_dir = tempfile.mkdtemp() + verified = False + + try: + gpg = gnupg.GPG(gnupghome=temp_dir) + + gpg.import_keys(public_key_data) + + with open(signature_path, "rb") as s: + verified = gpg.verify_file(s, snapshot_path, close_file=False) + + finally: + shutil.rmtree(temp_dir) + + return verified + + # ORACLES def satoshirate_to_fiat(satoshirate): return round(satoshirate / 100.0, 2) diff --git a/counterparty-core/counterpartycore/test/fixtures/test_public_key.asc b/counterparty-core/counterpartycore/test/fixtures/test_public_key.asc new file mode 100644 index 0000000000..e116bec67a --- /dev/null +++ b/counterparty-core/counterpartycore/test/fixtures/test_public_key.asc @@ -0,0 +1,13 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mDMEZjgGuRYJKwYBBAHaRw8BAQdATAz6X4a0383lQWrw/4htgUk/5D/nMSvJBQpJ +iG2YDGK0K2NvdW50ZXJwYXJ0eSA8Y291bnRlcnBhcnR5QGNvdW50ZXJwYXJ0eS5p +bz6IkwQTFgoAOxYhBMpYppUY9vsWsYSNuu+xER+hVzfbBQJmOAa5AhsDBQsJCAcC +AiICBhUKCQgLAgQWAgMBAh4HAheAAAoJEO+xER+hVzfbCVABAKSg2lavD6DeYpfc +PDk7zxL4a12kPeIQuyojG3oJvMbjAQCuFp0eou+E1FKj75O8EKX0zqEqmjp9CYyr +3Fj7P3qLD7g4BGY4BrkSCisGAQQBl1UBBQEBB0Bx0+u60U00tTZqlJaH+eQ069vM +Fi4vSJgWtiBYpSk/RwMBCAeIeAQYFgoAIBYhBMpYppUY9vsWsYSNuu+xER+hVzfb +BQJmOAa5AhsMAAoJEO+xER+hVzfbAYoA/36LXdXnFlv/g2OysHuFybnyK7V3YvPs +OO6sNAIj3AOYAPwIBc3HFrorfhhKlK44rNvWlvtADAatPvaN6ty5Hkq0Cg== +=WOlL +-----END PGP PUBLIC KEY BLOCK----- diff --git a/counterparty-core/counterpartycore/test/fixtures/test_snapshot.sig b/counterparty-core/counterpartycore/test/fixtures/test_snapshot.sig new file mode 100644 index 0000000000000000000000000000000000000000..4e2fade0e2b264a1d846aa09778bef858af71287 GIT binary patch literal 119 zcmeAuWnmEGVvrS6WH}YFY^ub!-(nkEdUw6wC@8-$-265xQ8}0hq{-B!=H? zCd=x~ru#10FR|{D^~OmlEqC`#ozlN_XWEsJ3w`b;>lps2_09^at^CWpA=@vXY0*#l V(#U#oVOi|1MQK~3c?^1hIidloF}NG9o>s`ABM^XZH5|q{iLm6!FDx? z$PeN7;-J5N(S&#oy}E_Q#Y2?^M688?XUZ{=)0h*$NHU2?5;-6vA$SEMPn|jU5S33= zhW2W`(Tj6w%-WT6rgyyaM~E~3ugzXxHoPPKha_6@e`Fv2WzCX*+_1wUfA0U(v;ooz ft~20OuU!XPMYa2Ou|lCxC}iaU8`Ns9015yA>?Txm literal 0 HcmV?d00001 diff --git a/counterparty-core/counterpartycore/test/verify_signature_test.py b/counterparty-core/counterpartycore/test/verify_signature_test.py new file mode 100644 index 0000000000..e2fbf1acfb --- /dev/null +++ b/counterparty-core/counterpartycore/test/verify_signature_test.py @@ -0,0 +1,16 @@ +import os + +from counterpartycore.lib.util import verify_signature + + +def test_verify_signature(): + dir = os.path.dirname(os.path.abspath(__file__)) + public_key_path = os.path.join(dir, "fixtures", "test_public_key.asc") + signature_path = os.path.join(dir, "fixtures", "test_snapshot.sig") + snapshot_path = os.path.join(dir, "fixtures", "test_snapshot.tar.gz") + other_path = os.path.join(dir, "fixtures", "rawtransactions.db") + with open(public_key_path, "rb") as f: + public_key_data = f.read() + + assert verify_signature(public_key_data, signature_path, snapshot_path) + assert not verify_signature(public_key_data, signature_path, other_path) From 0d03b0778517659388ac264778f60cd4de02fac3 Mon Sep 17 00:00:00 2001 From: warrenpuffet Date: Sun, 5 May 2024 18:50:53 -0400 Subject: [PATCH 272/280] add python-gnupg dep to requirements.txt --- counterparty-core/requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/counterparty-core/requirements.txt b/counterparty-core/requirements.txt index c510ba8aa9..bc433e505a 100644 --- a/counterparty-core/requirements.txt +++ b/counterparty-core/requirements.txt @@ -31,3 +31,4 @@ docstring_parser==0.16 psutil==5.9.8 counterparty-rs==10.1.2 influxdb-client==1.42.0 +python-gnupg==0.5.2 From 439488c6f9791f3b071ea3bd790f4e43d26eefac Mon Sep 17 00:00:00 2001 From: warrenpuffet Date: Sun, 5 May 2024 19:01:50 -0400 Subject: [PATCH 273/280] ruff check --fix --- counterparty-core/counterpartycore/lib/util.py | 1 + 1 file changed, 1 insertion(+) diff --git a/counterparty-core/counterpartycore/lib/util.py b/counterparty-core/counterpartycore/lib/util.py index da2fbd4821..62af44b5b1 100644 --- a/counterparty-core/counterpartycore/lib/util.py +++ b/counterparty-core/counterpartycore/lib/util.py @@ -17,6 +17,7 @@ import gnupg import requests + from counterpartycore.lib import config, exceptions logger = logging.getLogger(config.LOGGER_NAME) From 1458f039b0332347d4f49dcb20f5d04de8d54ab3 Mon Sep 17 00:00:00 2001 From: warrenpuffet Date: Sun, 5 May 2024 19:04:14 -0400 Subject: [PATCH 274/280] add gnupg to Dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 46afacdcae..15c8d30cf2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,7 @@ FROM ubuntu:22.04 RUN apt-get update # install dependencies -RUN apt-get install -y python3 python3-dev python3-pip libleveldb-dev curl +RUN apt-get install -y python3 python3-dev python3-pip libleveldb-dev curl gnupg # install rust RUN curl https://sh.rustup.rs -sSf | sh -s -- -y From fd47977fdbc65e833ebac2caa7b606507266e6d8 Mon Sep 17 00:00:00 2001 From: warrenpuffet Date: Mon, 6 May 2024 19:20:34 -0400 Subject: [PATCH 275/280] Integrate signature verification into bootstrap server function --- .../counterpartycore/lib/config.py | 2 + .../counterpartycore/lib/public_keys.py | 113 ++++++++++++++++++ counterparty-core/counterpartycore/server.py | 20 +++- 3 files changed, 132 insertions(+), 3 deletions(-) create mode 100644 counterparty-core/counterpartycore/lib/public_keys.py diff --git a/counterparty-core/counterpartycore/lib/config.py b/counterparty-core/counterpartycore/lib/config.py index 28a1182ecd..81657131be 100644 --- a/counterparty-core/counterpartycore/lib/config.py +++ b/counterparty-core/counterpartycore/lib/config.py @@ -151,7 +151,9 @@ PROTOCOL_CHANGES_URL = "https://counterparty.io/protocol_changes.json" BOOTSTRAP_URL_MAINNET = "https://bootstrap.counterparty.io/counterparty.latest.tar.gz" +BOOTSTRAP_URL_MAINNET_SIG = "https://bootstrap.counterparty.io/counterparty.latest.sig" BOOTSTRAP_URL_TESTNET = "https://bootstrap.counterparty.io/counterparty-testnet.latest.tar.gz" +BOOTSTRAP_URL_TESTNET_SIG = "https://bootstrap.counterparty.io/counterparty-testnet.latest.sig" API_MAX_LOG_SIZE = ( 10 * 1024 * 1024 diff --git a/counterparty-core/counterpartycore/lib/public_keys.py b/counterparty-core/counterpartycore/lib/public_keys.py new file mode 100644 index 0000000000..b2fb5b5729 --- /dev/null +++ b/counterparty-core/counterpartycore/lib/public_keys.py @@ -0,0 +1,113 @@ +PUBLIC_KEY_1 = """-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQINBE/UrH4BEADNQpBlmb+nPdNtYwHSrFtr0/waC8L58rv0nGnTIpZDXZb9giU/ +f25co9o3SEu8yOXQL3dXE5JqzzCMMN0i4qORy+7sgFpTu+FUwXaZbXT0AVQVUA71 +GF9H3misTZGAKKLmZcchX9jsb+6MJ8WZta93ozjaMhVb8FtrvSq5hy1u2AlCmWx1 +Cs34uw5/busAFOmeBEJUhzHjUJAQGlF8VFqMQ5YGxldf0Fgsj7MtSoivNXJqWG6W +b+BJhN0IitY+iUFcKuokp+uiRnufEW8OZG40RxNwUI+LY9TTM7gm2W+BOrZR3kK0 +KSHJRzcmtZCt3jK01B6S7SSf0dXm/vfvWEioa2cqwdt+vsDuoWalYkRv7Q3Oc4oP +KTbaJp4mag9DGpcb9ONTgcHRv0f/7VixLPlCywu8i0kr/N17B9/LlfUDG7DFTh6u +M6Dl6SZlclah18/T2nyGNRuIlIZIXJyU40vZNJQEFxR8kqRlkocJeDihna9Ze9kc +vbuKtkw53X9pw8ReESuIciPs1CGg5WfrbhGqLZllEA7aVCEenHPJa+UqorA025so +yCsvU406Kx7qilZhX1J78ixX0QnnD2349ucPD6lAWW1pdQlpXQ0TBocoIv2YpW6t +TFjeqhZ7KlfpBpP5UqemwHwt5g5lGgi5y8qD7e2B0rn7PukkUr7TburKewARAQAB +tClBZGFtIEtyZWxsZW5zdGVpbiA8YWRhbUBrcmVsbGVuc3RlaW4uY29tPokCVAQT +AQgAPgIbAwIeAQIXgAULCQgHAwUVCgkICwUWAgMBABYhBIHtVE8FV6znCuatJ4vx +TeGtUgR9BQJlsTIbBQkWydOdAAoJEIvxTeGtUgR9thUQAILJeg8gMBvYsbObiPfX +ZAgd7Ugdr2ONbge9CR/wdd7/14UhivOdkdFZGxii6qPJPQzHeVfFaalHK6Xs+MXJ +ns0pe381r1zOhPHzKvYg0CiK04aaZtvWMiby5BB7OAEZ35jptHZsPs/l+XYrIC5M +tmZkHdbxlKpfSWHPsNCzWCs+Iwwz8AcbsCHUeDw9yYhQ63P5P3LGYqI4hlnkGvTP +BRWyFZ8ifEXFQ03cc2+3hC3FxA5wTklLDVlfB+NNS/6Hvf8ySsc+yl+7+OzrHwXe +MX56BFQv+JaazKzPbwY/sDpBJQx6T5cxfUF7icjxBg+cZ1Zaxr1JVNu2dBwA/72H +5yh6vnl669sa8rsuIxYP06NxcOS9zXFjVMcCZ4pKfj7pbTlkqGs5wbJI8hgt3Wsw +5DPGYc38LpVUzq0ojCuO3Ki7V6VCIpU16Fpmh/oJJBAZit9YR0541jvzHnxeNBjd +Qkv+2Dz4fo1NNmyfZ4qKv1ogjD2bs7GLJaSrFcLSrbVF6Gg4r1O5ATzTFVc1ijUn +HCK9lOplnORsjSEygOM3w9GBvXMGUCeA001q2dGG+X7dwb6D/qU38RQbhNrL54jP +EwM9/veOlFElF2EXqV0ie2geprIap4xwfIrPBbRqOAUOf/HP2xMJyLjHDi8zyrwM +oRz9r7zYnrgiE9tzMihYFbJriQIcBBMBAgAGBQJSuOjoAAoJEJscb+rV8GbPXeEP +/2I1WbjlyTGGx/KRsPug8rM8nGUxECC2wsBV5yez9LkFqvKVaXRJojQeQ/to/JXH +N4FQBev8LCgZnxdyiECkeCZE/mghjwbrOY5VUMzgALUoTiCEFShPKIXSBFApNUBH +oydBBLRVvnqtxI0vgLIsY8Bzm2fOfBKr/N1EGlBgjP67bLYXEU6enhF0g93P3oTc +T/VzokwE3O1Sg1IvKazW5UFDkIAFamnrg3VPatiKTB6bytnp1Dj1Vjmke+X0vbrs +zIU1H1OhqcCPpprAEK8a8SB94+3mTWSjgBR0oX/+tiL4pNtR9jCczjskFiYOGsL/ +ZZ2faxVMQnYdDi3vblsF7YKR9BgWnl+UGLHiQ1+Bbf7K9e3V2P0M7zSEf7nUTRTr +X6gBb0LOSinm+7cyqNmjidXkCzkyoU03dgY3v3i3Lqle0UHN+1bPMd0Roze/hQXa +MJDTbZ4yx4ocw0ubHpRp7mvcjJiu/RRKJAespBEYZ3YnooBBMZP61EZAQbG7bf7M +VhS0jO72g6WGco0H90x/kTbxyNHG2+BioTzxox1k/pQrTqvc/m6nvdVw8Rhxv9L+ +ALTXn8Tn1H7wijDqWOcCH/ia7j5lCO/ge6BvklrirD2lG5OZJOONWW+Q7y2ArAdJ +2sOQkA2eHt/ewSHEf6Ienn+yL6e559mbqqwdTxgj3t+yiQIcBBABCAAGBQJUDK7Z +AAoJEGC0MXHYul9Bgy8P/jS7WCqo9dqeOJEUNBsZEjdHkAvdT1Y6AZ+BlZOwmbbm +Fzy5N/5AZKQqUuM71i+5DEbSiYcGsyBiLJARzWEmQVHXv4lyI1n3hg+AtmtgsVyq +aIngW/18P+x58LHmy9wDPU83F00YoJniWlDWAktTLqSfYbG7QAk3pDL9paxLeOY7 +N98PRclvHC0AQx+OcEwBWaGaVAkGVCTsV+eAbPlKlcgzQGPUDeY/OE5IQR+6WvlU +x6bck2/X8WrnSIOc5VQvQuRNbAsA8xoisagEid6CQBEijcHmGHYbzQ1UA8FlhZxr +vszT4aet+ry6YTqjuxe3FPWFyaZLFmXfjAZBFJtlCUbSROOduRMbbMNvSwdB2FZv +4iXhpZo3ma741JTMUBh9+/khPZJz1GLASib1VUceZ+zkb+7kYV6Dcimtav2Ce1Cl +h8T5D9P/ZzeVZ07f39s492dQVC1ZBbEVXwGQbuHJvWnVjY9wPEjYyFQBTrku4EmA +Q6zleVLQ2TWIYosux5ouZn5A8HxAA0Sgfo60hNfGUs6n2Qkygl9Mdzg6Vxo+3Xzb +UpeIzRNcC1Os7Qx1Y4IPWhc1mErkJiVER3PPXO1CuaYTKwol42wnVuZA7DEazSho +lA+5BwCly7vGoKyhqvrUxFRkCqAHn9QQS/B3c6W/n/8wzx9JkFnds2YZwwCsN2nS +iQIcBBABAgAGBQJUJ2iXAAoJEMth6MFQ1TxfNWUP/3oxkO2Tczaeyrzd5wvyC2xf +NiqgjVjhkng9PsTKwlo5awmVpAkAPFXo8RJyndfMC0sJbXEA5D2zXfh6kE4RRWhH +RpTWqMJ021bUhcMWZe9ReYCZ6Cup7Vol3vMwtbkR4Mkr1iL09bINJxVhTp8R+IvR +lhXDNUI1xg13e1AYk9HALHFj/ihZfMFaD5GkiDbHSlHgnjE3HXlFAhS9FMvLR3KQ +s1Ze4sfo/xT0skGCGpk+X5P7HLYHkYmtB4ICC74T0BCq1tOm4CnhpqGHfb1Gu/o7 +CHz3QO+M24ZBiCo959Lgq+ZIm05Ec5lubU7n53LWieWA3KIij1XzKG2asv5JGFm+ +nae9cstSGojqy8mkps64z0LWm601S9a4KF+2wfmdQ2IIRcV6uw2COoxpf1QX3uL+ +B0wr7PkLy/Ofux7TgIyhK7PlSL72RqtW4YQ24YiZQpbr22vvx5pe5zk0+l0YhudQ +Xu+mO4+HZp2Jrf/Jes1Kf6DtJwUwQJXOj/Pqcl645+oLs+0mZJbgMmVr/UFMORDe +Yp9BgySXpyboZNMtzSyOh0w/ouXmD5TOASbZUAzqCX7FckaysNV2kLQDuqRHxQnv +Or/vqdyVl/NKHJCagR6KfBT0BseL9lZkUZWV8PMvrzjoX4GvTvSxrjQvslxlT86R +B6VbhHaRLqargxKxmKQKiQI9BBMBCAAnAhsDAh4BAheABQsJCAcDBRUKCQgLBRYC +AwEABQJUgkXJBQkGjszLAAoJEIvxTeGtUgR9pGgP/0zW/+anC63EyMl3tRzRMp/g +Yx3qvy1oltuzMpJbLS1V4jJQJiz/HR5WqtHzZsfhE1tP5Nux9H9Vg2hWCQrdoqY2 +yqyHWaOyW58vQM/WjCDvWlKawectxIJHDDMmBe5Z4D2djX2OEwKxypKfZzSmyazn +Emla10Xhx4TP8VDse4pxkdBkcVB+yLlA8qUS9pC5e2ESaIUPgsGs4WQv6AmZEIoA +y8nHRgty/aQEfKpc859JAc+e7XuUB9T9hhU+uHNkgXnchJfxLuo2r0dBWaTQzkNH +lvJ3AN/NRfConqCKbttaXNiKuxQAlYIdTqkaqVCxINUBljZlLDbGB/y8vGJCfb/7 +kR4UpPtK1srf1mR5F6lbwls8tOmYb8aKV48achm3utO8nDM1iTiweCTzkBo+4yMr +dWp5Gk+F1Q0spNIg120Zg35YdfcadUsC44ecMlz0QkUvPDhcpBkIeC0CLEdgvTyi +ydKcfft3zY7n0y2VZmkO4r8Wet2SOr5sY0r31ZboOn7utONqLzG47L3fsRfTB3Cy +d5wdG45SQW0j/+uV6IzCmA2jAtjxiSFN1EWbWcJOInpGVJ4Z7OxicT5nrCOVnF7J +KeYzTf4sQzsyl2fEkBBusoQo4aMdeabQzAvinwe1pw5qwJeaaX7qzvrshQf6eOqT +HGhYZl1wt1fQ25+VIvkMiQJUBBMBCAA+AhsDAh4BAheABQsJCAcDBRUKCQgLBRYC +AwEAFiEEge1UTwVXrOcK5q0ni/FN4a1SBH0FAmQZcusFCRST4G0ACgkQi/FN4a1S +BH2uGBAAvYU8B/xpB1O8JwWAfIyJZ6KKyOW3wpQXKx7rbJr+lOejpDoCy9kU8FhZ +HXYqq3ySdUg25jD2+mjq7cZ/vyvaOdVDAmUrRPpTPvZWeU00q0DPR3ztH1F1Dl+t +Yt4Lk+oDcK5WqggddjNQMNgFpQ9AAphZDsIuL/qKsYrjl5bqNlSrBNsHeRrrqsTP +L/YvJ2+Tg3ijhkTHbi5ITU9VZtilXMR+cUOqh4+NDEy7Y5OrD4I06AVtTlBQjwFV +sOz1OO6hwP40qvF1mH1CsBsRpPmqDk/eLnkszmksq5E0DrZYrbhKnbSZEDwaB8t2 +GPXH0+CmoE5KPT74i97yVW+749yQ2e9TC2uR6Pd+JjZ9dRNpBLqr10L5hobOExbo +yhkVc2hvGre5nSW6/MWLuMzmGhhELk3/SN3c6E9/6tLXHh9O53nAe3srs6WVCY50 +fFce+Kmd/GyD79zcqq7mDBliX1b/upDv0G+8NQ9CMUyT1+/vJjORkbpV/+32F333 +RenGjSr5FYkC1K0AKuF3K2lYpr96bl4a6gAha6oJD37mwaVal/wusQ7tEn4ehtIY +vIytiz25pINVrl2lwyx2vVn5VoadGypwsitulO2lEJ0/GuN3kWBcQuHVFqKvAuWT +3iqe42J8ESVSFY8bEsrmg5YS7Kp8q20I7V59b4fYR3M0kIiKhk+5Ag0ET9SsfgEQ +AOV9UGhEXNS9qbuUPl38lyW3Mg4F9tN6BzeCSPrWVn2Qfu+WGY9Opz6stL8SBKrT +UGYz5QwLbkP545B/HtDRjnctVeBLqgZiL0lxC3L/bvPtnlOhfFPhkRKfcmlgrr6z +EE0kBGGAiY6JWjELcAz2kW13stOmFEd0O2aOz7r1xPlSddnUa+QK/xuh001hfnn2 +UCkn5YmsgqxprNaToUdqs61a30HOCj4KewvLs2gb/3E7Hd67eWpVnzc6uIVGYxrH +sBV6LklLwHU5jCgh68lC86v4gIA5HpV1jF2XPfP+dZJGvNeGOKoSJf5jxcNOC1nu +ycbcy931isf0jqidVVwzPvEww58Zkf5BrMA4JzXN0M2d5yu2e4LjAMopQEMuBQ4s +LNFMhyZLhqlLiDNTwn4F5eWbfERw4Pck6oYiTfSmXyvFXcLLwRkkxGLoV3ddSBKl +Sw6JThH45tcdyumkvU3YjryzTXELXTDsSIGKLundCN5uejrIXV/Sndi5nbWXPKPa +WuWqxqEBxAgfQ4Hw54bpoFp+XZ+drsCUJgnwEvZPvEEpdS+2fzEx4OQCw9xCd3Ca +lhDaAvk6UPzxQ1H5fe1zSX5AQ6zPcVPYMoo25trmnpxjm295BT3FmnsjgORr+3X2 +RJdepf8hQg2MC1PF7oHDa7UCvOexq7a7Hm6/n6V8fbuHABEBAAGJAjwEGAEIACYC +GwwWIQSB7VRPBVes5wrmrSeL8U3hrVIEfQUCZbEyJwUJFsnTqQAKCRCL8U3hrVIE +fUHfEAC2GNqTEO7E87YBElUx6KqL/nV2KBCGE+EsUupixc9+SnpgqpJcpz1OBM4I +Vf4eCxxw9B8XRQoNcVFcG+uYL+9++pX5FCgp23XtCh7o0gnV8s0hE5qHNP6E9jfX +u1afKWL3kJXXh9C0gGJV+Ru57KjsXguTwC4fWmJIErChVAXXmJ9NXVm9EQWE5YMu +W3WYap5+i95OXKgzafcVBNWNAe8HdDrvDaX6P+yWaDBdXGY7zE2WbegwEUzprVoe +3Kwd3/Ctm/DeImksBEt+wRVM4jeOiHRpDPf9Ef+Wo9FWDHfIG028Txlxu50xlTfX +lpmVt6epupzuhI145wSqy1+DEtYbqCOldHpAySKCNMgVwJLJpnIIEjoTClVKKrm+ +MeDXe5h3h8Ih5X11F2sW8zHuUjSJsEg7g+S1oKD1B/OD1wJe/KK3c8dGONGILSbB +x/I+fogZ9XwaqtF6f28l035N7xWVCJFu8A3nR0wWZYXjEkeiNydnr5EPgRwnAsZE +xUG5GXhCXxtcQxqXC796En14CRPs8k2UKbnBgnQL7Z4haYz54DqvWy+2VUAmAlqC +EMqLkZo2Geh6Z13QC1GbzXKfqZTOPOEWQ7mCcrDeWrLFk/NP9iY+WEVYLBK6iRY3 +z18SeKGjF503KR0c8euChPeCpXcbGyb9cFqwu9ix9DG936OOXA== +=6Wyy +-----END PGP PUBLIC KEY BLOCK----- +""" + +PUBLIC_KEYS = [PUBLIC_KEY_1] diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index f441f1c867..a3933834b6 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -5,6 +5,7 @@ import logging import os import signal +import sys import tarfile import tempfile import time @@ -14,9 +15,6 @@ import appdirs import apsw import bitcoin as bitcoinlib -from halo import Halo -from termcolor import colored, cprint - from counterpartycore.lib import ( backend, blocks, @@ -30,11 +28,14 @@ from counterpartycore.lib import kickstart as kickstarter from counterpartycore.lib.api import api_server as api_v2 from counterpartycore.lib.api import api_v1, routes # noqa: F401 +from counterpartycore.lib.public_keys import PUBLIC_KEYS from counterpartycore.lib.telemetry.clients.influxdb import TelemetryClientInfluxDB from counterpartycore.lib.telemetry.collectors.influxdb import ( TelemetryCollectorInfluxDB, ) from counterpartycore.lib.telemetry.daemon import TelemetryDaemon +from halo import Halo +from termcolor import colored, cprint logger = logging.getLogger(config.LOGGER_NAME) D = decimal.Decimal @@ -842,8 +843,13 @@ def bootstrap(no_confirm=False): # Set Constants. bootstrap_url = config.BOOTSTRAP_URL_TESTNET if config.TESTNET else config.BOOTSTRAP_URL_MAINNET + bootstrap_sig_url = ( + config.BOOTSTRAP_URL_TESTNET_SIG if config.TESTNET else config.BOOTSTRAP_URL_MAINNET_SIG + ) tar_filename = os.path.basename(bootstrap_url) + sig_filename = os.path.basename(bootstrap_sig_url) tarball_path = os.path.join(tempfile.gettempdir(), tar_filename) + sig_path = os.path.join(tempfile.gettempdir(), sig_filename) database_path = os.path.join(data_dir, config.APP_NAME) if config.TESTNET: database_path += ".testnet" @@ -876,9 +882,17 @@ def bootstrap_progress(blocknum, blocksize, totalsize): # Downloading spinner.start() urllib.request.urlretrieve(bootstrap_url, tarball_path, bootstrap_progress) # nosec B310 # noqa: S310 + urllib.request.urlretrieve(bootstrap_sig_url, sig_path) # nosec B310 # noqa: S310 spinner.stop() print(f"{OK_GREEN} {step}") + step = "Verifying signature..." + with Halo(text=step, spinner=SPINNER_STYLE): + if not any(util.verify_signature(k, sig_path, tarball_path) for k in PUBLIC_KEYS): + print("Snaptshot was not signed by any trusted keys") + sys.exit(1) + print(f"{OK_GREEN} {step}") + # TODO: check checksum, filenames, etc. step = f"Extracting database to {data_dir}..." with Halo(text=step, spinner=SPINNER_STYLE): From 140ddb5e331041eed0eac81c7a36f6d8fe7ad5f9 Mon Sep 17 00:00:00 2001 From: warrenpuffet Date: Mon, 6 May 2024 19:33:11 -0400 Subject: [PATCH 276/280] formatting --- counterparty-core/counterpartycore/server.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/counterparty-core/counterpartycore/server.py b/counterparty-core/counterpartycore/server.py index a3933834b6..69e3cf0fb2 100755 --- a/counterparty-core/counterpartycore/server.py +++ b/counterparty-core/counterpartycore/server.py @@ -15,6 +15,9 @@ import appdirs import apsw import bitcoin as bitcoinlib +from halo import Halo +from termcolor import colored, cprint + from counterpartycore.lib import ( backend, blocks, @@ -34,8 +37,6 @@ TelemetryCollectorInfluxDB, ) from counterpartycore.lib.telemetry.daemon import TelemetryDaemon -from halo import Halo -from termcolor import colored, cprint logger = logging.getLogger(config.LOGGER_NAME) D = decimal.Decimal From 2a45fa4be885b1ed5d0c57ddf113867c6e01e600 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 7 May 2024 10:57:20 +0200 Subject: [PATCH 277/280] Add Ouziel public key --- .../counterpartycore/lib/public_keys.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/counterparty-core/counterpartycore/lib/public_keys.py b/counterparty-core/counterpartycore/lib/public_keys.py index b2fb5b5729..58683c8634 100644 --- a/counterparty-core/counterpartycore/lib/public_keys.py +++ b/counterparty-core/counterpartycore/lib/public_keys.py @@ -110,4 +110,20 @@ -----END PGP PUBLIC KEY BLOCK----- """ -PUBLIC_KEYS = [PUBLIC_KEY_1] +PUBLIC_KEY_2 = """-----BEGIN PGP PUBLIC KEY BLOCK----- + +mDMEZjnlZhYJKwYBBAHaRw8BAQdA7sRVMFGIu4NQYvK6frj/pKst5RO6SkxoFnTm +zZoe9Qa0JU91emllbCBTbGFtYSA8b3V6aWVsQGNvdW50ZXJwYXJ0eS5pbz6ImQQT +FgoAQRYhBIJRtuFJfKCtMCtAftYURn6xtoynBQJmOeVmAhsDBQkSzAMABQsJCAcC +AiICBhUKCQgLAgQWAgMBAh4HAheAAAoJENYURn6xtoynkFAA/jdwCyIgitt2r8qH +qv5T3q8fUVk4o6CNqk47lkzm7mUUAP4hzT93rWwZxfXxfDgxMfLc/z/NZf2ZptqM +uwAb2WR9D7g4BGY55WYSCisGAQQBl1UBBQEBB0BS6nt1NN04uz0y6yWlFS+H68UB +BOt/FUUYvPmWCgrTfgMBCAeIfgQYFgoAJhYhBIJRtuFJfKCtMCtAftYURn6xtoyn +BQJmOeVmAhsMBQkSzAMAAAoJENYURn6xtoyndG8A/RVbAUX9/rOCzm/eaaNVglT2 +WF9jyYnWo70VAg8+AutzAQCi6cSlZxfrF/rK/xMuwsu2msrefzy4bFYiPGQIFHSY +Aw== +=8mni +-----END PGP PUBLIC KEY BLOCK----- +""" + +PUBLIC_KEYS = [PUBLIC_KEY_1, PUBLIC_KEY_2] From db0fcb8f07d5b4c597e19e0db1f9c998aef96514 Mon Sep 17 00:00:00 2001 From: Adam Krellenstein Date: Tue, 7 May 2024 12:02:54 +0200 Subject: [PATCH 278/280] Typos in release-notes-v10.1.2.md Signed-off-by: Adam Krellenstein --- release-notes/release-notes-v10.1.2.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/release-notes/release-notes-v10.1.2.md b/release-notes/release-notes-v10.1.2.md index 5843ad632d..b3d111adf5 100644 --- a/release-notes/release-notes-v10.1.2.md +++ b/release-notes/release-notes-v10.1.2.md @@ -1,6 +1,6 @@ # Release Notes - Counterparty Core v10.1.2 (2024-05-06) -This version of Counterparty Core most importantly marks the release of API v2, a new RESTful API—see the [official project documentation](https://docs.counterparty.io/docs/advanced/api-v2/node-api/). The new API is available at `/v2/`, while the old API is now available at `/v1/` in addition to `/`. +This version of Counterparty Core marks the release of API v2, a new RESTful API—see the [official project documentation](https://docs.counterparty.io/docs/advanced/api-v2/node-api/). The new API is available at `/v2/`, while the old API is now available at `/v1/` in addition to `/`. # Upgrading @@ -29,7 +29,7 @@ This release maintains full backwards-compatibility and includes no protocol cha * Set default and minimum values for Backend Poll Interval to 3.0 seconds * Update `docker-compose.yml` to use different profiles for `mainnet` and `testnet` * Check that another process is not connected to the database before starting the server -* Launches database quick check on startup if the database was not been correctly shut down +* Launch database quick check on startup if the database has not been correctly shut down * Support an additional level of verbosity with the CLI flags `-vv` * Add the `--no-telemetry` flag to disable node telemetry From 125402bb0482203713179298a6340f46250c63bb Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 7 May 2024 15:38:13 +0200 Subject: [PATCH 279/280] Fix typo --- counterparty-core/counterpartycore/lib/api/api_server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/counterparty-core/counterpartycore/lib/api/api_server.py b/counterparty-core/counterpartycore/lib/api/api_server.py index 82751be348..7033d47c9c 100644 --- a/counterparty-core/counterpartycore/lib/api/api_server.py +++ b/counterparty-core/counterpartycore/lib/api/api_server.py @@ -181,7 +181,7 @@ def execute_api_function(db, route, function_args): else: result = route["function"](**function_args) # don't cache API v1 - if route["function"].__name__ != "refirect_to_api_v1": + if route["function"].__name__ != "redirect_to_api_v1": BLOCK_CACHE[cache_key] = result if len(BLOCK_CACHE) > MAX_BLOCK_CACHE_SIZE: BLOCK_CACHE.popitem(last=False) From 0524d43d612af186406967aafd9b822a210f3385 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 7 May 2024 21:35:40 +0200 Subject: [PATCH 280/280] Fix hashes when reparsing --- counterparty-core/counterpartycore/lib/blocks.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/counterparty-core/counterpartycore/lib/blocks.py b/counterparty-core/counterpartycore/lib/blocks.py index 06f1148c64..b025439e48 100644 --- a/counterparty-core/counterpartycore/lib/blocks.py +++ b/counterparty-core/counterpartycore/lib/blocks.py @@ -839,7 +839,16 @@ def reparse(db, block_index=0): "difficulty": block["difficulty"], }, ) - parse_block(db, block["block_index"], block["block_time"], reparsing=True) + previous_block = ledger.get_block(db, block["block_index"] - 1) + parse_block( + db, + block["block_index"], + block["block_time"], + previous_ledger_hash=previous_block["ledger_hash"], + previous_txlist_hash=previous_block["txlist_hash"], + previous_messages_hash=previous_block["messages_hash"], + reparsing=True, + ) block_parsed_count += 1 message = generate_progression_message( block,