diff --git a/docs/source/daemon.rst b/docs/source/daemon.rst index 65eeffa..acabdd7 100644 --- a/docs/source/daemon.rst +++ b/docs/source/daemon.rst @@ -151,6 +151,47 @@ The second transaction failed because it used the same inputs as the previous on checks all incoming transactions for possible double-spends and rejects them if such conflict is discovered. +Other RPC Commands +------------------ + +Any RPC commands not available in the Daemon class, are likely available in the JSONRPCDaemon +class. The official Monero Daemon RPC Documentation can be found +`here `. At the time of +writing, all the RPC commands from the documentation have been implemented in JSONRPCDaemon, with +the exception of any .bin commands, `/get_txpool_backlog`, and `/get_output_distribution`. These +methods share the same name as their corresponding RPC names, and unlike the Daemon methods, the +methods in JSONRPCDaemon are designed to be lower-level. As such, the return values of these +methods reflect the raw JSON objects returned by the daemon. An example: + +.. code-block:: python + [In 20]: from monero.backends.jsonrpc import JSONRPCDaemon + + [In 21]: daemon = JSONRPCDaemon(host='192.168.0.50') + + [In 22]: sync_info = daemon.sync_info() + + [In 23]: sync_info['height'] + [Out 23]: 2304844 + + [In 24]: daemon.get_bans() + [Out 24]: + { + "bans": [ + { + "host": "145.239.118.5", + "ip": 91680657, + "seconds": 72260 + }, + { + "host": "146.59.156.116", + "ip": 1956395922, + "seconds": 69397 + } + ], + "status": "OK", + "untrusted": False + } + API reference ------------- diff --git a/monero/backends/jsonrpc/daemon.py b/monero/backends/jsonrpc/daemon.py old mode 100644 new mode 100755 index 1569770..5b73300 --- a/monero/backends/jsonrpc/daemon.py +++ b/monero/backends/jsonrpc/daemon.py @@ -1,17 +1,20 @@ from __future__ import unicode_literals import binascii from datetime import datetime +from decimal import Decimal +import ipaddress import json import logging import requests import six +from ... import address from ... import exceptions from ...block import Block from ...const import NET_MAIN, NET_TEST, NET_STAGE -from ...numbers import from_atomic +from ...numbers import from_atomic, to_atomic from ...transaction import Transaction -from .exceptions import RPCError, Unauthorized +from .exceptions import RPCError, MethodNotFound, Unauthorized _log = logging.getLogger(__name__) @@ -22,7 +25,10 @@ RESTRICTED_MAX_TRANSACTIONS = 100 class JSONRPCDaemon(object): """ - JSON RPC backend for Monero daemon + JSON RPC backend for Monero daemon. + The offical documentation for the Monero Daemon RPC Protocol can be found at the link below. + https://www.getmonero.org/resources/developer-guides/daemon-rpc.html#on_get_block_hash + Much of the in-code documentation of this class is derived from this document. :param protocol: `http` or `https` :param host: host name or IP @@ -35,7 +41,21 @@ class JSONRPCDaemon(object): to enable it when you need to retrieve transaction binary blobs. """ + _METHOD_NOT_FOUND_CODE = -32601 + _KNOWN_LOG_CATEGORIES = [ + '*', 'default', 'net', 'net.http', 'net.p2p', + 'logging', 'net.throttle', 'blockchain.db', 'blockchain.db.lmdb', 'bcutil', + 'checkpoints', 'net.dns', 'net.dl', 'i18n', 'perf', + 'stacktrace', 'updates', 'account', 'cn', 'difficulty', + 'hardfork', 'miner', 'blockchain', 'txpool', 'cn.block_queue', + 'net.cn', 'daemon', 'debugtools.deserialize', 'debugtools.objectsizes', 'device.ledger', + 'wallet.gen_multisig', 'multisig', 'bulletproofs', 'ringct', 'daemon.rpc', + 'wallet.simplewallet', 'WalletAPI', 'wallet.ringdb', 'wallet.wallet2', 'wallet.rpc' + 'tests.core'] + _KNOWN_LOG_LEVELS = ['FATAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG', 'TRACE'] + _net = None + _restricted = None def __init__(self, protocol='http', host='127.0.0.1', port=18081, path='/json_rpc', user='', password='', timeout=30, verify_ssl_certs=True, proxy_url=None, @@ -52,14 +72,6 @@ class JSONRPCDaemon(object): self.proxies = {protocol: proxy_url} self.prune_transactions = prune_transactions - def _set_net(self, info): - if info['mainnet']: - self._net = NET_MAIN - if info['testnet']: - self._net = NET_TEST - if info['stagenet']: - self._net = NET_STAGE - def info(self): info = self.raw_jsonrpc_request('get_info') self._set_net(info) @@ -71,6 +83,12 @@ class JSONRPCDaemon(object): self.info() return self._net + def restricted(self): + if self._restricted is None: + self._set_restricted() + + return self._restricted + def send_transaction(self, blob, relay=True): res = self.raw_request('/sendrawtransaction', { 'tx_as_hex': six.ensure_text(binascii.hexlify(blob)), @@ -135,7 +153,8 @@ class JSONRPCDaemon(object): Returns a list of transactions for given hashes. Automatically chunks the request into amounts acceptable by a restricted RPC server. """ - hashes = list(hashes) + + hashes = self._validate_hashlist(hashes) result = [] while len(hashes): result.extend( @@ -145,36 +164,14 @@ class JSONRPCDaemon(object): hashes = hashes[RESTRICTED_MAX_TRANSACTIONS:] return result - def _do_get_transactions(self, hashes, prune): - res = self.raw_request('/get_transactions', { - 'txs_hashes': hashes, - 'decode_as_json': True, - 'prune': prune}) - if res['status'] != 'OK': - raise exceptions.BackendException(res['status']) - txs = [] - for tx in res.get('txs', []): - as_json = json.loads(tx['as_json']) - fee = as_json.get('rct_signatures', {}).get('txnFee') - txs.append(Transaction( - hash=tx['tx_hash'], - fee=from_atomic(fee) if fee else None, - height=None if tx['in_pool'] else tx['block_height'], - timestamp=datetime.fromtimestamp( - tx['block_timestamp']) if 'block_timestamp' in tx else None, - blob=binascii.unhexlify(tx['as_hex']) or None, - output_indices=tx['output_indices'] if ('output_indices' in tx) else None, - json=as_json)) - return txs - - def raw_request(self, path, data): + def raw_request(self, path, data=None): hdr = {'Content-Type': 'application/json'} _log.debug(u"Request: {path}\nData: {data}".format( path=path, data=json.dumps(data, indent=2, sort_keys=True))) auth = requests.auth.HTTPDigestAuth(self.user, self.password) rsp = requests.post( - self.url + path, headers=hdr, data=json.dumps(data), auth=auth, + self.url + path, headers=hdr, data=json.dumps(data) if data else None, auth=auth, timeout=self.timeout, verify=self.verify_ssl_certs, proxies=self.proxies) if rsp.status_code != 200: raise RPCError("Invalid HTTP status {code} for path {path}.".format( @@ -202,14 +199,1301 @@ class JSONRPCDaemon(object): raise RPCError("Invalid HTTP status {code} for method {method}.".format( code=rsp.status_code, method=method)) - result = rsp.json() + + try: + result = rsp.json() + except ValueError as e: + _log.error(u"Could not parse JSON response from '{url}' during method '{method}'. Response:\n{resp}".format( + url=self.url, method=method, resp=rsp.text)) + raise RPCError("Daemon returned an unreadable JSON response. It may contain unparseable binary characters.") + _ppresult = json.dumps(result, indent=2, sort_keys=True) _log.debug(u"Result:\n{result}".format(result=_ppresult)) if 'error' in result: err = result['error'] + code = err['code'] + msg = err['message'] + + if code == self._METHOD_NOT_FOUND_CODE: + raise MethodNotFound('Daemon method "{}" not found'.format(method)) + _log.error(u"JSON RPC error:\n{result}".format(result=_ppresult)) raise RPCError( "Method '{method}' failed with RPC Error of unknown code {code}, " - "message: {message}".format(method=method, data=data, result=result, **err)) + "message: {msg}".format(method=method, data=data, result=result, code=code, msg=msg)) + elif 'status' in result['result'] and result['result']['status'] == 'BUSY': + raise exceptions.DaemonIsBusy( + "In JSONRPC method '{method}': daemon at {url} is in BUSY mode. RPC command results will be unpredictable " + "until daemon is fully synced.".format(method=method, url=self.url)) + return result['result'] + + # JSON RPC Methods (https://www.getmonero.org/resources/developer-guides/daemon-rpc.html#json-rpc-methods) + + def get_block_count(self): + """ + Look up how many blocks are in the longest chain known to the node. + + Output: + { + "count": unsigned int; Number of blocks in longest chain seen by the node. + "status": str; General RPC error code. "OK" means everything looks good. + } + """ + + return self.raw_jsonrpc_request('get_block_count') + + def on_get_block_hash(self, height): + """ + Look up a block's hash by its height. + + :param int height: height of the block + + Output: str; block hash + """ + + height = int(height) + + if height < 0: + raise ValueError('height < 0') + + return self.raw_jsonrpc_request('on_get_block_hash', params=[height]) + + def get_block_template(self, wallet_address, reserve_size): + """ + Get a block template on which mining a new block. + + :param str wallet_address: Address of wallet to receive coinbase transactions for successful block. + :param int reserve_size: number of bytes to make reserved space, maximum is 127 + + Output: + { + "blocktemplate_blob": str; Blob on which to try to mine a new block. + "blockhashing_blob": str; Blob on which to try to find a valid nonce. + "difficulty": unsigned int; Bottom 64 bits of difficulty of next block. + "difficuly_top64": unsigned int; Top 64 bits of difficulty of next block. + "wide_difficulty": str; hex str of difficulty of next block. + "expected_reward": unsigned int; Coinbase reward expected to be received if block is successfully mined. + "height": unsigned int; Height on which to mine. + "prev_hash": str; Hash of the most recent block on which to mine the next block. + "reserved_offset": unsigned int; Offset in bytes to reserved space in block blob. + "seed_hash": str; + "seed_height": unsigned int; + "status": str; General RPC error code. "OK" means everything looks good. + "untrusted": bool; True for bootstrap mode, False for full sync mode + } + """ + + try: + address.address(wallet_address) + except ValueError: + raise ValueError('wallet_address is not in a recognized address form') + + if reserve_size not in range(128): + raise ValueError('reserve_size {} is out of bounds'.format(reserve_size)) + + return self.raw_jsonrpc_request('get_block_template', params={ + 'wallet_address': wallet_address, + 'reserve_size': reserve_size}) + + def submit_block(self, blobs): + """ + Submit a mined block to the network. + + :param list blobs: list of block hex strs or raw bytes objects + + Output: + { + "status": str; Block submit status + } + """ + + if isinstance(blobs, (bytes, str)): + blobs = [blobs] + + blobs = [binascii.hexlify(b).decode() if isinstance(b, bytes) else six.ensure_text(b) for b in blobs] + + return self.raw_jsonrpc_request('submit_block', params=blobs) + + def get_last_block_header(self): + """ + Block header information for the most recent block is easily retrieved with this method. + + Output: + { + "block_header": { + "block_size": unsigned int; The block size in bytes. + "depth": unsigned int; The number of blocks succeeding this block on the blockchain. A larger number means an older block. + "difficulty" unsigned int; The strength of the Monero network based on mining power. + "hash": str; The hash of this block. + "height": unsigned int; The number of blocks preceding this block on the blockchain. + "major_version": unsigned int; The major version of the monero protocol at this block height. + "minor_version": unsigned int; The minor version of the monero protocol at this block height. + "nonce": unsigned int; a cryptographic random one-time number used in mining a Monero block. + "num_txes": unsigned int; Number of transactions in the block, not counting the coinbase tx. + "orphan_status": bool; Usually false. If true, this block is not part of the longest chain. + "prev_hash": str; The hash of the block immediately preceding this block in the chain. + "reward": unsigned int; The amount of new atomic units generated in this block and rewarded to the miner. Note: 1 XMR = 1e12 atomic units. + "timestamp": unsigned int; The unix time at which the block was recorded into the blockchain. + } + "status": str; General RPC error code. "OK" means everything looks good. + "untrusted": bool; True for bootstrap mode, False for full sync mode + } + """ + + return self.raw_jsonrpc_request('get_last_block_header') + + def get_block_header_by_hash(self, blk_hash): + """ + Block header information can be retrieved using a block's hash + + :param str blk_hash: block hash + + Output: + { + "block_header": { + "block_size": unsigned int; The block size in bytes. + "depth": unsigned int; The number of blocks succeeding this block on the blockchain. A larger number means an older block. + "difficulty" unsigned int; The strength of the Monero network based on mining power. + "hash": str; The hash of this block. + "height": unsigned int; The number of blocks preceding this block on the blockchain. + "major_version": unsigned int; The major version of the monero protocol at this block height. + "minor_version": unsigned int; The minor version of the monero protocol at this block height. + "nonce": unsigned int; a cryptographic random one-time number used in mining a Monero block. + "num_txes": unsigned int; Number of transactions in the block, not counting the coinbase tx. + "orphan_status": bool; Usually false. If true, this block is not part of the longest chain. + "prev_hash": str; The hash of the block immediately preceding this block in the chain. + "reward": unsigned int; The amount of new atomic units generated in this block and rewarded to the miner. Note: 1 XMR = 1e12 atomic units. + "timestamp": unsigned int; The unix time at which the block was recorded into the blockchain. + } + "status": str; General RPC error code. "OK" means everything looks good. + "untrusted": bool; True for bootstrap mode, False for full sync mode + } + """ + + if not self._is_valid_256_hex(blk_hash): + raise ValueError('blk_hash "{}" is not a valid hash'.format(blk_hash)) + + return self.raw_jsonrpc_request('get_block_header_by_hash', params={'hash': blk_hash}) + + def get_block_header_by_height(self, height): + """ + Block header information can be retrieved using a block's height + + :param int height: block height + + Output: + { + "block_header": { + "block_size": unsigned int; The block size in bytes. + "depth": unsigned int; The number of blocks succeeding this block on the blockchain. A larger number means an older block. + "difficulty" unsigned int; The strength of the Monero network based on mining power. + "hash": str; The hash of this block. + "height": unsigned int; The number of blocks preceding this block on the blockchain. + "major_version": unsigned int; The major version of the monero protocol at this block height. + "minor_version": unsigned int; The minor version of the monero protocol at this block height. + "nonce": unsigned int; a cryptographic random one-time number used in mining a Monero block. + "num_txes": unsigned int; Number of transactions in the block, not counting the coinbase tx. + "orphan_status": bool; Usually false. If true, this block is not part of the longest chain. + "prev_hash": str; The hash of the block immediately preceding this block in the chain. + "reward": unsigned int; The amount of new atomic units generated in this block and rewarded to the miner. Note: 1 XMR = 1e12 atomic units. + "timestamp": unsigned int; The unix time at which the block was recorded into the blockchain. + } + "status": str; General RPC error code. "OK" means everything looks good. + "untrusted": bool; True for bootstrap mode, False for full sync mode + } + """ + + if height < 0: + raise ValueError('height < 0') + + return self.raw_jsonrpc_request('get_block_header_by_height', params={'height': height}) + + def get_block_headers_range(self, start_height, end_height): + """ + Similar to get_block_header_by_height, but for a range of blocks. The range is inclusive, + so the number of blocks returned will be equal to end_height - start_height + 1 + + :param int start_height: starting height + :param int end_height: ending height + + Output: + { + "headers": list; block_header structures (get_last_block_header) for the blocks in height range. + "status": str; General RPC error code. "OK" means everything looks good. + "untrusted": bool; True for bootstrap mode, False for full sync mode + } + """ + + start_height = int(start_height) + end_height = int(end_height) + + if start_height < 0: + raise ValueError('start_height < 0') + if end_height < start_height: + raise ValueError('end_height < start_height') + + return self.raw_jsonrpc_request('get_block_headers_range', params={ + 'start_height': start_height, + 'end_height': end_height}) + + def get_block(self, height=None, hash=None): + """ + Full block information can be retrieved by either block height or hash. Either height OR + hash must be specified, but not both. + + :param int height: block height + :param str hash: block hash + + Output: + { + "blob": str; Hexadecimal blob of block information. + "block_header": A structure containing block header information. See get_last_block_header. + "json": str; JSON formatted string details: + "major_version": unsigned int; The major version of the monero protocol at this block height. + "minor_version": unsigned int; The minor version of the monero protocol at this block height. + "timestamp": unsigned int; The unix time at which the block was recorded into the blockchain. + "prev_id": str; The hash of the block immediately preceding this block in the chain. + "nonce": unsigned int; a cryptographic random one-time number used in mining a Monero block. + "miner_tx": { + "version": unsigned int; Transaction version number. + "unlock_time": unsigned int; The block height when the coinbase transaction becomes spendable. + "vin": list; List of transaction inputs with the following structure: + { + "gen": { (note: miner txs are coinbase txs or "gen") + "height": This block height, a.k.a. when the coinbase is generated. + } + } + "vout": list; List of transaction outputs with the following structures: + { + "amount"; unsigned int; The amount of the output, in atomic units. + "target": { + "key": str; public key of one-time output of miner tx. + } + } + "extra"; list; List of integers 0-255, usually the "transaction ID" but can be used to include byte string. + "rct_signatures" - Contain signatures of tx signers. Coinbased txs do not have signatures. + "miner_tx_hash": str; hash of the coinbase transaction which belongs to this block. + "tx_hashes": list; List of str hex hashes of non-coinbase transactions in the block. + "status": str; General RPC error code. "OK" means everything looks good. + "untrusted": bool; True for bootstrap mode, False for full sync mode. + } + """ + + if height is None and hash is None: + raise ValueError('height or hash must be provided') + elif height is not None and hash is not None: + raise ValueError('height and hash can not both be provided') + + if height is not None: + if height < 0: + raise ValueError('{} is not a valid height'.format(height)) + + params = {'height': int(height)} + else: + if not self._is_valid_256_hex(hash): + raise ValueError('blk_hash "{}" is not a valid hash'.format(hash)) + + params = {'hash': hash} + + return self.raw_jsonrpc_request('get_block', params=params) + + def get_connections(self): + """ + Retrieve information about incoming and outgoing connections to your node. + + Output: + { + "connections": list; List of all connections and their info with the following structure: + { + "address": str; The peer's address, actually IPv4 & port + "avg_download": unsigned int; Average bytes of data downloaded by node. + "avg_upload": unsigned int; Average bytes of data uploaded by node. + "connection_id": str; The connection ID + "current_download": unsigned int; Current bytes downloaded by node. + "current_upload": unsigned int; Current bytes uploaded by node. + "height": unsigned int; The peer height + "host": str; The peer host + "incoming": bool; Is the node getting information from your node? + "ip": str; The node's IP address. + "live_time": unsigned int + "local_ip": bool + "localhost": bool + "peer_id": str; The node's ID on the network. + "port": str; The port that the node is using to connect to the network. + "recv_count": unsigned int + "recv_idle_time": unsigned int + "send_count": unsigned int + "send_idle_time": unsigned int + "state": str + "support_flags": unsigned int + } + } + """ + + return self.raw_jsonrpc_request('get_connections') + + def get_info(self): + """ + Retrieve general information about the state of your node and the network. + + Output: + { + "alt_blocks_count": unsigned int; Number of alternative blocks to main chain. + "block_size_limit": unsigned int; Maximum allowed block size + "block_size_median": unsigned int; Median block size of latest 100 blocks + "bootstrap_daemon_address": str; bootstrap node to give immediate usability to wallets while syncing by proxying RPC to it. + "busy_syncing": bool; States if new blocks are being added (true) or not (false). + "cumulative_difficulty": unsigned int; Cumulative difficulty of all blocks in the blockchain. + "difficulty": unsigned int; Network difficulty (analogous to the strength of the network) + "free_space": unsigned int; Available disk space on the node. + "grey_peerlist_size": unsigned int; Grey Peerlist Size + "height": unsigned int; Current length of longest chain known to daemon. + "height_without_bootstrap": unsigned int; Current length of the local chain of the daemon. + "incoming_connections_count": unsigned int; Number of peers connected to and pulling from your node. + "mainnet": bool; States if the node is on the mainnet (true) or not (false). + "offline": bool; States if the node is offline (true) or online (false). + "outgoing_connections_count": unsigned int; Number of peers that you are connected to and getting information from. + "rpc_connections_count": unsigned int; Number of RPC client connected to the daemon (Including this RPC request). + "stagenet": bool; States if the node is on the stagenet (true) or not (false). + "start_time": unsigned int; Start time of the daemon, as UNIX time. + "status": str; General RPC error code. "OK" means everything looks good. + "synchronized": bool; States if the node is synchronized (true) or not (false). + "target": unsigned int; Current target for next proof of work. + "target_height": unsigned int; The height of the next block in the chain. + "testnet": bool; States if the node is on the testnet (true) or not (false). + "top_block_hash": str; Hash of the highest block in the chain. + "tx_count": unsigned int; Total number of non-coinbase transaction in the chain. + "tx_pool_size": unsigned int; Number of transactions that have been broadcast but not included in a block. + "untrusted": bool; True for bootstrap mode, False for full sync mode. + "was_bootstrap_ever_used": bool; States if a bootstrap node has ever been used since the daemon started. + "white_peerlist_size": unsigned int; White Peerlist Size + } + """ + + return self.raw_jsonrpc_request('get_info') + + def hard_fork_info(self): + """ + Look up information regarding hard fork voting and readiness. + + Output: + { + "earliest_height": unsigned int; Block height at which hard fork would be enabled if voted in. + "enabled": bool; Tells if hard fork is enforced. + "state": unsigned int; Current hard fork state: 0 (There is likely a hard fork), 1 (An update is needed to fork properly), or 2 (Everything looks good). + "status": str; General RPC error code. "OK" means everything looks good. + "threshold": unsigned int; Minimum percent of votes to trigger hard fork. Default is 80. + "version": unsigned int; The major block version for the fork. + "votes": unsigned int; Number of votes towards hard fork. + "voting": unsigned int; Hard fork voting status. + "window": unsigned int; Number of blocks over which current votes are cast. Default is 10080 blocks. + } + """ + + return self.raw_jsonrpc_request('hard_fork_info') + + def set_bans(self, ip, ban, seconds=None): + """ + Ban (or unban) other nodes by IP for a certain length of time. + + :param ip: ip address of node to ban in two forms: 'a.b.c.d' str or 32-bit unsigned integer + :param bool ban: Whether to ban (True) or unban (False) + :param int seconds: Number of seconds to ban. Optional if "ban" is False + + Notes: + * Params "ip", "ban", and "seconds" can be single elements or they can be iterables of the same length. For example: + + ips = ['229.52.8.67', 611282986] + should_ban = [True, False] + seconds = [10000, None] + daemon.set_bans(ips, should_ban, seconds) + + * "seconds" can be 0 or None if "ban" is False + + Output: + { + "status": str; General RPC error code. "OK" means everything looks good. Any other value means that something went wrong. + } + """ + + if isinstance(ip, (str, int)): # If single element paramters + user_bans = [{ + 'ip': ip, + 'ban': ban, + 'seconds': seconds + }] + else: # If params are iterables, contrust the list of ban entries + if not (len(ip) == len(ban) == len(seconds)): + raise ValueError('"ip", "ban", and "seconds" are not the same length') + + user_bans = [{ + 'ip': ip[i], + 'ban': ban[i], + 'seconds': seconds[i] + } for i in range(len(ip))] + + # Construct the bans parameter to be passed to the RPC command + bans = [] + for ban_entry in user_bans: + curr_ip = ban_entry['ip'] + curr_ban = bool(ban_entry['ban']) + curr_seconds = ban_entry['seconds'] + + # validate IP + ipaddress.IPv4Address(curr_ip) + + if curr_ban and curr_seconds is None: + raise ValueError('Whenever "ban" is True, "seconds" must not be None') + elif curr_seconds is not None and curr_seconds < 0: + raise ValueError('"seconds" can not be less than zero') + + ban = {} + if isinstance(curr_ip, int): + ban['ip'] = curr_ip + else: + ban['host'] = curr_ip + if curr_seconds is not None: + ban['seconds'] = curr_seconds + ban['ban'] = curr_ban + + bans.append(ban) + + return self.raw_jsonrpc_request('set_bans', params={'bans': bans}) + + def get_bans(self): + """ + Get list of ban entries. For structure of ban entires, see documentation of set_bans method. + + Output: + { + "bans": list; banned nodes with following structure + { + "host": str; Banned host (IP in A.B.C.D form). + "ip": unsigned int; Banned IP address, in Int format. + "seconds": unsigned int; Local Unix time that IP is banned until. + } + "status": str; General RPC error code. "OK" means everything looks good. + } + """ + + resp = self.raw_jsonrpc_request('get_bans') + + # When there are no ban entries, the node returns a responses with no "bans" field. + # This is counterintuitive for the user, so I add an empty field if it's not provided. + if 'bans' not in resp: + resp['bans'] = [] + + return resp + + def flush_txpool(self, txids=None): + """ + Flush tx ids from transaction pool + + :param list txids: list of str; transactions IDs to flush from mempool (all tx ids flushed if empty). + + Output: + { + "status": str; General RPC error code. "OK" means everything looks good. Any other value means that something went wrong. + } + """ + + txids = self._validate_hashlist(txids) + + resp = self.raw_jsonrpc_request('flush_txpool', params={'txids': txids}) + + if 'transactions' not in resp: + resp['transactions'] = [] + + return resp + + def get_output_histogram(self, amounts, min_count=None, max_count=None, unlocked=None, recent_cutoff=None): + """ + Get a histogram of output amounts. For all amounts (possibly filtered by parameters), gives the number + of outputs on the chain for that amount. RingCT outputs counts as 0 amount. + + :param list amounts: list of unsigned ints in atomic units, or Decimals as full monero amounts + :param int min_count: lower bound for output number + :param int max_count: upper bound for output number + :param bool unlocked: whether to count only unlocked + :pramrm int recent_cutoff: unsigned int + + + Output: + { + "histogram": list; histogram entries with the following structure + { + "amount": unsigned int; Output amount in atomic units. + "total_instances": unsigned int; number of total instances for given amount. + "unlocked_instances": unsigned int; number of unlocked instances for given amount. + "recent_instances": unsigned int; number of recent instances for given amount. + } + "status - string; General RPC error code. "OK" means everything looks good. + "untrusted": bool; True for bootstrap mode, False for full sync mode. + } + """ + + # Coerce amounts paramter + if isinstance(amounts, (int, Decimal)): + amounts = [to_atomic(amounts) if isinstance(amounts, Decimal) else amounts] + elif amounts is None: + raise ValueError('amounts is None') + + # Construct RPC parameters + params = {'amounts': amounts} + if min_count is not None: + params['min_count'] = int(min_count) + if max_count is not None: + params['max_count'] = int(max_count) + if unlocked is not None: + params['unlocked'] = bool(unlocked) + if recent_cutoff is not None: + params['recent_cutoff'] = int(recent_cutoff) + + return self.raw_jsonrpc_request('get_output_histogram', params=params) + + def get_coinbase_tx_sum(self, height, count): + """ + Get the coinbase amount and the fees amount for n last blocks starting at particular height. + + :param int height: unsigned int; block height from which getting the amounts + :param int count: unsigned int; number of blocks to include in the sum + + Output: + { + "emission_amount": unsigned int; amount of coinbase reward in atomic units + "fee_amount": unsigned int; amount of fees in atomic units + "status": str; General RPC error code. "OK" means everything looks good. + } + """ + + if height < 0: + raise ValueError('height < 0') + elif count < 0: + raise ValueError('count < 0') + + return self.raw_jsonrpc_request('get_coinbase_tx_sum', params={'height': height, 'count': count}) + + def get_version(self): + """ + Get the node's current version. + + Output: + { + "version": unsigned int; + "status": str; General RPC error code. "OK" means everything looks good. + "untrusted": bool; True for bootstrap mode, False for full sync mode. + } + """ + return self.raw_jsonrpc_request('get_version') + + def get_fee_estimate(self, grace_blocks=None): + """ + Gives an estimation on fees per byte. + + :param int grace_blocks: Optional; number of previous blocks to include in fee calculation + + Output: + { + "fee": unsigned int; Amount of fees estimated per byte in atomic units + "quantization_mask": unsigned int; Final fee should be rounded up to an even multiple of this value + "status": str; General RPC error code. "OK" means everything looks good. + "untrusted": bool; True for bootstrap mode, False for full sync mode. + } + """ + + if not isinstance(grace_blocks, (int, type(None))): + raise TypeError("grace_blocks is not an int") + elif grace_blocks is not None and grace_blocks < 0: + raise ValueError("grace_blocks < 0") + + params = {'grace_blocks': grace_blocks} if grace_blocks else None + return self.raw_jsonrpc_request('get_fee_estimate', params=params) + + def get_alternate_chains(self): + """ + Display alternative chains seen by the node. + + + Output: + { + "chains": list; chain informations with the following structure + { + "block_hash": str; the block hash of the first diverging block of this alternative chain. + "difficulty": unsigned int; the cumulative difficulty of all blocks in the alternative chain. + "height": unsigned int; the block height of the first diverging block of this alternative chain. + "length": unsigned int; the length in blocks of this alternative chain, after divergence. + } + "status": str; General RPC error code. "OK" means everything looks good. + } + + """ + + return self.raw_jsonrpc_request('get_alternate_chains') + + def relay_tx(self, txids): + """ + Relay a list of transaction IDs. + + :param list txids: list of transaction IDs to relay + + Output: + { + "status": str; General RPC error code. "OK" means everything looks good. Any other value means that something went wrong. + } + """ + + txids = self._validate_hashlist(txids) + + return self.raw_jsonrpc_request('relay_tx', params={'txids': txids}) + + def sync_info(self): + """ + Get synchronisation information. + + Output: + { + "height": unsigned int; current height + "peers": list; peer informations with the following structure + { + "info": dict; structure of connection info, as defined in get_connections + } + "spans": list; span informations with the follwing structure (absent if node is fully synced) + { + "connection_id": str; connection ID. + "nblocks": unsigned int; number of blocks in that span. + "rate": unsigned int; connection rate. + "remote_address": str; peer address the node is downloading (or has downloaded) the span from. + "size": unsigned int; total number of bytes in that span's blocks (including txes). + "speed": unsigned int; connection speed. + "start_block_height": unsigned int; block height of the first block in that span. + } + "status": str; General RPC error code. "OK" means everything looks good. + "target_height": unsigned int; target height the node is syncing from (will be undefined if node is fully synced) + } + """ + + return self.raw_jsonrpc_request('sync_info') + + # Other RPC Methods (https://www.getmonero.org/resources/developer-guides/daemon-rpc.html#other-daemon-rpc-calls) + + def get_height(self): + """ + Get the node's current height. + + Outputs: + { + "height": unsigned int; Current length of longest chain known to daemon. + "status": str; General RPC error code. "OK" means everything looks good. + "untrusted": bool; True for bootstrap mode, False for full sync mode. + } + """ + + return self.raw_request('/get_height') + + def get_transactions(self, tx_hashes, decode_as_json=False, prune=False): + """ + Look up one or more transactions by hash. + + :param list txs_hashes: List of transaction hashes to look up. + :param bool decode_as_json: Optional (false by default). If true, the returned tx info will be decoded into JSON. + :param bool prune: Optional (false by default). If true, prune blob data, greatly cutting down on response size. + + + Output: + { + "missed_tx": list; (Optional - returned if not empty) Transaction hashes that could not be found. + "status": str; General RPC error code. "OK" means everything looks good. + "txs": list; transaction informations with the following structure + { + "as_hex": stri; Full transaction information as a hex string. + "as_json": json str; JSON formatted as follows + { + "version": unsigned int; Transaction version + "unlock_time": unsigned int; If not 0, this tells when a transaction output is spendable. + "vin": list; transaction inputs with the following structure + { + "key": + { + "amount": unsigned int; The amount of the input, in atomic units. + "key_offsets": list; integer offets to the input. + "k_image": str; The key image for the given input + } + + } + "vout": list; transaction inputs with the following structure + { + "amount": unsigned int; Amount of transaction output, in atomic units. + "target": + { + "key": str; The stealth public key of the receiver. + } + } + "extra"; list; List of integers 0-255, usually the "transaction ID" but can be used to include byte string. + signatures - List of signatures used in ring signature to hide the true origin of the transaction. + } + "block_height": unsigned int; block height including the transaction + "block_timestamp": unsigned int; Unix time at chich the block has been added to the blockchain + "double_spend_seen": boolean; States if the transaction is a double-spend (true) or not (false) + "in_pool": bool; States if the transaction is in pool (true) or included in a block (false) + "output_indices": list; list of the tx's output's globals indexes as unsigned ints + "tx_hash": str; transaction hash + } + "txs_as_hex": str; Full transaction information as a hex string (old compatibility parameter) + "txs_as_json": json str; (Optional - returned if set in inputs. Old compatibility parameter) List of transaction as in as_json above: + } + """ + + tx_hashes = self._validate_hashlist(tx_hashes) + + return self.raw_request('/get_transactions', data={ + 'txs_hashes': tx_hashes, + 'decode_as_json': bool(decode_as_json), + 'prune': bool(prune)}) + + def get_alt_blocks_hashes(self): + """ + Get the known blocks hashes which are not on the main chain. + + Output: + { + "blks_hashes"; list; alternative blocks hashes to main chain + "status": str; General RPC error code. "OK" means everything looks good. + "untrusted": bool; True for bootstrap mode, False for full sync mode. + } + """ + + return self.raw_request('/get_alt_blocks_hashes') + + def is_key_image_spent(self, key_images): + """ + Check if outputs have been spent using the key image associated with the output. + + :param list key_images: List of key image hex strings to check. + + Key Image Status Legend: + 0 = unspent + 1 = spent in blockchain + 2 = spent in transaction pool + + Outputs: + { + "spent_status": list of unsigned ints; List of statuses for each image checked. + "status": str; General RPC error code. "OK" means everything looks good. + "untrusted": bool; True for bootstrap mode, False for full sync mode. + } + """ + + key_images = self._validate_hashlist(key_images) + + return self.raw_request('/is_key_image_spent', data={'key_images': key_images}) + + def send_raw_transaction(self, tx_as_hex, do_not_relay=False): + """ + Broadcast a raw transaction to the network. + + :param str tx_as_hex: Full transaction information as hexidecimal string. + :param bool do_not_relay: Optional; Stop relaying transaction to other nodes (default is false). + + Output: + { + "double_spend": bool; Transaction is a double spend (true) or not (false). + "fee_too_low": bool; Fee is too low (true) or OK (false). + "invalid_input": bool; Input is invalid (true) or valid (false). + "invalid_output": bool; Output is invalid (true) or valid (false). + "low_mixin": bool; Mixin count is too low (true) or OK (false). + "not_rct": bool; Transaction is a standard ring transaction (true) or a ring confidential transaction (false). + "not_relayed": bool; Transaction was not relayed (true) or relayed (false). + "overspend": bool; Transaction uses more money than available (true) or not (false). + "reason": str; Additional information. Currently empty or "Not relayed" if transaction was accepted but not relayed. + "too_big": bool; Transaction size is too big (true) or OK (false). + "status": str; General RPC error code. "OK" means everything looks good. + "untrusted": bool; True for bootstrap mode, False for full sync mode. + } + """ + + tx_as_hex = six.ensure_text(tx_as_hex) + + return self.raw_request('/send_raw_transaction', data={ + 'tx_as_hex': tx_as_hex, + 'do_not_relay': do_not_relay}) + + def start_mining(self, do_background_mining, ignore_battery, miner_address, threads_count): + """ + Start mining on the daemon. + + :param bool do_background_mining: States if the mining should run in background (true) or foreground (false). + :param bool ignore_battery: States if batery state (on laptop) should be ignored (true) or not (false). + :param str miner_address: Account address to mine to. + :param int threads_count: Number of mining thread to run. + + Output: + { + "status": str; General RPC error code. "OK" means everything looks good. Any other value means that something went wrong. + } + """ + + if isinstance(miner_address, address.Address): + miner_address = repr(miner_address) + else: + try: + converted_addr = address.address(miner_address) + except ValueError: + raise ValueError('miner_address "{}" does not match any recognized address format'.format(miner_address)) + + if not isinstance(converted_addr, address.Address): + raise ValueError('miner_address must be a "standard" monero address (i.e. it must start with a "4")') + + if not isinstance(threads_count, int): + raise TypeError("threads_count must be an int") + + if threads_count < 0: + raise ValueError('threads_count < 0') + + return self.raw_request('/start_mining', data={ + 'do_background_mining': bool(do_background_mining), + 'ignore_battery': bool(ignore_battery), + 'miner_address': miner_address, + 'threads_count': threads_count}) + + def stop_mining(self): + """ + Stop mining on the daemon. + + Output: + { + "status": str; General RPC error code. "OK" means everything looks good. Any other value means that something went wrong. + } + """ + + return self.raw_request('/stop_mining') + + def mining_status(self): + """ + Get the mining status of the daemon. + + Output: + { + "active": bool; States if mining is enabled (true) or disabled (false). + "address": str; Account address daemon is mining to. Empty if not mining. + "is_background_mining_enabled": bool; States if the mining is running in background (true) or foreground (false). + "speed": unsigned int; Mining power in hashes per seconds. + "threads_count": unsigned int; Number of running mining threads. + "status": str; General RPC error code. "OK" means everything looks good. Any other value means that something went wrong. + } + """ + + return self.raw_request('/mining_status') + + def save_bc(self): + """ + Save the blockchain. The blockchain does not need saving and is always saved when modified, however it does a sync to + flush the filesystem cache onto the disk for safety purposes against Operating System or Harware crashes. + + Output: + { + "status": str; General RPC error code. "OK" means everything looks good. Any other value means that something went wrong. + } + """ + + return self.raw_request('/save_bc') + + def get_peer_list(self): + """ + Get the known peer list. + + Outputs: + { + "gray_list": list; offline peer informations with the following structure + { + "host": unsigned int; IP address in integer format. + "id": stri; Peer id. + "ip": unsigned int; IP address in integer format. + "last_seen": unsigned int; unix time at which the peer has been seen for the last time. + "port": unsigned int; TCP port the peer is using to connect to monero network. + } + "white_list": list; online peer informations with the above structure ^^^ + "status": str; General RPC error code. "OK" means everything looks good. Any other value means that something went wrong. + } + """ + + return self.raw_request('/get_peer_list') + + def set_log_hash_rate(self, visible): + """ + Set the log hash rate display mode. + + :param bool visible: States if hash rate logs should be visible (true) or hidden (false) + + Output: + { + "status": str; General RPC error code. "OK" means everything looks good. Any other value means that something went wrong. + } + """ + + resp = self.raw_request('/set_log_hash_rate', data={'visible': bool(visible)}) + + if resp['status'] == 'NOT MINING': + raise RPCError('The node at "{url}" is not currently mining and therefore cannot set its hash rate log visibility.' + .format(url=self.url)) + + return resp + + def set_log_level(self, level): + """ + Set the daemon log level. By default, log level is set to 0. + + :param int level: daemon log level to set from 0 (less verbose) to 4 (most verbose) + + Output: + { + "status": str; General RPC error code. "OK" means everything looks good. Any other value means that something went wrong. + } + """ + + if level not in range(5): + raise ValueError('level must an integer between 0 (less verbose) and 4 (more verbose), inclusive') + + return self.raw_request('/set_log_level', data={'level': level}) + + def set_log_categories(self, categories=None): + """ + Set the daemon log categories. Categories are represented as a comma separated list of + : (similarly to syslog standard :). + To get a list of all log categories known by this library, call JSONRPCDaemon.get_all_known_log_categories(). + To get a list of all log levels known by this library, call JSONRPCDaemon.get_all_known_log_levels(). + + :param categories: str or list; Optional, daemon log categories to enable. Accepts list or comma-seperated string. + + Output: + { + "categories": str; comma-seperated string list of daemon log enabled categories + "status": str; General RPC error code. "OK" means everything looks good. Any other value means that something went wrong. + } + """ + + if not categories: + return self.raw_request('/set_log_categories') + elif isinstance(categories, str): + categories = categories.split(',') + + # Validate categories + for cat_str in categories: + try: + category, level = cat_str.split(':') + + if category not in self._KNOWN_LOG_CATEGORIES: + _log.warn(u"Unrecognized log category: \"{}\"".format(category)) + + if level not in self._KNOWN_LOG_LEVELS: + _log.warn(u"Unrecognized log level: \"{}\"".format(level)) + except ValueError: + raise ValueError('malformed category string: "{}"'.format(cat_str)) + + final_category_str = ','.join(categories) + + return self.raw_request('/set_log_categories', data={'categories': final_category_str}) + + def get_transaction_pool(self): + """ + Show information about valid transactions seen by the node but not yet mined into a block, + as well as spent key image information for the txpool in the node's memory. + + Output: + { + "spent_key_images": list; spent output key images with following structure + { + "id_hash": str; Key image. + "txs_hashes": list; tx hashes of the txes (usually one) spending that key image. + } + "transactions": list; transactions in the mempool with the following structure + { + "blob_size": unsigned int; The size of the full transaction blob. + "double_spend_seen": bool; States if this transaction has been seen as double spend. + "do_not_relay": bool; States if this transaction should not be relayed + "fee": unsigned int; The amount of the mining fee included in the transaction, in atomic units. + "id_hash": str; The transaction ID hash. + "kept_by_block": bool; States if the tx was included in a block at least once (true) or not (false). + "last_failed_height": unsigned int; If the transaction validation has previously failed, this tells at what height that occured. + "last_failed_id_hash": str; Like the previous, this tells the previous transaction ID hash. + "last_relayed_time": unsigned int; Last unix time at which the transaction has been relayed. + "max_used_block_height": unsigned int; Tells the height of the most recent block with an output used in this transaction. + "max_used_block_hash": str; Tells the hash of the most recent block with an output used in this transaction. + "receive_time": unsigned int; The Unix time that the transaction was first seen on the network by the node. + "relayed": bool; States if this transaction has been relayed + "tx_blob": unsigned int; Hexadecimal blob represnting the transaction. + "tx_json": json string; JSON structure of all information in the transaction (see get_transactions() for structure information) + } + "status": str; General RPC error code. "OK" means everything looks good. + } + """ + + return self.raw_request('/get_transaction_pool') + + def get_transaction_pool_stats(self): + """ + Get the transaction pool statistics. + + Output: + { + "pool_stats": { + "bytes_max": unsigned int; Max transaction size in pool. + "bytes_med" unsigned int; Median transaction size in pool. + "bytes_min" unsigned int; Min transaction size in pool. + "bytes_total": unsigned int; total size of all transactions in pool. + "histo": list; histogram of transaction sizes with the following structure + { + "txs": unsigned int; number of transactions. + "bytes": unsigned int; size in bytes. + } + "histo_98pc": unsigned int; the time 98% of txes are "younger" than. + "num_10m": unsigned int; number of transactions in pool for more than 10 minutes. + "num_double_spends": unsigned int; number of double spend transactions. + "num_failing": unsigned int; number of failing transactions. + "num_not_relayed": unsigned int; number of non-relayed transactions. + "oldest": unsigned int; unix time of the oldest transaction in the pool + "txs_total": unsigned int; total number of transactions. + } + "status": str; General RPC error code. "OK" means everything looks good. + "untrusted": bool; True for bootstrap mode, False for full sync mode. + } + """ + + return self.raw_request('/get_transaction_pool_stats') + + def stop_daemon(self): + """ + Send a command to the daemon to safely disconnect and shut down. + + Output: + { + "status": str; General RPC error code. "OK" means everything looks good. Any other value means that something went wrong. + } + """ + + return self.raw_request('/stop_daemon') + + def get_limit(self): + """ + Get daemon bandwidth limits. + + Outputs: + { + "limit_down": unsigned int; Download limit in kBytes per second + "limit_up": unsigned int; Upload limit in kBytes per second + "status": str; General RPC error code. "OK" means everything looks good. + "untrusted": bool; True for bootstrap mode, False for full sync mode. + } + """ + + return self.raw_request('/get_limit') + + def set_limit(self, limit_down=-1, limit_up=-1): + """ + Set daemon bandwidth limits. + + :param int limit_down: Download limit in kBytes per second (-1 reset to default, 0 don't change the current limit) + :param int limit_up: Upload limit in kBytes per second (-1 reset to default, 0 don't change the current limit) + + Output: + { + "limit_down": - unsigned int; Download limit in kBytes per second + "limit_up": unsigned int; Upload limit in kBytes per second + "status": str; General RPC error code. "OK" means everything looks good. + } + """ + + if limit_down < -1: + raise ValueError('invalid limit_down: {}'.format(limit_down)) + elif limit_up < -1: + raise ValueError('invalid limit_up: {}'.format(limit_up)) + + return self.raw_request('/set_limit', data={'limit_down': limit_down, 'limit_up': limit_up}) + + def out_peers(self, out_peers_arg): + """ + Limit number of outgoing peers. + + :param int out_peers_arg: Max number of outgoing peers. If less than zero, allow unlimited outgoing peers + + Output: + { + "status": str; General RPC error code. "OK" means everything looks good. Any other value means that something went wrong. + } + """ + + if out_peers_arg < 0: + out_peers_arg = 2**32 - 1 + elif out_peers_arg > 2**32 - 1: + raise ValueError('out_peers_arg "{}" is too large'.format(out_peers_arg)) + + return self.raw_request('/out_peers', data={'out_peers': int(out_peers_arg)}) + + def in_peers(self, in_peers_arg): + """ + Limit number of incoming peers. + + :param int in_peers_arg: Max number of incoming peers. If less than zero, allow unlimited incoming peers + + Output: + { + "status": str; General RPC error code. "OK" means everything looks good. Any other value means that something went wrong. + } + """ + + if in_peers_arg < 0: + in_peers_arg = 2**32 - 1 + elif in_peers_arg > 2**32 - 1: + raise ValueError('in_peers_arg "{}" is too large'.format(in_peers_arg)) + + return self.raw_request('/in_peers', data={'in_peers': int(in_peers_arg)}) + + def get_outs(self, amount, index, get_txid=True): + """ + Get information about one-time outputs (stealth addresses). + + + :param amount: list or single element of output amount. Decimal for full monero amounts or int for atmoic units + :param index: list of single element of output index. int + :param bool get_txid: Optional. If true, a txid will included for each output in the response. + + Output: + { + "outs": list; output informations with the following structure + { + "height": unsigned int; block height of the output + "key": str; the public key of the output + "mask": str; + "txid": str; transaction id + "unlocked": bool; States if output is locked (false) or not (true) + } + "status": str; General RPC error code. "OK" means everything looks good. + "untrusted": bool; True for bootstrap mode, False for full sync mode. + } + """ + + if isinstance(index, int): # single element + outputs = [{'amount': amount if isinstance(amount, int) else to_atomic(amount), 'index': index}] + else: # multiple elements + if len(amount) != len(index): + raise ValueError('length of amount and index do not match') + + outputs = [] + for a, i in zip(amount, index): + outputs.append({ + 'amount': a if isinstance(a, int) else to_atomic(a), + 'index': i}) + + return self.raw_request('/get_outs', data={ + 'outputs': outputs, + 'get_txid': get_txid}) + + def update(self, command, path=None): + """ + Update daemon. + + + :param str command: Command to use, either "check" or "download". + :param str path: Optional, path where to download the update. + + + Output: + { + "auto_uri": str; + "hash": str; + "path": str; path to download the update. + "update": bool; States if an update is available to download (true) or not (false). + "user_uri": str; + "version": str; Version available for download. + "status": str; General RPC error code. "OK" means everything looks good. + } + """ + + command = six.ensure_text(command) + path = six.ensure_text(path) if path is not None else None + + if command not in ('check', 'download'): + raise ValueError('unrecognized command: "{}"'.format(command)) + + data = {'command': command} + + if path is not None: + data['path'] = path + + return self.raw_request('/update', data=data) + + # Supporting class methods + + @classmethod + def known_log_categories(cls): + return cls._KNOWN_LOG_CATEGORIES + + @classmethod + def known_log_levels(cls): + return cls._KNOWN_LOG_LEVELS + + # private methods + + def _set_net(self, info): + if info['mainnet']: + self._net = NET_MAIN + if info['testnet']: + self._net = NET_TEST + if info['stagenet']: + self._net = NET_STAGE + + def _set_restricted(self): + try: + self.sync_info() + + self._restricted = False + except MethodNotFound: + self._restricted = True + + def _do_get_transactions(self, hashes, prune): + res = self.raw_request('/get_transactions', { + 'txs_hashes': hashes, + 'decode_as_json': True, + 'prune': prune}) + if res['status'] != 'OK': + raise exceptions.BackendException(res['status']) + txs = [] + for tx in res.get('txs', []): + as_json = json.loads(tx['as_json']) + fee = as_json.get('rct_signatures', {}).get('txnFee') + txs.append(Transaction( + hash=tx['tx_hash'], + fee=from_atomic(fee) if fee else None, + height=None if tx['in_pool'] else tx['block_height'], + timestamp=datetime.fromtimestamp( + tx['block_timestamp']) if 'block_timestamp' in tx else None, + blob=binascii.unhexlify(tx['as_hex']) or None, + json=as_json)) + + return txs + + def _is_valid_256_hex(self, hexhash): + try: + bytearray.fromhex(hexhash) + + return len(hexhash) == 64 + except ValueError: + return False + + def _validate_hashlist(self, hashes): + if not hashes: + return [] + else: + if isinstance(hashes, str): + hashes = [hashes] + else: + coerce_compatible_str = lambda s: six.ensure_text(str(s)) + hashes = list(map(coerce_compatible_str, hashes)) + + not_valid = lambda h: not self._is_valid_256_hex(h) + + if any(map(not_valid, hashes)): + raise ValueError('hashes contains an invalid hash') + + return hashes diff --git a/monero/backends/jsonrpc/exceptions.py b/monero/backends/jsonrpc/exceptions.py old mode 100644 new mode 100755 index f56a21d..470e53a --- a/monero/backends/jsonrpc/exceptions.py +++ b/monero/backends/jsonrpc/exceptions.py @@ -10,3 +10,6 @@ class Unauthorized(RPCError): class MethodNotFound(RPCError): pass + +class RestrictedRPC(RPCError): + pass diff --git a/monero/exceptions.py b/monero/exceptions.py index 8f58a5f..c7f5344 100644 --- a/monero/exceptions.py +++ b/monero/exceptions.py @@ -7,6 +7,9 @@ class BackendException(MoneroException): class NoDaemonConnection(BackendException): pass +class DaemonIsBusy(BackendException): + pass + class AccountException(MoneroException): pass diff --git a/requirements.txt b/requirements.txt index b918fb2..38bde9a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ pysha3 requests six>=1.12.0 +ipaddress varint diff --git a/tests/data/test_jsonrpcdaemon/test_flush_txpool.json b/tests/data/test_jsonrpcdaemon/test_flush_txpool.json new file mode 100644 index 0000000..d857320 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_flush_txpool.json @@ -0,0 +1,8 @@ +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "status": "OK", + "untrusted": false + } +} diff --git a/tests/data/test_jsonrpcdaemon/test_get_alt_blocks_hashes_doc_example.json b/tests/data/test_jsonrpcdaemon/test_get_alt_blocks_hashes_doc_example.json new file mode 100644 index 0000000..abefcc3 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_alt_blocks_hashes_doc_example.json @@ -0,0 +1,6 @@ + +{ + "blks_hashes": ["9c2277c5470234be8b32382cdf8094a103aba4fcd5e875a6fc159dc2ec00e011","637c0e0f0558e284493f38a5fcca3615db59458d90d3a5eff0a18ff59b83f46f","6f3adc174a2e8082819ebb965c96a095e3e8b63929ad9be2d705ad9c086a6b1c","697cf03c89a9b118f7bdf11b1b3a6a028d7b3617d2d0ed91322c5709acf75625","d99b3cf3ac6f17157ac7526782a3c3b9537f89d07e069f9ce7821d74bd9cad0e","e97b62109a6303233dcd697fa8545c9fcbc0bf8ed2268fede57ddfc36d8c939c","70ff822066a53ad64b04885c89bbe5ce3e537cdc1f7fa0dc55317986f01d1788","b0d36b209bd0d4442b55ea2f66b5c633f522401f921f5a85ea6f113fd2988866"], + "status": "OK", + "untrusted": false +} \ No newline at end of file diff --git a/tests/data/test_jsonrpcdaemon/test_get_alternate_chains.json b/tests/data/test_jsonrpcdaemon/test_get_alternate_chains.json new file mode 100644 index 0000000..b0b01f7 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_alternate_chains.json @@ -0,0 +1,13 @@ +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "chains": [{ + "block_hash": "697cf03c89a9b118f7bdf11b1b3a6a028d7b3617d2d0ed91322c5709acf75625", + "difficulty": 14114729638300280, + "height": 1562062, + "length": 2 + }], + "status": "OK" + } +} \ No newline at end of file diff --git a/tests/data/test_jsonrpcdaemon/test_get_bans.json b/tests/data/test_jsonrpcdaemon/test_get_bans.json new file mode 100644 index 0000000..79c3da0 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_bans.json @@ -0,0 +1,35 @@ +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "bans": [ + { + "host": "145.239.118.5", + "ip": 91680657, + "seconds": 72260 + }, + { + "host": "146.59.156.116", + "ip": 1956395922, + "seconds": 69397 + }, + { + "host": "213.32.121.162", + "ip": 2725847253, + "seconds": 3564 + }, + { + "host": "51.83.81.237", + "ip": 3981529907, + "seconds": 70687 + }, + { + "host": "54.39.75.54", + "ip": 910894902, + "seconds": 80571 + } + ], + "status": "OK", + "untrusted": false + } +} diff --git a/tests/data/test_jsonrpcdaemon/test_get_block_2288515.json b/tests/data/test_jsonrpcdaemon/test_get_block_2288515.json new file mode 100644 index 0000000..ca43ccc --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_block_2288515.json @@ -0,0 +1,56 @@ +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "blob": "0e0efef0e880066d78ace422007a2cefb423553b39f8b58f6067698eac8162b25732d0b99988d37dc2002302bfd78b0101ff83d78b0101d58aa8aaa02202e90b5189598861b8dc3250b05847efd4ddb31d33b667037ae75572f4fef176c43401d3edb9548f1f68cb3de38f597e087e7514e8533ad2911480c4afffde217cb0dc02110000041b31710e950000000000000000000011b6b1fe267ec2a0f4c6937ebbe2e94969341d293293f148b2fe4e6f1c618b57a86c769da02b54ecac61d85f19b359401dd5595eebaaf488875e8165542e9eef522072a2929728e4e316744588f108b258c449072c19656b57ce1b9ba1a34e534d95619c252275642a394396ece0e218f6f4003e58bf307a02e03f09a59d53e5637dbb101aa4d3c6c58b484f7e580d89b52d70b0a9e67471e64ada3930bdae66c8bb4531547be88cd8601f8490688b5461889c4ca78977000844e015aac51698cf922df5547d43de3e260cb9a87342498fffa89f3cc31564b6a41cef61320b85695d454ac941ac2f7ca00e673a019066e7874b9d1f9055f0d6c7b6c47bc3efc52de13150199cb907b06d0c5fe009b64258662e29bdcc58f53d88be4cb044a50352f9c8c3549e9df079cd0b75f87937152ec5bdb9c8b68695ec80a129f9770ad80b05dbd5c025270fc38366f06d037a43ee0db46892ac471a61328d9733d197c6c1ecfdf344bac1a2795a179e10d15cffe66701c3f53d9410b2f63998a1fbab3332c471f2f16e24ab9475d0cd656aa49a0bce7fb38f82795ce6935b4602b03f0d0cddba5bd9abcb5ae50698e5f735e31ae2c10a673b763434594beea09a5990c02f3e82c4eafb438223df4022cd146bfcadd8e3c1da70b8113c626a7bc4d8780ca6009a0f3043c1eccf3519e26137a618a446844105f0e3a87f60104a4c2244212aed1c72b4f4b442d4f4b562c153b438711ae9069aa2bdf3426a4209ba91db2dec", + "block_header": { + "block_size": 33101, + "block_weight": 33101, + "cumulative_difficulty": 86655943855900269, + "cumulative_difficulty_top64": 0, + "depth": 13, + "difficulty": 239419211907, + "difficulty_top64": 0, + "hash": "1c68300646dda11a89cc9ca4001100745fcbd192e0e6efb6b06bd4d25851662b", + "height": 2288515, + "long_term_weight": 33101, + "major_version": 14, + "miner_tx_hash": "e31c38097769b1c49d31e7b041823da00915cdba77b9794d63ccb3d6571f2565", + "minor_version": 14, + "nonce": 587252349, + "num_txes": 17, + "orphan_status": false, + "pow_hash": "", + "prev_hash": "6d78ace422007a2cefb423553b39f8b58f6067698eac8162b25732d0b99988d3", + "reward": 1176909776213, + "timestamp": 1612331134, + "wide_cumulative_difficulty": "0x133dd1f2f35066d", + "wide_difficulty": "0x37be7f4083" + }, + "credits": 0, + "json": "{\n \"major_version\": 14, \n \"minor_version\": 14, \n \"timestamp\": 1612331134, \n \"prev_id\": \"6d78ace422007a2cefb423553b39f8b58f6067698eac8162b25732d0b99988d3\", \n \"nonce\": 587252349, \n \"miner_tx\": {\n \"version\": 2, \n \"unlock_time\": 2288575, \n \"vin\": [ {\n \"gen\": {\n \"height\": 2288515\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 1176909776213, \n \"target\": {\n \"key\": \"e90b5189598861b8dc3250b05847efd4ddb31d33b667037ae75572f4fef176c4\"\n }\n }\n ], \n \"extra\": [ 1, 211, 237, 185, 84, 143, 31, 104, 203, 61, 227, 143, 89, 126, 8, 126, 117, 20, 232, 83, 58, 210, 145, 20, 128, 196, 175, 255, 222, 33, 124, 176, 220, 2, 17, 0, 0, 4, 27, 49, 113, 14, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0\n ], \n \"rct_signatures\": {\n \"type\": 0\n }\n }, \n \"tx_hashes\": [ \"b6b1fe267ec2a0f4c6937ebbe2e94969341d293293f148b2fe4e6f1c618b57a8\", \"6c769da02b54ecac61d85f19b359401dd5595eebaaf488875e8165542e9eef52\", \"2072a2929728e4e316744588f108b258c449072c19656b57ce1b9ba1a34e534d\", \"95619c252275642a394396ece0e218f6f4003e58bf307a02e03f09a59d53e563\", \"7dbb101aa4d3c6c58b484f7e580d89b52d70b0a9e67471e64ada3930bdae66c8\", \"bb4531547be88cd8601f8490688b5461889c4ca78977000844e015aac51698cf\", \"922df5547d43de3e260cb9a87342498fffa89f3cc31564b6a41cef61320b8569\", \"5d454ac941ac2f7ca00e673a019066e7874b9d1f9055f0d6c7b6c47bc3efc52d\", \"e13150199cb907b06d0c5fe009b64258662e29bdcc58f53d88be4cb044a50352\", \"f9c8c3549e9df079cd0b75f87937152ec5bdb9c8b68695ec80a129f9770ad80b\", \"05dbd5c025270fc38366f06d037a43ee0db46892ac471a61328d9733d197c6c1\", \"ecfdf344bac1a2795a179e10d15cffe66701c3f53d9410b2f63998a1fbab3332\", \"c471f2f16e24ab9475d0cd656aa49a0bce7fb38f82795ce6935b4602b03f0d0c\", \"ddba5bd9abcb5ae50698e5f735e31ae2c10a673b763434594beea09a5990c02f\", \"3e82c4eafb438223df4022cd146bfcadd8e3c1da70b8113c626a7bc4d8780ca6\", \"009a0f3043c1eccf3519e26137a618a446844105f0e3a87f60104a4c2244212a\", \"ed1c72b4f4b442d4f4b562c153b438711ae9069aa2bdf3426a4209ba91db2dec\"\n ]\n}", + "miner_tx_hash": "e31c38097769b1c49d31e7b041823da00915cdba77b9794d63ccb3d6571f2565", + "status": "OK", + "top_hash": "", + "tx_hashes": [ + "b6b1fe267ec2a0f4c6937ebbe2e94969341d293293f148b2fe4e6f1c618b57a8", + "6c769da02b54ecac61d85f19b359401dd5595eebaaf488875e8165542e9eef52", + "2072a2929728e4e316744588f108b258c449072c19656b57ce1b9ba1a34e534d", + "95619c252275642a394396ece0e218f6f4003e58bf307a02e03f09a59d53e563", + "7dbb101aa4d3c6c58b484f7e580d89b52d70b0a9e67471e64ada3930bdae66c8", + "bb4531547be88cd8601f8490688b5461889c4ca78977000844e015aac51698cf", + "922df5547d43de3e260cb9a87342498fffa89f3cc31564b6a41cef61320b8569", + "5d454ac941ac2f7ca00e673a019066e7874b9d1f9055f0d6c7b6c47bc3efc52d", + "e13150199cb907b06d0c5fe009b64258662e29bdcc58f53d88be4cb044a50352", + "f9c8c3549e9df079cd0b75f87937152ec5bdb9c8b68695ec80a129f9770ad80b", + "05dbd5c025270fc38366f06d037a43ee0db46892ac471a61328d9733d197c6c1", + "ecfdf344bac1a2795a179e10d15cffe66701c3f53d9410b2f63998a1fbab3332", + "c471f2f16e24ab9475d0cd656aa49a0bce7fb38f82795ce6935b4602b03f0d0c", + "ddba5bd9abcb5ae50698e5f735e31ae2c10a673b763434594beea09a5990c02f", + "3e82c4eafb438223df4022cd146bfcadd8e3c1da70b8113c626a7bc4d8780ca6", + "009a0f3043c1eccf3519e26137a618a446844105f0e3a87f60104a4c2244212a", + "ed1c72b4f4b442d4f4b562c153b438711ae9069aa2bdf3426a4209ba91db2dec" + ], + "untrusted": false + } +} \ No newline at end of file diff --git a/tests/data/test_jsonrpcdaemon/test_get_block_count_2287024.json b/tests/data/test_jsonrpcdaemon/test_get_block_count_2287024.json new file mode 100644 index 0000000..b45eb97 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_block_count_2287024.json @@ -0,0 +1,9 @@ +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "count": 2287024, + "status": "OK", + "untrusted": false + } +} diff --git a/tests/data/test_jsonrpcdaemon/test_get_block_header_by_hash_90f6fd3f.json b/tests/data/test_jsonrpcdaemon/test_get_block_header_by_hash_90f6fd3f.json new file mode 100644 index 0000000..3230084 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_block_header_by_hash_90f6fd3f.json @@ -0,0 +1,34 @@ +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "block_header": { + "block_size": 17130, + "block_weight": 17130, + "cumulative_difficulty": 86641187797059581, + "cumulative_difficulty_top64": 0, + "depth": 4, + "difficulty": 239025076303, + "difficulty_top64": 0, + "hash": "90f6fd3fe29c7518f15afd2da31734e890cc24247b5da10dc9ac2ea215ae844b", + "height": 2288453, + "long_term_weight": 17130, + "major_version": 14, + "miner_tx_hash": "5e8d9531ae078ef5630e3c9950eb768b87b31481652c2b8dafca25d57e9c0c3f", + "minor_version": 14, + "nonce": 1040830456, + "num_txes": 11, + "orphan_status": false, + "pow_hash": "", + "prev_hash": "a78d9e631f743806b0b8d3a70bb85758db466633eb3b4620737dd29b0548eb21", + "reward": 1176972120146, + "timestamp": 1612323209, + "wide_cumulative_difficulty": "0x133cfb3858fc7fd", + "wide_difficulty": "0x37a701384f" + }, + "credits": 0, + "status": "OK", + "top_hash": "", + "untrusted": false + } +} \ No newline at end of file diff --git a/tests/data/test_jsonrpcdaemon/test_get_block_header_by_height_2288495.json b/tests/data/test_jsonrpcdaemon/test_get_block_header_by_height_2288495.json new file mode 100644 index 0000000..75cdefa --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_block_header_by_height_2288495.json @@ -0,0 +1,34 @@ +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "block_header": { + "block_size": 8415, + "block_weight": 8415, + "cumulative_difficulty": 86651164421641270, + "cumulative_difficulty_top64": 0, + "depth": 3, + "difficulty": 238154836806, + "difficulty_top64": 0, + "hash": "966c1a70358ce998e7d5fb243b155971f9bffe06030c92dbd70486d398c40c05", + "height": 2288495, + "long_term_weight": 8415, + "major_version": 14, + "miner_tx_hash": "408dd52531cab37e51db5a9a581bf25691b5534d8d0037b38e68061691b976e1", + "minor_version": 14, + "nonce": 1275098057, + "num_txes": 5, + "orphan_status": false, + "pow_hash": "", + "prev_hash": "47751e6eb31230e92a5ee98242aa34d79bfd48657f2727c9a9b3cbad6aee88bb", + "reward": 1176760892780, + "timestamp": 1612328193, + "wide_cumulative_difficulty": "0x133d8c662b9d436", + "wide_difficulty": "0x3773226b46" + }, + "credits": 0, + "status": "OK", + "top_hash": "", + "untrusted": false + } +} \ No newline at end of file diff --git a/tests/data/test_jsonrpcdaemon/test_get_block_headers_range_2288491_2288500.json b/tests/data/test_jsonrpcdaemon/test_get_block_headers_range_2288491_2288500.json new file mode 100644 index 0000000..f4c2ef3 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_block_headers_range_2288491_2288500.json @@ -0,0 +1,252 @@ +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "credits": 0, + "headers": [ + { + "block_size": 49559, + "block_weight": 49559, + "cumulative_difficulty": 86650214633914049, + "cumulative_difficulty_top64": 0, + "depth": 19, + "difficulty": 236253710852, + "difficulty_top64": 0, + "hash": "01a5a129515e752055af9883ac98cdbd9eb90db16ab69ea187a1eb24eb7d0c66", + "height": 2288491, + "long_term_weight": 49559, + "major_version": 14, + "miner_tx_hash": "22c3dd706931fe0606e086147dcb8a984b504a5bd0eabd1cf7dabb9456154cd4", + "minor_version": 14, + "nonce": 922780730, + "num_txes": 26, + "orphan_status": false, + "pow_hash": "", + "prev_hash": "6bd071b487be697128142b9b132be8d2c3e4ee9660f73d811c3d23e4526e56ac", + "reward": 1178084560299, + "timestamp": 1612327847, + "wide_cumulative_difficulty": "0x133d7e93ef73ec1", + "wide_difficulty": "0x3701d18a04" + }, + { + "block_size": 48848, + "block_weight": 48848, + "cumulative_difficulty": 86650451549481310, + "cumulative_difficulty_top64": 0, + "depth": 18, + "difficulty": 236915567261, + "difficulty_top64": 0, + "hash": "b2b91f81acec7fac2918cdee624f98df32c6b161160b4728ade336526a4ff51a", + "height": 2288492, + "long_term_weight": 48848, + "major_version": 14, + "miner_tx_hash": "9f74f1ff0e6cda328c07449fd1329d23a711cb1a65abc518d186ff152bb02dd9", + "minor_version": 14, + "nonce": 69257, + "num_txes": 21, + "orphan_status": false, + "pow_hash": "", + "prev_hash": "01a5a129515e752055af9883ac98cdbd9eb90db16ab69ea187a1eb24eb7d0c66", + "reward": 1178167575913, + "timestamp": 1612328034, + "wide_cumulative_difficulty": "0x133d820683be95e", + "wide_difficulty": "0x372944aa9d" + }, + { + "block_size": 6013, + "block_weight": 6013, + "cumulative_difficulty": 86650688345313996, + "cumulative_difficulty_top64": 0, + "depth": 17, + "difficulty": 236795832686, + "difficulty_top64": 0, + "hash": "c85bfe6255447d117d68f90aa0cd2719542e92ee3bffed43b6109efbd87456cf", + "height": 2288493, + "long_term_weight": 6013, + "major_version": 14, + "miner_tx_hash": "7b7fb7509f54139b96434c351d855377a18d44304143cc7ed2eb93a940dd06ee", + "minor_version": 14, + "nonce": 2164859383, + "num_txes": 3, + "orphan_status": false, + "pow_hash": "", + "prev_hash": "b2b91f81acec7fac2918cdee624f98df32c6b161160b4728ade336526a4ff51a", + "reward": 1176808541531, + "timestamp": 1612328052, + "wide_cumulative_difficulty": "0x133d8578a5d92cc", + "wide_difficulty": "0x372221a96e" + }, + { + "block_size": 25305, + "block_weight": 25305, + "cumulative_difficulty": 86650926266804464, + "cumulative_difficulty_top64": 0, + "depth": 16, + "difficulty": 237921490468, + "difficulty_top64": 0, + "hash": "47751e6eb31230e92a5ee98242aa34d79bfd48657f2727c9a9b3cbad6aee88bb", + "height": 2288494, + "long_term_weight": 25305, + "major_version": 14, + "miner_tx_hash": "c3146d227b3ec5288ee97fe48d7ab75dd172d038851e70f66ee3c2e2bd2299ba", + "minor_version": 14, + "nonce": 493060, + "num_txes": 12, + "orphan_status": false, + "pow_hash": "", + "prev_hash": "c85bfe6255447d117d68f90aa0cd2719542e92ee3bffed43b6109efbd87456cf", + "reward": 1177608932154, + "timestamp": 1612328162, + "wide_cumulative_difficulty": "0x133d88eef9768f0", + "wide_difficulty": "0x376539d624" + }, + { + "block_size": 8415, + "block_weight": 8415, + "cumulative_difficulty": 86651164421641270, + "cumulative_difficulty_top64": 0, + "depth": 15, + "difficulty": 238154836806, + "difficulty_top64": 0, + "hash": "966c1a70358ce998e7d5fb243b155971f9bffe06030c92dbd70486d398c40c05", + "height": 2288495, + "long_term_weight": 8415, + "major_version": 14, + "miner_tx_hash": "408dd52531cab37e51db5a9a581bf25691b5534d8d0037b38e68061691b976e1", + "minor_version": 14, + "nonce": 1275098057, + "num_txes": 5, + "orphan_status": false, + "pow_hash": "", + "prev_hash": "47751e6eb31230e92a5ee98242aa34d79bfd48657f2727c9a9b3cbad6aee88bb", + "reward": 1176760892780, + "timestamp": 1612328193, + "wide_cumulative_difficulty": "0x133d8c662b9d436", + "wide_difficulty": "0x3773226b46" + }, + { + "block_size": 116231, + "block_weight": 116231, + "cumulative_difficulty": 86651402586533952, + "cumulative_difficulty_top64": 0, + "depth": 14, + "difficulty": 238164892682, + "difficulty_top64": 0, + "hash": "b13413f9072dc7d64bfb7fd41468de816896bb003cd1f2b83650f50c3b7cb181", + "height": 2288496, + "long_term_weight": 116231, + "major_version": 14, + "miner_tx_hash": "086f9403f409146cfe3f42ad92656215c3528c6467bf2249969cbd8c8959e566", + "minor_version": 14, + "nonce": 248137, + "num_txes": 47, + "orphan_status": false, + "pow_hash": "", + "prev_hash": "966c1a70358ce998e7d5fb243b155971f9bffe06030c92dbd70486d398c40c05", + "reward": 1179976778411, + "timestamp": 1612328551, + "wide_cumulative_difficulty": "0x133d8fdd675b040", + "wide_difficulty": "0x3773bbdc0a" + }, + { + "block_size": 16270, + "block_weight": 16270, + "cumulative_difficulty": 86651640852406342, + "cumulative_difficulty_top64": 0, + "depth": 13, + "difficulty": 238265872390, + "difficulty_top64": 0, + "hash": "2abd2e1f66237274e2c81ae9b399c35fb276256a2f74bb7417f46b1df9bef05c", + "height": 2288497, + "long_term_weight": 16270, + "major_version": 14, + "miner_tx_hash": "00f859466dc3d2a640139f11fa651ceb6505def6087b0b70481abc6bdaff46bb", + "minor_version": 14, + "nonce": 72020, + "num_txes": 9, + "orphan_status": false, + "pow_hash": "", + "prev_hash": "b13413f9072dc7d64bfb7fd41468de816896bb003cd1f2b83650f50c3b7cb181", + "reward": 1177235044047, + "timestamp": 1612328631, + "wide_cumulative_difficulty": "0x133d93550366046", + "wide_difficulty": "0x3779c0b006" + }, + { + "block_size": 114710, + "block_weight": 114710, + "cumulative_difficulty": 86651878958176077, + "cumulative_difficulty_top64": 0, + "depth": 12, + "difficulty": 238105769735, + "difficulty_top64": 0, + "hash": "85b650768a99d15b10dd2b3e3b0a2783fd4f328a09051234eeb502df53a466ef", + "height": 2288498, + "long_term_weight": 114710, + "major_version": 14, + "miner_tx_hash": "2ae0f790f203ef5f68a705cb9328b20bf281b0a28b4f87ce1cdf4c1d14632db8", + "minor_version": 14, + "nonce": 3255005723, + "num_txes": 50, + "orphan_status": false, + "pow_hash": "", + "prev_hash": "2abd2e1f66237274e2c81ae9b399c35fb276256a2f74bb7417f46b1df9bef05c", + "reward": 1205727544686, + "timestamp": 1612329017, + "wide_cumulative_difficulty": "0x133d96cc06c174d", + "wide_difficulty": "0x377035b707" + }, + { + "block_size": 18142, + "block_weight": 18142, + "cumulative_difficulty": 86652117438434601, + "cumulative_difficulty_top64": 0, + "depth": 11, + "difficulty": 238480258524, + "difficulty_top64": 0, + "hash": "d7a49b741aaedb95fbcc4c8d2033268a411f8de535d4abb7099b16d442dcfee6", + "height": 2288499, + "long_term_weight": 18142, + "major_version": 14, + "miner_tx_hash": "d0a4fe27cc361006a3a8677677d5f0cda200d57d263e2169f79cd1d3d7f96cfc", + "minor_version": 14, + "nonce": 4043900084, + "num_txes": 11, + "orphan_status": false, + "pow_hash": "", + "prev_hash": "85b650768a99d15b10dd2b3e3b0a2783fd4f328a09051234eeb502df53a466ef", + "reward": 1198576000330, + "timestamp": 1612329127, + "wide_cumulative_difficulty": "0x133d9a446f40d29", + "wide_difficulty": "0x378687f5dc" + }, + { + "block_size": 64084, + "block_weight": 64084, + "cumulative_difficulty": 86652355952824805, + "cumulative_difficulty_top64": 0, + "depth": 10, + "difficulty": 238514390204, + "difficulty_top64": 0, + "hash": "3fd48fc38c69e63e274a7340f3cb1de82ffde0abfe85fc417789a06e16528d5d", + "height": 2288500, + "long_term_weight": 64084, + "major_version": 14, + "miner_tx_hash": "56d8ab6a4e7826d63020adf3e3d6ebe3364da645a3be016ef912d9b2401b0866", + "minor_version": 14, + "nonce": 134273718, + "num_txes": 32, + "orphan_status": false, + "pow_hash": "", + "prev_hash": "d7a49b741aaedb95fbcc4c8d2033268a411f8de535d4abb7099b16d442dcfee6", + "reward": 1188932565978, + "timestamp": 1612329382, + "wide_cumulative_difficulty": "0x133d9dbcf84d1e5", + "wide_difficulty": "0x378890c4bc" + } + ], + "status": "OK", + "top_hash": "", + "untrusted": false + } +} \ No newline at end of file diff --git a/tests/data/test_jsonrpcdaemon/test_get_block_template_481SgRxo_64.json b/tests/data/test_jsonrpcdaemon/test_get_block_template_481SgRxo_64.json new file mode 100644 index 0000000..cc8d0c6 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_block_template_481SgRxo_64.json @@ -0,0 +1,20 @@ +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "blockhashing_blob": "0e0ec890de8006fbe94dbaf09e5fc4431460ede46c0e7c3db4adf1f0a6f34c5a0f5144e6d9dd270000000067ec6d160094c242a6e4aee48103c5c80f100e8a7055ed5ff7964216f8fc47561c", + "blocktemplate_blob": "0e0ec890de8006fbe94dbaf09e5fc4431460ede46c0e7c3db4adf1f0a6f34c5a0f5144e6d9dd270000000002fecb8b0101ffc2cb8b0101d5fea9bbae220232e3df54fbf87eb29983853b3a4c6e3505949b011459334647ef459d304f6b53630102aeb562f6095dddf3ddd07d7703e047c274639bdaab3df83ac366d471db1d14024000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b313357d05b6bede5aa4797627a17e728f6577438bbd616f763efc06f6f09535a2c0ea18d5cda3019cef79db816e4a7e1b18d49385b44a77fb8e6b4d22762190b6c54d1d099d7d4179601a792f38c0aa14df8e40685215a53f92b9a4b54d2a2c8b69e0ded589859e3f1e310e99a754612c331052aec895950948eadf2a4e98d597f252fba93b2bd7c77b4e2a826a8e0fd6f11e96bfc16e0c7e390affc4a22032064099c83439afcd9f3805deb15407582dccdb2ffd62af8f0ed55a1fa6c4fff4e8e492e36cad4bf5481b57e37137df5c097a26f28c16b9e563d7291feebd9775e207e205f533853fdeacc33da212567dff2ebcb235cb046c0ccc39c59ba6a98b97732ce2a27332a397344a7a40b452d23c999a06497731a3289a7470281f8725e7f3d14f62b05156db38d190c1391e3c3e17e277375c4ce4f5a8bed6d4f0bd472021de649597df2eabf40badaeee8e66e56fdf9d345b4731fed35f8ba601c1373a4dbba49ee4fec380fe3616ca53341f8c9f2aa89e6715ff774bc8e24af78d851a5a88deed42f90de59115db74841b6e90cf6bfb1671cd7ff843b4918c0601dea4dc63d9beca34d6e76c4544c98a9e6c68c3b9cd0a43b371832b4a086755c81d5b415f618f4d69209b99472b4e14d07b05299bf2700de70d7680be47a97922adeda28495ac40d74a0f01d282d85832ccbfb880d6a3031ab13326f784c0ddcc625bfcfba2f95a71450c1c66ed558ecdf131ccf98085831e3e48c4b92f60b4ca7040b977717abe4a3ef1b030fd7c51e9182ec6829f104e5ee8e9f5ec3049634524162798328af418467129946357b26debaefa4b4b29676c199a7b120cb97f91b186c5d9d5c1c68b0ac6c188ded8993f893a9feee37afc5a8113c1de57a07a5df1046e9065b3e0a0f894e18b00d73ea5850998feadf31dc3278bf438350aba7b43f06311b60dfe9948d58012598626fbdb4058764198f6d4e44a4599b62cf826e6ec530f056f44b1cc6f5886472f68a70c2af78d2e2651d427fb292daa3bcbe18c255ebc7e7f82e97d948ced5998c661555bcf72225a8e97dbea7ec85f09f2200034119572300475d4ec4a0ede8ea7a8f6a7362865c34b797967592a3562df6e745bc63c240589509757e217ac7c42e93614dc99bd0462a7cabb9deda505f5ce83c96f0a14cd80e0dd485a1d6671ee0845fa0bc56b3e294975d878f05733505564b", + "difficulty": 232871166515, + "difficulty_top64": 0, + "expected_reward": 1180703555413, + "height": 2287042, + "next_seed_hash": "", + "prev_hash": "fbe94dbaf09e5fc4431460ede46c0e7c3db4adf1f0a6f34c5a0f5144e6d9dd27", + "reserved_offset": 130, + "seed_hash": "d432f499205150873b2572b5f033c9c6e4b7c6f3394bd2dd93822cd7085e7307", + "seed_height": 2285568, + "status": "OK", + "untrusted": false, + "wide_difficulty": "0x3638340233" + } +} diff --git a/tests/data/test_jsonrpcdaemon/test_get_coinbase_tx_sum_2200000.json b/tests/data/test_jsonrpcdaemon/test_get_coinbase_tx_sum_2200000.json new file mode 100644 index 0000000..fd57528 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_coinbase_tx_sum_2200000.json @@ -0,0 +1,16 @@ +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "credits": 0, + "emission_amount": 139291580971286, + "emission_amount_top64": 0, + "fee_amount": 505668215000, + "fee_amount_top64": 0, + "status": "OK", + "top_hash": "", + "untrusted": false, + "wide_emission_amount": "0x7eaf59343916", + "wide_fee_amount": "0x75bc2ca0d8" + } +} diff --git a/tests/data/test_jsonrpcdaemon/test_get_connections.json b/tests/data/test_jsonrpcdaemon/test_get_connections.json new file mode 100644 index 0000000..93e19e4 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_connections.json @@ -0,0 +1,334 @@ +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "connections": [ + { + "address": "193.70.78.196:12497", + "address_type": 1, + "avg_download": 0, + "avg_upload": 0, + "connection_id": "0f359103657e4a7bb8fb8c2a70139224", + "current_download": 0, + "current_upload": 0, + "height": 2288915, + "host": "193.70.78.196", + "incoming": false, + "ip": "193.70.78.196", + "live_time": 145, + "local_ip": false, + "localhost": false, + "peer_id": "aa41b836feea9fb7", + "port": "12497", + "pruning_seed": 0, + "recv_count": 66396, + "recv_idle_time": 2, + "rpc_credits_per_hash": 0, + "rpc_port": 0, + "send_count": 111307, + "send_idle_time": 2, + "state": "synchronizing", + "support_flags": 1 + }, + { + "address": "52.60.218.210:18080", + "address_type": 1, + "avg_download": 0, + "avg_upload": 0, + "connection_id": "9c52aa37e83c4c16a18d410aef473a8d", + "current_download": 0, + "current_upload": 0, + "height": 2288915, + "host": "52.60.218.210", + "incoming": false, + "ip": "52.60.218.210", + "live_time": 257, + "local_ip": false, + "localhost": false, + "peer_id": "08135737091b21ce", + "port": "18080", + "pruning_seed": 0, + "recv_count": 138613, + "recv_idle_time": 4, + "rpc_credits_per_hash": 0, + "rpc_port": 0, + "send_count": 110233, + "send_idle_time": 5, + "state": "normal", + "support_flags": 1 + }, + { + "address": "24.101.115.189:18080", + "address_type": 1, + "avg_download": 0, + "avg_upload": 0, + "connection_id": "6f77a8afc5144a2ea4a0634d7a9fcaf7", + "current_download": 0, + "current_upload": 0, + "height": 2288915, + "host": "24.101.115.189", + "incoming": false, + "ip": "24.101.115.189", + "live_time": 351, + "local_ip": false, + "localhost": false, + "peer_id": "845cfad73a20ea83", + "port": "18080", + "pruning_seed": 390, + "recv_count": 188693, + "recv_idle_time": 8, + "rpc_credits_per_hash": 0, + "rpc_port": 0, + "send_count": 178782, + "send_idle_time": 7, + "state": "normal", + "support_flags": 1 + }, + { + "address": "97.91.211.35:18080", + "address_type": 1, + "avg_download": 0, + "avg_upload": 30, + "connection_id": "76085153221a4ea2a39ad92125842aa0", + "current_download": 0, + "current_upload": 44, + "height": 2265888, + "host": "97.91.211.35", + "incoming": false, + "ip": "97.91.211.35", + "live_time": 505, + "local_ip": false, + "localhost": false, + "peer_id": "6fb43c7e734dd1d7", + "port": "18080", + "pruning_seed": 0, + "recv_count": 55316, + "recv_idle_time": 6, + "rpc_credits_per_hash": 0, + "rpc_port": 0, + "send_count": 15975280, + "send_idle_time": 4, + "state": "normal", + "support_flags": 1 + }, + { + "address": "54.180.125.82:18080", + "address_type": 1, + "avg_download": 0, + "avg_upload": 0, + "connection_id": "982f50cefae94991b4dd2857cc1ad9fd", + "current_download": 0, + "current_upload": 0, + "height": 2288915, + "host": "54.180.125.82", + "incoming": false, + "ip": "54.180.125.82", + "live_time": 457, + "local_ip": false, + "localhost": false, + "peer_id": "84050758addac752", + "port": "18080", + "pruning_seed": 0, + "recv_count": 327996, + "recv_idle_time": 3, + "rpc_credits_per_hash": 0, + "rpc_port": 0, + "send_count": 218244, + "send_idle_time": 6, + "state": "normal", + "support_flags": 1 + }, + { + "address": "158.69.245.223:18080", + "address_type": 1, + "avg_download": 0, + "avg_upload": 0, + "connection_id": "e0bebcf53db74a5a884ba403450a3b49", + "current_download": 0, + "current_upload": 0, + "height": 2288915, + "host": "158.69.245.223", + "incoming": false, + "ip": "158.69.245.223", + "live_time": 548, + "local_ip": false, + "localhost": false, + "peer_id": "a45f3600853895a7", + "port": "18080", + "pruning_seed": 0, + "recv_count": 288659, + "recv_idle_time": 7, + "rpc_credits_per_hash": 0, + "rpc_port": 0, + "send_count": 270778, + "send_idle_time": 5, + "state": "normal", + "support_flags": 1 + }, + { + "address": "47.100.185.97:18080", + "address_type": 1, + "avg_download": 0, + "avg_upload": 0, + "connection_id": "6ca6e860bbc94d5a81a758ef37dffd0b", + "current_download": 0, + "current_upload": 0, + "height": 2288915, + "host": "47.100.185.97", + "incoming": false, + "ip": "47.100.185.97", + "live_time": 596, + "local_ip": false, + "localhost": false, + "peer_id": "67aa8c69d30b6a61", + "port": "18080", + "pruning_seed": 0, + "recv_count": 314165, + "recv_idle_time": 5, + "rpc_credits_per_hash": 0, + "rpc_port": 0, + "send_count": 287678, + "send_idle_time": 5, + "state": "normal", + "support_flags": 1 + }, + { + "address": "94.2.65.190:18080", + "address_type": 1, + "avg_download": 0, + "avg_upload": 0, + "connection_id": "148d6af9c1c246b58947511c9530023a", + "current_download": 0, + "current_upload": 0, + "height": 2288915, + "host": "94.2.65.190", + "incoming": false, + "ip": "94.2.65.190", + "live_time": 598, + "local_ip": false, + "localhost": false, + "peer_id": "8dfddb88ee5e7c67", + "port": "18080", + "pruning_seed": 0, + "recv_count": 312873, + "recv_idle_time": 2, + "rpc_credits_per_hash": 0, + "rpc_port": 0, + "send_count": 288696, + "send_idle_time": 5, + "state": "normal", + "support_flags": 1 + }, + { + "address": "80.241.217.144:18080", + "address_type": 1, + "avg_download": 0, + "avg_upload": 0, + "connection_id": "da26125daf9345919e497adf204bb640", + "current_download": 0, + "current_upload": 0, + "height": 2288915, + "host": "80.241.217.144", + "incoming": false, + "ip": "80.241.217.144", + "live_time": 565, + "local_ip": false, + "localhost": false, + "peer_id": "bd1d992806bb8927", + "port": "18080", + "pruning_seed": 0, + "recv_count": 299445, + "recv_idle_time": 5, + "rpc_credits_per_hash": 1677721, + "rpc_port": 18081, + "send_count": 261093, + "send_idle_time": 5, + "state": "normal", + "support_flags": 1 + }, + { + "address": "148.251.85.3:18080", + "address_type": 1, + "avg_download": 0, + "avg_upload": 0, + "connection_id": "ec3ca1222f5d462a8df762ccbf3f38bf", + "current_download": 0, + "current_upload": 0, + "height": 2288915, + "host": "148.251.85.3", + "incoming": false, + "ip": "148.251.85.3", + "live_time": 598, + "local_ip": false, + "localhost": false, + "peer_id": "2d62a098dde2d88a", + "port": "18080", + "pruning_seed": 0, + "recv_count": 314075, + "recv_idle_time": 5, + "rpc_credits_per_hash": 0, + "rpc_port": 18088, + "send_count": 308837, + "send_idle_time": 5, + "state": "normal", + "support_flags": 1 + }, + { + "address": "197.245.222.218:18080", + "address_type": 1, + "avg_download": 0, + "avg_upload": 0, + "connection_id": "68b7957705be42c9a6e11e53d85e5932", + "current_download": 0, + "current_upload": 0, + "height": 2288915, + "host": "197.245.222.218", + "incoming": false, + "ip": "197.245.222.218", + "live_time": 45, + "local_ip": false, + "localhost": false, + "peer_id": "12763cc92ac5bb37", + "port": "18080", + "pruning_seed": 0, + "recv_count": 32941, + "recv_idle_time": 4, + "rpc_credits_per_hash": 0, + "rpc_port": 18089, + "send_count": 21562, + "send_idle_time": 5, + "state": "normal", + "support_flags": 1 + }, + { + "address": "112.215.205.229:18080", + "address_type": 1, + "avg_download": 0, + "avg_upload": 0, + "connection_id": "bc14510a700943dba892b38d858e786b", + "current_download": 0, + "current_upload": 0, + "height": 2288915, + "host": "112.215.205.229", + "incoming": false, + "ip": "112.215.205.229", + "live_time": 592, + "local_ip": false, + "localhost": false, + "peer_id": "2ade87c2d76672f0", + "port": "18080", + "pruning_seed": 0, + "recv_count": 313614, + "recv_idle_time": 2, + "rpc_credits_per_hash": 0, + "rpc_port": 0, + "send_count": 297173, + "send_idle_time": 7, + "state": "normal", + "support_flags": 1 + } + ], + "status": "OK", + "untrusted": false + } +} diff --git a/tests/data/test_jsonrpcdaemon/test_get_fee_estimate.json b/tests/data/test_jsonrpcdaemon/test_get_fee_estimate.json new file mode 100644 index 0000000..02e2f0b --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_fee_estimate.json @@ -0,0 +1,12 @@ +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "credits": 0, + "fee": 7790, + "quantization_mask": 10000, + "status": "OK", + "top_hash": "", + "untrusted": false + } +} \ No newline at end of file diff --git a/tests/data/test_jsonrpcdaemon/test_get_height_2294632.json b/tests/data/test_jsonrpcdaemon/test_get_height_2294632.json new file mode 100644 index 0000000..346c03f --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_height_2294632.json @@ -0,0 +1,6 @@ +{ + "hash": "228c0538b7ba7d28fdd58ed310326db61ea052038bdb42652f6e1852cf666325", + "height": 2294632, + "status": "OK", + "untrusted": false +} \ No newline at end of file diff --git a/tests/data/test_jsonrpcdaemon/test_get_info.json b/tests/data/test_jsonrpcdaemon/test_get_info.json new file mode 100644 index 0000000..537c9d8 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_info.json @@ -0,0 +1,48 @@ +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "adjusted_time": 1612377295, + "alt_blocks_count": 0, + "block_size_limit": 600000, + "block_size_median": 300000, + "block_weight_limit": 600000, + "block_weight_median": 300000, + "bootstrap_daemon_address": "", + "busy_syncing": false, + "credits": 0, + "cumulative_difficulty": 86754859378339639, + "cumulative_difficulty_top64": 0, + "database_size": 120378499072, + "difficulty": 258886688222, + "difficulty_top64": 0, + "free_space": 275984478208, + "grey_peerlist_size": 5000, + "height": 2288923, + "height_without_bootstrap": 2288923, + "incoming_connections_count": 0, + "mainnet": true, + "nettype": "mainnet", + "offline": false, + "outgoing_connections_count": 12, + "rpc_connections_count": 1, + "stagenet": false, + "start_time": 1612375367, + "status": "OK", + "synchronized": true, + "target": 120, + "target_height": 2288923, + "testnet": false, + "top_block_hash": "d41401b43220e54ec2567a889e0ad65196ba28d98e61b24d20491ddd060317a1", + "top_hash": "", + "tx_count": 11295065, + "tx_pool_size": 21, + "untrusted": false, + "update_available": false, + "version": "0.17.1.9-release", + "was_bootstrap_ever_used": false, + "white_peerlist_size": 1000, + "wide_cumulative_difficulty": "0x1343715bfc8ef37", + "wide_difficulty": "0x3c46d95dde" + } +} diff --git a/tests/data/test_jsonrpcdaemon/test_get_last_block_header_BUSY.json b/tests/data/test_jsonrpcdaemon/test_get_last_block_header_BUSY.json new file mode 100644 index 0000000..8fbad9e --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_last_block_header_BUSY.json @@ -0,0 +1,32 @@ +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "block_header": { + "block_size": 0, + "cumulative_difficulty": 0, + "cumulative_difficulty_top64": 0, + "depth": 0, + "difficulty": 0, + "difficulty_top64": 0, + "hash": "", + "height": 0, + "major_version": 0, + "miner_tx_hash": "", + "minor_version": 0, + "nonce": 0, + "num_txes": 0, + "orphan_status": false, + "pow_hash": "", + "prev_hash": "", + "reward": 0, + "timestamp": 0, + "wide_cumulative_difficulty": "", + "wide_difficulty": "" + }, + "credits": 0, + "status": "BUSY", + "top_hash": "", + "untrusted": false + } +} \ No newline at end of file diff --git a/tests/data/test_jsonrpcdaemon/test_get_last_block_header_success.json b/tests/data/test_jsonrpcdaemon/test_get_last_block_header_success.json new file mode 100644 index 0000000..1e93644 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_last_block_header_success.json @@ -0,0 +1,34 @@ +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "block_header": { + "block_size": 65605, + "block_weight": 65605, + "cumulative_difficulty": 86426998743673801, + "cumulative_difficulty_top64": 0, + "depth": 0, + "difficulty": 253652891944, + "difficulty_top64": 0, + "hash": "a55ec867052340715c4b8b4dcd2de53bc2a195e666058d10a224037932ccdc40", + "height": 2287573, + "long_term_weight": 65605, + "major_version": 14, + "miner_tx_hash": "42219818a7f30910a89e0d0d9fc479950137b93820e5955fc071fa8f4e3c2400", + "minor_version": 14, + "nonce": 37920, + "num_txes": 34, + "orphan_status": false, + "pow_hash": "", + "prev_hash": "7ca630666d7040f0cadbaaf9da92db4797ef67b60ca8f15324b94236ffe0b3a8", + "reward": 1181081601887, + "timestamp": 1612215053, + "wide_cumulative_difficulty": "0x1330ce5bf1eabc9", + "wide_difficulty": "0x3b0ee3f928" + }, + "credits": 0, + "status": "OK", + "top_hash": "", + "untrusted": false + } +} \ No newline at end of file diff --git a/tests/data/test_jsonrpcdaemon/test_get_limit.json b/tests/data/test_jsonrpcdaemon/test_get_limit.json new file mode 100644 index 0000000..11df714 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_limit.json @@ -0,0 +1,6 @@ +{ + "limit_down": 8192, + "limit_up": 2048, + "status": "OK", + "untrusted": false +} diff --git a/tests/data/test_jsonrpcdaemon/test_get_output_histogram_1and5.json b/tests/data/test_jsonrpcdaemon/test_get_output_histogram_1and5.json new file mode 100644 index 0000000..142bb83 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_output_histogram_1and5.json @@ -0,0 +1,24 @@ +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "credits": 0, + "histogram": [ + { + "amount": 1000000000000, + "recent_instances": 874619, + "total_instances": 874619, + "unlocked_instances": 874619 + }, + { + "amount": 5000000000000, + "recent_instances": 255089, + "total_instances": 255089, + "unlocked_instances": 255089 + } + ], + "status": "OK", + "top_hash": "", + "untrusted": false + } +} \ No newline at end of file diff --git a/tests/data/test_jsonrpcdaemon/test_get_outs_multiple.json b/tests/data/test_jsonrpcdaemon/test_get_outs_multiple.json new file mode 100644 index 0000000..297748c --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_outs_multiple.json @@ -0,0 +1,36 @@ +{ + "credits": 0, + "outs": [ + { + "height": 1224094, + "key": "fc13952b8b9c193d4c875e750e88a0da8a7d348f95c019cfde93762d68298dd7", + "mask": "bf99dc047048605f6e0aeebc937477ae6e9e3143e1be1b48af225b41f809e44e", + "txid": "687f9b1d6fa409a13e84c682e90127b1953e10efe679c114a01d7db77f474d50", + "unlocked": true + }, + { + "height": 1224094, + "key": "23212433aec99219a823f107bcd27cb45a292d5c831b096d8e655e77e133b27e", + "mask": "3ad2a785a992b1491713efc809996e7007c9fabaf962edf10961d60aaa0dace7", + "txid": "687f9b1d6fa409a13e84c682e90127b1953e10efe679c114a01d7db77f474d50", + "unlocked": true + }, + { + "height": 999999, + "key": "fc22266e72afb339559e8938c99ee86157bfea20cd6115c477c40a53bc173378", + "mask": "02fa353aa84ea8c44c8023065d7941606b1fa5c264dccf46dc6494ebe9606f20", + "txid": "2a5d456439f7ae27b5d26e493651c0e24e1d7e02b6d9d019c89d562ce0658472", + "unlocked": true + }, + { + "height": 999999, + "key": "e20315663e3d278421797c4098c828cad5220849d08c3d26fee72003d4cda698", + "mask": "100c6f1342b71b73edddc5492be923182f00a683488ec3a2a1c7a949cbe57768", + "txid": "2a5d456439f7ae27b5d26e493651c0e24e1d7e02b6d9d019c89d562ce0658472", + "unlocked": true + } + ], + "status": "OK", + "top_hash": "", + "untrusted": false +} \ No newline at end of file diff --git a/tests/data/test_jsonrpcdaemon/test_get_outs_single.json b/tests/data/test_jsonrpcdaemon/test_get_outs_single.json new file mode 100644 index 0000000..da27923 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_outs_single.json @@ -0,0 +1,15 @@ +{ + "credits": 0, + "outs": [ + { + "height": 1222460, + "key": "9c7055cb5b790f1eebf10b7b8fbe01241eb736b5766d15554da7099bbcdc4b44", + "mask": "42e37af85cddaeccbea6fe597037c9377045a682e66661260868877b9440af70", + "txid": "b357374ad4636f17520b6c2fdcf0fb5e6a1185fed2aef509b19b5100d04ae552", + "unlocked": true + } + ], + "status": "OK", + "top_hash": "", + "untrusted": false +} \ No newline at end of file diff --git a/tests/data/test_jsonrpcdaemon/test_get_peer_list.json b/tests/data/test_jsonrpcdaemon/test_get_peer_list.json new file mode 100644 index 0000000..3f70457 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_peer_list.json @@ -0,0 +1,1986 @@ +{ + "gray_list": [ + { + "host": "92.233.45.0", + "id": 779474923786790553, + "ip": 3008860, + "last_seen": 0, + "port": 5156 + }, + { + "host": "92.233.45.0", + "id": 15987077781949512906, + "ip": 3008860, + "last_seen": 0, + "port": 6261 + }, + { + "host": "92.233.45.0", + "id": 5764671393012584235, + "ip": 3008860, + "last_seen": 0, + "port": 8581 + }, + { + "host": "92.233.45.0", + "id": 12902451817603222248, + "ip": 3008860, + "last_seen": 0, + "port": 10069 + }, + { + "host": "92.233.45.0", + "id": 7080165431715177761, + "ip": 3008860, + "last_seen": 0, + "port": 11189 + }, + { + "host": "92.233.45.0", + "id": 8435070856224735576, + "ip": 3008860, + "last_seen": 0, + "port": 14588 + }, + { + "host": "92.233.45.0", + "id": 4062424040325456143, + "ip": 3008860, + "last_seen": 0, + "port": 18080 + }, + { + "host": "97.107.205.0", + "id": 13126395034891249360, + "ip": 13462369, + "last_seen": 0, + "port": 8602 + }, + { + "host": "97.107.205.0", + "id": 6711839234508587175, + "ip": 13462369, + "last_seen": 0, + "port": 9420 + }, + { + "host": "97.107.205.0", + "id": 3078221558566017070, + "ip": 13462369, + "last_seen": 0, + "port": 12166 + }, + { + "host": "97.107.205.0", + "id": 4622360873820307608, + "ip": 13462369, + "last_seen": 0, + "port": 15596 + }, + { + "host": "97.107.205.0", + "id": 11650334017484549862, + "ip": 13462369, + "last_seen": 0, + "port": 18080 + }, + { + "host": "90.251.249.0", + "id": 2324961713670397476, + "ip": 16382810, + "last_seen": 0, + "port": 18080 + }, + { + "host": "24.38.253.0", + "id": 14217849125675872810, + "ip": 16590360, + "last_seen": 0, + "port": 18080 + }, + { + "host": "50.123.10.1", + "id": 3654198555105963589, + "ip": 17464114, + "last_seen": 0, + "port": 7372 + }, + { + "host": "50.123.10.1", + "id": 11871723637330058954, + "ip": 17464114, + "last_seen": 0, + "port": 11664 + }, + { + "host": "50.123.10.1", + "id": 17695168341920681727, + "ip": 17464114, + "last_seen": 0, + "port": 12047 + }, + { + "host": "116.203.42.1", + "id": 10105152526202709756, + "ip": 19581812, + "last_seen": 0, + "port": 18080, + "pruning_seed": 391, + "rpc_port": 18089 + }, + { + "host": "135.181.96.1", + "id": 1288736522654363159, + "ip": 23115143, + "last_seen": 0, + "port": 18080, + "pruning_seed": 389, + "rpc_port": 18089 + }, + { + "host": "45.66.110.1", + "id": 7677058678646617528, + "ip": 24003117, + "last_seen": 0, + "port": 18080 + }, + { + "host": "90.214.115.1", + "id": 15643640120403601865, + "ip": 24368730, + "last_seen": 0, + "port": 18080 + }, + { + "host": "83.78.203.1", + "id": 8764506475656833293, + "ip": 30101075, + "last_seen": 0, + "port": 18080 + }, + { + "host": "95.31.11.2", + "id": 7973662894853132712, + "ip": 34283359, + "last_seen": 0, + "port": 2924 + }, + { + "host": "95.31.11.2", + "id": 10372872189317723540, + "ip": 34283359, + "last_seen": 0, + "port": 4320 + }, + { + "host": "95.31.11.2", + "id": 17571050156906726415, + "ip": 34283359, + "last_seen": 0, + "port": 9463 + }, + { + "host": "95.31.11.2", + "id": 11716344520679473655, + "ip": 34283359, + "last_seen": 0, + "port": 9901 + }, + { + "host": "95.31.11.2", + "id": 11581932738466608144, + "ip": 34283359, + "last_seen": 0, + "port": 9973 + }, + { + "host": "95.31.11.2", + "id": 10654032656552018403, + "ip": 34283359, + "last_seen": 0, + "port": 10773 + }, + { + "host": "95.31.11.2", + "id": 15979201645195148943, + "ip": 34283359, + "last_seen": 0, + "port": 11960 + }, + { + "host": "85.163.64.2", + "id": 10564808662010939534, + "ip": 37790549, + "last_seen": 0, + "port": 18080 + }, + { + "host": "135.181.96.2", + "id": 5104233230066737178, + "ip": 39892359, + "last_seen": 0, + "port": 18080, + "pruning_seed": 386, + "rpc_port": 18089 + }, + { + "host": "70.35.142.2", + "id": 2736871122569659727, + "ip": 42869574, + "last_seen": 0, + "port": 18080, + "rpc_port": 18089 + }, + { + "host": "167.172.153.2", + "id": 10304250494922453473, + "ip": 43625639, + "last_seen": 0, + "port": 18080, + "pruning_seed": 391, + "rpc_port": 18089 + }, + { + "host": "138.197.156.2", + "id": 17698589515404280428, + "ip": 43828618, + "last_seen": 0, + "port": 18080, + "pruning_seed": 389, + "rpc_port": 18089 + }, + { + "host": "86.26.157.2", + "id": 11350341089863557181, + "ip": 43850326, + "last_seen": 0, + "port": 18080 + }, + { + "host": "85.236.163.2", + "id": 14688336842225122273, + "ip": 44297301, + "last_seen": 0, + "port": 18080 + }, + { + "host": "2.86.208.2", + "id": 10904657779924885142, + "ip": 47207938, + "last_seen": 0, + "port": 18080 + }, + { + "host": "184.167.211.2", + "id": 2759225003207673348, + "ip": 47425464, + "last_seen": 0, + "port": 18080, + "rpc_port": 18089 + }, + { + "host": "190.120.229.2", + "id": 9932539413136577433, + "ip": 48593086, + "last_seen": 0, + "port": 18080 + }, + { + "host": "192.99.232.2", + "id": 17483949079279998064, + "ip": 48784320, + "last_seen": 0, + "port": 18080 + }, + { + "host": "209.222.252.2", + "id": 13436473500902722579, + "ip": 50126545, + "last_seen": 0, + "port": 18080 + }, + { + "host": "83.223.21.3", + "id": 5525509980472020948, + "ip": 51765075, + "last_seen": 0, + "port": 18080 + }, + { + "host": "50.89.70.3", + "id": 6489648206388624499, + "ip": 54942002, + "last_seen": 0, + "port": 18080 + }, + { + "host": "148.251.85.3", + "id": 5712127357362720604, + "ip": 55966612, + "last_seen": 0, + "port": 18080, + "rpc_port": 18088 + }, + { + "host": "185.100.87.3", + "id": 5092634023628006602, + "ip": 56059065, + "last_seen": 0, + "port": 18080, + "rpc_port": 18081 + }, + { + "host": "135.181.96.3", + "id": 3399922587291439717, + "ip": 56669575, + "last_seen": 0, + "port": 18080, + "pruning_seed": 385, + "rpc_port": 18089 + }, + { + "host": "78.108.102.3", + "id": 1690266458204906159, + "ip": 57044046, + "last_seen": 0, + "port": 18080 + }, + { + "host": "45.137.216.3", + "id": 12481409206697508185, + "ip": 64522541, + "last_seen": 0, + "port": 18080 + }, + { + "host": "193.32.222.3", + "id": 6947972491846436663, + "ip": 64889025, + "last_seen": 0, + "port": 18080, + "pruning_seed": 389 + }, + { + "host": "184.23.22.4", + "id": 3890426483120330967, + "ip": 68556728, + "last_seen": 0, + "port": 18080, + "pruning_seed": 386 + }, + { + "host": "87.78.48.4", + "id": 14062915939536215495, + "ip": 70274647, + "last_seen": 0, + "port": 18080 + }, + { + "host": "51.89.73.4", + "id": 10356676212929067750, + "ip": 71915827, + "last_seen": 0, + "port": 5570 + }, + { + "host": "51.89.73.4", + "id": 16749370979449186143, + "ip": 71915827, + "last_seen": 0, + "port": 5919 + }, + { + "host": "51.89.73.4", + "id": 17365232549054309219, + "ip": 71915827, + "last_seen": 0, + "port": 6933 + }, + { + "host": "51.89.73.4", + "id": 3921565833700626030, + "ip": 71915827, + "last_seen": 0, + "port": 8660 + }, + { + "host": "51.89.73.4", + "id": 8255539757747097868, + "ip": 71915827, + "last_seen": 0, + "port": 10507 + }, + { + "host": "51.89.73.4", + "id": 10737319983332373391, + "ip": 71915827, + "last_seen": 0, + "port": 11991 + }, + { + "host": "51.89.73.4", + "id": 4385904119107221913, + "ip": 71915827, + "last_seen": 0, + "port": 17530 + }, + { + "host": "51.89.73.4", + "id": 18040899815758783201, + "ip": 71915827, + "last_seen": 0, + "port": 18080 + }, + { + "host": "71.232.84.4", + "id": 6424371053648629406, + "ip": 72673351, + "last_seen": 0, + "port": 18080 + }, + { + "host": "188.93.90.4", + "id": 8435484731493571203, + "ip": 73031100, + "last_seen": 0, + "port": 18080 + }, + { + "host": "96.19.95.4", + "id": 7017675385417923412, + "ip": 73339744, + "last_seen": 0, + "port": 18080 + }, + { + "host": "72.10.155.4", + "id": 17952274650692888281, + "ip": 77269576, + "last_seen": 0, + "port": 18080 + }, + { + "host": "176.9.158.4", + "id": 8420417412697512859, + "ip": 77466032, + "last_seen": 0, + "port": 18080 + }, + { + "host": "168.119.165.4", + "id": 14712302931325676671, + "ip": 77952936, + "last_seen": 0, + "port": 18080, + "pruning_seed": 384, + "rpc_port": 18089 + }, + { + "host": "198.84.175.4", + "id": 13962339296799685662, + "ip": 78599366, + "last_seen": 0, + "port": 18080 + }, + { + "host": "98.156.175.4", + "id": 7707051208013191511, + "ip": 78617698, + "last_seen": 0, + "port": 18080 + }, + { + "host": "72.83.32.5", + "id": 2604036300392747688, + "ip": 86004552, + "last_seen": 0, + "port": 18080 + }, + { + "host": "95.90.56.5", + "id": 16273144514850555096, + "ip": 87579231, + "last_seen": 0, + "port": 18080 + }, + { + "host": "162.218.65.5", + "id": 3691553544300674870, + "ip": 88201890, + "last_seen": 0, + "port": 18480 + }, + { + "host": "91.237.77.5", + "id": 1294026249158639560, + "ip": 88993115, + "last_seen": 0, + "port": 18080 + }, + { + "host": "54.185.86.5", + "id": 15772633170305928027, + "ip": 89569590, + "last_seen": 0, + "port": 18080 + }, + { + "host": "91.233.112.5", + "id": 10969291772500250456, + "ip": 91285851, + "last_seen": 0, + "port": 18080, + "pruning_seed": 391 + }, + { + "host": "82.169.114.5", + "id": 10223489318822779929, + "ip": 91400530, + "last_seen": 0, + "port": 18080 + }, + { + "host": "145.239.118.5", + "id": 17619644515764671408, + "ip": 91680657, + "last_seen": 0, + "port": 3568 + }, + { + "host": "145.239.118.5", + "id": 8035975124447268830, + "ip": 91680657, + "last_seen": 0, + "port": 7741 + }, + { + "host": "145.239.118.5", + "id": 14068269987284124762, + "ip": 91680657, + "last_seen": 0, + "port": 7947 + }, + { + "host": "145.239.118.5", + "id": 15998830447435921789, + "ip": 91680657, + "last_seen": 0, + "port": 8965 + }, + { + "host": "145.239.118.5", + "id": 3209376435980573034, + "ip": 91680657, + "last_seen": 0, + "port": 13725 + }, + { + "host": "145.239.118.5", + "id": 9484230294731029488, + "ip": 91680657, + "last_seen": 0, + "port": 16979 + }, + { + "host": "145.239.118.5", + "id": 1929156493128163303, + "ip": 91680657, + "last_seen": 0, + "port": 17553 + }, + { + "host": "145.239.118.5", + "id": 10525797359361319780, + "ip": 91680657, + "last_seen": 0, + "port": 18080 + }, + { + "host": "104.246.122.5", + "id": 4580042963265457993, + "ip": 91944552, + "last_seen": 0, + "port": 18080 + }, + { + "host": "45.37.132.5", + "id": 17799927848353298631, + "ip": 92546349, + "last_seen": 0, + "port": 18080 + }, + { + "host": "82.64.152.5", + "id": 2758239322907149572, + "ip": 93864018, + "last_seen": 0, + "port": 18080 + }, + { + "host": "1.121.185.5", + "id": 6251389959682595545, + "ip": 96041217, + "last_seen": 0, + "port": 18080 + }, + { + "host": "109.190.247.5", + "id": 17424324455467389594, + "ip": 100122221, + "last_seen": 0, + "port": 18080, + "rpc_port": 18081 + }, + { + "host": "159.65.47.6", + "id": 9865192999378690616, + "ip": 103760287, + "last_seen": 0, + "port": 18080, + "pruning_seed": 384, + "rpc_credits_per_hash": 4194304, + "rpc_port": 18081 + }, + { + "host": "189.147.107.6", + "id": 11637249794512542791, + "ip": 107713469, + "last_seen": 0, + "port": 18080 + }, + { + "host": "69.245.184.6", + "id": 2285560786709704553, + "ip": 112784709, + "last_seen": 0, + "port": 18080 + }, + { + "host": "138.201.188.6", + "id": 3649563622049395290, + "ip": 113035658, + "last_seen": 0, + "port": 18080, + "pruning_seed": 389, + "rpc_port": 18089 + }, + { + "host": "198.1.231.6", + "id": 9963056597686882271, + "ip": 115802566, + "last_seen": 0, + "port": 18080 + }, + { + "host": "98.180.234.6", + "id": 8237996517034602690, + "ip": 116044898, + "last_seen": 0, + "port": 18080 + }, + { + "host": "209.222.252.6", + "id": 1956573385574214682, + "ip": 117235409, + "last_seen": 0, + "port": 18080 + }, + { + "host": "66.30.39.7", + "id": 15442028373168763995, + "ip": 120004162, + "last_seen": 0, + "port": 18080 + }, + { + "host": "37.59.49.7", + "id": 2181810494632329287, + "ip": 120666917, + "last_seen": 0, + "port": 18080 + }, + { + "host": "185.141.60.7", + "id": 5684052159513722181, + "ip": 121408953, + "last_seen": 0, + "port": 18080 + }, + { + "host": "80.210.68.7", + "id": 14924413865894980921, + "ip": 121950800, + "last_seen": 0, + "port": 18080 + }, + { + "host": "144.64.98.7", + "id": 6997848277159153590, + "ip": 123879568, + "last_seen": 0, + "port": 18080 + }, + { + "host": "85.71.100.7", + "id": 15426634277696846096, + "ip": 124012373, + "last_seen": 0, + "port": 18080, + "pruning_seed": 387 + } + ], + "status": "OK", + "untrusted": false, + "white_list": [ + { + "host": "204.8.15.5", + "id": 702714784157243868, + "ip": 84871372, + "last_seen": 1613242702, + "port": 18080, + "rpc_credits_per_hash": 4194304, + "rpc_port": 18089 + }, + { + "host": "34.207.231.7", + "id": 17576610543790767531, + "ip": 132632354, + "last_seen": 1613447476, + "port": 18080 + }, + { + "host": "69.254.146.8", + "id": 11786439466745185298, + "ip": 143851077, + "last_seen": 1613241583, + "port": 18080 + }, + { + "host": "99.228.131.10", + "id": 4874421636464239699, + "ip": 176415843, + "last_seen": 1613430148, + "port": 18080 + }, + { + "host": "95.112.189.10", + "id": 3856373419824690374, + "ip": 180187231, + "last_seen": 1613240627, + "port": 18080, + "rpc_credits_per_hash": 4194304, + "rpc_port": 18089 + }, + { + "host": "185.99.254.10", + "id": 6033565310000331122, + "ip": 184443833, + "last_seen": 1613240834, + "port": 18080, + "rpc_port": 18081 + }, + { + "host": "138.201.50.11", + "id": 674352636005397733, + "ip": 187877770, + "last_seen": 1613450243, + "port": 18080 + }, + { + "host": "190.57.145.13", + "id": 10073896471956312528, + "ip": 227621310, + "last_seen": 1613447549, + "port": 18080 + }, + { + "host": "73.21.51.14", + "id": 10682243103192931629, + "ip": 238228809, + "last_seen": 1613240622, + "port": 18080 + }, + { + "host": "192.119.163.14", + "id": 16783167488733867571, + "ip": 245594048, + "last_seen": 1613448027, + "port": 18080 + }, + { + "host": "188.60.229.14", + "id": 15742421406596871833, + "ip": 249904316, + "last_seen": 1613448342, + "port": 18080 + }, + { + "host": "31.42.176.17", + "id": 8373547741929614693, + "ip": 296757791, + "last_seen": 1613448907, + "port": 18080 + }, + { + "host": "104.174.159.19", + "id": 16150538636897281169, + "ip": 329231976, + "last_seen": 1613240985, + "port": 18080 + }, + { + "host": "64.98.18.21", + "id": 9882668160519737158, + "ip": 353526336, + "last_seen": 1613448281, + "port": 18090, + "rpc_port": 18091 + }, + { + "host": "82.2.12.23", + "id": 6776743557946045026, + "ip": 386662994, + "last_seen": 1613447492, + "port": 18080 + }, + { + "host": "81.242.91.23", + "id": 6328443453119976296, + "ip": 391901777, + "last_seen": 1613450060, + "port": 18080 + }, + { + "host": "168.119.153.23", + "id": 13196138463765120232, + "ip": 395933608, + "last_seen": 1613450433, + "port": 18080, + "pruning_seed": 387, + "rpc_port": 18089 + }, + { + "host": "71.8.152.24", + "id": 1529608223087065821, + "ip": 412616775, + "last_seen": 1613450983, + "port": 18080 + }, + { + "host": "84.75.176.24", + "id": 8491798925682308581, + "ip": 414206804, + "last_seen": 1613240772, + "port": 18080 + }, + { + "host": "68.38.108.26", + "id": 15038541210303188794, + "ip": 443295300, + "last_seen": 1613447470, + "port": 18080 + }, + { + "host": "71.12.162.26", + "id": 4131752412041479517, + "ip": 446827591, + "last_seen": 1613449640, + "port": 18080 + }, + { + "host": "168.119.137.28", + "id": 7571083266747846762, + "ip": 478771112, + "last_seen": 1613240630, + "port": 18080, + "rpc_port": 18081 + }, + { + "host": "152.89.239.29", + "id": 3461503941350972449, + "ip": 502225304, + "last_seen": 1613451289, + "port": 18080, + "pruning_seed": 385 + }, + { + "host": "162.218.65.30", + "id": 13528617371488149457, + "ip": 507632290, + "last_seen": 1613447887, + "port": 18180 + }, + { + "host": "65.30.222.30", + "id": 8941149785562913838, + "ip": 517873217, + "last_seen": 1613451502, + "port": 18080 + }, + { + "host": "1.156.206.31", + "id": 12355497241594030955, + "ip": 533634049, + "last_seen": 1613447504, + "port": 18080 + }, + { + "host": "213.167.240.31", + "id": 11428370191932413440, + "ip": 535865301, + "last_seen": 1613452191, + "port": 18080 + }, + { + "host": "24.95.42.32", + "id": 13789249608496772004, + "ip": 539647768, + "last_seen": 1613449470, + "port": 18080 + }, + { + "host": "168.119.153.32", + "id": 1240195660138316816, + "ip": 546928552, + "last_seen": 1613450575, + "port": 18080, + "rpc_port": 18089 + }, + { + "host": "91.122.191.37", + "id": 8293919607955141661, + "ip": 633305691, + "last_seen": 1613242799, + "port": 18080 + }, + { + "host": "24.50.80.38", + "id": 10330305891451644237, + "ip": 642789912, + "last_seen": 1613240630, + "port": 18080, + "rpc_port": 18081 + }, + { + "host": "188.65.144.40", + "id": 984603033848759982, + "ip": 680542652, + "last_seen": 1613449667, + "port": 18080, + "rpc_port": 18089 + }, + { + "host": "46.30.189.41", + "id": 6437516748989073333, + "ip": 700259886, + "last_seen": 1613447597, + "port": 18080 + }, + { + "host": "144.217.45.44", + "id": 18111436965186519500, + "ip": 741202320, + "last_seen": 1613242793, + "port": 18080 + }, + { + "host": "185.201.47.44", + "id": 14655666381345912175, + "ip": 741329337, + "last_seen": 1613447927, + "port": 18080 + }, + { + "host": "5.189.128.45", + "id": 14850693714528903253, + "ip": 763411717, + "last_seen": 1613452120, + "port": 18080, + "rpc_port": 18089 + }, + { + "host": "84.10.166.45", + "id": 2098887166509265575, + "ip": 765856340, + "last_seen": 1613241684, + "port": 18080 + }, + { + "host": "137.74.139.48", + "id": 12964728675020685356, + "ip": 814434953, + "last_seen": 1613242360, + "port": 15071 + }, + { + "host": "13.232.158.49", + "id": 6343978973309379452, + "ip": 832497677, + "last_seen": 1613241727, + "port": 18080 + }, + { + "host": "111.90.146.54", + "id": 16365129653177783722, + "ip": 915561071, + "last_seen": 1613240833, + "port": 18080, + "pruning_seed": 388 + }, + { + "host": "95.67.38.55", + "id": 14346976816874290475, + "ip": 925254495, + "last_seen": 1613451627, + "port": 18080 + }, + { + "host": "162.218.65.57", + "id": 11154383013760642572, + "ip": 960617122, + "last_seen": 1613449094, + "port": 18080 + }, + { + "host": "138.197.166.57", + "id": 969317507401276190, + "ip": 967230858, + "last_seen": 1613449562, + "port": 18080, + "rpc_credits_per_hash": 4194304 + }, + { + "host": "78.46.68.58", + "id": 7092019670486531349, + "ip": 977546830, + "last_seen": 1613449158, + "port": 18080 + }, + { + "host": "95.216.226.62", + "id": 17485488355602682667, + "ip": 1055053919, + "last_seen": 1613450883, + "port": 18080 + }, + { + "host": "71.127.156.63", + "id": 13077359726905710331, + "ip": 1067220807, + "last_seen": 1613242610, + "port": 18080, + "rpc_port": 18089 + }, + { + "host": "159.89.152.64", + "id": 10291145910620262416, + "ip": 1083726239, + "last_seen": 1613430220, + "port": 18080, + "pruning_seed": 387 + }, + { + "host": "99.253.64.66", + "id": 6769709363817370577, + "ip": 1111555427, + "last_seen": 1613241787, + "port": 18080, + "rpc_port": 18089 + }, + { + "host": "95.85.162.67", + "id": 16962819222156201983, + "ip": 1134712159, + "last_seen": 1613240984, + "port": 18080, + "pruning_seed": 390 + }, + { + "host": "71.112.172.67", + "id": 14850180451207590376, + "ip": 1135374407, + "last_seen": 1613451382, + "port": 18080 + }, + { + "host": "54.39.75.68", + "id": 11247361776454690909, + "ip": 1145775926, + "last_seen": 1613447345, + "port": 10087 + }, + { + "host": "61.163.99.68", + "id": 924560308851824241, + "ip": 1147380541, + "last_seen": 1613240623, + "port": 18080 + }, + { + "host": "85.25.137.68", + "id": 6095536848075231153, + "ip": 1149835605, + "last_seen": 1613240631, + "port": 18080 + }, + { + "host": "116.202.23.69", + "id": 9270414103369259671, + "ip": 1159187060, + "last_seen": 1613242496, + "port": 18080, + "pruning_seed": 384, + "rpc_port": 18089 + }, + { + "host": "51.38.73.70", + "id": 2859662491960564153, + "ip": 1179199027, + "last_seen": 1613430147, + "port": 18080, + "pruning_seed": 390, + "rpc_credits_per_hash": 1677721, + "rpc_port": 18081 + }, + { + "host": "217.182.9.71", + "id": 13311748284279299118, + "ip": 1191818969, + "last_seen": 1613447596, + "port": 3486 + }, + { + "host": "2.223.13.71", + "id": 7385357264965734494, + "ip": 1192091394, + "last_seen": 1613241987, + "port": 18080 + }, + { + "host": "54.39.75.71", + "id": 17741870341485029397, + "ip": 1196107574, + "last_seen": 1613451810, + "port": 2917 + }, + { + "host": "165.227.16.73", + "id": 1102403625267302959, + "ip": 1225843621, + "last_seen": 1613242422, + "port": 18080, + "pruning_seed": 391 + }, + { + "host": "46.188.42.77", + "id": 6446709855309617591, + "ip": 1294646318, + "last_seen": 1613447821, + "port": 18080 + }, + { + "host": "138.68.41.79", + "id": 6207900743235198445, + "ip": 1328104586, + "last_seen": 1613241887, + "port": 18080, + "pruning_seed": 384, + "rpc_port": 18089 + }, + { + "host": "31.220.41.79", + "id": 13409420690672321286, + "ip": 1328143391, + "last_seen": 1613447555, + "port": 18080, + "pruning_seed": 385 + }, + { + "host": "24.194.226.81", + "id": 2454042385056560755, + "ip": 1373815320, + "last_seen": 1613451596, + "port": 18080, + "rpc_port": 18089 + }, + { + "host": "141.41.2.82", + "id": 12492384517623608219, + "ip": 1375873421, + "last_seen": 1613451078, + "port": 18080 + }, + { + "host": "135.181.96.84", + "id": 13076796128763940731, + "ip": 1415624071, + "last_seen": 1613450372, + "port": 18080, + "rpc_port": 18089 + }, + { + "host": "207.161.128.84", + "id": 9115517680526755431, + "ip": 1417716175, + "last_seen": 1613240629, + "port": 18080 + }, + { + "host": "172.105.190.84", + "id": 3528665117244823058, + "ip": 1421765036, + "last_seen": 1613240628, + "port": 18080 + }, + { + "host": "178.41.241.84", + "id": 14788856420145383023, + "ip": 1425090994, + "last_seen": 1613243009, + "port": 18080 + }, + { + "host": "97.67.245.85", + "id": 14872488311255429665, + "ip": 1442136929, + "last_seen": 1613452096, + "port": 18080 + }, + { + "host": "5.55.56.87", + "id": 2731564659794522082, + "ip": 1463301893, + "last_seen": 1613241910, + "port": 18080 + }, + { + "host": "45.83.91.90", + "id": 656461484336296590, + "ip": 1515934509, + "last_seen": 1613451791, + "port": 18080 + }, + { + "host": "51.79.117.94", + "id": 13450169868520063693, + "ip": 1584746291, + "last_seen": 1613449622, + "port": 3035 + }, + { + "host": "51.89.181.96", + "id": 2071579311351148635, + "ip": 1622497587, + "last_seen": 1613449869, + "port": 5200 + }, + { + "host": "51.79.117.99", + "id": 10793318369577534021, + "ip": 1668632371, + "last_seen": 1613448403, + "port": 7778 + }, + { + "host": "5.135.245.101", + "id": 6098780872480982845, + "ip": 1710589701, + "last_seen": 1613447342, + "port": 4923 + }, + { + "host": "51.83.124.103", + "id": 14499553305347269493, + "ip": 1736201011, + "last_seen": 1613242207, + "port": 8358 + }, + { + "host": "100.1.202.106", + "id": 11258041955256709498, + "ip": 1791623524, + "last_seen": 1613430154, + "port": 18080 + }, + { + "host": "162.218.65.107", + "id": 1415501532984455022, + "ip": 1799477922, + "last_seen": 1613448216, + "port": 18080 + }, + { + "host": "147.175.187.111", + "id": 14982231565617578436, + "ip": 1874571155, + "last_seen": 1613447548, + "port": 18080 + }, + { + "host": "128.204.192.111", + "id": 13020455015080487060, + "ip": 1874906240, + "last_seen": 1613450472, + "port": 18080, + "rpc_port": 18089 + }, + { + "host": "94.155.25.117", + "id": 12160961025814705088, + "ip": 1964612446, + "last_seen": 1613242732, + "port": 18080 + }, + { + "host": "146.59.156.117", + "id": 1337478681562147935, + "ip": 1973173138, + "last_seen": 1613452180, + "port": 9899 + }, + { + "host": "168.119.64.118", + "id": 8240841038371178451, + "ip": 1983936424, + "last_seen": 1613430124, + "port": 18080 + }, + { + "host": "69.166.233.118", + "id": 10336758610260013358, + "ip": 1995023941, + "last_seen": 1613241404, + "port": 18080, + "pruning_seed": 391 + }, + { + "host": "54.38.217.119", + "id": 5751274044419257437, + "ip": 2010719798, + "last_seen": 1613450494, + "port": 17858 + }, + { + "host": "51.195.4.120", + "id": 6735168648570032090, + "ip": 2013578035, + "last_seen": 1613240898, + "port": 18080 + }, + { + "host": "13.57.26.120", + "id": 13332028673050504134, + "ip": 2014984461, + "last_seen": 1613449975, + "port": 18080 + }, + { + "host": "73.25.51.124", + "id": 4539668698720068656, + "ip": 2083723593, + "last_seen": 1613447490, + "port": 18080 + }, + { + "host": "99.242.226.125", + "id": 10069789350141613683, + "ip": 2112025187, + "last_seen": 1613242301, + "port": 18080 + }, + { + "host": "95.216.13.126", + "id": 10189340314122712836, + "ip": 2114836575, + "last_seen": 1613448435, + "port": 18080 + }, + { + "host": "24.246.203.126", + "id": 10237152803735815762, + "ip": 2127296024, + "last_seen": 1613450781, + "port": 18080 + }, + { + "host": "163.172.160.127", + "id": 10255256945094888580, + "ip": 2141236387, + "last_seen": 1613449466, + "port": 18080 + }, + { + "host": "107.13.140.129", + "id": 7253915447346753192, + "ip": 2173439339, + "last_seen": 1613450678, + "port": 18080, + "rpc_port": 18089 + }, + { + "host": "178.191.251.132", + "id": 2693330727735381003, + "ip": 2231091122, + "last_seen": 1613447600, + "port": 18080 + }, + { + "host": "81.227.102.133", + "id": 15432851871566410604, + "ip": 2238112593, + "last_seen": 1613240959, + "port": 18080 + }, + { + "host": "185.152.65.135", + "id": 16207503225671027711, + "ip": 2269223097, + "last_seen": 1613451685, + "port": 18080 + }, + { + "host": "37.110.152.135", + "id": 12383433287277217854, + "ip": 2274913829, + "last_seen": 1613241352, + "port": 18080 + }, + { + "host": "68.200.255.139", + "id": 10967523544254491977, + "ip": 2348795972, + "last_seen": 1613451993, + "port": 18080 + }, + { + "host": "151.80.17.140", + "id": 1635000610204590138, + "ip": 2349944983, + "last_seen": 1613430154, + "port": 16942 + }, + { + "host": "147.229.188.143", + "id": 2347181902913052789, + "ip": 2411521427, + "last_seen": 1613451198, + "port": 18080 + }, + { + "host": "80.241.217.144", + "id": 1947944318474853435, + "ip": 2430202192, + "last_seen": 1613241413, + "port": 18080, + "rpc_credits_per_hash": 1677721, + "rpc_port": 18081 + }, + { + "host": "8.48.74.146", + "id": 14610893634104705921, + "ip": 2454335496, + "last_seen": 1613242597, + "port": 18080 + }, + { + "host": "72.143.34.150", + "id": 10525613679623743377, + "ip": 2518847304, + "last_seen": 1613242854, + "port": 18080 + }, + { + "host": "51.91.33.151", + "id": 14776230520218615686, + "ip": 2535545651, + "last_seen": 1613447344, + "port": 13496 + }, + { + "host": "135.181.96.159", + "id": 1351656325623764810, + "ip": 2673915271, + "last_seen": 1613240622, + "port": 18080, + "pruning_seed": 391, + "rpc_port": 18089 + }, + { + "host": "51.68.222.162", + "id": 5102159030145116943, + "ip": 2732475443, + "last_seen": 1613451749, + "port": 16399 + }, + { + "host": "91.121.140.167", + "id": 7889626864724427973, + "ip": 2811001179, + "last_seen": 1613242915, + "port": 18080 + }, + { + "host": "24.51.193.168", + "id": 8320931696855770973, + "ip": 2831233816, + "last_seen": 1613447546, + "port": 18080 + }, + { + "host": "51.89.208.175", + "id": 3025072809131482940, + "ip": 2949667123, + "last_seen": 1613451374, + "port": 4996 + }, + { + "host": "51.89.134.178", + "id": 13523084732664001765, + "ip": 2995149107, + "last_seen": 1613451931, + "port": 16210 + }, + { + "host": "88.99.83.181", + "id": 3857727057417267756, + "ip": 3042141016, + "last_seen": 1613430124, + "port": 18080, + "rpc_port": 18089 + }, + { + "host": "190.80.96.183", + "id": 16999522279283098933, + "ip": 3076542654, + "last_seen": 1613241484, + "port": 18080 + }, + { + "host": "94.23.163.184", + "id": 14094180366712930468, + "ip": 3097696094, + "last_seen": 1613450681, + "port": 10508 + }, + { + "host": "187.188.125.185", + "id": 16541005504686530857, + "ip": 3112025275, + "last_seen": 1613451122, + "port": 18080 + }, + { + "host": "46.30.188.187", + "id": 15391900406271002022, + "ip": 3149667886, + "last_seen": 1613241152, + "port": 18080, + "pruning_seed": 384, + "rpc_port": 18081 + }, + { + "host": "37.115.136.189", + "id": 7765454290699096668, + "ip": 3179836197, + "last_seen": 1613447413, + "port": 18080 + }, + { + "host": "195.201.41.190", + "id": 8688817813316422541, + "ip": 3190409667, + "last_seen": 1613242088, + "port": 18080, + "rpc_port": 18089 + }, + { + "host": "73.68.46.192", + "id": 940249697764363690, + "ip": 3224257609, + "last_seen": 1613449346, + "port": 18080 + }, + { + "host": "193.116.227.195", + "id": 9171235046477127861, + "ip": 3286463681, + "last_seen": 1613449640, + "port": 18080 + }, + { + "host": "72.218.79.199", + "id": 8263602118277666501, + "ip": 3343899208, + "last_seen": 1613430131, + "port": 18080, + "rpc_port": 18081 + }, + { + "host": "85.241.106.203", + "id": 1749624933425199888, + "ip": 3412783445, + "last_seen": 1613430184, + "port": 18080 + }, + { + "host": "188.165.17.204", + "id": 1052817436779540307, + "ip": 3423708604, + "last_seen": 1613447356, + "port": 7883 + }, + { + "host": "78.45.128.205", + "id": 1606962014925804835, + "ip": 3447729486, + "last_seen": 1613241474, + "port": 18080, + "pruning_seed": 390 + }, + { + "host": "24.196.233.205", + "id": 15232609442832440729, + "ip": 3454649368, + "last_seen": 1613452073, + "port": 18080 + }, + { + "host": "83.135.207.207", + "id": 4129625647251703830, + "ip": 3486484307, + "last_seen": 1613242671, + "port": 18080, + "pruning_seed": 389, + "rpc_port": 18089 + }, + { + "host": "3.133.160.212", + "id": 15692192473268519652, + "ip": 3567289603, + "last_seen": 1613240984, + "port": 18080, + "rpc_port": 18089 + }, + { + "host": "163.172.220.214", + "id": 9649039092980725871, + "ip": 3604786339, + "last_seen": 1613448845, + "port": 18080 + }, + { + "host": "73.187.218.215", + "id": 17372153602940124719, + "ip": 3621436233, + "last_seen": 1613241848, + "port": 18080 + }, + { + "host": "90.3.96.217", + "id": 12422910629634237057, + "ip": 3646948186, + "last_seen": 1613451192, + "port": 18080 + }, + { + "host": "164.52.207.218", + "id": 3970442795202540206, + "ip": 3671012516, + "last_seen": 1613449461, + "port": 18080, + "pruning_seed": 389 + }, + { + "host": "69.113.13.219", + "id": 10926180788604103588, + "ip": 3675091269, + "last_seen": 1613242373, + "port": 18080 + }, + { + "host": "71.238.62.219", + "id": 12209213013746919968, + "ip": 3678334535, + "last_seen": 1613240622, + "port": 18080 + }, + { + "host": "51.77.202.219", + "id": 11460577518864080949, + "ip": 3687468339, + "last_seen": 1613449765, + "port": 11965 + }, + { + "host": "104.131.1.221", + "id": 12300411971572237799, + "ip": 3707863912, + "last_seen": 1613241091, + "port": 18080 + }, + { + "host": "82.113.14.222", + "id": 11764943469208849424, + "ip": 3725488466, + "last_seen": 1613447541, + "port": 18080 + }, + { + "host": "82.65.73.222", + "id": 17774799257053602057, + "ip": 3729342802, + "last_seen": 1613447809, + "port": 18080 + }, + { + "host": "142.47.98.223", + "id": 4054033254884999828, + "ip": 3747753870, + "last_seen": 1613449869, + "port": 18080 + }, + { + "host": "95.105.236.223", + "id": 11578329787273911876, + "ip": 3756812639, + "last_seen": 1613242914, + "port": 18080 + }, + { + "host": "198.13.87.226", + "id": 943624800109587430, + "ip": 3797355974, + "last_seen": 1613241787, + "port": 18080 + }, + { + "host": "51.79.52.228", + "id": 1111178157158752856, + "ip": 3828633395, + "last_seen": 1613451435, + "port": 9822 + }, + { + "host": "112.215.205.229", + "id": 3089055665329959664, + "ip": 3855472496, + "last_seen": 1613242511, + "port": 18080 + }, + { + "host": "24.132.75.232", + "id": 3354881656070564433, + "ip": 3897263128, + "last_seen": 1613447867, + "port": 18080, + "pruning_seed": 391 + }, + { + "host": "71.206.53.233", + "id": 10191502320879193454, + "ip": 3912617543, + "last_seen": 1613447909, + "port": 18080 + }, + { + "host": "37.59.165.233", + "id": 7739866342510712302, + "ip": 3919919909, + "last_seen": 1613451688, + "port": 15887 + }, + { + "host": "24.203.215.233", + "id": 1721075545767143435, + "ip": 3923233560, + "last_seen": 1613451887, + "port": 18080 + }, + { + "host": "149.22.29.236", + "id": 14651851102263075285, + "ip": 3961329301, + "last_seen": 1613240631, + "port": 18080 + }, + { + "host": "24.203.81.236", + "id": 12276071933928645108, + "ip": 3964783384, + "last_seen": 1613448120, + "port": 18080, + "pruning_seed": 386 + }, + { + "host": "70.27.234.236", + "id": 9975573268986649338, + "ip": 3974765382, + "last_seen": 1613447596, + "port": 18080, + "rpc_port": 18089 + }, + { + "host": "185.193.91.238", + "id": 13851066677650089627, + "ip": 3998990777, + "last_seen": 1613450172, + "port": 18080 + }, + { + "host": "159.65.105.238", + "id": 1986139233631008308, + "ip": 3999875487, + "last_seen": 1613447477, + "port": 18080 + }, + { + "host": "5.206.224.239", + "id": 7375245031235838836, + "ip": 4024487429, + "last_seen": 1613450068, + "port": 18080 + }, + { + "host": "46.138.243.239", + "id": 17564524474675002001, + "ip": 4025715246, + "last_seen": 1613447555, + "port": 18080 + }, + { + "host": "173.49.254.239", + "id": 14658257397614101091, + "ip": 4026413485, + "last_seen": 1613430131, + "port": 18080 + }, + { + "host": "91.134.195.240", + "id": 3163530904392766873, + "ip": 4039345755, + "last_seen": 1613451995, + "port": 2337 + }, + { + "host": "136.144.207.246", + "id": 17925065275846910101, + "ip": 4140798088, + "last_seen": 1613240631, + "port": 18080 + }, + { + "host": "23.114.121.249", + "id": 13060187931869259976, + "ip": 4185485847, + "last_seen": 1613448849, + "port": 18080, + "rpc_port": 18089 + }, + { + "host": "83.4.67.250", + "id": 2507603966234399791, + "ip": 4198696019, + "last_seen": 1613241694, + "port": 18080 + }, + { + "host": "88.117.26.253", + "id": 2368851820030451111, + "ip": 4246369624, + "last_seen": 1613450273, + "port": 18080 + }, + { + "host": "::ffff:51.75.70.225", + "id": 5163614178872270770, + "ip": 0, + "last_seen": 1613449930, + "port": 18080 + }, + { + "host": "::ffff:51.75.162.171", + "id": 3838435608909703312, + "ip": 0, + "last_seen": 1613448590, + "port": 9647 + }, + { + "host": "::ffff:51.79.58.89", + "id": 16329099156091928758, + "ip": 0, + "last_seen": 1613449031, + "port": 8698 + }, + { + "host": "::ffff:51.79.58.90", + "id": 15087651663481200576, + "ip": 0, + "last_seen": 1613449808, + "port": 13309 + }, + { + "host": "::ffff:51.79.58.93", + "id": 1090659574787086581, + "ip": 0, + "last_seen": 1613448087, + "port": 16670 + }, + { + "host": "::ffff:51.83.81.237", + "id": 14613540196062283566, + "ip": 0, + "last_seen": 1613451253, + "port": 4668 + }, + { + "host": "::ffff:51.91.108.121", + "id": 9332318050864883297, + "ip": 0, + "last_seen": 1613450369, + "port": 8462 + }, + { + "host": "::ffff:54.39.75.66", + "id": 9318336026330522689, + "ip": 0, + "last_seen": 1613450554, + "port": 7154 + }, + { + "host": "::ffff:87.98.224.123", + "id": 14414546963382727355, + "ip": 0, + "last_seen": 1613449284, + "port": 9560 + }, + { + "host": "::ffff:91.138.184.109", + "id": 7457032633205804157, + "ip": 0, + "last_seen": 1613242421, + "port": 18080, + "rpc_port": 18089 + }, + { + "host": "::ffff:110.235.245.163", + "id": 15557939585881092538, + "ip": 0, + "last_seen": 1613447401, + "port": 18080 + }, + { + "host": "::ffff:144.217.248.48", + "id": 16235213177951332528, + "ip": 0, + "last_seen": 1613450742, + "port": 4683 + }, + { + "host": "::ffff:192.99.154.164", + "id": 18071351769521377372, + "ip": 0, + "last_seen": 1613448151, + "port": 12249 + } + ] +} diff --git a/tests/data/test_jsonrpcdaemon/test_get_transaction_pool.json b/tests/data/test_jsonrpcdaemon/test_get_transaction_pool.json new file mode 100644 index 0000000..cc81e4b --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_transaction_pool.json @@ -0,0 +1,376 @@ +{ + "credits": 0, + "spent_key_images": [ + { + "id_hash": "1ccff101d8ee93903bde0a8ef99ebc99ccd5150f7157b93b758cd456458d4166", + "txs_hashes": [ + "73fe0207e25d59dce5cd6f7369edf33a04ac56409eca3b28ad837c43640ef83f" + ] + }, + { + "id_hash": "eeece7af45927e3d1303df44d2b107b266edecdb2df8ed76feb670f6f1898d7d", + "txs_hashes": [ + "69bd9be7a43b0bb909ab92182d7a90b970a95656c08cedb05273a8ece0e58d2f" + ] + }, + { + "id_hash": "4bca762c4760962c6c1216cf3d8c21ee980dd999a91cf2c93486fc51fb8687aa", + "txs_hashes": [ + "6085c265496d3fdacff0fa173328c8b0ff97cae60b95033c74388f0ee59e79ab" + ] + }, + { + "id_hash": "fb2d1f9398de6b12c462d48fa559cf9cccb5e21f7c1fc55cc38b6ccf4bad5fd5", + "txs_hashes": [ + "6085c265496d3fdacff0fa173328c8b0ff97cae60b95033c74388f0ee59e79ab" + ] + }, + { + "id_hash": "4dd37bf9590afe0e7086f8824c734738d0dd6a0267ddda25a1c68e6d0c37f245", + "txs_hashes": [ + "630f47da19e94398a983d07e31d46bc90467c53ae0755132807c44c29e765a82" + ] + }, + { + "id_hash": "b8f2e25d853d4d157be9cdaa9140cc44e6e7764daae1e0986935f303eb3b08e0", + "txs_hashes": [ + "502972204a8a5d3f3e593aee64a0baa8c9dc6b64876a6ed0de6db6da040870e9" + ] + }, + { + "id_hash": "fa571d3ef591465305fbe868c0a4a367b0d071fd593e7bd333a38a0b3902c3a8", + "txs_hashes": [ + "7908c526b90fc3608603d6987b96f149cc9189f3fe482348ebbbbf1c8efc47d0" + ] + }, + { + "id_hash": "7a1cad147be3baa06c785162d0fdbf1ddb540728de0ba6ba218e90c0ee756e99", + "txs_hashes": [ + "23ba4986b2a7207d326793ecfbc63eece447c104d395c08867cc850254b055f1" + ] + }, + { + "id_hash": "7d2c7eb8ca44eab409582cc15a23fab28441b89177cde8344dca79ae5f28e8f4", + "txs_hashes": [ + "23ba4986b2a7207d326793ecfbc63eece447c104d395c08867cc850254b055f1" + ] + }, + { + "id_hash": "d038844f889e8f8898ae47c6854859b0ff39a00f2fb5f31cd17d481d4cfce7be", + "txs_hashes": [ + "ea020cf2595c017d5fd4d0d427b8ff02b1857e996136b041c0f7fd6dffc4c72c" + ] + }, + { + "id_hash": "6083c22b7fc33acfa366f546f9ff7474bffaa874901c7344cc6440a06815e2ed", + "txs_hashes": [ + "5cdb533084065846b9a13fccf5fc20aa3e2bf1f71b6f0f1bd2be4570fdd38de4" + ] + }, + { + "id_hash": "bc531bb15f56d4c69d23d654f2cf9fec92bc87c418d35750b562c27c24629715", + "txs_hashes": [ + "0f041badd781cdee7ad17e158f0c435e507050c2df7a5468a3788c683a4ae783" + ] + }, + { + "id_hash": "ce07c7f3d2da0543d1404a16f3d176fba9c52024c899f1be26da9f87690d3798", + "txs_hashes": [ + "e5c1d055d3722665e6d447cee5886614189d7b584808b9f18b78722ad6be5134" + ] + }, + { + "id_hash": "e2b05e1154345e9b743287ee00287083aba5e05af38ffdaa3d568f78bbfee3f9", + "txs_hashes": [ + "e5c1d055d3722665e6d447cee5886614189d7b584808b9f18b78722ad6be5134" + ] + }, + { + "id_hash": "61526ea9cf2f016bb789735cae0aff12c98c8837e05f61da17b00f8f2ceffb57", + "txs_hashes": [ + "42b2e64110cb45bf8bb15c6c20f0b99477461596682e9248ce34649f92bfef6d" + ] + }, + { + "id_hash": "f34aeb91f15a8ad1245f708c40d9430ca3181a2bc4da74bc9229a0a7a6dde14f", + "txs_hashes": [ + "42b2e64110cb45bf8bb15c6c20f0b99477461596682e9248ce34649f92bfef6d" + ] + }, + { + "id_hash": "4910ad8f11fa55ab7dc9a9052c21449910eee1a3c7a6fce3a73368b3bde12f31", + "txs_hashes": [ + "2fd471d9650de3678f0c1e84c322d842297ec68c42295cf8f8df60704a162cbe" + ] + }, + { + "id_hash": "84f997eb51076c34eb0ce0e9c8f83940089cebf3480b24a82afd2d91566936f1", + "txs_hashes": [ + "2fd471d9650de3678f0c1e84c322d842297ec68c42295cf8f8df60704a162cbe" + ] + }, + { + "id_hash": "42484d6705b08d511b22671312cfea561d18f9e0ed541cd75b6cdb70e3ab0264", + "txs_hashes": [ + "50e131ed02633f4eddffafe51e10fdec3f759d6e01f7163b76afa3bce5096260" + ] + } + ], + "status": "OK", + "top_hash": "", + "transactions": [ + { + "blob_size": 1455, + "do_not_relay": false, + "double_spend_seen": false, + "fee": 20500000, + "id_hash": "ea020cf2595c017d5fd4d0d427b8ff02b1857e996136b041c0f7fd6dffc4c72c", + "kept_by_block": false, + "last_failed_height": 0, + "last_failed_id_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "last_relayed_time": 1613865211, + "max_used_block_height": 2301289, + "max_used_block_id_hash": "2b4b00522904bfbf65b8e141650a981d7e599995c02922bcdc25f72c9c97517a", + "receive_time": 1613865211, + "relayed": true, + "tx_blob": "02000102000b81e6e80cc09c02eda5138ccf08d0ff03b5bf02b0f501a79901a30f8351ac18d038844f889e8f8898ae47c6854859b0ff39a00f2fb5f31cd17d481d4cfce7be020002d82c9ba32172e84f3dcbd334246eef99d15ee9693cad9cf5e98349c587b659200002803921e2d4be0df9625cb30bd678a71712ee0daa4181a2f41747a1edfff573e52c0113b4890974f3e4a3896f901c049c99e199dc7a6847a54649fc66540f85576cf502090121cd9cff2a9fbe4405a09ce309181b351c7ab6f724e4822c3b6f548af1ef37527efdb3a976d0230b2232d57a1dde187b200af50db983aae6143e1e34e93429da57b376bd25c2c3ebabf08f9395ab78d02cad4c2e6aa4f8920fcd2e3efd013514a44d7307ae3d0d2d0170557d83e71e6d392f9441d3930396380f6f696d5cb11b4b64e7a379ca8fce7c3c78d01864fe10e2788dc33842469187a6848c61b53842549eb64a1c85237b0514151fe9dc0ddad28b89fafdf06a9cb8f4b0011d023e31bd00b9862a784e23ad4dd5ac49b09e583629b72ba0c3d3cf2b4ca15e15f8b4f6fb56adecf74c5569fa0a4741dcaad3d8d6660de69e25a0894a4ee602130b22a165221a3925ff41258c83665a3ebb74fdeb6bb130a6007745987853245c0007ea3f27a904f5e63fcb4c6cbc26d97d5d6caf52f1f6fa68010c40050fa7d940fa7e6c17d02b7a4763720597f46eece6ce7962698c1ff843cf6b48bd9ffbe916e4967d931da85986a940f15acc46969ab8a2969adcf00a0dfb08fd5f377f2720e93859c1b9018d5bd6d3f3e1b07e6c581e67a24d5a46ec901ae65d46ea069bb3c97e1a699005056c47845df5a1eaa32bba9e7cd528ada61e27c2bd3179ce3cfba41ef4da51ba1452342488c8e5f76eca5cf5ac5bf75f2cb9c4a8542bb02329c5a1a61d20fe8a67505807de48bfac48611b5861229880a758c96a1c22062a2c6cee07320b1aa58b0fce5e0b20341b545d26b01ec3598da9eac512dcf4c55be1c0e79f20cc904656fc1431db3e150f61d30f4306a38735be79155e1e9f7d31da7e23edb93580c215fbe5d86e34f763c646110e72a4ab35d8456026c2472d50affdeecac732873f3b58d4f0a1e807867c010d87acfd5f0940ed47b76f1eac7f1cfbe5ebd81282464d223ca057364cc48c950f3bd08fb2220ab2ccf395273d687efe480ee7243cc5be9176466db47baff92972b54ad954413e1119dd5db783deb724e3f9995e3ced26a904cbb23dadf77da2af7f51b60c9dc4dc0ca4456e93dc7ed302d55e3b51d2d75871130fdc31f311adcc75ee1a9d0bc22df61714cc21d1ad47b402dff0715d26efe6d1ff7315c84442c3aa4c314b6d4f4d8274033f1b0af4da810ad46207aa8a1ac81f1035a710a30445998a0b5c2346d90c30d08f0d4965bf9f089273c8baabdf7d730df9b0097afdb4128f5e48856342f7c2009cdf3d43650b0a339feac9b64858ee7a244e6d599e118de01f6cb1e1d629dc34ebbaf42af7cd060cd856ec617cb338f1034eae699e6bb0aa0a9c95191dcd63526ce73fbf29a50c774bed0fd5c4afc107f71dcf7746ed0976cd00d936ebf8cd30c457e1802c300f7c5a3e0bc8ee83df501def8682db4bf865c3559e9d131a3b87e26c09437c8b0503fc7f64291ce7103261976b9ab9d398911e3de7c6fa3f57c722381968f8d40a4876719950ab578b58bd929de736b90790da27ade1a0fea7c7cc264933b5d609638a6f40694bf7d5eeb3d33c8cd848f2a4e0c3757ee4da090b1f4187c275c2021f7a5f5da418569ea81c6c9e202c58824444873b779ed6a5c0991e3eb09676000bf7628428a6273ebac88d78803a3ba7baede70c73efcf7ff9627e78cc79a40d27440ed2ce32ed39f72ed38922ba573450d74f61422b75cd2c67963a3c0d4006cbe1be4daf04139b4a1ecfd2c23946a82f6fd85c6c95c7158ea79114cb656f09fb63497034da0fc4ed7863471405740cd508701b4a5a135a106480af1f7130e81b3934eef132428051af62e7ad49783aff23cd0cac7c25dcdd0ae1b5f2651614", + "tx_json": "{\n \"version\": 2, \n \"unlock_time\": 0, \n \"vin\": [ {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 26882817, 36416, 316141, 141196, 65488, 40885, 31408, 19623, 1955, 10371, 3116\n ], \n \"k_image\": \"d038844f889e8f8898ae47c6854859b0ff39a00f2fb5f31cd17d481d4cfce7be\"\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 0, \n \"target\": {\n \"key\": \"d82c9ba32172e84f3dcbd334246eef99d15ee9693cad9cf5e98349c587b65920\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"803921e2d4be0df9625cb30bd678a71712ee0daa4181a2f41747a1edfff573e5\"\n }\n }\n ], \n \"extra\": [ 1, 19, 180, 137, 9, 116, 243, 228, 163, 137, 111, 144, 28, 4, 156, 153, 225, 153, 220, 122, 104, 71, 165, 70, 73, 252, 102, 84, 15, 133, 87, 108, 245, 2, 9, 1, 33, 205, 156, 255, 42, 159, 190, 68\n ], \n \"rct_signatures\": {\n \"type\": 5, \n \"txnFee\": 20500000, \n \"ecdhInfo\": [ {\n \"amount\": \"181b351c7ab6f724\"\n }, {\n \"amount\": \"e4822c3b6f548af1\"\n }], \n \"outPk\": [ \"ef37527efdb3a976d0230b2232d57a1dde187b200af50db983aae6143e1e34e9\", \"3429da57b376bd25c2c3ebabf08f9395ab78d02cad4c2e6aa4f8920fcd2e3efd\"]\n }, \n \"rctsig_prunable\": {\n \"nbp\": 1, \n \"bp\": [ {\n \"A\": \"3514a44d7307ae3d0d2d0170557d83e71e6d392f9441d3930396380f6f696d5c\", \n \"S\": \"b11b4b64e7a379ca8fce7c3c78d01864fe10e2788dc33842469187a6848c61b5\", \n \"T1\": \"3842549eb64a1c85237b0514151fe9dc0ddad28b89fafdf06a9cb8f4b0011d02\", \n \"T2\": \"3e31bd00b9862a784e23ad4dd5ac49b09e583629b72ba0c3d3cf2b4ca15e15f8\", \n \"taux\": \"b4f6fb56adecf74c5569fa0a4741dcaad3d8d6660de69e25a0894a4ee602130b\", \n \"mu\": \"22a165221a3925ff41258c83665a3ebb74fdeb6bb130a6007745987853245c00\", \n \"L\": [ \"ea3f27a904f5e63fcb4c6cbc26d97d5d6caf52f1f6fa68010c40050fa7d940fa\", \"7e6c17d02b7a4763720597f46eece6ce7962698c1ff843cf6b48bd9ffbe916e4\", \"967d931da85986a940f15acc46969ab8a2969adcf00a0dfb08fd5f377f2720e9\", \"3859c1b9018d5bd6d3f3e1b07e6c581e67a24d5a46ec901ae65d46ea069bb3c9\", \"7e1a699005056c47845df5a1eaa32bba9e7cd528ada61e27c2bd3179ce3cfba4\", \"1ef4da51ba1452342488c8e5f76eca5cf5ac5bf75f2cb9c4a8542bb02329c5a1\", \"a61d20fe8a67505807de48bfac48611b5861229880a758c96a1c22062a2c6cee\"\n ], \n \"R\": [ \"320b1aa58b0fce5e0b20341b545d26b01ec3598da9eac512dcf4c55be1c0e79f\", \"20cc904656fc1431db3e150f61d30f4306a38735be79155e1e9f7d31da7e23ed\", \"b93580c215fbe5d86e34f763c646110e72a4ab35d8456026c2472d50affdeeca\", \"c732873f3b58d4f0a1e807867c010d87acfd5f0940ed47b76f1eac7f1cfbe5eb\", \"d81282464d223ca057364cc48c950f3bd08fb2220ab2ccf395273d687efe480e\", \"e7243cc5be9176466db47baff92972b54ad954413e1119dd5db783deb724e3f9\", \"995e3ced26a904cbb23dadf77da2af7f51b60c9dc4dc0ca4456e93dc7ed302d5\"\n ], \n \"a\": \"5e3b51d2d75871130fdc31f311adcc75ee1a9d0bc22df61714cc21d1ad47b402\", \n \"b\": \"dff0715d26efe6d1ff7315c84442c3aa4c314b6d4f4d8274033f1b0af4da810a\", \n \"t\": \"d46207aa8a1ac81f1035a710a30445998a0b5c2346d90c30d08f0d4965bf9f08\"\n }\n ], \n \"CLSAGs\": [ {\n \"s\": [ \"9273c8baabdf7d730df9b0097afdb4128f5e48856342f7c2009cdf3d43650b0a\", \"339feac9b64858ee7a244e6d599e118de01f6cb1e1d629dc34ebbaf42af7cd06\", \"0cd856ec617cb338f1034eae699e6bb0aa0a9c95191dcd63526ce73fbf29a50c\", \"774bed0fd5c4afc107f71dcf7746ed0976cd00d936ebf8cd30c457e1802c300f\", \"7c5a3e0bc8ee83df501def8682db4bf865c3559e9d131a3b87e26c09437c8b05\", \"03fc7f64291ce7103261976b9ab9d398911e3de7c6fa3f57c722381968f8d40a\", \"4876719950ab578b58bd929de736b90790da27ade1a0fea7c7cc264933b5d609\", \"638a6f40694bf7d5eeb3d33c8cd848f2a4e0c3757ee4da090b1f4187c275c202\", \"1f7a5f5da418569ea81c6c9e202c58824444873b779ed6a5c0991e3eb0967600\", \"0bf7628428a6273ebac88d78803a3ba7baede70c73efcf7ff9627e78cc79a40d\", \"27440ed2ce32ed39f72ed38922ba573450d74f61422b75cd2c67963a3c0d4006\"], \n \"c1\": \"cbe1be4daf04139b4a1ecfd2c23946a82f6fd85c6c95c7158ea79114cb656f09\", \n \"D\": \"fb63497034da0fc4ed7863471405740cd508701b4a5a135a106480af1f7130e8\"\n }], \n \"pseudoOuts\": [ \"1b3934eef132428051af62e7ad49783aff23cd0cac7c25dcdd0ae1b5f2651614\"]\n }\n}", + "weight": 1455 + }, + { + "blob_size": 1459, + "do_not_relay": false, + "double_spend_seen": false, + "fee": 11170000, + "id_hash": "69bd9be7a43b0bb909ab92182d7a90b970a95656c08cedb05273a8ece0e58d2f", + "kept_by_block": false, + "last_failed_height": 0, + "last_failed_id_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "last_relayed_time": 1613865233, + "max_used_block_height": 2301243, + "max_used_block_id_hash": "b80460ad487ce37778148582d20b3b5f550167cd1790a37d1188912601cca886", + "receive_time": 1613865233, + "relayed": true, + "tx_blob": "02000102000bcd96a509fdf4a101f48c7390dd53a1ed6cd9df08e3b706eaa501f3ac03a08b01b1cf01eeece7af45927e3d1303df44d2b107b266edecdb2df8ed76feb670f6f1898d7d0200026d6183467ca7e81a0501465e1104d2f1597d73681d3c1535b73e6a5ff0ec187e0002fd11017503040c0899c1b1a216a7e1d7027635bb490a41b157aed67b2bd957522c01b62cd745e3ca31d3e1af1a15eda297ae1bc4cd55339b10b5fb0f59b1c74000d70209015c1594787fdad3f405d0e1a9053e5c63da5a0e1279a8b60af5cd03c11f204f1e2290333e4d3eb480c0014cb7c2026e79505ff89d9e943436af0bef3ff3a554ef96defe64484a6e1b997332814df750068858165c2b63c424ae3b4128d601950b60f83b80ad3a578a24f4bf83ff737d826ef7f0a9a27e66af95fa6cbc48b8a184b88cab2f452ec64b8694f56ec469baada11acec00e50b28b6a9d02ca86298db1537d1572ce531ef68dd75cdd99265747f160e75086482f07bd93e9be00c36a7324057d6b611b82fdd8d0604e3921429d476f88e8522a0628bd2e85f3c6667bdcc803ec64b1349213492ea49bddc8d34b1e8cb2405adcd867ceeb27adee0dd66843fa9b5c79352f66f1e74e4b5d326481d377b3239682aedcc0a4756e400c07c047a24d18032fbc498ad67996c256e20196b262ce94f622d7f7cb3d6a884ea0ba43bfca088ca432c98b568da84d56838ac5f5279c6ae1672f53d7c9a0b8d660738886117bb85deb5e7200c13c48ce72885561113db68f90ea8dda89be3beb6aeae92ecccb4e23847d012f2235eb5a10c2322586628191c0e41fadb036421b797993a21f8b3291826b7b38194258f815a8b1432abb10b1c61d6e14169169ae84e926e7b53a8651cb069a30a767471c850f92ac6cb6eaaf807bc681c7e314d7f3f92d6877a23858d7e1bde198f840e2f859036d3c802137d3a26c05d74dcd5c4c0744679e793b11c1cff8bf7e7233a6d599030936719f132b458ed5d35b4fd2ce722ebcb32ecc386ca82464d6466ffec32a046496ea705671fc5ad53c1e2c29eb773bbd44427630ac3933ed5e74cdd2c9df65eced33a03ee3efcb559f77c64a4c0de4eda124c2d4330a893a33f8cb2a1aaa4c649b5130754242c5c6166227ef06079efaf00552d4b03b4137cf49aa706802fc359012d30d777e05d5b5050fc068af75c118b23b6a0bea0fba4d53982ce6cace5cfb462afc22516fb410d7237ce24c84bd0a31f78c4fc74f8a7bf87cda1d81bae9f9c92de7bcc06f5026aeecca32f63f2cd3238a365041a175e8687730904bacaa74078efdb1f3cb4c37778b3e5b03678fd3a2ed7b197f44528b9dda357a11d8b88cedfe402852959e0299470cdd01f735046db1bf03bf614def122878c0ad7e76208d95fbda736c5bb78f09aab4024fe4c8b5a51edbf7a5ea1deb721522790e44d6ca956a8dfd0a24c7ba28118f0def1bb4c2ef9a30054e760c702c44fd85dbb978de3e8942a708c14c83feb771015728cf5e23a39a0f8369ddb5084358f5b549451227211dd7836ff848f4fc34060c537da1c580312054b76dac9fc6d7c198f67fac0707ce8354e94437b20efa07be5503fd56c4cbb0efb794823dfc36223f0a374019fedd7df1936f40f577940b7e574c97e2128a2c9558b37c412cbdd358c008ce6df09f2800f10657e5e62e076b126dc6bb6a53b67ac1a2242b046099f64f3bef64010d9ae2036e47e8b12c0d9c072b006acab71d796a2cee2c069334022cbbbef2aa7d6cae90113be44ae40c1479e443ebe23ba3aed8a37379cd788474098f01e42bcb583c4c768b09cd310af884f52ea546834baf368357cec39710bbe0f605e21f79a5301609bb1ac16009686eb7f97870fbea687a65976355ac80f30ab2341fabd1822fa96cd1734ef9028969e000c70f157343e2478e0828dcf85cffee7c057061110f51bc57fcd53f0a4acf7926663c7abaaa0073d00093083cb20656223d168646104c293c72de87c69328d08b7fc3ed2720dbe1d71939f6d941cb14d22e35df602653aafd97c94850", + "tx_json": "{\n \"version\": 2, \n \"unlock_time\": 0, \n \"vin\": [ {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 19483469, 2652797, 1885812, 1371792, 1783457, 143321, 105443, 21226, 54899, 17824, 26545\n ], \n \"k_image\": \"eeece7af45927e3d1303df44d2b107b266edecdb2df8ed76feb670f6f1898d7d\"\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 0, \n \"target\": {\n \"key\": \"6d6183467ca7e81a0501465e1104d2f1597d73681d3c1535b73e6a5ff0ec187e\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"fd11017503040c0899c1b1a216a7e1d7027635bb490a41b157aed67b2bd95752\"\n }\n }\n ], \n \"extra\": [ 1, 182, 44, 215, 69, 227, 202, 49, 211, 225, 175, 26, 21, 237, 162, 151, 174, 27, 196, 205, 85, 51, 155, 16, 181, 251, 15, 89, 177, 199, 64, 0, 215, 2, 9, 1, 92, 21, 148, 120, 127, 218, 211, 244\n ], \n \"rct_signatures\": {\n \"type\": 5, \n \"txnFee\": 11170000, \n \"ecdhInfo\": [ {\n \"amount\": \"3e5c63da5a0e1279\"\n }, {\n \"amount\": \"a8b60af5cd03c11f\"\n }], \n \"outPk\": [ \"204f1e2290333e4d3eb480c0014cb7c2026e79505ff89d9e943436af0bef3ff3\", \"a554ef96defe64484a6e1b997332814df750068858165c2b63c424ae3b4128d6\"]\n }, \n \"rctsig_prunable\": {\n \"nbp\": 1, \n \"bp\": [ {\n \"A\": \"950b60f83b80ad3a578a24f4bf83ff737d826ef7f0a9a27e66af95fa6cbc48b8\", \n \"S\": \"a184b88cab2f452ec64b8694f56ec469baada11acec00e50b28b6a9d02ca8629\", \n \"T1\": \"8db1537d1572ce531ef68dd75cdd99265747f160e75086482f07bd93e9be00c3\", \n \"T2\": \"6a7324057d6b611b82fdd8d0604e3921429d476f88e8522a0628bd2e85f3c666\", \n \"taux\": \"7bdcc803ec64b1349213492ea49bddc8d34b1e8cb2405adcd867ceeb27adee0d\", \n \"mu\": \"d66843fa9b5c79352f66f1e74e4b5d326481d377b3239682aedcc0a4756e400c\", \n \"L\": [ \"c047a24d18032fbc498ad67996c256e20196b262ce94f622d7f7cb3d6a884ea0\", \"ba43bfca088ca432c98b568da84d56838ac5f5279c6ae1672f53d7c9a0b8d660\", \"738886117bb85deb5e7200c13c48ce72885561113db68f90ea8dda89be3beb6a\", \"eae92ecccb4e23847d012f2235eb5a10c2322586628191c0e41fadb036421b79\", \"7993a21f8b3291826b7b38194258f815a8b1432abb10b1c61d6e14169169ae84\", \"e926e7b53a8651cb069a30a767471c850f92ac6cb6eaaf807bc681c7e314d7f3\", \"f92d6877a23858d7e1bde198f840e2f859036d3c802137d3a26c05d74dcd5c4c\"\n ], \n \"R\": [ \"44679e793b11c1cff8bf7e7233a6d599030936719f132b458ed5d35b4fd2ce72\", \"2ebcb32ecc386ca82464d6466ffec32a046496ea705671fc5ad53c1e2c29eb77\", \"3bbd44427630ac3933ed5e74cdd2c9df65eced33a03ee3efcb559f77c64a4c0d\", \"e4eda124c2d4330a893a33f8cb2a1aaa4c649b5130754242c5c6166227ef0607\", \"9efaf00552d4b03b4137cf49aa706802fc359012d30d777e05d5b5050fc068af\", \"75c118b23b6a0bea0fba4d53982ce6cace5cfb462afc22516fb410d7237ce24c\", \"84bd0a31f78c4fc74f8a7bf87cda1d81bae9f9c92de7bcc06f5026aeecca32f6\"\n ], \n \"a\": \"3f2cd3238a365041a175e8687730904bacaa74078efdb1f3cb4c37778b3e5b03\", \n \"b\": \"678fd3a2ed7b197f44528b9dda357a11d8b88cedfe402852959e0299470cdd01\", \n \"t\": \"f735046db1bf03bf614def122878c0ad7e76208d95fbda736c5bb78f09aab402\"\n }\n ], \n \"CLSAGs\": [ {\n \"s\": [ \"4fe4c8b5a51edbf7a5ea1deb721522790e44d6ca956a8dfd0a24c7ba28118f0d\", \"ef1bb4c2ef9a30054e760c702c44fd85dbb978de3e8942a708c14c83feb77101\", \"5728cf5e23a39a0f8369ddb5084358f5b549451227211dd7836ff848f4fc3406\", \"0c537da1c580312054b76dac9fc6d7c198f67fac0707ce8354e94437b20efa07\", \"be5503fd56c4cbb0efb794823dfc36223f0a374019fedd7df1936f40f577940b\", \"7e574c97e2128a2c9558b37c412cbdd358c008ce6df09f2800f10657e5e62e07\", \"6b126dc6bb6a53b67ac1a2242b046099f64f3bef64010d9ae2036e47e8b12c0d\", \"9c072b006acab71d796a2cee2c069334022cbbbef2aa7d6cae90113be44ae40c\", \"1479e443ebe23ba3aed8a37379cd788474098f01e42bcb583c4c768b09cd310a\", \"f884f52ea546834baf368357cec39710bbe0f605e21f79a5301609bb1ac16009\", \"686eb7f97870fbea687a65976355ac80f30ab2341fabd1822fa96cd1734ef902\"], \n \"c1\": \"8969e000c70f157343e2478e0828dcf85cffee7c057061110f51bc57fcd53f0a\", \n \"D\": \"4acf7926663c7abaaa0073d00093083cb20656223d168646104c293c72de87c6\"\n }], \n \"pseudoOuts\": [ \"9328d08b7fc3ed2720dbe1d71939f6d941cb14d22e35df602653aafd97c94850\"]\n }\n}", + "weight": 1459 + }, + { + "blob_size": 1968, + "do_not_relay": false, + "double_spend_seen": false, + "fee": 15070000, + "id_hash": "e5c1d055d3722665e6d447cee5886614189d7b584808b9f18b78722ad6be5134", + "kept_by_block": false, + "last_failed_height": 0, + "last_failed_id_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "last_relayed_time": 1613865204, + "max_used_block_height": 2301284, + "max_used_block_id_hash": "2fa1a3dfe39c6b9e15b1c76292f62d050ee3773650c6af763c4a27af2393fc84", + "receive_time": 1613865204, + "relayed": true, + "tx_blob": "02000202000bddf5d60c84a910e0c6108ad40fc9da01a2a301a5b705b379ee3bd611fd06e2b05e1154345e9b743287ee00287083aba5e05af38ffdaa3d568f78bbfee3f902000bbc9ea30cd6a72e93e8309ebc08f8bd02ad8501d98801dc4bb616a8048d9801ce07c7f3d2da0543d1404a16f3d176fba9c52024c899f1be26da9f87690d37980200025d7d4d74c7b92b2f3a8aa4050166e273dbf9a9c2216e9f216b0f91c16ebcf12f000222deadf09bd80a7cd02ac761272392b404ec4bb3a2b483e3522b57849fd13cff2c01d4debb1e5086faa81bf4ee623498ae0940870b45edc190660c8bb7cd239737ef0209010b2c75872632c17305b0e6970702b324bb605a1717423023ea3091d99ecebad405fdcebfbbd981a77ea32d024c3a663aec41428a36fc89c86b9df74876704a5025fb8057888c9249f0d4d328596648209a66c3bc4686f9fd78d4db229f01cebb8d0ec7c1cd8f8806203caa0fef94b9ba8c54229e234caf2cf3edb50109f633f01ac0b1882cbe391ebcc779885d4cf8278b2785a03a46d4072fadd81f1bc2a73e426265d0c1cd7acdf1b6d17b9a1b37fe3954e50b20a4ab155432b318a1815638adaa9da28c14408cd14636aa2653e4b2fc088eff94cede7c267c43843ed25919ade00726e0500fb1f6db3e44eb215648ea8cfd13e7c5700dba9b9161fb0f66dee9e4e67a317852a610eb3df5e1745fe3609858005f27b6b69f4875b7c0050791fc9e4cd38f59eb11eb3fae15a2f66a557c8173079384e98d6921033d62fc0782cf412e4456e8c21d2c8fd0f2ee1acd5ee21306251a8afc07a1b3d0f30a1c8c58d52ebcc28da59d41fb1dd1675ccfa290fb95588670143ab3a09b03e66083c3abd31ebb6808de08b4edf99986235a6e2dfb5a2667fd9303334052f1a8e14fb190c996d789c3c8803be065f3bbb4def3d26ee7671bfa7cca023b44cf1a02ab5a4dbd3c7a986e1dab2613ef759e171f7b12225bedac05bd530f858754712c46bb39fe8a7ba0fb402d3713d3afe649ee4a52ba71a6c24ab7626f3172ddb05d4bb507fd34dedb3d3afdb9d209b286afa14e07b61c00fabefcc1f6d943d96bc4db3f77a81a05153b94660fc9b9ee906833ffc21fefd063ef6ffd93cc74e6b253330565730972a2bf43f13f6046f7b71df6e0d02691ab28091ae1efac86055c9eafef3833e178cd81614eff0c4800e176fd76e48a028d69c2be13c8b75974ff7fde7e8c554c95075e1e84477842f905f55697e72ceeecbeb7980708fd29c2c1e5a6c25095bcaf54c0aceee3253f85511bed12de0f92229489c5cfa93c57fbefc96f4a91d2b3625ca0c7231f516056ebd88ce962d88974fa5c6e7760e83826b4b89907c262e953b99e695e7a03a490c87f07f4dd272dc4f179a438d341efae9f31e0fb0e4e162ed4259b4864f4f31b732f0c6646b2376d2b069327fddd7cd2c66e224301d9beffe54c3fed49bfc4daa6071376a21b003b2245fa04a26b3ea4887787c60e8ec0389646cf45a1e9188d827d904bfedbec5a488b40b616d9f4a101d501750a9a2537945e2aba439960c3537905d4d7f6ed6c47375a93c58adf4e6c8fd6540fd8fa3bf459087d68b70f45faed3c119490970998ff896a8231bc632a81f9890e3e0cb91616aacf899ca4959529c31120f401e7cc432a06da6a8cdcbab7017807d7826377768d2db3d9065895dbe01d04245bb15cf07410b5d5d7743cbfccb604c81096d8f546ba42052e32f7a9cf5c76f9617a1d337e9a4270a0e6c2928abd0f3dca73858599cc27775dfc4c06649ff7acbc056114076e037f932f160e73bc0946a41d0f2c2082ce06881bdc25ee0c2163fca0491322732bbdabd2567880170388eaee40b46616992d967b3de84341938ca95017eb22a802740c5a0c5c5e3602c885bd0f0794a24245f24056d23bf6754a4154c4c88c364669e4b9f8e650bc00df3a44d24a5aa403cda59865712490ac0f61259fb777e13edebf8cc20647420b1e0fddc272af8f394209c0a7648659774bac79d77e0eedaeb212563ce8ce2e034cb823f50df964621f4ce91d8bd70fe3247fa6c01e6e63dd6c609c81c81d926e276ee3957d186efcfd11c45c630f977abc4f4f91def4b0a2ea1c910220f55e0399b9dee21187e037e990ef8c8a7b9b9e5c4c75e96a6b6bf9b38928fab28fd50b54fcaf5600284577fc22934d5f1957b441afed15f34a882b0f68f0eecc129306bba877f93cd2c9b2c8726b6ac15d84333d02bc08f68a666495c800a545f7530c0df7839b6505d3ab26516212dde70932c988d0bb5f757192513c9b0e825bc30660489457bc15a37955601ef5a3ed23d437242911ae6184a3451cc08c3e19af00e7599f9ff855a8c91ca688c20f9cc2b95ce83a27165c8daa7d8c25a283c0d70e064e781e404f921204e5b71afec0fe5253bdd712c822994ea90f711c75d74808a937d69dc04b2329f3ac5f0db853a86f8390f8f97e66072dce59adf8fa2eae06fbfdde18a097ecdc07108b9214f4ab3aee2b634a87de5ecb56884666cbe3c401b8a2e879e9489b77830cfd8d6b9891f3f49ce24d1eafe3bf3bb6749669156c00ef24034b518a3052cac22c16f789fd4506ac8d17350d1ee8d127d7985de89a08a6d2b603e3e88c8744b1b7d1c2da0928b3e6e3c78f501028d268f9415afef95faac8c3221bb920200226e2388c97ceaff6671dd4dfc93683b04ab02fb2b59a81673dc62dd46ed2cb5fbc4c9288a7c16bdbd5611e2c60bcebbba7e3f8a5ca84e1", + "tx_json": "{\n \"version\": 2, \n \"unlock_time\": 0, \n \"vin\": [ {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 26589917, 267396, 271200, 256522, 27977, 20898, 88997, 15539, 7662, 2262, 893\n ], \n \"k_image\": \"e2b05e1154345e9b743287ee00287083aba5e05af38ffdaa3d568f78bbfee3f9\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 25743164, 758742, 799763, 138782, 40696, 17069, 17497, 9692, 2870, 552, 19469\n ], \n \"k_image\": \"ce07c7f3d2da0543d1404a16f3d176fba9c52024c899f1be26da9f87690d3798\"\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 0, \n \"target\": {\n \"key\": \"5d7d4d74c7b92b2f3a8aa4050166e273dbf9a9c2216e9f216b0f91c16ebcf12f\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"22deadf09bd80a7cd02ac761272392b404ec4bb3a2b483e3522b57849fd13cff\"\n }\n }\n ], \n \"extra\": [ 1, 212, 222, 187, 30, 80, 134, 250, 168, 27, 244, 238, 98, 52, 152, 174, 9, 64, 135, 11, 69, 237, 193, 144, 102, 12, 139, 183, 205, 35, 151, 55, 239, 2, 9, 1, 11, 44, 117, 135, 38, 50, 193, 115\n ], \n \"rct_signatures\": {\n \"type\": 5, \n \"txnFee\": 15070000, \n \"ecdhInfo\": [ {\n \"amount\": \"02b324bb605a1717\"\n }, {\n \"amount\": \"423023ea3091d99e\"\n }], \n \"outPk\": [ \"cebad405fdcebfbbd981a77ea32d024c3a663aec41428a36fc89c86b9df74876\", \"704a5025fb8057888c9249f0d4d328596648209a66c3bc4686f9fd78d4db229f\"]\n }, \n \"rctsig_prunable\": {\n \"nbp\": 1, \n \"bp\": [ {\n \"A\": \"cebb8d0ec7c1cd8f8806203caa0fef94b9ba8c54229e234caf2cf3edb50109f6\", \n \"S\": \"33f01ac0b1882cbe391ebcc779885d4cf8278b2785a03a46d4072fadd81f1bc2\", \n \"T1\": \"a73e426265d0c1cd7acdf1b6d17b9a1b37fe3954e50b20a4ab155432b318a181\", \n \"T2\": \"5638adaa9da28c14408cd14636aa2653e4b2fc088eff94cede7c267c43843ed2\", \n \"taux\": \"5919ade00726e0500fb1f6db3e44eb215648ea8cfd13e7c5700dba9b9161fb0f\", \n \"mu\": \"66dee9e4e67a317852a610eb3df5e1745fe3609858005f27b6b69f4875b7c005\", \n \"L\": [ \"91fc9e4cd38f59eb11eb3fae15a2f66a557c8173079384e98d6921033d62fc07\", \"82cf412e4456e8c21d2c8fd0f2ee1acd5ee21306251a8afc07a1b3d0f30a1c8c\", \"58d52ebcc28da59d41fb1dd1675ccfa290fb95588670143ab3a09b03e66083c3\", \"abd31ebb6808de08b4edf99986235a6e2dfb5a2667fd9303334052f1a8e14fb1\", \"90c996d789c3c8803be065f3bbb4def3d26ee7671bfa7cca023b44cf1a02ab5a\", \"4dbd3c7a986e1dab2613ef759e171f7b12225bedac05bd530f858754712c46bb\", \"39fe8a7ba0fb402d3713d3afe649ee4a52ba71a6c24ab7626f3172ddb05d4bb5\"\n ], \n \"R\": [ \"fd34dedb3d3afdb9d209b286afa14e07b61c00fabefcc1f6d943d96bc4db3f77\", \"a81a05153b94660fc9b9ee906833ffc21fefd063ef6ffd93cc74e6b253330565\", \"730972a2bf43f13f6046f7b71df6e0d02691ab28091ae1efac86055c9eafef38\", \"33e178cd81614eff0c4800e176fd76e48a028d69c2be13c8b75974ff7fde7e8c\", \"554c95075e1e84477842f905f55697e72ceeecbeb7980708fd29c2c1e5a6c250\", \"95bcaf54c0aceee3253f85511bed12de0f92229489c5cfa93c57fbefc96f4a91\", \"d2b3625ca0c7231f516056ebd88ce962d88974fa5c6e7760e83826b4b89907c2\"\n ], \n \"a\": \"62e953b99e695e7a03a490c87f07f4dd272dc4f179a438d341efae9f31e0fb0e\", \n \"b\": \"4e162ed4259b4864f4f31b732f0c6646b2376d2b069327fddd7cd2c66e224301\", \n \"t\": \"d9beffe54c3fed49bfc4daa6071376a21b003b2245fa04a26b3ea4887787c60e\"\n }\n ], \n \"CLSAGs\": [ {\n \"s\": [ \"8ec0389646cf45a1e9188d827d904bfedbec5a488b40b616d9f4a101d501750a\", \"9a2537945e2aba439960c3537905d4d7f6ed6c47375a93c58adf4e6c8fd6540f\", \"d8fa3bf459087d68b70f45faed3c119490970998ff896a8231bc632a81f9890e\", \"3e0cb91616aacf899ca4959529c31120f401e7cc432a06da6a8cdcbab7017807\", \"d7826377768d2db3d9065895dbe01d04245bb15cf07410b5d5d7743cbfccb604\", \"c81096d8f546ba42052e32f7a9cf5c76f9617a1d337e9a4270a0e6c2928abd0f\", \"3dca73858599cc27775dfc4c06649ff7acbc056114076e037f932f160e73bc09\", \"46a41d0f2c2082ce06881bdc25ee0c2163fca0491322732bbdabd25678801703\", \"88eaee40b46616992d967b3de84341938ca95017eb22a802740c5a0c5c5e3602\", \"c885bd0f0794a24245f24056d23bf6754a4154c4c88c364669e4b9f8e650bc00\", \"df3a44d24a5aa403cda59865712490ac0f61259fb777e13edebf8cc20647420b\"], \n \"c1\": \"1e0fddc272af8f394209c0a7648659774bac79d77e0eedaeb212563ce8ce2e03\", \n \"D\": \"4cb823f50df964621f4ce91d8bd70fe3247fa6c01e6e63dd6c609c81c81d926e\"\n }, {\n \"s\": [ \"276ee3957d186efcfd11c45c630f977abc4f4f91def4b0a2ea1c910220f55e03\", \"99b9dee21187e037e990ef8c8a7b9b9e5c4c75e96a6b6bf9b38928fab28fd50b\", \"54fcaf5600284577fc22934d5f1957b441afed15f34a882b0f68f0eecc129306\", \"bba877f93cd2c9b2c8726b6ac15d84333d02bc08f68a666495c800a545f7530c\", \"0df7839b6505d3ab26516212dde70932c988d0bb5f757192513c9b0e825bc306\", \"60489457bc15a37955601ef5a3ed23d437242911ae6184a3451cc08c3e19af00\", \"e7599f9ff855a8c91ca688c20f9cc2b95ce83a27165c8daa7d8c25a283c0d70e\", \"064e781e404f921204e5b71afec0fe5253bdd712c822994ea90f711c75d74808\", \"a937d69dc04b2329f3ac5f0db853a86f8390f8f97e66072dce59adf8fa2eae06\", \"fbfdde18a097ecdc07108b9214f4ab3aee2b634a87de5ecb56884666cbe3c401\", \"b8a2e879e9489b77830cfd8d6b9891f3f49ce24d1eafe3bf3bb6749669156c00\"], \n \"c1\": \"ef24034b518a3052cac22c16f789fd4506ac8d17350d1ee8d127d7985de89a08\", \n \"D\": \"a6d2b603e3e88c8744b1b7d1c2da0928b3e6e3c78f501028d268f9415afef95f\"\n }], \n \"pseudoOuts\": [ \"aac8c3221bb920200226e2388c97ceaff6671dd4dfc93683b04ab02fb2b59a81\", \"673dc62dd46ed2cb5fbc4c9288a7c16bdbd5611e2c60bcebbba7e3f8a5ca84e1\"]\n }\n}", + "weight": 1968 + }, + { + "blob_size": 1453, + "do_not_relay": false, + "double_spend_seen": false, + "fee": 11130000, + "id_hash": "73fe0207e25d59dce5cd6f7369edf33a04ac56409eca3b28ad837c43640ef83f", + "kept_by_block": false, + "last_failed_height": 0, + "last_failed_id_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "last_relayed_time": 1613865234, + "max_used_block_height": 2301292, + "max_used_block_id_hash": "60eab95dcac94d7e72d997d41d7a424cf1941baa4a5dfc198c71e983fc97a4db", + "receive_time": 1613865234, + "relayed": true, + "tx_blob": "02000102000be0c5940bdbbd8a01ae852addcb45c20980a6018644be32dc07d834a1091ccff101d8ee93903bde0a8ef99ebc99ccd5150f7157b93b758cd456458d416602000218ee38d28e17b0535d232ea154e557eb36904b6e406a2cf9393305140c0f1f790002c0e6f95eaef5c3dedf13be5cfa2fcc5262da6143ed751f435e209ab121a07bd82c018f54253750f6a6185c687003a9333e7cb6bcb37de84b84f59adb00997b92d4e602090115c7ad250cea5cf50590a9a7054dc188d5781e0e066093498bd565ffb5abe9989f9582247aeb1cca456fad238618cbacc93bad0ee56a238c5028522807f5e9c4daf61187a4ec93f3595857b6a4b2bfd6c963d713dc73f5e1cc3764d15001f674d2dfba532deff46e800673a994ef22d2c0828fa4ec4c53ad1d30b4fbf0c03ef3f86a015d9c86023ea017328e01f59cac0434912657650fe5e3d348a777be9c2cf702744b9e9d48b141d29f70bc94da2c4da9c6fbbae5d352b30f828a695521824be345981d1a109c54ae4d8952c400dfec0c1f33b24bc7124e58b5dd6776bf0e485a9d3634f3dc25768b95c38538bd13f3299a0d15fe37b50f28f7af5d08bb9c2c94685b70e971833ee169cbfa30db97c6f8a7f5a15b81efe336d5f852090745b882bc48dbb1f6200617f9658cf7d5f33dd6c5e546df98031b8eaf39ce90d86e3195f662ca3625e4e77bfb3101f9d46a9e7c843b99fb4fd959c220df72a53da16f80b520f6e3d2d3127b23e14e07f73b9cb2a591e88ee46239f840a7d24687378124f6f8c1ea86bb716c2fb0edfac3099ccfed4b2db77141102e7cc457f3da063fa0e93aac26285fbf0c1f5326f69099d48aa00101530d276f903947b648b248a5e0a13f63704102e989cae942865abe2cfad3beb07f05fa869d8f92fa716c7b1a941b59a37ef3f20917c22307c7b7f09bf78efc457704b0ed074b2eb5b1cc07c95d5eb86bed3a1afb1eee93f8781620147ea45edf8f1c7723efe6fda2db819ec2e862418e7df59c29deeecfbdb94e0abc0f7e7312b82eb91be5951b269f0b5419acbf64cf59b44406da0500c9cd75121b1abeb11ec2ccfe099e2bc1400b5da807cab524a1bf15208be9f67f92a8de4e335870597037b1abb37b81d438ebdd6d3726f91e735d729055dd48c047943fc4f8ebd47e1162ad95f6079a587bcd5d2a445fbae5dca39055e14f7d7a800ddaa41e5cde52cfb233720eb2fa6ec1615e12476c8733b84fd4ebcba23f02a2a8f7fe5ab0d96bbaf41e3941b25a8bc98680b2ec02afa785e4cac3585444b826516c0116aa4512d5173fe7aa3e0f726fdeaf01a7d908b0f5a3a953cdb1dab76ec4246c94fc3556b095be529fabd05412f42008892fdb68df0a8415789db65ef2ecf9c31e38bb17d6ec3152693d6954ab3386020909b199d4cc28ee28273d7a45f6d344000ca081f4798266e35dde28a1248d026be058322f8464e975464c3aaa2ebc366e659c8f07371706ffa052dd6b87370aa42c29981dd87055b78bd83315a6cfb33326257f61f414ac503f65c05973c404c0adee9625865d0de24704ef50f2b5c2ba338253dee278b6c61143f24ee1ab0665c36bd19ba6826f36934bd4226e0b5a7b73b3c3179a9284d80fc777cb81070545028563d84cd8b1be1125984782fe32d1b06b2df4df15e371e07d41c51c020f12f718a6b239a6e3b62f18550f5570ae657ce8103ab65da0bdc9f3167c31a7059f797ceffdfead463359e87e9d501d7c04eca3b582c77166705c532556c3a5095dac9e151ead51076f3c05eb7fc594ac5532bdb4a272e9b1532fda10ed6c9b0382d59150c5c737fbbdde1c17ea88e86d82173d1ca4219ef3516b15e0124b14007cfd8718191d291ff32ad1a03b404122ec77ccdb01b771efd8ae8f3c888efd098ca58c91b82a7aa24977f53d0c785917c5bafb309e83b850c77dde25427bf7009d87755efbb070b3a39604d458e0703eda3bd36e8b5a4b82d248e415979f9870a8d15780d3312da05e15dcf0bea4c48b196a96fb8be0fac00927ba65a2f4e1ca", + "tx_json": "{\n \"version\": 2, \n \"unlock_time\": 0, \n \"vin\": [ {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 23405280, 2268891, 688814, 1140189, 1218, 21248, 8710, 6462, 988, 6744, 1185\n ], \n \"k_image\": \"1ccff101d8ee93903bde0a8ef99ebc99ccd5150f7157b93b758cd456458d4166\"\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 0, \n \"target\": {\n \"key\": \"18ee38d28e17b0535d232ea154e557eb36904b6e406a2cf9393305140c0f1f79\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"c0e6f95eaef5c3dedf13be5cfa2fcc5262da6143ed751f435e209ab121a07bd8\"\n }\n }\n ], \n \"extra\": [ 1, 143, 84, 37, 55, 80, 246, 166, 24, 92, 104, 112, 3, 169, 51, 62, 124, 182, 188, 179, 125, 232, 75, 132, 245, 154, 219, 0, 153, 123, 146, 212, 230, 2, 9, 1, 21, 199, 173, 37, 12, 234, 92, 245\n ], \n \"rct_signatures\": {\n \"type\": 5, \n \"txnFee\": 11130000, \n \"ecdhInfo\": [ {\n \"amount\": \"4dc188d5781e0e06\"\n }, {\n \"amount\": \"6093498bd565ffb5\"\n }], \n \"outPk\": [ \"abe9989f9582247aeb1cca456fad238618cbacc93bad0ee56a238c5028522807\", \"f5e9c4daf61187a4ec93f3595857b6a4b2bfd6c963d713dc73f5e1cc3764d150\"]\n }, \n \"rctsig_prunable\": {\n \"nbp\": 1, \n \"bp\": [ {\n \"A\": \"f674d2dfba532deff46e800673a994ef22d2c0828fa4ec4c53ad1d30b4fbf0c0\", \n \"S\": \"3ef3f86a015d9c86023ea017328e01f59cac0434912657650fe5e3d348a777be\", \n \"T1\": \"9c2cf702744b9e9d48b141d29f70bc94da2c4da9c6fbbae5d352b30f828a6955\", \n \"T2\": \"21824be345981d1a109c54ae4d8952c400dfec0c1f33b24bc7124e58b5dd6776\", \n \"taux\": \"bf0e485a9d3634f3dc25768b95c38538bd13f3299a0d15fe37b50f28f7af5d08\", \n \"mu\": \"bb9c2c94685b70e971833ee169cbfa30db97c6f8a7f5a15b81efe336d5f85209\", \n \"L\": [ \"45b882bc48dbb1f6200617f9658cf7d5f33dd6c5e546df98031b8eaf39ce90d8\", \"6e3195f662ca3625e4e77bfb3101f9d46a9e7c843b99fb4fd959c220df72a53d\", \"a16f80b520f6e3d2d3127b23e14e07f73b9cb2a591e88ee46239f840a7d24687\", \"378124f6f8c1ea86bb716c2fb0edfac3099ccfed4b2db77141102e7cc457f3da\", \"063fa0e93aac26285fbf0c1f5326f69099d48aa00101530d276f903947b648b2\", \"48a5e0a13f63704102e989cae942865abe2cfad3beb07f05fa869d8f92fa716c\", \"7b1a941b59a37ef3f20917c22307c7b7f09bf78efc457704b0ed074b2eb5b1cc\"\n ], \n \"R\": [ \"c95d5eb86bed3a1afb1eee93f8781620147ea45edf8f1c7723efe6fda2db819e\", \"c2e862418e7df59c29deeecfbdb94e0abc0f7e7312b82eb91be5951b269f0b54\", \"19acbf64cf59b44406da0500c9cd75121b1abeb11ec2ccfe099e2bc1400b5da8\", \"07cab524a1bf15208be9f67f92a8de4e335870597037b1abb37b81d438ebdd6d\", \"3726f91e735d729055dd48c047943fc4f8ebd47e1162ad95f6079a587bcd5d2a\", \"445fbae5dca39055e14f7d7a800ddaa41e5cde52cfb233720eb2fa6ec1615e12\", \"476c8733b84fd4ebcba23f02a2a8f7fe5ab0d96bbaf41e3941b25a8bc98680b2\"\n ], \n \"a\": \"ec02afa785e4cac3585444b826516c0116aa4512d5173fe7aa3e0f726fdeaf01\", \n \"b\": \"a7d908b0f5a3a953cdb1dab76ec4246c94fc3556b095be529fabd05412f42008\", \n \"t\": \"892fdb68df0a8415789db65ef2ecf9c31e38bb17d6ec3152693d6954ab338602\"\n }\n ], \n \"CLSAGs\": [ {\n \"s\": [ \"0909b199d4cc28ee28273d7a45f6d344000ca081f4798266e35dde28a1248d02\", \"6be058322f8464e975464c3aaa2ebc366e659c8f07371706ffa052dd6b87370a\", \"a42c29981dd87055b78bd83315a6cfb33326257f61f414ac503f65c05973c404\", \"c0adee9625865d0de24704ef50f2b5c2ba338253dee278b6c61143f24ee1ab06\", \"65c36bd19ba6826f36934bd4226e0b5a7b73b3c3179a9284d80fc777cb810705\", \"45028563d84cd8b1be1125984782fe32d1b06b2df4df15e371e07d41c51c020f\", \"12f718a6b239a6e3b62f18550f5570ae657ce8103ab65da0bdc9f3167c31a705\", \"9f797ceffdfead463359e87e9d501d7c04eca3b582c77166705c532556c3a509\", \"5dac9e151ead51076f3c05eb7fc594ac5532bdb4a272e9b1532fda10ed6c9b03\", \"82d59150c5c737fbbdde1c17ea88e86d82173d1ca4219ef3516b15e0124b1400\", \"7cfd8718191d291ff32ad1a03b404122ec77ccdb01b771efd8ae8f3c888efd09\"], \n \"c1\": \"8ca58c91b82a7aa24977f53d0c785917c5bafb309e83b850c77dde25427bf700\", \n \"D\": \"9d87755efbb070b3a39604d458e0703eda3bd36e8b5a4b82d248e415979f9870\"\n }], \n \"pseudoOuts\": [ \"a8d15780d3312da05e15dcf0bea4c48b196a96fb8be0fac00927ba65a2f4e1ca\"]\n }\n}", + "weight": 1453 + }, + { + "blob_size": 1455, + "do_not_relay": false, + "double_spend_seen": false, + "fee": 11140000, + "id_hash": "50e131ed02633f4eddffafe51e10fdec3f759d6e01f7163b76afa3bce5096260", + "kept_by_block": false, + "last_failed_height": 0, + "last_failed_id_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "last_relayed_time": 1613865178, + "max_used_block_height": 2301216, + "max_used_block_id_hash": "c9f121a14946160a96bffd1c9ab3ce0142b3173570c46f56ad69fa00c0cf9764", + "receive_time": 1613865178, + "relayed": true, + "tx_blob": "02000102000bcea9f20cbbbe12d4ca02b1cb02949901a5d101fb19e2fc018ee601e91db01742484d6705b08d511b22671312cfea561d18f9e0ed541cd75b6cdb70e3ab0264020002b90b1c8210fab9d9aeb9a0116e28ced429fbb2c59d5cd935bf3c30f56618819800026bf573ac829e90ae2344fcd983c8fbbc18c8c2a580766282099117ee107042052c01f747e3fa033f55b1355f5915dfaad7d176b9719238a94f2d82408539f6f212000209010982d362f60580c305a0f7a70561d29ac080359a8932c0cd6d4128b1755409c32746eb589bb4bda40fa8a4c387d5d193b2c7ee2533fcbbdaba0132594f4e8372aa9bb67ce59ed9a3554e2572e26aab30723e7a19cb75079c2d75089006016394565bd741ba637e8d6f4b16e21b08693f6e3afc48db6cac845d9156eb7ca0e68ff5e1b06812d1f3e7e1a027ec8545819b7081fbf43fbdc4a2aa077e97597a64e1576f70ff1d6dcf0489facc7148eccfe2fd76a600343bd7b4f8e8be8baf2a255ff145bf34c07830b18f4b033defece8dfcd2c406deabd56f1dc619aafcb3ead1ed6e8cc41e2a05a098002f6c6d28a14a4cead1e145d06280badeec397dd0f028f2d1e22842128040e37a908de1b2f723d3a9ec40a654c295aee9f32b68d0707460bed0c3bb11f91a0f576dc651b3f78e5efbabd00f2538293d2cc751fcdc5783b52318a9afdde509ee7249e91a252a31fde1646a04ac887198d1002a62f1759d7893d53e078498aa6ce0ddca007d05d8945beff01c6d514b0a245917d764aba377a3de2a48de13f7ba14683a89d99150c975709c6efb50c53bfcc4ab0e1e78163dc2f4a4404fee0dbd5c8c5914cdaaf7b79f61c40fc2b292d2929a753b2649d068a6ee30eb1a0619860760f667c413740f1a1c72af8158565268c5acc6870388edcaa6def31ab89206db6c65acbbf4b6430908687d843737462e14c11312f7b07390551112ff0db34ab44e1d609a4db88c4a7687ca6bc9b9fb48df1806608728261cdbb4ce55f7d605267c48f504f42abe8559865704776c9fb6ca90280ac6745b5059c70f9c1a7649d36344d0052445210d316c4946b92dfb05413cac1f95e65cee125ffd4c56b52d6fd40135c581f2693857a736bc17c1dc9f1aee1a26de40b51c52e8a8f8f13fa8e463bac618e8ae83b25f8763ef735e79b281469934b488e135cf4c1aabb848b796233c84662c606a980d448199e5960f19c6e60d29bdf1f2c55da062a22530de56232e4216a3a385edbd798d8ca07947645595e17ba3f0f44691b04b3711f99f8ec835d66dfabed73c158e7246d4290310b095833000a08fec202c7c8e0e3c911b98aff9c9e3cb32fdc4f5d01b5d3e44b825c34e638290e463f031127945827f01899b41503ede5d050f37434fe996fd64186a3f3b6ba0106b927d7c99504bcf2e66127805b40c6e99d39a33212f24345192daaeb6099053ebaac3a59734203d6f1b6144dbe14c6ec4f6be4c9d5ca197518111c8632430db451b597769c041a9fd55bd7604d06a0479cc435f8b1bb2b94c2977a290053077ca3441614a9c87a1fd9ce061a78eb36ae7ed3faee940a843f874d8a097a1b0c2ef1b6e962aff9d6b4af1d615ba1ce49db08fa71d8656700dbe6881c08f5a5054b71002f30db115af33974325d12bc03c0e6a5a766fec51c888fa4dd514ffd0f00994722397d3b3094608e0bf6ecc3c8965dbeb74ee3d5e47e1fc9d7e34f4300500435d153323d49e9fa7b8ad359761f4aab53ac25c4778d243df3922baf210fb5f56f717d1b54ec48efb1800a1a8e5f3bc9789ef0212c9371d51c8a02fa0c0559ea8301529b9f5e9e3e67cd3cacab803707fba8c6fa377f8ecaa940c2129002c2d29075abdb7068e68ff4e9f13df4e6e84fb1f562c2506a4dff3b35ab069109cb5cf4f8c970baa518b29a355ab4d43d4fd91f0fcef18354d40ac5a868a57d084dfbc1cf8d96b948fc28a3e1160980c3f9caaf793dd3efa404685f9d0e3ddb9e619082180a3da5de5ee257643bc40c2627381bf345355b06bf9d783793fc1512", + "tx_json": "{\n \"version\": 2, \n \"unlock_time\": 0, \n \"vin\": [ {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 27038926, 302907, 42324, 42417, 19604, 26789, 3323, 32354, 29454, 3817, 2992\n ], \n \"k_image\": \"42484d6705b08d511b22671312cfea561d18f9e0ed541cd75b6cdb70e3ab0264\"\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 0, \n \"target\": {\n \"key\": \"b90b1c8210fab9d9aeb9a0116e28ced429fbb2c59d5cd935bf3c30f566188198\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"6bf573ac829e90ae2344fcd983c8fbbc18c8c2a580766282099117ee10704205\"\n }\n }\n ], \n \"extra\": [ 1, 247, 71, 227, 250, 3, 63, 85, 177, 53, 95, 89, 21, 223, 170, 215, 209, 118, 185, 113, 146, 56, 169, 79, 45, 130, 64, 133, 57, 246, 242, 18, 0, 2, 9, 1, 9, 130, 211, 98, 246, 5, 128, 195\n ], \n \"rct_signatures\": {\n \"type\": 5, \n \"txnFee\": 11140000, \n \"ecdhInfo\": [ {\n \"amount\": \"61d29ac080359a89\"\n }, {\n \"amount\": \"32c0cd6d4128b175\"\n }], \n \"outPk\": [ \"5409c32746eb589bb4bda40fa8a4c387d5d193b2c7ee2533fcbbdaba0132594f\", \"4e8372aa9bb67ce59ed9a3554e2572e26aab30723e7a19cb75079c2d75089006\"]\n }, \n \"rctsig_prunable\": {\n \"nbp\": 1, \n \"bp\": [ {\n \"A\": \"6394565bd741ba637e8d6f4b16e21b08693f6e3afc48db6cac845d9156eb7ca0\", \n \"S\": \"e68ff5e1b06812d1f3e7e1a027ec8545819b7081fbf43fbdc4a2aa077e97597a\", \n \"T1\": \"64e1576f70ff1d6dcf0489facc7148eccfe2fd76a600343bd7b4f8e8be8baf2a\", \n \"T2\": \"255ff145bf34c07830b18f4b033defece8dfcd2c406deabd56f1dc619aafcb3e\", \n \"taux\": \"ad1ed6e8cc41e2a05a098002f6c6d28a14a4cead1e145d06280badeec397dd0f\", \n \"mu\": \"028f2d1e22842128040e37a908de1b2f723d3a9ec40a654c295aee9f32b68d07\", \n \"L\": [ \"460bed0c3bb11f91a0f576dc651b3f78e5efbabd00f2538293d2cc751fcdc578\", \"3b52318a9afdde509ee7249e91a252a31fde1646a04ac887198d1002a62f1759\", \"d7893d53e078498aa6ce0ddca007d05d8945beff01c6d514b0a245917d764aba\", \"377a3de2a48de13f7ba14683a89d99150c975709c6efb50c53bfcc4ab0e1e781\", \"63dc2f4a4404fee0dbd5c8c5914cdaaf7b79f61c40fc2b292d2929a753b2649d\", \"068a6ee30eb1a0619860760f667c413740f1a1c72af8158565268c5acc687038\", \"8edcaa6def31ab89206db6c65acbbf4b6430908687d843737462e14c11312f7b\"\n ], \n \"R\": [ \"390551112ff0db34ab44e1d609a4db88c4a7687ca6bc9b9fb48df18066087282\", \"61cdbb4ce55f7d605267c48f504f42abe8559865704776c9fb6ca90280ac6745\", \"b5059c70f9c1a7649d36344d0052445210d316c4946b92dfb05413cac1f95e65\", \"cee125ffd4c56b52d6fd40135c581f2693857a736bc17c1dc9f1aee1a26de40b\", \"51c52e8a8f8f13fa8e463bac618e8ae83b25f8763ef735e79b281469934b488e\", \"135cf4c1aabb848b796233c84662c606a980d448199e5960f19c6e60d29bdf1f\", \"2c55da062a22530de56232e4216a3a385edbd798d8ca07947645595e17ba3f0f\"\n ], \n \"a\": \"44691b04b3711f99f8ec835d66dfabed73c158e7246d4290310b095833000a08\", \n \"b\": \"fec202c7c8e0e3c911b98aff9c9e3cb32fdc4f5d01b5d3e44b825c34e638290e\", \n \"t\": \"463f031127945827f01899b41503ede5d050f37434fe996fd64186a3f3b6ba01\"\n }\n ], \n \"CLSAGs\": [ {\n \"s\": [ \"06b927d7c99504bcf2e66127805b40c6e99d39a33212f24345192daaeb609905\", \"3ebaac3a59734203d6f1b6144dbe14c6ec4f6be4c9d5ca197518111c8632430d\", \"b451b597769c041a9fd55bd7604d06a0479cc435f8b1bb2b94c2977a29005307\", \"7ca3441614a9c87a1fd9ce061a78eb36ae7ed3faee940a843f874d8a097a1b0c\", \"2ef1b6e962aff9d6b4af1d615ba1ce49db08fa71d8656700dbe6881c08f5a505\", \"4b71002f30db115af33974325d12bc03c0e6a5a766fec51c888fa4dd514ffd0f\", \"00994722397d3b3094608e0bf6ecc3c8965dbeb74ee3d5e47e1fc9d7e34f4300\", \"500435d153323d49e9fa7b8ad359761f4aab53ac25c4778d243df3922baf210f\", \"b5f56f717d1b54ec48efb1800a1a8e5f3bc9789ef0212c9371d51c8a02fa0c05\", \"59ea8301529b9f5e9e3e67cd3cacab803707fba8c6fa377f8ecaa940c2129002\", \"c2d29075abdb7068e68ff4e9f13df4e6e84fb1f562c2506a4dff3b35ab069109\"], \n \"c1\": \"cb5cf4f8c970baa518b29a355ab4d43d4fd91f0fcef18354d40ac5a868a57d08\", \n \"D\": \"4dfbc1cf8d96b948fc28a3e1160980c3f9caaf793dd3efa404685f9d0e3ddb9e\"\n }], \n \"pseudoOuts\": [ \"619082180a3da5de5ee257643bc40c2627381bf345355b06bf9d783793fc1512\"]\n }\n}", + "weight": 1455 + }, + { + "blob_size": 3276, + "do_not_relay": false, + "double_spend_seen": false, + "fee": 55460000, + "id_hash": "42b2e64110cb45bf8bb15c6c20f0b99477461596682e9248ce34649f92bfef6d", + "kept_by_block": false, + "last_failed_height": 0, + "last_failed_id_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "last_relayed_time": 1613865197, + "max_used_block_height": 2301269, + "max_used_block_id_hash": "ca791257ffa938e205bead356431b2e22131ed1f28ba3e01dda1ad4878f75314", + "receive_time": 1613865197, + "relayed": true, + "tx_blob": "02000202000b95e86980888e0cdfb803b28e0faedd0589119017a712ad48b815b908f34aeb91f15a8ad1245f708c40d9430ca3181a2bc4da74bc9229a0a7a6dde14f02000bba97b70c8c9929bad30a92c910cf9e0299c50489ca039eb60382d204fee902a03a61526ea9cf2f016bb789735cae0aff12c98c8837e05f61da17b00f8f2ceffb570c000243a584fd8d406b7c49fbd740d03bc9c17ff9e74b38cdc445d32c45035aa6c60c00024afc1007b47f038d60bfc878a5bb22fc09b2aff12339540a056e2da13d5f88880002f382f73b1662b4bac820408c1f3388e6cc80bb2852fbd72f99d05172ac001d030002f9388507aea6e8565bb7819f040e26571223737e078d2b1418604938f3705f900002b466091aeff052cdaaeb9959f6b0975edec8142c18dd3694eac95f4ef7d2811f00020ca1c32d747b80469224e87cf19f0ed58a0da2b0c7d56739da50fd853334312600027b9ae9f49363bae62554f5d093ea5b7fdc29082a5ccf955d5a790570a02788b700027800638db5b858a32d37abe5d0aa7eff885cbe002e5e7c3a384a5e68c99483af0002decd9944fb2e7e82b051ed7596a0365aa2b0e972c663c5db7d685feb07e1b60c0002a93816a8297fd30052802bd7934d688a6876f8113ac3c800dd08312f939904f300025d99e6ba3943ad596688c1beb98e39bd3ef41b60b0944b752217b3a8015d091e00021e70aacede651d8384bbf10c05e810b61224c032746897ba720b4758e2450d06a30301305d9eb487169baf4efcee11ac056c7bad6b259fa9bc9ecd5e62afe549f53a72040ca6018666fcba17b25066309a99d7b2c43e1859814394f8cefdcf8c47ef855d9d66afc82297327976b24b9bd67abb75aeb2db681ea4387e285d26981a795f66c254de46f59d6697da1308576f65e118415ee019a3095f2b28d4ae3634739b7852692a307757ae531baaaa4d8dd56243e6121dd76a7f205a4cde441738fffd25c23dc224e0b3d4ad93844dc89a429255905d3fabb2ea1743c355cdbf687aed1a45c0fea498d4fd14a43dc3ff27cfa05dd367059ec4647276351c837f7a0fcd3c3b13412dfb6ec10893d3e77ba8b122f6cd0fd27538cfd46363723808bb63b4c31e8ce4d61062cf2913bb5800ee29ec14d111c9db305ed9e1619ee2719b77c246e5a3caa08208c33e991636710ddace30da56d75110f34d80dafc898d30bf6cef56a785419501257952514d316142bd10ad4315d922699a506677dac54b92bd8745c6d8a929d2541c483b966282255285dda3d454911d9ff3e18b954e87b94812471ba8c238d9f222a1526afba1302a495792e8421b375ab2890d53d32dc7e7597e05a081b91a914849dbb97f435fb2d4c89b9d76d6375305a3da8e499028230b7463a24b0e7b0c371fe38a576251ee3f2d12ab136bd80a6c4980d655cdf0b9b1593924b562d558fd2d986dbed9fc744e6530870672b89f2af9e4b921479012e8f4026ad78cda28787c65ce04ef420711e0708f58c015dce6d6c41d9340a5fce868d52c859f7ede9546cc744c774790c0d12ba0253098e2d9dc72d37773862e40173745fb9edc1ae7a0bc2de75004550506e6d9ae4347b60d794999b67fcc333b8b82901042d92bb30b1f9ed3c7794025a614da25edc85122131cd4b44cb84447c301ab7f989c21a46754a9835848d2a7ea7d81bb035b2d8579b3f819099f83e3087d941bee3738a27ce61498531ed9e25a61ddeda961ff9f955271b135d669c3ec78fe917c988e89f867ac4edbcd78aebfd0b519a26cb1ffe99b14ef21609e2b5c88aa8ae113cb1d67e2dac993d100e664fb8ce39e661a44170ca7aa35f5d48e87695e9daaa4cd1d76244b79ccba08c1ed9806607b3de088ecac9dda9c82a4ffc9b2d85c861fbbceb7ec4b52e77e7499a30e15ea4bbf7301831481e0362d38017c2b6008899c34af3b785a291afd41b52bd7466aafcb73de2d39c4a5152c14a8e12a7d6512e80b2c6fc37ed559bde98f3182ca80cc69ac80b164072bbc430b6682c461c26ff7019f08015c50d3ca73da629b5c9f7e737e7dc538fd64fa1d7dae9bbff2ea73a712ce3a4aea6a777e2f7e01f60dfd1e1191ee2c67f3874f3c4b4b7f434a94ac2de0e45f2828bd168fadbe49861f5573ca373c9c2594b961ad1284225ad74917b923fe300de235d39d299fa795ce9a225d1a31c1c9aa8acac1a164225a3315b649f962a9231144f0d8364d90733cbc9709a2d4c343b3baf1909ff6e9a67882f11205a881a3c1042f99d8a3d708b14befecd2ceb66003f4305e335c4be8209998330c0a55c4d93c599e9c7dbf1ebe67a639108829e58bca4de3f53d7eb7ddd4f9a3910f5c34ab1388faf43f9ee7a7b0b24963fe9b3c9ff7c3445c3c6cf9bfd5b3c1170a4607eea1cda8d3cff918144dd2b6153f87bd7762cadecd3ad5f567b7dc2ce29f1eb15b182797704cb8114d876f3cdcd909b0bfeeb398f959475551edc22d27506a8378acb6c08736da3a935cab3857895d87a26499029a1bea373ae1b2718170fb730ec49cf8634dfaf0da4aa10d9e9abefd4d573873b004e307c38c43f37fd3829ce57c23e7b76d0d5612e4f7193dfd814253859bf6ae9e46dbf6dedfaa19b903dc508fc6d4ae35950f391e3a300461460b7f70f64e2cb7fb6962451ced36cc2db75008dcab89274d73879106eb2bfbcc62f7835fa339c5fa9620f7443f302b662be3705f5f2ba8c2ea6e32eecc8165ea43cfd415ff202be62b31f10e9d1cd90ac1efc36139f9ddf6471b3894ef7982547f6222f26c433fd8c83193d4e9d3e556dcc18976545357b404b7aad84e39e99137560ad90606d44773c36e18b4372c257cba74c5899803164e79042175e74f18228b937309ca3d05ac29f6ed0e82700317a3b6863b52a3186554796be24ec83b2ebbf2a16f78ab1fe3f3e3b651253fbbab16a269e23442eeabaf1ca736ba966a923cde127f634e30454639388d6f0eb7cd6b430dd01dac5855fda8446b03999ee2876505585ffa242b64cdd5a5467e40ae4a6b2fe108257d44b90120ab142588b1fcb418f24842f3790ea255ef8c75d87840f8354fa345a60ca7370b34865364448be0104178bdeaa72b3c632e1abf74f24b88b21bc2cb1d9ea013f7b69d5098189cb62f9abef754aa6533ed5ba1a9fef37878ba43e31daa9fab353d076d6db12e2a7a5703f78ce7baec23f0b1a3b7b6903bec374cb084d9c9d0d029aaf0b6ed89741932e96b4b3333d7e017fbe7190c13de08f3fea111910025132766115a98e8f47cfdb68376ad5a25dd87fdc0c30e423f4a13d8f3dffa5a1ebecaa35939f2ad3c3680d5f4909390acef01ad0ab102f5d5d647045df4d234b4bbe7045b207c4539c12a44c5b62ad1100a1f77129c00fd4a9bbf5003b6ed1d61933513b5fd037cdb712700de2d68a10c6ef4d63b0109e26b62c854d1a90480e1f0ab7b77a6dd0d2e8845df44f55e2fa8052069b8120eafa23d4efa29331176ac2656e22b071fb807ba0d62b53ada053b74ad0a6c7404114e9615e721b70c1ee90c62e3a8ac6b8b694e9bf619cda19f7b936b06ba3d0147b10f8801f6272bf748fe45fa95be0dcaca74b3f3936459e0e64762df989104b92419f4bf69522ad1ff53b0a55953d8a32d848596e3e3d798577c02f0385b0e5594a42dbc0869e7246078a66e7f0402a8411aa061d58a36302a9006ed2fe503b75d96ae5a7c440a82d3aedca59527584829cbc0da52cf6e096db90b80323f020a0c2756297b77a1b917b31e9a7d3ba5e9e6d197732368886da7a2114ad18a0e79307f91c01bcd12cfbc9f54c2159afa417a57948dc55be616be424fe9d30d0e4cbf6f399c919a5573cbbf84d206bf3c664fa1c6847165d6f4608996a4a20c0db98cb9042b11b98dbe647e3dac937d752b42a87f02a3ce820a24cad52125ebac93d2afed6071200affb8506fd390dbcd9f956414cc20bd4b9c1003d50ec2c40c05f84afd6defeae6db461edacde4a7a1731442ab7cd53ff7029e00de490cd00a7f510f0e70b1ebdc8986bfaf7975a90cf50d65994bf04eef40e71c56f426c204bc7a595cb36019e3e7d7ba7ad245aac85198c4a50e9197b5cd4fb371341c6406c6df4c2042c5e7169e873261b9ac3e02dde855f36e0aab3201b09ea9b6c3f704a7d381076e642a587bf4757b39ac5ad7c5ffba40188cff1ff364764cb300ba011000f9066d6f53a0dd434ba754ebb5d7f2d94c88aefa9feb27bd1669a76beb032ec69d4cb869c44816024dc77418c6aa076860ee9032679273c88f275b71b9010c226e561779a891bf119a222ba01f1b63f0ebcff28139db53911c710e2fc906292332e6595f51bb3b753c9fdd995a0a700d5529620b43ddefc47e9119bbd20f2bfad045e4c482bb52acb28d08c27b6423ed190d9db627039973b6df15ffb309bac7720ed9e722c36619c59234b54e31fd50a224de9b011efbcc83431e9deb016b088c08c9ae67f111bd1122751f4117c8daec9fda7418d2c79a0d0d3dddd07af0e7178786729ccf9a5ea75e82037c7a39120d5c6f8d8a694016cca7d47343b5e00ab74e22d7aea62103662a640c231066fbc1e16c0d7e0dbf498f80c1a9bcba", + "tx_json": "{\n \"version\": 2, \n \"unlock_time\": 0, \n \"vin\": [ {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 1733653, 25396224, 56415, 247602, 93870, 2185, 2960, 2343, 9261, 2744, 1081\n ], \n \"k_image\": \"f34aeb91f15a8ad1245f708c40d9430ca3181a2bc4da74bc9229a0a7a6dde14f\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 26069946, 674956, 174522, 271506, 36687, 74393, 58633, 56094, 76034, 46334, 7456\n ], \n \"k_image\": \"61526ea9cf2f016bb789735cae0aff12c98c8837e05f61da17b00f8f2ceffb57\"\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 0, \n \"target\": {\n \"key\": \"43a584fd8d406b7c49fbd740d03bc9c17ff9e74b38cdc445d32c45035aa6c60c\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"4afc1007b47f038d60bfc878a5bb22fc09b2aff12339540a056e2da13d5f8888\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"f382f73b1662b4bac820408c1f3388e6cc80bb2852fbd72f99d05172ac001d03\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"f9388507aea6e8565bb7819f040e26571223737e078d2b1418604938f3705f90\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"b466091aeff052cdaaeb9959f6b0975edec8142c18dd3694eac95f4ef7d2811f\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"0ca1c32d747b80469224e87cf19f0ed58a0da2b0c7d56739da50fd8533343126\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"7b9ae9f49363bae62554f5d093ea5b7fdc29082a5ccf955d5a790570a02788b7\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"7800638db5b858a32d37abe5d0aa7eff885cbe002e5e7c3a384a5e68c99483af\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"decd9944fb2e7e82b051ed7596a0365aa2b0e972c663c5db7d685feb07e1b60c\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"a93816a8297fd30052802bd7934d688a6876f8113ac3c800dd08312f939904f3\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"5d99e6ba3943ad596688c1beb98e39bd3ef41b60b0944b752217b3a8015d091e\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"1e70aacede651d8384bbf10c05e810b61224c032746897ba720b4758e2450d06\"\n }\n }\n ], \n \"extra\": [ 1, 48, 93, 158, 180, 135, 22, 155, 175, 78, 252, 238, 17, 172, 5, 108, 123, 173, 107, 37, 159, 169, 188, 158, 205, 94, 98, 175, 229, 73, 245, 58, 114, 4, 12, 166, 1, 134, 102, 252, 186, 23, 178, 80, 102, 48, 154, 153, 215, 178, 196, 62, 24, 89, 129, 67, 148, 248, 206, 253, 207, 140, 71, 239, 133, 93, 157, 102, 175, 200, 34, 151, 50, 121, 118, 178, 75, 155, 214, 122, 187, 117, 174, 178, 219, 104, 30, 164, 56, 126, 40, 93, 38, 152, 26, 121, 95, 102, 194, 84, 222, 70, 245, 157, 102, 151, 218, 19, 8, 87, 111, 101, 225, 24, 65, 94, 224, 25, 163, 9, 95, 43, 40, 212, 174, 54, 52, 115, 155, 120, 82, 105, 42, 48, 119, 87, 174, 83, 27, 170, 170, 77, 141, 213, 98, 67, 230, 18, 29, 215, 106, 127, 32, 90, 76, 222, 68, 23, 56, 255, 253, 37, 194, 61, 194, 36, 224, 179, 212, 173, 147, 132, 77, 200, 154, 66, 146, 85, 144, 93, 63, 171, 178, 234, 23, 67, 195, 85, 205, 191, 104, 122, 237, 26, 69, 192, 254, 164, 152, 212, 253, 20, 164, 61, 195, 255, 39, 207, 160, 93, 211, 103, 5, 158, 196, 100, 114, 118, 53, 28, 131, 127, 122, 15, 205, 60, 59, 19, 65, 45, 251, 110, 193, 8, 147, 211, 231, 123, 168, 177, 34, 246, 205, 15, 210, 117, 56, 207, 212, 99, 99, 114, 56, 8, 187, 99, 180, 195, 30, 140, 228, 214, 16, 98, 207, 41, 19, 187, 88, 0, 238, 41, 236, 20, 209, 17, 201, 219, 48, 94, 217, 225, 97, 158, 226, 113, 155, 119, 194, 70, 229, 163, 202, 160, 130, 8, 195, 62, 153, 22, 54, 113, 13, 218, 206, 48, 218, 86, 215, 81, 16, 243, 77, 128, 218, 252, 137, 141, 48, 191, 108, 239, 86, 167, 133, 65, 149, 1, 37, 121, 82, 81, 77, 49, 97, 66, 189, 16, 173, 67, 21, 217, 34, 105, 154, 80, 102, 119, 218, 197, 75, 146, 189, 135, 69, 198, 216, 169, 41, 210, 84, 28, 72, 59, 150, 98, 130, 37, 82, 133, 221, 163, 212, 84, 145, 29, 159, 243, 225, 139, 149, 78, 135, 185, 72, 18, 71, 27, 168, 194, 56, 217, 242, 34, 161, 82, 106, 251, 161, 48, 42, 73, 87, 146, 232, 66, 27, 55, 90, 178, 137, 13, 83, 211, 45, 199, 231, 89, 126\n ], \n \"rct_signatures\": {\n \"type\": 5, \n \"txnFee\": 55460000, \n \"ecdhInfo\": [ {\n \"amount\": \"914849dbb97f435f\"\n }, {\n \"amount\": \"b2d4c89b9d76d637\"\n }, {\n \"amount\": \"5305a3da8e499028\"\n }, {\n \"amount\": \"230b7463a24b0e7b\"\n }, {\n \"amount\": \"0c371fe38a576251\"\n }, {\n \"amount\": \"ee3f2d12ab136bd8\"\n }, {\n \"amount\": \"0a6c4980d655cdf0\"\n }, {\n \"amount\": \"b9b1593924b562d5\"\n }, {\n \"amount\": \"58fd2d986dbed9fc\"\n }, {\n \"amount\": \"744e6530870672b8\"\n }, {\n \"amount\": \"9f2af9e4b9214790\"\n }, {\n \"amount\": \"12e8f4026ad78cda\"\n }], \n \"outPk\": [ \"28787c65ce04ef420711e0708f58c015dce6d6c41d9340a5fce868d52c859f7e\", \"de9546cc744c774790c0d12ba0253098e2d9dc72d37773862e40173745fb9edc\", \"1ae7a0bc2de75004550506e6d9ae4347b60d794999b67fcc333b8b82901042d9\", \"2bb30b1f9ed3c7794025a614da25edc85122131cd4b44cb84447c301ab7f989c\", \"21a46754a9835848d2a7ea7d81bb035b2d8579b3f819099f83e3087d941bee37\", \"38a27ce61498531ed9e25a61ddeda961ff9f955271b135d669c3ec78fe917c98\", \"8e89f867ac4edbcd78aebfd0b519a26cb1ffe99b14ef21609e2b5c88aa8ae113\", \"cb1d67e2dac993d100e664fb8ce39e661a44170ca7aa35f5d48e87695e9daaa4\", \"cd1d76244b79ccba08c1ed9806607b3de088ecac9dda9c82a4ffc9b2d85c861f\", \"bbceb7ec4b52e77e7499a30e15ea4bbf7301831481e0362d38017c2b6008899c\", \"34af3b785a291afd41b52bd7466aafcb73de2d39c4a5152c14a8e12a7d6512e8\", \"0b2c6fc37ed559bde98f3182ca80cc69ac80b164072bbc430b6682c461c26ff7\"]\n }, \n \"rctsig_prunable\": {\n \"nbp\": 1, \n \"bp\": [ {\n \"A\": \"9f08015c50d3ca73da629b5c9f7e737e7dc538fd64fa1d7dae9bbff2ea73a712\", \n \"S\": \"ce3a4aea6a777e2f7e01f60dfd1e1191ee2c67f3874f3c4b4b7f434a94ac2de0\", \n \"T1\": \"e45f2828bd168fadbe49861f5573ca373c9c2594b961ad1284225ad74917b923\", \n \"T2\": \"fe300de235d39d299fa795ce9a225d1a31c1c9aa8acac1a164225a3315b649f9\", \n \"taux\": \"62a9231144f0d8364d90733cbc9709a2d4c343b3baf1909ff6e9a67882f11205\", \n \"mu\": \"a881a3c1042f99d8a3d708b14befecd2ceb66003f4305e335c4be8209998330c\", \n \"L\": [ \"55c4d93c599e9c7dbf1ebe67a639108829e58bca4de3f53d7eb7ddd4f9a3910f\", \"5c34ab1388faf43f9ee7a7b0b24963fe9b3c9ff7c3445c3c6cf9bfd5b3c1170a\", \"4607eea1cda8d3cff918144dd2b6153f87bd7762cadecd3ad5f567b7dc2ce29f\", \"1eb15b182797704cb8114d876f3cdcd909b0bfeeb398f959475551edc22d2750\", \"6a8378acb6c08736da3a935cab3857895d87a26499029a1bea373ae1b2718170\", \"fb730ec49cf8634dfaf0da4aa10d9e9abefd4d573873b004e307c38c43f37fd3\", \"829ce57c23e7b76d0d5612e4f7193dfd814253859bf6ae9e46dbf6dedfaa19b9\", \"03dc508fc6d4ae35950f391e3a300461460b7f70f64e2cb7fb6962451ced36cc\", \"2db75008dcab89274d73879106eb2bfbcc62f7835fa339c5fa9620f7443f302b\", \"662be3705f5f2ba8c2ea6e32eecc8165ea43cfd415ff202be62b31f10e9d1cd9\"\n ], \n \"R\": [ \"c1efc36139f9ddf6471b3894ef7982547f6222f26c433fd8c83193d4e9d3e556\", \"dcc18976545357b404b7aad84e39e99137560ad90606d44773c36e18b4372c25\", \"7cba74c5899803164e79042175e74f18228b937309ca3d05ac29f6ed0e827003\", \"17a3b6863b52a3186554796be24ec83b2ebbf2a16f78ab1fe3f3e3b651253fbb\", \"ab16a269e23442eeabaf1ca736ba966a923cde127f634e30454639388d6f0eb7\", \"cd6b430dd01dac5855fda8446b03999ee2876505585ffa242b64cdd5a5467e40\", \"ae4a6b2fe108257d44b90120ab142588b1fcb418f24842f3790ea255ef8c75d8\", \"7840f8354fa345a60ca7370b34865364448be0104178bdeaa72b3c632e1abf74\", \"f24b88b21bc2cb1d9ea013f7b69d5098189cb62f9abef754aa6533ed5ba1a9fe\", \"f37878ba43e31daa9fab353d076d6db12e2a7a5703f78ce7baec23f0b1a3b7b6\"\n ], \n \"a\": \"903bec374cb084d9c9d0d029aaf0b6ed89741932e96b4b3333d7e017fbe7190c\", \n \"b\": \"13de08f3fea111910025132766115a98e8f47cfdb68376ad5a25dd87fdc0c30e\", \n \"t\": \"423f4a13d8f3dffa5a1ebecaa35939f2ad3c3680d5f4909390acef01ad0ab102\"\n }\n ], \n \"CLSAGs\": [ {\n \"s\": [ \"f5d5d647045df4d234b4bbe7045b207c4539c12a44c5b62ad1100a1f77129c00\", \"fd4a9bbf5003b6ed1d61933513b5fd037cdb712700de2d68a10c6ef4d63b0109\", \"e26b62c854d1a90480e1f0ab7b77a6dd0d2e8845df44f55e2fa8052069b8120e\", \"afa23d4efa29331176ac2656e22b071fb807ba0d62b53ada053b74ad0a6c7404\", \"114e9615e721b70c1ee90c62e3a8ac6b8b694e9bf619cda19f7b936b06ba3d01\", \"47b10f8801f6272bf748fe45fa95be0dcaca74b3f3936459e0e64762df989104\", \"b92419f4bf69522ad1ff53b0a55953d8a32d848596e3e3d798577c02f0385b0e\", \"5594a42dbc0869e7246078a66e7f0402a8411aa061d58a36302a9006ed2fe503\", \"b75d96ae5a7c440a82d3aedca59527584829cbc0da52cf6e096db90b80323f02\", \"0a0c2756297b77a1b917b31e9a7d3ba5e9e6d197732368886da7a2114ad18a0e\", \"79307f91c01bcd12cfbc9f54c2159afa417a57948dc55be616be424fe9d30d0e\"], \n \"c1\": \"4cbf6f399c919a5573cbbf84d206bf3c664fa1c6847165d6f4608996a4a20c0d\", \n \"D\": \"b98cb9042b11b98dbe647e3dac937d752b42a87f02a3ce820a24cad52125ebac\"\n }, {\n \"s\": [ \"93d2afed6071200affb8506fd390dbcd9f956414cc20bd4b9c1003d50ec2c40c\", \"05f84afd6defeae6db461edacde4a7a1731442ab7cd53ff7029e00de490cd00a\", \"7f510f0e70b1ebdc8986bfaf7975a90cf50d65994bf04eef40e71c56f426c204\", \"bc7a595cb36019e3e7d7ba7ad245aac85198c4a50e9197b5cd4fb371341c6406\", \"c6df4c2042c5e7169e873261b9ac3e02dde855f36e0aab3201b09ea9b6c3f704\", \"a7d381076e642a587bf4757b39ac5ad7c5ffba40188cff1ff364764cb300ba01\", \"1000f9066d6f53a0dd434ba754ebb5d7f2d94c88aefa9feb27bd1669a76beb03\", \"2ec69d4cb869c44816024dc77418c6aa076860ee9032679273c88f275b71b901\", \"0c226e561779a891bf119a222ba01f1b63f0ebcff28139db53911c710e2fc906\", \"292332e6595f51bb3b753c9fdd995a0a700d5529620b43ddefc47e9119bbd20f\", \"2bfad045e4c482bb52acb28d08c27b6423ed190d9db627039973b6df15ffb309\"], \n \"c1\": \"bac7720ed9e722c36619c59234b54e31fd50a224de9b011efbcc83431e9deb01\", \n \"D\": \"6b088c08c9ae67f111bd1122751f4117c8daec9fda7418d2c79a0d0d3dddd07a\"\n }], \n \"pseudoOuts\": [ \"f0e7178786729ccf9a5ea75e82037c7a39120d5c6f8d8a694016cca7d47343b5\", \"e00ab74e22d7aea62103662a640c231066fbc1e16c0d7e0dbf498f80c1a9bcba\"]\n }\n}", + "weight": 7244 + }, + { + "blob_size": 1452, + "do_not_relay": false, + "double_spend_seen": false, + "fee": 87735000, + "id_hash": "630f47da19e94398a983d07e31d46bc90467c53ae0755132807c44c29e765a82", + "kept_by_block": false, + "last_failed_height": 0, + "last_failed_id_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "last_relayed_time": 1613865231, + "max_used_block_height": 2301285, + "max_used_block_id_hash": "1baeffdbb821bbc658f3f5348dc28f15e170ea7764425b6184c7fcd3fadca9b9", + "receive_time": 1613865231, + "relayed": true, + "tx_blob": "02000102000bc0ced40cbfa40cf8ec0de6d50e8ab311854eac518b1a816cb019c4154dd37bf9590afe0e7086f8824c734738d0dd6a0267ddda25a1c68e6d0c37f24502000226736ea68529bd892017a1c70ef0025eca077ed4f63b2c46f8ddcfb3d73a897e000259340fb1cde57c0767c133c7884ad7273fe1f853bf1b9e8096851ab907c09f782c01c09b566cd83625b4afda55acb089882eccba9ac0224e8722cd7a1b545a97d4a00209014dcf4a1674c9c90b05d8f5ea29fd1ae166cd3e94d3bf62e3fc0981c263e3207d3cc7c74a3078ffc8b1c25c6617bba68e9961f15893d901358ec746b6ba08baa0b6922d8c14d2391bdd0aa7e76e544e0b92f69d79859a8c2f7f89fdd82501c860072489988633dda82760660986ce44fedc1f2caac0519ae9aeb502924b235f31c1046b069d89895ca45c826a424a720cee6c735307b0ab19e7a942167d0ec40016c408aea31576ae820df42fd331d995bf2bf9021434274ea59ca14ca0a9004f183a149663562443c41cd79625349769ac3909430e6e7e2e785397953abdb649dc0d7bad3567d75f6e5a296d5bd0bb7e9c2e43625cbe8472f39c6710900dd3a7803025e7f13835d0eb62b4c58325467f0694905f5d84777f227428a3f10f0771286cbd62c0f883d723bd51e2cea9f655d3535ea0c4935d67d36ba326ba44e018f8bfa733524d237111765e2c133ae30c4b177497a2dab51b5b67803c1546ad5e6ed02311dc2a3790bbf507a3ca3c2be04e13c129bf6a7f1caf93a52616f56cf81e7e9129e801fb7adfd0835f57d2585cdaf345f4ff6a1e8a7a095694a1146f332fb2178595574b632f2032079e223e4b01f526af3fbb1ae9a42db117cf9e6f1eac5492f1f0ae442ee6509075c4beccfab023a3ed1dc3f05d5ee32ab29ebb3ab24f3dd4210c0ff210cd43d2035f2d6bbef4af7e2f2aece94ee51e497d2e55940736248e9a1e056147cdbb44a38ff9830d1fe7e11201e3ec079312592dca30e1099e2cb7a027f7181d64f63e054eb176af126b97ce88e452b00da1b5828d4788195d1ec8bf6cb5ec02a402a0124f1486413e64d71f93044e18b0f062c10c3b6c482c3810645048b4fe3e42293d857377a6f92983f434cabcc8f2392d085874c6e4e033846bcd664d0779f19afa431df6a41e7bcbf9ba44b16edf6851cd9f9de4afa47cf64b84cda1e64a46b3377423622a47e5d94ee01dbca9517e93c5f2a3ff3eef0d54cd9c3540eddfe71eb276671dfc1bb0bb43102f93d0ed174968984dbc6b2dff769c39a61559946bbe3d68b545ad00ca8f3d194c95836c087fb2c212de06e310b949bf19676a8ef00c00db8c16ab96579b5fe2584d5f5c965feaca66ef02fc34270d8effaa0b018d269f61e023b1901380b641ef10387b712be89243e10e17f07c3b9515f5dff7bc45663ed742d1a6ea299aab88803d772c31b9b0a1c10b3f936d9fac6d91883dfb676e438feee8ab70a5aa8c8c4463b1e4d1164ce107077a6c501a188432290ce791c79d4a9a109f244b4b5e22caadec95f9c9d6d049056a96b8a9d949631997432c23097c4026019fcde40d816c5e45d2a80dc47c600891cc6212ed66fd166b8a52502d158570a84a8e70d00d393a75d613455c6a6206b50ceb61b48d1efd9525a1ab12c5aafd5d7dcfaa5b3b98d5cd9a1f66080d1201f6b198eb16f3d927a95ff047df771f2409c66c6ffe39d2a43225348d52c07d0fa09831608111ad72412b75c8c8d32de13ea42f6527619b0cca3463c77226db01d553ba518fa98a56663e92ed45547881c035c572358dd7aaa57250dd99d80301a5e3b6cd954168577ff7dca4470e32adea822a83a82cddfa51d5dc9502835c0e5d6f52d3c0fb392bf86e4b37140a9bc2e866cf94ee8bd69ba19717f28188f206620f49eb9e964502ce663b69c2cd1f4487ab6c308d6493b1921abf0b677df20e2763859a59de3469d56ca2779efc29ad11d5980ec146c54696836019cdcfcaac8f250c25b192e91518dd3107bf8331a0d86baa5bf74939ee16328f6cfb8020a8", + "tx_json": "{\n \"version\": 2, \n \"unlock_time\": 0, \n \"vin\": [ {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 26552128, 201279, 226936, 240358, 285066, 9989, 10412, 3339, 13825, 3248, 2756\n ], \n \"k_image\": \"4dd37bf9590afe0e7086f8824c734738d0dd6a0267ddda25a1c68e6d0c37f245\"\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 0, \n \"target\": {\n \"key\": \"26736ea68529bd892017a1c70ef0025eca077ed4f63b2c46f8ddcfb3d73a897e\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"59340fb1cde57c0767c133c7884ad7273fe1f853bf1b9e8096851ab907c09f78\"\n }\n }\n ], \n \"extra\": [ 1, 192, 155, 86, 108, 216, 54, 37, 180, 175, 218, 85, 172, 176, 137, 136, 46, 204, 186, 154, 192, 34, 78, 135, 34, 205, 122, 27, 84, 90, 151, 212, 160, 2, 9, 1, 77, 207, 74, 22, 116, 201, 201, 11\n ], \n \"rct_signatures\": {\n \"type\": 5, \n \"txnFee\": 87735000, \n \"ecdhInfo\": [ {\n \"amount\": \"fd1ae166cd3e94d3\"\n }, {\n \"amount\": \"bf62e3fc0981c263\"\n }], \n \"outPk\": [ \"e3207d3cc7c74a3078ffc8b1c25c6617bba68e9961f15893d901358ec746b6ba\", \"08baa0b6922d8c14d2391bdd0aa7e76e544e0b92f69d79859a8c2f7f89fdd825\"]\n }, \n \"rctsig_prunable\": {\n \"nbp\": 1, \n \"bp\": [ {\n \"A\": \"c860072489988633dda82760660986ce44fedc1f2caac0519ae9aeb502924b23\", \n \"S\": \"5f31c1046b069d89895ca45c826a424a720cee6c735307b0ab19e7a942167d0e\", \n \"T1\": \"c40016c408aea31576ae820df42fd331d995bf2bf9021434274ea59ca14ca0a9\", \n \"T2\": \"004f183a149663562443c41cd79625349769ac3909430e6e7e2e785397953abd\", \n \"taux\": \"b649dc0d7bad3567d75f6e5a296d5bd0bb7e9c2e43625cbe8472f39c6710900d\", \n \"mu\": \"d3a7803025e7f13835d0eb62b4c58325467f0694905f5d84777f227428a3f10f\", \n \"L\": [ \"71286cbd62c0f883d723bd51e2cea9f655d3535ea0c4935d67d36ba326ba44e0\", \"18f8bfa733524d237111765e2c133ae30c4b177497a2dab51b5b67803c1546ad\", \"5e6ed02311dc2a3790bbf507a3ca3c2be04e13c129bf6a7f1caf93a52616f56c\", \"f81e7e9129e801fb7adfd0835f57d2585cdaf345f4ff6a1e8a7a095694a1146f\", \"332fb2178595574b632f2032079e223e4b01f526af3fbb1ae9a42db117cf9e6f\", \"1eac5492f1f0ae442ee6509075c4beccfab023a3ed1dc3f05d5ee32ab29ebb3a\", \"b24f3dd4210c0ff210cd43d2035f2d6bbef4af7e2f2aece94ee51e497d2e5594\"\n ], \n \"R\": [ \"36248e9a1e056147cdbb44a38ff9830d1fe7e11201e3ec079312592dca30e109\", \"9e2cb7a027f7181d64f63e054eb176af126b97ce88e452b00da1b5828d478819\", \"5d1ec8bf6cb5ec02a402a0124f1486413e64d71f93044e18b0f062c10c3b6c48\", \"2c3810645048b4fe3e42293d857377a6f92983f434cabcc8f2392d085874c6e4\", \"e033846bcd664d0779f19afa431df6a41e7bcbf9ba44b16edf6851cd9f9de4af\", \"a47cf64b84cda1e64a46b3377423622a47e5d94ee01dbca9517e93c5f2a3ff3e\", \"ef0d54cd9c3540eddfe71eb276671dfc1bb0bb43102f93d0ed174968984dbc6b\"\n ], \n \"a\": \"2dff769c39a61559946bbe3d68b545ad00ca8f3d194c95836c087fb2c212de06\", \n \"b\": \"e310b949bf19676a8ef00c00db8c16ab96579b5fe2584d5f5c965feaca66ef02\", \n \"t\": \"fc34270d8effaa0b018d269f61e023b1901380b641ef10387b712be89243e10e\"\n }\n ], \n \"CLSAGs\": [ {\n \"s\": [ \"17f07c3b9515f5dff7bc45663ed742d1a6ea299aab88803d772c31b9b0a1c10b\", \"3f936d9fac6d91883dfb676e438feee8ab70a5aa8c8c4463b1e4d1164ce10707\", \"7a6c501a188432290ce791c79d4a9a109f244b4b5e22caadec95f9c9d6d04905\", \"6a96b8a9d949631997432c23097c4026019fcde40d816c5e45d2a80dc47c6008\", \"91cc6212ed66fd166b8a52502d158570a84a8e70d00d393a75d613455c6a6206\", \"b50ceb61b48d1efd9525a1ab12c5aafd5d7dcfaa5b3b98d5cd9a1f66080d1201\", \"f6b198eb16f3d927a95ff047df771f2409c66c6ffe39d2a43225348d52c07d0f\", \"a09831608111ad72412b75c8c8d32de13ea42f6527619b0cca3463c77226db01\", \"d553ba518fa98a56663e92ed45547881c035c572358dd7aaa57250dd99d80301\", \"a5e3b6cd954168577ff7dca4470e32adea822a83a82cddfa51d5dc9502835c0e\", \"5d6f52d3c0fb392bf86e4b37140a9bc2e866cf94ee8bd69ba19717f28188f206\"], \n \"c1\": \"620f49eb9e964502ce663b69c2cd1f4487ab6c308d6493b1921abf0b677df20e\", \n \"D\": \"2763859a59de3469d56ca2779efc29ad11d5980ec146c54696836019cdcfcaac\"\n }], \n \"pseudoOuts\": [ \"8f250c25b192e91518dd3107bf8331a0d86baa5bf74939ee16328f6cfb8020a8\"]\n }\n}", + "weight": 1452 + }, + { + "blob_size": 1454, + "do_not_relay": false, + "double_spend_seen": false, + "fee": 11140000, + "id_hash": "0f041badd781cdee7ad17e158f0c435e507050c2df7a5468a3788c683a4ae783", + "kept_by_block": false, + "last_failed_height": 0, + "last_failed_id_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "last_relayed_time": 1613865205, + "max_used_block_height": 2301290, + "max_used_block_id_hash": "5c19f049f8f2485c9f71dfebe64a69ddfac35ef2ea7d3504310fb6eaf10ea85f", + "receive_time": 1613865205, + "relayed": true, + "tx_blob": "02000102000be4bb890285e3e10ac6bb0abe9011e78808c901beaf02bc02de04a103bd10bc531bb15f56d4c69d23d654f2cf9fec92bc87c418d35750b562c27c2462971502000212898a4b3e29907dcc9d0e8dc02dcda19399600ec24e1672f40c2dc22848f11100022d4d856c8776f19d3c08888e0233855a7bbb968f6e1961160b4ac7cbb9494db82c015fadc3203a7ec11734beccb1e5f6c9ddeef258b08da395a6bdd2606e2634061c020901b426c905e43472bc05a0f7a705684d64e6670b4fcc0af679f41020c379238398d0ff2b513836b61b05c51041740a14d951a93227cfcf517139350bca42a4b97f8edf07b5b805cfa10ec773a3fb10d188cac8f3fa1304a8ec2c4d68cfca019b0d0f458c041a9592c5a39aa6650c636a8f1f614eaa92fd1312fcb0feee36be87c9a49961d72b6c573aa6fcce4301173f1cadf60e8a5f7a556cd36a357202c208aa8cb7942126964bcf4fa4fe4b662cb8300c03c167a39449ffd62e3c840fab52532bba3d48c8286cf65563722c9c29f16c01c2e2719b0508f2adf8be56a537a4449829aa44ff6b0a187680d5841a4743205d5af99792dd9cbfa8fb3c8b70020484f52173cb2f2f47ea0c5f239c575292ae477b7d00c2e0b26cea122cca910907647403d8f66d48c0f29d578e054260054c6073c52d1d71e29491706ee5d62235a7d8390abee97da8ee53ed73db358da9d7b0529d38a33bafcea7b2dd090bdc4b7da74f902f7555664504fc1d2eea10c24c6247b098a255a7bbefa04c69bd1c83e68fa9671903e70ab246197d14ff64331a9630eb5b0130782767037af5f81be9f4764a66e338ab3051c8dcbc39ebaf02913662bbde4ff3f7140876ed35137eb686c37f270c40219a10e7bb711182666140c3b029de929b6a3c88c3d2b4965cde3b1b09f75ff4c778b0da2c2ddf023a174faf7f7de03e883fe377008ed4dd1f6c077fa621c4bcf35e5e7dab32abd8d3408908f38833a046afc5f1abdf1cf02996e19d19c6b948f8a66693a0436c854ac5c95fdb27fbaa28784c025360885a37fb7fe8a3cb25b69fcc879c23923aad7fd32f1f55aaa879b0fc158f85bb6a623329fa9787baa0a68eeefab4a9c35720addd9dfd3ec3adb9b05f18671a5ddca9389964c5d5e80186b368304987a28b084e4ddbd28ebdcdf6b9522226a31568031b14dad35ec60a68e7e80ee1523734095e72400c787286f42ed5ce0c0c6a15344913bbb20fcd36f4d422dbd637b5c2fe4601c677a57a3b5bff01b3ee09aaedc97cd24c4c3ad23a1aa929eb41762d961a649dc02cbb4b5c6bae2f81985a541ce3507105933c6fc15519e95fce6f7dfe34903b47202b3f6d5c971ab791812e30431f5d07fe9704b6f3670da06d7066c93fa568196072e2e0df7e8b5f11124e5e9b5fb304db3668df1ed8f721139396c9fde908aeefd91c8b59c0168f3695a360e8b37607df97245d993904a5a1c85430f168178d431747ee598267862ee3c06295eb590ede58b03fc3834488595a5936a72033280f0e766de48d9c2d440e4628b716580869a1dd7ef71d5c59b41cbb930753d868079a0509e0b1a7a86fd60d529fc1db0ebd2372a9c6dac9b745922993a3bf60c6daf88dde665a1c1eb547381da1eafd05a099d22283b2f45ac318fc82e591d42297155edbce874935d2ad97e1639deb0e485aa47d5a3b53627427a34591194fba6aefbc0c5d23c1bbb1e52edcf581d705f30ff3875f70f9476967db7bea8ae7a1c8860d300703a70af462ac0e32d44a098f2617db12b19845d784ba6f2e6582b02b360168d5ce0cfa1aa7bbb91d14100b790ee9ff99a86e7e4cdebfcb286cbfa6109d1859bde16eb5eab9de3491bf24044074ab59b42cae637b9c850c5f2837f20359a4dbc9fb85c0d541d3902b337d080bfd6413f08e24b116f0392cd85a182d73ed48feb0020e5863cb9eb95691530ddf2cac4c1e788a6da9793701928b364145fa420d3341e60606cad401107c17475c3850ac7d30922d784089ece259893c5614ffb4cc270afd0a1676f045e3a892", + "tx_json": "{\n \"version\": 2, \n \"unlock_time\": 0, \n \"vin\": [ {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 4349412, 22573445, 171462, 280638, 132199, 201, 38846, 316, 606, 417, 2109\n ], \n \"k_image\": \"bc531bb15f56d4c69d23d654f2cf9fec92bc87c418d35750b562c27c24629715\"\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 0, \n \"target\": {\n \"key\": \"12898a4b3e29907dcc9d0e8dc02dcda19399600ec24e1672f40c2dc22848f111\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"2d4d856c8776f19d3c08888e0233855a7bbb968f6e1961160b4ac7cbb9494db8\"\n }\n }\n ], \n \"extra\": [ 1, 95, 173, 195, 32, 58, 126, 193, 23, 52, 190, 204, 177, 229, 246, 201, 221, 238, 242, 88, 176, 141, 163, 149, 166, 189, 210, 96, 110, 38, 52, 6, 28, 2, 9, 1, 180, 38, 201, 5, 228, 52, 114, 188\n ], \n \"rct_signatures\": {\n \"type\": 5, \n \"txnFee\": 11140000, \n \"ecdhInfo\": [ {\n \"amount\": \"684d64e6670b4fcc\"\n }, {\n \"amount\": \"0af679f41020c379\"\n }], \n \"outPk\": [ \"238398d0ff2b513836b61b05c51041740a14d951a93227cfcf517139350bca42\", \"a4b97f8edf07b5b805cfa10ec773a3fb10d188cac8f3fa1304a8ec2c4d68cfca\"]\n }, \n \"rctsig_prunable\": {\n \"nbp\": 1, \n \"bp\": [ {\n \"A\": \"9b0d0f458c041a9592c5a39aa6650c636a8f1f614eaa92fd1312fcb0feee36be\", \n \"S\": \"87c9a49961d72b6c573aa6fcce4301173f1cadf60e8a5f7a556cd36a357202c2\", \n \"T1\": \"08aa8cb7942126964bcf4fa4fe4b662cb8300c03c167a39449ffd62e3c840fab\", \n \"T2\": \"52532bba3d48c8286cf65563722c9c29f16c01c2e2719b0508f2adf8be56a537\", \n \"taux\": \"a4449829aa44ff6b0a187680d5841a4743205d5af99792dd9cbfa8fb3c8b7002\", \n \"mu\": \"0484f52173cb2f2f47ea0c5f239c575292ae477b7d00c2e0b26cea122cca9109\", \n \"L\": [ \"647403d8f66d48c0f29d578e054260054c6073c52d1d71e29491706ee5d62235\", \"a7d8390abee97da8ee53ed73db358da9d7b0529d38a33bafcea7b2dd090bdc4b\", \"7da74f902f7555664504fc1d2eea10c24c6247b098a255a7bbefa04c69bd1c83\", \"e68fa9671903e70ab246197d14ff64331a9630eb5b0130782767037af5f81be9\", \"f4764a66e338ab3051c8dcbc39ebaf02913662bbde4ff3f7140876ed35137eb6\", \"86c37f270c40219a10e7bb711182666140c3b029de929b6a3c88c3d2b4965cde\", \"3b1b09f75ff4c778b0da2c2ddf023a174faf7f7de03e883fe377008ed4dd1f6c\"\n ], \n \"R\": [ \"7fa621c4bcf35e5e7dab32abd8d3408908f38833a046afc5f1abdf1cf02996e1\", \"9d19c6b948f8a66693a0436c854ac5c95fdb27fbaa28784c025360885a37fb7f\", \"e8a3cb25b69fcc879c23923aad7fd32f1f55aaa879b0fc158f85bb6a623329fa\", \"9787baa0a68eeefab4a9c35720addd9dfd3ec3adb9b05f18671a5ddca9389964\", \"c5d5e80186b368304987a28b084e4ddbd28ebdcdf6b9522226a31568031b14da\", \"d35ec60a68e7e80ee1523734095e72400c787286f42ed5ce0c0c6a15344913bb\", \"b20fcd36f4d422dbd637b5c2fe4601c677a57a3b5bff01b3ee09aaedc97cd24c\"\n ], \n \"a\": \"4c3ad23a1aa929eb41762d961a649dc02cbb4b5c6bae2f81985a541ce3507105\", \n \"b\": \"933c6fc15519e95fce6f7dfe34903b47202b3f6d5c971ab791812e30431f5d07\", \n \"t\": \"fe9704b6f3670da06d7066c93fa568196072e2e0df7e8b5f11124e5e9b5fb304\"\n }\n ], \n \"CLSAGs\": [ {\n \"s\": [ \"db3668df1ed8f721139396c9fde908aeefd91c8b59c0168f3695a360e8b37607\", \"df97245d993904a5a1c85430f168178d431747ee598267862ee3c06295eb590e\", \"de58b03fc3834488595a5936a72033280f0e766de48d9c2d440e4628b7165808\", \"69a1dd7ef71d5c59b41cbb930753d868079a0509e0b1a7a86fd60d529fc1db0e\", \"bd2372a9c6dac9b745922993a3bf60c6daf88dde665a1c1eb547381da1eafd05\", \"a099d22283b2f45ac318fc82e591d42297155edbce874935d2ad97e1639deb0e\", \"485aa47d5a3b53627427a34591194fba6aefbc0c5d23c1bbb1e52edcf581d705\", \"f30ff3875f70f9476967db7bea8ae7a1c8860d300703a70af462ac0e32d44a09\", \"8f2617db12b19845d784ba6f2e6582b02b360168d5ce0cfa1aa7bbb91d14100b\", \"790ee9ff99a86e7e4cdebfcb286cbfa6109d1859bde16eb5eab9de3491bf2404\", \"4074ab59b42cae637b9c850c5f2837f20359a4dbc9fb85c0d541d3902b337d08\"], \n \"c1\": \"0bfd6413f08e24b116f0392cd85a182d73ed48feb0020e5863cb9eb95691530d\", \n \"D\": \"df2cac4c1e788a6da9793701928b364145fa420d3341e60606cad401107c1747\"\n }], \n \"pseudoOuts\": [ \"5c3850ac7d30922d784089ece259893c5614ffb4cc270afd0a1676f045e3a892\"]\n }\n}", + "weight": 1454 + }, + { + "blob_size": 1966, + "do_not_relay": false, + "double_spend_seen": false, + "fee": 15050000, + "id_hash": "6085c265496d3fdacff0fa173328c8b0ff97cae60b95033c74388f0ee59e79ab", + "kept_by_block": false, + "last_failed_height": 0, + "last_failed_id_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "last_relayed_time": 1613865232, + "max_used_block_height": 2301281, + "max_used_block_id_hash": "2c397bdb1c933a1093610cb0462acd0744af253a10950a910b6122b126199578", + "receive_time": 1613865232, + "relayed": true, + "tx_blob": "02000202000b88acf00cafdb0acaa001d7ae0bc1ad07c6bf018914bf1ec629d20b9608fb2d1f9398de6b12c462d48fa559cf9cccb5e21f7c1fc55cc38b6ccf4bad5fd502000babf2e20bef8e3cd99a22eddc429cec059c9e03bff202fd58f038bf20a4124bca762c4760962c6c1216cf3d8c21ee980dd999a91cf2c93486fc51fb8687aa0200023ebf93f3b7100db77718633e2d5dabaf6399110425c31c3b5502747d6660cea70002ddf3d4eb2691c5e19aec101f65c07016140c28ced39989e0493869a6290db4e92c019a32d83914871d89ae5031b606ef18213fa8666be33683d4ff41122e1f8a81c9020901cc440c7ae325af720590ca9607e46457a6ea9d0e3128283cb3491bff75a8c8ec2d04b43fa347c8cbcc50f2e2f02fa0763d428714a8de9d4fac653a6a10668bc5f2a016d83a176c594282062e69836d0dc13a902d74bb751449794c76a1013817acd45b74391eb5c6b3663c4aa6843af250145e74403a627d0ceefc8ecc2fd7a3f6949742b463630afc6edf755ac8ea4e2d830d22f2c25146fabbed80fc5b7cf32f5a8ce81d56d56747246c6cdb1e01539c9fdbcf5d88aa060d3f8bee58e9f9ce6bab8d27f3a98ce248fd2139632d24c5e0f28cc44ef93db8c1ccd40f93dca646035f73f839f02736e9e26ad372a54c2699255b18b6039179bd4525b4f20b4e77081e8ad9ce82628b5531cfcceab2ed95d79f0de79b8c03b0d009a73cec03075213b268ea05e7323615f9a0825f8396b5ff5f6f4078ddde4e97da4962a8d60f6424ea0b0da08f4ae14704e3e5f672f633230b517f8e2ddb20eb463fa040d6268211afdf1b9dae3ec3929a659aaa1aab8e88cc973744272e2bbcefca1f492a7d314d0569d9e7b00d5992e5566f69b5f93cd430089d20b4d78b1b3412a384177ccc69b0082872988bb1bc85be1e4845abc1f47bcf4c11b876cba2ae0ed59c5497dab02437c4bd39ed2bdfcb7941afd84df96c8ebd6729953abcefd77bf1610974f1df30c0f5bd2c1cdc5574d9b5e565fe02c1d2caafeb9ad96bcdeb0c22303b130708d9a09f826ab326bebd2f63508eba4bbb57cce709d162eaa1bcdfdaec5a1a36f1f9e835653768cc33d5ca08cdf1e1055a76a98f90dccfb05823e4cc60a4cc96d7714b7f9e6bc511a92bb2ed6256293e79145ffd907e0f70c43c1b3f8c523dd2255a11141bc4004d5554eb8d96ac4cebbee6cf322c39fc5cfd00524d47ce7bb5fdad2505c574f96104a870a2fb4bf2d701ae7aa8e89edb5ab25e369f1181eaed7777f5c5b692fed434a66b846d29432af9dd745b496dd2dbd74f0e221f2318fa7f186ef422fe8274b5af8375be3b93ebfb9a854296b0ae5eb01cdc30ed6a3c766e9e4eb67046cace587a26ba9bfa6e8e9694a5329fdedf768227a0886268c40db5a7dba011ec60e43dd88c8ce208c29f8f23a1732a73f49ce4ec3b71223edf05fc6c0c748e18c1232e572e4b3dbc414da6301ee82eb987d1f8781e7c4b2023005952a1a670cf53e60c86a8b92d0b11e5d0b5942adf6e050deababbe44f65d40b41854993e33e418bf709d7d3b1fc6532af90a5e42a127c73cee4ce8c01c1b903a231852ee27104d0e2c57630ca4be4e6e264117af25b2522a605251d73e16d00a41e37281f687539483f538c3a64262922afac7c8cddfe80f84bcae236a9f90bf7b1ecfd1c602555e9fe7a06a9f5e2d9c08cc3a14cacec37e26277e049368f0df4e0b2c43796aa1322f1db9cb73ba004aef979b0c05772575e06438cd1e7a1041eea798a66057330b0a38462af4bc8e801b2ef6f6d13a3d113c1fbab76c7d4047fe1263c7dc3506f7abf3aa8632e77a42d70de8bdfdbebbf27c5e7f0c6998d04b09cc0ee0dc868ba150c9eb21d985423ce9a49504d51d71a1232f2bec47d3f0aa1f6775b4843ea901893656764cb8345f25baed64f89ac86a6c1de85334d660379bfdc6f74a49cb44f4cee955da98f11c44e001913e2a57c9cc05f4bf68eec0fa36fa273dd3c434fee05499c1aa9932bb6b9657bf727a7d7f69857440d2be204e071ad073df84d800c8db8a5758509a43fbb97bb6ada1feba7cb519b6afc8778e6b49845498c7d182ab6e85b7a5d0d0c1bd235138a0fa1e19d943f72ce921c0e0688ec641e038dfa7cbde05b8d3876e85f6e99b5ea196f3a907eda508ae4110f967e80c96ac61a768798e8d33f8ba1e790cc4de0b2a6da059c21c953d0b2f4007322a9c780a5d84f03e47ba67b972dff205f7c7f88d408550c467b29a9bfab00fe014bfb0936192109329a0a886746736f87c82adf04a73c048aa8826687ca0d4dc3c2e6de28e5b558ea91fc05ed9690b30783c514ba617c0eaaf18465b32401d7b8cea09bf4b393c275f61a328b6a94c9aca9fb58c8d5ebdf665d6dabcdc70d25da1b440214bb04d47dc7dcce110610fb122dc261788497dd8a363a31298902959e1a119d048238569668533411f8d5feadeb9eb019acfd05bb0a878c3b5a023cfcec8fa2b973b44962ceda53428f6d9b352090efd9b1e1b924699a906bb40c63d4a5eabd5b10630826b7ad96652d7ad94a3ca3ff728c99cfaa60c84966c104280ea6cc3d790aca4fd056e25810c3cac9b6aa5717c25c7b8d3f181983e162057e6d1fe9d0ef73984003fdb60cc3cf05cd7ac225da90174b7776aeafd9dbb406876dbc111f65110af25b6347ebe7b4bbb2d9f408da38e1ac92af809f59705effc194c3c5ddda1091cbc25e0dbffb3f723033eea194a94e5c46ac4cd5fcaf0280", + "tx_json": "{\n \"version\": 2, \n \"unlock_time\": 0, \n \"vin\": [ {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 27006472, 175535, 20554, 186199, 120513, 24518, 2569, 3903, 5318, 1490, 1046\n ], \n \"k_image\": \"fb2d1f9398de6b12c462d48fa559cf9cccb5e21f7c1fc55cc38b6ccf4bad5fd5\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 24688939, 984943, 560473, 1093229, 95772, 53020, 47423, 11389, 7280, 4159, 2340\n ], \n \"k_image\": \"4bca762c4760962c6c1216cf3d8c21ee980dd999a91cf2c93486fc51fb8687aa\"\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 0, \n \"target\": {\n \"key\": \"3ebf93f3b7100db77718633e2d5dabaf6399110425c31c3b5502747d6660cea7\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"ddf3d4eb2691c5e19aec101f65c07016140c28ced39989e0493869a6290db4e9\"\n }\n }\n ], \n \"extra\": [ 1, 154, 50, 216, 57, 20, 135, 29, 137, 174, 80, 49, 182, 6, 239, 24, 33, 63, 168, 102, 107, 227, 54, 131, 212, 255, 65, 18, 46, 31, 138, 129, 201, 2, 9, 1, 204, 68, 12, 122, 227, 37, 175, 114\n ], \n \"rct_signatures\": {\n \"type\": 5, \n \"txnFee\": 15050000, \n \"ecdhInfo\": [ {\n \"amount\": \"e46457a6ea9d0e31\"\n }, {\n \"amount\": \"28283cb3491bff75\"\n }], \n \"outPk\": [ \"a8c8ec2d04b43fa347c8cbcc50f2e2f02fa0763d428714a8de9d4fac653a6a10\", \"668bc5f2a016d83a176c594282062e69836d0dc13a902d74bb751449794c76a1\"]\n }, \n \"rctsig_prunable\": {\n \"nbp\": 1, \n \"bp\": [ {\n \"A\": \"3817acd45b74391eb5c6b3663c4aa6843af250145e74403a627d0ceefc8ecc2f\", \n \"S\": \"d7a3f6949742b463630afc6edf755ac8ea4e2d830d22f2c25146fabbed80fc5b\", \n \"T1\": \"7cf32f5a8ce81d56d56747246c6cdb1e01539c9fdbcf5d88aa060d3f8bee58e9\", \n \"T2\": \"f9ce6bab8d27f3a98ce248fd2139632d24c5e0f28cc44ef93db8c1ccd40f93dc\", \n \"taux\": \"a646035f73f839f02736e9e26ad372a54c2699255b18b6039179bd4525b4f20b\", \n \"mu\": \"4e77081e8ad9ce82628b5531cfcceab2ed95d79f0de79b8c03b0d009a73cec03\", \n \"L\": [ \"5213b268ea05e7323615f9a0825f8396b5ff5f6f4078ddde4e97da4962a8d60f\", \"6424ea0b0da08f4ae14704e3e5f672f633230b517f8e2ddb20eb463fa040d626\", \"8211afdf1b9dae3ec3929a659aaa1aab8e88cc973744272e2bbcefca1f492a7d\", \"314d0569d9e7b00d5992e5566f69b5f93cd430089d20b4d78b1b3412a384177c\", \"cc69b0082872988bb1bc85be1e4845abc1f47bcf4c11b876cba2ae0ed59c5497\", \"dab02437c4bd39ed2bdfcb7941afd84df96c8ebd6729953abcefd77bf1610974\", \"f1df30c0f5bd2c1cdc5574d9b5e565fe02c1d2caafeb9ad96bcdeb0c22303b13\"\n ], \n \"R\": [ \"08d9a09f826ab326bebd2f63508eba4bbb57cce709d162eaa1bcdfdaec5a1a36\", \"f1f9e835653768cc33d5ca08cdf1e1055a76a98f90dccfb05823e4cc60a4cc96\", \"d7714b7f9e6bc511a92bb2ed6256293e79145ffd907e0f70c43c1b3f8c523dd2\", \"255a11141bc4004d5554eb8d96ac4cebbee6cf322c39fc5cfd00524d47ce7bb5\", \"fdad2505c574f96104a870a2fb4bf2d701ae7aa8e89edb5ab25e369f1181eaed\", \"7777f5c5b692fed434a66b846d29432af9dd745b496dd2dbd74f0e221f2318fa\", \"7f186ef422fe8274b5af8375be3b93ebfb9a854296b0ae5eb01cdc30ed6a3c76\"\n ], \n \"a\": \"6e9e4eb67046cace587a26ba9bfa6e8e9694a5329fdedf768227a0886268c40d\", \n \"b\": \"b5a7dba011ec60e43dd88c8ce208c29f8f23a1732a73f49ce4ec3b71223edf05\", \n \"t\": \"fc6c0c748e18c1232e572e4b3dbc414da6301ee82eb987d1f8781e7c4b202300\"\n }\n ], \n \"CLSAGs\": [ {\n \"s\": [ \"5952a1a670cf53e60c86a8b92d0b11e5d0b5942adf6e050deababbe44f65d40b\", \"41854993e33e418bf709d7d3b1fc6532af90a5e42a127c73cee4ce8c01c1b903\", \"a231852ee27104d0e2c57630ca4be4e6e264117af25b2522a605251d73e16d00\", \"a41e37281f687539483f538c3a64262922afac7c8cddfe80f84bcae236a9f90b\", \"f7b1ecfd1c602555e9fe7a06a9f5e2d9c08cc3a14cacec37e26277e049368f0d\", \"f4e0b2c43796aa1322f1db9cb73ba004aef979b0c05772575e06438cd1e7a104\", \"1eea798a66057330b0a38462af4bc8e801b2ef6f6d13a3d113c1fbab76c7d404\", \"7fe1263c7dc3506f7abf3aa8632e77a42d70de8bdfdbebbf27c5e7f0c6998d04\", \"b09cc0ee0dc868ba150c9eb21d985423ce9a49504d51d71a1232f2bec47d3f0a\", \"a1f6775b4843ea901893656764cb8345f25baed64f89ac86a6c1de85334d6603\", \"79bfdc6f74a49cb44f4cee955da98f11c44e001913e2a57c9cc05f4bf68eec0f\"], \n \"c1\": \"a36fa273dd3c434fee05499c1aa9932bb6b9657bf727a7d7f69857440d2be204\", \n \"D\": \"e071ad073df84d800c8db8a5758509a43fbb97bb6ada1feba7cb519b6afc8778\"\n }, {\n \"s\": [ \"e6b49845498c7d182ab6e85b7a5d0d0c1bd235138a0fa1e19d943f72ce921c0e\", \"0688ec641e038dfa7cbde05b8d3876e85f6e99b5ea196f3a907eda508ae4110f\", \"967e80c96ac61a768798e8d33f8ba1e790cc4de0b2a6da059c21c953d0b2f400\", \"7322a9c780a5d84f03e47ba67b972dff205f7c7f88d408550c467b29a9bfab00\", \"fe014bfb0936192109329a0a886746736f87c82adf04a73c048aa8826687ca0d\", \"4dc3c2e6de28e5b558ea91fc05ed9690b30783c514ba617c0eaaf18465b32401\", \"d7b8cea09bf4b393c275f61a328b6a94c9aca9fb58c8d5ebdf665d6dabcdc70d\", \"25da1b440214bb04d47dc7dcce110610fb122dc261788497dd8a363a31298902\", \"959e1a119d048238569668533411f8d5feadeb9eb019acfd05bb0a878c3b5a02\", \"3cfcec8fa2b973b44962ceda53428f6d9b352090efd9b1e1b924699a906bb40c\", \"63d4a5eabd5b10630826b7ad96652d7ad94a3ca3ff728c99cfaa60c84966c104\"], \n \"c1\": \"280ea6cc3d790aca4fd056e25810c3cac9b6aa5717c25c7b8d3f181983e16205\", \n \"D\": \"7e6d1fe9d0ef73984003fdb60cc3cf05cd7ac225da90174b7776aeafd9dbb406\"\n }], \n \"pseudoOuts\": [ \"876dbc111f65110af25b6347ebe7b4bbb2d9f408da38e1ac92af809f59705eff\", \"c194c3c5ddda1091cbc25e0dbffb3f723033eea194a94e5c46ac4cd5fcaf0280\"]\n }\n}", + "weight": 1966 + }, + { + "blob_size": 1967, + "do_not_relay": false, + "double_spend_seen": false, + "fee": 102470000, + "id_hash": "2fd471d9650de3678f0c1e84c322d842297ec68c42295cf8f8df60704a162cbe", + "kept_by_block": false, + "last_failed_height": 0, + "last_failed_id_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "last_relayed_time": 1613865191, + "max_used_block_height": 2301289, + "max_used_block_id_hash": "2b4b00522904bfbf65b8e141650a981d7e599995c02922bcdc25f72c9c97517a", + "receive_time": 1613865191, + "relayed": true, + "tx_blob": "02000202000b81cd8a0dabe7028a05c2aa01951da47690a901e401a50ab50ced0184f997eb51076c34eb0ce0e9c8f83940089cebf3480b24a82afd2d91566936f102000bf996e70cc7ce0bbedb04c89301f4b00990a102ee9b04f5c801c7db01d557ddff044910ad8f11fa55ab7dc9a9052c21449910eee1a3c7a6fce3a73368b3bde12f3102000232984641e8edf365dba429cff1dbecdb8c173df32e67652545693f93d95927aa000291a0c9cb1a9967e57fdffdd864e2f79754f0ee5f78c5ab8405d4ba809f95476d2c01d0c6601d17bd9fc7320eaef3463d3c4da96ffa62276e5216ead73971349314910209012fe5a8184722eec405f0a2ee309abd413dfb7f42e34edf029da0541caf4a01554127ef488b45bb356a2c1bd35625043baa2bfcebd306feb625d85af311681ea18cd3ae69b07ae360b229adda972a5edaf9269d26e043d88acac07b54dc01e7b60517bd168eee90c2f8221d965f5eb9f61d464019e7b66ba65b7264fe29c48ae179eb3df1771c970dab0ce0a28ac9d78dfc26814adf9358176b892d01b933e65eba083788a9a39e58084d9ac04b80d9b98c7710b80b02216862e8e0fa163a0cecb22815fe8825992f5dcddce46eeaea9fa97c18fa00cfdd9f15f791db0458761360043a73a2da619ca256c0d2cfaa6dc54fe1abf7a66af729a2b4c846220d39dada99f45342a939f1cfa082ac9368bc141eff61e5014414986bb202886308070a1b118a7b65442151b98e01ee468080792335ba5c819a586adf965787c1eff54b75d9a6e1637394279c51118179ba5b74a02050b6df912394d5872e591ff80ea00913175ad71e2eeb00911f9eecd99de10810613eb6960fdee782aa31a65123c54554c75f56c10bc25b999ee59ff4b8ab225e6757971d3fbf2e6fe62419ff1fa274cf408d1692dfe520a59a9baa8cc09f61ddf355fff35f0022981237cf52d599e0b86701084f8ffa9d5c68bf2640bb1d0a6369e7edef2a0f05ee8287cce28e40e7981fa37e5010f8aa48fade1b5704c94daf1a334d72cf55ff9dbf11727cee078d563d25db25f096486d1f5d0f5246d5e1d74ce36568db4d2baec1a9d710534cf43221ea16f7c94022321b1495664177cd82f40befe59f6ca4ddbd4e3e77d4a49f6bde15836500c5561829a5b905fca77f43998e8bfb6ec12ac192dd9a1f390713a37b5e8b12dee74e4b66d3d49b635c699bf7525e301dba820a52650da577536cd95a1d075a450cf40bb6f0bc25a734213147a82906a728d082f480def223814acb2d2e85031f2a81e6dedc9b5d168e67063a1da6091bb376ba68975a1daefd6fb0c4b09998653ab63a1ed19013d92b51d6e1970263ffea72cfdc2a66f8338c1f8d338c0cfa69b6a544329bc699f8610891ae3becb7ed7f87d1013273adcb052064d17b3771aae46a389b3f0fdd7001632f0dbb1f0dd6b0f1112e0f4d0a4b037ef44a42eaf3db06b179cc98b83cb6b92954a67623a96aabcfbeffbf08e988049ff19dd2269e4c3c9d20213664f487ca105bc8e58fc767f54b9b47feb8cb06021e5d94e01e9e3bcbf2afa78ea97106b499be5e6dd0effeeb5010375b60ead00d99a6b4bb2d5c927cf47211ec50347a996a7750fd3ebb7d8b30451af71d82880afe07cf6b6ae515c2a92ab06e210335febf6790e4ac1201a6ee296d1f556b9a0cb33874e2303cd85625e83d76dfaea145eacc6b71eb3742f23c9d8f72356242067f1a738a0cff110705e2929e93b12905da8196c44bdf3235c096074d38a06b08affbee6dc0b268d46a420d9cd09ad2622ddc46b704db49c140ac90709cd24603876d86535871b8378c0607416fb319a6f7c571a28adba1e7ac6c63f651c0f00390515a5432e815f587460b0c65ff3c0c5736da773e58d043af0038289137da0a237febba7a227669f13882b0f977b84726fc6dc96e2762a1e01d5151b5e4850c78f5c4e8489bd57254a0ddf4644dbd106f0df55f23a56c19929c747e79856909dd1b3cd6f1f33dd866d09b222f98f81b9111545f8301cdf2cb36458ada19ea058baf12b89f6c8fc41bc760cde5d780557fd35ed4f7410294db61674d774e9853da0d08e1b19d0701ee43749d9eeda8be0202a2acb7fc5d6cf48df2619c53500817594ad237909562a570611e745f34e2cec73d2e7660124f3905aedfc274150c2da090465387cf141c945bb4c7c4d9bf8f61e4f0cbbf623d9749d36f2daf830d6a2471e5281ebfb4fa0d69b7ee3a6f3c9c856fe82fe2aea61d2ab05bb7555d0186d40fedf4e1eb4fe1f9cc7fac8da5756b908361a35186d3ed26ece7413aa506895b59810eb4047dce70fc98ddcc9594fa23cc1d1fec972ef7ea14c66c54670928a58efc58ea872da7d76cda28fee9b9d811c89d595cdbdbff71c92a5424280bb52b58f702b08655f8f8c4dcaaf268fcf69118c007738583d26e60145808160b8179c52e6aef3d16a01720022bff88a470a414baa74d4ccc1c5cc8ff36eeed0b301a01efeb79721b686ed24ea2ed65316fe4b87ea8fc96cecc153619f1176e06be6e74fbf8bcff62470de5c3325910ce33cf2937e494ffd77518860037a3f40fda3ba27f593e82a782f21e47d5d37811a5df1fbd5eef7e3bae057846288af307342412c0ea71804af08ae75fdb69922cee5de7a86f7d2e538a627d6c4b90c04d3f9186571b906970ef875be6ecf67328c48e2f189d17d0fa27a2dbf2cbeb8ee5d9fa52b2bc3adc0fdc2433ed214ffc818f54448272390698e0c9fe90e2e33b20", + "tx_json": "{\n \"version\": 2, \n \"unlock_time\": 0, \n \"vin\": [ {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 27436673, 45995, 650, 21826, 3733, 15140, 21648, 228, 1317, 1589, 237\n ], \n \"k_image\": \"84f997eb51076c34eb0ce0e9c8f83940089cebf3480b24a82afd2d91566936f1\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 26856313, 190279, 77246, 18888, 153716, 37008, 69102, 25717, 28103, 11221, 81885\n ], \n \"k_image\": \"4910ad8f11fa55ab7dc9a9052c21449910eee1a3c7a6fce3a73368b3bde12f31\"\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 0, \n \"target\": {\n \"key\": \"32984641e8edf365dba429cff1dbecdb8c173df32e67652545693f93d95927aa\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"91a0c9cb1a9967e57fdffdd864e2f79754f0ee5f78c5ab8405d4ba809f95476d\"\n }\n }\n ], \n \"extra\": [ 1, 208, 198, 96, 29, 23, 189, 159, 199, 50, 14, 174, 243, 70, 61, 60, 77, 169, 111, 250, 98, 39, 110, 82, 22, 234, 215, 57, 113, 52, 147, 20, 145, 2, 9, 1, 47, 229, 168, 24, 71, 34, 238, 196\n ], \n \"rct_signatures\": {\n \"type\": 5, \n \"txnFee\": 102470000, \n \"ecdhInfo\": [ {\n \"amount\": \"9abd413dfb7f42e3\"\n }, {\n \"amount\": \"4edf029da0541caf\"\n }], \n \"outPk\": [ \"4a01554127ef488b45bb356a2c1bd35625043baa2bfcebd306feb625d85af311\", \"681ea18cd3ae69b07ae360b229adda972a5edaf9269d26e043d88acac07b54dc\"]\n }, \n \"rctsig_prunable\": {\n \"nbp\": 1, \n \"bp\": [ {\n \"A\": \"e7b60517bd168eee90c2f8221d965f5eb9f61d464019e7b66ba65b7264fe29c4\", \n \"S\": \"8ae179eb3df1771c970dab0ce0a28ac9d78dfc26814adf9358176b892d01b933\", \n \"T1\": \"e65eba083788a9a39e58084d9ac04b80d9b98c7710b80b02216862e8e0fa163a\", \n \"T2\": \"0cecb22815fe8825992f5dcddce46eeaea9fa97c18fa00cfdd9f15f791db0458\", \n \"taux\": \"761360043a73a2da619ca256c0d2cfaa6dc54fe1abf7a66af729a2b4c846220d\", \n \"mu\": \"39dada99f45342a939f1cfa082ac9368bc141eff61e5014414986bb202886308\", \n \"L\": [ \"0a1b118a7b65442151b98e01ee468080792335ba5c819a586adf965787c1eff5\", \"4b75d9a6e1637394279c51118179ba5b74a02050b6df912394d5872e591ff80e\", \"a00913175ad71e2eeb00911f9eecd99de10810613eb6960fdee782aa31a65123\", \"c54554c75f56c10bc25b999ee59ff4b8ab225e6757971d3fbf2e6fe62419ff1f\", \"a274cf408d1692dfe520a59a9baa8cc09f61ddf355fff35f0022981237cf52d5\", \"99e0b86701084f8ffa9d5c68bf2640bb1d0a6369e7edef2a0f05ee8287cce28e\", \"40e7981fa37e5010f8aa48fade1b5704c94daf1a334d72cf55ff9dbf11727cee\"\n ], \n \"R\": [ \"8d563d25db25f096486d1f5d0f5246d5e1d74ce36568db4d2baec1a9d710534c\", \"f43221ea16f7c94022321b1495664177cd82f40befe59f6ca4ddbd4e3e77d4a4\", \"9f6bde15836500c5561829a5b905fca77f43998e8bfb6ec12ac192dd9a1f3907\", \"13a37b5e8b12dee74e4b66d3d49b635c699bf7525e301dba820a52650da57753\", \"6cd95a1d075a450cf40bb6f0bc25a734213147a82906a728d082f480def22381\", \"4acb2d2e85031f2a81e6dedc9b5d168e67063a1da6091bb376ba68975a1daefd\", \"6fb0c4b09998653ab63a1ed19013d92b51d6e1970263ffea72cfdc2a66f8338c\"\n ], \n \"a\": \"1f8d338c0cfa69b6a544329bc699f8610891ae3becb7ed7f87d1013273adcb05\", \n \"b\": \"2064d17b3771aae46a389b3f0fdd7001632f0dbb1f0dd6b0f1112e0f4d0a4b03\", \n \"t\": \"7ef44a42eaf3db06b179cc98b83cb6b92954a67623a96aabcfbeffbf08e98804\"\n }\n ], \n \"CLSAGs\": [ {\n \"s\": [ \"9ff19dd2269e4c3c9d20213664f487ca105bc8e58fc767f54b9b47feb8cb0602\", \"1e5d94e01e9e3bcbf2afa78ea97106b499be5e6dd0effeeb5010375b60ead00d\", \"99a6b4bb2d5c927cf47211ec50347a996a7750fd3ebb7d8b30451af71d82880a\", \"fe07cf6b6ae515c2a92ab06e210335febf6790e4ac1201a6ee296d1f556b9a0c\", \"b33874e2303cd85625e83d76dfaea145eacc6b71eb3742f23c9d8f7235624206\", \"7f1a738a0cff110705e2929e93b12905da8196c44bdf3235c096074d38a06b08\", \"affbee6dc0b268d46a420d9cd09ad2622ddc46b704db49c140ac90709cd24603\", \"876d86535871b8378c0607416fb319a6f7c571a28adba1e7ac6c63f651c0f003\", \"90515a5432e815f587460b0c65ff3c0c5736da773e58d043af0038289137da0a\", \"237febba7a227669f13882b0f977b84726fc6dc96e2762a1e01d5151b5e4850c\", \"78f5c4e8489bd57254a0ddf4644dbd106f0df55f23a56c19929c747e79856909\"], \n \"c1\": \"dd1b3cd6f1f33dd866d09b222f98f81b9111545f8301cdf2cb36458ada19ea05\", \n \"D\": \"8baf12b89f6c8fc41bc760cde5d780557fd35ed4f7410294db61674d774e9853\"\n }, {\n \"s\": [ \"da0d08e1b19d0701ee43749d9eeda8be0202a2acb7fc5d6cf48df2619c535008\", \"17594ad237909562a570611e745f34e2cec73d2e7660124f3905aedfc274150c\", \"2da090465387cf141c945bb4c7c4d9bf8f61e4f0cbbf623d9749d36f2daf830d\", \"6a2471e5281ebfb4fa0d69b7ee3a6f3c9c856fe82fe2aea61d2ab05bb7555d01\", \"86d40fedf4e1eb4fe1f9cc7fac8da5756b908361a35186d3ed26ece7413aa506\", \"895b59810eb4047dce70fc98ddcc9594fa23cc1d1fec972ef7ea14c66c546709\", \"28a58efc58ea872da7d76cda28fee9b9d811c89d595cdbdbff71c92a5424280b\", \"b52b58f702b08655f8f8c4dcaaf268fcf69118c007738583d26e60145808160b\", \"8179c52e6aef3d16a01720022bff88a470a414baa74d4ccc1c5cc8ff36eeed0b\", \"301a01efeb79721b686ed24ea2ed65316fe4b87ea8fc96cecc153619f1176e06\", \"be6e74fbf8bcff62470de5c3325910ce33cf2937e494ffd77518860037a3f40f\"], \n \"c1\": \"da3ba27f593e82a782f21e47d5d37811a5df1fbd5eef7e3bae057846288af307\", \n \"D\": \"342412c0ea71804af08ae75fdb69922cee5de7a86f7d2e538a627d6c4b90c04d\"\n }], \n \"pseudoOuts\": [ \"3f9186571b906970ef875be6ecf67328c48e2f189d17d0fa27a2dbf2cbeb8ee5\", \"d9fa52b2bc3adc0fdc2433ed214ffc818f54448272390698e0c9fe90e2e33b20\"]\n }\n}", + "weight": 1967 + }, + { + "blob_size": 1655, + "do_not_relay": false, + "double_spend_seen": false, + "fee": 16780000, + "id_hash": "7908c526b90fc3608603d6987b96f149cc9189f3fe482348ebbbbf1c8efc47d0", + "kept_by_block": false, + "last_failed_height": 0, + "last_failed_id_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "last_relayed_time": 1613865231, + "max_used_block_height": 2301286, + "max_used_block_id_hash": "e268519d8c40a6bb1466233e36c7b8886ac7e12c6c86482b6e058f013a260590", + "receive_time": 1613865231, + "relayed": true, + "tx_blob": "02000102000b84f0a40c99b22c83a028fdf40cd4d605b2a3018577f5ca02ee1ee527cb03fa571d3ef591465305fbe868c0a4a367b0d071fd593e7bd333a38a0b3902c3a8040002de87e104071bc2c5d55ca9e69e3028ead624b0dc11609f763beddf8c6f1fc4d10002de757db97f2aaf27aed3415b0f49d4f23112b613a3ef0c7fd4e30dc84d3a4ef40002b091d7abd5eb248eb25f94e082b19d321832be3029ad8bc678f6b1490b2cdad20002bf739158d564827f41d48cdacb4f2204ca6c684bff8693ac6149f9ee1d70e88221012c8458559bee6d8deed1ca04f34c22b46c5af9f1f17a220b7fdfd2222979fb4a05e0958008f7512b6842e97184ab7234bfbfef9fe62f962004a57ea42d5da524567ed4e9515b0262e013845de44b68ae74d72b9ba6fb289829cf6735b1e2fc781beb5840960a1e3510c0b3c2dcea4e3b597b15ec0b8e9c2c3b7f0fe8f3c80800639dfe787d6789b32448f452ebb2aa4960cad8ab92b0d915fce00eb0b737250f5e299c20234246757ab1f4b7834283b39bd519ba89350b40d7cf2b97f54675963bf7edd0c2019b3a4a0e21f80cef9e717d301779c1ed74e8f554cc3de01a2b5810d5cc824689359f53a45e692ab6b8ba877695c6a8b5290718988b1f766330bbf9e63af639a738d810895d8be79cce488f152d873595915a528414da5e3ceb13528403f09ed40e451147479df18be1368b09e50967a457300683b84d173444120d0520a9223cd843a08ea063b176cf526164d9bcd30ebe89db86504f2c3c898e315ce8c4fe0120d4b2614cd075ede9339b8d384f11252ad07db35420632a3c5e0b7259e0560908d1846252dfbe74c0af3bee9eefcea253f798921dfdbf018f11ec2c5f28a25c867b712b04bede8167ca72cfdf1f5d3a37f5cc670637ac589504c0c5fd17d0021e59997ee595f3afd0cde6a066e1a287c35b0d0604cf88da6686ca11861d7e488b8da568df334bd59dd3886ecd49c4bdc4c7d2fd154977cd8e85910e71dd94afe4f55d4e3b0515d46fe0ad68903218eb0b2a9be887d728fd8c17e66782971d3f4af100ecf20a94a969ad7cdc0ca212bee09dabd20593888fd1bc4f48a9e39f9d939a2faa6fe63c0cf0f7860dcec30e7c2edc107da7dc321956dffa2364c4325344e71157093691a2a1f76e54d9e5a6819a0c0b6c66966196cd2d7d84ccae37a6b0088d005ee6ee779a481204d9c65c3be7db2a39d92bac5e9ffcad87c234296e184d8ea03cece3b767e792c9cb1bcb23650567477785d781c0eeb708fe8416e28e412da7c26737a61cc71462429f23d8ce13b958dfe90825276d8aa6af9e6b487ca0e9f5365bfd24aab27528dff41f5fd5659cd16f2efb4e3caeb2278d49b36d1f7894b44425c7deadd6b34a02aeb2ea2b85b59836230743c7fa596f618b220ffebdac4d3fbea7eb2f7758b0edb496b66fb2200b19dea2ab13a019085178980d0b48e6fc2815e3f379df0a9ace1fddee375f91dd16a2922f17a60337ef62f30fe4880dbc073d15ed8c9b1377ce5f9cee3917e7399e01bdb2bb0b3f8615ebd262dfe4177f74f871b47563c89c4e4a59e85cda6d75790bcb4ba556053b157c3244b10233379203a4caaf674d514699f51eca0a05a18af345e6e66b99914f257a63c40d4e09e78445c5c25eec3bdf79ee5281970c0e26d55a7b8cc434510c5a8f8b4e0df664174c14694d3cee23822d4c3b223891ea60d0244618458f8d73be4cecfa0ef9fac42038193305d758028bc9bf1159c230cce885bd6168df87b0e160bb6a013db40db53dc78d95bf79b7b3a5bea982fcb3ee7c4facbf5eade362103c46be09b22e28a69f634493728688b630afa9481439c6db8d3acf0431ea93d1a2664307dfa4bccdd60347a0dcf1f7d3dfd45bcbc43d1ce68e6342c145126a7dacf6b90138fb315bae77da391f6d6cc0ca25832f6ef9f63725e497cff923172795d32e0e737e2360e4616c4782d8bdd631e8866e638d67d9ff19e67a1caa4788cbe2210f89236da17ef6c8e9360e60a1ad5e24b44ac4c2d84dac3b1e288f1e9d931c190a3af9d81d0a6e9c3efc69a89f9e44a24780aa01e35bffdc9d86cd97eb9a1a5b04d2e24fbe4e243e1630c22ac991f52a32f64309ec496b160b6ba17ec347428102e779a7b8ff2a3bff9ae352dbc7a67615665257b5caeb46653f917235eb6e6609aedc2e72f801481d8c60c8df8b729e8e8d738c7504953705546f5ac77842bc0b4770f2d8765447802cc558ef08b08279b55d4cec203aa14042941ea90648972ca837e46991e02c4df1e78e04928597c4556d5e27bfdfa736da67ed631312ea9c", + "tx_json": "{\n \"version\": 2, \n \"unlock_time\": 0, \n \"vin\": [ {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 25769988, 727321, 659459, 211581, 93012, 20914, 15237, 42357, 3950, 5093, 459\n ], \n \"k_image\": \"fa571d3ef591465305fbe868c0a4a367b0d071fd593e7bd333a38a0b3902c3a8\"\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 0, \n \"target\": {\n \"key\": \"de87e104071bc2c5d55ca9e69e3028ead624b0dc11609f763beddf8c6f1fc4d1\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"de757db97f2aaf27aed3415b0f49d4f23112b613a3ef0c7fd4e30dc84d3a4ef4\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"b091d7abd5eb248eb25f94e082b19d321832be3029ad8bc678f6b1490b2cdad2\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"bf739158d564827f41d48cdacb4f2204ca6c684bff8693ac6149f9ee1d70e882\"\n }\n }\n ], \n \"extra\": [ 1, 44, 132, 88, 85, 155, 238, 109, 141, 238, 209, 202, 4, 243, 76, 34, 180, 108, 90, 249, 241, 241, 122, 34, 11, 127, 223, 210, 34, 41, 121, 251, 74\n ], \n \"rct_signatures\": {\n \"type\": 5, \n \"txnFee\": 16780000, \n \"ecdhInfo\": [ {\n \"amount\": \"f7512b6842e97184\"\n }, {\n \"amount\": \"ab7234bfbfef9fe6\"\n }, {\n \"amount\": \"2f962004a57ea42d\"\n }, {\n \"amount\": \"5da524567ed4e951\"\n }], \n \"outPk\": [ \"5b0262e013845de44b68ae74d72b9ba6fb289829cf6735b1e2fc781beb584096\", \"0a1e3510c0b3c2dcea4e3b597b15ec0b8e9c2c3b7f0fe8f3c80800639dfe787d\", \"6789b32448f452ebb2aa4960cad8ab92b0d915fce00eb0b737250f5e299c2023\", \"4246757ab1f4b7834283b39bd519ba89350b40d7cf2b97f54675963bf7edd0c2\"]\n }, \n \"rctsig_prunable\": {\n \"nbp\": 1, \n \"bp\": [ {\n \"A\": \"9b3a4a0e21f80cef9e717d301779c1ed74e8f554cc3de01a2b5810d5cc824689\", \n \"S\": \"359f53a45e692ab6b8ba877695c6a8b5290718988b1f766330bbf9e63af639a7\", \n \"T1\": \"38d810895d8be79cce488f152d873595915a528414da5e3ceb13528403f09ed4\", \n \"T2\": \"0e451147479df18be1368b09e50967a457300683b84d173444120d0520a9223c\", \n \"taux\": \"d843a08ea063b176cf526164d9bcd30ebe89db86504f2c3c898e315ce8c4fe01\", \n \"mu\": \"20d4b2614cd075ede9339b8d384f11252ad07db35420632a3c5e0b7259e05609\", \n \"L\": [ \"d1846252dfbe74c0af3bee9eefcea253f798921dfdbf018f11ec2c5f28a25c86\", \"7b712b04bede8167ca72cfdf1f5d3a37f5cc670637ac589504c0c5fd17d0021e\", \"59997ee595f3afd0cde6a066e1a287c35b0d0604cf88da6686ca11861d7e488b\", \"8da568df334bd59dd3886ecd49c4bdc4c7d2fd154977cd8e85910e71dd94afe4\", \"f55d4e3b0515d46fe0ad68903218eb0b2a9be887d728fd8c17e66782971d3f4a\", \"f100ecf20a94a969ad7cdc0ca212bee09dabd20593888fd1bc4f48a9e39f9d93\", \"9a2faa6fe63c0cf0f7860dcec30e7c2edc107da7dc321956dffa2364c4325344\", \"e71157093691a2a1f76e54d9e5a6819a0c0b6c66966196cd2d7d84ccae37a6b0\"\n ], \n \"R\": [ \"8d005ee6ee779a481204d9c65c3be7db2a39d92bac5e9ffcad87c234296e184d\", \"8ea03cece3b767e792c9cb1bcb23650567477785d781c0eeb708fe8416e28e41\", \"2da7c26737a61cc71462429f23d8ce13b958dfe90825276d8aa6af9e6b487ca0\", \"e9f5365bfd24aab27528dff41f5fd5659cd16f2efb4e3caeb2278d49b36d1f78\", \"94b44425c7deadd6b34a02aeb2ea2b85b59836230743c7fa596f618b220ffebd\", \"ac4d3fbea7eb2f7758b0edb496b66fb2200b19dea2ab13a019085178980d0b48\", \"e6fc2815e3f379df0a9ace1fddee375f91dd16a2922f17a60337ef62f30fe488\", \"0dbc073d15ed8c9b1377ce5f9cee3917e7399e01bdb2bb0b3f8615ebd262dfe4\"\n ], \n \"a\": \"177f74f871b47563c89c4e4a59e85cda6d75790bcb4ba556053b157c3244b102\", \n \"b\": \"33379203a4caaf674d514699f51eca0a05a18af345e6e66b99914f257a63c40d\", \n \"t\": \"4e09e78445c5c25eec3bdf79ee5281970c0e26d55a7b8cc434510c5a8f8b4e0d\"\n }\n ], \n \"CLSAGs\": [ {\n \"s\": [ \"f664174c14694d3cee23822d4c3b223891ea60d0244618458f8d73be4cecfa0e\", \"f9fac42038193305d758028bc9bf1159c230cce885bd6168df87b0e160bb6a01\", \"3db40db53dc78d95bf79b7b3a5bea982fcb3ee7c4facbf5eade362103c46be09\", \"b22e28a69f634493728688b630afa9481439c6db8d3acf0431ea93d1a2664307\", \"dfa4bccdd60347a0dcf1f7d3dfd45bcbc43d1ce68e6342c145126a7dacf6b901\", \"38fb315bae77da391f6d6cc0ca25832f6ef9f63725e497cff923172795d32e0e\", \"737e2360e4616c4782d8bdd631e8866e638d67d9ff19e67a1caa4788cbe2210f\", \"89236da17ef6c8e9360e60a1ad5e24b44ac4c2d84dac3b1e288f1e9d931c190a\", \"3af9d81d0a6e9c3efc69a89f9e44a24780aa01e35bffdc9d86cd97eb9a1a5b04\", \"d2e24fbe4e243e1630c22ac991f52a32f64309ec496b160b6ba17ec347428102\", \"e779a7b8ff2a3bff9ae352dbc7a67615665257b5caeb46653f917235eb6e6609\"], \n \"c1\": \"aedc2e72f801481d8c60c8df8b729e8e8d738c7504953705546f5ac77842bc0b\", \n \"D\": \"4770f2d8765447802cc558ef08b08279b55d4cec203aa14042941ea90648972c\"\n }], \n \"pseudoOuts\": [ \"a837e46991e02c4df1e78e04928597c4556d5e27bfdfa736da67ed631312ea9c\"]\n }\n}", + "weight": 2192 + }, + { + "blob_size": 1455, + "do_not_relay": false, + "double_spend_seen": false, + "fee": 11140000, + "id_hash": "5cdb533084065846b9a13fccf5fc20aa3e2bf1f71b6f0f1bd2be4570fdd38de4", + "kept_by_block": false, + "last_failed_height": 0, + "last_failed_id_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "last_relayed_time": 1613865208, + "max_used_block_height": 2301192, + "max_used_block_id_hash": "d419a25bb0c0c0a1aedc88a0ee9be36588855afe35cfac842344a29fbc85ec4b", + "receive_time": 1613865208, + "relayed": true, + "tx_blob": "02000102000bf2fd820bbe89bd018afd17df92239a8310c4e302a8c101e81f8d778710ee256083c22b7fc33acfa366f546f9ff7474bffaa874901c7344cc6440a06815e2ed0200023407a66e56b4b1e6ff770414def6bd33777bbda44e9437fe6bef7436aba0fb410002a75678b3276704af7ed1cf6de79daae13373e009dbc8156b1a878eed7893d8342c01e674808dab267b7882533f92e94ad833f6d1dabd909bff418a553635a1506631020901eb12d03827f42bc205a0f7a70573f8c852dea5d03ab53c414e704b14f7eca2975164b249813f0576772c87d9750b8206de03af33894a006b605767fee1d2d8a16eb46be2c99f7d6b4df2a627ba25e6fe78ff3dcb021e7e2fc0b98c45fc018049fd92a226a37ba884ceefb354917459f5ccbc77938798502a3e6270a05b115808b89b8f6cb382999bcc29089706115cc6b65e49bc970599446d99144e60410b2f2ce28320c400188017519986357a719334038701eb80559f8653e2c133e9ca0ffc6245a1f054b9d9fab344d1d62b9111bc01ee6da487a3852a92fb5814ccd7e5e83f2e70ea9cc1ae14d8954e5875e1c7b4d0564f67864a5656c1a6fdbf057ddc9ed01b39bdffdef6f43a51c5afaae70048825f8619b125d4be933848d00a07b496f50c58ad35b531b02657a9cb629af4dc2c1cb74701751635075354aa7ef8e1310077b2ee900d8be1c3d8aef77246d579a9a45ec983c3b16fdbf510cf10a87b4feaccfa45870efc2b5df56842c57fadf04fec46a236b16accb5dd591eecd84fe09393eb560726c9f2c8abfa9f6813091fa1c77201e817855ee0bb3debce4468f3b7e680ac547cdaacecfd23bca6bf2af63353dc23d5c18d2a9330eeba6154fdd4ad51351cf374463bcf13cb617bec2e645668fe2bc0633fd7a7cdf118f67746cd5fb155585ab4ea4bbed6e732c5cf892334c6d0d21fbe4a05fc42c2608d67075a066e4e4f92c8d3a52bc7a26123ca9e4e5845648dc3d24ab2079bea2f085dee03700bf13ddaa88b0f27b0837002e866b2ac0cf534b210992c804ed4457545bfc4dbe0ec04d3653012d71a9f52b0900982d70f48b4aaebdd6871c6b8bfece1df9c6d4043681da70391b1ceb972435b059ba671975dcfdd5364aa54798106c93a3e52f3cb260e691a796db7bc69c42775133b24201b668c29290735f9d40da533c0ba61f247e4b5ebba631957527b961eb3382ff36544b3405119a02e9a25ae70061293fa35c7611abb98f167a9586994275d4e0c8e242c4a64906d4922a5668fe802d2f040522624106012018a821ac2661740de61cde13dd2d55abe3d1ee80863d8f0ccbdf54335762f6fea985449d69a7499f987d45a1ad0a2fadb01352207e8d9d59c8fdec5e890e01bef325452f79dbc3037277f4d7d0c75207be542d0085bc3bf33f5915200b950ad37d798cce7c6ae959754f68ebfd98e44d01f805107a0d0d320a95301931a752706eccc7edd6de819df7fe2bc0564772a85583ba90cf578934955d1e90e47a5b583977fd1a30ed81d9f1e04dac5286170f3b1ebcc059694cc523664601a52a4c7a2daa1d3bf32c0b96b2b7fe332e14913e1075b370a60d359bb6ffcc601d718bb2362774f15947ef1d7267fe4b8db70c7bc8133730f3b0cfcbd2aaba4be5836581eda44dd9d634bedf614e452dbb4d3ed968cbc3807570659d6654a4b417beca9ad8e821f2360a11fc6c7ba4d3630247e49a2da9f035d7a8db5d4d8aa59562f4e825b0b924c2a14402f8202cad4d103199d9a24db04636b72048d28faed4599f72c0378e67a249f65832a55306fd201cf4540a24c06a839854765b264c1fa3343180240ec3887264e3387e980efaf8e0648b98ef40ccad661b73f826d44a56b37a24193c702159ef8c4ea28e3f29c29d69103bccf0698b29c5794337feb8991374e5893016cbd88b41a4ff36c0ba9565ad7f0314f087a5abd8726a60f7c26307e64af354f34f99ffe5a8fe218e18ac9f985258e033121ddc3af1c6dc9e0087cab598c1ff1482fa9632a45ea49a7e700326d18fa786e", + "tx_json": "{\n \"version\": 2, \n \"unlock_time\": 0, \n \"vin\": [ {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 23117554, 3097790, 392842, 575839, 262554, 45508, 24744, 4072, 15245, 2055, 4846\n ], \n \"k_image\": \"6083c22b7fc33acfa366f546f9ff7474bffaa874901c7344cc6440a06815e2ed\"\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 0, \n \"target\": {\n \"key\": \"3407a66e56b4b1e6ff770414def6bd33777bbda44e9437fe6bef7436aba0fb41\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"a75678b3276704af7ed1cf6de79daae13373e009dbc8156b1a878eed7893d834\"\n }\n }\n ], \n \"extra\": [ 1, 230, 116, 128, 141, 171, 38, 123, 120, 130, 83, 63, 146, 233, 74, 216, 51, 246, 209, 218, 189, 144, 155, 255, 65, 138, 85, 54, 53, 161, 80, 102, 49, 2, 9, 1, 235, 18, 208, 56, 39, 244, 43, 194\n ], \n \"rct_signatures\": {\n \"type\": 5, \n \"txnFee\": 11140000, \n \"ecdhInfo\": [ {\n \"amount\": \"73f8c852dea5d03a\"\n }, {\n \"amount\": \"b53c414e704b14f7\"\n }], \n \"outPk\": [ \"eca2975164b249813f0576772c87d9750b8206de03af33894a006b605767fee1\", \"d2d8a16eb46be2c99f7d6b4df2a627ba25e6fe78ff3dcb021e7e2fc0b98c45fc\"]\n }, \n \"rctsig_prunable\": {\n \"nbp\": 1, \n \"bp\": [ {\n \"A\": \"8049fd92a226a37ba884ceefb354917459f5ccbc77938798502a3e6270a05b11\", \n \"S\": \"5808b89b8f6cb382999bcc29089706115cc6b65e49bc970599446d99144e6041\", \n \"T1\": \"0b2f2ce28320c400188017519986357a719334038701eb80559f8653e2c133e9\", \n \"T2\": \"ca0ffc6245a1f054b9d9fab344d1d62b9111bc01ee6da487a3852a92fb5814cc\", \n \"taux\": \"d7e5e83f2e70ea9cc1ae14d8954e5875e1c7b4d0564f67864a5656c1a6fdbf05\", \n \"mu\": \"7ddc9ed01b39bdffdef6f43a51c5afaae70048825f8619b125d4be933848d00a\", \n \"L\": [ \"b496f50c58ad35b531b02657a9cb629af4dc2c1cb74701751635075354aa7ef8\", \"e1310077b2ee900d8be1c3d8aef77246d579a9a45ec983c3b16fdbf510cf10a8\", \"7b4feaccfa45870efc2b5df56842c57fadf04fec46a236b16accb5dd591eecd8\", \"4fe09393eb560726c9f2c8abfa9f6813091fa1c77201e817855ee0bb3debce44\", \"68f3b7e680ac547cdaacecfd23bca6bf2af63353dc23d5c18d2a9330eeba6154\", \"fdd4ad51351cf374463bcf13cb617bec2e645668fe2bc0633fd7a7cdf118f677\", \"46cd5fb155585ab4ea4bbed6e732c5cf892334c6d0d21fbe4a05fc42c2608d67\"\n ], \n \"R\": [ \"5a066e4e4f92c8d3a52bc7a26123ca9e4e5845648dc3d24ab2079bea2f085dee\", \"03700bf13ddaa88b0f27b0837002e866b2ac0cf534b210992c804ed4457545bf\", \"c4dbe0ec04d3653012d71a9f52b0900982d70f48b4aaebdd6871c6b8bfece1df\", \"9c6d4043681da70391b1ceb972435b059ba671975dcfdd5364aa54798106c93a\", \"3e52f3cb260e691a796db7bc69c42775133b24201b668c29290735f9d40da533\", \"c0ba61f247e4b5ebba631957527b961eb3382ff36544b3405119a02e9a25ae70\", \"061293fa35c7611abb98f167a9586994275d4e0c8e242c4a64906d4922a5668f\"\n ], \n \"a\": \"e802d2f040522624106012018a821ac2661740de61cde13dd2d55abe3d1ee808\", \n \"b\": \"63d8f0ccbdf54335762f6fea985449d69a7499f987d45a1ad0a2fadb01352207\", \n \"t\": \"e8d9d59c8fdec5e890e01bef325452f79dbc3037277f4d7d0c75207be542d008\"\n }\n ], \n \"CLSAGs\": [ {\n \"s\": [ \"5bc3bf33f5915200b950ad37d798cce7c6ae959754f68ebfd98e44d01f805107\", \"a0d0d320a95301931a752706eccc7edd6de819df7fe2bc0564772a85583ba90c\", \"f578934955d1e90e47a5b583977fd1a30ed81d9f1e04dac5286170f3b1ebcc05\", \"9694cc523664601a52a4c7a2daa1d3bf32c0b96b2b7fe332e14913e1075b370a\", \"60d359bb6ffcc601d718bb2362774f15947ef1d7267fe4b8db70c7bc8133730f\", \"3b0cfcbd2aaba4be5836581eda44dd9d634bedf614e452dbb4d3ed968cbc3807\", \"570659d6654a4b417beca9ad8e821f2360a11fc6c7ba4d3630247e49a2da9f03\", \"5d7a8db5d4d8aa59562f4e825b0b924c2a14402f8202cad4d103199d9a24db04\", \"636b72048d28faed4599f72c0378e67a249f65832a55306fd201cf4540a24c06\", \"a839854765b264c1fa3343180240ec3887264e3387e980efaf8e0648b98ef40c\", \"cad661b73f826d44a56b37a24193c702159ef8c4ea28e3f29c29d69103bccf06\"], \n \"c1\": \"98b29c5794337feb8991374e5893016cbd88b41a4ff36c0ba9565ad7f0314f08\", \n \"D\": \"7a5abd8726a60f7c26307e64af354f34f99ffe5a8fe218e18ac9f985258e0331\"\n }], \n \"pseudoOuts\": [ \"21ddc3af1c6dc9e0087cab598c1ff1482fa9632a45ea49a7e700326d18fa786e\"]\n }\n}", + "weight": 1455 + }, + { + "blob_size": 1581, + "do_not_relay": false, + "double_spend_seen": false, + "fee": 16220000, + "id_hash": "502972204a8a5d3f3e593aee64a0baa8c9dc6b64876a6ed0de6db6da040870e9", + "kept_by_block": false, + "last_failed_height": 0, + "last_failed_id_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "last_relayed_time": 1613865231, + "max_used_block_height": 2301283, + "max_used_block_id_hash": "87dd1e298c20bcd156b0e4e151daaeac0bd42422cfecb1fbc5a7e38812382907", + "receive_time": 1613865231, + "relayed": true, + "tx_blob": "02000102000bb29ea409d79b8d03eaae1e80d91bfaa021cdbe03f66a870a9701c214b90fb8f2e25d853d4d157be9cdaa9140cc44e6e7764daae1e0986935f303eb3b08e0030002b715530f3cbffa4048b7a522385111e9192112c72f6cccd7d34a8afd081890c100027280d8d1a2079d5bd1b3464be974af09c4c9af84ee84f9d8211dad0bb93b45a30002875d093932da69a98513078387d8add61c6dd9b985cfcfa180cf1d09562830b12101104e3f47d473b1feb6a60806634748c8cdd8a1231c1c56a069a4eb3fd486b8ab05e0fedd0731dcb5538d1c2162da54a545db0e4c840584622e8d9a10e5abd7f6bb1f7c674f96b8d5911b815d369b3ce2f658621b17d72e55f3868a6edc583e86b47f9dc7fdebadf3d96d5e625a928d28d42880c3f2ebdf0ef402c1a2bd0e8ffad38b52ef6e2cdeec531c73740fa554d12d78772bed179bfd9c06343c7b0129d2319628f6eb0a049136f802bc659b2ec47e0a29da2b7e3e0ac39329028395556d97a03a866610eff787468b929c57e767ebb4cc3562d5d7215e4f7b1302dbbd6704d3a110f7477e4975a3136226978e5f8316379682a66ca572fabce5d6bedfb7cfc08b820a3789460f5b1da1159335126509c8e4db73606dbd4418ed6bcc822acd41ee92c1f6413da279987ac9fe5239f1066945c4da10580b497fc8d30d7c956b7acfe476b0f8a4cb7ca806f0bd324b43909e5cdafabcc4eecfcb58f70608968acd9af52353207683a2635a3a9f49ca414337f8354d955049cc54fc4458fd7bbd312ea93503d179199b5fbf14adef26286d8f3734cd1f02f7b2890c4715c5bcaa0ef62bf07a793f6420bf99fb58dd03044eb0466485aff2309c9baf8ca7451ce81bda836c9ecbdc9f07b90ac71e9bc8b63874c349796d3d12d30f77136c5ecbbfbcec7173bd9ff9964b9d69450b64b2443eadb20b533438b460e718924039e9a36bdd7eac62e66bf72f0828646713821b002d606cd943fd51edfac20182f8059319c9ada1acdff7a75915bb0d02de3e8b020d87038da89c9be400e2293f73a1c989002b0eb3736f64b4757315ae9f15af6730b4a7f2f4457034f4ee1362b108145c3f42c353c99bb3cbdd279ff521381161ef8cd345fefe52d5ecf803a16a124eed2fab76e2505108f9fca1004adffa105d053d09f0c48e291f77f8af2c7db10945954a470a99c3180f2310219b53fe6dbd20478d7a8ce5d8040706368dd880e483c8061b54f7cd46270a3963b1a910df2e07ba95247d18d8fd5e22a70b4a9047b4cc913c1e34db9617aa7ef2ef3d31c61dbe80cae0a4b8d3c809316c6aff4ee0400cd1f4458b329678ae5e422ed96d1f1af1e8e15490bab302fbc32402197306be918787e5dd20dfa63be9a7ef43ffe705c8439cfd651383ebdb3c23af89387d3312dc552fb196246a14f263a7cc1e3faafaba051b52c273fbc686c23c3520f6fffee6319200d46538aa2a8a0b19db0e970bb5774d2ae92eb5f0b245b0ea004bfb375573715fb9ec518a55b7fd20c10b5babeffd96dd8e358b298ad5ad3e0d87543c1a61dca963bb162e23d495033133277685ed65af5e3d884d5914be4407d23790f5fde3f4c84d5e51bc5656d85708686f147ad457e90076cedf22c1dd068ebaed1b81592c72f45b7008fadc69f4578628594a15209a82365563ff8c75009475a81cb1646a07f181d014dea8386adb00e10c6cb942e9193e5e3246029a083181cf0e0d802bf624b118bfc1a20abc1c41ad6d9e7460505d31d898f4411509d929b2be2f55effb84023125d7fefedda68e42b512de9462dfbecf7f8abdfd09c26f75999bdc57e6d092f3f63a557370636acddfc34e9615a5b9bd955e429a08b8469a769d250f17e2b1ac1794b50c772c9084e4c81c8d7bd6704e3a240635084bb36e8d742c7908fa4f72618aa2c934b3be8e7e6cef40470d5a467debe21e044929f65f2cd89852c5b17728b16a77f74d41470ee6c4eca35dbb03ff846d24050f13eb46524d3202992835362f7634994e1a6fbd146e856b2034a1755aa48f03867ca064004852a3fd039d74030525c4ec05f2f6abd479d9bff89509e2ad680be7f068fb56b2423342e3f005f86f8e4a356d9beb435bca1c737bf890301d4005d82d311bb062e892cdc007b01650062bb0da0a985ed38996e17ebbd61a30423f76ec53bca8ce56593194af0ae9d13bae65aa204799f8598abf93117f05e3cbca", + "tx_json": "{\n \"version\": 2, \n \"unlock_time\": 0, \n \"vin\": [ {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 19468082, 6507991, 497514, 453760, 544890, 57165, 13686, 1287, 151, 2626, 1977\n ], \n \"k_image\": \"b8f2e25d853d4d157be9cdaa9140cc44e6e7764daae1e0986935f303eb3b08e0\"\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 0, \n \"target\": {\n \"key\": \"b715530f3cbffa4048b7a522385111e9192112c72f6cccd7d34a8afd081890c1\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"7280d8d1a2079d5bd1b3464be974af09c4c9af84ee84f9d8211dad0bb93b45a3\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"875d093932da69a98513078387d8add61c6dd9b985cfcfa180cf1d09562830b1\"\n }\n }\n ], \n \"extra\": [ 1, 16, 78, 63, 71, 212, 115, 177, 254, 182, 166, 8, 6, 99, 71, 72, 200, 205, 216, 161, 35, 28, 28, 86, 160, 105, 164, 235, 63, 212, 134, 184, 171\n ], \n \"rct_signatures\": {\n \"type\": 5, \n \"txnFee\": 16220000, \n \"ecdhInfo\": [ {\n \"amount\": \"31dcb5538d1c2162\"\n }, {\n \"amount\": \"da54a545db0e4c84\"\n }, {\n \"amount\": \"0584622e8d9a10e5\"\n }], \n \"outPk\": [ \"abd7f6bb1f7c674f96b8d5911b815d369b3ce2f658621b17d72e55f3868a6edc\", \"583e86b47f9dc7fdebadf3d96d5e625a928d28d42880c3f2ebdf0ef402c1a2bd\", \"0e8ffad38b52ef6e2cdeec531c73740fa554d12d78772bed179bfd9c06343c7b\"]\n }, \n \"rctsig_prunable\": {\n \"nbp\": 1, \n \"bp\": [ {\n \"A\": \"29d2319628f6eb0a049136f802bc659b2ec47e0a29da2b7e3e0ac39329028395\", \n \"S\": \"556d97a03a866610eff787468b929c57e767ebb4cc3562d5d7215e4f7b1302db\", \n \"T1\": \"bd6704d3a110f7477e4975a3136226978e5f8316379682a66ca572fabce5d6be\", \n \"T2\": \"dfb7cfc08b820a3789460f5b1da1159335126509c8e4db73606dbd4418ed6bcc\", \n \"taux\": \"822acd41ee92c1f6413da279987ac9fe5239f1066945c4da10580b497fc8d30d\", \n \"mu\": \"7c956b7acfe476b0f8a4cb7ca806f0bd324b43909e5cdafabcc4eecfcb58f706\", \n \"L\": [ \"968acd9af52353207683a2635a3a9f49ca414337f8354d955049cc54fc4458fd\", \"7bbd312ea93503d179199b5fbf14adef26286d8f3734cd1f02f7b2890c4715c5\", \"bcaa0ef62bf07a793f6420bf99fb58dd03044eb0466485aff2309c9baf8ca745\", \"1ce81bda836c9ecbdc9f07b90ac71e9bc8b63874c349796d3d12d30f77136c5e\", \"cbbfbcec7173bd9ff9964b9d69450b64b2443eadb20b533438b460e718924039\", \"e9a36bdd7eac62e66bf72f0828646713821b002d606cd943fd51edfac20182f8\", \"059319c9ada1acdff7a75915bb0d02de3e8b020d87038da89c9be400e2293f73\", \"a1c989002b0eb3736f64b4757315ae9f15af6730b4a7f2f4457034f4ee1362b1\"\n ], \n \"R\": [ \"145c3f42c353c99bb3cbdd279ff521381161ef8cd345fefe52d5ecf803a16a12\", \"4eed2fab76e2505108f9fca1004adffa105d053d09f0c48e291f77f8af2c7db1\", \"0945954a470a99c3180f2310219b53fe6dbd20478d7a8ce5d8040706368dd880\", \"e483c8061b54f7cd46270a3963b1a910df2e07ba95247d18d8fd5e22a70b4a90\", \"47b4cc913c1e34db9617aa7ef2ef3d31c61dbe80cae0a4b8d3c809316c6aff4e\", \"e0400cd1f4458b329678ae5e422ed96d1f1af1e8e15490bab302fbc324021973\", \"06be918787e5dd20dfa63be9a7ef43ffe705c8439cfd651383ebdb3c23af8938\", \"7d3312dc552fb196246a14f263a7cc1e3faafaba051b52c273fbc686c23c3520\"\n ], \n \"a\": \"f6fffee6319200d46538aa2a8a0b19db0e970bb5774d2ae92eb5f0b245b0ea00\", \n \"b\": \"4bfb375573715fb9ec518a55b7fd20c10b5babeffd96dd8e358b298ad5ad3e0d\", \n \"t\": \"87543c1a61dca963bb162e23d495033133277685ed65af5e3d884d5914be4407\"\n }\n ], \n \"CLSAGs\": [ {\n \"s\": [ \"d23790f5fde3f4c84d5e51bc5656d85708686f147ad457e90076cedf22c1dd06\", \"8ebaed1b81592c72f45b7008fadc69f4578628594a15209a82365563ff8c7500\", \"9475a81cb1646a07f181d014dea8386adb00e10c6cb942e9193e5e3246029a08\", \"3181cf0e0d802bf624b118bfc1a20abc1c41ad6d9e7460505d31d898f4411509\", \"d929b2be2f55effb84023125d7fefedda68e42b512de9462dfbecf7f8abdfd09\", \"c26f75999bdc57e6d092f3f63a557370636acddfc34e9615a5b9bd955e429a08\", \"b8469a769d250f17e2b1ac1794b50c772c9084e4c81c8d7bd6704e3a24063508\", \"4bb36e8d742c7908fa4f72618aa2c934b3be8e7e6cef40470d5a467debe21e04\", \"4929f65f2cd89852c5b17728b16a77f74d41470ee6c4eca35dbb03ff846d2405\", \"0f13eb46524d3202992835362f7634994e1a6fbd146e856b2034a1755aa48f03\", \"867ca064004852a3fd039d74030525c4ec05f2f6abd479d9bff89509e2ad680b\"], \n \"c1\": \"e7f068fb56b2423342e3f005f86f8e4a356d9beb435bca1c737bf890301d4005\", \n \"D\": \"d82d311bb062e892cdc007b01650062bb0da0a985ed38996e17ebbd61a30423f\"\n }], \n \"pseudoOuts\": [ \"76ec53bca8ce56593194af0ae9d13bae65aa204799f8598abf93117f05e3cbca\"]\n }\n}", + "weight": 2118 + }, + { + "blob_size": 1967, + "do_not_relay": false, + "double_spend_seen": false, + "fee": 15060000, + "id_hash": "23ba4986b2a7207d326793ecfbc63eece447c104d395c08867cc850254b055f1", + "kept_by_block": false, + "last_failed_height": 0, + "last_failed_id_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "last_relayed_time": 1613865211, + "max_used_block_height": 2301286, + "max_used_block_id_hash": "e268519d8c40a6bb1466233e36c7b8886ac7e12c6c86482b6e058f013a260590", + "receive_time": 1613865211, + "relayed": true, + "tx_blob": "02000202000bc7cfbd0aad874af2f461879625cea3478cd00e909a18b6b3148d0aae0ce0037d2c7eb8ca44eab409582cc15a23fab28441b89177cde8344dca79ae5f28e8f402000bdc91d90ccaaf0ff38c1a9db708f61eb4d302a89e01f46dcc24b13ffd247a1cad147be3baa06c785162d0fdbf1ddb540728de0ba6ba218e90c0ee756e990200026c935f5811e26e0660b06bc330fe4befb38fa279df96a11881c39b61e82f10af0002a89fe7d8ba9957522329b5eb2b7a883c6c6e5f7576824272021ebe71b835d0b62c01287b6b2e1e1563c07eeff74f30d643d64b1496a0f745166bdb68b2df9d1655590209018cac1c3f1b09a4f705a0989707a284543bb7ef42f7a0bd8546f29a79ad9c3025905fa967952818704d1ab4259ed1941d099d0275f565986010e6365f84183cd330853d19a381af5433569add060f2f0c34d6a1df79bbe6d53302d7485001cfc71f71bf487962458911499ebb09001c7171a003adb99c53a095a14f952dacfd66291da7b8fdcc9bdc86a5e51050bc4a6b2a0fa3ea36c3dddceb160aea1862d8a89e1cb1f3fdfe1a3c95e4bdda05cf2f78101883d8d3375b58e685803ceec5b007d9783e73fc2ebdb6d647c047b2886dae5470d607ab00b84cd304074dea2fb4534fd999c326777c0b5dc0c533b139212ad41a97243f5c1138e34493211e075b0bc07282b16612b6f67f0ae7f3dd9f2460368307a979dcdf9fc8cf98e3260107b0d6537f125cec64234c6803dd8cfa5889109c992fa823adaf027d0643e1dc28487f4d2ffba9f882d77a1ca5c3055d8d18d290f6e0ad0dba6a226739d9b5ac0b424b81d9d38c6bed8080edccbd99dbea6f8f1fd60ff0f3b892a0ff232c08e68c99005673edd5b10f9dc979a14dec0c9831ac49d6dee03d9968b42d9a47028135fe4379cc2448d814bea38d8a3bc2180e5f008006b003b1f84c046d0b4480788b21f5e2b1661e930fe1fb33a59d80448669932cc0a12d542b23c1c36732d5202f09d7dbb8dbbc5feabc03e6a49930a4a72864b0052428da284d65684f0097090e0711b9dcc24618348eebcb0219f1eaed35492ba96523df65f760ec5603306b4a2ddccff6922761b4261ec0dd605e936091a406f6d948e3b4ef0a73524f2de5b3528b8bdb3b3f448046031ab7caec103dcef6ded62ab8a78cc9efaa79b0d8736dc90a04b564e1a2e1f8bc6bb0a3ec11e857dba743287f9901e2e1415d10d60c3f23a1aa51f714159e996758f6242b1528a0774f235d67c438182971a98748313b44c54e8df65b31683f499b4052f0bcca6e4c4f294154cf78cb1e03f544e4a28e49c92356ea75ec92311890b45f7b4f829c46ba762f021d58d46a3abfbe762431cac0ba1eda9500139208d79241b414acdf674eaaae05b796113b04e451b897190bc72ef0cee133e4017c175399fe2b758e45fa25641d6c6a5ffa3df69502e1a9085b85cfb442dcf981f1fb243d917fd5da5e3d23babe76cba63c19360ecda4e502f982fbda7c6f9640533fe05419722d6e0ff0d33ec577f7ff5b2904da5bab920be2153585b49e1032b8d6d68e557b0cdde47ef05cfef3a6333a5aa7ec6b78050d99d28e79be92f1ab09f4542ff0c37c48332310927c40f3b73b7afdf571e19e03b498141f985f5e60d0204769cba0eb098822771ff6970c81b4c26da3a02b9b0806e06c455983e813f115ca2b85b9c84fde90797898457bc4c101a56c844d2e08c794eacf79645b88e4d4798888b703ba3d2fef971a338a4e10989921e093e403220dd486347960710cbc2fd938a7e75f9a8f68f5bfcd488b3dd14fe1f467750ba7dacb9f32ab353d261b02ec0607dcdf769aba13aba4eea0f57b7eac27f355001d0aa84f60a86e342b4e192725f8d827ed53e3470ff3d19aebf2b4d927334b0b42ac60e82000cf247dd90dcc9cf3b19e62fe8ce1afeb9061705dc3a1cfd1b10a97d16b69e39c8bf691ed7784d79b3a36f22205ee47d8817e5f6808be9da2dc0a94c1462c11d4066291d49361a65a236d82c512d66b960d2356a15e008c328d0605180c4820d1355398ecd27729e3ca14a2a21aed2837c09d327b5fac9da18ca3eca68f219cdb807cd577975252c3fcfa47290f38eeaf89b61f0d59ac4f4a650ac4d237296a1dd80310c4fc72e13ae075315dd0d4c7e8fb6ce01fb67d9504990b3eb2a83c292abf97b590ec7a838e6133eb088684ab23dc79e83c7b35f3066e061f0683ae670080e47c52352fa1361415e2ad0238562a3f3bb2860e99acca320d47d21e01085ed25d74b85fe8f96418e098aa766f05cd31e10bcaaaa083a14b0d14cbb447af86aecb70ecc95fc3d9960305aa67601332ee7eea663e4e58a76b0706c7eeff46acf992618e820c2c76e1696a6fabc17686dd4e73f5b49df5cedb0b807d8c1da21b506c2895054d7c0e85ad93e02b7be9d3fa2ef0350865d23b2b07f525c7625ffa62e11a808f9b8abc20373ed739c8373d6154bb1d38ed5f046f0bf9cdea52ee2410a04822a03c130658c130f6fea02e8d066f7d07d671dd311801b9377596b828f1dc1f4f01883fa438ebf8a6ccd9d4273f5604538781ecd5c007f67c8290d1d58c344e0389a5f0fb188b2fb7ab6886447dad17bc680a2209ee0ce3daf19537871a697f1b2affebd698890598d282a9be3a017c5b55d783e16bc26df6b7dc091ec22e30c8e21fa9a3aefcfd5a1888dc7170f00563c4d4e38d6263df69b12ff2fb4f3ac148d4328fec73d96164cd217909876c6f94849166be573c", + "tx_json": "{\n \"version\": 2, \n \"unlock_time\": 0, \n \"vin\": [ {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 21981127, 1213357, 1604210, 609031, 1167822, 239628, 396560, 334262, 1293, 1582, 480\n ], \n \"k_image\": \"7d2c7eb8ca44eab409582cc15a23fab28441b89177cde8344dca79ae5f28e8f4\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 26626268, 251850, 427635, 138141, 3958, 43444, 20264, 14068, 4684, 8113, 4733\n ], \n \"k_image\": \"7a1cad147be3baa06c785162d0fdbf1ddb540728de0ba6ba218e90c0ee756e99\"\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 0, \n \"target\": {\n \"key\": \"6c935f5811e26e0660b06bc330fe4befb38fa279df96a11881c39b61e82f10af\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"a89fe7d8ba9957522329b5eb2b7a883c6c6e5f7576824272021ebe71b835d0b6\"\n }\n }\n ], \n \"extra\": [ 1, 40, 123, 107, 46, 30, 21, 99, 192, 126, 239, 247, 79, 48, 214, 67, 214, 75, 20, 150, 160, 247, 69, 22, 107, 219, 104, 178, 223, 157, 22, 85, 89, 2, 9, 1, 140, 172, 28, 63, 27, 9, 164, 247\n ], \n \"rct_signatures\": {\n \"type\": 5, \n \"txnFee\": 15060000, \n \"ecdhInfo\": [ {\n \"amount\": \"a284543bb7ef42f7\"\n }, {\n \"amount\": \"a0bd8546f29a79ad\"\n }], \n \"outPk\": [ \"9c3025905fa967952818704d1ab4259ed1941d099d0275f565986010e6365f84\", \"183cd330853d19a381af5433569add060f2f0c34d6a1df79bbe6d53302d74850\"]\n }, \n \"rctsig_prunable\": {\n \"nbp\": 1, \n \"bp\": [ {\n \"A\": \"cfc71f71bf487962458911499ebb09001c7171a003adb99c53a095a14f952dac\", \n \"S\": \"fd66291da7b8fdcc9bdc86a5e51050bc4a6b2a0fa3ea36c3dddceb160aea1862\", \n \"T1\": \"d8a89e1cb1f3fdfe1a3c95e4bdda05cf2f78101883d8d3375b58e685803ceec5\", \n \"T2\": \"b007d9783e73fc2ebdb6d647c047b2886dae5470d607ab00b84cd304074dea2f\", \n \"taux\": \"b4534fd999c326777c0b5dc0c533b139212ad41a97243f5c1138e34493211e07\", \n \"mu\": \"5b0bc07282b16612b6f67f0ae7f3dd9f2460368307a979dcdf9fc8cf98e32601\", \n \"L\": [ \"b0d6537f125cec64234c6803dd8cfa5889109c992fa823adaf027d0643e1dc28\", \"487f4d2ffba9f882d77a1ca5c3055d8d18d290f6e0ad0dba6a226739d9b5ac0b\", \"424b81d9d38c6bed8080edccbd99dbea6f8f1fd60ff0f3b892a0ff232c08e68c\", \"99005673edd5b10f9dc979a14dec0c9831ac49d6dee03d9968b42d9a47028135\", \"fe4379cc2448d814bea38d8a3bc2180e5f008006b003b1f84c046d0b4480788b\", \"21f5e2b1661e930fe1fb33a59d80448669932cc0a12d542b23c1c36732d5202f\", \"09d7dbb8dbbc5feabc03e6a49930a4a72864b0052428da284d65684f0097090e\"\n ], \n \"R\": [ \"11b9dcc24618348eebcb0219f1eaed35492ba96523df65f760ec5603306b4a2d\", \"dccff6922761b4261ec0dd605e936091a406f6d948e3b4ef0a73524f2de5b352\", \"8b8bdb3b3f448046031ab7caec103dcef6ded62ab8a78cc9efaa79b0d8736dc9\", \"0a04b564e1a2e1f8bc6bb0a3ec11e857dba743287f9901e2e1415d10d60c3f23\", \"a1aa51f714159e996758f6242b1528a0774f235d67c438182971a98748313b44\", \"c54e8df65b31683f499b4052f0bcca6e4c4f294154cf78cb1e03f544e4a28e49\", \"c92356ea75ec92311890b45f7b4f829c46ba762f021d58d46a3abfbe762431ca\"\n ], \n \"a\": \"c0ba1eda9500139208d79241b414acdf674eaaae05b796113b04e451b897190b\", \n \"b\": \"c72ef0cee133e4017c175399fe2b758e45fa25641d6c6a5ffa3df69502e1a908\", \n \"t\": \"5b85cfb442dcf981f1fb243d917fd5da5e3d23babe76cba63c19360ecda4e502\"\n }\n ], \n \"CLSAGs\": [ {\n \"s\": [ \"f982fbda7c6f9640533fe05419722d6e0ff0d33ec577f7ff5b2904da5bab920b\", \"e2153585b49e1032b8d6d68e557b0cdde47ef05cfef3a6333a5aa7ec6b78050d\", \"99d28e79be92f1ab09f4542ff0c37c48332310927c40f3b73b7afdf571e19e03\", \"b498141f985f5e60d0204769cba0eb098822771ff6970c81b4c26da3a02b9b08\", \"06e06c455983e813f115ca2b85b9c84fde90797898457bc4c101a56c844d2e08\", \"c794eacf79645b88e4d4798888b703ba3d2fef971a338a4e10989921e093e403\", \"220dd486347960710cbc2fd938a7e75f9a8f68f5bfcd488b3dd14fe1f467750b\", \"a7dacb9f32ab353d261b02ec0607dcdf769aba13aba4eea0f57b7eac27f35500\", \"1d0aa84f60a86e342b4e192725f8d827ed53e3470ff3d19aebf2b4d927334b0b\", \"42ac60e82000cf247dd90dcc9cf3b19e62fe8ce1afeb9061705dc3a1cfd1b10a\", \"97d16b69e39c8bf691ed7784d79b3a36f22205ee47d8817e5f6808be9da2dc0a\"], \n \"c1\": \"94c1462c11d4066291d49361a65a236d82c512d66b960d2356a15e008c328d06\", \n \"D\": \"05180c4820d1355398ecd27729e3ca14a2a21aed2837c09d327b5fac9da18ca3\"\n }, {\n \"s\": [ \"eca68f219cdb807cd577975252c3fcfa47290f38eeaf89b61f0d59ac4f4a650a\", \"c4d237296a1dd80310c4fc72e13ae075315dd0d4c7e8fb6ce01fb67d9504990b\", \"3eb2a83c292abf97b590ec7a838e6133eb088684ab23dc79e83c7b35f3066e06\", \"1f0683ae670080e47c52352fa1361415e2ad0238562a3f3bb2860e99acca320d\", \"47d21e01085ed25d74b85fe8f96418e098aa766f05cd31e10bcaaaa083a14b0d\", \"14cbb447af86aecb70ecc95fc3d9960305aa67601332ee7eea663e4e58a76b07\", \"06c7eeff46acf992618e820c2c76e1696a6fabc17686dd4e73f5b49df5cedb0b\", \"807d8c1da21b506c2895054d7c0e85ad93e02b7be9d3fa2ef0350865d23b2b07\", \"f525c7625ffa62e11a808f9b8abc20373ed739c8373d6154bb1d38ed5f046f0b\", \"f9cdea52ee2410a04822a03c130658c130f6fea02e8d066f7d07d671dd311801\", \"b9377596b828f1dc1f4f01883fa438ebf8a6ccd9d4273f5604538781ecd5c007\"], \n \"c1\": \"f67c8290d1d58c344e0389a5f0fb188b2fb7ab6886447dad17bc680a2209ee0c\", \n \"D\": \"e3daf19537871a697f1b2affebd698890598d282a9be3a017c5b55d783e16bc2\"\n }], \n \"pseudoOuts\": [ \"6df6b7dc091ec22e30c8e21fa9a3aefcfd5a1888dc7170f00563c4d4e38d6263\", \"df69b12ff2fb4f3ac148d4328fec73d96164cd217909876c6f94849166be573c\"]\n }\n}", + "weight": 1967 + } + ], + "untrusted": false +} diff --git a/tests/data/test_jsonrpcdaemon/test_get_transaction_pool_stats.json b/tests/data/test_jsonrpcdaemon/test_get_transaction_pool_stats.json new file mode 100644 index 0000000..9b3e076 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_transaction_pool_stats.json @@ -0,0 +1,62 @@ +{ + "credits": 0, + "pool_stats": { + "bytes_max": 17922, + "bytes_med": 1967, + "bytes_min": 1452, + "bytes_total": 75438, + "fee_total": 586900000, + "histo": [ + { + "bytes": 3419, + "txs": 2 + }, + { + "bytes": 3423, + "txs": 2 + }, + { + "bytes": 1455, + "txs": 1 + }, + { + "bytes": 14851, + "txs": 1 + }, + { + "bytes": 0, + "txs": 0 + }, + { + "bytes": 0, + "txs": 0 + }, + { + "bytes": 22776, + "txs": 5 + }, + { + "bytes": 0, + "txs": 0 + }, + { + "bytes": 0, + "txs": 0 + }, + { + "bytes": 29514, + "txs": 6 + } + ], + "histo_98pc": 0, + "num_10m": 0, + "num_double_spends": 0, + "num_failing": 0, + "num_not_relayed": 0, + "oldest": 1613865632, + "txs_total": 17 + }, + "status": "OK", + "top_hash": "", + "untrusted": false +} diff --git a/tests/data/test_jsonrpcdaemon/test_get_transactions.json b/tests/data/test_jsonrpcdaemon/test_get_transactions.json new file mode 100644 index 0000000..b57a0f7 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_transactions.json @@ -0,0 +1,44 @@ +{ + "credits": 0, + "status": "OK", + "top_hash": "", + "txs": [ + { + "as_hex": "02000102000bbdef820aa8e5f901a3cc79a337b5d601aadb01af55fb44d90b8f0c850bda856b62f04c77bf46f46954b8caa82097b9386b0a501277262c68601ed917ac020002d4871f51832c1951212b3d87395a8df5594e927588221e665a018c098968cc8b000262d52033f1a3c921f1db56eca9b5dd50f36ecf76e22e67cc694fb7c214a609ef2c0164d167ad3d6f762414567f5812585fe7f48d3400cd51d999b020899658526567020901795c32b0b5ba9ce30580cfe81a73e3d349bd53dfa8fa66a93993f6921ff0457386671f45ef33760947513b71ec6398ff0e2ebb5edde433e452b9035112714a290806bedd15cd5293ea33be5bec57e983042840d75f66b7ca31c599f4ca0179a0ea918ad50e7e2d10784dffb56eeb39d4c92236c4904c1ecebd5b90ad6b797f9bace3566394d8a2558232b8f8262317dcc3da8038bc46119eb891371d71f940e15801c6ddf29ddf034c0e277ce87d4343cb821fece9c74b1e04ecec914c34c5b7bb518042b1ca36de80e451aca0c44d93298d4a4ec31a2a1aa8b5b437a6aab043ed66a681ba1f5f7773fa140176ddcdb2a0e7c9ae3163094671bf348d5504bc2b168891c1a599ce00acfe3a430c9c58370fe53b96a4d64155b03b5f30ee0307f95bde576a409f86100e2bcfe81d19d2407134310dce6ff953f668e810d48f12f3fd61b6c0f00819a18b75ae762b03dd97ba40ffc5a791318bf019f989e85f09385b4b9b74c8500321fb918e13f3bbd0a2fdf5749318f152e2a0f994f11b848e0157e0b3c44afab6653ef0815ad1e0d76ba1141d5abb61f8b078a57413d3374b3aa78fbea4de0604d470a12a21da6fea3c765e9ddec5d50b8f76f079f9c61c17b25822612418444181adf9e334a695aaabec779edf8842dbdbae99461c608dc0096113d8da040c3b5bd94dc796aa1daaa740839fd0f4363fa60b8c3e84fddc43075ae595d323dc7cff3db06df16d2eb08bdceca623de357e6cfd59deedcba29a203bbbbaadcc18bdd1ce03ba2d1bd16bc5e666b8006b473f339841199c5c183c5b78b420bd896cd50b2aa7b9f9fcba3615abe0f734c830320a8e9830976bbcae9a8e77676c4a3d944a3dca84fed10d242b12da93e9e37be272a933b45b23b8f4c20c8dc6bc3f0d56878639b7900f505e6060806939e9f7f417fd10965fc564c7f00893b920b6c32ff2e546dd40ec4414a110b052e97d3d74255190c0032f0826f87f155779e21e9b5b6a9300d6a2bde804ec0e107cde3f600ab5572cdda09645147cbbfcbf4c3681cb6965770ebb2b298151c354e45aab0e1ab77d414a30362a0091230d667e4ac44f5448cdf319b170c92f20d8c44b620f3b4517328bf4ece003dba9db9a71d0531ddd329adbcc4f6c408caeaebabe477bc1084f1da40cc4ca03e7ecc5f173167accf433667b9d3b61fdfd8cfe3498951e8912d6ef9a79401e0913b53dc6a14a8e117d053f82020e808b45e15b85d7102d1ccc87739c22124b058b2ab71e67f71598bf2b43813fb408df5ecafb1ca6c9761256958b017d7ab00d4a0a3fdb9ed61908d6559b853d254d86bd50fd85b349a8a9c5386850e4b9ad0984eed4614a896488fcb1b63cf795a56c12425dfbfe19ee09ac4375e6eb220e0ff2254d80d1f9fb865d5b176003779f5064ae0949aee694ac89df0fee4d1f3104d8bf76b06773b27c6ca86e69fb94146ca082a76af02d3e76c6e635fc3bb524084f89e8428a61207a4660e9c666e3e74762a62330d56753ad8fa7cf1267f5490c3ff7596b99bdda95e1bd409107ec45e09a0650f0a8c32dfddfbca2000602c705427b0fb904ef582e435fef3de34b6a3a07a67031fea098a28695cce2908f230e80cadb40036b6da75aef391ce13231674edb807af5e04f686027cae475274007b85ff58b13527f6b1125438e734ac8a1206255a332824004a1a2de925584140398089f34018fce44f334f3b283e58900ffa58f7c2a63641f7d4d946fb44e2b18f4ce36baf1b06c026e4055dadb7b06a239a003ba571528a0f16f0f1dd4cbd730", + "as_json": "{\n \"version\": 2, \n \"unlock_time\": 0, \n \"vin\": [ {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 21018557, 4092584, 1992227, 7075, 27445, 28074, 10927, 8827, 1497, 1551, 1413\n ], \n \"k_image\": \"da856b62f04c77bf46f46954b8caa82097b9386b0a501277262c68601ed917ac\"\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 0, \n \"target\": {\n \"key\": \"d4871f51832c1951212b3d87395a8df5594e927588221e665a018c098968cc8b\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"62d52033f1a3c921f1db56eca9b5dd50f36ecf76e22e67cc694fb7c214a609ef\"\n }\n }\n ], \n \"extra\": [ 1, 100, 209, 103, 173, 61, 111, 118, 36, 20, 86, 127, 88, 18, 88, 95, 231, 244, 141, 52, 0, 205, 81, 217, 153, 176, 32, 137, 150, 88, 82, 101, 103, 2, 9, 1, 121, 92, 50, 176, 181, 186, 156, 227\n ], \n \"rct_signatures\": {\n \"type\": 5, \n \"txnFee\": 56240000, \n \"ecdhInfo\": [ {\n \"amount\": \"73e3d349bd53dfa8\"\n }, {\n \"amount\": \"fa66a93993f6921f\"\n }], \n \"outPk\": [ \"f0457386671f45ef33760947513b71ec6398ff0e2ebb5edde433e452b9035112\", \"714a290806bedd15cd5293ea33be5bec57e983042840d75f66b7ca31c599f4ca\"]\n }, \n \"rctsig_prunable\": {\n \"nbp\": 1, \n \"bp\": [ {\n \"A\": \"79a0ea918ad50e7e2d10784dffb56eeb39d4c92236c4904c1ecebd5b90ad6b79\", \n \"S\": \"7f9bace3566394d8a2558232b8f8262317dcc3da8038bc46119eb891371d71f9\", \n \"T1\": \"40e15801c6ddf29ddf034c0e277ce87d4343cb821fece9c74b1e04ecec914c34\", \n \"T2\": \"c5b7bb518042b1ca36de80e451aca0c44d93298d4a4ec31a2a1aa8b5b437a6aa\", \n \"taux\": \"b043ed66a681ba1f5f7773fa140176ddcdb2a0e7c9ae3163094671bf348d5504\", \n \"mu\": \"bc2b168891c1a599ce00acfe3a430c9c58370fe53b96a4d64155b03b5f30ee03\", \n \"L\": [ \"f95bde576a409f86100e2bcfe81d19d2407134310dce6ff953f668e810d48f12\", \"f3fd61b6c0f00819a18b75ae762b03dd97ba40ffc5a791318bf019f989e85f09\", \"385b4b9b74c8500321fb918e13f3bbd0a2fdf5749318f152e2a0f994f11b848e\", \"0157e0b3c44afab6653ef0815ad1e0d76ba1141d5abb61f8b078a57413d3374b\", \"3aa78fbea4de0604d470a12a21da6fea3c765e9ddec5d50b8f76f079f9c61c17\", \"b25822612418444181adf9e334a695aaabec779edf8842dbdbae99461c608dc0\", \"096113d8da040c3b5bd94dc796aa1daaa740839fd0f4363fa60b8c3e84fddc43\"\n ], \n \"R\": [ \"5ae595d323dc7cff3db06df16d2eb08bdceca623de357e6cfd59deedcba29a20\", \"3bbbbaadcc18bdd1ce03ba2d1bd16bc5e666b8006b473f339841199c5c183c5b\", \"78b420bd896cd50b2aa7b9f9fcba3615abe0f734c830320a8e9830976bbcae9a\", \"8e77676c4a3d944a3dca84fed10d242b12da93e9e37be272a933b45b23b8f4c2\", \"0c8dc6bc3f0d56878639b7900f505e6060806939e9f7f417fd10965fc564c7f0\", \"0893b920b6c32ff2e546dd40ec4414a110b052e97d3d74255190c0032f0826f8\", \"7f155779e21e9b5b6a9300d6a2bde804ec0e107cde3f600ab5572cdda0964514\"\n ], \n \"a\": \"7cbbfcbf4c3681cb6965770ebb2b298151c354e45aab0e1ab77d414a30362a00\", \n \"b\": \"91230d667e4ac44f5448cdf319b170c92f20d8c44b620f3b4517328bf4ece003\", \n \"t\": \"dba9db9a71d0531ddd329adbcc4f6c408caeaebabe477bc1084f1da40cc4ca03\"\n }\n ], \n \"CLSAGs\": [ {\n \"s\": [ \"e7ecc5f173167accf433667b9d3b61fdfd8cfe3498951e8912d6ef9a79401e09\", \"13b53dc6a14a8e117d053f82020e808b45e15b85d7102d1ccc87739c22124b05\", \"8b2ab71e67f71598bf2b43813fb408df5ecafb1ca6c9761256958b017d7ab00d\", \"4a0a3fdb9ed61908d6559b853d254d86bd50fd85b349a8a9c5386850e4b9ad09\", \"84eed4614a896488fcb1b63cf795a56c12425dfbfe19ee09ac4375e6eb220e0f\", \"f2254d80d1f9fb865d5b176003779f5064ae0949aee694ac89df0fee4d1f3104\", \"d8bf76b06773b27c6ca86e69fb94146ca082a76af02d3e76c6e635fc3bb52408\", \"4f89e8428a61207a4660e9c666e3e74762a62330d56753ad8fa7cf1267f5490c\", \"3ff7596b99bdda95e1bd409107ec45e09a0650f0a8c32dfddfbca2000602c705\", \"427b0fb904ef582e435fef3de34b6a3a07a67031fea098a28695cce2908f230e\", \"80cadb40036b6da75aef391ce13231674edb807af5e04f686027cae475274007\"], \n \"c1\": \"b85ff58b13527f6b1125438e734ac8a1206255a332824004a1a2de9255841403\", \n \"D\": \"98089f34018fce44f334f3b283e58900ffa58f7c2a63641f7d4d946fb44e2b18\"\n }], \n \"pseudoOuts\": [ \"f4ce36baf1b06c026e4055dadb7b06a239a003ba571528a0f16f0f1dd4cbd730\"]\n }\n}", + "block_height": 2295433, + "block_timestamp": 1613160690, + "double_spend_seen": false, + "in_pool": false, + "output_indices": [ + 27191291, + 27191292 + ], + "prunable_as_hex": "", + "prunable_hash": "b2cc0a061f56a6a0937d9ef71937a4aaa351e2196a6469f1ea8f3e25cb50201b", + "pruned_as_hex": "", + "tx_hash": "c6802ca1805784c7330e71521a318c302f88625b0eab80740cfab24af7b0cb93" + }, + { + "as_hex": "02000b02000bd2c8c50caa890d8cba0dd3c714ad8204c1ac02a002b305ff29a00eb00eea3dca7b033d26dbfa8929416a521d567a26591841e679107ce71b663e16690202000bd4a68401e2ae9f06dbc88403e1c1ff01b5f617ebf13afd22e430b411d409921adcf03a6509e651a29bebc34041caf616455cc292fa2bb643f9b08092ec59453b02000bee878f09b4e49602d8bc3d91f275fdf908a3c408d5be04c09a0addf6019c24c503ce1d3efc8a9b34487b372bb6912b4e2c59383d33e0d43189137a27f01f493e9a02000b85e0fc0bbce156c9d0149aee04e19503c6ca0198a806a53881ee01a09301e70eae51a3fbeb5e373200caa7b6cbb4e15d816c2da4d118301836f2209aaabcd4a502000badc7f90b85e02fc28014fcbe33acd50591ef039953c219af25ed127a914de852cc11000c95d5d3e65ab209b4e132f3e065e75a3704b1c7c3208df99a02000b83b6e90b80ab8601e9f502f7e80294b802bda3038809b603a205b308f21b892dac2160c42455b8fbf47e2828900e26f9b471b80c995846d520ed956410df02000bb6d4990cb3ff25d1f72492a10cf0e601aaa5028a1ac19004d501ac8802f32276b78ab2e228f862f25266e2c52e2ece1e2794010904f6dd5e988590a4fee18d02000be2ad840b8e9aa001f9b243eb8008cdd2028aee03e3ba03f42fea48e249d8176dd6075ac4b83ae6fb7b69c1887c65ea09d7cb85709d143a9e308a6221d33cbd02000b85aa4bb1ec9001cb9ce904a7e5f505fac737d5a604c3ee02efb801f4058f02f4191f81508673bacf74c6aef781066c10a465a7cfb9deb2f846492f243b8e8e967302000bf58cfd0be2d248c2e21c83bd0dba93049bd401ac2bd9ac02b7e701c27e962b13b9e44d6d26c65b26dee7fe6b2eeb00442031730f707007a64b314f05c5e06b02000bfafcba0bc0ff830184da0db6f825ddcf04feb402984cfb8201af19f904b3100c7e0535b7fd3e962d3977f595603a058ad82e92781f376c2ba198c6fc20e4910200029730581f692a0728b8efdfb3c7ae3abdfb1b0c958c4a7982df4b25fd097501aa000297f9c20373662034aab669e7578127dc4de22b4962d3f2af15c0608aa38ecf472c011d9f47f9bfaabf563f5779f24424401694587e3f29f44ed7f23d961c26700a27020901d26187582b72f26305a0baac182dced5c109c9b9b208ac9c3103fbbe9501d77aef7a011842b5b0728e4cda054ef887463f866b736bbdc8c3b3e0127515169adb51ab9ef98c2a69e5128c0de15eff9d18aff2a07975270e3c82bcbf243b01644b284605576983755f83dd835cd1ed3b814b6e97e8e086ca99514d38f78037a914bff3c42f6ea5734ebf12890c733484eae20a00c3682720dd0610a638799069384240bd07ee42bc513ba13a2acbcdffc7f8b66250b01d4700d684c9e4873ea76636030fbb232ef24d9c263db665c920746efa38c8596a05b3e018a93591d35756c5743b760df7793acaadb4e5837bbc2772a3575a6416622c87d41aca1000f9197932b1d0f7b3cc1f944d4f20c0da483caf9884101b94d84521b75356e10b072e0aacf2c40ca937115b2d74ab0525a020b96e35d4042fc2b08e13b34c945aa0ebdc39a041e0674fb4fa41b4d4e92e1516c304251d7c1ac1fca2c4c4e572b70a5e01def171237a771b3082a567bf3b3f71384b88aa20b9cd8560e712c9222b14d46c11995f5495d55101e5904536d088ae71da4092fb15432d132e1c217b40975354df569b18ef9f505c5ef1ebcc405f9ac117874be42b3378483e1c1cc53727edf17c870c06f0ae6e2e43e2a9a4b219154ac62b8d73c7ac9ef61a526ce83c355a2cc9ea831d33d2c3975ff6fda8f8fb75f3f4ff822df550a2915a139abbe257072867babc7a1c77080992dbdda8b44a0949318d787c66e3e1e8cf7ebaf86a2f534b899a6b5e38201aa3d403b3c7eb785b60190feb66573d5e33f2a278e6cbd73bc27262a377da5e5b548dbd65057070450d89c77a68941b94525f12d20eb69af428e61e2995d1e6b79056d0cf7e7320252d1aa1f6b6b80e4c441607927ecc4173232740cfff9b8c5adc75a7743efb801bdf48c73716ccde7a565318ada74138340e8760b93a0bb43c6d4cd9e3acb6c9272c13f8ca3d00fbb46074d33337c3f2db07d7e8ce6cb2a2aae7de846e6050a30492aabf161f290ded39d75cfe34496a5130b1f3c4e9b461b1fa6840ea605f9de5de69614c0020522eebf94156e6062b0c7891c9bd44f581d5e0806b6339e837c38742521068b0e2bee2b215183716e307ee4d65abde8d082b2ec34a6563906c9d6646e22786880abe357503d860bdc40a31f143583299e461b6f755bc7e306dbc1b40d28163b571cda0e6a52ee23d0f050ad05279dfb8d1a2aa068f352002f63a70b128fb7c9e37ab6d7d67d9d7d9250d90e8da0f36f8a1c1ad946afc4d3a115caba0a5d998da5f253f1274a5dd694f09c7addf0a2cda0c18af0fd4491722ae813bbabad13275358e70d840b66a8b690002dff6f7cb6a1065cd467961da306e822d42b3bc70837fbc62b7b61fa9bfa30500299331a64a62983bbce0fdf983e742a212e5a5ace13106dbba0cccfa9e950230c12c1613f4e2cb598053c920940378fa384992b502d8c12fee1340caf71d02cfe9a8ab5adb94fdf169a324d10fea117fd8256545bce8bbe9ba984a3339270d7b5d2584b1c76d8152b68a7e45081256a7d0dc2e04c55466f24c224e89294b0d22564af463256600e9bd82c3a32983feb4978826f71e996273dc8aa9d99fa200d6e54569c79a1b763b55dc32ff600cf497c3935598abf4a565c5df8b2e13cd0e13900ae7aa9a24563bdfc96b5332ea0aefda86ea53d72d2c41c58090a6f9450a32cbb432d0cffd6f7840dac7fb64a0bbe26b01f213ed5b82feb50eb777eae80989d8008cdce7285643846c8ab8501da53eefbc9de813e43283dbe32936e44c030e8ef773f0340e4f3abd4b708605d187a28840386eb35f39d20bee3fe03bc308cc93bd203534f5f2fa89499e55ab47f8940d12cb49bff092a279b3bff8bf7e0f76785ef1033066d4ca54b3436e3910d8b609aad897f86261f6a832d67362760e6613196975951a41d8ccbbb19568a52efaf233754f62d107c01e9056533fd40857c302a803aa1a02067140b5c806ffff28184d3efb0823a7ef823234e89b25084fd57eb40ecb64de3a0f305a0ead319b4397b50bc2ca8137b6e870b9e9a2f10fe3febc26aee742f3439c3e2f3194cd6ff6838079b300d62a0c3b8b5d8fce0f0c7e7917da06361491eb3aa88ea6faf5ba7e9cd510c7f5675b02b7f41fd9e4c206de741282a49e463fdc5ee95afa5855a64781066a9b1dab3f803751acc81b580a5e0137fd05f2df9f4558866629c087c9d404bb7bf8eef73d5af066b464510401fa8da5250872e29e9c5d3ce94cc35d61e6adc6c7935fcb7a56dadc37b051b608d543211a5472d11d0d3da9fa23705b39b8ecf3377713240abaa420041481fd81aa234723778272c071fb470bc6f973a8d4be4d4fc790bed52684e150e8ac56052ff287c6698590fa43dcb46d28cd687fc31de3a5564ae2b73181b9bcae75180c859ca88673e1a4000aac1088065fa98d16ff70f63b2de7c60a09feaa284d26095ac2f4ac0625076b12bd89f29c913da88dd9777e44ca2b03b1c2b5a30fedc00876b21e3f854b025b2afdb6202fdcbcf1122183ec35f26307b1c584f4f1b0540bab280fa6291c367d55cc76126ccf698b3122e3ee31d9ed3da1df4793d40abf0923343d95061e2d2b656c2291cd519c4c2fbd18e968704b44a7014c3b74e7800f505f0e803a23bd5f3a50f99027ba0469b9762bc87fb9d626692c9ec923f7b40814707877bd770f43a365707ca6c6ce8d01ea634450686aa61a7d4180f806ec0a3ad71336f21d86c322502b2f8ec85eea2187d33d8d23b64cd9748d05f10d8a0c3f419feda8c536691636e8b0f8f21231a52ada8505c4f609b6e798ebc350650b22aebda5684b1e3941ec35d4706de5c9b52fd30848bd38b39aca2d50ae287f02f2bf0825603a4793fe2e200c21cd74ffa4374cf8039eac6ffaf6da84dc744aac3a94062bbd820939ed53dc501a866bcdae62d1fa6f25c933933d97e86fc28f07281d41af4cf29dad5cb4053b9a69528daea27fdbfa3e6651c788ce248e980801e95eaefb4076b7f2467ae8bf9a6ffddd9dbcec76d338124b14b97f7e738c7506964d8cf3f84e110ee92d75f8def055ee6657266c2a27c5d7c4559bd0f6e5dc069a40f9523c154574a407d56b404fa6aa6696c5d7d33151e1575bcc5feff3c60fa63a046e58d0326b6114a8303902a0ccc5fabba8353ea252971cfa3ad8a22a0ea99203c5b3992cfd42a25bf0c49b9dad157049464912c310dd8c3c28e919de0118479cd2a60cbc635485e6b8676bd5da91c2e418603b9de7e32def748a52b60d39a228535a13b141115fa65ba1d959e4488aff80a76540237836389f61262f03109ed54940ad67ced0a45e834a2b4427c3e2622b4c5bba17c5b2137d0bfe8001000783522c6e9d43258cca7f5990c0cb2288c9b3a76a7c19eb06c57cf35a680c8fca20b1298e1f4fd6a427d5c7cbb6a58f84dbb409334f4d7a96d35f6d3db00f04d109faae134665f47b2e8b4369a189fda46088171fd4b8dea527aa7e2035d4dc067dc6eeac4ac84f0058a7e72307bdcf7f3e32671338388d553ba27c8abb0ebd8071bdd3874712c8c45eb449db51292a19d35815095e76495af4ceb71e9b058c357afc02bd42b4e38e7d4a040cd9eb78dd8b83a8c1e6e7116c6c1a8d2bd508d01f3ec72e04ace4da058140ed045b2fa1cc504aa5a5ba47795edd97481ace0242e4dc6f59b7f0bef9b9dd2b4b3a4b39d61b5e6f719bbd73889e4fb6d07d3708b7ec13af76a556e12d8dd51ab5687d8d45a28509515422ef8e9a5da5dc3b1409d775e493a3e2461e72181cd6b3d557de2a912c297c4ffc1124493815cb59d603c51481a2446b6ea12ba7ab8d0d51d534721ada976bccac4a157ee877eeea570747815398cb1cfdfe854ab8596945095027cea8a6cca0d463328adcebfae57f01cc7f5f371493ef1cc2412fb8876cc0ac0086608640f16b664a4da0023409a801ba5217d6c67a4717e1f0105ba4b0654aa820518a9d9f98cacf119d12ff651f0a43cdb914f638df52e0b12bcd4ad4457ca3f88d323f9301a06d3f3f5601ec0a0c4556502357b6a444e7508bdaa33a57d941e87b32110d421be185acfd6f4e739e716389d2c734408df7f4f46c6c48ce70b2c2f7deaa8f8d8a0df4035fd72767008ad80a9b5b00c3eb629c3aca2cd5d85624c102738e8d00642d98a83ee434d00d82ba38ab7190a7ad44d17781e788552983412d564dded006a810a18cd15a610c1ddaef5a464b5ccde5a4d1e1d78a9c875d09f04984508df99a1df0fa07526505e2cc9905145251f9598d7689bffbe90d9812e837b123e10226f33d7b2433ae0fd16d3c04260b2284ce6fb40373868d68863513d886918515d0f224011b81e60341ed52112a816c8edcc63d27a813a785905b87c17906667ac9d9178291e8a209262983b736381e03f6119bab87f1f570de35466f436e00555e03d89ca415ab09afcca572586fee9afc04844d428b900186e07f5991237df4c05501dea9c3b30916ce0eee462160bf5305fdbd8d40926bea3f9bc5bfe6bbb9ff376ccb3ead4c04caea03fda281589cbd3c1afa3349c8e9a29bbff069ebcec21cf36455a5f7c101ac0d3c819dcf90aafea5b0bba2b781bb9c4525f6167696ab92fa9a4f5a9bd20ff2852659182d588942aa00b117fe48a092cf75c3d4b0943566ea0d4c3c05f776ef72ff0879d93bc88f819d3d4cfb473339492f6c079fd6d575c6ffcd3f11860b5198c1ee11bcf806c4e4ea4cc766ae7f7de3ab8d22202465e9f791ff22ac7504d3b7c272d9c1ea6418bfcf643a33cdc6d9851c023e2d070c910797fc744a890c216d85bbdaa09f6626b0cc0dfb85ee5cd1bd52c011f489f05595282c40cb3d072efa54daec88e67f5ca80b0615fc32e0f9a35c946a764000d7f4d589395125072414fcb89f03cbef5ba274de087aa99cbbe0c29f4ba41b53f364ed55ad91b00dc9f14bce4b4201a6c081348f679267a50a885553fd9182c6db59d84281ae0a015bea38d62f63ae43a7830a85c0e5cbd85c4a9c230e58aa9fe16e7d6e5b2a100e1b0d5f3c319bc93a24165f5e7366b03589011b5244837a24e44f07da11bd3205c0bb3084012b449fb1ea4792812c8d46ecce8de53817bc9b408173681397860edf6c2075906e656780969da5630cb7ec1bf8e88cc5fc66c0e6281cb8becf760f2a54a60aa2c2d0be087a404bb6416f918bd9135d935830c04848257ed2de70096ecf597dfb2b94c0df996785e2c7e3f9ad6f609542411b82a5ec16b7ee1c9d7c53aa36886a8e9baa0744ea79a30992b2fb448798cc5549228c29380e26594a05f20b086813e981c4492214122cc3d83aaa682137b3b39b0c233d4a8e999b630f7580147fd23f35bac08cd30121f6232ec736a2b9dfabf292343b1be5725d420d66e48167c139d3ddbcd25503edd2197080aaef96118165334079d0ba86c44604bd6a8c95a040118db3ae851a4a2872f23332dea052582d2f36d820f15f422606842ed02d6ccd460a4bd11ca5fae623be42c361e7ca0d5fc1921848da1b153608344dcecef75c1c147f435cdfd00590be7ed26a6d60de075f1abc049eb06c85020595847106ff10a53e4ebdb2ac134914e10fc9e60443233b7f3e356be61e640f8bf6e363ed68e56903ff6c00f9e208c6644ee5385580a349555fca8aa9135505487ea93647be2a0a6e5bb439eb8619ee65ced7ea86add8dc733b530e8839090e3a43c4dcc439e3d083cdd5a823464583f59275e0003339bd4a6c6c05b319310c9aec6cf03d696eabd293fdb1fe3c790fd91efecd349df068a3aa06a4b7ed3e00e7074c04582d8963af509f2ca34344d13f1099650122128f7e0270fe5db0abb04511b1d99c2ed9513b25bb659733f84be4468265fea021e07627dee2f49eef023f66d45bea98fc0448eb68fcbf3bd41bd0daa0302ef64b81793dce003d2dfd079d0de97767eb4427e403d8f9d305796327e5c6cb9559de627ac55fad2c848c0013eefdab6b1ea9ae118410b381216dbba51865cd24d97967f2c76e43225216092f542fe9c096569fbe430141a135206b77f2a59392559c57f1d82d1acb4e490b6a0f4f620dfbc30c3b90bee41b21369172e90f20a024c4c45f474ad8d58ed2015bb6023bc398e476e236d0785132d63858324e0bbe541fdfdb9353546c5fe204b4ea5390de28f17a0c98840fa6fb0964ceac1b9f4a7fb5875c57909c0f11700b2baea279c5d3a6b06dbc14d52adc63ca391507cf92af5af44e3c3e54a3b29d0b299fd884f98bf512cc25436f87f76901e74b59ba31072b94d5b68ce931f5b8048ce02436ec3398d467575a71e43c31581cb6d74484f128cd164bba1a0661c004275e53f9a974ecccb3336223fdf209adbdabac661636a82887a05e9633adb60755d38983e9e0d1c60a8fdc11c3de597f9fda46777be7482c66198ae332e33ac36e232b38f92173cca99f34f7710ae775aebe4c5b6025f1809a0293238e91d7049da78ea0c96b4b011a3dd7a043a9fe213ec20578aca0ee23203d3cf7d0d7e903a7af0d4532dc8183a89385489a92caa605a620531ce41bde25e112661bcd1602266c06b69fd0cf581961b219ad1139c664ee9cb506d6d3d9cece26b78c78250f9e0f21bb030309e6000eab8be2e9dbffd4723da9ec5e67483f0e966adab5bd0358cbc06e9f2b5f5ef35ebbae16b73df007543bd63a4d0482c3542f7260e45f0990163d7899253e1af34673fb27d97b9c566482dfd6b00018933f1f387899b408b71952929c2a78e7939345f7c19a08841713a76f11a6cc1b9a261f3c77286b0dfd1e73b6ed65646045eb0b1a3b0f3150efc0ccc329ac8e5c2caf88183f542702fa2a27d0d878ef4b4677fc5c90d2e61f413337595e4ce6cfa51c11af6324080c11975749194d73ba0e04eb3fd7f577cae58c7e0b13b70c9df1b428ba82dedb0f0e1ebd92a6f123b289657bfd3962d91f97a12fdb6f94e1c43ffdd1f6864a4d083904356f0478a96e52e78db507c070241262b15430546fbd4ae5e1275dfb5d7b7ec939d5fa5df5c9ebbf813acbb4f52e2c0f109617321f1139b3d7c043fc0e0a364240e90d1c89d0519c69c06685115881b61deed25dcd7e5faf5c5961baf208b216a06f619e1ec1a49c146ded1e66b3e04c64c41108cc24d29662f8120bda0e23fc9d4ee7ce7f53a9c207681a372a48a12f4ae978e13549482ca30dc0d78f0f88a32035a539cd110c6761d8023fccd17f05c7e636616797ec6bb4371ade7f010b9f0844f20c6d5a2ebd74b13258f10e3c29eb7c7a62785407691684f4e69108c091de739e6f95bdb7b89d584e6960424efea380e65c57a75d83e869c6ffcd0be94555312e5f138ae3d9eed0f5c58d47502bea39dc7d9ade860624b8319f9a02a74676776a12414fe369acd379231ce3e042f7fc80f14a9735a0b4e9f05b9a0b5a61a3f557197aaee04e1bb67787487fd4e85141ada3de903bc75f0763a43805d57f945548075885f0cf75a92d9679ad24c02aa72d8b5768309b6054c849020928bd0f1bda2801d5a6fbb6af2ac06e53e458392276335f81858d3aeabc65ef09204bc90ffdd744a7dc53dd6d9cdd6bb1b9b3888a625134e5f4434d2b470b3237867a699747a08b1daa4cc8a73220636e3c2162393dd01d04cbb06e0dc20df9b71880b92e43a60d164e9203aa40663bcda410439713bf766813c9534785246fcda4ad2632b29bb41d965ba84d530157c5d57de6d729a6d97abc2703c742dc844994b815d1cc3e20c364d22e6a838bbfbc85273c1d72f805945faf078af6e7020a6f8a0b2bda76f35e275c973933cd2fef4e45390dc25c1aba9236860abf45521315e5631f9dd1e226195434d1e8fcc36bdb30d0caccab1155580a584308d5e4f70f1b8efd37eedfbe7e0e26133728ec3238c9208265198529b0d587d55a337e10c58028efa15f31bb0a19472e149d0b7ee984fb0b3d1adf4769e059342422fa9f44d0b98dbd1071331d5290a13d74ff182b1b04f50fea9c2c6bc7f0d4b967ed9b8205a9ae1778360103d677acb014878ac32635669af9f65e5cfe35505913976e79831c69901ad519d417a8bd6dab1d8c8c7e35739d9e72ca74c1c2493a13ff4b", + "as_json": "{\n \"version\": 2, \n \"unlock_time\": 0, \n \"vin\": [ {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 26305618, 214186, 220428, 336851, 65837, 38465, 288, 691, 5375, 1824, 1840\n ], \n \"k_image\": \"ea3dca7b033d26dbfa8929416a521d567a26591841e679107ce71b663e166902\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 2167636, 13096802, 6366299, 4186337, 391989, 964843, 4477, 6244, 2228, 1236, 3346\n ], \n \"k_image\": \"dcf03a6509e651a29bebc34041caf616455cc292fa2bb643f9b08092ec59453b\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 19121134, 4567604, 1007192, 1931537, 146685, 139811, 73557, 167232, 31581, 4636, 453\n ], \n \"k_image\": \"ce1d3efc8a9b34487b372bb6912b4e2c59383d33e0d43189137a27f01f493e9a\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 25112581, 1421500, 337993, 79642, 51937, 25926, 103448, 7205, 30465, 18848, 1895\n ], \n \"k_image\": \"ae51a3fbeb5e373200caa7b6cbb4e15d816c2da4d118301836f2209aaabcd4a5\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 25060269, 782341, 327746, 843644, 92844, 63377, 10649, 3266, 4783, 2413, 122\n ], \n \"k_image\": \"914de852cc11000c95d5d3e65ab209b4e132f3e065e75a3704b1c7c3208df99a\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 24795907, 2200960, 47849, 46199, 39956, 53693, 1160, 438, 674, 1075, 3570\n ], \n \"k_image\": \"892dac2160c42455b8fbf47e2828900e26f9b471b80c995846d520ed956410df\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 25586230, 622515, 605137, 200850, 29552, 37546, 3338, 67649, 213, 33836, 4467\n ], \n \"k_image\": \"76b78ab2e228f862f25266e2c52e2ece1e2794010904f6dd5e988590a4fee18d\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 23140066, 2624782, 1104249, 131179, 43341, 63242, 56675, 6132, 9322, 9442, 3032\n ], \n \"k_image\": \"6dd6075ac4b83ae6fb7b69c1887c65ea09d7cb85709d143a9e308a6221d33cbd\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 1234181, 2373169, 10112587, 12415655, 910330, 70485, 46915, 23663, 756, 271, 3316\n ], \n \"k_image\": \"1f81508673bacf74c6aef781066c10a465a7cfb9deb2f846492f243b8e8e9673\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 25118325, 1190242, 471362, 220803, 68026, 27163, 5548, 38489, 29623, 16194, 5526\n ], \n \"k_image\": \"13b9e44d6d26c65b26dee7fe6b2eeb00442031730f707007a64b314f05c5e06b\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 24034938, 2162624, 224516, 621622, 75741, 39550, 9752, 16763, 3247, 633, 2099\n ], \n \"k_image\": \"0c7e0535b7fd3e962d3977f595603a058ad82e92781f376c2ba198c6fc20e491\"\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 0, \n \"target\": {\n \"key\": \"9730581f692a0728b8efdfb3c7ae3abdfb1b0c958c4a7982df4b25fd097501aa\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"97f9c20373662034aab669e7578127dc4de22b4962d3f2af15c0608aa38ecf47\"\n }\n }\n ], \n \"extra\": [ 1, 29, 159, 71, 249, 191, 170, 191, 86, 63, 87, 121, 242, 68, 36, 64, 22, 148, 88, 126, 63, 41, 244, 78, 215, 242, 61, 150, 28, 38, 112, 10, 39, 2, 9, 1, 210, 97, 135, 88, 43, 114, 242, 99\n ], \n \"rct_signatures\": {\n \"type\": 5, \n \"txnFee\": 51060000, \n \"ecdhInfo\": [ {\n \"amount\": \"2dced5c109c9b9b2\"\n }, {\n \"amount\": \"08ac9c3103fbbe95\"\n }], \n \"outPk\": [ \"01d77aef7a011842b5b0728e4cda054ef887463f866b736bbdc8c3b3e0127515\", \"169adb51ab9ef98c2a69e5128c0de15eff9d18aff2a07975270e3c82bcbf243b\"]\n }, \n \"rctsig_prunable\": {\n \"nbp\": 1, \n \"bp\": [ {\n \"A\": \"644b284605576983755f83dd835cd1ed3b814b6e97e8e086ca99514d38f78037\", \n \"S\": \"a914bff3c42f6ea5734ebf12890c733484eae20a00c3682720dd0610a6387990\", \n \"T1\": \"69384240bd07ee42bc513ba13a2acbcdffc7f8b66250b01d4700d684c9e4873e\", \n \"T2\": \"a76636030fbb232ef24d9c263db665c920746efa38c8596a05b3e018a93591d3\", \n \"taux\": \"5756c5743b760df7793acaadb4e5837bbc2772a3575a6416622c87d41aca1000\", \n \"mu\": \"f9197932b1d0f7b3cc1f944d4f20c0da483caf9884101b94d84521b75356e10b\", \n \"L\": [ \"2e0aacf2c40ca937115b2d74ab0525a020b96e35d4042fc2b08e13b34c945aa0\", \"ebdc39a041e0674fb4fa41b4d4e92e1516c304251d7c1ac1fca2c4c4e572b70a\", \"5e01def171237a771b3082a567bf3b3f71384b88aa20b9cd8560e712c9222b14\", \"d46c11995f5495d55101e5904536d088ae71da4092fb15432d132e1c217b4097\", \"5354df569b18ef9f505c5ef1ebcc405f9ac117874be42b3378483e1c1cc53727\", \"edf17c870c06f0ae6e2e43e2a9a4b219154ac62b8d73c7ac9ef61a526ce83c35\", \"5a2cc9ea831d33d2c3975ff6fda8f8fb75f3f4ff822df550a2915a139abbe257\"\n ], \n \"R\": [ \"2867babc7a1c77080992dbdda8b44a0949318d787c66e3e1e8cf7ebaf86a2f53\", \"4b899a6b5e38201aa3d403b3c7eb785b60190feb66573d5e33f2a278e6cbd73b\", \"c27262a377da5e5b548dbd65057070450d89c77a68941b94525f12d20eb69af4\", \"28e61e2995d1e6b79056d0cf7e7320252d1aa1f6b6b80e4c441607927ecc4173\", \"232740cfff9b8c5adc75a7743efb801bdf48c73716ccde7a565318ada7413834\", \"0e8760b93a0bb43c6d4cd9e3acb6c9272c13f8ca3d00fbb46074d33337c3f2db\", \"07d7e8ce6cb2a2aae7de846e6050a30492aabf161f290ded39d75cfe34496a51\"\n ], \n \"a\": \"30b1f3c4e9b461b1fa6840ea605f9de5de69614c0020522eebf94156e6062b0c\", \n \"b\": \"7891c9bd44f581d5e0806b6339e837c38742521068b0e2bee2b215183716e307\", \n \"t\": \"ee4d65abde8d082b2ec34a6563906c9d6646e22786880abe357503d860bdc40a\"\n }\n ], \n \"CLSAGs\": [ {\n \"s\": [ \"31f143583299e461b6f755bc7e306dbc1b40d28163b571cda0e6a52ee23d0f05\", \"0ad05279dfb8d1a2aa068f352002f63a70b128fb7c9e37ab6d7d67d9d7d9250d\", \"90e8da0f36f8a1c1ad946afc4d3a115caba0a5d998da5f253f1274a5dd694f09\", \"c7addf0a2cda0c18af0fd4491722ae813bbabad13275358e70d840b66a8b6900\", \"02dff6f7cb6a1065cd467961da306e822d42b3bc70837fbc62b7b61fa9bfa305\", \"00299331a64a62983bbce0fdf983e742a212e5a5ace13106dbba0cccfa9e9502\", \"30c12c1613f4e2cb598053c920940378fa384992b502d8c12fee1340caf71d02\", \"cfe9a8ab5adb94fdf169a324d10fea117fd8256545bce8bbe9ba984a3339270d\", \"7b5d2584b1c76d8152b68a7e45081256a7d0dc2e04c55466f24c224e89294b0d\", \"22564af463256600e9bd82c3a32983feb4978826f71e996273dc8aa9d99fa200\", \"d6e54569c79a1b763b55dc32ff600cf497c3935598abf4a565c5df8b2e13cd0e\"], \n \"c1\": \"13900ae7aa9a24563bdfc96b5332ea0aefda86ea53d72d2c41c58090a6f9450a\", \n \"D\": \"32cbb432d0cffd6f7840dac7fb64a0bbe26b01f213ed5b82feb50eb777eae809\"\n }, {\n \"s\": [ \"89d8008cdce7285643846c8ab8501da53eefbc9de813e43283dbe32936e44c03\", \"0e8ef773f0340e4f3abd4b708605d187a28840386eb35f39d20bee3fe03bc308\", \"cc93bd203534f5f2fa89499e55ab47f8940d12cb49bff092a279b3bff8bf7e0f\", \"76785ef1033066d4ca54b3436e3910d8b609aad897f86261f6a832d67362760e\", \"6613196975951a41d8ccbbb19568a52efaf233754f62d107c01e9056533fd408\", \"57c302a803aa1a02067140b5c806ffff28184d3efb0823a7ef823234e89b2508\", \"4fd57eb40ecb64de3a0f305a0ead319b4397b50bc2ca8137b6e870b9e9a2f10f\", \"e3febc26aee742f3439c3e2f3194cd6ff6838079b300d62a0c3b8b5d8fce0f0c\", \"7e7917da06361491eb3aa88ea6faf5ba7e9cd510c7f5675b02b7f41fd9e4c206\", \"de741282a49e463fdc5ee95afa5855a64781066a9b1dab3f803751acc81b580a\", \"5e0137fd05f2df9f4558866629c087c9d404bb7bf8eef73d5af066b464510401\"], \n \"c1\": \"fa8da5250872e29e9c5d3ce94cc35d61e6adc6c7935fcb7a56dadc37b051b608\", \n \"D\": \"d543211a5472d11d0d3da9fa23705b39b8ecf3377713240abaa420041481fd81\"\n }, {\n \"s\": [ \"aa234723778272c071fb470bc6f973a8d4be4d4fc790bed52684e150e8ac5605\", \"2ff287c6698590fa43dcb46d28cd687fc31de3a5564ae2b73181b9bcae75180c\", \"859ca88673e1a4000aac1088065fa98d16ff70f63b2de7c60a09feaa284d2609\", \"5ac2f4ac0625076b12bd89f29c913da88dd9777e44ca2b03b1c2b5a30fedc008\", \"76b21e3f854b025b2afdb6202fdcbcf1122183ec35f26307b1c584f4f1b0540b\", \"ab280fa6291c367d55cc76126ccf698b3122e3ee31d9ed3da1df4793d40abf09\", \"23343d95061e2d2b656c2291cd519c4c2fbd18e968704b44a7014c3b74e7800f\", \"505f0e803a23bd5f3a50f99027ba0469b9762bc87fb9d626692c9ec923f7b408\", \"14707877bd770f43a365707ca6c6ce8d01ea634450686aa61a7d4180f806ec0a\", \"3ad71336f21d86c322502b2f8ec85eea2187d33d8d23b64cd9748d05f10d8a0c\", \"3f419feda8c536691636e8b0f8f21231a52ada8505c4f609b6e798ebc350650b\"], \n \"c1\": \"22aebda5684b1e3941ec35d4706de5c9b52fd30848bd38b39aca2d50ae287f02\", \n \"D\": \"f2bf0825603a4793fe2e200c21cd74ffa4374cf8039eac6ffaf6da84dc744aac\"\n }, {\n \"s\": [ \"3a94062bbd820939ed53dc501a866bcdae62d1fa6f25c933933d97e86fc28f07\", \"281d41af4cf29dad5cb4053b9a69528daea27fdbfa3e6651c788ce248e980801\", \"e95eaefb4076b7f2467ae8bf9a6ffddd9dbcec76d338124b14b97f7e738c7506\", \"964d8cf3f84e110ee92d75f8def055ee6657266c2a27c5d7c4559bd0f6e5dc06\", \"9a40f9523c154574a407d56b404fa6aa6696c5d7d33151e1575bcc5feff3c60f\", \"a63a046e58d0326b6114a8303902a0ccc5fabba8353ea252971cfa3ad8a22a0e\", \"a99203c5b3992cfd42a25bf0c49b9dad157049464912c310dd8c3c28e919de01\", \"18479cd2a60cbc635485e6b8676bd5da91c2e418603b9de7e32def748a52b60d\", \"39a228535a13b141115fa65ba1d959e4488aff80a76540237836389f61262f03\", \"109ed54940ad67ced0a45e834a2b4427c3e2622b4c5bba17c5b2137d0bfe8001\", \"000783522c6e9d43258cca7f5990c0cb2288c9b3a76a7c19eb06c57cf35a680c\"], \n \"c1\": \"8fca20b1298e1f4fd6a427d5c7cbb6a58f84dbb409334f4d7a96d35f6d3db00f\", \n \"D\": \"04d109faae134665f47b2e8b4369a189fda46088171fd4b8dea527aa7e2035d4\"\n }, {\n \"s\": [ \"dc067dc6eeac4ac84f0058a7e72307bdcf7f3e32671338388d553ba27c8abb0e\", \"bd8071bdd3874712c8c45eb449db51292a19d35815095e76495af4ceb71e9b05\", \"8c357afc02bd42b4e38e7d4a040cd9eb78dd8b83a8c1e6e7116c6c1a8d2bd508\", \"d01f3ec72e04ace4da058140ed045b2fa1cc504aa5a5ba47795edd97481ace02\", \"42e4dc6f59b7f0bef9b9dd2b4b3a4b39d61b5e6f719bbd73889e4fb6d07d3708\", \"b7ec13af76a556e12d8dd51ab5687d8d45a28509515422ef8e9a5da5dc3b1409\", \"d775e493a3e2461e72181cd6b3d557de2a912c297c4ffc1124493815cb59d603\", \"c51481a2446b6ea12ba7ab8d0d51d534721ada976bccac4a157ee877eeea5707\", \"47815398cb1cfdfe854ab8596945095027cea8a6cca0d463328adcebfae57f01\", \"cc7f5f371493ef1cc2412fb8876cc0ac0086608640f16b664a4da0023409a801\", \"ba5217d6c67a4717e1f0105ba4b0654aa820518a9d9f98cacf119d12ff651f0a\"], \n \"c1\": \"43cdb914f638df52e0b12bcd4ad4457ca3f88d323f9301a06d3f3f5601ec0a0c\", \n \"D\": \"4556502357b6a444e7508bdaa33a57d941e87b32110d421be185acfd6f4e739e\"\n }, {\n \"s\": [ \"716389d2c734408df7f4f46c6c48ce70b2c2f7deaa8f8d8a0df4035fd7276700\", \"8ad80a9b5b00c3eb629c3aca2cd5d85624c102738e8d00642d98a83ee434d00d\", \"82ba38ab7190a7ad44d17781e788552983412d564dded006a810a18cd15a610c\", \"1ddaef5a464b5ccde5a4d1e1d78a9c875d09f04984508df99a1df0fa07526505\", \"e2cc9905145251f9598d7689bffbe90d9812e837b123e10226f33d7b2433ae0f\", \"d16d3c04260b2284ce6fb40373868d68863513d886918515d0f224011b81e603\", \"41ed52112a816c8edcc63d27a813a785905b87c17906667ac9d9178291e8a209\", \"262983b736381e03f6119bab87f1f570de35466f436e00555e03d89ca415ab09\", \"afcca572586fee9afc04844d428b900186e07f5991237df4c05501dea9c3b309\", \"16ce0eee462160bf5305fdbd8d40926bea3f9bc5bfe6bbb9ff376ccb3ead4c04\", \"caea03fda281589cbd3c1afa3349c8e9a29bbff069ebcec21cf36455a5f7c101\"], \n \"c1\": \"ac0d3c819dcf90aafea5b0bba2b781bb9c4525f6167696ab92fa9a4f5a9bd20f\", \n \"D\": \"f2852659182d588942aa00b117fe48a092cf75c3d4b0943566ea0d4c3c05f776\"\n }, {\n \"s\": [ \"ef72ff0879d93bc88f819d3d4cfb473339492f6c079fd6d575c6ffcd3f11860b\", \"5198c1ee11bcf806c4e4ea4cc766ae7f7de3ab8d22202465e9f791ff22ac7504\", \"d3b7c272d9c1ea6418bfcf643a33cdc6d9851c023e2d070c910797fc744a890c\", \"216d85bbdaa09f6626b0cc0dfb85ee5cd1bd52c011f489f05595282c40cb3d07\", \"2efa54daec88e67f5ca80b0615fc32e0f9a35c946a764000d7f4d58939512507\", \"2414fcb89f03cbef5ba274de087aa99cbbe0c29f4ba41b53f364ed55ad91b00d\", \"c9f14bce4b4201a6c081348f679267a50a885553fd9182c6db59d84281ae0a01\", \"5bea38d62f63ae43a7830a85c0e5cbd85c4a9c230e58aa9fe16e7d6e5b2a100e\", \"1b0d5f3c319bc93a24165f5e7366b03589011b5244837a24e44f07da11bd3205\", \"c0bb3084012b449fb1ea4792812c8d46ecce8de53817bc9b408173681397860e\", \"df6c2075906e656780969da5630cb7ec1bf8e88cc5fc66c0e6281cb8becf760f\"], \n \"c1\": \"2a54a60aa2c2d0be087a404bb6416f918bd9135d935830c04848257ed2de7009\", \n \"D\": \"6ecf597dfb2b94c0df996785e2c7e3f9ad6f609542411b82a5ec16b7ee1c9d7c\"\n }, {\n \"s\": [ \"53aa36886a8e9baa0744ea79a30992b2fb448798cc5549228c29380e26594a05\", \"f20b086813e981c4492214122cc3d83aaa682137b3b39b0c233d4a8e999b630f\", \"7580147fd23f35bac08cd30121f6232ec736a2b9dfabf292343b1be5725d420d\", \"66e48167c139d3ddbcd25503edd2197080aaef96118165334079d0ba86c44604\", \"bd6a8c95a040118db3ae851a4a2872f23332dea052582d2f36d820f15f422606\", \"842ed02d6ccd460a4bd11ca5fae623be42c361e7ca0d5fc1921848da1b153608\", \"344dcecef75c1c147f435cdfd00590be7ed26a6d60de075f1abc049eb06c8502\", \"0595847106ff10a53e4ebdb2ac134914e10fc9e60443233b7f3e356be61e640f\", \"8bf6e363ed68e56903ff6c00f9e208c6644ee5385580a349555fca8aa9135505\", \"487ea93647be2a0a6e5bb439eb8619ee65ced7ea86add8dc733b530e8839090e\", \"3a43c4dcc439e3d083cdd5a823464583f59275e0003339bd4a6c6c05b319310c\"], \n \"c1\": \"9aec6cf03d696eabd293fdb1fe3c790fd91efecd349df068a3aa06a4b7ed3e00\", \n \"D\": \"e7074c04582d8963af509f2ca34344d13f1099650122128f7e0270fe5db0abb0\"\n }, {\n \"s\": [ \"4511b1d99c2ed9513b25bb659733f84be4468265fea021e07627dee2f49eef02\", \"3f66d45bea98fc0448eb68fcbf3bd41bd0daa0302ef64b81793dce003d2dfd07\", \"9d0de97767eb4427e403d8f9d305796327e5c6cb9559de627ac55fad2c848c00\", \"13eefdab6b1ea9ae118410b381216dbba51865cd24d97967f2c76e4322521609\", \"2f542fe9c096569fbe430141a135206b77f2a59392559c57f1d82d1acb4e490b\", \"6a0f4f620dfbc30c3b90bee41b21369172e90f20a024c4c45f474ad8d58ed201\", \"5bb6023bc398e476e236d0785132d63858324e0bbe541fdfdb9353546c5fe204\", \"b4ea5390de28f17a0c98840fa6fb0964ceac1b9f4a7fb5875c57909c0f11700b\", \"2baea279c5d3a6b06dbc14d52adc63ca391507cf92af5af44e3c3e54a3b29d0b\", \"299fd884f98bf512cc25436f87f76901e74b59ba31072b94d5b68ce931f5b804\", \"8ce02436ec3398d467575a71e43c31581cb6d74484f128cd164bba1a0661c004\"], \n \"c1\": \"275e53f9a974ecccb3336223fdf209adbdabac661636a82887a05e9633adb607\", \n \"D\": \"55d38983e9e0d1c60a8fdc11c3de597f9fda46777be7482c66198ae332e33ac3\"\n }, {\n \"s\": [ \"6e232b38f92173cca99f34f7710ae775aebe4c5b6025f1809a0293238e91d704\", \"9da78ea0c96b4b011a3dd7a043a9fe213ec20578aca0ee23203d3cf7d0d7e903\", \"a7af0d4532dc8183a89385489a92caa605a620531ce41bde25e112661bcd1602\", \"266c06b69fd0cf581961b219ad1139c664ee9cb506d6d3d9cece26b78c78250f\", \"9e0f21bb030309e6000eab8be2e9dbffd4723da9ec5e67483f0e966adab5bd03\", \"58cbc06e9f2b5f5ef35ebbae16b73df007543bd63a4d0482c3542f7260e45f09\", \"90163d7899253e1af34673fb27d97b9c566482dfd6b00018933f1f387899b408\", \"b71952929c2a78e7939345f7c19a08841713a76f11a6cc1b9a261f3c77286b0d\", \"fd1e73b6ed65646045eb0b1a3b0f3150efc0ccc329ac8e5c2caf88183f542702\", \"fa2a27d0d878ef4b4677fc5c90d2e61f413337595e4ce6cfa51c11af6324080c\", \"11975749194d73ba0e04eb3fd7f577cae58c7e0b13b70c9df1b428ba82dedb0f\"], \n \"c1\": \"0e1ebd92a6f123b289657bfd3962d91f97a12fdb6f94e1c43ffdd1f6864a4d08\", \n \"D\": \"3904356f0478a96e52e78db507c070241262b15430546fbd4ae5e1275dfb5d7b\"\n }, {\n \"s\": [ \"7ec939d5fa5df5c9ebbf813acbb4f52e2c0f109617321f1139b3d7c043fc0e0a\", \"364240e90d1c89d0519c69c06685115881b61deed25dcd7e5faf5c5961baf208\", \"b216a06f619e1ec1a49c146ded1e66b3e04c64c41108cc24d29662f8120bda0e\", \"23fc9d4ee7ce7f53a9c207681a372a48a12f4ae978e13549482ca30dc0d78f0f\", \"88a32035a539cd110c6761d8023fccd17f05c7e636616797ec6bb4371ade7f01\", \"0b9f0844f20c6d5a2ebd74b13258f10e3c29eb7c7a62785407691684f4e69108\", \"c091de739e6f95bdb7b89d584e6960424efea380e65c57a75d83e869c6ffcd0b\", \"e94555312e5f138ae3d9eed0f5c58d47502bea39dc7d9ade860624b8319f9a02\", \"a74676776a12414fe369acd379231ce3e042f7fc80f14a9735a0b4e9f05b9a0b\", \"5a61a3f557197aaee04e1bb67787487fd4e85141ada3de903bc75f0763a43805\", \"d57f945548075885f0cf75a92d9679ad24c02aa72d8b5768309b6054c8490209\"], \n \"c1\": \"28bd0f1bda2801d5a6fbb6af2ac06e53e458392276335f81858d3aeabc65ef09\", \n \"D\": \"204bc90ffdd744a7dc53dd6d9cdd6bb1b9b3888a625134e5f4434d2b470b3237\"\n }], \n \"pseudoOuts\": [ \"867a699747a08b1daa4cc8a73220636e3c2162393dd01d04cbb06e0dc20df9b7\", \"1880b92e43a60d164e9203aa40663bcda410439713bf766813c9534785246fcd\", \"a4ad2632b29bb41d965ba84d530157c5d57de6d729a6d97abc2703c742dc8449\", \"94b815d1cc3e20c364d22e6a838bbfbc85273c1d72f805945faf078af6e7020a\", \"6f8a0b2bda76f35e275c973933cd2fef4e45390dc25c1aba9236860abf455213\", \"15e5631f9dd1e226195434d1e8fcc36bdb30d0caccab1155580a584308d5e4f7\", \"0f1b8efd37eedfbe7e0e26133728ec3238c9208265198529b0d587d55a337e10\", \"c58028efa15f31bb0a19472e149d0b7ee984fb0b3d1adf4769e059342422fa9f\", \"44d0b98dbd1071331d5290a13d74ff182b1b04f50fea9c2c6bc7f0d4b967ed9b\", \"8205a9ae1778360103d677acb014878ac32635669af9f65e5cfe35505913976e\", \"79831c69901ad519d417a8bd6dab1d8c8c7e35739d9e72ca74c1c2493a13ff4b\"]\n }\n}", + "double_spend_seen": false, + "in_pool": true, + "prunable_as_hex": "", + "prunable_hash": "d49c433f47702bae47050995cdbd753f599b5ff357c4cdbcb7514839471b27a0", + "pruned_as_hex": "", + "received_timestamp": 1613163040, + "relayed": true, + "tx_hash": "ae476cae3ad2b44c6c2614b9435adbe304e24c59d410fe3b4dd046a9021d66b9" + } + ], + "txs_as_hex": [ + "02000102000bbdef820aa8e5f901a3cc79a337b5d601aadb01af55fb44d90b8f0c850bda856b62f04c77bf46f46954b8caa82097b9386b0a501277262c68601ed917ac020002d4871f51832c1951212b3d87395a8df5594e927588221e665a018c098968cc8b000262d52033f1a3c921f1db56eca9b5dd50f36ecf76e22e67cc694fb7c214a609ef2c0164d167ad3d6f762414567f5812585fe7f48d3400cd51d999b020899658526567020901795c32b0b5ba9ce30580cfe81a73e3d349bd53dfa8fa66a93993f6921ff0457386671f45ef33760947513b71ec6398ff0e2ebb5edde433e452b9035112714a290806bedd15cd5293ea33be5bec57e983042840d75f66b7ca31c599f4ca0179a0ea918ad50e7e2d10784dffb56eeb39d4c92236c4904c1ecebd5b90ad6b797f9bace3566394d8a2558232b8f8262317dcc3da8038bc46119eb891371d71f940e15801c6ddf29ddf034c0e277ce87d4343cb821fece9c74b1e04ecec914c34c5b7bb518042b1ca36de80e451aca0c44d93298d4a4ec31a2a1aa8b5b437a6aab043ed66a681ba1f5f7773fa140176ddcdb2a0e7c9ae3163094671bf348d5504bc2b168891c1a599ce00acfe3a430c9c58370fe53b96a4d64155b03b5f30ee0307f95bde576a409f86100e2bcfe81d19d2407134310dce6ff953f668e810d48f12f3fd61b6c0f00819a18b75ae762b03dd97ba40ffc5a791318bf019f989e85f09385b4b9b74c8500321fb918e13f3bbd0a2fdf5749318f152e2a0f994f11b848e0157e0b3c44afab6653ef0815ad1e0d76ba1141d5abb61f8b078a57413d3374b3aa78fbea4de0604d470a12a21da6fea3c765e9ddec5d50b8f76f079f9c61c17b25822612418444181adf9e334a695aaabec779edf8842dbdbae99461c608dc0096113d8da040c3b5bd94dc796aa1daaa740839fd0f4363fa60b8c3e84fddc43075ae595d323dc7cff3db06df16d2eb08bdceca623de357e6cfd59deedcba29a203bbbbaadcc18bdd1ce03ba2d1bd16bc5e666b8006b473f339841199c5c183c5b78b420bd896cd50b2aa7b9f9fcba3615abe0f734c830320a8e9830976bbcae9a8e77676c4a3d944a3dca84fed10d242b12da93e9e37be272a933b45b23b8f4c20c8dc6bc3f0d56878639b7900f505e6060806939e9f7f417fd10965fc564c7f00893b920b6c32ff2e546dd40ec4414a110b052e97d3d74255190c0032f0826f87f155779e21e9b5b6a9300d6a2bde804ec0e107cde3f600ab5572cdda09645147cbbfcbf4c3681cb6965770ebb2b298151c354e45aab0e1ab77d414a30362a0091230d667e4ac44f5448cdf319b170c92f20d8c44b620f3b4517328bf4ece003dba9db9a71d0531ddd329adbcc4f6c408caeaebabe477bc1084f1da40cc4ca03e7ecc5f173167accf433667b9d3b61fdfd8cfe3498951e8912d6ef9a79401e0913b53dc6a14a8e117d053f82020e808b45e15b85d7102d1ccc87739c22124b058b2ab71e67f71598bf2b43813fb408df5ecafb1ca6c9761256958b017d7ab00d4a0a3fdb9ed61908d6559b853d254d86bd50fd85b349a8a9c5386850e4b9ad0984eed4614a896488fcb1b63cf795a56c12425dfbfe19ee09ac4375e6eb220e0ff2254d80d1f9fb865d5b176003779f5064ae0949aee694ac89df0fee4d1f3104d8bf76b06773b27c6ca86e69fb94146ca082a76af02d3e76c6e635fc3bb524084f89e8428a61207a4660e9c666e3e74762a62330d56753ad8fa7cf1267f5490c3ff7596b99bdda95e1bd409107ec45e09a0650f0a8c32dfddfbca2000602c705427b0fb904ef582e435fef3de34b6a3a07a67031fea098a28695cce2908f230e80cadb40036b6da75aef391ce13231674edb807af5e04f686027cae475274007b85ff58b13527f6b1125438e734ac8a1206255a332824004a1a2de925584140398089f34018fce44f334f3b283e58900ffa58f7c2a63641f7d4d946fb44e2b18f4ce36baf1b06c026e4055dadb7b06a239a003ba571528a0f16f0f1dd4cbd730", + "02000b02000bd2c8c50caa890d8cba0dd3c714ad8204c1ac02a002b305ff29a00eb00eea3dca7b033d26dbfa8929416a521d567a26591841e679107ce71b663e16690202000bd4a68401e2ae9f06dbc88403e1c1ff01b5f617ebf13afd22e430b411d409921adcf03a6509e651a29bebc34041caf616455cc292fa2bb643f9b08092ec59453b02000bee878f09b4e49602d8bc3d91f275fdf908a3c408d5be04c09a0addf6019c24c503ce1d3efc8a9b34487b372bb6912b4e2c59383d33e0d43189137a27f01f493e9a02000b85e0fc0bbce156c9d0149aee04e19503c6ca0198a806a53881ee01a09301e70eae51a3fbeb5e373200caa7b6cbb4e15d816c2da4d118301836f2209aaabcd4a502000badc7f90b85e02fc28014fcbe33acd50591ef039953c219af25ed127a914de852cc11000c95d5d3e65ab209b4e132f3e065e75a3704b1c7c3208df99a02000b83b6e90b80ab8601e9f502f7e80294b802bda3038809b603a205b308f21b892dac2160c42455b8fbf47e2828900e26f9b471b80c995846d520ed956410df02000bb6d4990cb3ff25d1f72492a10cf0e601aaa5028a1ac19004d501ac8802f32276b78ab2e228f862f25266e2c52e2ece1e2794010904f6dd5e988590a4fee18d02000be2ad840b8e9aa001f9b243eb8008cdd2028aee03e3ba03f42fea48e249d8176dd6075ac4b83ae6fb7b69c1887c65ea09d7cb85709d143a9e308a6221d33cbd02000b85aa4bb1ec9001cb9ce904a7e5f505fac737d5a604c3ee02efb801f4058f02f4191f81508673bacf74c6aef781066c10a465a7cfb9deb2f846492f243b8e8e967302000bf58cfd0be2d248c2e21c83bd0dba93049bd401ac2bd9ac02b7e701c27e962b13b9e44d6d26c65b26dee7fe6b2eeb00442031730f707007a64b314f05c5e06b02000bfafcba0bc0ff830184da0db6f825ddcf04feb402984cfb8201af19f904b3100c7e0535b7fd3e962d3977f595603a058ad82e92781f376c2ba198c6fc20e4910200029730581f692a0728b8efdfb3c7ae3abdfb1b0c958c4a7982df4b25fd097501aa000297f9c20373662034aab669e7578127dc4de22b4962d3f2af15c0608aa38ecf472c011d9f47f9bfaabf563f5779f24424401694587e3f29f44ed7f23d961c26700a27020901d26187582b72f26305a0baac182dced5c109c9b9b208ac9c3103fbbe9501d77aef7a011842b5b0728e4cda054ef887463f866b736bbdc8c3b3e0127515169adb51ab9ef98c2a69e5128c0de15eff9d18aff2a07975270e3c82bcbf243b01644b284605576983755f83dd835cd1ed3b814b6e97e8e086ca99514d38f78037a914bff3c42f6ea5734ebf12890c733484eae20a00c3682720dd0610a638799069384240bd07ee42bc513ba13a2acbcdffc7f8b66250b01d4700d684c9e4873ea76636030fbb232ef24d9c263db665c920746efa38c8596a05b3e018a93591d35756c5743b760df7793acaadb4e5837bbc2772a3575a6416622c87d41aca1000f9197932b1d0f7b3cc1f944d4f20c0da483caf9884101b94d84521b75356e10b072e0aacf2c40ca937115b2d74ab0525a020b96e35d4042fc2b08e13b34c945aa0ebdc39a041e0674fb4fa41b4d4e92e1516c304251d7c1ac1fca2c4c4e572b70a5e01def171237a771b3082a567bf3b3f71384b88aa20b9cd8560e712c9222b14d46c11995f5495d55101e5904536d088ae71da4092fb15432d132e1c217b40975354df569b18ef9f505c5ef1ebcc405f9ac117874be42b3378483e1c1cc53727edf17c870c06f0ae6e2e43e2a9a4b219154ac62b8d73c7ac9ef61a526ce83c355a2cc9ea831d33d2c3975ff6fda8f8fb75f3f4ff822df550a2915a139abbe257072867babc7a1c77080992dbdda8b44a0949318d787c66e3e1e8cf7ebaf86a2f534b899a6b5e38201aa3d403b3c7eb785b60190feb66573d5e33f2a278e6cbd73bc27262a377da5e5b548dbd65057070450d89c77a68941b94525f12d20eb69af428e61e2995d1e6b79056d0cf7e7320252d1aa1f6b6b80e4c441607927ecc4173232740cfff9b8c5adc75a7743efb801bdf48c73716ccde7a565318ada74138340e8760b93a0bb43c6d4cd9e3acb6c9272c13f8ca3d00fbb46074d33337c3f2db07d7e8ce6cb2a2aae7de846e6050a30492aabf161f290ded39d75cfe34496a5130b1f3c4e9b461b1fa6840ea605f9de5de69614c0020522eebf94156e6062b0c7891c9bd44f581d5e0806b6339e837c38742521068b0e2bee2b215183716e307ee4d65abde8d082b2ec34a6563906c9d6646e22786880abe357503d860bdc40a31f143583299e461b6f755bc7e306dbc1b40d28163b571cda0e6a52ee23d0f050ad05279dfb8d1a2aa068f352002f63a70b128fb7c9e37ab6d7d67d9d7d9250d90e8da0f36f8a1c1ad946afc4d3a115caba0a5d998da5f253f1274a5dd694f09c7addf0a2cda0c18af0fd4491722ae813bbabad13275358e70d840b66a8b690002dff6f7cb6a1065cd467961da306e822d42b3bc70837fbc62b7b61fa9bfa30500299331a64a62983bbce0fdf983e742a212e5a5ace13106dbba0cccfa9e950230c12c1613f4e2cb598053c920940378fa384992b502d8c12fee1340caf71d02cfe9a8ab5adb94fdf169a324d10fea117fd8256545bce8bbe9ba984a3339270d7b5d2584b1c76d8152b68a7e45081256a7d0dc2e04c55466f24c224e89294b0d22564af463256600e9bd82c3a32983feb4978826f71e996273dc8aa9d99fa200d6e54569c79a1b763b55dc32ff600cf497c3935598abf4a565c5df8b2e13cd0e13900ae7aa9a24563bdfc96b5332ea0aefda86ea53d72d2c41c58090a6f9450a32cbb432d0cffd6f7840dac7fb64a0bbe26b01f213ed5b82feb50eb777eae80989d8008cdce7285643846c8ab8501da53eefbc9de813e43283dbe32936e44c030e8ef773f0340e4f3abd4b708605d187a28840386eb35f39d20bee3fe03bc308cc93bd203534f5f2fa89499e55ab47f8940d12cb49bff092a279b3bff8bf7e0f76785ef1033066d4ca54b3436e3910d8b609aad897f86261f6a832d67362760e6613196975951a41d8ccbbb19568a52efaf233754f62d107c01e9056533fd40857c302a803aa1a02067140b5c806ffff28184d3efb0823a7ef823234e89b25084fd57eb40ecb64de3a0f305a0ead319b4397b50bc2ca8137b6e870b9e9a2f10fe3febc26aee742f3439c3e2f3194cd6ff6838079b300d62a0c3b8b5d8fce0f0c7e7917da06361491eb3aa88ea6faf5ba7e9cd510c7f5675b02b7f41fd9e4c206de741282a49e463fdc5ee95afa5855a64781066a9b1dab3f803751acc81b580a5e0137fd05f2df9f4558866629c087c9d404bb7bf8eef73d5af066b464510401fa8da5250872e29e9c5d3ce94cc35d61e6adc6c7935fcb7a56dadc37b051b608d543211a5472d11d0d3da9fa23705b39b8ecf3377713240abaa420041481fd81aa234723778272c071fb470bc6f973a8d4be4d4fc790bed52684e150e8ac56052ff287c6698590fa43dcb46d28cd687fc31de3a5564ae2b73181b9bcae75180c859ca88673e1a4000aac1088065fa98d16ff70f63b2de7c60a09feaa284d26095ac2f4ac0625076b12bd89f29c913da88dd9777e44ca2b03b1c2b5a30fedc00876b21e3f854b025b2afdb6202fdcbcf1122183ec35f26307b1c584f4f1b0540bab280fa6291c367d55cc76126ccf698b3122e3ee31d9ed3da1df4793d40abf0923343d95061e2d2b656c2291cd519c4c2fbd18e968704b44a7014c3b74e7800f505f0e803a23bd5f3a50f99027ba0469b9762bc87fb9d626692c9ec923f7b40814707877bd770f43a365707ca6c6ce8d01ea634450686aa61a7d4180f806ec0a3ad71336f21d86c322502b2f8ec85eea2187d33d8d23b64cd9748d05f10d8a0c3f419feda8c536691636e8b0f8f21231a52ada8505c4f609b6e798ebc350650b22aebda5684b1e3941ec35d4706de5c9b52fd30848bd38b39aca2d50ae287f02f2bf0825603a4793fe2e200c21cd74ffa4374cf8039eac6ffaf6da84dc744aac3a94062bbd820939ed53dc501a866bcdae62d1fa6f25c933933d97e86fc28f07281d41af4cf29dad5cb4053b9a69528daea27fdbfa3e6651c788ce248e980801e95eaefb4076b7f2467ae8bf9a6ffddd9dbcec76d338124b14b97f7e738c7506964d8cf3f84e110ee92d75f8def055ee6657266c2a27c5d7c4559bd0f6e5dc069a40f9523c154574a407d56b404fa6aa6696c5d7d33151e1575bcc5feff3c60fa63a046e58d0326b6114a8303902a0ccc5fabba8353ea252971cfa3ad8a22a0ea99203c5b3992cfd42a25bf0c49b9dad157049464912c310dd8c3c28e919de0118479cd2a60cbc635485e6b8676bd5da91c2e418603b9de7e32def748a52b60d39a228535a13b141115fa65ba1d959e4488aff80a76540237836389f61262f03109ed54940ad67ced0a45e834a2b4427c3e2622b4c5bba17c5b2137d0bfe8001000783522c6e9d43258cca7f5990c0cb2288c9b3a76a7c19eb06c57cf35a680c8fca20b1298e1f4fd6a427d5c7cbb6a58f84dbb409334f4d7a96d35f6d3db00f04d109faae134665f47b2e8b4369a189fda46088171fd4b8dea527aa7e2035d4dc067dc6eeac4ac84f0058a7e72307bdcf7f3e32671338388d553ba27c8abb0ebd8071bdd3874712c8c45eb449db51292a19d35815095e76495af4ceb71e9b058c357afc02bd42b4e38e7d4a040cd9eb78dd8b83a8c1e6e7116c6c1a8d2bd508d01f3ec72e04ace4da058140ed045b2fa1cc504aa5a5ba47795edd97481ace0242e4dc6f59b7f0bef9b9dd2b4b3a4b39d61b5e6f719bbd73889e4fb6d07d3708b7ec13af76a556e12d8dd51ab5687d8d45a28509515422ef8e9a5da5dc3b1409d775e493a3e2461e72181cd6b3d557de2a912c297c4ffc1124493815cb59d603c51481a2446b6ea12ba7ab8d0d51d534721ada976bccac4a157ee877eeea570747815398cb1cfdfe854ab8596945095027cea8a6cca0d463328adcebfae57f01cc7f5f371493ef1cc2412fb8876cc0ac0086608640f16b664a4da0023409a801ba5217d6c67a4717e1f0105ba4b0654aa820518a9d9f98cacf119d12ff651f0a43cdb914f638df52e0b12bcd4ad4457ca3f88d323f9301a06d3f3f5601ec0a0c4556502357b6a444e7508bdaa33a57d941e87b32110d421be185acfd6f4e739e716389d2c734408df7f4f46c6c48ce70b2c2f7deaa8f8d8a0df4035fd72767008ad80a9b5b00c3eb629c3aca2cd5d85624c102738e8d00642d98a83ee434d00d82ba38ab7190a7ad44d17781e788552983412d564dded006a810a18cd15a610c1ddaef5a464b5ccde5a4d1e1d78a9c875d09f04984508df99a1df0fa07526505e2cc9905145251f9598d7689bffbe90d9812e837b123e10226f33d7b2433ae0fd16d3c04260b2284ce6fb40373868d68863513d886918515d0f224011b81e60341ed52112a816c8edcc63d27a813a785905b87c17906667ac9d9178291e8a209262983b736381e03f6119bab87f1f570de35466f436e00555e03d89ca415ab09afcca572586fee9afc04844d428b900186e07f5991237df4c05501dea9c3b30916ce0eee462160bf5305fdbd8d40926bea3f9bc5bfe6bbb9ff376ccb3ead4c04caea03fda281589cbd3c1afa3349c8e9a29bbff069ebcec21cf36455a5f7c101ac0d3c819dcf90aafea5b0bba2b781bb9c4525f6167696ab92fa9a4f5a9bd20ff2852659182d588942aa00b117fe48a092cf75c3d4b0943566ea0d4c3c05f776ef72ff0879d93bc88f819d3d4cfb473339492f6c079fd6d575c6ffcd3f11860b5198c1ee11bcf806c4e4ea4cc766ae7f7de3ab8d22202465e9f791ff22ac7504d3b7c272d9c1ea6418bfcf643a33cdc6d9851c023e2d070c910797fc744a890c216d85bbdaa09f6626b0cc0dfb85ee5cd1bd52c011f489f05595282c40cb3d072efa54daec88e67f5ca80b0615fc32e0f9a35c946a764000d7f4d589395125072414fcb89f03cbef5ba274de087aa99cbbe0c29f4ba41b53f364ed55ad91b00dc9f14bce4b4201a6c081348f679267a50a885553fd9182c6db59d84281ae0a015bea38d62f63ae43a7830a85c0e5cbd85c4a9c230e58aa9fe16e7d6e5b2a100e1b0d5f3c319bc93a24165f5e7366b03589011b5244837a24e44f07da11bd3205c0bb3084012b449fb1ea4792812c8d46ecce8de53817bc9b408173681397860edf6c2075906e656780969da5630cb7ec1bf8e88cc5fc66c0e6281cb8becf760f2a54a60aa2c2d0be087a404bb6416f918bd9135d935830c04848257ed2de70096ecf597dfb2b94c0df996785e2c7e3f9ad6f609542411b82a5ec16b7ee1c9d7c53aa36886a8e9baa0744ea79a30992b2fb448798cc5549228c29380e26594a05f20b086813e981c4492214122cc3d83aaa682137b3b39b0c233d4a8e999b630f7580147fd23f35bac08cd30121f6232ec736a2b9dfabf292343b1be5725d420d66e48167c139d3ddbcd25503edd2197080aaef96118165334079d0ba86c44604bd6a8c95a040118db3ae851a4a2872f23332dea052582d2f36d820f15f422606842ed02d6ccd460a4bd11ca5fae623be42c361e7ca0d5fc1921848da1b153608344dcecef75c1c147f435cdfd00590be7ed26a6d60de075f1abc049eb06c85020595847106ff10a53e4ebdb2ac134914e10fc9e60443233b7f3e356be61e640f8bf6e363ed68e56903ff6c00f9e208c6644ee5385580a349555fca8aa9135505487ea93647be2a0a6e5bb439eb8619ee65ced7ea86add8dc733b530e8839090e3a43c4dcc439e3d083cdd5a823464583f59275e0003339bd4a6c6c05b319310c9aec6cf03d696eabd293fdb1fe3c790fd91efecd349df068a3aa06a4b7ed3e00e7074c04582d8963af509f2ca34344d13f1099650122128f7e0270fe5db0abb04511b1d99c2ed9513b25bb659733f84be4468265fea021e07627dee2f49eef023f66d45bea98fc0448eb68fcbf3bd41bd0daa0302ef64b81793dce003d2dfd079d0de97767eb4427e403d8f9d305796327e5c6cb9559de627ac55fad2c848c0013eefdab6b1ea9ae118410b381216dbba51865cd24d97967f2c76e43225216092f542fe9c096569fbe430141a135206b77f2a59392559c57f1d82d1acb4e490b6a0f4f620dfbc30c3b90bee41b21369172e90f20a024c4c45f474ad8d58ed2015bb6023bc398e476e236d0785132d63858324e0bbe541fdfdb9353546c5fe204b4ea5390de28f17a0c98840fa6fb0964ceac1b9f4a7fb5875c57909c0f11700b2baea279c5d3a6b06dbc14d52adc63ca391507cf92af5af44e3c3e54a3b29d0b299fd884f98bf512cc25436f87f76901e74b59ba31072b94d5b68ce931f5b8048ce02436ec3398d467575a71e43c31581cb6d74484f128cd164bba1a0661c004275e53f9a974ecccb3336223fdf209adbdabac661636a82887a05e9633adb60755d38983e9e0d1c60a8fdc11c3de597f9fda46777be7482c66198ae332e33ac36e232b38f92173cca99f34f7710ae775aebe4c5b6025f1809a0293238e91d7049da78ea0c96b4b011a3dd7a043a9fe213ec20578aca0ee23203d3cf7d0d7e903a7af0d4532dc8183a89385489a92caa605a620531ce41bde25e112661bcd1602266c06b69fd0cf581961b219ad1139c664ee9cb506d6d3d9cece26b78c78250f9e0f21bb030309e6000eab8be2e9dbffd4723da9ec5e67483f0e966adab5bd0358cbc06e9f2b5f5ef35ebbae16b73df007543bd63a4d0482c3542f7260e45f0990163d7899253e1af34673fb27d97b9c566482dfd6b00018933f1f387899b408b71952929c2a78e7939345f7c19a08841713a76f11a6cc1b9a261f3c77286b0dfd1e73b6ed65646045eb0b1a3b0f3150efc0ccc329ac8e5c2caf88183f542702fa2a27d0d878ef4b4677fc5c90d2e61f413337595e4ce6cfa51c11af6324080c11975749194d73ba0e04eb3fd7f577cae58c7e0b13b70c9df1b428ba82dedb0f0e1ebd92a6f123b289657bfd3962d91f97a12fdb6f94e1c43ffdd1f6864a4d083904356f0478a96e52e78db507c070241262b15430546fbd4ae5e1275dfb5d7b7ec939d5fa5df5c9ebbf813acbb4f52e2c0f109617321f1139b3d7c043fc0e0a364240e90d1c89d0519c69c06685115881b61deed25dcd7e5faf5c5961baf208b216a06f619e1ec1a49c146ded1e66b3e04c64c41108cc24d29662f8120bda0e23fc9d4ee7ce7f53a9c207681a372a48a12f4ae978e13549482ca30dc0d78f0f88a32035a539cd110c6761d8023fccd17f05c7e636616797ec6bb4371ade7f010b9f0844f20c6d5a2ebd74b13258f10e3c29eb7c7a62785407691684f4e69108c091de739e6f95bdb7b89d584e6960424efea380e65c57a75d83e869c6ffcd0be94555312e5f138ae3d9eed0f5c58d47502bea39dc7d9ade860624b8319f9a02a74676776a12414fe369acd379231ce3e042f7fc80f14a9735a0b4e9f05b9a0b5a61a3f557197aaee04e1bb67787487fd4e85141ada3de903bc75f0763a43805d57f945548075885f0cf75a92d9679ad24c02aa72d8b5768309b6054c849020928bd0f1bda2801d5a6fbb6af2ac06e53e458392276335f81858d3aeabc65ef09204bc90ffdd744a7dc53dd6d9cdd6bb1b9b3888a625134e5f4434d2b470b3237867a699747a08b1daa4cc8a73220636e3c2162393dd01d04cbb06e0dc20df9b71880b92e43a60d164e9203aa40663bcda410439713bf766813c9534785246fcda4ad2632b29bb41d965ba84d530157c5d57de6d729a6d97abc2703c742dc844994b815d1cc3e20c364d22e6a838bbfbc85273c1d72f805945faf078af6e7020a6f8a0b2bda76f35e275c973933cd2fef4e45390dc25c1aba9236860abf45521315e5631f9dd1e226195434d1e8fcc36bdb30d0caccab1155580a584308d5e4f70f1b8efd37eedfbe7e0e26133728ec3238c9208265198529b0d587d55a337e10c58028efa15f31bb0a19472e149d0b7ee984fb0b3d1adf4769e059342422fa9f44d0b98dbd1071331d5290a13d74ff182b1b04f50fea9c2c6bc7f0d4b967ed9b8205a9ae1778360103d677acb014878ac32635669af9f65e5cfe35505913976e79831c69901ad519d417a8bd6dab1d8c8c7e35739d9e72ca74c1c2493a13ff4b" + ], + "txs_as_json": [ + "{\n \"version\": 2, \n \"unlock_time\": 0, \n \"vin\": [ {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 21018557, 4092584, 1992227, 7075, 27445, 28074, 10927, 8827, 1497, 1551, 1413\n ], \n \"k_image\": \"da856b62f04c77bf46f46954b8caa82097b9386b0a501277262c68601ed917ac\"\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 0, \n \"target\": {\n \"key\": \"d4871f51832c1951212b3d87395a8df5594e927588221e665a018c098968cc8b\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"62d52033f1a3c921f1db56eca9b5dd50f36ecf76e22e67cc694fb7c214a609ef\"\n }\n }\n ], \n \"extra\": [ 1, 100, 209, 103, 173, 61, 111, 118, 36, 20, 86, 127, 88, 18, 88, 95, 231, 244, 141, 52, 0, 205, 81, 217, 153, 176, 32, 137, 150, 88, 82, 101, 103, 2, 9, 1, 121, 92, 50, 176, 181, 186, 156, 227\n ], \n \"rct_signatures\": {\n \"type\": 5, \n \"txnFee\": 56240000, \n \"ecdhInfo\": [ {\n \"amount\": \"73e3d349bd53dfa8\"\n }, {\n \"amount\": \"fa66a93993f6921f\"\n }], \n \"outPk\": [ \"f0457386671f45ef33760947513b71ec6398ff0e2ebb5edde433e452b9035112\", \"714a290806bedd15cd5293ea33be5bec57e983042840d75f66b7ca31c599f4ca\"]\n }, \n \"rctsig_prunable\": {\n \"nbp\": 1, \n \"bp\": [ {\n \"A\": \"79a0ea918ad50e7e2d10784dffb56eeb39d4c92236c4904c1ecebd5b90ad6b79\", \n \"S\": \"7f9bace3566394d8a2558232b8f8262317dcc3da8038bc46119eb891371d71f9\", \n \"T1\": \"40e15801c6ddf29ddf034c0e277ce87d4343cb821fece9c74b1e04ecec914c34\", \n \"T2\": \"c5b7bb518042b1ca36de80e451aca0c44d93298d4a4ec31a2a1aa8b5b437a6aa\", \n \"taux\": \"b043ed66a681ba1f5f7773fa140176ddcdb2a0e7c9ae3163094671bf348d5504\", \n \"mu\": \"bc2b168891c1a599ce00acfe3a430c9c58370fe53b96a4d64155b03b5f30ee03\", \n \"L\": [ \"f95bde576a409f86100e2bcfe81d19d2407134310dce6ff953f668e810d48f12\", \"f3fd61b6c0f00819a18b75ae762b03dd97ba40ffc5a791318bf019f989e85f09\", \"385b4b9b74c8500321fb918e13f3bbd0a2fdf5749318f152e2a0f994f11b848e\", \"0157e0b3c44afab6653ef0815ad1e0d76ba1141d5abb61f8b078a57413d3374b\", \"3aa78fbea4de0604d470a12a21da6fea3c765e9ddec5d50b8f76f079f9c61c17\", \"b25822612418444181adf9e334a695aaabec779edf8842dbdbae99461c608dc0\", \"096113d8da040c3b5bd94dc796aa1daaa740839fd0f4363fa60b8c3e84fddc43\"\n ], \n \"R\": [ \"5ae595d323dc7cff3db06df16d2eb08bdceca623de357e6cfd59deedcba29a20\", \"3bbbbaadcc18bdd1ce03ba2d1bd16bc5e666b8006b473f339841199c5c183c5b\", \"78b420bd896cd50b2aa7b9f9fcba3615abe0f734c830320a8e9830976bbcae9a\", \"8e77676c4a3d944a3dca84fed10d242b12da93e9e37be272a933b45b23b8f4c2\", \"0c8dc6bc3f0d56878639b7900f505e6060806939e9f7f417fd10965fc564c7f0\", \"0893b920b6c32ff2e546dd40ec4414a110b052e97d3d74255190c0032f0826f8\", \"7f155779e21e9b5b6a9300d6a2bde804ec0e107cde3f600ab5572cdda0964514\"\n ], \n \"a\": \"7cbbfcbf4c3681cb6965770ebb2b298151c354e45aab0e1ab77d414a30362a00\", \n \"b\": \"91230d667e4ac44f5448cdf319b170c92f20d8c44b620f3b4517328bf4ece003\", \n \"t\": \"dba9db9a71d0531ddd329adbcc4f6c408caeaebabe477bc1084f1da40cc4ca03\"\n }\n ], \n \"CLSAGs\": [ {\n \"s\": [ \"e7ecc5f173167accf433667b9d3b61fdfd8cfe3498951e8912d6ef9a79401e09\", \"13b53dc6a14a8e117d053f82020e808b45e15b85d7102d1ccc87739c22124b05\", \"8b2ab71e67f71598bf2b43813fb408df5ecafb1ca6c9761256958b017d7ab00d\", \"4a0a3fdb9ed61908d6559b853d254d86bd50fd85b349a8a9c5386850e4b9ad09\", \"84eed4614a896488fcb1b63cf795a56c12425dfbfe19ee09ac4375e6eb220e0f\", \"f2254d80d1f9fb865d5b176003779f5064ae0949aee694ac89df0fee4d1f3104\", \"d8bf76b06773b27c6ca86e69fb94146ca082a76af02d3e76c6e635fc3bb52408\", \"4f89e8428a61207a4660e9c666e3e74762a62330d56753ad8fa7cf1267f5490c\", \"3ff7596b99bdda95e1bd409107ec45e09a0650f0a8c32dfddfbca2000602c705\", \"427b0fb904ef582e435fef3de34b6a3a07a67031fea098a28695cce2908f230e\", \"80cadb40036b6da75aef391ce13231674edb807af5e04f686027cae475274007\"], \n \"c1\": \"b85ff58b13527f6b1125438e734ac8a1206255a332824004a1a2de9255841403\", \n \"D\": \"98089f34018fce44f334f3b283e58900ffa58f7c2a63641f7d4d946fb44e2b18\"\n }], \n \"pseudoOuts\": [ \"f4ce36baf1b06c026e4055dadb7b06a239a003ba571528a0f16f0f1dd4cbd730\"]\n }\n}", + "{\n \"version\": 2, \n \"unlock_time\": 0, \n \"vin\": [ {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 26305618, 214186, 220428, 336851, 65837, 38465, 288, 691, 5375, 1824, 1840\n ], \n \"k_image\": \"ea3dca7b033d26dbfa8929416a521d567a26591841e679107ce71b663e166902\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 2167636, 13096802, 6366299, 4186337, 391989, 964843, 4477, 6244, 2228, 1236, 3346\n ], \n \"k_image\": \"dcf03a6509e651a29bebc34041caf616455cc292fa2bb643f9b08092ec59453b\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 19121134, 4567604, 1007192, 1931537, 146685, 139811, 73557, 167232, 31581, 4636, 453\n ], \n \"k_image\": \"ce1d3efc8a9b34487b372bb6912b4e2c59383d33e0d43189137a27f01f493e9a\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 25112581, 1421500, 337993, 79642, 51937, 25926, 103448, 7205, 30465, 18848, 1895\n ], \n \"k_image\": \"ae51a3fbeb5e373200caa7b6cbb4e15d816c2da4d118301836f2209aaabcd4a5\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 25060269, 782341, 327746, 843644, 92844, 63377, 10649, 3266, 4783, 2413, 122\n ], \n \"k_image\": \"914de852cc11000c95d5d3e65ab209b4e132f3e065e75a3704b1c7c3208df99a\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 24795907, 2200960, 47849, 46199, 39956, 53693, 1160, 438, 674, 1075, 3570\n ], \n \"k_image\": \"892dac2160c42455b8fbf47e2828900e26f9b471b80c995846d520ed956410df\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 25586230, 622515, 605137, 200850, 29552, 37546, 3338, 67649, 213, 33836, 4467\n ], \n \"k_image\": \"76b78ab2e228f862f25266e2c52e2ece1e2794010904f6dd5e988590a4fee18d\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 23140066, 2624782, 1104249, 131179, 43341, 63242, 56675, 6132, 9322, 9442, 3032\n ], \n \"k_image\": \"6dd6075ac4b83ae6fb7b69c1887c65ea09d7cb85709d143a9e308a6221d33cbd\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 1234181, 2373169, 10112587, 12415655, 910330, 70485, 46915, 23663, 756, 271, 3316\n ], \n \"k_image\": \"1f81508673bacf74c6aef781066c10a465a7cfb9deb2f846492f243b8e8e9673\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 25118325, 1190242, 471362, 220803, 68026, 27163, 5548, 38489, 29623, 16194, 5526\n ], \n \"k_image\": \"13b9e44d6d26c65b26dee7fe6b2eeb00442031730f707007a64b314f05c5e06b\"\n }\n }, {\n \"key\": {\n \"amount\": 0, \n \"key_offsets\": [ 24034938, 2162624, 224516, 621622, 75741, 39550, 9752, 16763, 3247, 633, 2099\n ], \n \"k_image\": \"0c7e0535b7fd3e962d3977f595603a058ad82e92781f376c2ba198c6fc20e491\"\n }\n }\n ], \n \"vout\": [ {\n \"amount\": 0, \n \"target\": {\n \"key\": \"9730581f692a0728b8efdfb3c7ae3abdfb1b0c958c4a7982df4b25fd097501aa\"\n }\n }, {\n \"amount\": 0, \n \"target\": {\n \"key\": \"97f9c20373662034aab669e7578127dc4de22b4962d3f2af15c0608aa38ecf47\"\n }\n }\n ], \n \"extra\": [ 1, 29, 159, 71, 249, 191, 170, 191, 86, 63, 87, 121, 242, 68, 36, 64, 22, 148, 88, 126, 63, 41, 244, 78, 215, 242, 61, 150, 28, 38, 112, 10, 39, 2, 9, 1, 210, 97, 135, 88, 43, 114, 242, 99\n ], \n \"rct_signatures\": {\n \"type\": 5, \n \"txnFee\": 51060000, \n \"ecdhInfo\": [ {\n \"amount\": \"2dced5c109c9b9b2\"\n }, {\n \"amount\": \"08ac9c3103fbbe95\"\n }], \n \"outPk\": [ \"01d77aef7a011842b5b0728e4cda054ef887463f866b736bbdc8c3b3e0127515\", \"169adb51ab9ef98c2a69e5128c0de15eff9d18aff2a07975270e3c82bcbf243b\"]\n }, \n \"rctsig_prunable\": {\n \"nbp\": 1, \n \"bp\": [ {\n \"A\": \"644b284605576983755f83dd835cd1ed3b814b6e97e8e086ca99514d38f78037\", \n \"S\": \"a914bff3c42f6ea5734ebf12890c733484eae20a00c3682720dd0610a6387990\", \n \"T1\": \"69384240bd07ee42bc513ba13a2acbcdffc7f8b66250b01d4700d684c9e4873e\", \n \"T2\": \"a76636030fbb232ef24d9c263db665c920746efa38c8596a05b3e018a93591d3\", \n \"taux\": \"5756c5743b760df7793acaadb4e5837bbc2772a3575a6416622c87d41aca1000\", \n \"mu\": \"f9197932b1d0f7b3cc1f944d4f20c0da483caf9884101b94d84521b75356e10b\", \n \"L\": [ \"2e0aacf2c40ca937115b2d74ab0525a020b96e35d4042fc2b08e13b34c945aa0\", \"ebdc39a041e0674fb4fa41b4d4e92e1516c304251d7c1ac1fca2c4c4e572b70a\", \"5e01def171237a771b3082a567bf3b3f71384b88aa20b9cd8560e712c9222b14\", \"d46c11995f5495d55101e5904536d088ae71da4092fb15432d132e1c217b4097\", \"5354df569b18ef9f505c5ef1ebcc405f9ac117874be42b3378483e1c1cc53727\", \"edf17c870c06f0ae6e2e43e2a9a4b219154ac62b8d73c7ac9ef61a526ce83c35\", \"5a2cc9ea831d33d2c3975ff6fda8f8fb75f3f4ff822df550a2915a139abbe257\"\n ], \n \"R\": [ \"2867babc7a1c77080992dbdda8b44a0949318d787c66e3e1e8cf7ebaf86a2f53\", \"4b899a6b5e38201aa3d403b3c7eb785b60190feb66573d5e33f2a278e6cbd73b\", \"c27262a377da5e5b548dbd65057070450d89c77a68941b94525f12d20eb69af4\", \"28e61e2995d1e6b79056d0cf7e7320252d1aa1f6b6b80e4c441607927ecc4173\", \"232740cfff9b8c5adc75a7743efb801bdf48c73716ccde7a565318ada7413834\", \"0e8760b93a0bb43c6d4cd9e3acb6c9272c13f8ca3d00fbb46074d33337c3f2db\", \"07d7e8ce6cb2a2aae7de846e6050a30492aabf161f290ded39d75cfe34496a51\"\n ], \n \"a\": \"30b1f3c4e9b461b1fa6840ea605f9de5de69614c0020522eebf94156e6062b0c\", \n \"b\": \"7891c9bd44f581d5e0806b6339e837c38742521068b0e2bee2b215183716e307\", \n \"t\": \"ee4d65abde8d082b2ec34a6563906c9d6646e22786880abe357503d860bdc40a\"\n }\n ], \n \"CLSAGs\": [ {\n \"s\": [ \"31f143583299e461b6f755bc7e306dbc1b40d28163b571cda0e6a52ee23d0f05\", \"0ad05279dfb8d1a2aa068f352002f63a70b128fb7c9e37ab6d7d67d9d7d9250d\", \"90e8da0f36f8a1c1ad946afc4d3a115caba0a5d998da5f253f1274a5dd694f09\", \"c7addf0a2cda0c18af0fd4491722ae813bbabad13275358e70d840b66a8b6900\", \"02dff6f7cb6a1065cd467961da306e822d42b3bc70837fbc62b7b61fa9bfa305\", \"00299331a64a62983bbce0fdf983e742a212e5a5ace13106dbba0cccfa9e9502\", \"30c12c1613f4e2cb598053c920940378fa384992b502d8c12fee1340caf71d02\", \"cfe9a8ab5adb94fdf169a324d10fea117fd8256545bce8bbe9ba984a3339270d\", \"7b5d2584b1c76d8152b68a7e45081256a7d0dc2e04c55466f24c224e89294b0d\", \"22564af463256600e9bd82c3a32983feb4978826f71e996273dc8aa9d99fa200\", \"d6e54569c79a1b763b55dc32ff600cf497c3935598abf4a565c5df8b2e13cd0e\"], \n \"c1\": \"13900ae7aa9a24563bdfc96b5332ea0aefda86ea53d72d2c41c58090a6f9450a\", \n \"D\": \"32cbb432d0cffd6f7840dac7fb64a0bbe26b01f213ed5b82feb50eb777eae809\"\n }, {\n \"s\": [ \"89d8008cdce7285643846c8ab8501da53eefbc9de813e43283dbe32936e44c03\", \"0e8ef773f0340e4f3abd4b708605d187a28840386eb35f39d20bee3fe03bc308\", \"cc93bd203534f5f2fa89499e55ab47f8940d12cb49bff092a279b3bff8bf7e0f\", \"76785ef1033066d4ca54b3436e3910d8b609aad897f86261f6a832d67362760e\", \"6613196975951a41d8ccbbb19568a52efaf233754f62d107c01e9056533fd408\", \"57c302a803aa1a02067140b5c806ffff28184d3efb0823a7ef823234e89b2508\", \"4fd57eb40ecb64de3a0f305a0ead319b4397b50bc2ca8137b6e870b9e9a2f10f\", \"e3febc26aee742f3439c3e2f3194cd6ff6838079b300d62a0c3b8b5d8fce0f0c\", \"7e7917da06361491eb3aa88ea6faf5ba7e9cd510c7f5675b02b7f41fd9e4c206\", \"de741282a49e463fdc5ee95afa5855a64781066a9b1dab3f803751acc81b580a\", \"5e0137fd05f2df9f4558866629c087c9d404bb7bf8eef73d5af066b464510401\"], \n \"c1\": \"fa8da5250872e29e9c5d3ce94cc35d61e6adc6c7935fcb7a56dadc37b051b608\", \n \"D\": \"d543211a5472d11d0d3da9fa23705b39b8ecf3377713240abaa420041481fd81\"\n }, {\n \"s\": [ \"aa234723778272c071fb470bc6f973a8d4be4d4fc790bed52684e150e8ac5605\", \"2ff287c6698590fa43dcb46d28cd687fc31de3a5564ae2b73181b9bcae75180c\", \"859ca88673e1a4000aac1088065fa98d16ff70f63b2de7c60a09feaa284d2609\", \"5ac2f4ac0625076b12bd89f29c913da88dd9777e44ca2b03b1c2b5a30fedc008\", \"76b21e3f854b025b2afdb6202fdcbcf1122183ec35f26307b1c584f4f1b0540b\", \"ab280fa6291c367d55cc76126ccf698b3122e3ee31d9ed3da1df4793d40abf09\", \"23343d95061e2d2b656c2291cd519c4c2fbd18e968704b44a7014c3b74e7800f\", \"505f0e803a23bd5f3a50f99027ba0469b9762bc87fb9d626692c9ec923f7b408\", \"14707877bd770f43a365707ca6c6ce8d01ea634450686aa61a7d4180f806ec0a\", \"3ad71336f21d86c322502b2f8ec85eea2187d33d8d23b64cd9748d05f10d8a0c\", \"3f419feda8c536691636e8b0f8f21231a52ada8505c4f609b6e798ebc350650b\"], \n \"c1\": \"22aebda5684b1e3941ec35d4706de5c9b52fd30848bd38b39aca2d50ae287f02\", \n \"D\": \"f2bf0825603a4793fe2e200c21cd74ffa4374cf8039eac6ffaf6da84dc744aac\"\n }, {\n \"s\": [ \"3a94062bbd820939ed53dc501a866bcdae62d1fa6f25c933933d97e86fc28f07\", \"281d41af4cf29dad5cb4053b9a69528daea27fdbfa3e6651c788ce248e980801\", \"e95eaefb4076b7f2467ae8bf9a6ffddd9dbcec76d338124b14b97f7e738c7506\", \"964d8cf3f84e110ee92d75f8def055ee6657266c2a27c5d7c4559bd0f6e5dc06\", \"9a40f9523c154574a407d56b404fa6aa6696c5d7d33151e1575bcc5feff3c60f\", \"a63a046e58d0326b6114a8303902a0ccc5fabba8353ea252971cfa3ad8a22a0e\", \"a99203c5b3992cfd42a25bf0c49b9dad157049464912c310dd8c3c28e919de01\", \"18479cd2a60cbc635485e6b8676bd5da91c2e418603b9de7e32def748a52b60d\", \"39a228535a13b141115fa65ba1d959e4488aff80a76540237836389f61262f03\", \"109ed54940ad67ced0a45e834a2b4427c3e2622b4c5bba17c5b2137d0bfe8001\", \"000783522c6e9d43258cca7f5990c0cb2288c9b3a76a7c19eb06c57cf35a680c\"], \n \"c1\": \"8fca20b1298e1f4fd6a427d5c7cbb6a58f84dbb409334f4d7a96d35f6d3db00f\", \n \"D\": \"04d109faae134665f47b2e8b4369a189fda46088171fd4b8dea527aa7e2035d4\"\n }, {\n \"s\": [ \"dc067dc6eeac4ac84f0058a7e72307bdcf7f3e32671338388d553ba27c8abb0e\", \"bd8071bdd3874712c8c45eb449db51292a19d35815095e76495af4ceb71e9b05\", \"8c357afc02bd42b4e38e7d4a040cd9eb78dd8b83a8c1e6e7116c6c1a8d2bd508\", \"d01f3ec72e04ace4da058140ed045b2fa1cc504aa5a5ba47795edd97481ace02\", \"42e4dc6f59b7f0bef9b9dd2b4b3a4b39d61b5e6f719bbd73889e4fb6d07d3708\", \"b7ec13af76a556e12d8dd51ab5687d8d45a28509515422ef8e9a5da5dc3b1409\", \"d775e493a3e2461e72181cd6b3d557de2a912c297c4ffc1124493815cb59d603\", \"c51481a2446b6ea12ba7ab8d0d51d534721ada976bccac4a157ee877eeea5707\", \"47815398cb1cfdfe854ab8596945095027cea8a6cca0d463328adcebfae57f01\", \"cc7f5f371493ef1cc2412fb8876cc0ac0086608640f16b664a4da0023409a801\", \"ba5217d6c67a4717e1f0105ba4b0654aa820518a9d9f98cacf119d12ff651f0a\"], \n \"c1\": \"43cdb914f638df52e0b12bcd4ad4457ca3f88d323f9301a06d3f3f5601ec0a0c\", \n \"D\": \"4556502357b6a444e7508bdaa33a57d941e87b32110d421be185acfd6f4e739e\"\n }, {\n \"s\": [ \"716389d2c734408df7f4f46c6c48ce70b2c2f7deaa8f8d8a0df4035fd7276700\", \"8ad80a9b5b00c3eb629c3aca2cd5d85624c102738e8d00642d98a83ee434d00d\", \"82ba38ab7190a7ad44d17781e788552983412d564dded006a810a18cd15a610c\", \"1ddaef5a464b5ccde5a4d1e1d78a9c875d09f04984508df99a1df0fa07526505\", \"e2cc9905145251f9598d7689bffbe90d9812e837b123e10226f33d7b2433ae0f\", \"d16d3c04260b2284ce6fb40373868d68863513d886918515d0f224011b81e603\", \"41ed52112a816c8edcc63d27a813a785905b87c17906667ac9d9178291e8a209\", \"262983b736381e03f6119bab87f1f570de35466f436e00555e03d89ca415ab09\", \"afcca572586fee9afc04844d428b900186e07f5991237df4c05501dea9c3b309\", \"16ce0eee462160bf5305fdbd8d40926bea3f9bc5bfe6bbb9ff376ccb3ead4c04\", \"caea03fda281589cbd3c1afa3349c8e9a29bbff069ebcec21cf36455a5f7c101\"], \n \"c1\": \"ac0d3c819dcf90aafea5b0bba2b781bb9c4525f6167696ab92fa9a4f5a9bd20f\", \n \"D\": \"f2852659182d588942aa00b117fe48a092cf75c3d4b0943566ea0d4c3c05f776\"\n }, {\n \"s\": [ \"ef72ff0879d93bc88f819d3d4cfb473339492f6c079fd6d575c6ffcd3f11860b\", \"5198c1ee11bcf806c4e4ea4cc766ae7f7de3ab8d22202465e9f791ff22ac7504\", \"d3b7c272d9c1ea6418bfcf643a33cdc6d9851c023e2d070c910797fc744a890c\", \"216d85bbdaa09f6626b0cc0dfb85ee5cd1bd52c011f489f05595282c40cb3d07\", \"2efa54daec88e67f5ca80b0615fc32e0f9a35c946a764000d7f4d58939512507\", \"2414fcb89f03cbef5ba274de087aa99cbbe0c29f4ba41b53f364ed55ad91b00d\", \"c9f14bce4b4201a6c081348f679267a50a885553fd9182c6db59d84281ae0a01\", \"5bea38d62f63ae43a7830a85c0e5cbd85c4a9c230e58aa9fe16e7d6e5b2a100e\", \"1b0d5f3c319bc93a24165f5e7366b03589011b5244837a24e44f07da11bd3205\", \"c0bb3084012b449fb1ea4792812c8d46ecce8de53817bc9b408173681397860e\", \"df6c2075906e656780969da5630cb7ec1bf8e88cc5fc66c0e6281cb8becf760f\"], \n \"c1\": \"2a54a60aa2c2d0be087a404bb6416f918bd9135d935830c04848257ed2de7009\", \n \"D\": \"6ecf597dfb2b94c0df996785e2c7e3f9ad6f609542411b82a5ec16b7ee1c9d7c\"\n }, {\n \"s\": [ \"53aa36886a8e9baa0744ea79a30992b2fb448798cc5549228c29380e26594a05\", \"f20b086813e981c4492214122cc3d83aaa682137b3b39b0c233d4a8e999b630f\", \"7580147fd23f35bac08cd30121f6232ec736a2b9dfabf292343b1be5725d420d\", \"66e48167c139d3ddbcd25503edd2197080aaef96118165334079d0ba86c44604\", \"bd6a8c95a040118db3ae851a4a2872f23332dea052582d2f36d820f15f422606\", \"842ed02d6ccd460a4bd11ca5fae623be42c361e7ca0d5fc1921848da1b153608\", \"344dcecef75c1c147f435cdfd00590be7ed26a6d60de075f1abc049eb06c8502\", \"0595847106ff10a53e4ebdb2ac134914e10fc9e60443233b7f3e356be61e640f\", \"8bf6e363ed68e56903ff6c00f9e208c6644ee5385580a349555fca8aa9135505\", \"487ea93647be2a0a6e5bb439eb8619ee65ced7ea86add8dc733b530e8839090e\", \"3a43c4dcc439e3d083cdd5a823464583f59275e0003339bd4a6c6c05b319310c\"], \n \"c1\": \"9aec6cf03d696eabd293fdb1fe3c790fd91efecd349df068a3aa06a4b7ed3e00\", \n \"D\": \"e7074c04582d8963af509f2ca34344d13f1099650122128f7e0270fe5db0abb0\"\n }, {\n \"s\": [ \"4511b1d99c2ed9513b25bb659733f84be4468265fea021e07627dee2f49eef02\", \"3f66d45bea98fc0448eb68fcbf3bd41bd0daa0302ef64b81793dce003d2dfd07\", \"9d0de97767eb4427e403d8f9d305796327e5c6cb9559de627ac55fad2c848c00\", \"13eefdab6b1ea9ae118410b381216dbba51865cd24d97967f2c76e4322521609\", \"2f542fe9c096569fbe430141a135206b77f2a59392559c57f1d82d1acb4e490b\", \"6a0f4f620dfbc30c3b90bee41b21369172e90f20a024c4c45f474ad8d58ed201\", \"5bb6023bc398e476e236d0785132d63858324e0bbe541fdfdb9353546c5fe204\", \"b4ea5390de28f17a0c98840fa6fb0964ceac1b9f4a7fb5875c57909c0f11700b\", \"2baea279c5d3a6b06dbc14d52adc63ca391507cf92af5af44e3c3e54a3b29d0b\", \"299fd884f98bf512cc25436f87f76901e74b59ba31072b94d5b68ce931f5b804\", \"8ce02436ec3398d467575a71e43c31581cb6d74484f128cd164bba1a0661c004\"], \n \"c1\": \"275e53f9a974ecccb3336223fdf209adbdabac661636a82887a05e9633adb607\", \n \"D\": \"55d38983e9e0d1c60a8fdc11c3de597f9fda46777be7482c66198ae332e33ac3\"\n }, {\n \"s\": [ \"6e232b38f92173cca99f34f7710ae775aebe4c5b6025f1809a0293238e91d704\", \"9da78ea0c96b4b011a3dd7a043a9fe213ec20578aca0ee23203d3cf7d0d7e903\", \"a7af0d4532dc8183a89385489a92caa605a620531ce41bde25e112661bcd1602\", \"266c06b69fd0cf581961b219ad1139c664ee9cb506d6d3d9cece26b78c78250f\", \"9e0f21bb030309e6000eab8be2e9dbffd4723da9ec5e67483f0e966adab5bd03\", \"58cbc06e9f2b5f5ef35ebbae16b73df007543bd63a4d0482c3542f7260e45f09\", \"90163d7899253e1af34673fb27d97b9c566482dfd6b00018933f1f387899b408\", \"b71952929c2a78e7939345f7c19a08841713a76f11a6cc1b9a261f3c77286b0d\", \"fd1e73b6ed65646045eb0b1a3b0f3150efc0ccc329ac8e5c2caf88183f542702\", \"fa2a27d0d878ef4b4677fc5c90d2e61f413337595e4ce6cfa51c11af6324080c\", \"11975749194d73ba0e04eb3fd7f577cae58c7e0b13b70c9df1b428ba82dedb0f\"], \n \"c1\": \"0e1ebd92a6f123b289657bfd3962d91f97a12fdb6f94e1c43ffdd1f6864a4d08\", \n \"D\": \"3904356f0478a96e52e78db507c070241262b15430546fbd4ae5e1275dfb5d7b\"\n }, {\n \"s\": [ \"7ec939d5fa5df5c9ebbf813acbb4f52e2c0f109617321f1139b3d7c043fc0e0a\", \"364240e90d1c89d0519c69c06685115881b61deed25dcd7e5faf5c5961baf208\", \"b216a06f619e1ec1a49c146ded1e66b3e04c64c41108cc24d29662f8120bda0e\", \"23fc9d4ee7ce7f53a9c207681a372a48a12f4ae978e13549482ca30dc0d78f0f\", \"88a32035a539cd110c6761d8023fccd17f05c7e636616797ec6bb4371ade7f01\", \"0b9f0844f20c6d5a2ebd74b13258f10e3c29eb7c7a62785407691684f4e69108\", \"c091de739e6f95bdb7b89d584e6960424efea380e65c57a75d83e869c6ffcd0b\", \"e94555312e5f138ae3d9eed0f5c58d47502bea39dc7d9ade860624b8319f9a02\", \"a74676776a12414fe369acd379231ce3e042f7fc80f14a9735a0b4e9f05b9a0b\", \"5a61a3f557197aaee04e1bb67787487fd4e85141ada3de903bc75f0763a43805\", \"d57f945548075885f0cf75a92d9679ad24c02aa72d8b5768309b6054c8490209\"], \n \"c1\": \"28bd0f1bda2801d5a6fbb6af2ac06e53e458392276335f81858d3aeabc65ef09\", \n \"D\": \"204bc90ffdd744a7dc53dd6d9cdd6bb1b9b3888a625134e5f4434d2b470b3237\"\n }], \n \"pseudoOuts\": [ \"867a699747a08b1daa4cc8a73220636e3c2162393dd01d04cbb06e0dc20df9b7\", \"1880b92e43a60d164e9203aa40663bcda410439713bf766813c9534785246fcd\", \"a4ad2632b29bb41d965ba84d530157c5d57de6d729a6d97abc2703c742dc8449\", \"94b815d1cc3e20c364d22e6a838bbfbc85273c1d72f805945faf078af6e7020a\", \"6f8a0b2bda76f35e275c973933cd2fef4e45390dc25c1aba9236860abf455213\", \"15e5631f9dd1e226195434d1e8fcc36bdb30d0caccab1155580a584308d5e4f7\", \"0f1b8efd37eedfbe7e0e26133728ec3238c9208265198529b0d587d55a337e10\", \"c58028efa15f31bb0a19472e149d0b7ee984fb0b3d1adf4769e059342422fa9f\", \"44d0b98dbd1071331d5290a13d74ff182b1b04f50fea9c2c6bc7f0d4b967ed9b\", \"8205a9ae1778360103d677acb014878ac32635669af9f65e5cfe35505913976e\", \"79831c69901ad519d417a8bd6dab1d8c8c7e35739d9e72ca74c1c2493a13ff4b\"]\n }\n}" + ], + "untrusted": false +} diff --git a/tests/data/test_jsonrpcdaemon/test_get_version.json b/tests/data/test_jsonrpcdaemon/test_get_version.json new file mode 100644 index 0000000..22911b7 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_get_version.json @@ -0,0 +1,10 @@ +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "release": true, + "status": "OK", + "untrusted": false, + "version": 196613 + } +} diff --git a/tests/data/test_jsonrpcdaemon/test_hard_fork_info.json b/tests/data/test_jsonrpcdaemon/test_hard_fork_info.json new file mode 100644 index 0000000..e96e674 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_hard_fork_info.json @@ -0,0 +1,18 @@ +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "credits": 0, + "earliest_height": 2210720, + "enabled": true, + "state": 2, + "status": "OK", + "threshold": 0, + "top_hash": "", + "untrusted": false, + "version": 14, + "votes": 10080, + "voting": 14, + "window": 10080 + } +} diff --git a/tests/data/test_jsonrpcdaemon/test_in_peers.json b/tests/data/test_jsonrpcdaemon/test_in_peers.json new file mode 100644 index 0000000..8a0b318 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_in_peers.json @@ -0,0 +1,5 @@ +{ + "in_peers": 128, + "status": "OK", + "untrusted": false +} diff --git a/tests/data/test_jsonrpcdaemon/test_in_peers_unlimited.json b/tests/data/test_jsonrpcdaemon/test_in_peers_unlimited.json new file mode 100644 index 0000000..717ee96 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_in_peers_unlimited.json @@ -0,0 +1,5 @@ +{ + "in_peers": 4294967295, + "status": "OK", + "untrusted": false +} diff --git a/tests/data/test_jsonrpcdaemon/test_is_key_image_spent.json b/tests/data/test_jsonrpcdaemon/test_is_key_image_spent.json new file mode 100644 index 0000000..7967ceb --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_is_key_image_spent.json @@ -0,0 +1,12 @@ +{ + "credits": 0, + "spent_status": [ + 1, + 1, + 0, + 2 + ], + "status": "OK", + "top_hash": "", + "untrusted": false +} \ No newline at end of file diff --git a/tests/data/test_jsonrpcdaemon/test_method_not_found.json b/tests/data/test_jsonrpcdaemon/test_method_not_found.json new file mode 100644 index 0000000..147f19a --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_method_not_found.json @@ -0,0 +1,8 @@ +{ + "error": { + "code": -32601, + "message": "Method not found" + }, + "id": "", + "jsonrpc": "2.0" +} diff --git a/tests/data/test_jsonrpcdaemon/test_mining.json b/tests/data/test_jsonrpcdaemon/test_mining.json new file mode 100644 index 0000000..8a26fe0 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_mining.json @@ -0,0 +1 @@ +{"status": "OK", "untrusted": false} \ No newline at end of file diff --git a/tests/data/test_jsonrpcdaemon/test_mining_status_off.json b/tests/data/test_jsonrpcdaemon/test_mining_status_off.json new file mode 100644 index 0000000..b0ab24d --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_mining_status_off.json @@ -0,0 +1,19 @@ +{ + "active": false, + "address": "", + "bg_idle_threshold": 0, + "bg_ignore_battery": false, + "bg_min_idle_seconds": 0, + "bg_target": 0, + "block_reward": 0, + "block_target": 120, + "difficulty": 250236969769, + "difficulty_top64": 0, + "is_background_mining_enabled": false, + "pow_algorithm": "RandomX", + "speed": 0, + "status": "OK", + "threads_count": 0, + "untrusted": false, + "wide_difficulty": "0x3a43492329" +} diff --git a/tests/data/test_jsonrpcdaemon/test_mining_status_on.json b/tests/data/test_jsonrpcdaemon/test_mining_status_on.json new file mode 100644 index 0000000..3d1c4c3 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_mining_status_on.json @@ -0,0 +1,19 @@ +{ + "active": true, + "address": "497e4umLC7pfJ5TSSuU1QY8E1Nh5h5cWfYnvvpTrYFKiQriWfVYeVn2KH8Hpp3AeDRbCSxTvZuUZ1WYd8PGLqM4r5P5hjNQ", + "bg_idle_threshold": 0, + "bg_ignore_battery": false, + "bg_min_idle_seconds": 0, + "bg_target": 0, + "block_reward": 1162352277907, + "block_target": 120, + "difficulty": 252551179535, + "difficulty_top64": 0, + "is_background_mining_enabled": false, + "pow_algorithm": "RandomX", + "speed": 6, + "status": "OK", + "threads_count": 4, + "untrusted": false, + "wide_difficulty": "0x3acd392d0f" +} diff --git a/tests/data/test_jsonrpcdaemon/test_on_get_block_hash_2000000.json b/tests/data/test_jsonrpcdaemon/test_on_get_block_hash_2000000.json new file mode 100644 index 0000000..0b71dcc --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_on_get_block_hash_2000000.json @@ -0,0 +1,5 @@ +{ + "id": 0, + "jsonrpc": "2.0", + "result": "dc2ef85b049311814742f543469e3ec1b8d589e68434d9f220ce41072c69c39e" +} diff --git a/tests/data/test_jsonrpcdaemon/test_out_peers.json b/tests/data/test_jsonrpcdaemon/test_out_peers.json new file mode 100644 index 0000000..eb0650d --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_out_peers.json @@ -0,0 +1,5 @@ +{ + "out_peers": 16, + "status": "OK", + "untrusted": false +} diff --git a/tests/data/test_jsonrpcdaemon/test_out_peers_unlimited.json b/tests/data/test_jsonrpcdaemon/test_out_peers_unlimited.json new file mode 100644 index 0000000..0b3d184 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_out_peers_unlimited.json @@ -0,0 +1,5 @@ +{ + "out_peers": 4294967295, + "status": "OK", + "untrusted": false +} \ No newline at end of file diff --git a/tests/data/test_jsonrpcdaemon/test_relay_tx.json b/tests/data/test_jsonrpcdaemon/test_relay_tx.json new file mode 100644 index 0000000..032d8b8 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_relay_tx.json @@ -0,0 +1,7 @@ +{ + "id": "0", + "jsonrpc": "2.0", + "result": { + "status": "OK" + } +} \ No newline at end of file diff --git a/tests/data/test_jsonrpcdaemon/test_save_bc.json b/tests/data/test_jsonrpcdaemon/test_save_bc.json new file mode 100644 index 0000000..8e99c18 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_save_bc.json @@ -0,0 +1,4 @@ +{ + "status": "OK", + "untrusted": false +} diff --git a/tests/data/test_jsonrpcdaemon/test_set_bans.json b/tests/data/test_jsonrpcdaemon/test_set_bans.json new file mode 100644 index 0000000..d857320 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_set_bans.json @@ -0,0 +1,8 @@ +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "status": "OK", + "untrusted": false + } +} diff --git a/tests/data/test_jsonrpcdaemon/test_set_log_categories_default.json b/tests/data/test_jsonrpcdaemon/test_set_log_categories_default.json new file mode 100644 index 0000000..0dd285f --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_set_log_categories_default.json @@ -0,0 +1,5 @@ +{ + "categories": "default:INFO", + "status": "OK", + "untrusted": false +} diff --git a/tests/data/test_jsonrpcdaemon/test_set_log_categories_empty.json b/tests/data/test_jsonrpcdaemon/test_set_log_categories_empty.json new file mode 100644 index 0000000..a8f8196 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_set_log_categories_empty.json @@ -0,0 +1,5 @@ +{ + "categories": "", + "status": "OK", + "untrusted": false +} diff --git a/tests/data/test_jsonrpcdaemon/test_set_log_categories_multiple.json b/tests/data/test_jsonrpcdaemon/test_set_log_categories_multiple.json new file mode 100644 index 0000000..871ec92 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_set_log_categories_multiple.json @@ -0,0 +1,5 @@ +{ + "categories": "logging:INFO,net:FATAL", + "status": "OK", + "untrusted": false +} \ No newline at end of file diff --git a/tests/data/test_jsonrpcdaemon/test_set_log_hash_rate_mining.json b/tests/data/test_jsonrpcdaemon/test_set_log_hash_rate_mining.json new file mode 100644 index 0000000..8e99c18 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_set_log_hash_rate_mining.json @@ -0,0 +1,4 @@ +{ + "status": "OK", + "untrusted": false +} diff --git a/tests/data/test_jsonrpcdaemon/test_set_log_hash_rate_notmining.json b/tests/data/test_jsonrpcdaemon/test_set_log_hash_rate_notmining.json new file mode 100644 index 0000000..d08abe9 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_set_log_hash_rate_notmining.json @@ -0,0 +1,4 @@ +{ + "status": "NOT MINING", + "untrusted": false +} \ No newline at end of file diff --git a/tests/data/test_jsonrpcdaemon/test_set_log_level.json b/tests/data/test_jsonrpcdaemon/test_set_log_level.json new file mode 100644 index 0000000..8e99c18 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_set_log_level.json @@ -0,0 +1,4 @@ +{ + "status": "OK", + "untrusted": false +} diff --git a/tests/data/test_jsonrpcdaemon/test_stop_daemon.json b/tests/data/test_jsonrpcdaemon/test_stop_daemon.json new file mode 100644 index 0000000..8e99c18 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_stop_daemon.json @@ -0,0 +1,4 @@ +{ + "status": "OK", + "untrusted": false +} diff --git a/tests/data/test_jsonrpcdaemon/test_submit_block_failure.json b/tests/data/test_jsonrpcdaemon/test_submit_block_failure.json new file mode 100644 index 0000000..4daa2b6 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_submit_block_failure.json @@ -0,0 +1,8 @@ +{ + "id": "0", + "jsonrpc": "2.0", + "error": { + "code": -7, + "message": "Block not accepted" + } +} \ No newline at end of file diff --git a/tests/data/test_jsonrpcdaemon/test_sync_info.json b/tests/data/test_jsonrpcdaemon/test_sync_info.json new file mode 100644 index 0000000..0c05e6f --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_sync_info.json @@ -0,0 +1,288 @@ +{ + "id": 0, + "jsonrpc": "2.0", + "result": { + "credits": 0, + "height": 2292442, + "next_needed_pruning_seed": 0, + "overview": "[m]", + "peers": [ + { + "info": { + "address": "54.39.75.54:59545", + "address_type": 1, + "avg_download": 0, + "avg_upload": 0, + "connection_id": "9bded655ad3d44eaa8b51917bdb8edbb", + "current_download": 0, + "current_upload": 0, + "height": 1, + "host": "54.39.75.54", + "incoming": true, + "ip": "54.39.75.54", + "live_time": 1, + "local_ip": false, + "localhost": false, + "peer_id": "0000000000000000", + "port": "59545", + "pruning_seed": 0, + "recv_count": 277, + "recv_idle_time": 1, + "rpc_credits_per_hash": 0, + "rpc_port": 0, + "send_count": 0, + "send_idle_time": 1, + "state": "before_handshake", + "support_flags": 0 + } + }, + { + "info": { + "address": "71.127.156.63:18080", + "address_type": 1, + "avg_download": 2, + "avg_upload": 2, + "connection_id": "7cdec5cac0aa407d8e056060f0dce6b4", + "current_download": 2, + "current_upload": 1, + "height": 2292455, + "host": "71.127.156.63", + "incoming": false, + "ip": "71.127.156.63", + "live_time": 8, + "local_ip": false, + "localhost": false, + "peer_id": "b57c1d628236d6fb", + "port": "18080", + "pruning_seed": 0, + "recv_count": 22374, + "recv_idle_time": 0, + "rpc_credits_per_hash": 0, + "rpc_port": 18089, + "send_count": 17416, + "send_idle_time": 0, + "state": "synchronizing", + "support_flags": 1 + } + }, + { + "info": { + "address": "178.63.100.197:18080", + "address_type": 1, + "avg_download": 110, + "avg_upload": 1, + "connection_id": "e8076d15669c431d90b290a712760359", + "current_download": 110, + "current_upload": 1, + "height": 2292455, + "host": "178.63.100.197", + "incoming": false, + "ip": "178.63.100.197", + "live_time": 9, + "local_ip": false, + "localhost": false, + "peer_id": "449271bcfcef7f09", + "port": "18080", + "pruning_seed": 0, + "recv_count": 1021331, + "recv_idle_time": 1, + "rpc_credits_per_hash": 0, + "rpc_port": 0, + "send_count": 16867, + "send_idle_time": 8, + "state": "normal", + "support_flags": 1 + } + }, + { + "info": { + "address": "165.22.236.24:18080", + "address_type": 1, + "avg_download": 110, + "avg_upload": 0, + "connection_id": "915185f624eb4608947634fde6b9c1fe", + "current_download": 110, + "current_upload": 0, + "height": 2292455, + "host": "165.22.236.24", + "incoming": false, + "ip": "165.22.236.24", + "live_time": 9, + "local_ip": false, + "localhost": false, + "peer_id": "7c7aa2074c6a751b", + "port": "18080", + "pruning_seed": 0, + "recv_count": 1018291, + "recv_idle_time": 8, + "rpc_credits_per_hash": 0, + "rpc_port": 18089, + "send_count": 1930, + "send_idle_time": 9, + "state": "synchronizing", + "support_flags": 1 + } + }, + { + "info": { + "address": "91.134.195.240:6841", + "address_type": 1, + "avg_download": 0, + "avg_upload": 0, + "connection_id": "ae10ae80001644cbaa5d11c89b438ef1", + "current_download": 0, + "current_upload": 0, + "height": 0, + "host": "91.134.195.240", + "incoming": false, + "ip": "91.134.195.240", + "live_time": 8, + "local_ip": false, + "localhost": false, + "peer_id": "0000000000000000", + "port": "6841", + "pruning_seed": 0, + "recv_count": 0, + "recv_idle_time": 8, + "rpc_credits_per_hash": 0, + "rpc_port": 0, + "send_count": 276, + "send_idle_time": 0, + "state": "before_handshake", + "support_flags": 0 + } + }, + { + "info": { + "address": "54.37.179.243:9614", + "address_type": 1, + "avg_download": 1, + "avg_upload": 0, + "connection_id": "d3fded162175437da399925605ca3518", + "current_download": 1, + "current_upload": 0, + "height": 2292442, + "host": "54.37.179.243", + "incoming": false, + "ip": "54.37.179.243", + "live_time": 10, + "local_ip": false, + "localhost": false, + "peer_id": "722e7a576324d872", + "port": "9614", + "pruning_seed": 0, + "recv_count": 15409, + "recv_idle_time": 8, + "rpc_credits_per_hash": 0, + "rpc_port": 0, + "send_count": 390, + "send_idle_time": 8, + "state": "normal", + "support_flags": 1 + } + }, + { + "info": { + "address": "51.79.58.93:37237", + "address_type": 1, + "avg_download": 0, + "avg_upload": 0, + "connection_id": "34a5137c68974507b765e86ef6adf101", + "current_download": 0, + "current_upload": 0, + "height": 1, + "host": "51.79.58.93", + "incoming": true, + "ip": "51.79.58.93", + "live_time": 3, + "local_ip": false, + "localhost": false, + "peer_id": "f872089bd28ee6d8", + "port": "37237", + "pruning_seed": 0, + "recv_count": 277, + "recv_idle_time": 3, + "rpc_credits_per_hash": 0, + "rpc_port": 0, + "send_count": 0, + "send_idle_time": 3, + "state": "normal", + "support_flags": 0 + } + }, + { + "info": { + "address": "51.255.233.156:12189", + "address_type": 1, + "avg_download": 1, + "avg_upload": 0, + "connection_id": "c4b780395a10482dbfbb72e4da1943fc", + "current_download": 1, + "current_upload": 0, + "height": 2292442, + "host": "51.255.233.156", + "incoming": false, + "ip": "51.255.233.156", + "live_time": 10, + "local_ip": false, + "localhost": false, + "peer_id": "47da23ee4994e50e", + "port": "12189", + "pruning_seed": 0, + "recv_count": 15305, + "recv_idle_time": 9, + "rpc_credits_per_hash": 0, + "rpc_port": 0, + "send_count": 1275, + "send_idle_time": 9, + "state": "normal", + "support_flags": 1 + } + }, + { + "info": { + "address": "51.91.33.156:60567", + "address_type": 1, + "avg_download": 1, + "avg_upload": 1, + "connection_id": "0f6283f1d61b4095a95c4dccff7f150f", + "current_download": 0, + "current_upload": 1, + "height": 2292442, + "host": "51.91.33.156", + "incoming": true, + "ip": "51.91.33.156", + "live_time": 11, + "local_ip": false, + "localhost": false, + "peer_id": "9ef7bdcee2a6fa22", + "port": "60567", + "pruning_seed": 0, + "recv_count": 15513, + "recv_idle_time": 0, + "rpc_credits_per_hash": 0, + "rpc_port": 0, + "send_count": 15218, + "send_idle_time": 10, + "state": "normal", + "support_flags": 1 + } + } + ], + "spans": [ + { + "connection_id": "e8076d15669c431d90b290a712760359", + "nblocks": 13, + "rate": 982529, + "remote_address": "178.63.100.197:18080", + "size": 998309, + "speed": 100, + "start_block_height": 2292442 + } + ], + "status": "OK", + "target_height": 2292455, + "top_hash": "", + "untrusted": false + } +} diff --git a/tests/data/test_jsonrpcdaemon/test_update_check_none.json b/tests/data/test_jsonrpcdaemon/test_update_check_none.json new file mode 100644 index 0000000..1385cb8 --- /dev/null +++ b/tests/data/test_jsonrpcdaemon/test_update_check_none.json @@ -0,0 +1,10 @@ +{ + "auto_uri": "", + "hash": "", + "path": "", + "status": "OK", + "untrusted": false, + "update": false, + "user_uri": "", + "version": "" +} diff --git a/tests/test_jsonrpcdaemon.py b/tests/test_jsonrpcdaemon.py index 15dc749..44d9a30 100644 --- a/tests/test_jsonrpcdaemon.py +++ b/tests/test_jsonrpcdaemon.py @@ -1,4 +1,5 @@ import decimal +import json import logging import os import responses @@ -6,7 +7,7 @@ import responses from monero.const import NET_STAGE from monero.daemon import Daemon from monero.backends.jsonrpc import JSONRPCDaemon, RPCError -from monero.exceptions import TransactionWithoutBlob +from monero.exceptions import TransactionWithoutBlob, DaemonIsBusy from monero.transaction import Transaction from .base import JSONTestCase @@ -16,10 +17,30 @@ class JSONRPCDaemonTestCase(JSONTestCase): mempool_url = 'http://127.0.0.1:18081/get_transaction_pool' transactions_url = 'http://127.0.0.1:18081/get_transactions' sendrawtransaction_url = 'http://127.0.0.1:18081/sendrawtransaction' + getheight_url = 'http://127.0.0.1:18081/get_height' + getaltblockshashes_url = 'http://127.0.0.1:18081/get_alt_blocks_hashes' + iskeyimagespent_url = 'http://127.0.0.1:18081/is_key_image_spent' + startmining_url = 'http://127.0.0.1:18081/start_mining' + stopmining_url = 'http://127.0.0.1:18081/stop_mining' + miningstatus_url = 'http://127.0.0.1:18081/mining_status' + savebc_url = 'http://127.0.0.1:18081/save_bc' + getpeerlist_url = 'http://127.0.0.1:18081/get_peer_list' + setloghashrate_url = 'http://127.0.0.1:18081/set_log_hash_rate' + setloglevel_url = 'http://127.0.0.1:18081/set_log_level' + setlogcategories_url = 'http://127.0.0.1:18081/set_log_categories' + gettransactionpoolstats_url = 'http://127.0.0.1:18081/get_transaction_pool_stats' + stopdaemon_url = 'http://127.0.0.1:18081/stop_daemon' + getlimit_url = 'http://127.0.0.1:18081/get_limit' + setlimit_url = 'http://127.0.0.1:18081/set_limit' + outpeers_url = 'http://127.0.0.1:18081/out_peers' + inpeers_url = 'http://127.0.0.1:18081/in_peers' + getouts_url = 'http://127.0.0.1:18081/get_outs' + update_url = 'http://127.0.0.1:18081/update' data_subdir = 'test_jsonrpcdaemon' def setUp(self): self.daemon = Daemon(JSONRPCDaemon()) + self.backend = self.daemon._backend # this is disabled b/c raw_request logs errors logging.getLogger('monero.backends.jsonrpc.daemon').disabled = True @@ -212,3 +233,975 @@ class JSONRPCDaemonTestCase(JSONTestCase): with self.assertRaises(ValueError): daemon3 = Daemon(backend=JSONRPCDaemon(), port=18089) + + @responses.activate + def test_busy_daemon(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_get_last_block_header_BUSY.json'), + status=200) + + with self.assertRaises(DaemonIsBusy): + self.backend.get_last_block_header() + + # Start testing all JSONRPC commands + @responses.activate + def test_get_block_count(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_get_block_count_2287024.json'), + status=200) + + resp = self.backend.get_block_count() + + self.assertEqual(resp['status'], 'OK') + self.assertEqual(resp['count'], 2287024) + + @responses.activate + def test_on_get_block_hash(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_on_get_block_hash_2000000.json'), + status=200) + + self.assertEqual( + self.backend.on_get_block_hash(2000000), + 'dc2ef85b049311814742f543469e3ec1b8d589e68434d9f220ce41072c69c39e') + + with self.assertRaises(ValueError): + self.backend.on_get_block_hash(-2023) + + @responses.activate + def test_get_block_template(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_get_block_template_481SgRxo_64.json'), + status=200) + + resp = self.backend.get_block_template( + '481SgRxo8hwBCY4z6r88JrN5X8JFCJYuJUDuJXGybTwaVKyoJPKoGj3hQRAEGgQTdmV1xH1URdnHkJv6He5WkEbq6iKhr94', + reserve_size=64) + + self.assertTrue(resp['blocktemplate_blob'].startswith( + '0e0ec890de8006fbe94dbaf09e5fc4431460ede46c0e7c3db4adf1f0a6f34c5a0f5144e6d9dd27')) + self.assertTrue(resp['blockhashing_blob'].startswith( + '0e0ec890de8006fbe94dbaf09e5fc4431460ede46c0e7c3db4adf1f0a6f34c5a0f5144e6d9dd27')) + self.assertEqual(resp['difficulty'], 232871166515) + self.assertEqual(resp['difficulty_top64'], 0) + self.assertEqual(resp['expected_reward'], 1180703555413) + self.assertEqual(resp['height'], 2287042) + self.assertEqual(resp['prev_hash'], 'fbe94dbaf09e5fc4431460ede46c0e7c3db4adf1f0a6f34c5a0f5144e6d9dd27') + self.assertEqual(resp['reserved_offset'], 130) + self.assertEqual(resp['seed_hash'], 'd432f499205150873b2572b5f033c9c6e4b7c6f3394bd2dd93822cd7085e7307') + self.assertEqual(resp['seed_height'], 2285568) + self.assertEqual(resp['status'], 'OK') + self.assertEqual(resp['untrusted'], False) + self.assertEqual(resp['wide_difficulty'], '0x3638340233') + + with self.assertRaises(ValueError): + self.backend.get_block_template( + '481SgRxo8hwBCY4z6r88JrN5X8JFCJYuJUDuJXGybTwaVKyoJPKoGj3hQRAEGgQTdmV1xH1URdnHkJv6He5WkEbq6iKhr94', + -49) + + with self.assertRaises(ValueError): + self.backend.get_block_template( + 'ThisIsAnInvalidWalletAddressSoThisShouldThrowAnError', + 30) + + @responses.activate + def test_submit_block(self): + # @TODO I need a more thorough test for this routine, but I do have have an example of a response for a successfully + # mined block, sadly. Maybe we can use the project donations to purchase an AMD EPYC 7742 for "research" ;) + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_submit_block_failure.json'), + status=200) + + with self.assertRaises(RPCError): + self.backend.submit_block(b'this is not a block and should not work') + + @responses.activate + def test_get_last_block_header(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_get_last_block_header_success.json'), + status=200) + + resp = self.backend.get_last_block_header() + + self.assertEqual(resp['status'], 'OK') + + block_header = resp['block_header'] + + self.assertEqual(block_header['block_size'], 65605) + self.assertEqual(block_header['block_weight'], 65605) + self.assertEqual(block_header['cumulative_difficulty'], 86426998743673801) + self.assertEqual(block_header['cumulative_difficulty_top64'], 0) + self.assertEqual(block_header['wide_cumulative_difficulty'], "0x1330ce5bf1eabc9") + self.assertEqual(block_header['depth'], 0) + self.assertEqual(block_header['difficulty'], 253652891944) + self.assertEqual(block_header['difficulty_top64'], 0) + self.assertEqual(block_header['wide_difficulty'], "0x3b0ee3f928") + self.assertEqual(block_header['hash'], "a55ec867052340715c4b8b4dcd2de53bc2a195e666058d10a224037932ccdc40") + self.assertEqual(block_header['height'], 2287573) + self.assertEqual(block_header['long_term_weight'], 65605) + self.assertEqual(block_header['major_version'], 14) + self.assertEqual(block_header['minor_version'], 14) + self.assertEqual(block_header['miner_tx_hash'], "42219818a7f30910a89e0d0d9fc479950137b93820e5955fc071fa8f4e3c2400") + self.assertEqual(block_header['nonce'], 37920) + self.assertEqual(block_header['num_txes'], 34) + self.assertEqual(block_header['orphan_status'], False) + self.assertEqual(block_header['pow_hash'], "") + self.assertEqual(block_header['prev_hash'], "7ca630666d7040f0cadbaaf9da92db4797ef67b60ca8f15324b94236ffe0b3a8") + self.assertEqual(block_header['reward'], 1181081601887) + self.assertEqual(block_header['timestamp'], 1612215053) + + @responses.activate + def test_get_block_header_by_hash(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_get_block_header_by_hash_90f6fd3f.json'), + status=200) + + resp = self.backend.get_block_header_by_hash('90f6fd3fe29c7518f15afd2da31734e890cc24247b5da10dc9ac2ea215ae844b') + + self.assertIn('block_header', resp) + self.assertIn('status', resp) + self.assertIn('untrusted', resp) + + block_header = resp['block_header'] + + self.assertEqual(block_header['block_size'], 17130) + self.assertEqual(block_header['block_weight'], 17130) + self.assertEqual(block_header['cumulative_difficulty'], 86641187797059581) + self.assertEqual(block_header['cumulative_difficulty_top64'], 0) + self.assertEqual(block_header['wide_cumulative_difficulty'], "0x133cfb3858fc7fd") + self.assertEqual(block_header['depth'], 4) + self.assertEqual(block_header['difficulty'], 239025076303) + self.assertEqual(block_header['difficulty_top64'], 0) + self.assertEqual(block_header['wide_difficulty'], "0x37a701384f") + self.assertEqual(block_header['hash'], "90f6fd3fe29c7518f15afd2da31734e890cc24247b5da10dc9ac2ea215ae844b") + self.assertEqual(block_header['height'], 2288453) + self.assertEqual(block_header['long_term_weight'], 17130) + self.assertEqual(block_header['major_version'], 14) + self.assertEqual(block_header['minor_version'], 14) + self.assertEqual(block_header['miner_tx_hash'], "5e8d9531ae078ef5630e3c9950eb768b87b31481652c2b8dafca25d57e9c0c3f") + self.assertEqual(block_header['nonce'], 1040830456) + self.assertEqual(block_header['num_txes'], 11) + self.assertEqual(block_header['orphan_status'], False) + self.assertEqual(block_header['pow_hash'], "") + self.assertEqual(block_header['prev_hash'], "a78d9e631f743806b0b8d3a70bb85758db466633eb3b4620737dd29b0548eb21") + self.assertEqual(block_header['reward'], 1176972120146) + self.assertEqual(block_header['timestamp'], 1612323209) + + with self.assertRaises(ValueError): + self.backend.get_block_header_by_hash('HeyWaitAMinuteThisIsntAHashYouLiedToMeHowCouldYouDoThisToMeITrustedYou') + + @responses.activate + def test_get_block_header_by_height(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_get_block_header_by_height_2288495.json'), + status=200) + + resp = self.backend.get_block_header_by_height(2288495) + + self.assertIn('block_header', resp) + self.assertIn('status', resp) + self.assertIn('untrusted', resp) + + block_header = resp['block_header'] + + self.assertEqual(block_header['block_size'], 8415) + self.assertEqual(block_header['block_weight'], 8415) + self.assertEqual(block_header['cumulative_difficulty'], 86651164421641270) + self.assertEqual(block_header['cumulative_difficulty_top64'], 0) + self.assertEqual(block_header['wide_cumulative_difficulty'], "0x133d8c662b9d436") + self.assertEqual(block_header['depth'], 3) + self.assertEqual(block_header['difficulty'], 238154836806) + self.assertEqual(block_header['difficulty_top64'], 0) + self.assertEqual(block_header['wide_difficulty'], "0x3773226b46") + self.assertEqual(block_header['hash'], "966c1a70358ce998e7d5fb243b155971f9bffe06030c92dbd70486d398c40c05") + self.assertEqual(block_header['height'], 2288495) + self.assertEqual(block_header['long_term_weight'], 8415) + self.assertEqual(block_header['major_version'], 14) + self.assertEqual(block_header['minor_version'], 14) + self.assertEqual(block_header['miner_tx_hash'], "408dd52531cab37e51db5a9a581bf25691b5534d8d0037b38e68061691b976e1") + self.assertEqual(block_header['nonce'], 1275098057) + self.assertEqual(block_header['num_txes'], 5) + self.assertEqual(block_header['orphan_status'], False) + self.assertEqual(block_header['pow_hash'], "") + self.assertEqual(block_header['prev_hash'], "47751e6eb31230e92a5ee98242aa34d79bfd48657f2727c9a9b3cbad6aee88bb") + self.assertEqual(block_header['reward'], 1176760892780) + self.assertEqual(block_header['timestamp'], 1612328193) + + with self.assertRaises(ValueError): + self.backend.get_block_header_by_height(-69420) + + @responses.activate + def test_get_block_headers_range(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_get_block_headers_range_2288491_2288500.json'), + status=200) + + resp = self.backend.get_block_header_by_height(2288495) + + self.assertIn('headers', resp) + self.assertIn('status', resp) + self.assertIn('untrusted', resp) + + headers = resp['headers'] + + self.assertEqual(len(headers), 10) + + block_header_0 = headers[0] + + self.assertEqual(block_header_0['block_size'], 49559) + self.assertEqual(block_header_0['block_weight'], 49559) + self.assertEqual(block_header_0['cumulative_difficulty'], 86650214633914049) + self.assertEqual(block_header_0['cumulative_difficulty_top64'], 0) + self.assertEqual(block_header_0['wide_cumulative_difficulty'], "0x133d7e93ef73ec1") + self.assertEqual(block_header_0['depth'], 19) + self.assertEqual(block_header_0['difficulty'], 236253710852) + self.assertEqual(block_header_0['difficulty_top64'], 0) + self.assertEqual(block_header_0['wide_difficulty'], "0x3701d18a04") + self.assertEqual(block_header_0['hash'], "01a5a129515e752055af9883ac98cdbd9eb90db16ab69ea187a1eb24eb7d0c66") + self.assertEqual(block_header_0['height'], 2288491) + self.assertEqual(block_header_0['long_term_weight'], 49559) + self.assertEqual(block_header_0['major_version'], 14) + self.assertEqual(block_header_0['minor_version'], 14) + self.assertEqual(block_header_0['miner_tx_hash'], "22c3dd706931fe0606e086147dcb8a984b504a5bd0eabd1cf7dabb9456154cd4") + self.assertEqual(block_header_0['nonce'], 922780730) + self.assertEqual(block_header_0['num_txes'], 26) + self.assertEqual(block_header_0['orphan_status'], False) + self.assertEqual(block_header_0['pow_hash'], "") + self.assertEqual(block_header_0['prev_hash'], "6bd071b487be697128142b9b132be8d2c3e4ee9660f73d811c3d23e4526e56ac") + self.assertEqual(block_header_0['reward'], 1178084560299) + self.assertEqual(block_header_0['timestamp'], 1612327847) + + with self.assertRaises(ValueError): + self.backend.get_block_headers_range(-1, 10) + + with self.assertRaises(ValueError): + self.backend.get_block_headers_range(70, 25) + + @responses.activate + def test_get_block_with_height(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_get_block_2288515.json'), + status=200) + + resp = self.backend.get_block(height=2288515) + + resp_fields = ['blob', 'block_header', 'credits', 'json', 'miner_tx_hash', 'status', 'tx_hashes', 'untrusted'] + for field in resp_fields: + self.assertIn(field, resp) + + self.assertTrue(resp['blob'].startswith('0e0efef0e880066d78ace422007a2cefb423553b3')) + self.assertEqual(len(resp['tx_hashes']), 17) + self.assertEqual(resp['status'], 'OK') + self.assertTrue(type(resp['block_header']), dict) + + json.loads(resp['json']) + + with self.assertRaises(ValueError): + self.backend.get_block() + + with self.assertRaises(ValueError): + self.backend.get_block(height=2288515, hash='1c68300646dda11a89cc9ca4001100745fcbd192e0e6efb6b06bd4d25851662b') + + with self.assertRaises(ValueError): + self.backend.get_block(height=-5) + + @responses.activate + def test_get_block_with_hash(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_get_block_2288515.json'), + status=200) + + resp = self.backend.get_block(hash='1c68300646dda11a89cc9ca4001100745fcbd192e0e6efb6b06bd4d25851662b') + + resp_fields = ['blob', 'block_header', 'credits', 'json', 'miner_tx_hash', 'status', 'tx_hashes', 'untrusted'] + + for field in resp_fields: + self.assertIn(field, resp) + + self.assertTrue(resp['blob'].startswith('0e0efef0e880066d78ace422007a2cefb423553b3')) + self.assertEqual(len(resp['tx_hashes']), 17) + self.assertEqual(resp['status'], 'OK') + self.assertTrue(type(resp['block_header']), dict) + + json.loads(resp['json']) + + with self.assertRaises(ValueError): + self.backend.get_block(hash='STUPIDHECKINGBADHASH') + + @responses.activate + def test_get_connections(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_get_connections.json'), + status=200) + + resp = self.backend.get_connections() + + self.assertIn('connections', resp) + + connections = resp['connections'] + + self.assertNotEqual(len(connections), 0) + + connection0 = connections[0] + + for conn_field in ['address', 'address_type', 'avg_download', 'avg_upload', 'connection_id', 'current_download', 'current_upload', + 'height', 'host', 'incoming', 'ip', 'live_time', 'local_ip', 'localhost', 'peer_id', 'port', 'pruning_seed', 'recv_count', 'recv_idle_time', + 'rpc_credits_per_hash', 'rpc_port', 'send_count', 'send_idle_time', 'state', 'support_flags']: + self.assertIn(conn_field, connection0) + + @responses.activate + def test_get_info(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_get_info.json'), + status=200) + + resp = self.backend.get_info() + + for info_field in ['adjusted_time', 'alt_blocks_count', 'block_size_limit', 'block_size_median', 'block_weight_limit', 'block_weight_median', + 'bootstrap_daemon_address', 'busy_syncing', 'credits', 'cumulative_difficulty', 'cumulative_difficulty_top64', 'database_size', 'difficulty', + 'difficulty_top64', 'free_space', 'grey_peerlist_size', 'height', 'height_without_bootstrap', 'incoming_connections_count', 'mainnet', 'nettype', + 'offline', 'outgoing_connections_count', 'rpc_connections_count', 'stagenet', 'start_time', 'status', 'synchronized', 'target', 'target_height', + 'testnet', 'top_block_hash', 'top_hash', 'tx_count', 'tx_pool_size', 'untrusted', 'update_available', 'version', 'was_bootstrap_ever_used', + 'white_peerlist_size', 'wide_cumulative_difficulty', 'wide_difficulty']: + self.assertIn(info_field, resp) + + @responses.activate + def test_hard_fork_info(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_hard_fork_info.json'), + status=200) + + resp = self.backend.hard_fork_info() + + for fork_field in ["earliest_height", "enabled", "state", "status", "threshold", "version", "votes", "voting", "window"]: + self.assertIn(fork_field, resp) + + @responses.activate + def test_set_bans_single(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_set_bans.json'), + status=200) + + resp = self.backend.set_bans('188.165.17.204', True, 3600) + + self.assertEqual(resp['status'], 'OK') + + @responses.activate + def test_set_bans_multiple(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_set_bans.json'), + status=200) + + + ips = ['188.165.17.204', 1466097787, '87.98.224.124'] + bans = [True, True, False] + seconds = [3600, 500, 7200] + + self.backend.set_bans(ips, bans, seconds) + + def test_set_bans_errors(self): + bad_ips = [-1, 99999999999, 69420, '300.1.1.1', '125.124.123', '8.8.8.8'] + bad_bans = [False, False, True, False, True, True] + bad_seconds = [0, None, None, 60, 4000, None] + + for i in range(len(bad_ips)): + with self.assertRaises(ValueError): + self.backend.set_bans(bad_ips[i], bad_bans[i], bad_seconds[i]) + + @responses.activate + def test_get_bans(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_get_bans.json'), + status=200) + + resp = self.backend.get_bans() + + self.assertIn('bans', resp) # Should always be true bc I insert bans field when not given + bans = resp['bans'] + ban0 = bans[0] + + self.assertEqual(ban0['host'], '145.239.118.5') + self.assertEqual(ban0['ip'], 91680657) + self.assertEqual(ban0['seconds'], 72260) + + @responses.activate + def test_flush_txpool_all(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_flush_txpool.json'), + status=200) + + + self.backend.flush_txpool() + + @responses.activate + def test_flush_txpool_single(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_flush_txpool.json'), + status=200) + + + self.backend.flush_txpool('65971f85ee13782f1f664cc8034a10b361b8b71ef821b323405ee0f698adb702') + + @responses.activate + def test_flush_txpool_multiple(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_flush_txpool.json'), + status=200) + + txs_to_flush = ['51bd0eebbb32392d4b4646e8b398432b9f42dee0e41f4939305e13e9f9a28e08', + 'ae9f8cbfdbae825e61c2745dc77c533fb9811e42ab9b3810d9529794c5bc9404'] + + self.backend.flush_txpool(txs_to_flush) + + @responses.activate + def test_get_output_histogram(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_get_output_histogram_1and5.json'), + status=200) + + resp = self.backend.get_output_histogram([1e12, 5e12], 10, 100000000, True, 10) + + histogram = resp['histogram'] + + self.assertEqual(histogram[0]['amount'], 1e12) + self.assertEqual(histogram[0]['recent_instances'], 874619) + self.assertEqual(histogram[0]['total_instances'], 874619) + self.assertEqual(histogram[0]['unlocked_instances'], 874619) + + @responses.activate + def test_get_coinbase_tx_sum(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_get_coinbase_tx_sum_2200000.json'), + status=200) + + resp = self.backend.get_coinbase_tx_sum(2200000, 100) + + self.assertEqual(resp['emission_amount'], 139291580971286) + self.assertEqual(resp['emission_amount_top64'], 0) + self.assertEqual(resp['wide_emission_amount'], '0x7eaf59343916') + self.assertEqual(resp['fee_amount'], 505668215000) + self.assertEqual(resp['fee_amount_top64'], 0) + self.assertEqual(resp['wide_fee_amount'], '0x75bc2ca0d8') + + @responses.activate + def test_get_version(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_get_version.json'), + status=200) + + resp = self.backend.get_version() + + self.assertEqual(resp['release'], True) + self.assertEqual(resp['status'], 'OK') + self.assertEqual(resp['untrusted'], False) + self.assertEqual(resp['version'], 196613) + + @responses.activate + def test_get_fee_estimate(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_get_fee_estimate.json'), + status=200) + + resp = self.backend.get_fee_estimate() + + self.assertEqual(resp['fee'], 7790) + self.assertEqual(resp['quantization_mask'], 10000) + self.assertEqual(resp['status'], 'OK') + self.assertEqual(resp['untrusted'], False) + + @responses.activate + def test_get_fee_estimate_with_grace(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_get_fee_estimate.json'), + status=200) + + resp = self.backend.get_fee_estimate(grace_blocks=10) + + self.assertEqual(resp['fee'], 7790) + self.assertEqual(resp['quantization_mask'], 10000) + self.assertEqual(resp['status'], 'OK') + self.assertEqual(resp['untrusted'], False) + + def test_get_fee_estimate_errors(self): + with self.assertRaises(TypeError): + self.backend.get_fee_estimate(5.5) + + with self.assertRaises(ValueError): + self.backend.get_fee_estimate(-100) + + @responses.activate + def test_get_alternate_chains(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_get_alternate_chains.json'), + status=200) + + resp = self.backend.get_alternate_chains() + + chains = resp['chains'] + chain0 = chains[0] + + self.assertEqual(chain0['block_hash'], '697cf03c89a9b118f7bdf11b1b3a6a028d7b3617d2d0ed91322c5709acf75625') + self.assertEqual(chain0['difficulty'], 14114729638300280) + self.assertEqual(chain0['height'], 1562062) + self.assertEqual(chain0['length'], 2) + + @responses.activate + def test_relay_tx_single(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_relay_tx.json'), + status=200) + + resp = self.backend.relay_tx('9fd75c429cbe52da9a52f2ffc5fbd107fe7fd2099c0d8de274dc8a67e0c98613') + + self.assertEqual(resp['status'], 'OK') + + @responses.activate + def test_relay_tx_multiple(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_relay_tx.json'), + status=200) + + txs = ['70ee3df366870d8ca2099b273c1ae1c909a964b053077ead5c186c8b160c9d00', + '018476f726efb2d2b5a4a3ba6c29fb4f00549b0dcef6183b2bfa38a7acb1a804'] + resp = self.backend.relay_tx(txs) + + self.assertEqual(resp['status'], 'OK') + + @responses.activate + def test_sync_info(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_sync_info.json'), + status=200) + + resp = self.backend.sync_info() + + height = resp['height'] + peers = resp['peers'] + spans = resp['spans'] + + pinfo0 = peers[0]['info'] + + self.assertEqual(height, 2292442) + self.assertEqual(pinfo0['address'], '54.39.75.54:59545') + self.assertEqual(pinfo0['connection_id'], '9bded655ad3d44eaa8b51917bdb8edbb') + self.assertEqual(pinfo0['host'], '54.39.75.54') + self.assertEqual(pinfo0['port'], '59545') + self.assertEqual(pinfo0['recv_count'], 277) + self.assertEqual(pinfo0['incoming'], True) + + span0 = spans[0] + + self.assertEqual(span0, { + "connection_id": "e8076d15669c431d90b290a712760359", + "nblocks": 13, + "rate": 982529, + "remote_address": "178.63.100.197:18080", + "size": 998309, + "speed": 100, + "start_block_height": 2292442 + }) + + @responses.activate + def test_get_txpool_backlog(self): + pass + + @responses.activate + def test_get_output_distribution(self): + pass + + @responses.activate + def test_get_height(self): + responses.add(responses.POST, self.getheight_url, + json=self._read('test_get_height_2294632.json'), + status=200) + + resp = self.backend.get_height() + + self.assertEqual(resp['height'], 2294632) + self.assertEqual(resp['hash'], '228c0538b7ba7d28fdd58ed310326db61ea052038bdb42652f6e1852cf666325') + + @responses.activate + def test_get_transactions(self): + responses.add(responses.POST, self.transactions_url, + json=self._read('test_get_transactions.json'), + status=200) + + resp = self.backend.get_transactions(['c6802ca1805784c7330e71521a318c302f88625b0eab80740cfab24af7b0cb93', + 'ae476cae3ad2b44c6c2614b9435adbe304e24c59d410fe3b4dd046a9021d66b9'], decode_as_json=True, prune=False) + + self.assertEqual(resp['txs_as_hex'][0], + '02000102000bbdef820aa8e5f901a3cc79a337b5d601aadb01af55fb44d90b8f0c850bda856b62f04c77bf46f46954b8caa82097b9386b0a501277262' + 'c68601ed917ac020002d4871f51832c1951212b3d87395a8df5594e927588221e665a018c098968cc8b000262d52033f1a3c921f1db56eca9b5dd50f3' + '6ecf76e22e67cc694fb7c214a609ef2c0164d167ad3d6f762414567f5812585fe7f48d3400cd51d999b020899658526567020901795c32b0b5ba9ce30' + '580cfe81a73e3d349bd53dfa8fa66a93993f6921ff0457386671f45ef33760947513b71ec6398ff0e2ebb5edde433e452b9035112714a290806bedd15' + 'cd5293ea33be5bec57e983042840d75f66b7ca31c599f4ca0179a0ea918ad50e7e2d10784dffb56eeb39d4c92236c4904c1ecebd5b90ad6b797f9bace' + '3566394d8a2558232b8f8262317dcc3da8038bc46119eb891371d71f940e15801c6ddf29ddf034c0e277ce87d4343cb821fece9c74b1e04ecec914c34' + 'c5b7bb518042b1ca36de80e451aca0c44d93298d4a4ec31a2a1aa8b5b437a6aab043ed66a681ba1f5f7773fa140176ddcdb2a0e7c9ae3163094671bf3' + '48d5504bc2b168891c1a599ce00acfe3a430c9c58370fe53b96a4d64155b03b5f30ee0307f95bde576a409f86100e2bcfe81d19d2407134310dce6ff9' + '53f668e810d48f12f3fd61b6c0f00819a18b75ae762b03dd97ba40ffc5a791318bf019f989e85f09385b4b9b74c8500321fb918e13f3bbd0a2fdf5749' + '318f152e2a0f994f11b848e0157e0b3c44afab6653ef0815ad1e0d76ba1141d5abb61f8b078a57413d3374b3aa78fbea4de0604d470a12a21da6fea3c' + '765e9ddec5d50b8f76f079f9c61c17b25822612418444181adf9e334a695aaabec779edf8842dbdbae99461c608dc0096113d8da040c3b5bd94dc796a' + 'a1daaa740839fd0f4363fa60b8c3e84fddc43075ae595d323dc7cff3db06df16d2eb08bdceca623de357e6cfd59deedcba29a203bbbbaadcc18bdd1ce' + '03ba2d1bd16bc5e666b8006b473f339841199c5c183c5b78b420bd896cd50b2aa7b9f9fcba3615abe0f734c830320a8e9830976bbcae9a8e77676c4a3' + 'd944a3dca84fed10d242b12da93e9e37be272a933b45b23b8f4c20c8dc6bc3f0d56878639b7900f505e6060806939e9f7f417fd10965fc564c7f00893' + 'b920b6c32ff2e546dd40ec4414a110b052e97d3d74255190c0032f0826f87f155779e21e9b5b6a9300d6a2bde804ec0e107cde3f600ab5572cdda0964' + '5147cbbfcbf4c3681cb6965770ebb2b298151c354e45aab0e1ab77d414a30362a0091230d667e4ac44f5448cdf319b170c92f20d8c44b620f3b451732' + '8bf4ece003dba9db9a71d0531ddd329adbcc4f6c408caeaebabe477bc1084f1da40cc4ca03e7ecc5f173167accf433667b9d3b61fdfd8cfe3498951e8' + '912d6ef9a79401e0913b53dc6a14a8e117d053f82020e808b45e15b85d7102d1ccc87739c22124b058b2ab71e67f71598bf2b43813fb408df5ecafb1c' + 'a6c9761256958b017d7ab00d4a0a3fdb9ed61908d6559b853d254d86bd50fd85b349a8a9c5386850e4b9ad0984eed4614a896488fcb1b63cf795a56c1' + '2425dfbfe19ee09ac4375e6eb220e0ff2254d80d1f9fb865d5b176003779f5064ae0949aee694ac89df0fee4d1f3104d8bf76b06773b27c6ca86e69fb' + '94146ca082a76af02d3e76c6e635fc3bb524084f89e8428a61207a4660e9c666e3e74762a62330d56753ad8fa7cf1267f5490c3ff7596b99bdda95e1b' + 'd409107ec45e09a0650f0a8c32dfddfbca2000602c705427b0fb904ef582e435fef3de34b6a3a07a67031fea098a28695cce2908f230e80cadb40036b' + '6da75aef391ce13231674edb807af5e04f686027cae475274007b85ff58b13527f6b1125438e734ac8a1206255a332824004a1a2de925584140398089' + 'f34018fce44f334f3b283e58900ffa58f7c2a63641f7d4d946fb44e2b18f4ce36baf1b06c026e4055dadb7b06a239a003ba571528a0f16f0f1dd4cbd730') + + self.assertEqual(resp['txs'][0]['block_height'], 2295433) + self.assertEqual(resp['txs'][0]['block_timestamp'], 1613160690) + self.assertEqual(resp['txs'][1]['in_pool'], True) + + json.loads(resp['txs'][0]['as_json']) + + @responses.activate + def test_get_alt_blocks_hashes(self): + responses.add(responses.POST, self.getaltblockshashes_url, + json=self._read('test_get_alt_blocks_hashes_doc_example.json'), + status=200) + + resp = self.backend.get_alt_blocks_hashes() + + hashes = ["9c2277c5470234be8b32382cdf8094a103aba4fcd5e875a6fc159dc2ec00e011","637c0e0f0558e284493f38a5fcca3615db59458d90d3a5eff0a18ff59b83f46f", + "6f3adc174a2e8082819ebb965c96a095e3e8b63929ad9be2d705ad9c086a6b1c","697cf03c89a9b118f7bdf11b1b3a6a028d7b3617d2d0ed91322c5709acf75625", + "d99b3cf3ac6f17157ac7526782a3c3b9537f89d07e069f9ce7821d74bd9cad0e","e97b62109a6303233dcd697fa8545c9fcbc0bf8ed2268fede57ddfc36d8c939c", + "70ff822066a53ad64b04885c89bbe5ce3e537cdc1f7fa0dc55317986f01d1788","b0d36b209bd0d4442b55ea2f66b5c633f522401f921f5a85ea6f113fd2988866"] + + self.assertEqual(resp['blks_hashes'], hashes) + + @responses.activate + def test_is_key_image_spent(self): + responses.add(responses.POST, self.iskeyimagespent_url, + json=self._read('test_is_key_image_spent.json'), + status=200) + + key_imgs = ['8d1bd8181bf7d857bdb281e0153d84cd55a3fcaa57c3e570f4a49f935850b5e3', '7319134bfc50668251f5b899c66b005805ee255c136f0e1cecbb0f3a912e09d4', + '8d1bd8181bf7d857bdb281e0153d84cd55a3fcaa57c3e570f4a49f935850b5e2', 'fbbd6ac46dc4905c455f3b51595da6b135a5e9a64c6c181875558649be0ab183'] + resp = self.backend.is_key_image_spent(key_imgs) + + self.assertEqual(resp['spent_status'], [1, 1, 0, 2]) + + @responses.activate + def test_send_raw_transaction(self): + pass + + @responses.activate + def test_start_mining(self): + responses.add(responses.POST, self.startmining_url, + json=self._read('test_mining.json'), + status=200) + + mining_addr = '497e4umLC7pfJ5TSSuU1QY8E1Nh5h5cWfYnvvpTrYFKiQriWfVYeVn2KH8Hpp3AeDRbCSxTvZuUZ1WYd8PGLqM4r5P5hjNQ' + resp = self.backend.start_mining(False, True, mining_addr, 4) + + self.assertEqual(resp['status'], 'OK') + + with self.assertRaises(ValueError): + self.backend.start_mining(False, True, mining_addr, -1) + + with self.assertRaises(ValueError): + self.backend.start_mining(False, True, "meepmoopthisisntarealminingaddress", 2) + + @responses.activate + def test_stop_mining(self): + responses.add(responses.POST, self.stopmining_url, + json=self._read('test_mining.json'), + status=200) + + resp = self.backend.stop_mining() + + self.assertEqual(resp['status'], 'OK') + + @responses.activate + def test_mining_status_off(self): + responses.add(responses.POST, self.miningstatus_url, + json=self._read('test_mining_status_off.json'), + status=200) + + resp = self.backend.mining_status() + + self.assertEqual(resp['active'], False) + self.assertEqual(resp['difficulty'], 250236969769) + self.assertEqual(resp['pow_algorithm'], 'RandomX') + + @responses.activate + def test_mining_status_on(self): + responses.add(responses.POST, self.miningstatus_url, + json=self._read('test_mining_status_on.json'), + status=200) + + resp = self.backend.mining_status() + + self.assertEqual(resp['active'], True) + self.assertEqual(resp['difficulty'], 252551179535) + self.assertEqual(resp['pow_algorithm'], 'RandomX') + self.assertEqual(resp['address'], "497e4umLC7pfJ5TSSuU1QY8E1Nh5h5cWfYnvvpTrYFKiQriWfVYeVn2KH8Hpp3AeDRbCSxTvZuUZ1WYd8PGLqM4r5P5hjNQ") + + @responses.activate + def test_save_bc(self): + responses.add(responses.POST, self.savebc_url, + json=self._read('test_save_bc.json'), + status=200) + + resp = self.backend.save_bc() + + self.assertEqual(resp['status'], 'OK') + + @responses.activate + def test_get_peer_list(self): + responses.add(responses.POST, self.getpeerlist_url, + json=self._read('test_get_peer_list.json'), + status=200) + + resp = self.backend.get_peer_list() + + white0 = resp['white_list'][0] + gray0 = resp['gray_list'][0] + + self.assertEqual(white0['host'], '204.8.15.5') + self.assertEqual(white0['ip'], 84871372) + self.assertEqual(white0['port'], 18080) + self.assertEqual(white0['id'], 702714784157243868) + + self.assertEqual(gray0['host'], '92.233.45.0') + self.assertEqual(gray0['ip'], 3008860) + self.assertEqual(gray0['port'], 5156) + self.assertEqual(gray0['id'], 779474923786790553) + + @responses.activate + def test_set_log_hashrate_mining(self): + responses.add(responses.POST, self.setloghashrate_url, + json=self._read('test_set_log_hash_rate_mining.json'), + status=200) + + resp = self.backend.set_log_hash_rate(True) + + self.assertEqual(resp['status'], 'OK') + + @responses.activate + def test_set_log_hashrate_notmining(self): + responses.add(responses.POST, self.setloghashrate_url, + json=self._read('test_set_log_hash_rate_notmining.json'), + status=200) + + with self.assertRaises(RPCError): + resp = self.backend.set_log_hash_rate(False) + + @responses.activate + def test_set_log_level(self): + responses.add(responses.POST, self.setloglevel_url, + json=self._read('test_set_log_level.json'), + status=200) + + resp = self.backend.set_log_level(1) + + with self.assertRaises(ValueError): + resp = self.backend.set_log_level(5) + + self.assertEqual(JSONRPCDaemon.known_log_levels(), JSONRPCDaemon._KNOWN_LOG_LEVELS) + + @responses.activate + def test_set_log_categories_default(self): + responses.add(responses.POST, self.setlogcategories_url, + json=self._read('test_set_log_categories_default.json'), + status=200) + + resp = self.backend.set_log_categories('default:INFO') + + self.assertEqual(resp['status'], 'OK') + self.assertEqual(resp['categories'], 'default:INFO') + + self.assertEqual(JSONRPCDaemon.known_log_categories(), JSONRPCDaemon._KNOWN_LOG_CATEGORIES) + + @responses.activate + def test_set_log_categories_multiple(self): + responses.add(responses.POST, self.setlogcategories_url, + json=self._read('test_set_log_categories_multiple.json'), + status=200) + + resp = self.backend.set_log_categories(['logging:INFO', 'net:FATAL']) + + self.assertEqual(resp['categories'], 'logging:INFO,net:FATAL') + self.assertEqual(resp['status'], 'OK') + + @responses.activate + def test_set_log_categories_empty(self): + responses.add(responses.POST, self.setlogcategories_url, + json=self._read('test_set_log_categories_empty.json'), + status=200) + + resp = self.backend.set_log_categories() + + self.assertEqual(resp['categories'], '') + self.assertEqual(resp['status'], 'OK') + + @responses.activate + def test_get_transaction_pool(self): + responses.add(responses.POST, self.mempool_url, + json=self._read('test_get_transaction_pool.json'), + status=200) + + resp = self.backend.get_transaction_pool() + + self.assertEqual(resp['spent_key_images'][0]['id_hash'], '1ccff101d8ee93903bde0a8ef99ebc99ccd5150f7157b93b758cd456458d4166') + self.assertEqual(resp['spent_key_images'][0]['txs_hashes'][0], '73fe0207e25d59dce5cd6f7369edf33a04ac56409eca3b28ad837c43640ef83f') + self.assertEqual(resp['transactions'][0]['id_hash'], 'ea020cf2595c017d5fd4d0d427b8ff02b1857e996136b041c0f7fd6dffc4c72c') + + @responses.activate + def test_get_transaction_pool_stats(self): + responses.add(responses.POST, self.gettransactionpoolstats_url, + json=self._read('test_get_transaction_pool_stats.json'), + status=200) + + resp = self.backend.get_transaction_pool_stats() + + self.assertEqual(resp['pool_stats']['bytes_total'], 75438) + self.assertEqual(resp['pool_stats']['txs_total'], 17) + self.assertEqual(resp['pool_stats']['histo'][0]['bytes'], 3419) + self.assertEqual(resp['pool_stats']['histo'][0]['txs'], 2) + + @responses.activate + def test_stop_daemon(self): + responses.add(responses.POST, self.stopdaemon_url, + json=self._read('test_stop_daemon.json'), + status=200) + + resp = self.backend.stop_daemon() + + self.assertEqual(resp['status'], 'OK') + + @responses.activate + def test_get_limit(self): + responses.add(responses.POST, self.getlimit_url, + json=self._read('test_get_limit.json'), + status=200) + + resp = self.backend.get_limit() + + self.assertEqual(resp['limit_down'], 8192) + self.assertEqual(resp['limit_up'], 2048) + self.assertEqual(resp['status'], 'OK') + + @responses.activate + def test_out_peers(self): + responses.add(responses.POST, self.outpeers_url, + json=self._read('test_out_peers.json'), + status=200) + + resp = self.backend.out_peers(16) + + self.assertEqual(resp['out_peers'], 16) + + with self.assertRaises(ValueError): + resp = self.backend.out_peers(2**32) + + @responses.activate + def test_out_peers_unlimited(self): + responses.add(responses.POST, self.outpeers_url, + json=self._read('test_out_peers_unlimited.json'), + status=200) + + resp = self.backend.out_peers(-1) + + self.assertEqual(resp['out_peers'], 2**32 - 1) + + @responses.activate + def test_in_peers(self): + responses.add(responses.POST, self.inpeers_url, + json=self._read('test_in_peers.json'), + status=200) + + resp = self.backend.in_peers(128) + + self.assertEqual(resp['in_peers'], 128) + + with self.assertRaises(ValueError): + resp = self.backend.in_peers(2**32) + + @responses.activate + def test_in_peers_unlimited(self): + responses.add(responses.POST, self.inpeers_url, + json=self._read('test_in_peers_unlimited.json'), + status=200) + + resp = self.backend.in_peers(-1) + + self.assertEqual(resp['in_peers'], 2**32 - 1) + + @responses.activate + def test_get_outs(self): + responses.add(responses.POST, self.getouts_url, + json=self._read('test_get_outs_multiple.json'), + status=200) + + a = [0, decimal.Decimal('0'), decimal.Decimal('20'), int(3e12)] + i = [20000, 20001, 50630, 232237] + resp = self.backend.get_outs(a, i) + + self.assertEqual(resp['outs'][0]['height'], 1224094) + self.assertEqual(resp['outs'][0]['key'], 'fc13952b8b9c193d4c875e750e88a0da8a7d348f95c019cfde93762d68298dd7') + self.assertEqual(resp['outs'][0]['mask'], 'bf99dc047048605f6e0aeebc937477ae6e9e3143e1be1b48af225b41f809e44e') + self.assertEqual(resp['outs'][0]['txid'], '687f9b1d6fa409a13e84c682e90127b1953e10efe679c114a01d7db77f474d50') + self.assertEqual(resp['outs'][0]['unlocked'], True) + + self.assertEqual(resp['outs'][3]['height'], 999999) + self.assertEqual(resp['outs'][3]['key'], 'e20315663e3d278421797c4098c828cad5220849d08c3d26fee72003d4cda698') + self.assertEqual(resp['outs'][3]['mask'], '100c6f1342b71b73edddc5492be923182f00a683488ec3a2a1c7a949cbe57768') + self.assertEqual(resp['outs'][3]['txid'], '2a5d456439f7ae27b5d26e493651c0e24e1d7e02b6d9d019c89d562ce0658472') + self.assertEqual(resp['outs'][3]['unlocked'], True) + + @responses.activate + def test_get_outs_single(self): + responses.add(responses.POST, self.getouts_url, + json=self._read('test_get_outs_single.json'), + status=200) + + resp = self.backend.get_outs(0, 10000) + + self.assertEqual(resp['outs'][0]['height'], 1222460) + self.assertEqual(resp['outs'][0]['key'], '9c7055cb5b790f1eebf10b7b8fbe01241eb736b5766d15554da7099bbcdc4b44') + self.assertEqual(resp['outs'][0]['mask'], '42e37af85cddaeccbea6fe597037c9377045a682e66661260868877b9440af70') + self.assertEqual(resp['outs'][0]['txid'], 'b357374ad4636f17520b6c2fdcf0fb5e6a1185fed2aef509b19b5100d04ae552') + self.assertEqual(resp['outs'][0]['unlocked'], True) + + @responses.activate + def test_update_check_none(self): + responses.add(responses.POST, self.update_url, + json=self._read('test_update_check_none.json'), + status=200) + + resp = self.backend.update('check') + + self.assertEqual(resp['update'], False) + self.assertEqual(resp['auto_uri'], '') + self.assertEqual(resp['hash'], '') + self.assertEqual(resp['path'], '') + self.assertEqual(resp['user_uri'], '') + self.assertEqual(resp['version'], '') + self.assertEqual(resp['status'], 'OK') + + with self.assertRaises(ValueError): + self.backend.update('badcommandrightherebuddyolpal') + + @responses.activate + def test_restricted_false(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_sync_info.json'), + status=200) + + self.assertFalse(self.backend.restricted()) + + @responses.activate + def test_restricted_true(self): + responses.add(responses.POST, self.jsonrpc_url, + json=self._read('test_method_not_found.json'), + status=200) + + self.assertTrue(self.backend.restricted()) \ No newline at end of file